@almadar/ui 5.133.0 → 5.134.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 +1709 -1358
- package/dist/avl/index.js +767 -416
- package/dist/components/index.cjs +554 -193
- package/dist/components/index.d.cts +222 -2
- package/dist/components/index.d.ts +222 -2
- package/dist/components/index.js +550 -194
- package/dist/lib/drawable/three/index.cjs +53 -1
- package/dist/lib/drawable/three/index.js +53 -1
- package/dist/lib/index.cjs +57 -0
- package/dist/lib/index.d.cts +30 -1
- package/dist/lib/index.d.ts +30 -1
- package/dist/lib/index.js +52 -1
- package/dist/marketing/index.cjs +53 -1
- package/dist/marketing/index.d.cts +6 -0
- package/dist/marketing/index.d.ts +6 -0
- package/dist/marketing/index.js +53 -1
- package/dist/providers/index.cjs +1590 -1239
- package/dist/providers/index.js +742 -391
- package/dist/runtime/index.cjs +1570 -1219
- package/dist/runtime/index.js +747 -396
- package/package.json +4 -4
package/dist/runtime/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import * as
|
|
2
|
-
import
|
|
1
|
+
import * as React83 from 'react';
|
|
2
|
+
import React83__default, { createContext, useContext, useMemo, useRef, useEffect, useCallback, Suspense, useState, useSyncExternalStore, useLayoutEffect, lazy, useId } from 'react';
|
|
3
3
|
import { EventBusContext, useTraitScopeChain, useEntitySchemaOptional, useEntitySchema, getAllPages, matchPathAmong, OrbitalProvider, TraitScopeProvider, ServerBridgeProvider, useCurrentPagePath, useGameAudioContextOptional, VerificationProvider, EntitySchemaProvider, OrbitalThemeProvider, useServerBridge } from '@almadar/ui/providers';
|
|
4
4
|
export { EntitySchemaProvider, ServerBridgeProvider, TraitContext, TraitProvider, useEntitySchema, useEntitySchemaOptional, useServerBridge, useTrait, useTraitContext } from '@almadar/ui/providers';
|
|
5
5
|
import { createLogger, setNamespaceLevel, isLogLevelEnabled } from '@almadar/logger';
|
|
@@ -928,7 +928,7 @@ var init_Box = __esm({
|
|
|
928
928
|
fixed: "fixed",
|
|
929
929
|
sticky: "sticky"
|
|
930
930
|
};
|
|
931
|
-
Box =
|
|
931
|
+
Box = React83__default.forwardRef(
|
|
932
932
|
({
|
|
933
933
|
padding,
|
|
934
934
|
paddingX,
|
|
@@ -993,7 +993,7 @@ var init_Box = __esm({
|
|
|
993
993
|
onPointerDown?.(e);
|
|
994
994
|
}, [hoverEvent, tapReveal, triggerProps, onPointerDown]);
|
|
995
995
|
const isClickable = action || onClick;
|
|
996
|
-
return
|
|
996
|
+
return React83__default.createElement(
|
|
997
997
|
Component,
|
|
998
998
|
{
|
|
999
999
|
ref,
|
|
@@ -1210,7 +1210,7 @@ var init_Icon = __esm({
|
|
|
1210
1210
|
const effectiveName = typeof icon === "string" && icon !== "" ? icon : name;
|
|
1211
1211
|
const effectiveStrokeWidth = strokeWidth != null && strokeWidth > 0 ? strokeWidth : void 0;
|
|
1212
1212
|
const family = useIconFamily();
|
|
1213
|
-
const RenderedComponent =
|
|
1213
|
+
const RenderedComponent = React83__default.useMemo(() => {
|
|
1214
1214
|
if (directIcon) return null;
|
|
1215
1215
|
return effectiveName ? resolveIconForFamily(effectiveName) : null;
|
|
1216
1216
|
}, [directIcon, effectiveName, family]);
|
|
@@ -1330,7 +1330,7 @@ var init_atlasSlice = __esm({
|
|
|
1330
1330
|
}
|
|
1331
1331
|
});
|
|
1332
1332
|
function useAtlasSliceDataUrl(asset) {
|
|
1333
|
-
const [, bump] =
|
|
1333
|
+
const [, bump] = React83.useReducer((x) => x + 1, 0);
|
|
1334
1334
|
if (!isAtlasAsset(asset)) return void 0;
|
|
1335
1335
|
const key = `${asset.atlas}#${asset.sprite}`;
|
|
1336
1336
|
const cached = sliceDataUrlCache.get(key);
|
|
@@ -1393,13 +1393,13 @@ function AtlasImage({
|
|
|
1393
1393
|
style,
|
|
1394
1394
|
"aria-hidden": ariaHidden
|
|
1395
1395
|
}) {
|
|
1396
|
-
const [, bump] =
|
|
1397
|
-
const canvasRef =
|
|
1396
|
+
const [, bump] = React83.useReducer((x) => x + 1, 0);
|
|
1397
|
+
const canvasRef = React83.useRef(null);
|
|
1398
1398
|
const sliced = isAtlasAsset(asset);
|
|
1399
1399
|
const atlas = sliced ? getAtlas(asset.atlas, bump) : void 0;
|
|
1400
1400
|
const img = sliced && asset?.url ? getSheetImage(asset.url, bump) : null;
|
|
1401
1401
|
const rect = sliced && atlas ? subRectFor(atlas, asset.sprite) : null;
|
|
1402
|
-
|
|
1402
|
+
React83.useEffect(() => {
|
|
1403
1403
|
const canvas = canvasRef.current;
|
|
1404
1404
|
if (!canvas || !img || !rect) return;
|
|
1405
1405
|
canvas.width = rect.sw;
|
|
@@ -1475,7 +1475,7 @@ function resolveIconProp(value, sizeClass) {
|
|
|
1475
1475
|
const IconComp = value;
|
|
1476
1476
|
return /* @__PURE__ */ jsx(IconComp, { className: sizeClass });
|
|
1477
1477
|
}
|
|
1478
|
-
if (
|
|
1478
|
+
if (React83__default.isValidElement(value)) {
|
|
1479
1479
|
return value;
|
|
1480
1480
|
}
|
|
1481
1481
|
if (typeof value === "object" && value !== null && isIconLike(value)) {
|
|
@@ -1552,7 +1552,7 @@ var init_Button = __esm({
|
|
|
1552
1552
|
md: "h-icon-default w-icon-default",
|
|
1553
1553
|
lg: "h-icon-default w-icon-default"
|
|
1554
1554
|
};
|
|
1555
|
-
Button =
|
|
1555
|
+
Button = React83__default.forwardRef(
|
|
1556
1556
|
({
|
|
1557
1557
|
className,
|
|
1558
1558
|
variant = "primary",
|
|
@@ -1622,7 +1622,7 @@ var Dialog;
|
|
|
1622
1622
|
var init_Dialog = __esm({
|
|
1623
1623
|
"components/core/atoms/Dialog.tsx"() {
|
|
1624
1624
|
init_cn();
|
|
1625
|
-
Dialog =
|
|
1625
|
+
Dialog = React83__default.forwardRef(
|
|
1626
1626
|
({
|
|
1627
1627
|
role = "dialog",
|
|
1628
1628
|
"aria-modal": ariaModal = true,
|
|
@@ -1645,6 +1645,61 @@ var init_Dialog = __esm({
|
|
|
1645
1645
|
}
|
|
1646
1646
|
});
|
|
1647
1647
|
|
|
1648
|
+
// lib/format.ts
|
|
1649
|
+
function humanizeFieldName(name) {
|
|
1650
|
+
return name.replace(/([a-z])([A-Z])/g, "$1 $2").replace(/([A-Z]+)([A-Z][a-z])/g, "$1 $2").replace(/[_-]/g, " ").replace(/\b\w/g, (c) => c.toUpperCase()).replace(/\b([A-Z])([A-Z]+)\b/g, (_, first, rest) => first + rest.toLowerCase()).trim();
|
|
1651
|
+
}
|
|
1652
|
+
function humanizeEnumValue(value) {
|
|
1653
|
+
return /^[a-z0-9]+(?:[_-][a-z0-9]+)+$/.test(value) ? humanizeFieldName(value) : value;
|
|
1654
|
+
}
|
|
1655
|
+
function formatDate(value) {
|
|
1656
|
+
if (!value) return "";
|
|
1657
|
+
const d = new Date(String(value));
|
|
1658
|
+
if (isNaN(d.getTime())) return String(value);
|
|
1659
|
+
return d.toLocaleDateString(void 0, { year: "numeric", month: "short", day: "numeric" });
|
|
1660
|
+
}
|
|
1661
|
+
function formatTime(value) {
|
|
1662
|
+
if (!value) return "";
|
|
1663
|
+
const d = new Date(String(value));
|
|
1664
|
+
if (isNaN(d.getTime())) return String(value);
|
|
1665
|
+
return d.toLocaleTimeString(void 0, { hour: "numeric", minute: "2-digit" });
|
|
1666
|
+
}
|
|
1667
|
+
function formatDateTime(value) {
|
|
1668
|
+
if (!value) return "";
|
|
1669
|
+
const d = new Date(String(value));
|
|
1670
|
+
if (isNaN(d.getTime())) return String(value);
|
|
1671
|
+
return `${formatDate(value)} ${formatTime(value)}`;
|
|
1672
|
+
}
|
|
1673
|
+
function asYesNo(value) {
|
|
1674
|
+
return value === false || value === 0 || String(value) === "false" ? "No" : "Yes";
|
|
1675
|
+
}
|
|
1676
|
+
function formatValue(value, format) {
|
|
1677
|
+
if (value === void 0 || value === null) return "";
|
|
1678
|
+
if (typeof value === "boolean") return asYesNo(value);
|
|
1679
|
+
switch (format) {
|
|
1680
|
+
case "date":
|
|
1681
|
+
return formatDate(value);
|
|
1682
|
+
case "time":
|
|
1683
|
+
return formatTime(value);
|
|
1684
|
+
case "datetime":
|
|
1685
|
+
return formatDateTime(value);
|
|
1686
|
+
case "currency":
|
|
1687
|
+
return typeof value === "number" ? `$${value.toFixed(2)}` : String(value);
|
|
1688
|
+
case "number":
|
|
1689
|
+
return typeof value === "number" ? value.toLocaleString() : String(value);
|
|
1690
|
+
case "percent":
|
|
1691
|
+
return typeof value === "number" ? `${Math.round(value)}%` : String(value);
|
|
1692
|
+
case "boolean":
|
|
1693
|
+
return asYesNo(value);
|
|
1694
|
+
default:
|
|
1695
|
+
return String(value);
|
|
1696
|
+
}
|
|
1697
|
+
}
|
|
1698
|
+
var init_format = __esm({
|
|
1699
|
+
"lib/format.ts"() {
|
|
1700
|
+
}
|
|
1701
|
+
});
|
|
1702
|
+
|
|
1648
1703
|
// components/core/atoms/Typography.tsx
|
|
1649
1704
|
var Typography_exports = {};
|
|
1650
1705
|
__export(Typography_exports, {
|
|
@@ -1654,6 +1709,7 @@ var variantStyles2, colorStyles, weightStyles, defaultElements, typographySizeSt
|
|
|
1654
1709
|
var init_Typography = __esm({
|
|
1655
1710
|
"components/core/atoms/Typography.tsx"() {
|
|
1656
1711
|
init_cn();
|
|
1712
|
+
init_format();
|
|
1657
1713
|
variantStyles2 = {
|
|
1658
1714
|
h1: "text-4xl font-bold tracking-tight text-foreground",
|
|
1659
1715
|
h2: "text-3xl font-bold tracking-tight text-foreground",
|
|
@@ -1741,12 +1797,17 @@ var init_Typography = __esm({
|
|
|
1741
1797
|
id,
|
|
1742
1798
|
className,
|
|
1743
1799
|
style,
|
|
1800
|
+
format,
|
|
1744
1801
|
content,
|
|
1745
1802
|
children
|
|
1746
1803
|
}) => {
|
|
1747
1804
|
const variant = variantProp ?? (level ? `h${level}` : "body1");
|
|
1748
1805
|
const Component = as || defaultElements[variant];
|
|
1749
|
-
|
|
1806
|
+
let body = children ?? content;
|
|
1807
|
+
if (format !== void 0 && format !== "none" && (typeof body === "string" || typeof body === "number" || body instanceof Date)) {
|
|
1808
|
+
body = formatValue(body, format);
|
|
1809
|
+
}
|
|
1810
|
+
return React83__default.createElement(
|
|
1750
1811
|
Component,
|
|
1751
1812
|
{
|
|
1752
1813
|
id,
|
|
@@ -1762,7 +1823,7 @@ var init_Typography = __esm({
|
|
|
1762
1823
|
),
|
|
1763
1824
|
style
|
|
1764
1825
|
},
|
|
1765
|
-
|
|
1826
|
+
body
|
|
1766
1827
|
);
|
|
1767
1828
|
};
|
|
1768
1829
|
Typography.displayName = "Typography";
|
|
@@ -2309,7 +2370,7 @@ var init_Badge = __esm({
|
|
|
2309
2370
|
md: "px-2.5 py-1 text-sm",
|
|
2310
2371
|
lg: "px-3 py-1.5 text-base"
|
|
2311
2372
|
};
|
|
2312
|
-
Badge =
|
|
2373
|
+
Badge = React83__default.forwardRef(
|
|
2313
2374
|
({ className, variant = "default", size = "sm", amount, label, icon, iconAsset, children, onRemove, removeLabel, ...props }, ref) => {
|
|
2314
2375
|
const iconSizes3 = {
|
|
2315
2376
|
sm: "h-icon-default w-icon-default",
|
|
@@ -2659,7 +2720,7 @@ var init_SvgFlow = __esm({
|
|
|
2659
2720
|
width = 100,
|
|
2660
2721
|
height = 100
|
|
2661
2722
|
}) => {
|
|
2662
|
-
const markerId =
|
|
2723
|
+
const markerId = React83__default.useMemo(() => {
|
|
2663
2724
|
flowIdCounter += 1;
|
|
2664
2725
|
return `almadar-flow-arrow-${flowIdCounter}`;
|
|
2665
2726
|
}, []);
|
|
@@ -3252,7 +3313,7 @@ var init_SvgRing = __esm({
|
|
|
3252
3313
|
width = 100,
|
|
3253
3314
|
height = 100
|
|
3254
3315
|
}) => {
|
|
3255
|
-
const gradientId =
|
|
3316
|
+
const gradientId = React83__default.useMemo(() => {
|
|
3256
3317
|
ringIdCounter += 1;
|
|
3257
3318
|
return `almadar-ring-glow-${ringIdCounter}`;
|
|
3258
3319
|
}, []);
|
|
@@ -3433,7 +3494,7 @@ var init_Input = __esm({
|
|
|
3433
3494
|
init_cn();
|
|
3434
3495
|
init_Icon();
|
|
3435
3496
|
init_useEventBus();
|
|
3436
|
-
Input =
|
|
3497
|
+
Input = React83__default.forwardRef(
|
|
3437
3498
|
({
|
|
3438
3499
|
className,
|
|
3439
3500
|
inputType,
|
|
@@ -3601,7 +3662,7 @@ var Label;
|
|
|
3601
3662
|
var init_Label = __esm({
|
|
3602
3663
|
"components/core/atoms/Label.tsx"() {
|
|
3603
3664
|
init_cn();
|
|
3604
|
-
Label =
|
|
3665
|
+
Label = React83__default.forwardRef(
|
|
3605
3666
|
({ className, required, children, ...props }, ref) => {
|
|
3606
3667
|
return /* @__PURE__ */ jsxs(
|
|
3607
3668
|
"label",
|
|
@@ -3628,7 +3689,7 @@ var init_Textarea = __esm({
|
|
|
3628
3689
|
"components/core/atoms/Textarea.tsx"() {
|
|
3629
3690
|
init_cn();
|
|
3630
3691
|
init_useEventBus();
|
|
3631
|
-
Textarea =
|
|
3692
|
+
Textarea = React83__default.forwardRef(
|
|
3632
3693
|
({ className, error, onChange, ...props }, ref) => {
|
|
3633
3694
|
const eventBus = useEventBus();
|
|
3634
3695
|
const handleChange = (e) => {
|
|
@@ -3867,7 +3928,7 @@ var init_Select = __esm({
|
|
|
3867
3928
|
init_cn();
|
|
3868
3929
|
init_Icon();
|
|
3869
3930
|
init_useEventBus();
|
|
3870
|
-
Select =
|
|
3931
|
+
Select = React83__default.forwardRef(
|
|
3871
3932
|
(props, _ref) => {
|
|
3872
3933
|
const { multiple, searchable, clearable } = props;
|
|
3873
3934
|
if (multiple || searchable || clearable) {
|
|
@@ -3884,7 +3945,7 @@ var init_Checkbox = __esm({
|
|
|
3884
3945
|
"components/core/atoms/Checkbox.tsx"() {
|
|
3885
3946
|
init_cn();
|
|
3886
3947
|
init_useEventBus();
|
|
3887
|
-
Checkbox =
|
|
3948
|
+
Checkbox = React83__default.forwardRef(
|
|
3888
3949
|
({ className, label, id, onChange, ...props }, ref) => {
|
|
3889
3950
|
const inputId = id || `checkbox-${Math.random().toString(36).substr(2, 9)}`;
|
|
3890
3951
|
const eventBus = useEventBus();
|
|
@@ -3938,7 +3999,7 @@ var init_Spinner = __esm({
|
|
|
3938
3999
|
md: "h-6 w-6",
|
|
3939
4000
|
lg: "h-8 w-8"
|
|
3940
4001
|
};
|
|
3941
|
-
Spinner =
|
|
4002
|
+
Spinner = React83__default.forwardRef(
|
|
3942
4003
|
({ className, size = "md", overlay, ...props }, ref) => {
|
|
3943
4004
|
if (overlay) {
|
|
3944
4005
|
return /* @__PURE__ */ jsx(
|
|
@@ -4028,7 +4089,7 @@ var init_Card = __esm({
|
|
|
4028
4089
|
chip: "shadow-none rounded-pill border-[length:var(--border-width)] border-border",
|
|
4029
4090
|
"tile-image-first": "p-0 overflow-hidden"
|
|
4030
4091
|
};
|
|
4031
|
-
Card =
|
|
4092
|
+
Card = React83__default.forwardRef(
|
|
4032
4093
|
({
|
|
4033
4094
|
className,
|
|
4034
4095
|
variant = "bordered",
|
|
@@ -4077,9 +4138,9 @@ var init_Card = __esm({
|
|
|
4077
4138
|
}
|
|
4078
4139
|
);
|
|
4079
4140
|
Card.displayName = "Card";
|
|
4080
|
-
CardHeader =
|
|
4141
|
+
CardHeader = React83__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", { ref, className: cn("mb-4", className), ...props }));
|
|
4081
4142
|
CardHeader.displayName = "CardHeader";
|
|
4082
|
-
CardTitle =
|
|
4143
|
+
CardTitle = React83__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
4083
4144
|
"h3",
|
|
4084
4145
|
{
|
|
4085
4146
|
ref,
|
|
@@ -4092,11 +4153,11 @@ var init_Card = __esm({
|
|
|
4092
4153
|
}
|
|
4093
4154
|
));
|
|
4094
4155
|
CardTitle.displayName = "CardTitle";
|
|
4095
|
-
CardContent =
|
|
4156
|
+
CardContent = React83__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", { ref, className: cn("", className), ...props }));
|
|
4096
4157
|
CardContent.displayName = "CardContent";
|
|
4097
4158
|
CardBody = CardContent;
|
|
4098
4159
|
CardBody.displayName = "CardBody";
|
|
4099
|
-
CardFooter =
|
|
4160
|
+
CardFooter = React83__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
4100
4161
|
"div",
|
|
4101
4162
|
{
|
|
4102
4163
|
ref,
|
|
@@ -4183,7 +4244,7 @@ var init_FilterPill = __esm({
|
|
|
4183
4244
|
md: "w-3.5 h-3.5",
|
|
4184
4245
|
lg: "w-4 h-4"
|
|
4185
4246
|
};
|
|
4186
|
-
FilterPill =
|
|
4247
|
+
FilterPill = React83__default.forwardRef(
|
|
4187
4248
|
({
|
|
4188
4249
|
className,
|
|
4189
4250
|
variant = "default",
|
|
@@ -4312,8 +4373,8 @@ var init_Avatar = __esm({
|
|
|
4312
4373
|
actionPayload
|
|
4313
4374
|
}) => {
|
|
4314
4375
|
const eventBus = useEventBus();
|
|
4315
|
-
const [imgFailed, setImgFailed] =
|
|
4316
|
-
|
|
4376
|
+
const [imgFailed, setImgFailed] = React83__default.useState(false);
|
|
4377
|
+
React83__default.useEffect(() => {
|
|
4317
4378
|
setImgFailed(false);
|
|
4318
4379
|
}, [src]);
|
|
4319
4380
|
const initials = providedInitials ?? (name ? generateInitials(name) : void 0);
|
|
@@ -4426,7 +4487,7 @@ var init_Center = __esm({
|
|
|
4426
4487
|
as: Component = "div"
|
|
4427
4488
|
}) => {
|
|
4428
4489
|
const mergedStyle = minHeight ? { minHeight, ...style } : style;
|
|
4429
|
-
return
|
|
4490
|
+
return React83__default.createElement(Component, {
|
|
4430
4491
|
className: cn(
|
|
4431
4492
|
inline ? "inline-flex" : "flex",
|
|
4432
4493
|
horizontal && "justify-center",
|
|
@@ -4694,7 +4755,7 @@ var init_Radio = __esm({
|
|
|
4694
4755
|
md: "w-2.5 h-2.5",
|
|
4695
4756
|
lg: "w-3 h-3"
|
|
4696
4757
|
};
|
|
4697
|
-
Radio =
|
|
4758
|
+
Radio = React83__default.forwardRef(
|
|
4698
4759
|
({
|
|
4699
4760
|
label,
|
|
4700
4761
|
helperText,
|
|
@@ -4711,12 +4772,12 @@ var init_Radio = __esm({
|
|
|
4711
4772
|
onChange,
|
|
4712
4773
|
...props
|
|
4713
4774
|
}, ref) => {
|
|
4714
|
-
const reactId =
|
|
4775
|
+
const reactId = React83__default.useId();
|
|
4715
4776
|
const baseId = id || `radio-${reactId}`;
|
|
4716
4777
|
const hasError = !!error;
|
|
4717
4778
|
const eventBus = useEventBus();
|
|
4718
|
-
const [selected, setSelected] =
|
|
4719
|
-
|
|
4779
|
+
const [selected, setSelected] = React83__default.useState(value);
|
|
4780
|
+
React83__default.useEffect(() => {
|
|
4720
4781
|
if (value !== void 0) setSelected(value);
|
|
4721
4782
|
}, [value]);
|
|
4722
4783
|
const pick = (next, e) => {
|
|
@@ -4898,7 +4959,7 @@ var init_Switch = __esm({
|
|
|
4898
4959
|
"components/core/atoms/Switch.tsx"() {
|
|
4899
4960
|
"use client";
|
|
4900
4961
|
init_cn();
|
|
4901
|
-
Switch =
|
|
4962
|
+
Switch = React83.forwardRef(
|
|
4902
4963
|
({
|
|
4903
4964
|
checked,
|
|
4904
4965
|
defaultChecked = false,
|
|
@@ -4909,10 +4970,10 @@ var init_Switch = __esm({
|
|
|
4909
4970
|
name,
|
|
4910
4971
|
className
|
|
4911
4972
|
}, ref) => {
|
|
4912
|
-
const [isChecked, setIsChecked] =
|
|
4973
|
+
const [isChecked, setIsChecked] = React83.useState(
|
|
4913
4974
|
checked !== void 0 ? checked : defaultChecked
|
|
4914
4975
|
);
|
|
4915
|
-
|
|
4976
|
+
React83.useEffect(() => {
|
|
4916
4977
|
if (checked !== void 0) {
|
|
4917
4978
|
setIsChecked(checked);
|
|
4918
4979
|
}
|
|
@@ -5075,7 +5136,7 @@ var init_Stack = __esm({
|
|
|
5075
5136
|
};
|
|
5076
5137
|
const isHorizontal = direction === "horizontal";
|
|
5077
5138
|
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";
|
|
5078
|
-
return
|
|
5139
|
+
return React83__default.createElement(
|
|
5079
5140
|
Component,
|
|
5080
5141
|
{
|
|
5081
5142
|
className: cn(
|
|
@@ -5275,7 +5336,7 @@ var Aside;
|
|
|
5275
5336
|
var init_Aside = __esm({
|
|
5276
5337
|
"components/core/atoms/Aside.tsx"() {
|
|
5277
5338
|
init_cn();
|
|
5278
|
-
Aside =
|
|
5339
|
+
Aside = React83__default.forwardRef(
|
|
5279
5340
|
({ className, children, ...rest }, ref) => /* @__PURE__ */ jsx("aside", { ref, className: cn(className), ...rest, children })
|
|
5280
5341
|
);
|
|
5281
5342
|
Aside.displayName = "Aside";
|
|
@@ -5354,9 +5415,9 @@ var init_LawReferenceTooltip = __esm({
|
|
|
5354
5415
|
className
|
|
5355
5416
|
}) => {
|
|
5356
5417
|
const { t } = useTranslate();
|
|
5357
|
-
const [isVisible, setIsVisible] =
|
|
5358
|
-
const timeoutRef =
|
|
5359
|
-
const triggerRef =
|
|
5418
|
+
const [isVisible, setIsVisible] = React83__default.useState(false);
|
|
5419
|
+
const timeoutRef = React83__default.useRef(null);
|
|
5420
|
+
const triggerRef = React83__default.useRef(null);
|
|
5360
5421
|
const handleMouseEnter = () => {
|
|
5361
5422
|
if (timeoutRef.current) clearTimeout(timeoutRef.current);
|
|
5362
5423
|
timeoutRef.current = setTimeout(() => setIsVisible(true), 200);
|
|
@@ -5367,7 +5428,7 @@ var init_LawReferenceTooltip = __esm({
|
|
|
5367
5428
|
};
|
|
5368
5429
|
const { revealed, triggerProps } = useTapReveal({ refs: [triggerRef] });
|
|
5369
5430
|
const open = isVisible || revealed;
|
|
5370
|
-
|
|
5431
|
+
React83__default.useEffect(() => {
|
|
5371
5432
|
return () => {
|
|
5372
5433
|
if (timeoutRef.current) clearTimeout(timeoutRef.current);
|
|
5373
5434
|
};
|
|
@@ -5577,7 +5638,7 @@ var init_StatusDot = __esm({
|
|
|
5577
5638
|
md: "w-2.5 h-2.5",
|
|
5578
5639
|
lg: "w-3 h-3"
|
|
5579
5640
|
};
|
|
5580
|
-
StatusDot =
|
|
5641
|
+
StatusDot = React83__default.forwardRef(
|
|
5581
5642
|
({ className, status = "offline", pulse = false, size = "md", label, ...props }, ref) => {
|
|
5582
5643
|
return /* @__PURE__ */ jsx(
|
|
5583
5644
|
"span",
|
|
@@ -5631,7 +5692,7 @@ var init_TrendIndicator = __esm({
|
|
|
5631
5692
|
down: "trending-down",
|
|
5632
5693
|
flat: "arrow-right"
|
|
5633
5694
|
};
|
|
5634
|
-
TrendIndicator =
|
|
5695
|
+
TrendIndicator = React83__default.forwardRef(
|
|
5635
5696
|
({
|
|
5636
5697
|
className,
|
|
5637
5698
|
value,
|
|
@@ -5700,7 +5761,7 @@ var init_RangeSlider = __esm({
|
|
|
5700
5761
|
md: "w-4 h-4",
|
|
5701
5762
|
lg: "w-5 h-5"
|
|
5702
5763
|
};
|
|
5703
|
-
RangeSlider =
|
|
5764
|
+
RangeSlider = React83__default.forwardRef(
|
|
5704
5765
|
({
|
|
5705
5766
|
className,
|
|
5706
5767
|
min = 0,
|
|
@@ -6276,7 +6337,7 @@ var init_ContentSection = __esm({
|
|
|
6276
6337
|
md: "py-16",
|
|
6277
6338
|
lg: "py-24"
|
|
6278
6339
|
};
|
|
6279
|
-
ContentSection =
|
|
6340
|
+
ContentSection = React83__default.forwardRef(
|
|
6280
6341
|
({ children, background = "default", padding = "lg", id, className }, ref) => {
|
|
6281
6342
|
return /* @__PURE__ */ jsx(
|
|
6282
6343
|
Box,
|
|
@@ -6810,7 +6871,7 @@ var init_AnimatedReveal = __esm({
|
|
|
6810
6871
|
"scale-up": { opacity: 1, transform: "scale(1) translateY(0)" },
|
|
6811
6872
|
"none": {}
|
|
6812
6873
|
};
|
|
6813
|
-
AnimatedReveal =
|
|
6874
|
+
AnimatedReveal = React83__default.forwardRef(
|
|
6814
6875
|
({
|
|
6815
6876
|
trigger = "scroll",
|
|
6816
6877
|
animation = "fade-up",
|
|
@@ -6970,7 +7031,7 @@ var init_AnimatedGraphic = __esm({
|
|
|
6970
7031
|
"components/marketing/atoms/AnimatedGraphic.tsx"() {
|
|
6971
7032
|
"use client";
|
|
6972
7033
|
init_cn();
|
|
6973
|
-
AnimatedGraphic =
|
|
7034
|
+
AnimatedGraphic = React83__default.forwardRef(
|
|
6974
7035
|
({
|
|
6975
7036
|
src,
|
|
6976
7037
|
svgContent,
|
|
@@ -6993,7 +7054,7 @@ var init_AnimatedGraphic = __esm({
|
|
|
6993
7054
|
const fetchedSvg = useFetchedSvg(svgContent ? void 0 : src);
|
|
6994
7055
|
const resolvedSvg = svgContent ?? fetchedSvg;
|
|
6995
7056
|
const prevAnimateRef = useRef(animate);
|
|
6996
|
-
const setRef =
|
|
7057
|
+
const setRef = React83__default.useCallback(
|
|
6997
7058
|
(node) => {
|
|
6998
7059
|
containerRef.current = node;
|
|
6999
7060
|
if (typeof ref === "function") ref(node);
|
|
@@ -7721,9 +7782,9 @@ function ControlButton({
|
|
|
7721
7782
|
className
|
|
7722
7783
|
}) {
|
|
7723
7784
|
const eventBus = useEventBus();
|
|
7724
|
-
const [isPressed, setIsPressed] =
|
|
7785
|
+
const [isPressed, setIsPressed] = React83.useState(false);
|
|
7725
7786
|
const actualPressed = pressed ?? isPressed;
|
|
7726
|
-
const handlePointerDown =
|
|
7787
|
+
const handlePointerDown = React83.useCallback(
|
|
7727
7788
|
(e) => {
|
|
7728
7789
|
e.preventDefault();
|
|
7729
7790
|
if (disabled) return;
|
|
@@ -7733,7 +7794,7 @@ function ControlButton({
|
|
|
7733
7794
|
},
|
|
7734
7795
|
[disabled, pressEvent, eventBus, onPress]
|
|
7735
7796
|
);
|
|
7736
|
-
const handlePointerUp =
|
|
7797
|
+
const handlePointerUp = React83.useCallback(
|
|
7737
7798
|
(e) => {
|
|
7738
7799
|
e.preventDefault();
|
|
7739
7800
|
if (disabled) return;
|
|
@@ -7743,7 +7804,7 @@ function ControlButton({
|
|
|
7743
7804
|
},
|
|
7744
7805
|
[disabled, releaseEvent, eventBus, onRelease]
|
|
7745
7806
|
);
|
|
7746
|
-
const handlePointerLeave =
|
|
7807
|
+
const handlePointerLeave = React83.useCallback(
|
|
7747
7808
|
(e) => {
|
|
7748
7809
|
if (isPressed) {
|
|
7749
7810
|
setIsPressed(false);
|
|
@@ -7814,7 +7875,7 @@ var init_ControlButton = __esm({
|
|
|
7814
7875
|
ControlButton.displayName = "ControlButton";
|
|
7815
7876
|
}
|
|
7816
7877
|
});
|
|
7817
|
-
function
|
|
7878
|
+
function formatTime2(seconds, format) {
|
|
7818
7879
|
const clamped = Math.max(0, Math.floor(seconds));
|
|
7819
7880
|
if (format === "ss") {
|
|
7820
7881
|
return `${clamped}s`;
|
|
@@ -7851,7 +7912,7 @@ function TimerDisplay({
|
|
|
7851
7912
|
),
|
|
7852
7913
|
children: [
|
|
7853
7914
|
iconAsset && /* @__PURE__ */ jsx(GameIcon, { assetUrl: iconAsset, icon: "image", size: 16, className: "w-4 h-4 object-contain flex-shrink-0" }),
|
|
7854
|
-
|
|
7915
|
+
formatTime2(seconds, format)
|
|
7855
7916
|
]
|
|
7856
7917
|
}
|
|
7857
7918
|
);
|
|
@@ -7984,6 +8045,210 @@ var init_ChoiceButton = __esm({
|
|
|
7984
8045
|
ChoiceButton.displayName = "ChoiceButton";
|
|
7985
8046
|
}
|
|
7986
8047
|
});
|
|
8048
|
+
function SvgStage({
|
|
8049
|
+
cols,
|
|
8050
|
+
rows,
|
|
8051
|
+
tileSize = 32,
|
|
8052
|
+
background = "var(--color-background)",
|
|
8053
|
+
tileClickEvent,
|
|
8054
|
+
tileHoverEvent,
|
|
8055
|
+
tileLeaveEvent,
|
|
8056
|
+
keyMap,
|
|
8057
|
+
keyUpMap,
|
|
8058
|
+
className,
|
|
8059
|
+
children
|
|
8060
|
+
}) {
|
|
8061
|
+
const eventBus = useEventBus();
|
|
8062
|
+
const svgRef = useRef(null);
|
|
8063
|
+
const pointerDownRef = useRef(null);
|
|
8064
|
+
const cellFromClient = useCallback((clientX, clientY) => {
|
|
8065
|
+
const svg = svgRef.current;
|
|
8066
|
+
if (!svg) return null;
|
|
8067
|
+
const rect = svg.getBoundingClientRect();
|
|
8068
|
+
if (rect.width === 0 || rect.height === 0) return null;
|
|
8069
|
+
const vbW = cols * tileSize;
|
|
8070
|
+
const vbH = rows * tileSize;
|
|
8071
|
+
const meet = Math.min(rect.width / vbW, rect.height / vbH);
|
|
8072
|
+
const offsetX = (rect.width - vbW * meet) / 2;
|
|
8073
|
+
const offsetY = (rect.height - vbH * meet) / 2;
|
|
8074
|
+
const svgX = (clientX - rect.left - offsetX) / meet;
|
|
8075
|
+
const svgY = (clientY - rect.top - offsetY) / meet;
|
|
8076
|
+
return {
|
|
8077
|
+
x: Math.min(Math.max(Math.floor(svgX / tileSize), 0), cols - 1),
|
|
8078
|
+
y: Math.min(Math.max(Math.floor(svgY / tileSize), 0), rows - 1)
|
|
8079
|
+
};
|
|
8080
|
+
}, [cols, rows, tileSize]);
|
|
8081
|
+
const handlePointerDown = useCallback((e) => {
|
|
8082
|
+
pointerDownRef.current = { clientX: e.clientX, clientY: e.clientY };
|
|
8083
|
+
}, []);
|
|
8084
|
+
const handlePointerUp = useCallback((e) => {
|
|
8085
|
+
const down = pointerDownRef.current;
|
|
8086
|
+
pointerDownRef.current = null;
|
|
8087
|
+
if (!tileClickEvent) return;
|
|
8088
|
+
if (down && Math.hypot(e.clientX - down.clientX, e.clientY - down.clientY) > 5) return;
|
|
8089
|
+
const cell = cellFromClient(e.clientX, e.clientY);
|
|
8090
|
+
if (cell) eventBus.emit(`UI:${tileClickEvent}`, cell);
|
|
8091
|
+
}, [cellFromClient, tileClickEvent, eventBus]);
|
|
8092
|
+
const handlePointerMove = useCallback((e) => {
|
|
8093
|
+
if (!tileHoverEvent) return;
|
|
8094
|
+
const cell = cellFromClient(e.clientX, e.clientY);
|
|
8095
|
+
if (cell) eventBus.emit(`UI:${tileHoverEvent}`, cell);
|
|
8096
|
+
}, [cellFromClient, tileHoverEvent, eventBus]);
|
|
8097
|
+
const handlePointerLeave = useCallback(() => {
|
|
8098
|
+
pointerDownRef.current = null;
|
|
8099
|
+
if (tileLeaveEvent) eventBus.emit(`UI:${tileLeaveEvent}`, {});
|
|
8100
|
+
}, [tileLeaveEvent, eventBus]);
|
|
8101
|
+
useEffect(() => {
|
|
8102
|
+
if (!keyMap && !keyUpMap) return;
|
|
8103
|
+
const onDown = (e) => {
|
|
8104
|
+
const ev = keyMap?.[e.code];
|
|
8105
|
+
if (ev) {
|
|
8106
|
+
eventBus.emit(`UI:${ev}`, {});
|
|
8107
|
+
e.preventDefault();
|
|
8108
|
+
}
|
|
8109
|
+
};
|
|
8110
|
+
const onUp = (e) => {
|
|
8111
|
+
const ev = keyUpMap?.[e.code];
|
|
8112
|
+
if (ev) eventBus.emit(`UI:${ev}`, {});
|
|
8113
|
+
};
|
|
8114
|
+
window.addEventListener("keydown", onDown);
|
|
8115
|
+
window.addEventListener("keyup", onUp);
|
|
8116
|
+
return () => {
|
|
8117
|
+
window.removeEventListener("keydown", onDown);
|
|
8118
|
+
window.removeEventListener("keyup", onUp);
|
|
8119
|
+
};
|
|
8120
|
+
}, [keyMap, keyUpMap, eventBus]);
|
|
8121
|
+
useEffect(() => {
|
|
8122
|
+
if (!keyMap && !keyUpMap) return;
|
|
8123
|
+
svgRef.current?.focus();
|
|
8124
|
+
}, [keyMap, keyUpMap]);
|
|
8125
|
+
const stageContext = useMemo(() => ({ tileSize }), [tileSize]);
|
|
8126
|
+
return /* @__PURE__ */ jsxs(
|
|
8127
|
+
"svg",
|
|
8128
|
+
{
|
|
8129
|
+
ref: svgRef,
|
|
8130
|
+
"data-testid": "svg-stage",
|
|
8131
|
+
viewBox: `0 0 ${cols * tileSize} ${rows * tileSize}`,
|
|
8132
|
+
preserveAspectRatio: "xMidYMid meet",
|
|
8133
|
+
className: cn("block h-full w-full", className),
|
|
8134
|
+
tabIndex: keyMap || keyUpMap ? 0 : void 0,
|
|
8135
|
+
onPointerDown: handlePointerDown,
|
|
8136
|
+
onPointerMove: handlePointerMove,
|
|
8137
|
+
onPointerUp: handlePointerUp,
|
|
8138
|
+
onPointerLeave: handlePointerLeave,
|
|
8139
|
+
children: [
|
|
8140
|
+
/* @__PURE__ */ jsx("rect", { width: cols * tileSize, height: rows * tileSize, fill: background }),
|
|
8141
|
+
/* @__PURE__ */ jsx(SvgStageContext.Provider, { value: stageContext, children })
|
|
8142
|
+
]
|
|
8143
|
+
}
|
|
8144
|
+
);
|
|
8145
|
+
}
|
|
8146
|
+
var SvgStageContext;
|
|
8147
|
+
var init_SvgStage = __esm({
|
|
8148
|
+
"components/game/molecules/SvgStage.tsx"() {
|
|
8149
|
+
"use client";
|
|
8150
|
+
init_cn();
|
|
8151
|
+
init_useEventBus();
|
|
8152
|
+
SvgStageContext = React83.createContext({ tileSize: 1 });
|
|
8153
|
+
SvgStage.displayName = "SvgStage";
|
|
8154
|
+
}
|
|
8155
|
+
});
|
|
8156
|
+
function SvgDrawShape({
|
|
8157
|
+
shape,
|
|
8158
|
+
x,
|
|
8159
|
+
y,
|
|
8160
|
+
width,
|
|
8161
|
+
height,
|
|
8162
|
+
radius,
|
|
8163
|
+
radiusY,
|
|
8164
|
+
points,
|
|
8165
|
+
d,
|
|
8166
|
+
x2,
|
|
8167
|
+
y2,
|
|
8168
|
+
fill,
|
|
8169
|
+
stroke,
|
|
8170
|
+
strokeWidth,
|
|
8171
|
+
opacity,
|
|
8172
|
+
className
|
|
8173
|
+
}) {
|
|
8174
|
+
const { tileSize } = useContext(SvgStageContext);
|
|
8175
|
+
const cell = (v) => v === void 0 ? void 0 : v * tileSize;
|
|
8176
|
+
const paint = {
|
|
8177
|
+
fill: fill ?? (stroke === void 0 ? "var(--color-primary)" : "none"),
|
|
8178
|
+
stroke,
|
|
8179
|
+
strokeWidth,
|
|
8180
|
+
opacity,
|
|
8181
|
+
className
|
|
8182
|
+
};
|
|
8183
|
+
return /* @__PURE__ */ jsxs("g", { transform: `translate(${x * tileSize} ${y * tileSize})`, children: [
|
|
8184
|
+
shape === "rect" && /* @__PURE__ */ jsx("rect", { width: cell(width), height: cell(height), ...paint }),
|
|
8185
|
+
shape === "circle" && /* @__PURE__ */ jsx("circle", { r: cell(radius), ...paint }),
|
|
8186
|
+
shape === "ellipse" && /* @__PURE__ */ jsx("ellipse", { rx: cell(radius), ry: cell(radiusY ?? radius), ...paint }),
|
|
8187
|
+
shape === "polygon" && /* @__PURE__ */ jsx("polygon", { points, ...paint }),
|
|
8188
|
+
shape === "polyline" && /* @__PURE__ */ jsx("polyline", { points, ...paint }),
|
|
8189
|
+
shape === "path" && /* @__PURE__ */ jsx("path", { d, ...paint }),
|
|
8190
|
+
shape === "line" && /* @__PURE__ */ jsx("line", { x2: cell(x2), y2: cell(y2), ...paint })
|
|
8191
|
+
] });
|
|
8192
|
+
}
|
|
8193
|
+
var init_SvgDrawShape = __esm({
|
|
8194
|
+
"components/game/atoms/SvgDrawShape.tsx"() {
|
|
8195
|
+
"use client";
|
|
8196
|
+
init_SvgStage();
|
|
8197
|
+
SvgDrawShape.displayName = "SvgDrawShape";
|
|
8198
|
+
}
|
|
8199
|
+
});
|
|
8200
|
+
function SvgDrawGroup({
|
|
8201
|
+
x = 0,
|
|
8202
|
+
y = 0,
|
|
8203
|
+
scale,
|
|
8204
|
+
rotate,
|
|
8205
|
+
opacity,
|
|
8206
|
+
className,
|
|
8207
|
+
children
|
|
8208
|
+
}) {
|
|
8209
|
+
const { tileSize } = useContext(SvgStageContext);
|
|
8210
|
+
const transforms = [`translate(${x * tileSize} ${y * tileSize})`];
|
|
8211
|
+
if (rotate !== void 0) transforms.push(`rotate(${rotate})`);
|
|
8212
|
+
if (scale !== void 0) transforms.push(`scale(${scale})`);
|
|
8213
|
+
return /* @__PURE__ */ jsx("g", { transform: transforms.join(" "), opacity, className, children });
|
|
8214
|
+
}
|
|
8215
|
+
var init_SvgDrawGroup = __esm({
|
|
8216
|
+
"components/game/atoms/SvgDrawGroup.tsx"() {
|
|
8217
|
+
"use client";
|
|
8218
|
+
init_SvgStage();
|
|
8219
|
+
SvgDrawGroup.displayName = "SvgDrawGroup";
|
|
8220
|
+
}
|
|
8221
|
+
});
|
|
8222
|
+
function SvgDrawText({
|
|
8223
|
+
x,
|
|
8224
|
+
y,
|
|
8225
|
+
text,
|
|
8226
|
+
size = 12,
|
|
8227
|
+
fill = "var(--color-foreground)",
|
|
8228
|
+
anchor = "middle",
|
|
8229
|
+
className
|
|
8230
|
+
}) {
|
|
8231
|
+
const { tileSize } = useContext(SvgStageContext);
|
|
8232
|
+
return /* @__PURE__ */ jsx(
|
|
8233
|
+
"text",
|
|
8234
|
+
{
|
|
8235
|
+
x: x * tileSize,
|
|
8236
|
+
y: y * tileSize,
|
|
8237
|
+
fontSize: size,
|
|
8238
|
+
fill,
|
|
8239
|
+
textAnchor: anchor,
|
|
8240
|
+
className,
|
|
8241
|
+
children: text
|
|
8242
|
+
}
|
|
8243
|
+
);
|
|
8244
|
+
}
|
|
8245
|
+
var init_SvgDrawText = __esm({
|
|
8246
|
+
"components/game/atoms/SvgDrawText.tsx"() {
|
|
8247
|
+
"use client";
|
|
8248
|
+
init_SvgStage();
|
|
8249
|
+
SvgDrawText.displayName = "SvgDrawText";
|
|
8250
|
+
}
|
|
8251
|
+
});
|
|
7987
8252
|
function ControlGrid({
|
|
7988
8253
|
kind,
|
|
7989
8254
|
buttons = DEFAULT_BUTTONS,
|
|
@@ -8001,8 +8266,8 @@ function ControlGrid({
|
|
|
8001
8266
|
className
|
|
8002
8267
|
}) {
|
|
8003
8268
|
const eventBus = useEventBus();
|
|
8004
|
-
const [active, setActive] =
|
|
8005
|
-
const handlePress =
|
|
8269
|
+
const [active, setActive] = React83.useState(/* @__PURE__ */ new Set());
|
|
8270
|
+
const handlePress = React83.useCallback(
|
|
8006
8271
|
(id) => {
|
|
8007
8272
|
setActive((prev) => new Set(prev).add(id));
|
|
8008
8273
|
if (actionEvent) eventBus.emit(`UI:${actionEvent}`, { id, pressed: true });
|
|
@@ -8016,7 +8281,7 @@ function ControlGrid({
|
|
|
8016
8281
|
},
|
|
8017
8282
|
[kind, actionEvent, directionEvent, directionEvents, eventBus, onAction, onDirection]
|
|
8018
8283
|
);
|
|
8019
|
-
const handleRelease =
|
|
8284
|
+
const handleRelease = React83.useCallback(
|
|
8020
8285
|
(id) => {
|
|
8021
8286
|
setActive((prev) => {
|
|
8022
8287
|
const next = new Set(prev);
|
|
@@ -8374,7 +8639,7 @@ function GameMenu({
|
|
|
8374
8639
|
}) {
|
|
8375
8640
|
const resolvedOptions = (options?.length ? options : void 0) ?? (menuItems?.length ? menuItems : void 0) ?? DEFAULT_MENU_OPTIONS;
|
|
8376
8641
|
const eventBus = useEventBus();
|
|
8377
|
-
const handleOptionClick =
|
|
8642
|
+
const handleOptionClick = React83.useCallback(
|
|
8378
8643
|
(option) => {
|
|
8379
8644
|
if (option.event) {
|
|
8380
8645
|
eventBus.emit(`UI:${option.event}`, { option });
|
|
@@ -8610,7 +8875,7 @@ function StateGraph({
|
|
|
8610
8875
|
}) {
|
|
8611
8876
|
const eventBus = useEventBus();
|
|
8612
8877
|
const nodes = states ?? [];
|
|
8613
|
-
const positions =
|
|
8878
|
+
const positions = React83.useMemo(() => layoutStates(nodes, width, height), [nodes, width, height]);
|
|
8614
8879
|
return /* @__PURE__ */ jsxs(
|
|
8615
8880
|
Box,
|
|
8616
8881
|
{
|
|
@@ -8681,8 +8946,8 @@ function MiniMap({
|
|
|
8681
8946
|
tileAssets,
|
|
8682
8947
|
unitAssets
|
|
8683
8948
|
}) {
|
|
8684
|
-
const canvasRef =
|
|
8685
|
-
const imgCacheRef =
|
|
8949
|
+
const canvasRef = React83.useRef(null);
|
|
8950
|
+
const imgCacheRef = React83.useRef(/* @__PURE__ */ new Map());
|
|
8686
8951
|
function loadImg(url) {
|
|
8687
8952
|
const cached = imgCacheRef.current.get(url);
|
|
8688
8953
|
if (cached) return cached.complete ? cached : null;
|
|
@@ -8697,7 +8962,7 @@ function MiniMap({
|
|
|
8697
8962
|
imgCacheRef.current.set(url, img);
|
|
8698
8963
|
return null;
|
|
8699
8964
|
}
|
|
8700
|
-
|
|
8965
|
+
React83.useEffect(() => {
|
|
8701
8966
|
const canvas = canvasRef.current;
|
|
8702
8967
|
if (!canvas) return;
|
|
8703
8968
|
const ctx = canvas.getContext("2d");
|
|
@@ -9902,6 +10167,32 @@ var init_Canvas = __esm({
|
|
|
9902
10167
|
Canvas.displayName = "Canvas";
|
|
9903
10168
|
}
|
|
9904
10169
|
});
|
|
10170
|
+
function SvgDrawShapeLayer({
|
|
10171
|
+
items,
|
|
10172
|
+
fill,
|
|
10173
|
+
stroke,
|
|
10174
|
+
strokeWidth,
|
|
10175
|
+
opacity
|
|
10176
|
+
}) {
|
|
10177
|
+
return /* @__PURE__ */ jsx("g", { children: items.map(({ id, ...shape }) => /* @__PURE__ */ jsx(
|
|
10178
|
+
SvgDrawShape,
|
|
10179
|
+
{
|
|
10180
|
+
...shape,
|
|
10181
|
+
fill: shape.fill ?? fill,
|
|
10182
|
+
stroke: shape.stroke ?? stroke,
|
|
10183
|
+
strokeWidth: shape.strokeWidth ?? strokeWidth,
|
|
10184
|
+
opacity: shape.opacity ?? opacity
|
|
10185
|
+
},
|
|
10186
|
+
id
|
|
10187
|
+
)) });
|
|
10188
|
+
}
|
|
10189
|
+
var init_SvgDrawShapeLayer = __esm({
|
|
10190
|
+
"components/game/molecules/SvgDrawShapeLayer.tsx"() {
|
|
10191
|
+
"use client";
|
|
10192
|
+
init_SvgDrawShape();
|
|
10193
|
+
SvgDrawShapeLayer.displayName = "SvgDrawShapeLayer";
|
|
10194
|
+
}
|
|
10195
|
+
});
|
|
9905
10196
|
function GameAudioToggle({
|
|
9906
10197
|
size = "sm",
|
|
9907
10198
|
className,
|
|
@@ -10018,7 +10309,7 @@ function LinearView({
|
|
|
10018
10309
|
/* @__PURE__ */ jsx(HStack, { className: "flex-wrap items-center", gap: "xs", children: trait.states.map((state, i) => {
|
|
10019
10310
|
const isDone = i < currentIdx;
|
|
10020
10311
|
const isCurrent = i === currentIdx;
|
|
10021
|
-
return /* @__PURE__ */ jsxs(
|
|
10312
|
+
return /* @__PURE__ */ jsxs(React83__default.Fragment, { children: [
|
|
10022
10313
|
i > 0 && /* @__PURE__ */ jsx(
|
|
10023
10314
|
Typography,
|
|
10024
10315
|
{
|
|
@@ -10553,7 +10844,7 @@ function SequenceBar({
|
|
|
10553
10844
|
else onSlotRemove?.(index);
|
|
10554
10845
|
}, [emit, slotRemoveEvent, onSlotRemove, playing]);
|
|
10555
10846
|
const paddedSlots = Array.from({ length: maxSlots }, (_, i) => slots[i]);
|
|
10556
|
-
return /* @__PURE__ */ jsx(HStack, { className: cn("items-center", className), gap: "sm", children: paddedSlots.map((slot, i) => /* @__PURE__ */ jsxs(
|
|
10847
|
+
return /* @__PURE__ */ jsx(HStack, { className: cn("items-center", className), gap: "sm", children: paddedSlots.map((slot, i) => /* @__PURE__ */ jsxs(React83__default.Fragment, { children: [
|
|
10557
10848
|
i > 0 && /* @__PURE__ */ jsx(
|
|
10558
10849
|
Typography,
|
|
10559
10850
|
{
|
|
@@ -11202,7 +11493,7 @@ var init_ErrorBoundary = __esm({
|
|
|
11202
11493
|
}
|
|
11203
11494
|
);
|
|
11204
11495
|
};
|
|
11205
|
-
ErrorBoundary = class extends
|
|
11496
|
+
ErrorBoundary = class extends React83__default.Component {
|
|
11206
11497
|
constructor(props) {
|
|
11207
11498
|
super(props);
|
|
11208
11499
|
__publicField(this, "reset", () => {
|
|
@@ -11471,7 +11762,7 @@ var init_Container = __esm({
|
|
|
11471
11762
|
as: Component = "div"
|
|
11472
11763
|
}) => {
|
|
11473
11764
|
const resolvedSize = maxWidth ?? size ?? "lg";
|
|
11474
|
-
return
|
|
11765
|
+
return React83__default.createElement(
|
|
11475
11766
|
Component,
|
|
11476
11767
|
{
|
|
11477
11768
|
className: cn(
|
|
@@ -14436,7 +14727,7 @@ var init_CodeBlock = __esm({
|
|
|
14436
14727
|
DIFF_STYLE_FALLBACK = { bg: "", prefix: " ", text: "text-foreground" };
|
|
14437
14728
|
LINE_PROPS_FN = (n) => ({ "data-line": String(n - 1) });
|
|
14438
14729
|
HIDDEN_LINE_NUMBERS = { display: "none" };
|
|
14439
|
-
CodeBlock =
|
|
14730
|
+
CodeBlock = React83__default.memo(
|
|
14440
14731
|
({
|
|
14441
14732
|
code: rawCode,
|
|
14442
14733
|
language = "text",
|
|
@@ -15024,7 +15315,7 @@ var init_MarkdownContent = __esm({
|
|
|
15024
15315
|
init_Box();
|
|
15025
15316
|
init_CodeBlock();
|
|
15026
15317
|
init_cn();
|
|
15027
|
-
MarkdownContent =
|
|
15318
|
+
MarkdownContent = React83__default.memo(
|
|
15028
15319
|
({ content, direction = "ltr", className }) => {
|
|
15029
15320
|
const { t: _t } = useTranslate();
|
|
15030
15321
|
const safeContent = typeof content === "string" ? content : String(content ?? "");
|
|
@@ -16301,7 +16592,7 @@ var init_StateMachineView = __esm({
|
|
|
16301
16592
|
style: { top: title ? 30 : 0 },
|
|
16302
16593
|
children: [
|
|
16303
16594
|
entity && /* @__PURE__ */ jsx(EntityBox, { entity, config }),
|
|
16304
|
-
states.map((state) => renderStateNode ? /* @__PURE__ */ jsx(
|
|
16595
|
+
states.map((state) => renderStateNode ? /* @__PURE__ */ jsx(React83__default.Fragment, { children: renderStateNode(state, config) }, state.id) : /* @__PURE__ */ jsx(
|
|
16305
16596
|
StateNode2,
|
|
16306
16597
|
{
|
|
16307
16598
|
state,
|
|
@@ -18979,9 +19270,6 @@ function normalizeFields(fields) {
|
|
|
18979
19270
|
if (!fields) return [];
|
|
18980
19271
|
return fields.map((f3) => typeof f3 === "string" ? f3 : f3.key ?? f3.name ?? "");
|
|
18981
19272
|
}
|
|
18982
|
-
function fieldLabel(key) {
|
|
18983
|
-
return key.replace(/([a-z])([A-Z])/g, "$1 $2").replace(/[_-]/g, " ").replace(/\b\w/g, (c) => c.toUpperCase());
|
|
18984
|
-
}
|
|
18985
19273
|
function asBooleanValue(value) {
|
|
18986
19274
|
if (typeof value === "boolean") return value;
|
|
18987
19275
|
if (value === "true") return true;
|
|
@@ -18992,12 +19280,6 @@ function isDateField(key) {
|
|
|
18992
19280
|
const lower = key.toLowerCase();
|
|
18993
19281
|
return lower.includes("date") || lower.includes("time") || lower.endsWith("at") || lower.endsWith("_at");
|
|
18994
19282
|
}
|
|
18995
|
-
function formatDate(value) {
|
|
18996
|
-
if (!value) return "";
|
|
18997
|
-
const d = new Date(String(value));
|
|
18998
|
-
if (isNaN(d.getTime())) return String(value);
|
|
18999
|
-
return d.toLocaleDateString(void 0, { year: "numeric", month: "short", day: "numeric" });
|
|
19000
|
-
}
|
|
19001
19283
|
function statusVariant(value) {
|
|
19002
19284
|
const v = value.toLowerCase();
|
|
19003
19285
|
if (["active", "completed", "done", "approved", "published", "resolved", "open"].includes(v)) return "success";
|
|
@@ -19006,11 +19288,12 @@ function statusVariant(value) {
|
|
|
19006
19288
|
if (["new", "created", "scheduled", "queued"].includes(v)) return "info";
|
|
19007
19289
|
return "default";
|
|
19008
19290
|
}
|
|
19009
|
-
var STATUS_FIELDS, gapStyles3, alignStyles2, CardGrid;
|
|
19291
|
+
var fieldLabel, STATUS_FIELDS, gapStyles3, alignStyles2, CardGrid;
|
|
19010
19292
|
var init_CardGrid = __esm({
|
|
19011
19293
|
"components/core/organisms/CardGrid.tsx"() {
|
|
19012
19294
|
"use client";
|
|
19013
19295
|
init_cn();
|
|
19296
|
+
init_format();
|
|
19014
19297
|
init_getNestedValue();
|
|
19015
19298
|
init_useEventBus();
|
|
19016
19299
|
init_atoms();
|
|
@@ -19019,6 +19302,7 @@ var init_CardGrid = __esm({
|
|
|
19019
19302
|
init_Typography();
|
|
19020
19303
|
init_Stack();
|
|
19021
19304
|
init_Pagination();
|
|
19305
|
+
fieldLabel = humanizeFieldName;
|
|
19022
19306
|
STATUS_FIELDS = /* @__PURE__ */ new Set(["status", "state", "priority", "type", "category", "role", "level", "tier"]);
|
|
19023
19307
|
gapStyles3 = {
|
|
19024
19308
|
none: "gap-0",
|
|
@@ -19526,7 +19810,7 @@ var init_CaseStudyOrganism = __esm({
|
|
|
19526
19810
|
CaseStudyOrganism.displayName = "CaseStudyOrganism";
|
|
19527
19811
|
}
|
|
19528
19812
|
});
|
|
19529
|
-
var CHART_COLORS, seriesColor, monthFormatter, formatTimeLabel, BarChart, PieChart, LineChart, ScatterChart, LOOK_FROM_CHART_TYPE, Chart;
|
|
19813
|
+
var CHART_COLORS, seriesColor, barColor, monthFormatter, formatTimeLabel, BarChart, PieChart, LineChart, ScatterChart, LOOK_FROM_CHART_TYPE, Chart;
|
|
19530
19814
|
var init_Chart = __esm({
|
|
19531
19815
|
"components/core/molecules/Chart.tsx"() {
|
|
19532
19816
|
"use client";
|
|
@@ -19546,6 +19830,7 @@ var init_Chart = __esm({
|
|
|
19546
19830
|
"var(--color-accent)"
|
|
19547
19831
|
];
|
|
19548
19832
|
seriesColor = (series, idx) => series.color ?? CHART_COLORS[idx % CHART_COLORS.length];
|
|
19833
|
+
barColor = (series, sIdx, catIdx, seriesCount) => series.color ?? CHART_COLORS[(seriesCount === 1 ? catIdx : sIdx) % CHART_COLORS.length];
|
|
19549
19834
|
monthFormatter = new Intl.DateTimeFormat(void 0, {
|
|
19550
19835
|
month: "short",
|
|
19551
19836
|
year: "2-digit"
|
|
@@ -19618,7 +19903,7 @@ var init_Chart = __esm({
|
|
|
19618
19903
|
children: series.map((s, sIdx) => {
|
|
19619
19904
|
const value = valueAt(s, label);
|
|
19620
19905
|
const ratio = stack === "normalize" ? total === 0 ? 0 : value / total * 100 : value / maxValue * 100;
|
|
19621
|
-
const color =
|
|
19906
|
+
const color = barColor(s, sIdx, catIdx, series.length);
|
|
19622
19907
|
return /* @__PURE__ */ jsx(
|
|
19623
19908
|
Box,
|
|
19624
19909
|
{
|
|
@@ -19673,7 +19958,7 @@ var init_Chart = __esm({
|
|
|
19673
19958
|
/* @__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) => {
|
|
19674
19959
|
const value = valueAt(s, label);
|
|
19675
19960
|
const barHeight = value / maxValue * 100;
|
|
19676
|
-
const color =
|
|
19961
|
+
const color = barColor(s, sIdx, catIdx, series.length);
|
|
19677
19962
|
return /* @__PURE__ */ jsx(
|
|
19678
19963
|
Box,
|
|
19679
19964
|
{
|
|
@@ -19724,7 +20009,7 @@ var init_Chart = __esm({
|
|
|
19724
20009
|
/* @__PURE__ */ jsx(VStack, { gap: "none", className: "w-full flex-1 min-h-0", justify: "end", children: series.map((s, sIdx) => {
|
|
19725
20010
|
const value = valueAt(s, label);
|
|
19726
20011
|
const ratio = stack === "normalize" ? total === 0 ? 0 : value / total * 100 : value / maxValue * 100;
|
|
19727
|
-
const color =
|
|
20012
|
+
const color = barColor(s, sIdx, catIdx, series.length);
|
|
19728
20013
|
return /* @__PURE__ */ jsx(
|
|
19729
20014
|
Box,
|
|
19730
20015
|
{
|
|
@@ -22048,8 +22333,8 @@ var init_Menu = __esm({
|
|
|
22048
22333
|
"bottom-end": "bottom-start"
|
|
22049
22334
|
};
|
|
22050
22335
|
const effectivePosition = direction === "rtl" ? rtlMirror[position] ?? position : position;
|
|
22051
|
-
const triggerChild =
|
|
22052
|
-
const triggerElement =
|
|
22336
|
+
const triggerChild = React83__default.isValidElement(trigger) ? trigger : /* @__PURE__ */ jsx(Typography, { variant: "small", as: "span", children: trigger });
|
|
22337
|
+
const triggerElement = React83__default.cloneElement(
|
|
22053
22338
|
triggerChild,
|
|
22054
22339
|
{
|
|
22055
22340
|
ref: triggerRef,
|
|
@@ -22144,14 +22429,14 @@ function useDataDnd(args) {
|
|
|
22144
22429
|
const isZone = Boolean(dragGroup || accepts || sortable);
|
|
22145
22430
|
const enabled = isZone || Boolean(dndRoot);
|
|
22146
22431
|
const eventBus = useEventBus();
|
|
22147
|
-
const parentRoot =
|
|
22432
|
+
const parentRoot = React83__default.useContext(RootCtx);
|
|
22148
22433
|
const isRoot = enabled && parentRoot === null;
|
|
22149
|
-
const zoneId =
|
|
22434
|
+
const zoneId = React83__default.useId();
|
|
22150
22435
|
const ownGroup = dragGroup ?? accepts ?? zoneId;
|
|
22151
|
-
const [optimisticOrders, setOptimisticOrders] =
|
|
22152
|
-
const optimisticOrdersRef =
|
|
22436
|
+
const [optimisticOrders, setOptimisticOrders] = React83__default.useState(() => /* @__PURE__ */ new Map());
|
|
22437
|
+
const optimisticOrdersRef = React83__default.useRef(optimisticOrders);
|
|
22153
22438
|
optimisticOrdersRef.current = optimisticOrders;
|
|
22154
|
-
const clearOptimisticOrder =
|
|
22439
|
+
const clearOptimisticOrder = React83__default.useCallback((group) => {
|
|
22155
22440
|
setOptimisticOrders((prev) => {
|
|
22156
22441
|
if (!prev.has(group)) return prev;
|
|
22157
22442
|
const next = new Map(prev);
|
|
@@ -22176,7 +22461,7 @@ function useDataDnd(args) {
|
|
|
22176
22461
|
const raw = it[dndItemIdField];
|
|
22177
22462
|
return raw != null ? String(raw) : `__idx_${idx}`;
|
|
22178
22463
|
}).join("|");
|
|
22179
|
-
const itemIds =
|
|
22464
|
+
const itemIds = React83__default.useMemo(
|
|
22180
22465
|
() => orderedItems.map((it, idx) => {
|
|
22181
22466
|
const raw = it[dndItemIdField];
|
|
22182
22467
|
return raw != null ? String(raw) : `__idx_${idx}`;
|
|
@@ -22187,7 +22472,7 @@ function useDataDnd(args) {
|
|
|
22187
22472
|
const raw = it[dndItemIdField];
|
|
22188
22473
|
return raw != null ? String(raw) : `__${idx}`;
|
|
22189
22474
|
}).join("|");
|
|
22190
|
-
|
|
22475
|
+
React83__default.useEffect(() => {
|
|
22191
22476
|
const root = isRoot ? null : parentRoot;
|
|
22192
22477
|
if (root) {
|
|
22193
22478
|
root.clearOptimisticOrder(ownGroup);
|
|
@@ -22195,20 +22480,20 @@ function useDataDnd(args) {
|
|
|
22195
22480
|
clearOptimisticOrder(ownGroup);
|
|
22196
22481
|
}
|
|
22197
22482
|
}, [itemsContentSig, ownGroup]);
|
|
22198
|
-
const zonesRef =
|
|
22199
|
-
const registerZone =
|
|
22483
|
+
const zonesRef = React83__default.useRef(/* @__PURE__ */ new Map());
|
|
22484
|
+
const registerZone = React83__default.useCallback((zoneId2, meta2) => {
|
|
22200
22485
|
zonesRef.current.set(zoneId2, meta2);
|
|
22201
22486
|
}, []);
|
|
22202
|
-
const unregisterZone =
|
|
22487
|
+
const unregisterZone = React83__default.useCallback((zoneId2) => {
|
|
22203
22488
|
zonesRef.current.delete(zoneId2);
|
|
22204
22489
|
}, []);
|
|
22205
|
-
const [activeDrag, setActiveDrag] =
|
|
22206
|
-
const [overZoneGroup, setOverZoneGroup] =
|
|
22207
|
-
const meta =
|
|
22490
|
+
const [activeDrag, setActiveDrag] = React83__default.useState(null);
|
|
22491
|
+
const [overZoneGroup, setOverZoneGroup] = React83__default.useState(null);
|
|
22492
|
+
const meta = React83__default.useMemo(
|
|
22208
22493
|
() => ({ group: ownGroup, dropEvent, reorderEvent, positionEvent, itemIds, rawItems: items, idField: dndItemIdField }),
|
|
22209
22494
|
[ownGroup, dropEvent, reorderEvent, positionEvent, itemIds, items, dndItemIdField]
|
|
22210
22495
|
);
|
|
22211
|
-
|
|
22496
|
+
React83__default.useEffect(() => {
|
|
22212
22497
|
const target = isRoot ? null : parentRoot;
|
|
22213
22498
|
if (!target) {
|
|
22214
22499
|
zonesRef.current.set(zoneId, meta);
|
|
@@ -22227,7 +22512,7 @@ function useDataDnd(args) {
|
|
|
22227
22512
|
}, [parentRoot, isRoot, zoneId, meta]);
|
|
22228
22513
|
const sensors = useAlmadarDndSensors(true);
|
|
22229
22514
|
const collisionDetection = almadarDndCollisionDetection;
|
|
22230
|
-
const findZoneByItem =
|
|
22515
|
+
const findZoneByItem = React83__default.useCallback(
|
|
22231
22516
|
(id) => {
|
|
22232
22517
|
for (const z of zonesRef.current.values()) {
|
|
22233
22518
|
if (z.itemIds.includes(id)) return z;
|
|
@@ -22236,7 +22521,7 @@ function useDataDnd(args) {
|
|
|
22236
22521
|
},
|
|
22237
22522
|
[]
|
|
22238
22523
|
);
|
|
22239
|
-
|
|
22524
|
+
React83__default.useCallback(
|
|
22240
22525
|
(group) => {
|
|
22241
22526
|
for (const z of zonesRef.current.values()) {
|
|
22242
22527
|
if (z.group === group) return z;
|
|
@@ -22245,7 +22530,7 @@ function useDataDnd(args) {
|
|
|
22245
22530
|
},
|
|
22246
22531
|
[]
|
|
22247
22532
|
);
|
|
22248
|
-
const handleDragEnd =
|
|
22533
|
+
const handleDragEnd = React83__default.useCallback(
|
|
22249
22534
|
(event) => {
|
|
22250
22535
|
const { active, over } = event;
|
|
22251
22536
|
const activeIdStr = String(active.id);
|
|
@@ -22336,8 +22621,8 @@ function useDataDnd(args) {
|
|
|
22336
22621
|
},
|
|
22337
22622
|
[eventBus]
|
|
22338
22623
|
);
|
|
22339
|
-
const sortableData =
|
|
22340
|
-
const SortableItem =
|
|
22624
|
+
const sortableData = React83__default.useMemo(() => ({ dndGroup: ownGroup }), [ownGroup]);
|
|
22625
|
+
const SortableItem = React83__default.useCallback(
|
|
22341
22626
|
({ id, children }) => {
|
|
22342
22627
|
const {
|
|
22343
22628
|
attributes,
|
|
@@ -22377,7 +22662,7 @@ function useDataDnd(args) {
|
|
|
22377
22662
|
id: droppableId,
|
|
22378
22663
|
data: sortableData
|
|
22379
22664
|
});
|
|
22380
|
-
const ctx =
|
|
22665
|
+
const ctx = React83__default.useContext(RootCtx);
|
|
22381
22666
|
const activeDrag2 = ctx?.activeDrag ?? null;
|
|
22382
22667
|
const overZoneGroup2 = ctx?.overZoneGroup ?? null;
|
|
22383
22668
|
const isThisZoneOver = overZoneGroup2 === ownGroup;
|
|
@@ -22392,7 +22677,7 @@ function useDataDnd(args) {
|
|
|
22392
22677
|
showForeignPlaceholder,
|
|
22393
22678
|
ctxAvailable: ctx != null
|
|
22394
22679
|
});
|
|
22395
|
-
|
|
22680
|
+
React83__default.useEffect(() => {
|
|
22396
22681
|
dndLog.info("dropzone:isOver:change", { droppableId, group: ownGroup, isOver, isThisZoneOver, showForeignPlaceholder, activeDragSourceGroup: activeDrag2?.sourceGroup ?? null });
|
|
22397
22682
|
}, [droppableId, isOver, isThisZoneOver, showForeignPlaceholder]);
|
|
22398
22683
|
return /* @__PURE__ */ jsx(
|
|
@@ -22406,11 +22691,11 @@ function useDataDnd(args) {
|
|
|
22406
22691
|
}
|
|
22407
22692
|
);
|
|
22408
22693
|
};
|
|
22409
|
-
const rootContextValue =
|
|
22694
|
+
const rootContextValue = React83__default.useMemo(
|
|
22410
22695
|
() => ({ registerZone, unregisterZone, activeDrag, overZoneGroup, optimisticOrders, clearOptimisticOrder }),
|
|
22411
22696
|
[registerZone, unregisterZone, activeDrag, overZoneGroup, optimisticOrders, clearOptimisticOrder]
|
|
22412
22697
|
);
|
|
22413
|
-
const handleDragStart =
|
|
22698
|
+
const handleDragStart = React83__default.useCallback((event) => {
|
|
22414
22699
|
const sourceZone = findZoneByItem(event.active.id);
|
|
22415
22700
|
const rect = event.active.rect.current.initial;
|
|
22416
22701
|
const height = rect?.height && rect.height > 0 ? rect.height : 64;
|
|
@@ -22429,7 +22714,7 @@ function useDataDnd(args) {
|
|
|
22429
22714
|
isRoot
|
|
22430
22715
|
});
|
|
22431
22716
|
}, [findZoneByItem, isRoot, zoneId]);
|
|
22432
|
-
const handleDragOver =
|
|
22717
|
+
const handleDragOver = React83__default.useCallback((event) => {
|
|
22433
22718
|
const { active, over } = event;
|
|
22434
22719
|
const overData = over?.data?.current;
|
|
22435
22720
|
const overGroup = overData?.dndGroup ?? null;
|
|
@@ -22499,7 +22784,7 @@ function useDataDnd(args) {
|
|
|
22499
22784
|
return next;
|
|
22500
22785
|
});
|
|
22501
22786
|
}, []);
|
|
22502
|
-
const handleDragCancel =
|
|
22787
|
+
const handleDragCancel = React83__default.useCallback((event) => {
|
|
22503
22788
|
setActiveDrag(null);
|
|
22504
22789
|
setOverZoneGroup(null);
|
|
22505
22790
|
dndLog.warn("dragCancel", {
|
|
@@ -22507,12 +22792,12 @@ function useDataDnd(args) {
|
|
|
22507
22792
|
reason: "dnd-kit cancelled the drag (escape key, pointer interrupted, or external)"
|
|
22508
22793
|
});
|
|
22509
22794
|
}, []);
|
|
22510
|
-
const handleDragEndWithCleanup =
|
|
22795
|
+
const handleDragEndWithCleanup = React83__default.useCallback((event) => {
|
|
22511
22796
|
handleDragEnd(event);
|
|
22512
22797
|
setActiveDrag(null);
|
|
22513
22798
|
setOverZoneGroup(null);
|
|
22514
22799
|
}, [handleDragEnd]);
|
|
22515
|
-
const wrapContainer =
|
|
22800
|
+
const wrapContainer = React83__default.useCallback(
|
|
22516
22801
|
(children) => {
|
|
22517
22802
|
if (!enabled) return children;
|
|
22518
22803
|
const strategy = layout === "grid" ? rectSortingStrategy : verticalListSortingStrategy;
|
|
@@ -22566,15 +22851,12 @@ var init_useDataDnd = __esm({
|
|
|
22566
22851
|
init_useAlmadarDndCollision();
|
|
22567
22852
|
init_Box();
|
|
22568
22853
|
dndLog = createLogger("almadar:ui:dnd");
|
|
22569
|
-
RootCtx =
|
|
22854
|
+
RootCtx = React83__default.createContext(null);
|
|
22570
22855
|
}
|
|
22571
22856
|
});
|
|
22572
22857
|
function renderIconInput(icon, props) {
|
|
22573
22858
|
return typeof icon === "string" ? /* @__PURE__ */ jsx(Icon, { name: icon, ...props }) : /* @__PURE__ */ jsx(Icon, { icon, ...props });
|
|
22574
22859
|
}
|
|
22575
|
-
function fieldLabel2(key) {
|
|
22576
|
-
return key.replace(/([a-z])([A-Z])/g, "$1 $2").replace(/[_-]/g, " ").replace(/\b\w/g, (c) => c.toUpperCase());
|
|
22577
|
-
}
|
|
22578
22860
|
function statusVariant2(value) {
|
|
22579
22861
|
const v = value.toLowerCase();
|
|
22580
22862
|
if (["active", "completed", "done", "approved", "published", "resolved", "open", "online"].includes(v)) return "success";
|
|
@@ -22593,29 +22875,6 @@ function resolveBadgeVariant(field, value) {
|
|
|
22593
22875
|
}
|
|
22594
22876
|
return statusVariant2(value);
|
|
22595
22877
|
}
|
|
22596
|
-
function formatDate2(value) {
|
|
22597
|
-
if (!value) return "";
|
|
22598
|
-
const d = new Date(String(value));
|
|
22599
|
-
if (isNaN(d.getTime())) return String(value);
|
|
22600
|
-
return d.toLocaleDateString(void 0, { year: "numeric", month: "short", day: "numeric" });
|
|
22601
|
-
}
|
|
22602
|
-
function formatValue(value, format) {
|
|
22603
|
-
if (value === void 0 || value === null) return "";
|
|
22604
|
-
switch (format) {
|
|
22605
|
-
case "date":
|
|
22606
|
-
return formatDate2(value);
|
|
22607
|
-
case "currency":
|
|
22608
|
-
return typeof value === "number" ? `$${value.toFixed(2)}` : String(value);
|
|
22609
|
-
case "number":
|
|
22610
|
-
return typeof value === "number" ? value.toLocaleString() : String(value);
|
|
22611
|
-
case "percent":
|
|
22612
|
-
return typeof value === "number" ? `${Math.round(value)}%` : String(value);
|
|
22613
|
-
case "boolean":
|
|
22614
|
-
return value ? "Yes" : "No";
|
|
22615
|
-
default:
|
|
22616
|
-
return String(value);
|
|
22617
|
-
}
|
|
22618
|
-
}
|
|
22619
22878
|
function DataGrid({
|
|
22620
22879
|
entity,
|
|
22621
22880
|
fields,
|
|
@@ -22902,7 +23161,7 @@ function DataGrid({
|
|
|
22902
23161
|
if (val === void 0 || val === null || val === "") return null;
|
|
22903
23162
|
return /* @__PURE__ */ jsxs(HStack, { gap: "xs", className: "items-center", children: [
|
|
22904
23163
|
field.icon && renderIconInput(field.icon, { size: "xs" }),
|
|
22905
|
-
/* @__PURE__ */ jsx(Badge, { variant: resolveBadgeVariant(field, String(val)), children: formatValue(val, field.format) })
|
|
23164
|
+
/* @__PURE__ */ jsx(Badge, { variant: resolveBadgeVariant(field, String(val)), children: humanizeEnumValue(formatValue(val, field.format)) })
|
|
22906
23165
|
] }, field.name);
|
|
22907
23166
|
}) })
|
|
22908
23167
|
] }),
|
|
@@ -23012,11 +23271,12 @@ function DataGrid({
|
|
|
23012
23271
|
] })
|
|
23013
23272
|
);
|
|
23014
23273
|
}
|
|
23015
|
-
var dataGridLog, BADGE_VARIANTS, gapStyles5, lookStyles5;
|
|
23274
|
+
var dataGridLog, fieldLabel2, BADGE_VARIANTS, gapStyles5, lookStyles5;
|
|
23016
23275
|
var init_DataGrid = __esm({
|
|
23017
23276
|
"components/core/molecules/DataGrid.tsx"() {
|
|
23018
23277
|
"use client";
|
|
23019
23278
|
init_cn();
|
|
23279
|
+
init_format();
|
|
23020
23280
|
init_getNestedValue();
|
|
23021
23281
|
init_useEventBus();
|
|
23022
23282
|
init_Box();
|
|
@@ -23029,6 +23289,7 @@ var init_DataGrid = __esm({
|
|
|
23029
23289
|
init_Menu();
|
|
23030
23290
|
init_useDataDnd();
|
|
23031
23291
|
dataGridLog = createLogger("almadar:ui:data-grid");
|
|
23292
|
+
fieldLabel2 = humanizeFieldName;
|
|
23032
23293
|
BADGE_VARIANTS = /* @__PURE__ */ new Set([
|
|
23033
23294
|
"default",
|
|
23034
23295
|
"primary",
|
|
@@ -23060,9 +23321,6 @@ var init_DataGrid = __esm({
|
|
|
23060
23321
|
function renderIconInput2(icon, props) {
|
|
23061
23322
|
return typeof icon === "string" ? /* @__PURE__ */ jsx(Icon, { name: icon, ...props }) : /* @__PURE__ */ jsx(Icon, { icon, ...props });
|
|
23062
23323
|
}
|
|
23063
|
-
function fieldLabel3(key) {
|
|
23064
|
-
return key.replace(/([a-z])([A-Z])/g, "$1 $2").replace(/[_-]/g, " ").replace(/\b\w/g, (c) => c.toUpperCase());
|
|
23065
|
-
}
|
|
23066
23324
|
function statusVariant3(value) {
|
|
23067
23325
|
const v = value.toLowerCase();
|
|
23068
23326
|
if (["active", "completed", "done", "approved", "published", "resolved", "open", "online"].includes(v)) return "success";
|
|
@@ -23071,28 +23329,12 @@ function statusVariant3(value) {
|
|
|
23071
23329
|
if (["new", "created", "scheduled", "queued", "info"].includes(v)) return "info";
|
|
23072
23330
|
return "default";
|
|
23073
23331
|
}
|
|
23074
|
-
function formatDate3(value) {
|
|
23075
|
-
if (!value) return "";
|
|
23076
|
-
const d = new Date(String(value));
|
|
23077
|
-
if (isNaN(d.getTime())) return String(value);
|
|
23078
|
-
return d.toLocaleDateString(void 0, { year: "numeric", month: "short", day: "numeric" });
|
|
23079
|
-
}
|
|
23080
23332
|
function formatValue2(value, format, boolLabels) {
|
|
23081
|
-
if (value
|
|
23082
|
-
|
|
23083
|
-
|
|
23084
|
-
return formatDate3(value);
|
|
23085
|
-
case "currency":
|
|
23086
|
-
return typeof value === "number" ? `$${value.toFixed(2)}` : String(value);
|
|
23087
|
-
case "number":
|
|
23088
|
-
return typeof value === "number" ? value.toLocaleString() : String(value);
|
|
23089
|
-
case "percent":
|
|
23090
|
-
return typeof value === "number" ? `${Math.round(value)}%` : String(value);
|
|
23091
|
-
case "boolean":
|
|
23092
|
-
return value ? boolLabels?.yes ?? "Yes" : boolLabels?.no ?? "No";
|
|
23093
|
-
default:
|
|
23094
|
-
return String(value);
|
|
23333
|
+
if (value !== void 0 && value !== null && (format === "boolean" || typeof value === "boolean")) {
|
|
23334
|
+
const isNo = value === false || value === 0 || String(value) === "false";
|
|
23335
|
+
return isNo ? boolLabels?.no ?? "No" : boolLabels?.yes ?? "Yes";
|
|
23095
23336
|
}
|
|
23337
|
+
return formatValue(value, format);
|
|
23096
23338
|
}
|
|
23097
23339
|
function groupData(items, field) {
|
|
23098
23340
|
const groups = /* @__PURE__ */ new Map();
|
|
@@ -23115,7 +23357,9 @@ function DataList({
|
|
|
23115
23357
|
variant = "default",
|
|
23116
23358
|
groupBy,
|
|
23117
23359
|
senderField,
|
|
23360
|
+
senderLabelField,
|
|
23118
23361
|
currentUser,
|
|
23362
|
+
emptyMessage,
|
|
23119
23363
|
className,
|
|
23120
23364
|
isLoading = false,
|
|
23121
23365
|
error = null,
|
|
@@ -23147,7 +23391,7 @@ function DataList({
|
|
|
23147
23391
|
}) {
|
|
23148
23392
|
const eventBus = useEventBus();
|
|
23149
23393
|
const { t } = useTranslate();
|
|
23150
|
-
const [visibleCount, setVisibleCount] =
|
|
23394
|
+
const [visibleCount, setVisibleCount] = React83__default.useState(pageSize || Infinity);
|
|
23151
23395
|
const fieldDefs = fields ?? columns ?? [];
|
|
23152
23396
|
const allDataRaw = Array.isArray(entity) ? entity : entity ? [entity] : [];
|
|
23153
23397
|
const dnd = useDataDnd({
|
|
@@ -23166,7 +23410,7 @@ function DataList({
|
|
|
23166
23410
|
const data = pageSize > 0 ? allData.slice(0, visibleCount) : allData;
|
|
23167
23411
|
const hasMoreLocal = pageSize > 0 && visibleCount < allData.length;
|
|
23168
23412
|
const hasRenderProp = typeof children === "function";
|
|
23169
|
-
|
|
23413
|
+
React83__default.useEffect(() => {
|
|
23170
23414
|
const renderItemTypeOf = typeof schemaRenderItem;
|
|
23171
23415
|
const childrenTypeOf = typeof children;
|
|
23172
23416
|
if (data.length > 0 && !hasRenderProp) {
|
|
@@ -23254,7 +23498,7 @@ function DataList({
|
|
|
23254
23498
|
return /* @__PURE__ */ jsx(Box, { className: "text-center py-8", children: /* @__PURE__ */ jsx(Typography, { variant: "body", color: "error", children: error.message }) });
|
|
23255
23499
|
}
|
|
23256
23500
|
if (data.length === 0) {
|
|
23257
|
-
const emptyNode = /* @__PURE__ */ jsx(Box, { className: "text-center py-12", children: /* @__PURE__ */ jsx(Typography, { variant: "body", color: "secondary", children: t("empty.noItems") }) });
|
|
23501
|
+
const emptyNode = /* @__PURE__ */ jsx(Box, { className: "text-center py-12", children: /* @__PURE__ */ jsx(Typography, { variant: "body", color: "secondary", children: emptyMessage || t("empty.noItems") }) });
|
|
23258
23502
|
return dnd.enabled ? /* @__PURE__ */ jsx(Fragment, { children: dnd.wrapContainer(emptyNode) }) : emptyNode;
|
|
23259
23503
|
}
|
|
23260
23504
|
const gapClass = {
|
|
@@ -23270,51 +23514,93 @@ function DataList({
|
|
|
23270
23514
|
const items2 = [...data];
|
|
23271
23515
|
const groups2 = groupBy ? groupData(items2, groupBy) : [{ label: "", items: items2 }];
|
|
23272
23516
|
const contentField = titleField?.name ?? fieldDefs[0]?.name ?? "";
|
|
23273
|
-
|
|
23274
|
-
|
|
23275
|
-
|
|
23276
|
-
|
|
23277
|
-
|
|
23278
|
-
|
|
23279
|
-
|
|
23280
|
-
|
|
23281
|
-
|
|
23282
|
-
|
|
23283
|
-
|
|
23284
|
-
|
|
23285
|
-
|
|
23286
|
-
|
|
23287
|
-
|
|
23288
|
-
|
|
23289
|
-
|
|
23290
|
-
|
|
23291
|
-
|
|
23292
|
-
|
|
23293
|
-
|
|
23294
|
-
|
|
23295
|
-
|
|
23296
|
-
|
|
23297
|
-
|
|
23298
|
-
|
|
23299
|
-
|
|
23300
|
-
|
|
23301
|
-
|
|
23302
|
-
|
|
23303
|
-
|
|
23304
|
-
|
|
23305
|
-
|
|
23306
|
-
|
|
23307
|
-
|
|
23308
|
-
|
|
23309
|
-
|
|
23310
|
-
|
|
23311
|
-
|
|
23312
|
-
|
|
23313
|
-
|
|
23314
|
-
|
|
23315
|
-
|
|
23316
|
-
|
|
23317
|
-
|
|
23517
|
+
const senderLabel = (itemData, raw) => {
|
|
23518
|
+
if (!senderLabelField) return raw;
|
|
23519
|
+
const v = getNestedValue(itemData, senderLabelField);
|
|
23520
|
+
return v === void 0 || v === null || v === "" ? raw : String(v);
|
|
23521
|
+
};
|
|
23522
|
+
return /* @__PURE__ */ jsxs(VStack, { gap: "sm", className: cn("py-2", className), children: [
|
|
23523
|
+
groups2.map((group, gi) => /* @__PURE__ */ jsxs(React83__default.Fragment, { children: [
|
|
23524
|
+
group.label && /* @__PURE__ */ jsx(Divider, { label: group.label, className: "my-2" }),
|
|
23525
|
+
group.items.map((itemData, index) => {
|
|
23526
|
+
const id = itemData.id || `${gi}-${index}`;
|
|
23527
|
+
const sender = senderField ? String(getNestedValue(itemData, senderField) ?? "") : "";
|
|
23528
|
+
const isSent = Boolean(currentUser && sender === currentUser);
|
|
23529
|
+
const content = getNestedValue(itemData, contentField);
|
|
23530
|
+
const timestampField = fieldDefs.find((f3) => f3.format === "date");
|
|
23531
|
+
const timestamp = timestampField ? getNestedValue(itemData, timestampField.name) : null;
|
|
23532
|
+
const metaFields = fieldDefs.filter(
|
|
23533
|
+
(f3) => f3.name !== contentField && f3.name !== timestampField?.name
|
|
23534
|
+
);
|
|
23535
|
+
return /* @__PURE__ */ jsx(
|
|
23536
|
+
Box,
|
|
23537
|
+
{
|
|
23538
|
+
"data-entity-row": true,
|
|
23539
|
+
"data-entity-id": id,
|
|
23540
|
+
onClick: itemClickEvent ? handleRowClick(itemData) : void 0,
|
|
23541
|
+
className: cn(
|
|
23542
|
+
"flex px-4 group/rowactions",
|
|
23543
|
+
itemClickEvent && "cursor-pointer",
|
|
23544
|
+
isSent ? "justify-end" : "justify-start"
|
|
23545
|
+
),
|
|
23546
|
+
children: /* @__PURE__ */ jsxs(
|
|
23547
|
+
Box,
|
|
23548
|
+
{
|
|
23549
|
+
className: cn(
|
|
23550
|
+
"max-w-[75%] px-4 py-2",
|
|
23551
|
+
isSent ? "bg-primary text-primary-foreground rounded-2xl rounded-br-sm" : "bg-muted text-foreground rounded-2xl rounded-bl-sm"
|
|
23552
|
+
),
|
|
23553
|
+
children: [
|
|
23554
|
+
!isSent && senderField && /* @__PURE__ */ jsx(Typography, { variant: "caption", className: "font-semibold mb-0.5", children: senderLabel(itemData, sender) }),
|
|
23555
|
+
/* @__PURE__ */ jsx(Typography, { variant: "body", className: cn(isSent && "text-primary-foreground"), children: content !== void 0 && content !== null ? String(content) : "" }),
|
|
23556
|
+
metaFields.length > 0 && /* @__PURE__ */ jsx(HStack, { gap: "xs", className: "mt-1 flex-wrap", children: metaFields.map((f3) => {
|
|
23557
|
+
const v = getNestedValue(itemData, f3.name);
|
|
23558
|
+
if (v === void 0 || v === null || v === "") return null;
|
|
23559
|
+
return f3.variant === "badge" ? /* @__PURE__ */ jsx(Badge, { variant: statusVariant3(String(v)), children: String(v) }, f3.name) : /* @__PURE__ */ jsx(
|
|
23560
|
+
Typography,
|
|
23561
|
+
{
|
|
23562
|
+
variant: "caption",
|
|
23563
|
+
className: cn("text-xs", isSent ? "opacity-70" : "text-muted-foreground"),
|
|
23564
|
+
children: formatValue2(v, f3.format)
|
|
23565
|
+
},
|
|
23566
|
+
f3.name
|
|
23567
|
+
);
|
|
23568
|
+
}) }),
|
|
23569
|
+
/* @__PURE__ */ jsxs(HStack, { gap: "xs", className: "mt-1 items-center justify-between", children: [
|
|
23570
|
+
timestamp != null ? /* @__PURE__ */ jsx(
|
|
23571
|
+
Typography,
|
|
23572
|
+
{
|
|
23573
|
+
variant: "caption",
|
|
23574
|
+
className: cn("text-xs", isSent ? "opacity-70" : "text-muted-foreground"),
|
|
23575
|
+
children: formatDate(timestamp)
|
|
23576
|
+
}
|
|
23577
|
+
) : /* @__PURE__ */ jsx("span", {}),
|
|
23578
|
+
renderItemActions(itemData)
|
|
23579
|
+
] })
|
|
23580
|
+
]
|
|
23581
|
+
}
|
|
23582
|
+
)
|
|
23583
|
+
},
|
|
23584
|
+
id
|
|
23585
|
+
);
|
|
23586
|
+
})
|
|
23587
|
+
] }, gi)),
|
|
23588
|
+
hasMoreLocal && /* @__PURE__ */ jsx(Box, { className: "flex justify-center py-3", children: /* @__PURE__ */ jsxs(
|
|
23589
|
+
Button,
|
|
23590
|
+
{
|
|
23591
|
+
variant: "ghost",
|
|
23592
|
+
size: "sm",
|
|
23593
|
+
onClick: () => setVisibleCount((prev) => prev + (pageSize || 5)),
|
|
23594
|
+
children: [
|
|
23595
|
+
/* @__PURE__ */ jsx(Icon, { name: "chevron-down", size: "xs", className: "mr-1" }),
|
|
23596
|
+
t("common.showMore"),
|
|
23597
|
+
" (",
|
|
23598
|
+
t("common.remaining", { count: allData.length - visibleCount }),
|
|
23599
|
+
")"
|
|
23600
|
+
]
|
|
23601
|
+
}
|
|
23602
|
+
) })
|
|
23603
|
+
] });
|
|
23318
23604
|
}
|
|
23319
23605
|
const items = [...data];
|
|
23320
23606
|
const groups = groupBy ? groupData(items, groupBy) : [{ label: "", items }];
|
|
@@ -23429,7 +23715,7 @@ function DataList({
|
|
|
23429
23715
|
className
|
|
23430
23716
|
),
|
|
23431
23717
|
children: [
|
|
23432
|
-
groups.map((group, gi) => /* @__PURE__ */ jsxs(
|
|
23718
|
+
groups.map((group, gi) => /* @__PURE__ */ jsxs(React83__default.Fragment, { children: [
|
|
23433
23719
|
group.label && /* @__PURE__ */ jsx(Divider, { label: group.label, className: gi > 0 ? "mt-4" : "mt-0" }),
|
|
23434
23720
|
group.items.map(
|
|
23435
23721
|
(itemData, index) => renderItem(itemData, index, gi === groups.length - 1 && index === group.items.length - 1)
|
|
@@ -23463,11 +23749,12 @@ function DataList({
|
|
|
23463
23749
|
)
|
|
23464
23750
|
);
|
|
23465
23751
|
}
|
|
23466
|
-
var dataListLog, listLookStyles;
|
|
23752
|
+
var dataListLog, fieldLabel3, listLookStyles;
|
|
23467
23753
|
var init_DataList = __esm({
|
|
23468
23754
|
"components/core/molecules/DataList.tsx"() {
|
|
23469
23755
|
"use client";
|
|
23470
23756
|
init_cn();
|
|
23757
|
+
init_format();
|
|
23471
23758
|
init_getNestedValue();
|
|
23472
23759
|
init_useEventBus();
|
|
23473
23760
|
init_Box();
|
|
@@ -23482,6 +23769,7 @@ var init_DataList = __esm({
|
|
|
23482
23769
|
init_Menu();
|
|
23483
23770
|
init_useDataDnd();
|
|
23484
23771
|
dataListLog = createLogger("almadar:ui:data-list");
|
|
23772
|
+
fieldLabel3 = humanizeFieldName;
|
|
23485
23773
|
listLookStyles = {
|
|
23486
23774
|
dense: "[&_[data-entity-row]>div]:!py-1 [&_[data-entity-row]>div]:!px-3",
|
|
23487
23775
|
spacious: "[&_[data-entity-row]>div]:!py-5 [&_[data-entity-row]>div]:!px-8",
|
|
@@ -23514,7 +23802,7 @@ var init_FormSection = __esm({
|
|
|
23514
23802
|
columns = 1,
|
|
23515
23803
|
className
|
|
23516
23804
|
}) => {
|
|
23517
|
-
const [collapsed, setCollapsed] =
|
|
23805
|
+
const [collapsed, setCollapsed] = React83__default.useState(defaultCollapsed);
|
|
23518
23806
|
const { t } = useTranslate();
|
|
23519
23807
|
const eventBus = useEventBus();
|
|
23520
23808
|
const gridClass = {
|
|
@@ -23522,7 +23810,7 @@ var init_FormSection = __esm({
|
|
|
23522
23810
|
2: "grid-cols-1 md:grid-cols-2",
|
|
23523
23811
|
3: "grid-cols-1 md:grid-cols-2 lg:grid-cols-3"
|
|
23524
23812
|
}[columns];
|
|
23525
|
-
|
|
23813
|
+
React83__default.useCallback(() => {
|
|
23526
23814
|
if (collapsible) {
|
|
23527
23815
|
setCollapsed((prev) => !prev);
|
|
23528
23816
|
eventBus.emit("UI:TOGGLE_COLLAPSE", { collapsed: !collapsed });
|
|
@@ -24327,7 +24615,7 @@ var init_Flex = __esm({
|
|
|
24327
24615
|
flexStyle.flexBasis = typeof basis === "number" ? `${basis}px` : basis;
|
|
24328
24616
|
}
|
|
24329
24617
|
}
|
|
24330
|
-
return
|
|
24618
|
+
return React83__default.createElement(Component, {
|
|
24331
24619
|
className: cn(
|
|
24332
24620
|
inline ? "inline-flex" : "flex",
|
|
24333
24621
|
directionStyles[direction],
|
|
@@ -24446,7 +24734,7 @@ var init_Grid = __esm({
|
|
|
24446
24734
|
as: Component = "div"
|
|
24447
24735
|
}) => {
|
|
24448
24736
|
const mergedStyle = rows ? { gridTemplateRows: `repeat(${rows}, minmax(0, 1fr))`, ...style } : style;
|
|
24449
|
-
return
|
|
24737
|
+
return React83__default.createElement(
|
|
24450
24738
|
Component,
|
|
24451
24739
|
{
|
|
24452
24740
|
className: cn(
|
|
@@ -24654,9 +24942,9 @@ var init_Popover = __esm({
|
|
|
24654
24942
|
onMouseLeave: handleClose,
|
|
24655
24943
|
onPointerDown: tapTriggerProps.onPointerDown
|
|
24656
24944
|
};
|
|
24657
|
-
const childElement =
|
|
24945
|
+
const childElement = React83__default.isValidElement(children) ? children : /* @__PURE__ */ jsx("span", { children });
|
|
24658
24946
|
const childPointerDown = childElement.props.onPointerDown;
|
|
24659
|
-
const triggerElement =
|
|
24947
|
+
const triggerElement = React83__default.cloneElement(
|
|
24660
24948
|
childElement,
|
|
24661
24949
|
{
|
|
24662
24950
|
ref: triggerRef,
|
|
@@ -25265,9 +25553,9 @@ var init_Tooltip = __esm({
|
|
|
25265
25553
|
if (hideTimeoutRef.current) clearTimeout(hideTimeoutRef.current);
|
|
25266
25554
|
};
|
|
25267
25555
|
}, []);
|
|
25268
|
-
const triggerElement =
|
|
25556
|
+
const triggerElement = React83__default.isValidElement(children) ? children : /* @__PURE__ */ jsx("span", { children });
|
|
25269
25557
|
const childPointerDown = triggerElement.props.onPointerDown;
|
|
25270
|
-
const trigger =
|
|
25558
|
+
const trigger = React83__default.cloneElement(triggerElement, {
|
|
25271
25559
|
ref: triggerRef,
|
|
25272
25560
|
onMouseEnter: handleMouseEnter,
|
|
25273
25561
|
onMouseLeave: handleMouseLeave,
|
|
@@ -25357,7 +25645,7 @@ var init_WizardProgress = __esm({
|
|
|
25357
25645
|
children: /* @__PURE__ */ jsx("div", { className: "flex items-center gap-2", children: normalizedSteps.map((step, index) => {
|
|
25358
25646
|
const isActive = index === currentStep;
|
|
25359
25647
|
const isCompleted = index < currentStep;
|
|
25360
|
-
return /* @__PURE__ */ jsxs(
|
|
25648
|
+
return /* @__PURE__ */ jsxs(React83__default.Fragment, { children: [
|
|
25361
25649
|
/* @__PURE__ */ jsx(
|
|
25362
25650
|
"button",
|
|
25363
25651
|
{
|
|
@@ -26918,13 +27206,13 @@ var init_MapView = __esm({
|
|
|
26918
27206
|
shadowSize: [41, 41]
|
|
26919
27207
|
});
|
|
26920
27208
|
L.Marker.prototype.options.icon = defaultIcon;
|
|
26921
|
-
const { useEffect:
|
|
27209
|
+
const { useEffect: useEffect60, useRef: useRef61, useCallback: useCallback89, useState: useState89 } = React83__default;
|
|
26922
27210
|
const { Typography: Typography2 } = await Promise.resolve().then(() => (init_Typography(), Typography_exports));
|
|
26923
27211
|
const { useEventBus: useEventBus2 } = await Promise.resolve().then(() => (init_useEventBus(), useEventBus_exports));
|
|
26924
27212
|
function MapUpdater({ centerLat, centerLng, zoom }) {
|
|
26925
27213
|
const map = useMap();
|
|
26926
|
-
const prevRef =
|
|
26927
|
-
|
|
27214
|
+
const prevRef = useRef61({ centerLat, centerLng, zoom });
|
|
27215
|
+
useEffect60(() => {
|
|
26928
27216
|
const prev = prevRef.current;
|
|
26929
27217
|
if (prev.centerLat !== centerLat || prev.centerLng !== centerLng || prev.zoom !== zoom) {
|
|
26930
27218
|
map.setView([centerLat, centerLng], zoom);
|
|
@@ -26935,7 +27223,7 @@ var init_MapView = __esm({
|
|
|
26935
27223
|
}
|
|
26936
27224
|
function MapClickHandler({ onMapClick }) {
|
|
26937
27225
|
const map = useMap();
|
|
26938
|
-
|
|
27226
|
+
useEffect60(() => {
|
|
26939
27227
|
if (!onMapClick) return;
|
|
26940
27228
|
const handler = (e) => {
|
|
26941
27229
|
onMapClick(e.latlng.lat, e.latlng.lng);
|
|
@@ -26964,7 +27252,7 @@ var init_MapView = __esm({
|
|
|
26964
27252
|
}) {
|
|
26965
27253
|
const eventBus = useEventBus2();
|
|
26966
27254
|
const [clickedPosition, setClickedPosition] = useState89(null);
|
|
26967
|
-
const handleMapClick =
|
|
27255
|
+
const handleMapClick = useCallback89((lat, lng) => {
|
|
26968
27256
|
if (showClickedPin) {
|
|
26969
27257
|
setClickedPosition({ lat, lng });
|
|
26970
27258
|
}
|
|
@@ -26973,7 +27261,7 @@ var init_MapView = __esm({
|
|
|
26973
27261
|
eventBus.emit(`UI:${mapClickEvent}`, { latitude: lat, longitude: lng });
|
|
26974
27262
|
}
|
|
26975
27263
|
}, [onMapClick, mapClickEvent, eventBus, showClickedPin]);
|
|
26976
|
-
const handleMarkerClick =
|
|
27264
|
+
const handleMarkerClick = useCallback89((marker) => {
|
|
26977
27265
|
onMarkerClick?.(marker);
|
|
26978
27266
|
if (markerClickEvent) {
|
|
26979
27267
|
eventBus.emit(`UI:${markerClickEvent}`, { ...marker });
|
|
@@ -27753,7 +28041,7 @@ function renderIconInput3(icon, props) {
|
|
|
27753
28041
|
return typeof icon === "string" ? /* @__PURE__ */ jsx(Icon, { name: icon, ...props }) : /* @__PURE__ */ jsx(Icon, { icon, ...props });
|
|
27754
28042
|
}
|
|
27755
28043
|
function columnLabel(col) {
|
|
27756
|
-
return col.header ?? col.label ?? col.key
|
|
28044
|
+
return col.header ?? col.label ?? humanizeFieldName(col.key);
|
|
27757
28045
|
}
|
|
27758
28046
|
function asFieldValue(v) {
|
|
27759
28047
|
if (v === void 0 || v === null) return v;
|
|
@@ -27772,25 +28060,6 @@ function statusVariant4(value) {
|
|
|
27772
28060
|
if (["new", "created", "scheduled", "queued", "info"].includes(v)) return "info";
|
|
27773
28061
|
return "default";
|
|
27774
28062
|
}
|
|
27775
|
-
function formatCell(value, format) {
|
|
27776
|
-
if (value === void 0 || value === null) return "";
|
|
27777
|
-
switch (format) {
|
|
27778
|
-
case "date": {
|
|
27779
|
-
const d = new Date(String(value));
|
|
27780
|
-
return isNaN(d.getTime()) ? String(value) : d.toLocaleDateString(void 0, { year: "numeric", month: "short", day: "numeric" });
|
|
27781
|
-
}
|
|
27782
|
-
case "currency":
|
|
27783
|
-
return typeof value === "number" ? `$${value.toFixed(2)}` : String(value);
|
|
27784
|
-
case "number":
|
|
27785
|
-
return typeof value === "number" ? value.toLocaleString() : String(value);
|
|
27786
|
-
case "percent":
|
|
27787
|
-
return typeof value === "number" ? `${Math.round(value)}%` : String(value);
|
|
27788
|
-
case "boolean":
|
|
27789
|
-
return value ? "Yes" : "No";
|
|
27790
|
-
default:
|
|
27791
|
-
return String(value);
|
|
27792
|
-
}
|
|
27793
|
-
}
|
|
27794
28063
|
function groupData2(items, field) {
|
|
27795
28064
|
const groups = /* @__PURE__ */ new Map();
|
|
27796
28065
|
for (const item of items) {
|
|
@@ -27834,9 +28103,10 @@ function TableView({
|
|
|
27834
28103
|
}) {
|
|
27835
28104
|
const eventBus = useEventBus();
|
|
27836
28105
|
const { t } = useTranslate();
|
|
27837
|
-
const [visibleCount, setVisibleCount] =
|
|
27838
|
-
const [localSelected, setLocalSelected] =
|
|
27839
|
-
const colDefs = columns ?? fields ?? [];
|
|
28106
|
+
const [visibleCount, setVisibleCount] = React83__default.useState(pageSize > 0 ? pageSize : Infinity);
|
|
28107
|
+
const [localSelected, setLocalSelected] = React83__default.useState(/* @__PURE__ */ new Set());
|
|
28108
|
+
const colDefs = (Array.isArray(columns) ? columns : void 0) ?? (Array.isArray(fields) ? fields : void 0) ?? [];
|
|
28109
|
+
const actionDefs = Array.isArray(itemActions) ? itemActions : [];
|
|
27840
28110
|
const allDataRaw = Array.isArray(entity) ? entity : entity ? [entity] : [];
|
|
27841
28111
|
const dnd = useDataDnd({
|
|
27842
28112
|
items: allDataRaw,
|
|
@@ -27856,6 +28126,23 @@ function TableView({
|
|
|
27856
28126
|
const hasRenderProp = typeof children === "function";
|
|
27857
28127
|
const idField = dndItemIdField ?? "id";
|
|
27858
28128
|
const isCoarsePointer = useMediaQuery("(pointer: coarse)");
|
|
28129
|
+
React83__default.useEffect(() => {
|
|
28130
|
+
tableViewLog.debug("render", {
|
|
28131
|
+
rowCount: data.length,
|
|
28132
|
+
colCount: colDefs.length,
|
|
28133
|
+
look,
|
|
28134
|
+
isLoading: Boolean(isLoading),
|
|
28135
|
+
hasError: Boolean(error),
|
|
28136
|
+
dnd: dnd.enabled
|
|
28137
|
+
});
|
|
28138
|
+
if (data.length > 0 && !hasRenderProp && colDefs.length === 0) {
|
|
28139
|
+
tableViewLog.warn("columns-unresolved", {
|
|
28140
|
+
rowCount: data.length,
|
|
28141
|
+
columnsIsArray: Array.isArray(columns),
|
|
28142
|
+
fieldsIsArray: Array.isArray(fields)
|
|
28143
|
+
});
|
|
28144
|
+
}
|
|
28145
|
+
}, [data, colDefs, look, isLoading, error, dnd.enabled, hasRenderProp, columns, fields]);
|
|
27859
28146
|
const selected = selectedIds ? new Set(selectedIds) : localSelected;
|
|
27860
28147
|
const emitSelection = (next) => {
|
|
27861
28148
|
if (!selectedIds) setLocalSelected(next);
|
|
@@ -27888,7 +28175,7 @@ function TableView({
|
|
|
27888
28175
|
};
|
|
27889
28176
|
eventBus.emit(`UI:${action.event}`, payload);
|
|
27890
28177
|
};
|
|
27891
|
-
const colFloors =
|
|
28178
|
+
const colFloors = React83__default.useMemo(
|
|
27892
28179
|
() => colDefs.map((col) => {
|
|
27893
28180
|
const longest = data.reduce((widest, row) => {
|
|
27894
28181
|
const cell = formatCell(asFieldValue(getNestedValue(row, col.field ?? col.key)), col.format);
|
|
@@ -27899,21 +28186,12 @@ function TableView({
|
|
|
27899
28186
|
}),
|
|
27900
28187
|
[colDefs, data]
|
|
27901
28188
|
);
|
|
27902
|
-
|
|
27903
|
-
return /* @__PURE__ */ jsx(Box, { className: "text-center py-8", children: /* @__PURE__ */ jsx(Typography, { variant: "body", color: "secondary", children: t("loading.items") }) });
|
|
27904
|
-
}
|
|
27905
|
-
if (error) {
|
|
27906
|
-
return /* @__PURE__ */ jsx(Box, { className: "text-center py-8", children: /* @__PURE__ */ jsx(Typography, { variant: "body", color: "error", children: error.message }) });
|
|
27907
|
-
}
|
|
27908
|
-
if (data.length === 0) {
|
|
27909
|
-
const emptyNode = /* @__PURE__ */ jsx(Box, { className: "text-center py-12", children: /* @__PURE__ */ jsx(Typography, { variant: "body", color: "secondary", children: emptyMessage || t("empty.noItems") }) });
|
|
27910
|
-
return dnd.enabled ? /* @__PURE__ */ jsx(Fragment, { children: dnd.wrapContainer(emptyNode) }) : emptyNode;
|
|
27911
|
-
}
|
|
28189
|
+
const statusNode = isLoading ? /* @__PURE__ */ jsx(Box, { className: "text-center py-8", children: /* @__PURE__ */ jsx(Typography, { variant: "body", color: "secondary", children: t("loading.items") }) }) : error ? /* @__PURE__ */ jsx(Box, { className: "text-center py-8", children: /* @__PURE__ */ jsx(Typography, { variant: "body", color: "error", children: error.message }) }) : data.length === 0 ? /* @__PURE__ */ jsx(Box, { className: "text-center py-12", children: /* @__PURE__ */ jsx(Typography, { variant: "body", color: "secondary", children: emptyMessage || t("empty.noItems") }) }) : null;
|
|
27912
28190
|
const lk = LOOKS[look];
|
|
27913
|
-
const hasActions =
|
|
28191
|
+
const hasActions = actionDefs.length > 0;
|
|
27914
28192
|
const effectiveMaxInline = isCoarsePointer ? 0 : maxInlineActions;
|
|
27915
|
-
const inlineActionCount = hasActions ? effectiveMaxInline != null ? Math.min(
|
|
27916
|
-
const hasOverflowActions = hasActions && effectiveMaxInline != null &&
|
|
28193
|
+
const inlineActionCount = hasActions ? effectiveMaxInline != null ? Math.min(actionDefs.length, effectiveMaxInline) : actionDefs.length : 0;
|
|
28194
|
+
const hasOverflowActions = hasActions && effectiveMaxInline != null && actionDefs.length > effectiveMaxInline;
|
|
27917
28195
|
const actionsTrack = hasActions ? `${inlineActionCount * 6 + (hasOverflowActions ? 3 : 0)}rem` : null;
|
|
27918
28196
|
const gridTemplateColumns = [
|
|
27919
28197
|
selectable ? "auto" : null,
|
|
@@ -28001,11 +28279,11 @@ function TableView({
|
|
|
28001
28279
|
col.className
|
|
28002
28280
|
);
|
|
28003
28281
|
if (col.format === "badge" && raw != null && raw !== "") {
|
|
28004
|
-
return /* @__PURE__ */ jsx(Box, { role: "cell", className: cellBase, children: /* @__PURE__ */ jsx(Badge, { variant: statusVariant4(String(raw)), size: "sm", className: "whitespace-nowrap", children: String(raw) }) }, col.key);
|
|
28282
|
+
return /* @__PURE__ */ jsx(Box, { role: "cell", className: cellBase, children: /* @__PURE__ */ jsx(Badge, { variant: statusVariant4(String(raw)), size: "sm", className: "whitespace-nowrap", children: humanizeEnumValue(String(raw)) }) }, col.key);
|
|
28005
28283
|
}
|
|
28006
28284
|
return /* @__PURE__ */ jsx(Box, { role: "cell", className: cellBase, children: /* @__PURE__ */ jsx("span", { className: "truncate text-foreground", children: formatCell(raw, col.format) }) }, col.key);
|
|
28007
28285
|
}),
|
|
28008
|
-
|
|
28286
|
+
hasActions && /* @__PURE__ */ jsxs(
|
|
28009
28287
|
HStack,
|
|
28010
28288
|
{
|
|
28011
28289
|
gap: "xs",
|
|
@@ -28017,7 +28295,7 @@ function TableView({
|
|
|
28017
28295
|
lk.striped && index % 2 === 1 ? "bg-[var(--color-surface-subtle)]" : "bg-[var(--color-card)] group-hover:bg-[var(--color-surface-subtle)]"
|
|
28018
28296
|
),
|
|
28019
28297
|
children: [
|
|
28020
|
-
(effectiveMaxInline != null ?
|
|
28298
|
+
(effectiveMaxInline != null ? actionDefs.slice(0, effectiveMaxInline) : actionDefs).map((action, i) => /* @__PURE__ */ jsxs(
|
|
28021
28299
|
Button,
|
|
28022
28300
|
{
|
|
28023
28301
|
variant: action.variant === "primary" ? "primary" : "ghost",
|
|
@@ -28033,12 +28311,12 @@ function TableView({
|
|
|
28033
28311
|
},
|
|
28034
28312
|
i
|
|
28035
28313
|
)),
|
|
28036
|
-
effectiveMaxInline != null &&
|
|
28314
|
+
effectiveMaxInline != null && actionDefs.length > effectiveMaxInline && /* @__PURE__ */ jsx(
|
|
28037
28315
|
Menu,
|
|
28038
28316
|
{
|
|
28039
28317
|
position: "bottom-end",
|
|
28040
28318
|
trigger: /* @__PURE__ */ jsx(Button, { variant: "ghost", size: "sm", "aria-label": t("common.actions"), "data-testid": "action-overflow", children: /* @__PURE__ */ jsx(Icon, { name: "more-horizontal", size: "xs" }) }),
|
|
28041
|
-
items:
|
|
28319
|
+
items: actionDefs.slice(effectiveMaxInline).map((action) => ({
|
|
28042
28320
|
label: action.label,
|
|
28043
28321
|
icon: action.icon,
|
|
28044
28322
|
event: action.event,
|
|
@@ -28056,24 +28334,25 @@ function TableView({
|
|
|
28056
28334
|
]
|
|
28057
28335
|
}
|
|
28058
28336
|
);
|
|
28059
|
-
return dnd.isZone ? /* @__PURE__ */ jsx(dnd.SortableItem, { id: row[idField] ?? id, children: rowInner }, id) : /* @__PURE__ */ jsx(
|
|
28337
|
+
return dnd.isZone ? /* @__PURE__ */ jsx(dnd.SortableItem, { id: row[idField] ?? id, children: rowInner }, id) : /* @__PURE__ */ jsx(React83__default.Fragment, { children: rowInner }, id);
|
|
28060
28338
|
};
|
|
28061
28339
|
const items = Array.from(data);
|
|
28062
28340
|
const groups = groupBy ? groupData2(items, groupBy) : [{ label: "", items }];
|
|
28063
28341
|
let runningIndex = 0;
|
|
28064
|
-
const body = /* @__PURE__ */ jsx(Box, { role: "rowgroup", children: groups.map((group, gi) => /* @__PURE__ */ jsxs(
|
|
28342
|
+
const body = /* @__PURE__ */ jsx(Box, { role: "rowgroup", children: groups.map((group, gi) => /* @__PURE__ */ jsxs(React83__default.Fragment, { children: [
|
|
28065
28343
|
group.label && /* @__PURE__ */ jsx(Divider, { label: group.label, className: gi > 0 ? "mt-3" : "mt-0" }),
|
|
28066
28344
|
group.items.map((row) => renderRow(row, runningIndex++))
|
|
28067
28345
|
] }, gi)) });
|
|
28346
|
+
const showHeader = colDefs.length > 0 || hasRenderProp;
|
|
28068
28347
|
return /* @__PURE__ */ jsxs(
|
|
28069
28348
|
Box,
|
|
28070
28349
|
{
|
|
28071
28350
|
role: "table",
|
|
28072
28351
|
className: cn("w-full text-sm", className),
|
|
28073
28352
|
children: [
|
|
28074
|
-
header,
|
|
28075
|
-
dnd.wrapContainer(body),
|
|
28076
|
-
hasMore && /* @__PURE__ */ jsx(Box, { className: "flex justify-center py-3", children: /* @__PURE__ */ jsxs(Button, { variant: "ghost", size: "sm", onClick: () => setVisibleCount((p) => p + (pageSize || 5)), children: [
|
|
28353
|
+
showHeader && header,
|
|
28354
|
+
dnd.wrapContainer(statusNode ? /* @__PURE__ */ jsx(Box, { role: "rowgroup", children: statusNode }) : body),
|
|
28355
|
+
!statusNode && hasMore && /* @__PURE__ */ jsx(Box, { className: "flex justify-center py-3", children: /* @__PURE__ */ jsxs(Button, { variant: "ghost", size: "sm", onClick: () => setVisibleCount((p) => p + (pageSize || 5)), children: [
|
|
28077
28356
|
/* @__PURE__ */ jsx(Icon, { name: "chevron-down", size: "xs", className: "mr-1" }),
|
|
28078
28357
|
t("common.showMore"),
|
|
28079
28358
|
" (",
|
|
@@ -28084,11 +28363,12 @@ function TableView({
|
|
|
28084
28363
|
}
|
|
28085
28364
|
);
|
|
28086
28365
|
}
|
|
28087
|
-
var MAX_MEASURED_COL_CH, BADGE_CHROME_CH, alignClass, weightClass, LOOKS;
|
|
28366
|
+
var tableViewLog, formatCell, MAX_MEASURED_COL_CH, BADGE_CHROME_CH, alignClass, weightClass, LOOKS;
|
|
28088
28367
|
var init_TableView = __esm({
|
|
28089
28368
|
"components/core/molecules/TableView.tsx"() {
|
|
28090
28369
|
"use client";
|
|
28091
28370
|
init_cn();
|
|
28371
|
+
init_format();
|
|
28092
28372
|
init_getNestedValue();
|
|
28093
28373
|
init_useEventBus();
|
|
28094
28374
|
init_useMediaQuery();
|
|
@@ -28102,7 +28382,8 @@ var init_TableView = __esm({
|
|
|
28102
28382
|
init_Divider();
|
|
28103
28383
|
init_Menu();
|
|
28104
28384
|
init_useDataDnd();
|
|
28105
|
-
createLogger("almadar:ui:table-view");
|
|
28385
|
+
tableViewLog = createLogger("almadar:ui:table-view");
|
|
28386
|
+
formatCell = (value, format) => formatValue(value, format);
|
|
28106
28387
|
MAX_MEASURED_COL_CH = 32;
|
|
28107
28388
|
BADGE_CHROME_CH = 4;
|
|
28108
28389
|
alignClass = {
|
|
@@ -29283,7 +29564,7 @@ var init_StepFlow = __esm({
|
|
|
29283
29564
|
className
|
|
29284
29565
|
}) => {
|
|
29285
29566
|
if (orientation === "vertical") {
|
|
29286
|
-
return /* @__PURE__ */ jsx(VStack, { gap: "none", className: cn("w-full", className), children: steps.map((step, index) => /* @__PURE__ */ jsx(
|
|
29567
|
+
return /* @__PURE__ */ jsx(VStack, { gap: "none", className: cn("w-full", className), children: steps.map((step, index) => /* @__PURE__ */ jsx(React83__default.Fragment, { children: /* @__PURE__ */ jsxs(HStack, { gap: "md", align: "start", className: "w-full", children: [
|
|
29287
29568
|
/* @__PURE__ */ jsxs(VStack, { gap: "none", align: "center", children: [
|
|
29288
29569
|
/* @__PURE__ */ jsx(StepCircle, { step, index }),
|
|
29289
29570
|
showConnectors && index < steps.length - 1 && /* @__PURE__ */ jsx(Box, { className: "w-px h-8 bg-border" })
|
|
@@ -29294,7 +29575,7 @@ var init_StepFlow = __esm({
|
|
|
29294
29575
|
] })
|
|
29295
29576
|
] }) }, index)) });
|
|
29296
29577
|
}
|
|
29297
|
-
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(
|
|
29578
|
+
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(React83__default.Fragment, { children: [
|
|
29298
29579
|
/* @__PURE__ */ jsxs(VStack, { gap: "sm", align: "center", className: "flex-1 w-full md:w-auto", children: [
|
|
29299
29580
|
/* @__PURE__ */ jsx(StepCircle, { step, index }),
|
|
29300
29581
|
/* @__PURE__ */ jsx(Typography, { variant: "h4", className: "text-center", children: step.title }),
|
|
@@ -30284,7 +30565,7 @@ var init_LikertScale = __esm({
|
|
|
30284
30565
|
md: "text-base",
|
|
30285
30566
|
lg: "text-lg"
|
|
30286
30567
|
};
|
|
30287
|
-
LikertScale =
|
|
30568
|
+
LikertScale = React83__default.forwardRef(
|
|
30288
30569
|
({
|
|
30289
30570
|
question,
|
|
30290
30571
|
options = DEFAULT_LIKERT_OPTIONS,
|
|
@@ -30296,7 +30577,7 @@ var init_LikertScale = __esm({
|
|
|
30296
30577
|
variant = "radios",
|
|
30297
30578
|
className
|
|
30298
30579
|
}, ref) => {
|
|
30299
|
-
const groupId =
|
|
30580
|
+
const groupId = React83__default.useId();
|
|
30300
30581
|
const eventBus = useEventBus();
|
|
30301
30582
|
const handleSelect = useCallback(
|
|
30302
30583
|
(next) => {
|
|
@@ -32585,7 +32866,7 @@ var init_DocBreadcrumb = __esm({
|
|
|
32585
32866
|
"aria-label": t("aria.breadcrumb"),
|
|
32586
32867
|
children: /* @__PURE__ */ jsx(HStack, { gap: "xs", align: "center", wrap: true, children: items.map((item, idx) => {
|
|
32587
32868
|
const isLast = idx === items.length - 1;
|
|
32588
|
-
return /* @__PURE__ */ jsxs(
|
|
32869
|
+
return /* @__PURE__ */ jsxs(React83__default.Fragment, { children: [
|
|
32589
32870
|
idx > 0 && /* @__PURE__ */ jsx(
|
|
32590
32871
|
Icon,
|
|
32591
32872
|
{
|
|
@@ -33454,7 +33735,7 @@ var init_MiniStateMachine = __esm({
|
|
|
33454
33735
|
const x = 2 + i * (NODE_W + GAP + ARROW_W + GAP);
|
|
33455
33736
|
const tc = transitionCounts[s.name] ?? 0;
|
|
33456
33737
|
const role = getStateRole(s.name, s.isInitial ?? void 0, s.isTerminal ?? void 0, tc, maxTC);
|
|
33457
|
-
return /* @__PURE__ */ jsxs(
|
|
33738
|
+
return /* @__PURE__ */ jsxs(React83__default.Fragment, { children: [
|
|
33458
33739
|
/* @__PURE__ */ jsx(
|
|
33459
33740
|
AvlState,
|
|
33460
33741
|
{
|
|
@@ -33658,7 +33939,7 @@ var init_PageHeader = __esm({
|
|
|
33658
33939
|
info: "bg-info/10 text-info"
|
|
33659
33940
|
};
|
|
33660
33941
|
return /* @__PURE__ */ jsxs(Box, { className: cn("mb-6", className), children: [
|
|
33661
|
-
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(
|
|
33942
|
+
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(React83__default.Fragment, { children: [
|
|
33662
33943
|
idx > 0 && /* @__PURE__ */ jsx(Typography, { variant: "small", color: "muted", children: "/" }),
|
|
33663
33944
|
crumb.href ? /* @__PURE__ */ jsx(
|
|
33664
33945
|
"a",
|
|
@@ -34016,7 +34297,7 @@ var init_Section = __esm({
|
|
|
34016
34297
|
as: Component = "section"
|
|
34017
34298
|
}) => {
|
|
34018
34299
|
const hasHeader = title || description || action;
|
|
34019
|
-
return
|
|
34300
|
+
return React83__default.createElement(
|
|
34020
34301
|
Component,
|
|
34021
34302
|
{
|
|
34022
34303
|
className: cn(
|
|
@@ -34390,7 +34671,7 @@ var init_WizardContainer = __esm({
|
|
|
34390
34671
|
const isCompleted = index < currentStep;
|
|
34391
34672
|
const stepKey = step.id ?? step.tabId ?? `step-${index}`;
|
|
34392
34673
|
const stepTitle = step.title ?? step.name ?? `Step ${index + 1}`;
|
|
34393
|
-
return /* @__PURE__ */ jsxs(
|
|
34674
|
+
return /* @__PURE__ */ jsxs(React83__default.Fragment, { children: [
|
|
34394
34675
|
/* @__PURE__ */ jsx(
|
|
34395
34676
|
Button,
|
|
34396
34677
|
{
|
|
@@ -35348,6 +35629,7 @@ var init_GraphCanvas = __esm({
|
|
|
35348
35629
|
title,
|
|
35349
35630
|
nodes: propNodes = NO_NODES,
|
|
35350
35631
|
edges: propEdges = NO_EDGES,
|
|
35632
|
+
proposedEdges = NO_EDGES,
|
|
35351
35633
|
similarity: propSimilarity = NO_SIM,
|
|
35352
35634
|
height = 400,
|
|
35353
35635
|
showLabels = true,
|
|
@@ -35355,6 +35637,7 @@ var init_GraphCanvas = __esm({
|
|
|
35355
35637
|
draggable = true,
|
|
35356
35638
|
actions,
|
|
35357
35639
|
onNodeClick,
|
|
35640
|
+
onMarkClick,
|
|
35358
35641
|
onNodeDoubleClick,
|
|
35359
35642
|
onBadgeClick,
|
|
35360
35643
|
nodeClickEvent,
|
|
@@ -35383,6 +35666,18 @@ var init_GraphCanvas = __esm({
|
|
|
35383
35666
|
const laidOutRef = useRef(false);
|
|
35384
35667
|
const [, forceUpdate] = useState(0);
|
|
35385
35668
|
const [logicalW, setLogicalW] = useState(800);
|
|
35669
|
+
const hasProposed = useMemo(() => propNodes.some((n) => n.mark?.kind === "proposed"), [propNodes]);
|
|
35670
|
+
const [pulseTick, setPulseTick] = useState(0);
|
|
35671
|
+
useEffect(() => {
|
|
35672
|
+
if (!hasProposed) return;
|
|
35673
|
+
let raf = 0;
|
|
35674
|
+
const loop = () => {
|
|
35675
|
+
setPulseTick((t2) => (t2 + 1) % 1e6);
|
|
35676
|
+
raf = requestAnimationFrame(loop);
|
|
35677
|
+
};
|
|
35678
|
+
raf = requestAnimationFrame(loop);
|
|
35679
|
+
return () => cancelAnimationFrame(raf);
|
|
35680
|
+
}, [hasProposed]);
|
|
35386
35681
|
useEffect(() => {
|
|
35387
35682
|
const canvas = canvasRef.current;
|
|
35388
35683
|
if (!canvas || typeof ResizeObserver === "undefined") return;
|
|
@@ -35684,18 +35979,38 @@ var init_GraphCanvas = __esm({
|
|
|
35684
35979
|
}
|
|
35685
35980
|
}
|
|
35686
35981
|
ctx.globalAlpha = 1;
|
|
35982
|
+
ctx.setLineDash([4, 4]);
|
|
35983
|
+
for (const edge of proposedEdges) {
|
|
35984
|
+
const source = nodes.find((n) => n.id === edge.source);
|
|
35985
|
+
const target = nodes.find((n) => n.id === edge.target);
|
|
35986
|
+
if (!source || !target) continue;
|
|
35987
|
+
ctx.globalAlpha = 0.4;
|
|
35988
|
+
ctx.beginPath();
|
|
35989
|
+
ctx.moveTo(source.x, source.y);
|
|
35990
|
+
ctx.lineTo(target.x, target.y);
|
|
35991
|
+
ctx.strokeStyle = edge.color || mutedColor;
|
|
35992
|
+
ctx.lineWidth = 1;
|
|
35993
|
+
ctx.stroke();
|
|
35994
|
+
}
|
|
35995
|
+
ctx.setLineDash([]);
|
|
35996
|
+
ctx.globalAlpha = 1;
|
|
35687
35997
|
for (const node of nodes) {
|
|
35688
35998
|
const size = node.size || 8;
|
|
35689
35999
|
const color = resolveColor3(node.color || getGroupColor(node.group, groups), canvas);
|
|
35690
36000
|
const isHovered = hoveredNode === node.id;
|
|
35691
36001
|
const isSelected = selectedNodeId !== void 0 && node.id === selectedNodeId;
|
|
35692
|
-
|
|
36002
|
+
const mark = node.mark;
|
|
36003
|
+
ctx.globalAlpha = hoveredNode && !neighbors.has(node.id) ? 0.2 : mark?.kind === "proposed" ? 0.55 : 1;
|
|
35693
36004
|
const radius = isSelected ? size + 4 : isHovered ? size + 2 : size;
|
|
35694
36005
|
ctx.beginPath();
|
|
35695
36006
|
ctx.arc(node.x, node.y, radius, 0, Math.PI * 2);
|
|
35696
|
-
ctx.fillStyle = color;
|
|
36007
|
+
ctx.fillStyle = mark?.kind === "proposed" ? mutedColor : color;
|
|
35697
36008
|
ctx.fill();
|
|
35698
|
-
if (
|
|
36009
|
+
if (mark?.kind === "proposed") {
|
|
36010
|
+
ctx.setLineDash([3, 3]);
|
|
36011
|
+
ctx.strokeStyle = resolveColor3(mark.tint ?? "var(--color-warning)", canvas);
|
|
36012
|
+
ctx.lineWidth = 1.5;
|
|
36013
|
+
} else if (isSelected) {
|
|
35699
36014
|
ctx.strokeStyle = accentColor;
|
|
35700
36015
|
ctx.lineWidth = 3;
|
|
35701
36016
|
} else {
|
|
@@ -35703,6 +36018,28 @@ var init_GraphCanvas = __esm({
|
|
|
35703
36018
|
ctx.lineWidth = isHovered ? 2 : 1;
|
|
35704
36019
|
}
|
|
35705
36020
|
ctx.stroke();
|
|
36021
|
+
ctx.setLineDash([]);
|
|
36022
|
+
if (mark?.kind === "suggested") {
|
|
36023
|
+
ctx.beginPath();
|
|
36024
|
+
ctx.arc(node.x, node.y, radius + 3, 0, Math.PI * 2);
|
|
36025
|
+
ctx.strokeStyle = accentColor;
|
|
36026
|
+
ctx.lineWidth = 2;
|
|
36027
|
+
ctx.stroke();
|
|
36028
|
+
ctx.beginPath();
|
|
36029
|
+
ctx.arc(node.x + radius * 0.7, node.y - radius * 0.7, 2.5, 0, Math.PI * 2);
|
|
36030
|
+
ctx.fillStyle = accentColor;
|
|
36031
|
+
ctx.fill();
|
|
36032
|
+
} else if (mark?.kind === "proposed") {
|
|
36033
|
+
const phase = pulseTick % 60 / 60;
|
|
36034
|
+
const baseAlpha = hoveredNode && !neighbors.has(node.id) ? 0.2 : 0.55;
|
|
36035
|
+
ctx.globalAlpha = baseAlpha * (0.4 + 0.4 * (1 - Math.abs(phase * 2 - 1)));
|
|
36036
|
+
ctx.beginPath();
|
|
36037
|
+
ctx.arc(node.x, node.y, radius + 6 + Math.sin(phase * Math.PI * 2) * 3, 0, Math.PI * 2);
|
|
36038
|
+
ctx.strokeStyle = resolveColor3(mark.tint ?? "var(--color-warning)", canvas);
|
|
36039
|
+
ctx.lineWidth = 1.5;
|
|
36040
|
+
ctx.stroke();
|
|
36041
|
+
ctx.globalAlpha = baseAlpha;
|
|
36042
|
+
}
|
|
35706
36043
|
if (showLabels && node.label) {
|
|
35707
36044
|
const displayLabel = truncateLabel(node.label);
|
|
35708
36045
|
ctx.font = `${isSelected || isHovered ? "700" : "600"} 12px ${fontFamily}`;
|
|
@@ -35837,11 +36174,15 @@ var init_GraphCanvas = __esm({
|
|
|
35837
36174
|
return;
|
|
35838
36175
|
}
|
|
35839
36176
|
}
|
|
36177
|
+
if (node.mark && onMarkClick) {
|
|
36178
|
+
onMarkClick(node);
|
|
36179
|
+
return;
|
|
36180
|
+
}
|
|
35840
36181
|
handleNodeClick(node);
|
|
35841
36182
|
}
|
|
35842
36183
|
}
|
|
35843
36184
|
},
|
|
35844
|
-
[toCoords, nodeAt, handleNodeClick, onBadgeClick, selectedNodeId]
|
|
36185
|
+
[toCoords, nodeAt, handleNodeClick, onBadgeClick, onMarkClick, selectedNodeId]
|
|
35845
36186
|
);
|
|
35846
36187
|
const handlePointerLeave = useCallback(() => {
|
|
35847
36188
|
setHoveredNode(null);
|
|
@@ -36117,7 +36458,7 @@ var init_ImportPreviewTree = __esm({
|
|
|
36117
36458
|
const renderUnit = (unit, childrenByParent, depth) => {
|
|
36118
36459
|
const summary = fieldSummary(unit);
|
|
36119
36460
|
const children = childrenByParent.get(unit.ref) ?? [];
|
|
36120
|
-
return /* @__PURE__ */ jsxs(
|
|
36461
|
+
return /* @__PURE__ */ jsxs(React83__default.Fragment, { children: [
|
|
36121
36462
|
/* @__PURE__ */ jsxs(
|
|
36122
36463
|
Box,
|
|
36123
36464
|
{
|
|
@@ -36214,7 +36555,7 @@ var init_ImportProgress = __esm({
|
|
|
36214
36555
|
PIPELINE.map((key, index) => {
|
|
36215
36556
|
const isComplete = index < currentIndex;
|
|
36216
36557
|
const isActive = index === currentIndex;
|
|
36217
|
-
return /* @__PURE__ */ jsxs(
|
|
36558
|
+
return /* @__PURE__ */ jsxs(React83__default.Fragment, { children: [
|
|
36218
36559
|
index > 0 ? /* @__PURE__ */ jsx(Box, { className: "h-px w-4 bg-border" }) : null,
|
|
36219
36560
|
/* @__PURE__ */ jsxs(Box, { className: "flex items-center gap-1", "data-testid": `import-progress-step-${key}`, children: [
|
|
36220
36561
|
/* @__PURE__ */ jsx(
|
|
@@ -36368,9 +36709,6 @@ var init_types2 = __esm({
|
|
|
36368
36709
|
};
|
|
36369
36710
|
}
|
|
36370
36711
|
});
|
|
36371
|
-
function humanizeFieldName(name) {
|
|
36372
|
-
return name.replace(/([a-z])([A-Z])/g, "$1 $2").replace(/([A-Z]+)([A-Z][a-z])/g, "$1 $2").replace(/[_-]/g, " ").replace(/\b\w/g, (c) => c.toUpperCase()).replace(/\b([A-Z])([A-Z]+)\b/g, (_, first, rest) => first + rest.toLowerCase()).trim();
|
|
36373
|
-
}
|
|
36374
36712
|
function normalizeColumns(columns) {
|
|
36375
36713
|
return columns.map((col) => {
|
|
36376
36714
|
if (typeof col === "string") {
|
|
@@ -36795,6 +37133,7 @@ var init_DataTable = __esm({
|
|
|
36795
37133
|
"components/core/organisms/DataTable.tsx"() {
|
|
36796
37134
|
"use client";
|
|
36797
37135
|
init_cn();
|
|
37136
|
+
init_format();
|
|
36798
37137
|
init_getNestedValue();
|
|
36799
37138
|
init_atoms();
|
|
36800
37139
|
init_Box();
|
|
@@ -36847,9 +37186,6 @@ function getBadgeVariant(fieldName, value) {
|
|
|
36847
37186
|
}
|
|
36848
37187
|
return "default";
|
|
36849
37188
|
}
|
|
36850
|
-
function formatFieldLabel(fieldName) {
|
|
36851
|
-
return fieldName.replace(/([A-Z])/g, " $1").replace(/^./, (str) => str.toUpperCase());
|
|
36852
|
-
}
|
|
36853
37189
|
function formatFieldValue2(value, fieldName) {
|
|
36854
37190
|
if (typeof value === "number") {
|
|
36855
37191
|
if (fieldName.toLowerCase().includes("progress") || fieldName.toLowerCase().includes("percent")) {
|
|
@@ -36977,7 +37313,7 @@ function buildFieldTypeMap(fields) {
|
|
|
36977
37313
|
}
|
|
36978
37314
|
return map;
|
|
36979
37315
|
}
|
|
36980
|
-
var ReactMarkdown2, DetailPanel;
|
|
37316
|
+
var formatFieldLabel, ReactMarkdown2, DetailPanel;
|
|
36981
37317
|
var init_DetailPanel = __esm({
|
|
36982
37318
|
"components/core/organisms/DetailPanel.tsx"() {
|
|
36983
37319
|
"use client";
|
|
@@ -36989,8 +37325,10 @@ var init_DetailPanel = __esm({
|
|
|
36989
37325
|
init_ErrorState();
|
|
36990
37326
|
init_EmptyState();
|
|
36991
37327
|
init_cn();
|
|
37328
|
+
init_format();
|
|
36992
37329
|
init_getNestedValue();
|
|
36993
37330
|
init_useEventBus();
|
|
37331
|
+
formatFieldLabel = humanizeFieldName;
|
|
36994
37332
|
ReactMarkdown2 = lazy(() => import('react-markdown'));
|
|
36995
37333
|
DetailPanel = ({
|
|
36996
37334
|
title: propTitle,
|
|
@@ -37320,7 +37658,7 @@ var init_DetailPanel = __esm({
|
|
|
37320
37658
|
}
|
|
37321
37659
|
});
|
|
37322
37660
|
function extractTitle(children) {
|
|
37323
|
-
if (!
|
|
37661
|
+
if (!React83__default.isValidElement(children)) return void 0;
|
|
37324
37662
|
const props = children.props;
|
|
37325
37663
|
if (typeof props.title === "string") {
|
|
37326
37664
|
return props.title;
|
|
@@ -37670,12 +38008,12 @@ var init_Form = __esm({
|
|
|
37670
38008
|
const isSchemaEntity = isOrbitalEntitySchema(entity);
|
|
37671
38009
|
const resolvedEntity = isSchemaEntity ? entity : void 0;
|
|
37672
38010
|
const entityName = typeof entity === "string" ? entity : resolvedEntity?.name;
|
|
37673
|
-
const normalizedInitialData =
|
|
38011
|
+
const normalizedInitialData = React83__default.useMemo(() => {
|
|
37674
38012
|
const entityRowAsInitial = isPlainEntityRow(entity) ? entity : void 0;
|
|
37675
38013
|
const callerInitial = initialData !== null && typeof initialData === "object" && !Array.isArray(initialData) ? initialData : {};
|
|
37676
38014
|
return entityRowAsInitial !== void 0 ? { ...entityRowAsInitial, ...callerInitial } : callerInitial;
|
|
37677
38015
|
}, [entity, initialData]);
|
|
37678
|
-
const entityDerivedFields =
|
|
38016
|
+
const entityDerivedFields = React83__default.useMemo(() => {
|
|
37679
38017
|
if (fields && fields.length > 0) return void 0;
|
|
37680
38018
|
if (!resolvedEntity) return void 0;
|
|
37681
38019
|
return resolvedEntity.fields.map(
|
|
@@ -37696,16 +38034,16 @@ var init_Form = __esm({
|
|
|
37696
38034
|
const conditionalFields = typeof conditionalFieldsRaw === "boolean" ? {} : conditionalFieldsRaw;
|
|
37697
38035
|
const hiddenCalculations = typeof hiddenCalculationsRaw === "boolean" ? [] : hiddenCalculationsRaw;
|
|
37698
38036
|
const violationTriggers = typeof violationTriggersRaw === "boolean" ? [] : violationTriggersRaw;
|
|
37699
|
-
const [formData, setFormData] =
|
|
38037
|
+
const [formData, setFormData] = React83__default.useState(
|
|
37700
38038
|
normalizedInitialData
|
|
37701
38039
|
);
|
|
37702
|
-
const [collapsedSections, setCollapsedSections] =
|
|
38040
|
+
const [collapsedSections, setCollapsedSections] = React83__default.useState(
|
|
37703
38041
|
/* @__PURE__ */ new Set()
|
|
37704
38042
|
);
|
|
37705
|
-
const [submitError, setSubmitError] =
|
|
37706
|
-
const formRef =
|
|
38043
|
+
const [submitError, setSubmitError] = React83__default.useState(null);
|
|
38044
|
+
const formRef = React83__default.useRef(null);
|
|
37707
38045
|
const formMode = props.mode;
|
|
37708
|
-
const mountedRef =
|
|
38046
|
+
const mountedRef = React83__default.useRef(false);
|
|
37709
38047
|
if (!mountedRef.current) {
|
|
37710
38048
|
mountedRef.current = true;
|
|
37711
38049
|
debug("forms", "mount", {
|
|
@@ -37718,7 +38056,7 @@ var init_Form = __esm({
|
|
|
37718
38056
|
});
|
|
37719
38057
|
}
|
|
37720
38058
|
const shouldShowCancel = showCancel ?? (fields && fields.length > 0);
|
|
37721
|
-
const evalContext =
|
|
38059
|
+
const evalContext = React83__default.useMemo(
|
|
37722
38060
|
() => ({
|
|
37723
38061
|
formValues: formData,
|
|
37724
38062
|
globalVariables: externalContext?.globalVariables ?? {},
|
|
@@ -37727,7 +38065,7 @@ var init_Form = __esm({
|
|
|
37727
38065
|
}),
|
|
37728
38066
|
[formData, externalContext]
|
|
37729
38067
|
);
|
|
37730
|
-
|
|
38068
|
+
React83__default.useEffect(() => {
|
|
37731
38069
|
debug("forms", "initialData-sync", {
|
|
37732
38070
|
mode: formMode,
|
|
37733
38071
|
normalizedInitialData,
|
|
@@ -37738,7 +38076,7 @@ var init_Form = __esm({
|
|
|
37738
38076
|
setFormData(normalizedInitialData);
|
|
37739
38077
|
}
|
|
37740
38078
|
}, [normalizedInitialData]);
|
|
37741
|
-
const processCalculations =
|
|
38079
|
+
const processCalculations = React83__default.useCallback(
|
|
37742
38080
|
(changedFieldId, newFormData) => {
|
|
37743
38081
|
if (!hiddenCalculations.length) return;
|
|
37744
38082
|
const context = {
|
|
@@ -37763,7 +38101,7 @@ var init_Form = __esm({
|
|
|
37763
38101
|
},
|
|
37764
38102
|
[hiddenCalculations, externalContext, eventBus]
|
|
37765
38103
|
);
|
|
37766
|
-
const checkViolations =
|
|
38104
|
+
const checkViolations = React83__default.useCallback(
|
|
37767
38105
|
(changedFieldId, newFormData) => {
|
|
37768
38106
|
if (!violationTriggers.length) return;
|
|
37769
38107
|
const context = {
|
|
@@ -37801,7 +38139,7 @@ var init_Form = __esm({
|
|
|
37801
38139
|
processCalculations(name, newFormData);
|
|
37802
38140
|
checkViolations(name, newFormData);
|
|
37803
38141
|
};
|
|
37804
|
-
const isFieldVisible =
|
|
38142
|
+
const isFieldVisible = React83__default.useCallback(
|
|
37805
38143
|
(fieldName) => {
|
|
37806
38144
|
const condition = conditionalFields[fieldName];
|
|
37807
38145
|
if (!condition) return true;
|
|
@@ -37809,7 +38147,7 @@ var init_Form = __esm({
|
|
|
37809
38147
|
},
|
|
37810
38148
|
[conditionalFields, evalContext]
|
|
37811
38149
|
);
|
|
37812
|
-
const isSectionVisible =
|
|
38150
|
+
const isSectionVisible = React83__default.useCallback(
|
|
37813
38151
|
(section) => {
|
|
37814
38152
|
if (!section.condition) return true;
|
|
37815
38153
|
return Boolean(evaluateFormExpression(section.condition, evalContext));
|
|
@@ -37885,7 +38223,7 @@ var init_Form = __esm({
|
|
|
37885
38223
|
eventBus.emit(`UI:${onCancel}`);
|
|
37886
38224
|
}
|
|
37887
38225
|
};
|
|
37888
|
-
const renderField =
|
|
38226
|
+
const renderField = React83__default.useCallback(
|
|
37889
38227
|
(field) => {
|
|
37890
38228
|
const fieldName = field.name || field.field;
|
|
37891
38229
|
if (!fieldName) return null;
|
|
@@ -37906,7 +38244,7 @@ var init_Form = __esm({
|
|
|
37906
38244
|
[formData, isFieldVisible, relationsData, relationsLoading, isLoading]
|
|
37907
38245
|
);
|
|
37908
38246
|
const effectiveFields = entityDerivedFields ?? fields;
|
|
37909
|
-
const normalizedFields =
|
|
38247
|
+
const normalizedFields = React83__default.useMemo(() => {
|
|
37910
38248
|
if (!effectiveFields || effectiveFields.length === 0) return [];
|
|
37911
38249
|
return effectiveFields.map((field) => {
|
|
37912
38250
|
if (typeof field === "string") {
|
|
@@ -37930,7 +38268,7 @@ var init_Form = __esm({
|
|
|
37930
38268
|
return field;
|
|
37931
38269
|
});
|
|
37932
38270
|
}, [effectiveFields, resolvedEntity]);
|
|
37933
|
-
const schemaFields =
|
|
38271
|
+
const schemaFields = React83__default.useMemo(() => {
|
|
37934
38272
|
if (normalizedFields.length === 0) return null;
|
|
37935
38273
|
if (isDebugEnabled()) {
|
|
37936
38274
|
debugGroup(`Form: ${entityName || "unknown"}`);
|
|
@@ -37940,7 +38278,7 @@ var init_Form = __esm({
|
|
|
37940
38278
|
}
|
|
37941
38279
|
return normalizedFields.map(renderField).filter(Boolean);
|
|
37942
38280
|
}, [normalizedFields, renderField, entityName, conditionalFields]);
|
|
37943
|
-
const sectionElements =
|
|
38281
|
+
const sectionElements = React83__default.useMemo(() => {
|
|
37944
38282
|
if (!sections || sections.length === 0) return null;
|
|
37945
38283
|
return sections.map((section) => {
|
|
37946
38284
|
if (!isSectionVisible(section)) {
|
|
@@ -38519,7 +38857,7 @@ function formatValue3(value, fieldName) {
|
|
|
38519
38857
|
return String(value);
|
|
38520
38858
|
}
|
|
38521
38859
|
function formatFieldLabel2(fieldName) {
|
|
38522
|
-
return fieldName
|
|
38860
|
+
return humanizeFieldName(fieldName).replace(/\sId$/, "").trim();
|
|
38523
38861
|
}
|
|
38524
38862
|
var STATUS_STYLES, StatusBadge, ProgressIndicator, List3;
|
|
38525
38863
|
var init_List = __esm({
|
|
@@ -38531,6 +38869,7 @@ var init_List = __esm({
|
|
|
38531
38869
|
init_EmptyState();
|
|
38532
38870
|
init_LoadingState();
|
|
38533
38871
|
init_cn();
|
|
38872
|
+
init_format();
|
|
38534
38873
|
init_getNestedValue();
|
|
38535
38874
|
init_useEventBus();
|
|
38536
38875
|
init_types2();
|
|
@@ -38665,7 +39004,7 @@ var init_List = __esm({
|
|
|
38665
39004
|
if (entity && typeof entity === "object" && "id" in entity) return [entity];
|
|
38666
39005
|
return [];
|
|
38667
39006
|
}, [entity]);
|
|
38668
|
-
const getItemActions =
|
|
39007
|
+
const getItemActions = React83__default.useCallback(
|
|
38669
39008
|
(item) => {
|
|
38670
39009
|
if (!itemActions) return [];
|
|
38671
39010
|
if (typeof itemActions === "function") {
|
|
@@ -39146,7 +39485,7 @@ var init_MediaGallery = __esm({
|
|
|
39146
39485
|
[selectable, selectedItems, selectionEvent, eventBus]
|
|
39147
39486
|
);
|
|
39148
39487
|
const entityData = Array.isArray(entity) ? entity : [];
|
|
39149
|
-
const items =
|
|
39488
|
+
const items = React83__default.useMemo(() => {
|
|
39150
39489
|
if (propItems && propItems.length > 0) return propItems;
|
|
39151
39490
|
if (entityData.length === 0) return [];
|
|
39152
39491
|
return entityData.map((record, idx) => {
|
|
@@ -39311,7 +39650,7 @@ var init_MediaGallery = __esm({
|
|
|
39311
39650
|
}
|
|
39312
39651
|
});
|
|
39313
39652
|
function extractTitle2(children) {
|
|
39314
|
-
if (!
|
|
39653
|
+
if (!React83__default.isValidElement(children)) return void 0;
|
|
39315
39654
|
const props = children.props;
|
|
39316
39655
|
if (typeof props.title === "string") {
|
|
39317
39656
|
return props.title;
|
|
@@ -39585,7 +39924,7 @@ var init_debugRegistry = __esm({
|
|
|
39585
39924
|
}
|
|
39586
39925
|
});
|
|
39587
39926
|
function useDebugData() {
|
|
39588
|
-
const [data, setData] =
|
|
39927
|
+
const [data, setData] = React83.useState(() => ({
|
|
39589
39928
|
traits: [],
|
|
39590
39929
|
ticks: [],
|
|
39591
39930
|
guards: [],
|
|
@@ -39599,7 +39938,7 @@ function useDebugData() {
|
|
|
39599
39938
|
},
|
|
39600
39939
|
lastUpdate: Date.now()
|
|
39601
39940
|
}));
|
|
39602
|
-
|
|
39941
|
+
React83.useEffect(() => {
|
|
39603
39942
|
const updateData = () => {
|
|
39604
39943
|
setData({
|
|
39605
39944
|
traits: getAllTraits(),
|
|
@@ -39708,12 +40047,12 @@ function layoutGraph(states, transitions, initialState, width, height) {
|
|
|
39708
40047
|
return positions;
|
|
39709
40048
|
}
|
|
39710
40049
|
function WalkMinimap() {
|
|
39711
|
-
const [walkStep, setWalkStep] =
|
|
39712
|
-
const [traits2, setTraits] =
|
|
39713
|
-
const [coveredEdges, setCoveredEdges] =
|
|
39714
|
-
const [completedTraits, setCompletedTraits] =
|
|
39715
|
-
const prevTraitRef =
|
|
39716
|
-
|
|
40050
|
+
const [walkStep, setWalkStep] = React83.useState(null);
|
|
40051
|
+
const [traits2, setTraits] = React83.useState([]);
|
|
40052
|
+
const [coveredEdges, setCoveredEdges] = React83.useState([]);
|
|
40053
|
+
const [completedTraits, setCompletedTraits] = React83.useState(/* @__PURE__ */ new Set());
|
|
40054
|
+
const prevTraitRef = React83.useRef(null);
|
|
40055
|
+
React83.useEffect(() => {
|
|
39717
40056
|
const interval = setInterval(() => {
|
|
39718
40057
|
const w = window;
|
|
39719
40058
|
const step = w.__orbitalWalkStep;
|
|
@@ -40011,7 +40350,7 @@ function TicksTab({ ticks: ticks2 }) {
|
|
|
40011
40350
|
}
|
|
40012
40351
|
);
|
|
40013
40352
|
}
|
|
40014
|
-
const
|
|
40353
|
+
const formatTime3 = (ms) => {
|
|
40015
40354
|
if (ms === 0) return "never";
|
|
40016
40355
|
const seconds = Math.floor((Date.now() - ms) / 1e3);
|
|
40017
40356
|
if (seconds < 1) return "just now";
|
|
@@ -40037,7 +40376,7 @@ function TicksTab({ ticks: ticks2 }) {
|
|
|
40037
40376
|
tick.executionTime.toFixed(1),
|
|
40038
40377
|
"ms exec"
|
|
40039
40378
|
] }),
|
|
40040
|
-
/* @__PURE__ */ jsx("span", { children:
|
|
40379
|
+
/* @__PURE__ */ jsx("span", { children: formatTime3(tick.lastRun) })
|
|
40041
40380
|
] }),
|
|
40042
40381
|
tick.guardName && /* @__PURE__ */ jsx("div", { className: "mt-2", children: /* @__PURE__ */ jsxs(Badge, { variant: tick.guardPassed ? "success" : "danger", size: "sm", children: [
|
|
40043
40382
|
tick.guardName,
|
|
@@ -40149,19 +40488,19 @@ var init_EntitiesTab = __esm({
|
|
|
40149
40488
|
});
|
|
40150
40489
|
function EventFlowTab({ events: events2 }) {
|
|
40151
40490
|
const { t } = useTranslate();
|
|
40152
|
-
const [filter, setFilter] =
|
|
40153
|
-
const containerRef =
|
|
40154
|
-
const [autoScroll, setAutoScroll] =
|
|
40155
|
-
|
|
40491
|
+
const [filter, setFilter] = React83.useState("all");
|
|
40492
|
+
const containerRef = React83.useRef(null);
|
|
40493
|
+
const [autoScroll, setAutoScroll] = React83.useState(true);
|
|
40494
|
+
React83.useEffect(() => {
|
|
40156
40495
|
if (autoScroll && containerRef.current) {
|
|
40157
40496
|
containerRef.current.scrollTop = containerRef.current.scrollHeight;
|
|
40158
40497
|
}
|
|
40159
40498
|
}, [events2.length, autoScroll]);
|
|
40160
|
-
const filteredEvents =
|
|
40499
|
+
const filteredEvents = React83.useMemo(() => {
|
|
40161
40500
|
if (filter === "all") return events2;
|
|
40162
40501
|
return events2.filter((e) => e.type === filter);
|
|
40163
40502
|
}, [events2, filter]);
|
|
40164
|
-
const
|
|
40503
|
+
const formatTime3 = (timestamp) => {
|
|
40165
40504
|
const date = new Date(timestamp);
|
|
40166
40505
|
return date.toLocaleTimeString("en-US", {
|
|
40167
40506
|
hour12: false,
|
|
@@ -40237,7 +40576,7 @@ function EventFlowTab({ events: events2 }) {
|
|
|
40237
40576
|
{
|
|
40238
40577
|
className: "flex items-start gap-2 text-xs py-1 hover:bg-muted/50 rounded px-1",
|
|
40239
40578
|
children: [
|
|
40240
|
-
/* @__PURE__ */ jsx(Typography, { variant: "small", className: "text-muted-foreground font-mono min-w-[65px]", children:
|
|
40579
|
+
/* @__PURE__ */ jsx(Typography, { variant: "small", className: "text-muted-foreground font-mono min-w-[65px]", children: formatTime3(event.timestamp) }),
|
|
40241
40580
|
/* @__PURE__ */ jsx("span", { children: icon }),
|
|
40242
40581
|
/* @__PURE__ */ jsx(Badge, { variant, size: "sm", className: "min-w-[60px] justify-center", children: event.source }),
|
|
40243
40582
|
/* @__PURE__ */ jsx(Typography, { variant: "small", className: "text-muted-foreground", children: event.message })
|
|
@@ -40273,7 +40612,7 @@ var init_EventFlowTab = __esm({
|
|
|
40273
40612
|
});
|
|
40274
40613
|
function GuardsPanel({ guards }) {
|
|
40275
40614
|
const { t } = useTranslate();
|
|
40276
|
-
const [filter, setFilter] =
|
|
40615
|
+
const [filter, setFilter] = React83.useState("all");
|
|
40277
40616
|
if (guards.length === 0) {
|
|
40278
40617
|
return /* @__PURE__ */ jsx(
|
|
40279
40618
|
EmptyState,
|
|
@@ -40286,12 +40625,12 @@ function GuardsPanel({ guards }) {
|
|
|
40286
40625
|
}
|
|
40287
40626
|
const passedCount = guards.filter((g) => g.result).length;
|
|
40288
40627
|
const failedCount = guards.length - passedCount;
|
|
40289
|
-
const filteredGuards =
|
|
40628
|
+
const filteredGuards = React83.useMemo(() => {
|
|
40290
40629
|
if (filter === "all") return guards;
|
|
40291
40630
|
if (filter === "passed") return guards.filter((g) => g.result);
|
|
40292
40631
|
return guards.filter((g) => !g.result);
|
|
40293
40632
|
}, [guards, filter]);
|
|
40294
|
-
const
|
|
40633
|
+
const formatTime3 = (timestamp) => {
|
|
40295
40634
|
const date = new Date(timestamp);
|
|
40296
40635
|
return date.toLocaleTimeString("en-US", {
|
|
40297
40636
|
hour12: false,
|
|
@@ -40306,7 +40645,7 @@ function GuardsPanel({ guards }) {
|
|
|
40306
40645
|
/* @__PURE__ */ jsx(Badge, { variant: guard.result ? "success" : "danger", size: "sm", children: guard.result ? "\u2713" : "\u2717" }),
|
|
40307
40646
|
/* @__PURE__ */ jsx(Typography, { variant: "body", weight: "semibold", className: "text-warning", children: guard.guardName }),
|
|
40308
40647
|
/* @__PURE__ */ jsx(Typography, { variant: "small", className: "text-muted-foreground", children: guard.context.type === "transition" ? `${guard.context.transitionFrom} \u2192 ${guard.context.transitionTo}` : guard.context.tickName }),
|
|
40309
|
-
/* @__PURE__ */ jsx(Typography, { variant: "small", className: "text-muted-foreground ml-auto", children:
|
|
40648
|
+
/* @__PURE__ */ jsx(Typography, { variant: "small", className: "text-muted-foreground ml-auto", children: formatTime3(guard.timestamp) })
|
|
40310
40649
|
] }),
|
|
40311
40650
|
content: /* @__PURE__ */ jsxs(Stack, { gap: "sm", children: [
|
|
40312
40651
|
/* @__PURE__ */ jsxs("div", { children: [
|
|
@@ -40449,10 +40788,10 @@ function EffectBadge({ effect }) {
|
|
|
40449
40788
|
}
|
|
40450
40789
|
function TransitionTimeline({ transitions }) {
|
|
40451
40790
|
const { t } = useTranslate();
|
|
40452
|
-
const containerRef =
|
|
40453
|
-
const [autoScroll, setAutoScroll] =
|
|
40454
|
-
const [expandedId, setExpandedId] =
|
|
40455
|
-
|
|
40791
|
+
const containerRef = React83.useRef(null);
|
|
40792
|
+
const [autoScroll, setAutoScroll] = React83.useState(true);
|
|
40793
|
+
const [expandedId, setExpandedId] = React83.useState(null);
|
|
40794
|
+
React83.useEffect(() => {
|
|
40456
40795
|
if (autoScroll && containerRef.current) {
|
|
40457
40796
|
containerRef.current.scrollTop = containerRef.current.scrollHeight;
|
|
40458
40797
|
}
|
|
@@ -40467,7 +40806,7 @@ function TransitionTimeline({ transitions }) {
|
|
|
40467
40806
|
}
|
|
40468
40807
|
);
|
|
40469
40808
|
}
|
|
40470
|
-
const
|
|
40809
|
+
const formatTime3 = (ts) => {
|
|
40471
40810
|
const d = new Date(ts);
|
|
40472
40811
|
return d.toLocaleTimeString("en-US", {
|
|
40473
40812
|
hour12: false,
|
|
@@ -40515,7 +40854,7 @@ function TransitionTimeline({ transitions }) {
|
|
|
40515
40854
|
${hasFailedEffects ? "bg-error" : allPassed ? "bg-success" : "bg-muted-foreground"}
|
|
40516
40855
|
` }),
|
|
40517
40856
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 text-xs py-1 px-2", children: [
|
|
40518
|
-
/* @__PURE__ */ jsx(Typography, { variant: "small", className: "text-muted-foreground font-mono min-w-[65px]", children:
|
|
40857
|
+
/* @__PURE__ */ jsx(Typography, { variant: "small", className: "text-muted-foreground font-mono min-w-[65px]", children: formatTime3(trace.timestamp) }),
|
|
40519
40858
|
/* @__PURE__ */ jsx(Badge, { variant: "primary", size: "sm", className: "min-w-[60px] justify-center", children: trace.traitName }),
|
|
40520
40859
|
/* @__PURE__ */ jsxs(Typography, { variant: "small", className: "font-mono text-muted-foreground", children: [
|
|
40521
40860
|
trace.from,
|
|
@@ -40590,7 +40929,7 @@ function ServerBridgeTab({ bridge }) {
|
|
|
40590
40929
|
}
|
|
40591
40930
|
);
|
|
40592
40931
|
}
|
|
40593
|
-
const
|
|
40932
|
+
const formatTime3 = (ts) => {
|
|
40594
40933
|
if (ts === 0) return t("debug.never");
|
|
40595
40934
|
const d = new Date(ts);
|
|
40596
40935
|
return d.toLocaleTimeString("en-US", {
|
|
@@ -40633,7 +40972,7 @@ function ServerBridgeTab({ bridge }) {
|
|
|
40633
40972
|
StatRow,
|
|
40634
40973
|
{
|
|
40635
40974
|
label: t("debug.lastHeartbeat"),
|
|
40636
|
-
value:
|
|
40975
|
+
value: formatTime3(bridge.lastHeartbeat)
|
|
40637
40976
|
}
|
|
40638
40977
|
)
|
|
40639
40978
|
] })
|
|
@@ -40732,9 +41071,9 @@ function getAllEvents(traits2) {
|
|
|
40732
41071
|
function EventDispatcherTab({ traits: traits2, schema }) {
|
|
40733
41072
|
const eventBus = useEventBus();
|
|
40734
41073
|
const { t } = useTranslate();
|
|
40735
|
-
const [log9, setLog] =
|
|
40736
|
-
const prevStatesRef =
|
|
40737
|
-
|
|
41074
|
+
const [log9, setLog] = React83.useState([]);
|
|
41075
|
+
const prevStatesRef = React83.useRef(/* @__PURE__ */ new Map());
|
|
41076
|
+
React83.useEffect(() => {
|
|
40738
41077
|
for (const trait of traits2) {
|
|
40739
41078
|
const prev = prevStatesRef.current.get(trait.id);
|
|
40740
41079
|
if (prev && prev !== trait.currentState) {
|
|
@@ -40903,10 +41242,10 @@ function VerifyModePanel({
|
|
|
40903
41242
|
localCount
|
|
40904
41243
|
}) {
|
|
40905
41244
|
const { t } = useTranslate();
|
|
40906
|
-
const [expanded, setExpanded] =
|
|
40907
|
-
const scrollRef =
|
|
40908
|
-
const prevCountRef =
|
|
40909
|
-
|
|
41245
|
+
const [expanded, setExpanded] = React83.useState(true);
|
|
41246
|
+
const scrollRef = React83.useRef(null);
|
|
41247
|
+
const prevCountRef = React83.useRef(0);
|
|
41248
|
+
React83.useEffect(() => {
|
|
40910
41249
|
if (expanded && transitions.length > prevCountRef.current && scrollRef.current) {
|
|
40911
41250
|
scrollRef.current.scrollTop = scrollRef.current.scrollHeight;
|
|
40912
41251
|
}
|
|
@@ -40963,10 +41302,10 @@ function RuntimeDebugger({
|
|
|
40963
41302
|
schema
|
|
40964
41303
|
}) {
|
|
40965
41304
|
const { t } = useTranslate();
|
|
40966
|
-
const [isCollapsed, setIsCollapsed] =
|
|
40967
|
-
const [isVisible, setIsVisible] =
|
|
41305
|
+
const [isCollapsed, setIsCollapsed] = React83.useState(mode === "verify" ? true : defaultCollapsed);
|
|
41306
|
+
const [isVisible, setIsVisible] = React83.useState(mode === "inline" || mode === "verify" || isDebugEnabled2());
|
|
40968
41307
|
const debugData = useDebugData();
|
|
40969
|
-
|
|
41308
|
+
React83.useEffect(() => {
|
|
40970
41309
|
if (mode === "inline") return;
|
|
40971
41310
|
return onDebugToggle((enabled) => {
|
|
40972
41311
|
setIsVisible(enabled);
|
|
@@ -40975,7 +41314,7 @@ function RuntimeDebugger({
|
|
|
40975
41314
|
}
|
|
40976
41315
|
});
|
|
40977
41316
|
}, [mode]);
|
|
40978
|
-
|
|
41317
|
+
React83.useEffect(() => {
|
|
40979
41318
|
if (mode === "inline") return;
|
|
40980
41319
|
const handleKeyDown = (e) => {
|
|
40981
41320
|
if (e.key === "`" && isVisible) {
|
|
@@ -41495,7 +41834,7 @@ var init_StatCard = __esm({
|
|
|
41495
41834
|
const labelToUse = propLabel ?? propTitle;
|
|
41496
41835
|
const eventBus = useEventBus();
|
|
41497
41836
|
const { t } = useTranslate();
|
|
41498
|
-
const handleActionClick =
|
|
41837
|
+
const handleActionClick = React83__default.useCallback(() => {
|
|
41499
41838
|
if (action?.event) {
|
|
41500
41839
|
eventBus.emit(`UI:${action.event}`, {});
|
|
41501
41840
|
}
|
|
@@ -41506,7 +41845,7 @@ var init_StatCard = __esm({
|
|
|
41506
41845
|
const data = Array.isArray(entity) ? entity : entity ? [entity] : [];
|
|
41507
41846
|
const isLoading = externalLoading ?? false;
|
|
41508
41847
|
const error = externalError;
|
|
41509
|
-
const computeMetricValue =
|
|
41848
|
+
const computeMetricValue = React83__default.useCallback(
|
|
41510
41849
|
(metric, items) => {
|
|
41511
41850
|
if (metric.value !== void 0) {
|
|
41512
41851
|
return metric.value;
|
|
@@ -41545,7 +41884,7 @@ var init_StatCard = __esm({
|
|
|
41545
41884
|
},
|
|
41546
41885
|
[]
|
|
41547
41886
|
);
|
|
41548
|
-
const schemaStats =
|
|
41887
|
+
const schemaStats = React83__default.useMemo(() => {
|
|
41549
41888
|
if (!metrics || metrics.length === 0) return null;
|
|
41550
41889
|
return metrics.map((metric) => ({
|
|
41551
41890
|
label: metric.label,
|
|
@@ -41553,7 +41892,7 @@ var init_StatCard = __esm({
|
|
|
41553
41892
|
format: metric.format
|
|
41554
41893
|
}));
|
|
41555
41894
|
}, [metrics, data, computeMetricValue]);
|
|
41556
|
-
const calculatedTrend =
|
|
41895
|
+
const calculatedTrend = React83__default.useMemo(() => {
|
|
41557
41896
|
if (manualTrend !== void 0) return manualTrend;
|
|
41558
41897
|
if (previousValue === void 0 || currentValue === void 0)
|
|
41559
41898
|
return void 0;
|
|
@@ -42193,8 +42532,8 @@ var init_SubagentTracePanel = __esm({
|
|
|
42193
42532
|
] });
|
|
42194
42533
|
};
|
|
42195
42534
|
InlineActivityStream = ({ activities, autoScroll = true, className }) => {
|
|
42196
|
-
const endRef =
|
|
42197
|
-
|
|
42535
|
+
const endRef = React83__default.useRef(null);
|
|
42536
|
+
React83__default.useEffect(() => {
|
|
42198
42537
|
if (!autoScroll) return;
|
|
42199
42538
|
endRef.current?.scrollIntoView({ behavior: "smooth", block: "end" });
|
|
42200
42539
|
}, [activities.length, autoScroll]);
|
|
@@ -42288,7 +42627,7 @@ var init_SubagentTracePanel = __esm({
|
|
|
42288
42627
|
};
|
|
42289
42628
|
SubagentRichCard = ({ subagent }) => {
|
|
42290
42629
|
const { t } = useTranslate();
|
|
42291
|
-
const activities =
|
|
42630
|
+
const activities = React83__default.useMemo(
|
|
42292
42631
|
() => subagentMessagesToActivities(subagent.messages),
|
|
42293
42632
|
[subagent.messages]
|
|
42294
42633
|
);
|
|
@@ -42365,8 +42704,8 @@ var init_SubagentTracePanel = __esm({
|
|
|
42365
42704
|
] });
|
|
42366
42705
|
};
|
|
42367
42706
|
CoordinatorConversation = ({ messages, autoScroll = true, className }) => {
|
|
42368
|
-
const endRef =
|
|
42369
|
-
|
|
42707
|
+
const endRef = React83__default.useRef(null);
|
|
42708
|
+
React83__default.useEffect(() => {
|
|
42370
42709
|
if (!autoScroll) return;
|
|
42371
42710
|
endRef.current?.scrollIntoView({ behavior: "smooth", block: "end" });
|
|
42372
42711
|
}, [messages.length, autoScroll]);
|
|
@@ -42745,7 +43084,7 @@ var init_TeamOrganism = __esm({
|
|
|
42745
43084
|
TeamOrganism.displayName = "TeamOrganism";
|
|
42746
43085
|
}
|
|
42747
43086
|
});
|
|
42748
|
-
function
|
|
43087
|
+
function formatDate2(value) {
|
|
42749
43088
|
const d = new Date(value);
|
|
42750
43089
|
if (isNaN(d.getTime())) return value;
|
|
42751
43090
|
return d.toLocaleDateString(void 0, { year: "numeric", month: "short", day: "numeric" });
|
|
@@ -42801,7 +43140,7 @@ var init_Timeline = __esm({
|
|
|
42801
43140
|
}) => {
|
|
42802
43141
|
const { t } = useTranslate();
|
|
42803
43142
|
const entityData = entity ?? [];
|
|
42804
|
-
const items =
|
|
43143
|
+
const items = React83__default.useMemo(() => {
|
|
42805
43144
|
if (propItems) return propItems;
|
|
42806
43145
|
if (entityData.length === 0) return [];
|
|
42807
43146
|
return entityData.map((record, idx) => {
|
|
@@ -42877,7 +43216,7 @@ var init_Timeline = __esm({
|
|
|
42877
43216
|
/* @__PURE__ */ jsxs(VStack, { gap: "xs", className: cn("flex-1 min-w-0", !isLast && "pb-6"), children: [
|
|
42878
43217
|
/* @__PURE__ */ jsxs(HStack, { justify: "between", align: "start", wrap: true, children: [
|
|
42879
43218
|
/* @__PURE__ */ jsx(Typography, { variant: "body", weight: "semibold", children: item.title }),
|
|
42880
|
-
item.date && /* @__PURE__ */ jsx(Typography, { variant: "caption", color: "secondary", className: "flex-shrink-0", children:
|
|
43219
|
+
item.date && /* @__PURE__ */ jsx(Typography, { variant: "caption", color: "secondary", className: "flex-shrink-0", children: formatDate2(item.date) })
|
|
42881
43220
|
] }),
|
|
42882
43221
|
item.description && /* @__PURE__ */ jsx(Typography, { variant: "small", color: "secondary", children: item.description }),
|
|
42883
43222
|
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)) }),
|
|
@@ -42903,7 +43242,7 @@ var init_Timeline = __esm({
|
|
|
42903
43242
|
}
|
|
42904
43243
|
});
|
|
42905
43244
|
function extractToastProps(children) {
|
|
42906
|
-
if (!
|
|
43245
|
+
if (!React83__default.isValidElement(children)) {
|
|
42907
43246
|
if (typeof children === "string") {
|
|
42908
43247
|
return { message: children };
|
|
42909
43248
|
}
|
|
@@ -42945,7 +43284,7 @@ var init_ToastSlot = __esm({
|
|
|
42945
43284
|
eventBus.emit(`${prefix}CLOSE`);
|
|
42946
43285
|
};
|
|
42947
43286
|
if (!isVisible) return null;
|
|
42948
|
-
const isCustomContent =
|
|
43287
|
+
const isCustomContent = React83__default.isValidElement(children) && !message;
|
|
42949
43288
|
return /* @__PURE__ */ jsx(Box, { className: "fixed bottom-4 right-4 z-50", children: isCustomContent ? children : /* @__PURE__ */ jsx(
|
|
42950
43289
|
Toast,
|
|
42951
43290
|
{
|
|
@@ -43183,6 +43522,10 @@ var init_component_registry_generated = __esm({
|
|
|
43183
43522
|
init_SubagentTracePanel();
|
|
43184
43523
|
init_SvgBranch();
|
|
43185
43524
|
init_SvgConnection();
|
|
43525
|
+
init_SvgDrawGroup();
|
|
43526
|
+
init_SvgDrawShape();
|
|
43527
|
+
init_SvgDrawShapeLayer();
|
|
43528
|
+
init_SvgDrawText();
|
|
43186
43529
|
init_SvgFlow();
|
|
43187
43530
|
init_SvgGrid();
|
|
43188
43531
|
init_SvgLobe();
|
|
@@ -43193,6 +43536,7 @@ var init_component_registry_generated = __esm({
|
|
|
43193
43536
|
init_SvgRing();
|
|
43194
43537
|
init_SvgShield();
|
|
43195
43538
|
init_SvgStack();
|
|
43539
|
+
init_SvgStage();
|
|
43196
43540
|
init_SwipeableRow();
|
|
43197
43541
|
init_Switch();
|
|
43198
43542
|
init_TabbedContainer();
|
|
@@ -43454,6 +43798,10 @@ var init_component_registry_generated = __esm({
|
|
|
43454
43798
|
"SubagentTracePanel": SubagentTracePanel,
|
|
43455
43799
|
"SvgBranch": SvgBranch,
|
|
43456
43800
|
"SvgConnection": SvgConnection,
|
|
43801
|
+
"SvgDrawGroup": SvgDrawGroup,
|
|
43802
|
+
"SvgDrawShape": SvgDrawShape,
|
|
43803
|
+
"SvgDrawShapeLayer": SvgDrawShapeLayer,
|
|
43804
|
+
"SvgDrawText": SvgDrawText,
|
|
43457
43805
|
"SvgFlow": SvgFlow,
|
|
43458
43806
|
"SvgGrid": SvgGrid,
|
|
43459
43807
|
"SvgLobe": SvgLobe,
|
|
@@ -43464,6 +43812,7 @@ var init_component_registry_generated = __esm({
|
|
|
43464
43812
|
"SvgRing": SvgRing,
|
|
43465
43813
|
"SvgShield": SvgShield,
|
|
43466
43814
|
"SvgStack": SvgStack,
|
|
43815
|
+
"SvgStage": SvgStage,
|
|
43467
43816
|
"SwipeableRow": SwipeableRow,
|
|
43468
43817
|
"Switch": Switch,
|
|
43469
43818
|
"TabbedContainer": TabbedContainer,
|
|
@@ -43514,7 +43863,7 @@ function SuspenseConfigProvider({
|
|
|
43514
43863
|
config,
|
|
43515
43864
|
children
|
|
43516
43865
|
}) {
|
|
43517
|
-
return
|
|
43866
|
+
return React83__default.createElement(
|
|
43518
43867
|
SuspenseConfigContext.Provider,
|
|
43519
43868
|
{ value: config },
|
|
43520
43869
|
children
|
|
@@ -43540,7 +43889,7 @@ function enrichFormFields(fields, entityDef) {
|
|
|
43540
43889
|
if (entityField) {
|
|
43541
43890
|
const enriched = {
|
|
43542
43891
|
name: field,
|
|
43543
|
-
label: field
|
|
43892
|
+
label: humanizeFieldName(field),
|
|
43544
43893
|
type: entityField.type,
|
|
43545
43894
|
required: entityField.required ?? false
|
|
43546
43895
|
};
|
|
@@ -43554,9 +43903,9 @@ function enrichFormFields(fields, entityDef) {
|
|
|
43554
43903
|
}
|
|
43555
43904
|
return enriched;
|
|
43556
43905
|
}
|
|
43557
|
-
return { name: field, label: field
|
|
43906
|
+
return { name: field, label: humanizeFieldName(field) };
|
|
43558
43907
|
}
|
|
43559
|
-
if (field && typeof field === "object" && !Array.isArray(field) && !
|
|
43908
|
+
if (field && typeof field === "object" && !Array.isArray(field) && !React83__default.isValidElement(field) && !(field instanceof Date)) {
|
|
43560
43909
|
const obj = field;
|
|
43561
43910
|
const fieldName = typeof obj.name === "string" ? obj.name : typeof obj.field === "string" ? obj.field : void 0;
|
|
43562
43911
|
if (!fieldName) return field;
|
|
@@ -44016,7 +44365,7 @@ function renderPatternChildren(children, onDismiss, parentId = "root", parentPat
|
|
|
44016
44365
|
const key = `${parentId}-${index}-trait:${traitName}`;
|
|
44017
44366
|
return /* @__PURE__ */ jsx(TraitFrame, { traitName }, key);
|
|
44018
44367
|
}
|
|
44019
|
-
return /* @__PURE__ */ jsx(
|
|
44368
|
+
return /* @__PURE__ */ jsx(React83__default.Fragment, { children: child }, `${parentId}-${index}`);
|
|
44020
44369
|
}
|
|
44021
44370
|
if (!child || typeof child !== "object") return null;
|
|
44022
44371
|
const childId = `${parentId}-${index}`;
|
|
@@ -44073,14 +44422,14 @@ function isPatternConfig(value) {
|
|
|
44073
44422
|
if (value === null || value === void 0) return false;
|
|
44074
44423
|
if (typeof value !== "object") return false;
|
|
44075
44424
|
if (Array.isArray(value)) return false;
|
|
44076
|
-
if (
|
|
44425
|
+
if (React83__default.isValidElement(value)) return false;
|
|
44077
44426
|
if (value instanceof Date) return false;
|
|
44078
44427
|
if (typeof value === "function") return false;
|
|
44079
44428
|
const record = value;
|
|
44080
44429
|
return "type" in record && typeof record.type === "string" && getComponentForPattern$1(record.type) !== null;
|
|
44081
44430
|
}
|
|
44082
44431
|
function isPlainConfigObject(value) {
|
|
44083
|
-
if (
|
|
44432
|
+
if (React83__default.isValidElement(value)) return false;
|
|
44084
44433
|
if (value instanceof Date) return false;
|
|
44085
44434
|
const proto = Object.getPrototypeOf(value);
|
|
44086
44435
|
return proto === Object.prototype || proto === null;
|
|
@@ -44208,10 +44557,11 @@ function SlotContentRenderer({
|
|
|
44208
44557
|
for (const slotKey of CONTENT_NODE_SLOTS) {
|
|
44209
44558
|
const slotVal = restProps[slotKey];
|
|
44210
44559
|
if (slotVal === void 0 || slotVal === null) continue;
|
|
44211
|
-
if (
|
|
44212
|
-
|
|
44560
|
+
if (React83__default.isValidElement(slotVal) || typeof slotVal === "string" || typeof slotVal === "number" || typeof slotVal === "boolean") continue;
|
|
44561
|
+
const typelessChildren = !Array.isArray(slotVal) && typeof slotVal === "object" && !("type" in slotVal) && Array.isArray(slotVal.children) ? slotVal.children : void 0;
|
|
44562
|
+
if (typelessChildren !== void 0 || Array.isArray(slotVal) || typeof slotVal === "object" && "type" in slotVal) {
|
|
44213
44563
|
nodeSlotOverrides[slotKey] = renderPatternChildren(
|
|
44214
|
-
slotVal,
|
|
44564
|
+
typelessChildren ?? slotVal,
|
|
44215
44565
|
onDismiss,
|
|
44216
44566
|
`${content.id}-${slotKey}`,
|
|
44217
44567
|
`${myPath}.${slotKey}`,
|
|
@@ -44261,7 +44611,7 @@ function SlotContentRenderer({
|
|
|
44261
44611
|
const resolvedItems = Array.isArray(entityVal) && entityVal[0] !== "fn" ? entityVal : null;
|
|
44262
44612
|
if (resolvedItems && resolvedItems.length > 0 && !finalProps.fields && !finalProps.columns) {
|
|
44263
44613
|
const sample = resolvedItems[0];
|
|
44264
|
-
if (sample && typeof sample === "object" && !Array.isArray(sample) && !
|
|
44614
|
+
if (sample && typeof sample === "object" && !Array.isArray(sample) && !React83__default.isValidElement(sample) && !(sample instanceof Date)) {
|
|
44265
44615
|
const keys = Object.keys(sample).filter((k) => k !== "id" && k !== "_id");
|
|
44266
44616
|
finalProps.fields = keys.map((k, i) => ({ name: k, variant: i === 0 ? "h4" : "body" }));
|
|
44267
44617
|
}
|
|
@@ -44390,6 +44740,7 @@ var init_UISlotRenderer = __esm({
|
|
|
44390
44740
|
init_useEventBus();
|
|
44391
44741
|
init_slot_types();
|
|
44392
44742
|
init_cn();
|
|
44743
|
+
init_format();
|
|
44393
44744
|
init_ErrorBoundary();
|
|
44394
44745
|
init_Skeleton();
|
|
44395
44746
|
init_renderer();
|
|
@@ -44632,7 +44983,7 @@ function resolveLambdaBindings(body, params, item, index) {
|
|
|
44632
44983
|
}
|
|
44633
44984
|
return substituted;
|
|
44634
44985
|
}
|
|
44635
|
-
if (body !== null && typeof body === "object" && !
|
|
44986
|
+
if (body !== null && typeof body === "object" && !React83__default.isValidElement(body) && !(body instanceof Date) && typeof body !== "function") {
|
|
44636
44987
|
const out = {};
|
|
44637
44988
|
for (const [k, v] of Object.entries(body)) {
|
|
44638
44989
|
out[k] = recur(v);
|
|
@@ -44651,7 +45002,7 @@ function getSlotContentRenderer2() {
|
|
|
44651
45002
|
function makeLambdaFn(params, lambdaBody, callerKey) {
|
|
44652
45003
|
return (item, index) => {
|
|
44653
45004
|
const resolvedBody = resolveLambdaBindings(lambdaBody, params, item, index);
|
|
44654
|
-
if (resolvedBody === null || typeof resolvedBody !== "object" || Array.isArray(resolvedBody) || typeof resolvedBody === "function" ||
|
|
45005
|
+
if (resolvedBody === null || typeof resolvedBody !== "object" || Array.isArray(resolvedBody) || typeof resolvedBody === "function" || React83__default.isValidElement(resolvedBody) || resolvedBody instanceof Date) {
|
|
44655
45006
|
return null;
|
|
44656
45007
|
}
|
|
44657
45008
|
const record = resolvedBody;
|
|
@@ -44670,7 +45021,7 @@ function makeLambdaFn(params, lambdaBody, callerKey) {
|
|
|
44670
45021
|
props: childProps,
|
|
44671
45022
|
priority: 0
|
|
44672
45023
|
};
|
|
44673
|
-
return
|
|
45024
|
+
return React83__default.createElement(SlotContentRenderer2, { content: childContent });
|
|
44674
45025
|
};
|
|
44675
45026
|
}
|
|
44676
45027
|
function convertNode(node, callerKey) {
|
|
@@ -44689,7 +45040,7 @@ function convertNode(node, callerKey) {
|
|
|
44689
45040
|
});
|
|
44690
45041
|
return anyChanged ? mapped : node;
|
|
44691
45042
|
}
|
|
44692
|
-
if (typeof node === "object" && !
|
|
45043
|
+
if (typeof node === "object" && !React83__default.isValidElement(node) && !(node instanceof Date)) {
|
|
44693
45044
|
return convertObjectProps(node);
|
|
44694
45045
|
}
|
|
44695
45046
|
return node;
|
|
@@ -45736,7 +46087,7 @@ function useTraitStateMachine(traitBindings, uiSlots, options) {
|
|
|
45736
46087
|
return;
|
|
45737
46088
|
}
|
|
45738
46089
|
crossTraitLog.debug("self:fire", { traitName, busKey: selfBusKey, eventKey });
|
|
45739
|
-
enqueueAndDrain(eventKey, event.payload);
|
|
46090
|
+
enqueueAndDrain(eventKey, event.payload, traitName);
|
|
45740
46091
|
});
|
|
45741
46092
|
unsubscribes.push(() => {
|
|
45742
46093
|
crossTraitLog.debug("self:unsubscribe", { traitName, busKey: selfBusKey, eventKey });
|