@almadar/ui 2.49.0 → 2.50.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/avl/index.cjs +319 -5
- package/dist/avl/index.d.cts +32 -1
- package/dist/avl/index.d.ts +1 -1
- package/dist/avl/index.js +319 -6
- package/dist/components/index.cjs +1 -1
- package/dist/components/index.js +1 -1
- package/dist/components/organisms/avl/AvlOrbitalsCosmicZoom.d.ts +31 -0
- package/dist/components/organisms/avl/index.d.ts +1 -0
- package/dist/runtime/index.cjs +1 -1
- package/dist/runtime/index.js +1 -1
- package/package.json +2 -2
package/dist/avl/index.cjs
CHANGED
|
@@ -19388,7 +19388,7 @@ var MapViewImpl = React125.lazy(async () => {
|
|
|
19388
19388
|
shadowSize: [41, 41]
|
|
19389
19389
|
});
|
|
19390
19390
|
L.Marker.prototype.options.icon = defaultIcon;
|
|
19391
|
-
const { useEffect: useEffect87, useRef: useRef87, useCallback:
|
|
19391
|
+
const { useEffect: useEffect87, useRef: useRef87, useCallback: useCallback124, useState: useState124 } = React125__namespace.default;
|
|
19392
19392
|
const { Typography: Typography2 } = await Promise.resolve().then(() => (init_Typography(), Typography_exports));
|
|
19393
19393
|
const { useEventBus: useEventBus3 } = await Promise.resolve().then(() => (init_useEventBus(), useEventBus_exports));
|
|
19394
19394
|
function MapUpdater({ centerLat, centerLng, zoom }) {
|
|
@@ -19432,8 +19432,8 @@ var MapViewImpl = React125.lazy(async () => {
|
|
|
19432
19432
|
showAttribution = true
|
|
19433
19433
|
}) {
|
|
19434
19434
|
const eventBus = useEventBus3();
|
|
19435
|
-
const [clickedPosition, setClickedPosition] =
|
|
19436
|
-
const handleMapClick =
|
|
19435
|
+
const [clickedPosition, setClickedPosition] = useState124(null);
|
|
19436
|
+
const handleMapClick = useCallback124((lat, lng) => {
|
|
19437
19437
|
if (showClickedPin) {
|
|
19438
19438
|
setClickedPosition({ lat, lng });
|
|
19439
19439
|
}
|
|
@@ -19442,7 +19442,7 @@ var MapViewImpl = React125.lazy(async () => {
|
|
|
19442
19442
|
eventBus.emit(`UI:${mapClickEvent}`, { latitude: lat, longitude: lng });
|
|
19443
19443
|
}
|
|
19444
19444
|
}, [onMapClick, mapClickEvent, eventBus, showClickedPin]);
|
|
19445
|
-
const handleMarkerClick =
|
|
19445
|
+
const handleMarkerClick = useCallback124((marker) => {
|
|
19446
19446
|
onMarkerClick?.(marker);
|
|
19447
19447
|
if (markerClickEvent) {
|
|
19448
19448
|
eventBus.emit(`UI:${markerClickEvent}`, { ...marker });
|
|
@@ -44627,7 +44627,7 @@ var Timeline = ({
|
|
|
44627
44627
|
title && /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "h5", weight: "semibold", children: title }),
|
|
44628
44628
|
/* @__PURE__ */ jsxRuntime.jsx(VStack, { gap: "none", className: "relative", children: items.map((item, idx) => {
|
|
44629
44629
|
const status = item.status || "pending";
|
|
44630
|
-
const style = STATUS_STYLES3[status];
|
|
44630
|
+
const style = STATUS_STYLES3[status] || STATUS_STYLES3.pending;
|
|
44631
44631
|
const ItemIcon = item.icon || style.icon;
|
|
44632
44632
|
const isLast = idx === items.length - 1;
|
|
44633
44633
|
return /* @__PURE__ */ jsxRuntime.jsxs(HStack, { gap: "md", align: "start", className: "relative", children: [
|
|
@@ -49040,6 +49040,319 @@ var AvlCosmicZoom = (props) => {
|
|
|
49040
49040
|
);
|
|
49041
49041
|
};
|
|
49042
49042
|
AvlCosmicZoom.displayName = "AvlCosmicZoom";
|
|
49043
|
+
|
|
49044
|
+
// components/organisms/avl/AvlOrbitalsCosmicZoom.tsx
|
|
49045
|
+
init_avl_schema_parser();
|
|
49046
|
+
init_Box();
|
|
49047
|
+
init_Typography();
|
|
49048
|
+
var UNIT_DISPLAY_W = 240;
|
|
49049
|
+
var UNIT_DISPLAY_H = 160;
|
|
49050
|
+
function layoutOrbitals(count, containerW, containerH) {
|
|
49051
|
+
if (count === 0) return [];
|
|
49052
|
+
if (count === 1) return [{ cx: containerW / 2, cy: containerH / 2 }];
|
|
49053
|
+
const cols = Math.min(count, Math.ceil(Math.sqrt(count)));
|
|
49054
|
+
const rows = Math.ceil(count / cols);
|
|
49055
|
+
const cellW = containerW / (cols + 0.3);
|
|
49056
|
+
const cellH = containerH / (rows + 0.3);
|
|
49057
|
+
const originX = (containerW - cols * cellW) / 2 + cellW / 2;
|
|
49058
|
+
const originY = (containerH - rows * cellH) / 2 + cellH / 2;
|
|
49059
|
+
return Array.from({ length: count }, (_, i) => ({
|
|
49060
|
+
cx: originX + i % cols * cellW,
|
|
49061
|
+
cy: originY + Math.floor(i / cols) * cellH
|
|
49062
|
+
}));
|
|
49063
|
+
}
|
|
49064
|
+
var avlOczWireId = 0;
|
|
49065
|
+
var EventWireOverlay = ({
|
|
49066
|
+
orbitalViews,
|
|
49067
|
+
crossLinks,
|
|
49068
|
+
color,
|
|
49069
|
+
animated,
|
|
49070
|
+
containerW,
|
|
49071
|
+
containerH
|
|
49072
|
+
}) => {
|
|
49073
|
+
const ids = React125__namespace.default.useMemo(() => {
|
|
49074
|
+
avlOczWireId += 1;
|
|
49075
|
+
return { arrow: `avl-ocz-wire-${avlOczWireId}-arrow` };
|
|
49076
|
+
}, []);
|
|
49077
|
+
const posMap = React125.useMemo(() => {
|
|
49078
|
+
const m = /* @__PURE__ */ new Map();
|
|
49079
|
+
for (const ov of orbitalViews) m.set(ov.name, { cx: ov.cx, cy: ov.cy });
|
|
49080
|
+
return m;
|
|
49081
|
+
}, [orbitalViews]);
|
|
49082
|
+
const wiresByPair = React125.useMemo(() => {
|
|
49083
|
+
const map = /* @__PURE__ */ new Map();
|
|
49084
|
+
for (const link of crossLinks) {
|
|
49085
|
+
const key = `${link.emitterOrbital}__${link.listenerOrbital}`;
|
|
49086
|
+
const arr = map.get(key) ?? [];
|
|
49087
|
+
arr.push(link);
|
|
49088
|
+
map.set(key, arr);
|
|
49089
|
+
}
|
|
49090
|
+
return map;
|
|
49091
|
+
}, [crossLinks]);
|
|
49092
|
+
const orbitalR = UNIT_DISPLAY_W * 0.38;
|
|
49093
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
49094
|
+
"svg",
|
|
49095
|
+
{
|
|
49096
|
+
style: {
|
|
49097
|
+
position: "absolute",
|
|
49098
|
+
inset: 0,
|
|
49099
|
+
width: "100%",
|
|
49100
|
+
height: "100%",
|
|
49101
|
+
pointerEvents: "none",
|
|
49102
|
+
overflow: "visible"
|
|
49103
|
+
},
|
|
49104
|
+
viewBox: `0 0 ${containerW} ${containerH}`,
|
|
49105
|
+
preserveAspectRatio: "xMidYMid meet",
|
|
49106
|
+
children: [
|
|
49107
|
+
/* @__PURE__ */ jsxRuntime.jsx("defs", { children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
49108
|
+
"marker",
|
|
49109
|
+
{
|
|
49110
|
+
id: ids.arrow,
|
|
49111
|
+
markerWidth: "8",
|
|
49112
|
+
markerHeight: "6",
|
|
49113
|
+
refX: "7",
|
|
49114
|
+
refY: "3",
|
|
49115
|
+
orient: "auto",
|
|
49116
|
+
markerUnits: "strokeWidth",
|
|
49117
|
+
children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M0,0 L8,3 L0,6 Z", fill: color, opacity: 0.6 })
|
|
49118
|
+
}
|
|
49119
|
+
) }),
|
|
49120
|
+
animated && /* @__PURE__ */ jsxRuntime.jsx("style", { children: `
|
|
49121
|
+
@keyframes avl-ocz-flow {
|
|
49122
|
+
from { stroke-dashoffset: 20; }
|
|
49123
|
+
to { stroke-dashoffset: 0; }
|
|
49124
|
+
}
|
|
49125
|
+
` }),
|
|
49126
|
+
Array.from(wiresByPair.entries()).map(
|
|
49127
|
+
([pairKey, links]) => links.map((link, wireIdx) => {
|
|
49128
|
+
const fromPos = posMap.get(link.emitterOrbital);
|
|
49129
|
+
const toPos = posMap.get(link.listenerOrbital);
|
|
49130
|
+
if (!fromPos || !toPos) return null;
|
|
49131
|
+
const dx = toPos.cx - fromPos.cx;
|
|
49132
|
+
const dy = toPos.cy - fromPos.cy;
|
|
49133
|
+
const dist = Math.sqrt(dx * dx + dy * dy) || 1;
|
|
49134
|
+
const nx = dx / dist;
|
|
49135
|
+
const ny = dy / dist;
|
|
49136
|
+
const x1 = fromPos.cx + nx * orbitalR;
|
|
49137
|
+
const y1 = fromPos.cy + ny * orbitalR;
|
|
49138
|
+
const x2 = toPos.cx - nx * (orbitalR + 6);
|
|
49139
|
+
const y2 = toPos.cy - ny * (orbitalR + 6);
|
|
49140
|
+
const offset = 25 + wireIdx * 18;
|
|
49141
|
+
const { cpx, cpy } = curveControlPoint(x1, y1, x2, y2, offset);
|
|
49142
|
+
const pathD = `M${x1},${y1} Q${cpx},${cpy} ${x2},${y2}`;
|
|
49143
|
+
const t = 0.5;
|
|
49144
|
+
const lx = (1 - t) * (1 - t) * x1 + 2 * (1 - t) * t * cpx + t * t * x2;
|
|
49145
|
+
const ly = (1 - t) * (1 - t) * y1 + 2 * (1 - t) * t * cpy + t * t * y2;
|
|
49146
|
+
const labelW = link.eventName.length * 5.5 + 12;
|
|
49147
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("g", { children: [
|
|
49148
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
49149
|
+
"path",
|
|
49150
|
+
{
|
|
49151
|
+
d: pathD,
|
|
49152
|
+
fill: "none",
|
|
49153
|
+
stroke: color,
|
|
49154
|
+
strokeWidth: 1.2,
|
|
49155
|
+
strokeDasharray: animated ? "6 4" : "4 3",
|
|
49156
|
+
markerEnd: `url(#${ids.arrow})`,
|
|
49157
|
+
opacity: 0.5,
|
|
49158
|
+
style: animated ? { animation: "avl-ocz-flow 1.5s linear infinite" } : void 0
|
|
49159
|
+
}
|
|
49160
|
+
),
|
|
49161
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
49162
|
+
"rect",
|
|
49163
|
+
{
|
|
49164
|
+
x: lx - labelW / 2,
|
|
49165
|
+
y: ly - 8,
|
|
49166
|
+
width: labelW,
|
|
49167
|
+
height: 14,
|
|
49168
|
+
rx: 3,
|
|
49169
|
+
fill: "var(--color-background, #fff)",
|
|
49170
|
+
stroke: color,
|
|
49171
|
+
strokeWidth: 0.5,
|
|
49172
|
+
opacity: 0.9
|
|
49173
|
+
}
|
|
49174
|
+
),
|
|
49175
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
49176
|
+
"text",
|
|
49177
|
+
{
|
|
49178
|
+
x: lx,
|
|
49179
|
+
y: ly + 3,
|
|
49180
|
+
textAnchor: "middle",
|
|
49181
|
+
fill: color,
|
|
49182
|
+
fontSize: 7,
|
|
49183
|
+
fontWeight: 600,
|
|
49184
|
+
fontFamily: "monospace",
|
|
49185
|
+
opacity: 0.8,
|
|
49186
|
+
children: link.eventName
|
|
49187
|
+
}
|
|
49188
|
+
)
|
|
49189
|
+
] }, `${pairKey}-${wireIdx}`);
|
|
49190
|
+
})
|
|
49191
|
+
)
|
|
49192
|
+
]
|
|
49193
|
+
}
|
|
49194
|
+
);
|
|
49195
|
+
};
|
|
49196
|
+
var InfoPanel = ({ view, crossLinks, color }) => {
|
|
49197
|
+
const emitsOut = crossLinks.filter((l) => l.emitterOrbital === view.name);
|
|
49198
|
+
const listensIn = crossLinks.filter((l) => l.listenerOrbital === view.name);
|
|
49199
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
49200
|
+
Box,
|
|
49201
|
+
{
|
|
49202
|
+
position: "absolute",
|
|
49203
|
+
rounded: "lg",
|
|
49204
|
+
paddingX: "md",
|
|
49205
|
+
paddingY: "sm",
|
|
49206
|
+
bg: "overlay",
|
|
49207
|
+
style: {
|
|
49208
|
+
left: view.cx - 120,
|
|
49209
|
+
top: view.cy + UNIT_DISPLAY_H / 2 + 4,
|
|
49210
|
+
width: 240,
|
|
49211
|
+
border: `1px solid ${color}`,
|
|
49212
|
+
zIndex: 20,
|
|
49213
|
+
pointerEvents: "none"
|
|
49214
|
+
},
|
|
49215
|
+
children: [
|
|
49216
|
+
/* @__PURE__ */ jsxRuntime.jsx(Typography, { weight: "semibold", style: { marginBottom: 4, color }, children: view.name }),
|
|
49217
|
+
/* @__PURE__ */ jsxRuntime.jsxs(Text, { variant: "small", style: { opacity: 0.7, color }, children: [
|
|
49218
|
+
"Entity: ",
|
|
49219
|
+
view.entityName,
|
|
49220
|
+
" (",
|
|
49221
|
+
view.fieldCount,
|
|
49222
|
+
" fields, ",
|
|
49223
|
+
view.persistence,
|
|
49224
|
+
")"
|
|
49225
|
+
] }),
|
|
49226
|
+
/* @__PURE__ */ jsxRuntime.jsxs(Text, { variant: "small", style: { opacity: 0.7, color }, children: [
|
|
49227
|
+
"Traits: ",
|
|
49228
|
+
view.traits.map((t) => t.name).join(", ") || "none"
|
|
49229
|
+
] }),
|
|
49230
|
+
view.pages.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs(Text, { variant: "small", style: { opacity: 0.7, color }, children: [
|
|
49231
|
+
"Pages: ",
|
|
49232
|
+
view.pages.map((p2) => p2.name).join(", ")
|
|
49233
|
+
] }),
|
|
49234
|
+
emitsOut.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs(Text, { variant: "small", style: { opacity: 0.7, color }, children: [
|
|
49235
|
+
"Emits \u2192 ",
|
|
49236
|
+
emitsOut.map((l) => `${l.eventName} \u2192 ${l.listenerOrbital}`).join(", ")
|
|
49237
|
+
] }),
|
|
49238
|
+
listensIn.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs(Text, { variant: "small", style: { opacity: 0.7, color }, children: [
|
|
49239
|
+
"Listens \u2190 ",
|
|
49240
|
+
listensIn.map((l) => `${l.eventName} \u2190 ${l.emitterOrbital}`).join(", ")
|
|
49241
|
+
] })
|
|
49242
|
+
]
|
|
49243
|
+
}
|
|
49244
|
+
);
|
|
49245
|
+
};
|
|
49246
|
+
var AvlOrbitalsCosmicZoom = ({
|
|
49247
|
+
schema: schemaProp,
|
|
49248
|
+
className,
|
|
49249
|
+
color = "var(--color-primary, #4A90D9)",
|
|
49250
|
+
animated = true,
|
|
49251
|
+
width = "100%",
|
|
49252
|
+
height = 450
|
|
49253
|
+
}) => {
|
|
49254
|
+
const parsedSchema = React125.useMemo(() => {
|
|
49255
|
+
if (typeof schemaProp === "string") return JSON.parse(schemaProp);
|
|
49256
|
+
return schemaProp;
|
|
49257
|
+
}, [schemaProp]);
|
|
49258
|
+
const { orbitals, crossLinks } = React125.useMemo(
|
|
49259
|
+
() => parseApplicationLevel(parsedSchema),
|
|
49260
|
+
[parsedSchema]
|
|
49261
|
+
);
|
|
49262
|
+
const containerW = typeof width === "number" ? width : 800;
|
|
49263
|
+
const containerH = typeof height === "number" ? height : 450;
|
|
49264
|
+
const positions = React125.useMemo(
|
|
49265
|
+
() => layoutOrbitals(orbitals.length, containerW, containerH),
|
|
49266
|
+
[orbitals.length, containerW, containerH]
|
|
49267
|
+
);
|
|
49268
|
+
const orbitalViews = React125.useMemo(
|
|
49269
|
+
() => orbitals.map((o, i) => ({
|
|
49270
|
+
name: o.name,
|
|
49271
|
+
entityName: o.entityName,
|
|
49272
|
+
fieldCount: o.fieldCount,
|
|
49273
|
+
persistence: o.persistence || "persistent",
|
|
49274
|
+
traits: o.traitNames.map((n) => ({ name: n })),
|
|
49275
|
+
pages: o.pageNames.map((n) => ({ name: n })),
|
|
49276
|
+
cx: positions[i]?.cx ?? 0,
|
|
49277
|
+
cy: positions[i]?.cy ?? 0
|
|
49278
|
+
})),
|
|
49279
|
+
[orbitals, positions]
|
|
49280
|
+
);
|
|
49281
|
+
const [selected, setSelected] = React125.useState(null);
|
|
49282
|
+
const handleSelect = React125.useCallback(
|
|
49283
|
+
(name) => setSelected((prev) => prev === name ? null : name),
|
|
49284
|
+
[]
|
|
49285
|
+
);
|
|
49286
|
+
const selectedView = orbitalViews.find((o) => o.name === selected);
|
|
49287
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
49288
|
+
Box,
|
|
49289
|
+
{
|
|
49290
|
+
className,
|
|
49291
|
+
position: "relative",
|
|
49292
|
+
overflow: "visible",
|
|
49293
|
+
style: { width, height: containerH },
|
|
49294
|
+
children: [
|
|
49295
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
49296
|
+
EventWireOverlay,
|
|
49297
|
+
{
|
|
49298
|
+
orbitalViews,
|
|
49299
|
+
crossLinks,
|
|
49300
|
+
color,
|
|
49301
|
+
animated,
|
|
49302
|
+
containerW,
|
|
49303
|
+
containerH
|
|
49304
|
+
}
|
|
49305
|
+
),
|
|
49306
|
+
orbitalViews.map((view) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
49307
|
+
Box,
|
|
49308
|
+
{
|
|
49309
|
+
role: "button",
|
|
49310
|
+
tabIndex: 0,
|
|
49311
|
+
onClick: () => handleSelect(view.name),
|
|
49312
|
+
onKeyDown: (e) => {
|
|
49313
|
+
if (e.key === "Enter" || e.key === " ") handleSelect(view.name);
|
|
49314
|
+
},
|
|
49315
|
+
"aria-label": `Orbital: ${view.name}`,
|
|
49316
|
+
position: "absolute",
|
|
49317
|
+
style: {
|
|
49318
|
+
left: view.cx - UNIT_DISPLAY_W / 2,
|
|
49319
|
+
top: view.cy - UNIT_DISPLAY_H / 2,
|
|
49320
|
+
width: UNIT_DISPLAY_W,
|
|
49321
|
+
height: UNIT_DISPLAY_H,
|
|
49322
|
+
cursor: "pointer",
|
|
49323
|
+
transition: "transform 0.2s ease, filter 0.2s ease",
|
|
49324
|
+
transform: selected === view.name ? "scale(1.05)" : "scale(1)",
|
|
49325
|
+
filter: selected && selected !== view.name ? "opacity(0.5)" : "none",
|
|
49326
|
+
zIndex: selected === view.name ? 10 : 1
|
|
49327
|
+
},
|
|
49328
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
49329
|
+
AvlOrbitalUnit,
|
|
49330
|
+
{
|
|
49331
|
+
entityName: view.entityName,
|
|
49332
|
+
fields: view.fieldCount,
|
|
49333
|
+
persistence: view.persistence,
|
|
49334
|
+
traits: view.traits,
|
|
49335
|
+
pages: view.pages,
|
|
49336
|
+
color,
|
|
49337
|
+
animated: animated && selected === view.name
|
|
49338
|
+
}
|
|
49339
|
+
)
|
|
49340
|
+
},
|
|
49341
|
+
view.name
|
|
49342
|
+
)),
|
|
49343
|
+
selectedView && /* @__PURE__ */ jsxRuntime.jsx(
|
|
49344
|
+
InfoPanel,
|
|
49345
|
+
{
|
|
49346
|
+
view: selectedView,
|
|
49347
|
+
crossLinks,
|
|
49348
|
+
color
|
|
49349
|
+
}
|
|
49350
|
+
)
|
|
49351
|
+
]
|
|
49352
|
+
}
|
|
49353
|
+
);
|
|
49354
|
+
};
|
|
49355
|
+
AvlOrbitalsCosmicZoom.displayName = "AvlOrbitalsCosmicZoom";
|
|
49043
49356
|
init_types();
|
|
49044
49357
|
var SWIM_GUTTER2 = 120;
|
|
49045
49358
|
var CENTER_W2 = 360;
|
|
@@ -49478,6 +49791,7 @@ exports.AvlOperator = AvlOperator;
|
|
|
49478
49791
|
exports.AvlOrbital = AvlOrbital;
|
|
49479
49792
|
exports.AvlOrbitalNode = AvlOrbitalNode;
|
|
49480
49793
|
exports.AvlOrbitalUnit = AvlOrbitalUnit;
|
|
49794
|
+
exports.AvlOrbitalsCosmicZoom = AvlOrbitalsCosmicZoom;
|
|
49481
49795
|
exports.AvlPage = AvlPage;
|
|
49482
49796
|
exports.AvlPageEdge = AvlPageEdge;
|
|
49483
49797
|
exports.AvlPersistence = AvlPersistence;
|
package/dist/avl/index.d.cts
CHANGED
|
@@ -1340,6 +1340,37 @@ interface AvlCosmicZoomProps {
|
|
|
1340
1340
|
}
|
|
1341
1341
|
declare const AvlCosmicZoom: React__default.FC<AvlCosmicZoomProps>;
|
|
1342
1342
|
|
|
1343
|
+
/**
|
|
1344
|
+
* AvlOrbitalsCosmicZoom — Orbital Interaction Visualization
|
|
1345
|
+
*
|
|
1346
|
+
* Composed organism: renders AvlOrbitalUnit molecules positioned on a canvas,
|
|
1347
|
+
* connected by cross-orbital event wire arrows. No React Flow dependency.
|
|
1348
|
+
* Designed for documentation use.
|
|
1349
|
+
*
|
|
1350
|
+
* Composition:
|
|
1351
|
+
* - AvlOrbitalUnit (molecule) for each orbital
|
|
1352
|
+
* - SVG overlay for event wires between orbitals
|
|
1353
|
+
* - Click to select an orbital and show info panel
|
|
1354
|
+
*
|
|
1355
|
+
* @packageDocumentation
|
|
1356
|
+
*/
|
|
1357
|
+
|
|
1358
|
+
interface AvlOrbitalsCosmicZoomProps {
|
|
1359
|
+
/** The orbital schema (parsed object or JSON string) */
|
|
1360
|
+
schema: OrbitalSchema | string;
|
|
1361
|
+
/** CSS class for the outer container */
|
|
1362
|
+
className?: string;
|
|
1363
|
+
/** Primary color for the visualization */
|
|
1364
|
+
color?: string;
|
|
1365
|
+
/** Enable animations (default: true) */
|
|
1366
|
+
animated?: boolean;
|
|
1367
|
+
/** Container width */
|
|
1368
|
+
width?: number | string;
|
|
1369
|
+
/** Container height */
|
|
1370
|
+
height?: number | string;
|
|
1371
|
+
}
|
|
1372
|
+
declare const AvlOrbitalsCosmicZoom: React__default.FC<AvlOrbitalsCosmicZoomProps>;
|
|
1373
|
+
|
|
1343
1374
|
/**
|
|
1344
1375
|
* AvlTraitScene V2 - Zoom Level 3
|
|
1345
1376
|
*
|
|
@@ -1402,4 +1433,4 @@ interface AvlClickTargetProps {
|
|
|
1402
1433
|
}
|
|
1403
1434
|
declare const AvlClickTarget: React__default.FC<AvlClickTargetProps>;
|
|
1404
1435
|
|
|
1405
|
-
export { AVL_FIELD_TYPE_SHAPES, AVL_OPERATOR_COLORS, type ApplicationLevelData, AvlApplication, type AvlApplicationProps, AvlBackwardEdge, type AvlBaseProps, AvlBehaviorGlyph, type AvlBehaviorGlyphProps, AvlBinding, AvlBindingEdge, type AvlBindingProps, AvlBindingRef, type AvlBindingRefProps, AvlClickTarget, type AvlClickTargetProps, AvlClosedCircuit, type AvlClosedCircuitProps, type AvlClosedCircuitState, type AvlClosedCircuitTransition, AvlCosmicZoom, type AvlCosmicZoomProps, type AvlEdgeData, AvlEffect, type AvlEffectProps, type AvlEffectType, AvlEmitListen, type AvlEmitListenProps, AvlEntity, type AvlEntityProps, AvlEvent, type AvlEventProps, AvlEventWireEdge, type AvlEventWireEdgeData, AvlExprTree, type AvlExprTreeNode, type AvlExprTreeProps, AvlField, type AvlFieldProps, AvlFieldType, type AvlFieldTypeKind, type AvlFieldTypeProps, AvlGuard, type AvlGuardProps, AvlLiteral, type AvlLiteralProps, type AvlNodeData, AvlOperator, type AvlOperatorNamespace, type AvlOperatorProps, AvlOrbital, AvlOrbitalNode, type AvlOrbitalProps, AvlOrbitalUnit, type AvlOrbitalUnitPage, type AvlOrbitalUnitProps, type AvlOrbitalUnitTrait, AvlPage, AvlPageEdge, type AvlPageProps, AvlPersistence, type AvlPersistenceKind, type AvlPersistenceProps, AvlSExpr, type AvlSExprProps, AvlSlotMap, type AvlSlotMapProps, type AvlSlotMapSlot, AvlState, AvlStateMachine, type AvlStateMachineProps, type AvlStateMachineState, type AvlStateMachineTransition, type AvlStateProps, AvlSwimLane, type AvlSwimLaneProps, AvlTrait, type AvlTraitProps, AvlTraitScene, type AvlTraitSceneProps, AvlTransition, AvlTransitionEdge, type AvlTransitionEdgeData, AvlTransitionLane, type AvlTransitionLaneProps, type AvlTransitionProps, AvlTransitionScene, type AvlTransitionSceneProps, type BehaviorCanvasEntry, BehaviorComposeNode, type BehaviorComposeNodeData, type BehaviorGlyphChild, type BehaviorGlyphConnection, type BehaviorLevel, type BehaviorRegistryRecord, BehaviorView, type BehaviorWireEdgeData, CONNECTION_COLORS, type ComposeViewLevel, type ConnectableEvent, type CrossLink, DOMAIN_COLORS, DetailView, EFFECT_CATEGORY_COLORS, EFFECT_TYPE_TO_CATEGORY, type EffectCategory, type ElkLayout, type EventEdgeData, EventFlowEdge, FlowCanvas, type FlowCanvasProps, type GlyphSize, type LayoutEdge, type LayoutNode, MiniStateMachine, ModuleCard, OrbInspector, type OrbInspectorProps, OrbPreviewNode, type OrbitalLevelData, type PatternEventSource, type PreviewNodeData, type RenderUIEntry, STATE_COLORS, type StateRole, SystemNode, type TraitLevelData, type TransitionLevelData, type ViewLevel, ZOOM_BAND_THRESHOLDS, type ZoomBand, ZoomBandContext, ZoomBreadcrumb, type ZoomBreadcrumbProps, ZoomLegend, type ZoomLegendProps, type ZoomLevel, arcPath, behaviorsToComposeGraph, computeTraitLayout, computeZoomBand, curveControlPoint, edgePath, getStateRole, gridPositions, orbitalToExpandedGraph, parseApplicationLevel, parseOrbitalLevel, parseTraitLevel, parseTransitionLevel, radialPositions, registryEntryToCanvasEntry, ringPositions, schemaToFlowGraph, schemaToOverviewGraph, useZoomBand, zoomProgress };
|
|
1436
|
+
export { AVL_FIELD_TYPE_SHAPES, AVL_OPERATOR_COLORS, type ApplicationLevelData, AvlApplication, type AvlApplicationProps, AvlBackwardEdge, type AvlBaseProps, AvlBehaviorGlyph, type AvlBehaviorGlyphProps, AvlBinding, AvlBindingEdge, type AvlBindingProps, AvlBindingRef, type AvlBindingRefProps, AvlClickTarget, type AvlClickTargetProps, AvlClosedCircuit, type AvlClosedCircuitProps, type AvlClosedCircuitState, type AvlClosedCircuitTransition, AvlCosmicZoom, type AvlCosmicZoomProps, type AvlEdgeData, AvlEffect, type AvlEffectProps, type AvlEffectType, AvlEmitListen, type AvlEmitListenProps, AvlEntity, type AvlEntityProps, AvlEvent, type AvlEventProps, AvlEventWireEdge, type AvlEventWireEdgeData, AvlExprTree, type AvlExprTreeNode, type AvlExprTreeProps, AvlField, type AvlFieldProps, AvlFieldType, type AvlFieldTypeKind, type AvlFieldTypeProps, AvlGuard, type AvlGuardProps, AvlLiteral, type AvlLiteralProps, type AvlNodeData, AvlOperator, type AvlOperatorNamespace, type AvlOperatorProps, AvlOrbital, AvlOrbitalNode, type AvlOrbitalProps, AvlOrbitalUnit, type AvlOrbitalUnitPage, type AvlOrbitalUnitProps, type AvlOrbitalUnitTrait, AvlOrbitalsCosmicZoom, type AvlOrbitalsCosmicZoomProps, AvlPage, AvlPageEdge, type AvlPageProps, AvlPersistence, type AvlPersistenceKind, type AvlPersistenceProps, AvlSExpr, type AvlSExprProps, AvlSlotMap, type AvlSlotMapProps, type AvlSlotMapSlot, AvlState, AvlStateMachine, type AvlStateMachineProps, type AvlStateMachineState, type AvlStateMachineTransition, type AvlStateProps, AvlSwimLane, type AvlSwimLaneProps, AvlTrait, type AvlTraitProps, AvlTraitScene, type AvlTraitSceneProps, AvlTransition, AvlTransitionEdge, type AvlTransitionEdgeData, AvlTransitionLane, type AvlTransitionLaneProps, type AvlTransitionProps, AvlTransitionScene, type AvlTransitionSceneProps, type BehaviorCanvasEntry, BehaviorComposeNode, type BehaviorComposeNodeData, type BehaviorGlyphChild, type BehaviorGlyphConnection, type BehaviorLevel, type BehaviorRegistryRecord, BehaviorView, type BehaviorWireEdgeData, CONNECTION_COLORS, type ComposeViewLevel, type ConnectableEvent, type CrossLink, DOMAIN_COLORS, DetailView, EFFECT_CATEGORY_COLORS, EFFECT_TYPE_TO_CATEGORY, type EffectCategory, type ElkLayout, type EventEdgeData, EventFlowEdge, FlowCanvas, type FlowCanvasProps, type GlyphSize, type LayoutEdge, type LayoutNode, MiniStateMachine, ModuleCard, OrbInspector, type OrbInspectorProps, OrbPreviewNode, type OrbitalLevelData, type PatternEventSource, type PreviewNodeData, type RenderUIEntry, STATE_COLORS, type StateRole, SystemNode, type TraitLevelData, type TransitionLevelData, type ViewLevel, ZOOM_BAND_THRESHOLDS, type ZoomBand, ZoomBandContext, ZoomBreadcrumb, type ZoomBreadcrumbProps, ZoomLegend, type ZoomLegendProps, type ZoomLevel, arcPath, behaviorsToComposeGraph, computeTraitLayout, computeZoomBand, curveControlPoint, edgePath, getStateRole, gridPositions, orbitalToExpandedGraph, parseApplicationLevel, parseOrbitalLevel, parseTraitLevel, parseTransitionLevel, radialPositions, registryEntryToCanvasEntry, ringPositions, schemaToFlowGraph, schemaToOverviewGraph, useZoomBand, zoomProgress };
|
package/dist/avl/index.d.ts
CHANGED
|
@@ -59,4 +59,4 @@ export { type ComposeViewLevel, type BehaviorComposeNodeData, type BehaviorWireE
|
|
|
59
59
|
export { BehaviorComposeNode } from '../components/molecules/avl/BehaviorComposeNode';
|
|
60
60
|
export { behaviorsToComposeGraph, registryEntryToCanvasEntry, type BehaviorRegistryRecord } from '../components/molecules/avl/avl-behavior-compose-converter';
|
|
61
61
|
export { OrbInspector, type OrbInspectorProps } from '../components/organisms/avl/OrbInspector';
|
|
62
|
-
export { FlowCanvas, type FlowCanvasProps, ZoomBreadcrumb, type ZoomBreadcrumbProps, ZoomLegend, type ZoomLegendProps, AvlCosmicZoom, type AvlCosmicZoomProps, AvlTraitScene, type AvlTraitSceneProps, AvlTransitionScene, type AvlTransitionSceneProps, AvlClickTarget, type AvlClickTargetProps, parseApplicationLevel, parseOrbitalLevel, parseTraitLevel, parseTransitionLevel, type ApplicationLevelData, type OrbitalLevelData, type TraitLevelData, type TransitionLevelData, type CrossLink, type ZoomLevel, } from '../components/organisms/avl';
|
|
62
|
+
export { FlowCanvas, type FlowCanvasProps, ZoomBreadcrumb, type ZoomBreadcrumbProps, ZoomLegend, type ZoomLegendProps, AvlCosmicZoom, type AvlCosmicZoomProps, AvlOrbitalsCosmicZoom, type AvlOrbitalsCosmicZoomProps, AvlTraitScene, type AvlTraitSceneProps, AvlTransitionScene, type AvlTransitionSceneProps, AvlClickTarget, type AvlClickTargetProps, parseApplicationLevel, parseOrbitalLevel, parseTraitLevel, parseTransitionLevel, type ApplicationLevelData, type OrbitalLevelData, type TraitLevelData, type TransitionLevelData, type CrossLink, type ZoomLevel, } from '../components/organisms/avl';
|
package/dist/avl/index.js
CHANGED
|
@@ -19342,7 +19342,7 @@ var MapViewImpl = lazy(async () => {
|
|
|
19342
19342
|
shadowSize: [41, 41]
|
|
19343
19343
|
});
|
|
19344
19344
|
L.Marker.prototype.options.icon = defaultIcon;
|
|
19345
|
-
const { useEffect: useEffect87, useRef: useRef87, useCallback:
|
|
19345
|
+
const { useEffect: useEffect87, useRef: useRef87, useCallback: useCallback124, useState: useState124 } = React125__default;
|
|
19346
19346
|
const { Typography: Typography2 } = await Promise.resolve().then(() => (init_Typography(), Typography_exports));
|
|
19347
19347
|
const { useEventBus: useEventBus3 } = await Promise.resolve().then(() => (init_useEventBus(), useEventBus_exports));
|
|
19348
19348
|
function MapUpdater({ centerLat, centerLng, zoom }) {
|
|
@@ -19386,8 +19386,8 @@ var MapViewImpl = lazy(async () => {
|
|
|
19386
19386
|
showAttribution = true
|
|
19387
19387
|
}) {
|
|
19388
19388
|
const eventBus = useEventBus3();
|
|
19389
|
-
const [clickedPosition, setClickedPosition] =
|
|
19390
|
-
const handleMapClick =
|
|
19389
|
+
const [clickedPosition, setClickedPosition] = useState124(null);
|
|
19390
|
+
const handleMapClick = useCallback124((lat, lng) => {
|
|
19391
19391
|
if (showClickedPin) {
|
|
19392
19392
|
setClickedPosition({ lat, lng });
|
|
19393
19393
|
}
|
|
@@ -19396,7 +19396,7 @@ var MapViewImpl = lazy(async () => {
|
|
|
19396
19396
|
eventBus.emit(`UI:${mapClickEvent}`, { latitude: lat, longitude: lng });
|
|
19397
19397
|
}
|
|
19398
19398
|
}, [onMapClick, mapClickEvent, eventBus, showClickedPin]);
|
|
19399
|
-
const handleMarkerClick =
|
|
19399
|
+
const handleMarkerClick = useCallback124((marker) => {
|
|
19400
19400
|
onMarkerClick?.(marker);
|
|
19401
19401
|
if (markerClickEvent) {
|
|
19402
19402
|
eventBus.emit(`UI:${markerClickEvent}`, { ...marker });
|
|
@@ -44581,7 +44581,7 @@ var Timeline = ({
|
|
|
44581
44581
|
title && /* @__PURE__ */ jsx(Typography, { variant: "h5", weight: "semibold", children: title }),
|
|
44582
44582
|
/* @__PURE__ */ jsx(VStack, { gap: "none", className: "relative", children: items.map((item, idx) => {
|
|
44583
44583
|
const status = item.status || "pending";
|
|
44584
|
-
const style = STATUS_STYLES3[status];
|
|
44584
|
+
const style = STATUS_STYLES3[status] || STATUS_STYLES3.pending;
|
|
44585
44585
|
const ItemIcon = item.icon || style.icon;
|
|
44586
44586
|
const isLast = idx === items.length - 1;
|
|
44587
44587
|
return /* @__PURE__ */ jsxs(HStack, { gap: "md", align: "start", className: "relative", children: [
|
|
@@ -48994,6 +48994,319 @@ var AvlCosmicZoom = (props) => {
|
|
|
48994
48994
|
);
|
|
48995
48995
|
};
|
|
48996
48996
|
AvlCosmicZoom.displayName = "AvlCosmicZoom";
|
|
48997
|
+
|
|
48998
|
+
// components/organisms/avl/AvlOrbitalsCosmicZoom.tsx
|
|
48999
|
+
init_avl_schema_parser();
|
|
49000
|
+
init_Box();
|
|
49001
|
+
init_Typography();
|
|
49002
|
+
var UNIT_DISPLAY_W = 240;
|
|
49003
|
+
var UNIT_DISPLAY_H = 160;
|
|
49004
|
+
function layoutOrbitals(count, containerW, containerH) {
|
|
49005
|
+
if (count === 0) return [];
|
|
49006
|
+
if (count === 1) return [{ cx: containerW / 2, cy: containerH / 2 }];
|
|
49007
|
+
const cols = Math.min(count, Math.ceil(Math.sqrt(count)));
|
|
49008
|
+
const rows = Math.ceil(count / cols);
|
|
49009
|
+
const cellW = containerW / (cols + 0.3);
|
|
49010
|
+
const cellH = containerH / (rows + 0.3);
|
|
49011
|
+
const originX = (containerW - cols * cellW) / 2 + cellW / 2;
|
|
49012
|
+
const originY = (containerH - rows * cellH) / 2 + cellH / 2;
|
|
49013
|
+
return Array.from({ length: count }, (_, i) => ({
|
|
49014
|
+
cx: originX + i % cols * cellW,
|
|
49015
|
+
cy: originY + Math.floor(i / cols) * cellH
|
|
49016
|
+
}));
|
|
49017
|
+
}
|
|
49018
|
+
var avlOczWireId = 0;
|
|
49019
|
+
var EventWireOverlay = ({
|
|
49020
|
+
orbitalViews,
|
|
49021
|
+
crossLinks,
|
|
49022
|
+
color,
|
|
49023
|
+
animated,
|
|
49024
|
+
containerW,
|
|
49025
|
+
containerH
|
|
49026
|
+
}) => {
|
|
49027
|
+
const ids = React125__default.useMemo(() => {
|
|
49028
|
+
avlOczWireId += 1;
|
|
49029
|
+
return { arrow: `avl-ocz-wire-${avlOczWireId}-arrow` };
|
|
49030
|
+
}, []);
|
|
49031
|
+
const posMap = useMemo(() => {
|
|
49032
|
+
const m = /* @__PURE__ */ new Map();
|
|
49033
|
+
for (const ov of orbitalViews) m.set(ov.name, { cx: ov.cx, cy: ov.cy });
|
|
49034
|
+
return m;
|
|
49035
|
+
}, [orbitalViews]);
|
|
49036
|
+
const wiresByPair = useMemo(() => {
|
|
49037
|
+
const map = /* @__PURE__ */ new Map();
|
|
49038
|
+
for (const link of crossLinks) {
|
|
49039
|
+
const key = `${link.emitterOrbital}__${link.listenerOrbital}`;
|
|
49040
|
+
const arr = map.get(key) ?? [];
|
|
49041
|
+
arr.push(link);
|
|
49042
|
+
map.set(key, arr);
|
|
49043
|
+
}
|
|
49044
|
+
return map;
|
|
49045
|
+
}, [crossLinks]);
|
|
49046
|
+
const orbitalR = UNIT_DISPLAY_W * 0.38;
|
|
49047
|
+
return /* @__PURE__ */ jsxs(
|
|
49048
|
+
"svg",
|
|
49049
|
+
{
|
|
49050
|
+
style: {
|
|
49051
|
+
position: "absolute",
|
|
49052
|
+
inset: 0,
|
|
49053
|
+
width: "100%",
|
|
49054
|
+
height: "100%",
|
|
49055
|
+
pointerEvents: "none",
|
|
49056
|
+
overflow: "visible"
|
|
49057
|
+
},
|
|
49058
|
+
viewBox: `0 0 ${containerW} ${containerH}`,
|
|
49059
|
+
preserveAspectRatio: "xMidYMid meet",
|
|
49060
|
+
children: [
|
|
49061
|
+
/* @__PURE__ */ jsx("defs", { children: /* @__PURE__ */ jsx(
|
|
49062
|
+
"marker",
|
|
49063
|
+
{
|
|
49064
|
+
id: ids.arrow,
|
|
49065
|
+
markerWidth: "8",
|
|
49066
|
+
markerHeight: "6",
|
|
49067
|
+
refX: "7",
|
|
49068
|
+
refY: "3",
|
|
49069
|
+
orient: "auto",
|
|
49070
|
+
markerUnits: "strokeWidth",
|
|
49071
|
+
children: /* @__PURE__ */ jsx("path", { d: "M0,0 L8,3 L0,6 Z", fill: color, opacity: 0.6 })
|
|
49072
|
+
}
|
|
49073
|
+
) }),
|
|
49074
|
+
animated && /* @__PURE__ */ jsx("style", { children: `
|
|
49075
|
+
@keyframes avl-ocz-flow {
|
|
49076
|
+
from { stroke-dashoffset: 20; }
|
|
49077
|
+
to { stroke-dashoffset: 0; }
|
|
49078
|
+
}
|
|
49079
|
+
` }),
|
|
49080
|
+
Array.from(wiresByPair.entries()).map(
|
|
49081
|
+
([pairKey, links]) => links.map((link, wireIdx) => {
|
|
49082
|
+
const fromPos = posMap.get(link.emitterOrbital);
|
|
49083
|
+
const toPos = posMap.get(link.listenerOrbital);
|
|
49084
|
+
if (!fromPos || !toPos) return null;
|
|
49085
|
+
const dx = toPos.cx - fromPos.cx;
|
|
49086
|
+
const dy = toPos.cy - fromPos.cy;
|
|
49087
|
+
const dist = Math.sqrt(dx * dx + dy * dy) || 1;
|
|
49088
|
+
const nx = dx / dist;
|
|
49089
|
+
const ny = dy / dist;
|
|
49090
|
+
const x1 = fromPos.cx + nx * orbitalR;
|
|
49091
|
+
const y1 = fromPos.cy + ny * orbitalR;
|
|
49092
|
+
const x2 = toPos.cx - nx * (orbitalR + 6);
|
|
49093
|
+
const y2 = toPos.cy - ny * (orbitalR + 6);
|
|
49094
|
+
const offset = 25 + wireIdx * 18;
|
|
49095
|
+
const { cpx, cpy } = curveControlPoint(x1, y1, x2, y2, offset);
|
|
49096
|
+
const pathD = `M${x1},${y1} Q${cpx},${cpy} ${x2},${y2}`;
|
|
49097
|
+
const t = 0.5;
|
|
49098
|
+
const lx = (1 - t) * (1 - t) * x1 + 2 * (1 - t) * t * cpx + t * t * x2;
|
|
49099
|
+
const ly = (1 - t) * (1 - t) * y1 + 2 * (1 - t) * t * cpy + t * t * y2;
|
|
49100
|
+
const labelW = link.eventName.length * 5.5 + 12;
|
|
49101
|
+
return /* @__PURE__ */ jsxs("g", { children: [
|
|
49102
|
+
/* @__PURE__ */ jsx(
|
|
49103
|
+
"path",
|
|
49104
|
+
{
|
|
49105
|
+
d: pathD,
|
|
49106
|
+
fill: "none",
|
|
49107
|
+
stroke: color,
|
|
49108
|
+
strokeWidth: 1.2,
|
|
49109
|
+
strokeDasharray: animated ? "6 4" : "4 3",
|
|
49110
|
+
markerEnd: `url(#${ids.arrow})`,
|
|
49111
|
+
opacity: 0.5,
|
|
49112
|
+
style: animated ? { animation: "avl-ocz-flow 1.5s linear infinite" } : void 0
|
|
49113
|
+
}
|
|
49114
|
+
),
|
|
49115
|
+
/* @__PURE__ */ jsx(
|
|
49116
|
+
"rect",
|
|
49117
|
+
{
|
|
49118
|
+
x: lx - labelW / 2,
|
|
49119
|
+
y: ly - 8,
|
|
49120
|
+
width: labelW,
|
|
49121
|
+
height: 14,
|
|
49122
|
+
rx: 3,
|
|
49123
|
+
fill: "var(--color-background, #fff)",
|
|
49124
|
+
stroke: color,
|
|
49125
|
+
strokeWidth: 0.5,
|
|
49126
|
+
opacity: 0.9
|
|
49127
|
+
}
|
|
49128
|
+
),
|
|
49129
|
+
/* @__PURE__ */ jsx(
|
|
49130
|
+
"text",
|
|
49131
|
+
{
|
|
49132
|
+
x: lx,
|
|
49133
|
+
y: ly + 3,
|
|
49134
|
+
textAnchor: "middle",
|
|
49135
|
+
fill: color,
|
|
49136
|
+
fontSize: 7,
|
|
49137
|
+
fontWeight: 600,
|
|
49138
|
+
fontFamily: "monospace",
|
|
49139
|
+
opacity: 0.8,
|
|
49140
|
+
children: link.eventName
|
|
49141
|
+
}
|
|
49142
|
+
)
|
|
49143
|
+
] }, `${pairKey}-${wireIdx}`);
|
|
49144
|
+
})
|
|
49145
|
+
)
|
|
49146
|
+
]
|
|
49147
|
+
}
|
|
49148
|
+
);
|
|
49149
|
+
};
|
|
49150
|
+
var InfoPanel = ({ view, crossLinks, color }) => {
|
|
49151
|
+
const emitsOut = crossLinks.filter((l) => l.emitterOrbital === view.name);
|
|
49152
|
+
const listensIn = crossLinks.filter((l) => l.listenerOrbital === view.name);
|
|
49153
|
+
return /* @__PURE__ */ jsxs(
|
|
49154
|
+
Box,
|
|
49155
|
+
{
|
|
49156
|
+
position: "absolute",
|
|
49157
|
+
rounded: "lg",
|
|
49158
|
+
paddingX: "md",
|
|
49159
|
+
paddingY: "sm",
|
|
49160
|
+
bg: "overlay",
|
|
49161
|
+
style: {
|
|
49162
|
+
left: view.cx - 120,
|
|
49163
|
+
top: view.cy + UNIT_DISPLAY_H / 2 + 4,
|
|
49164
|
+
width: 240,
|
|
49165
|
+
border: `1px solid ${color}`,
|
|
49166
|
+
zIndex: 20,
|
|
49167
|
+
pointerEvents: "none"
|
|
49168
|
+
},
|
|
49169
|
+
children: [
|
|
49170
|
+
/* @__PURE__ */ jsx(Typography, { weight: "semibold", style: { marginBottom: 4, color }, children: view.name }),
|
|
49171
|
+
/* @__PURE__ */ jsxs(Text, { variant: "small", style: { opacity: 0.7, color }, children: [
|
|
49172
|
+
"Entity: ",
|
|
49173
|
+
view.entityName,
|
|
49174
|
+
" (",
|
|
49175
|
+
view.fieldCount,
|
|
49176
|
+
" fields, ",
|
|
49177
|
+
view.persistence,
|
|
49178
|
+
")"
|
|
49179
|
+
] }),
|
|
49180
|
+
/* @__PURE__ */ jsxs(Text, { variant: "small", style: { opacity: 0.7, color }, children: [
|
|
49181
|
+
"Traits: ",
|
|
49182
|
+
view.traits.map((t) => t.name).join(", ") || "none"
|
|
49183
|
+
] }),
|
|
49184
|
+
view.pages.length > 0 && /* @__PURE__ */ jsxs(Text, { variant: "small", style: { opacity: 0.7, color }, children: [
|
|
49185
|
+
"Pages: ",
|
|
49186
|
+
view.pages.map((p2) => p2.name).join(", ")
|
|
49187
|
+
] }),
|
|
49188
|
+
emitsOut.length > 0 && /* @__PURE__ */ jsxs(Text, { variant: "small", style: { opacity: 0.7, color }, children: [
|
|
49189
|
+
"Emits \u2192 ",
|
|
49190
|
+
emitsOut.map((l) => `${l.eventName} \u2192 ${l.listenerOrbital}`).join(", ")
|
|
49191
|
+
] }),
|
|
49192
|
+
listensIn.length > 0 && /* @__PURE__ */ jsxs(Text, { variant: "small", style: { opacity: 0.7, color }, children: [
|
|
49193
|
+
"Listens \u2190 ",
|
|
49194
|
+
listensIn.map((l) => `${l.eventName} \u2190 ${l.emitterOrbital}`).join(", ")
|
|
49195
|
+
] })
|
|
49196
|
+
]
|
|
49197
|
+
}
|
|
49198
|
+
);
|
|
49199
|
+
};
|
|
49200
|
+
var AvlOrbitalsCosmicZoom = ({
|
|
49201
|
+
schema: schemaProp,
|
|
49202
|
+
className,
|
|
49203
|
+
color = "var(--color-primary, #4A90D9)",
|
|
49204
|
+
animated = true,
|
|
49205
|
+
width = "100%",
|
|
49206
|
+
height = 450
|
|
49207
|
+
}) => {
|
|
49208
|
+
const parsedSchema = useMemo(() => {
|
|
49209
|
+
if (typeof schemaProp === "string") return JSON.parse(schemaProp);
|
|
49210
|
+
return schemaProp;
|
|
49211
|
+
}, [schemaProp]);
|
|
49212
|
+
const { orbitals, crossLinks } = useMemo(
|
|
49213
|
+
() => parseApplicationLevel(parsedSchema),
|
|
49214
|
+
[parsedSchema]
|
|
49215
|
+
);
|
|
49216
|
+
const containerW = typeof width === "number" ? width : 800;
|
|
49217
|
+
const containerH = typeof height === "number" ? height : 450;
|
|
49218
|
+
const positions = useMemo(
|
|
49219
|
+
() => layoutOrbitals(orbitals.length, containerW, containerH),
|
|
49220
|
+
[orbitals.length, containerW, containerH]
|
|
49221
|
+
);
|
|
49222
|
+
const orbitalViews = useMemo(
|
|
49223
|
+
() => orbitals.map((o, i) => ({
|
|
49224
|
+
name: o.name,
|
|
49225
|
+
entityName: o.entityName,
|
|
49226
|
+
fieldCount: o.fieldCount,
|
|
49227
|
+
persistence: o.persistence || "persistent",
|
|
49228
|
+
traits: o.traitNames.map((n) => ({ name: n })),
|
|
49229
|
+
pages: o.pageNames.map((n) => ({ name: n })),
|
|
49230
|
+
cx: positions[i]?.cx ?? 0,
|
|
49231
|
+
cy: positions[i]?.cy ?? 0
|
|
49232
|
+
})),
|
|
49233
|
+
[orbitals, positions]
|
|
49234
|
+
);
|
|
49235
|
+
const [selected, setSelected] = useState(null);
|
|
49236
|
+
const handleSelect = useCallback(
|
|
49237
|
+
(name) => setSelected((prev) => prev === name ? null : name),
|
|
49238
|
+
[]
|
|
49239
|
+
);
|
|
49240
|
+
const selectedView = orbitalViews.find((o) => o.name === selected);
|
|
49241
|
+
return /* @__PURE__ */ jsxs(
|
|
49242
|
+
Box,
|
|
49243
|
+
{
|
|
49244
|
+
className,
|
|
49245
|
+
position: "relative",
|
|
49246
|
+
overflow: "visible",
|
|
49247
|
+
style: { width, height: containerH },
|
|
49248
|
+
children: [
|
|
49249
|
+
/* @__PURE__ */ jsx(
|
|
49250
|
+
EventWireOverlay,
|
|
49251
|
+
{
|
|
49252
|
+
orbitalViews,
|
|
49253
|
+
crossLinks,
|
|
49254
|
+
color,
|
|
49255
|
+
animated,
|
|
49256
|
+
containerW,
|
|
49257
|
+
containerH
|
|
49258
|
+
}
|
|
49259
|
+
),
|
|
49260
|
+
orbitalViews.map((view) => /* @__PURE__ */ jsx(
|
|
49261
|
+
Box,
|
|
49262
|
+
{
|
|
49263
|
+
role: "button",
|
|
49264
|
+
tabIndex: 0,
|
|
49265
|
+
onClick: () => handleSelect(view.name),
|
|
49266
|
+
onKeyDown: (e) => {
|
|
49267
|
+
if (e.key === "Enter" || e.key === " ") handleSelect(view.name);
|
|
49268
|
+
},
|
|
49269
|
+
"aria-label": `Orbital: ${view.name}`,
|
|
49270
|
+
position: "absolute",
|
|
49271
|
+
style: {
|
|
49272
|
+
left: view.cx - UNIT_DISPLAY_W / 2,
|
|
49273
|
+
top: view.cy - UNIT_DISPLAY_H / 2,
|
|
49274
|
+
width: UNIT_DISPLAY_W,
|
|
49275
|
+
height: UNIT_DISPLAY_H,
|
|
49276
|
+
cursor: "pointer",
|
|
49277
|
+
transition: "transform 0.2s ease, filter 0.2s ease",
|
|
49278
|
+
transform: selected === view.name ? "scale(1.05)" : "scale(1)",
|
|
49279
|
+
filter: selected && selected !== view.name ? "opacity(0.5)" : "none",
|
|
49280
|
+
zIndex: selected === view.name ? 10 : 1
|
|
49281
|
+
},
|
|
49282
|
+
children: /* @__PURE__ */ jsx(
|
|
49283
|
+
AvlOrbitalUnit,
|
|
49284
|
+
{
|
|
49285
|
+
entityName: view.entityName,
|
|
49286
|
+
fields: view.fieldCount,
|
|
49287
|
+
persistence: view.persistence,
|
|
49288
|
+
traits: view.traits,
|
|
49289
|
+
pages: view.pages,
|
|
49290
|
+
color,
|
|
49291
|
+
animated: animated && selected === view.name
|
|
49292
|
+
}
|
|
49293
|
+
)
|
|
49294
|
+
},
|
|
49295
|
+
view.name
|
|
49296
|
+
)),
|
|
49297
|
+
selectedView && /* @__PURE__ */ jsx(
|
|
49298
|
+
InfoPanel,
|
|
49299
|
+
{
|
|
49300
|
+
view: selectedView,
|
|
49301
|
+
crossLinks,
|
|
49302
|
+
color
|
|
49303
|
+
}
|
|
49304
|
+
)
|
|
49305
|
+
]
|
|
49306
|
+
}
|
|
49307
|
+
);
|
|
49308
|
+
};
|
|
49309
|
+
AvlOrbitalsCosmicZoom.displayName = "AvlOrbitalsCosmicZoom";
|
|
48997
49310
|
init_types();
|
|
48998
49311
|
var SWIM_GUTTER2 = 120;
|
|
48999
49312
|
var CENTER_W2 = 360;
|
|
@@ -49409,4 +49722,4 @@ AvlClickTarget.displayName = "AvlClickTarget";
|
|
|
49409
49722
|
init_avl_schema_parser();
|
|
49410
49723
|
init_avl_zoom_state();
|
|
49411
49724
|
|
|
49412
|
-
export { AVL_FIELD_TYPE_SHAPES, AVL_OPERATOR_COLORS, AvlApplication, AvlBackwardEdge, AvlBehaviorGlyph, AvlBinding, AvlBindingEdge, AvlBindingRef, AvlClickTarget, AvlClosedCircuit, AvlCosmicZoom, AvlEffect, AvlEmitListen, AvlEntity, AvlEvent, AvlEventWireEdge, AvlExprTree, AvlField, AvlFieldType, AvlGuard, AvlLiteral, AvlOperator, AvlOrbital, AvlOrbitalNode, AvlOrbitalUnit, AvlPage, AvlPageEdge, AvlPersistence, AvlSExpr, AvlSlotMap, AvlState, AvlStateMachine, AvlSwimLane, AvlTrait, AvlTraitScene, AvlTransition, AvlTransitionEdge, AvlTransitionLane, AvlTransitionScene, BehaviorComposeNode, BehaviorView, CONNECTION_COLORS, DOMAIN_COLORS, DetailView, EFFECT_CATEGORY_COLORS, EFFECT_TYPE_TO_CATEGORY, EventFlowEdge, FlowCanvas, MiniStateMachine, ModuleCard, OrbInspector, OrbPreviewNode, STATE_COLORS, SystemNode, ZOOM_BAND_THRESHOLDS, ZoomBandContext, ZoomBreadcrumb, ZoomLegend, arcPath, behaviorsToComposeGraph, computeTraitLayout, computeZoomBand, curveControlPoint, edgePath, getStateRole, gridPositions, orbitalToExpandedGraph, parseApplicationLevel, parseOrbitalLevel, parseTraitLevel, parseTransitionLevel, radialPositions, registryEntryToCanvasEntry, ringPositions, schemaToFlowGraph, schemaToOverviewGraph, useZoomBand, zoomProgress };
|
|
49725
|
+
export { AVL_FIELD_TYPE_SHAPES, AVL_OPERATOR_COLORS, AvlApplication, AvlBackwardEdge, AvlBehaviorGlyph, AvlBinding, AvlBindingEdge, AvlBindingRef, AvlClickTarget, AvlClosedCircuit, AvlCosmicZoom, AvlEffect, AvlEmitListen, AvlEntity, AvlEvent, AvlEventWireEdge, AvlExprTree, AvlField, AvlFieldType, AvlGuard, AvlLiteral, AvlOperator, AvlOrbital, AvlOrbitalNode, AvlOrbitalUnit, AvlOrbitalsCosmicZoom, AvlPage, AvlPageEdge, AvlPersistence, AvlSExpr, AvlSlotMap, AvlState, AvlStateMachine, AvlSwimLane, AvlTrait, AvlTraitScene, AvlTransition, AvlTransitionEdge, AvlTransitionLane, AvlTransitionScene, BehaviorComposeNode, BehaviorView, CONNECTION_COLORS, DOMAIN_COLORS, DetailView, EFFECT_CATEGORY_COLORS, EFFECT_TYPE_TO_CATEGORY, EventFlowEdge, FlowCanvas, MiniStateMachine, ModuleCard, OrbInspector, OrbPreviewNode, STATE_COLORS, SystemNode, ZOOM_BAND_THRESHOLDS, ZoomBandContext, ZoomBreadcrumb, ZoomLegend, arcPath, behaviorsToComposeGraph, computeTraitLayout, computeZoomBand, curveControlPoint, edgePath, getStateRole, gridPositions, orbitalToExpandedGraph, parseApplicationLevel, parseOrbitalLevel, parseTraitLevel, parseTransitionLevel, radialPositions, registryEntryToCanvasEntry, ringPositions, schemaToFlowGraph, schemaToOverviewGraph, useZoomBand, zoomProgress };
|
|
@@ -34914,7 +34914,7 @@ var Timeline = ({
|
|
|
34914
34914
|
title && /* @__PURE__ */ jsxRuntime.jsx(exports.Typography, { variant: "h5", weight: "semibold", children: title }),
|
|
34915
34915
|
/* @__PURE__ */ jsxRuntime.jsx(VStack, { gap: "none", className: "relative", children: items.map((item, idx) => {
|
|
34916
34916
|
const status = item.status || "pending";
|
|
34917
|
-
const style = STATUS_STYLES3[status];
|
|
34917
|
+
const style = STATUS_STYLES3[status] || STATUS_STYLES3.pending;
|
|
34918
34918
|
const ItemIcon = item.icon || style.icon;
|
|
34919
34919
|
const isLast = idx === items.length - 1;
|
|
34920
34920
|
return /* @__PURE__ */ jsxRuntime.jsxs(HStack, { gap: "md", align: "start", className: "relative", children: [
|
package/dist/components/index.js
CHANGED
|
@@ -34869,7 +34869,7 @@ var Timeline = ({
|
|
|
34869
34869
|
title && /* @__PURE__ */ jsx(Typography, { variant: "h5", weight: "semibold", children: title }),
|
|
34870
34870
|
/* @__PURE__ */ jsx(VStack, { gap: "none", className: "relative", children: items.map((item, idx) => {
|
|
34871
34871
|
const status = item.status || "pending";
|
|
34872
|
-
const style = STATUS_STYLES3[status];
|
|
34872
|
+
const style = STATUS_STYLES3[status] || STATUS_STYLES3.pending;
|
|
34873
34873
|
const ItemIcon = item.icon || style.icon;
|
|
34874
34874
|
const isLast = idx === items.length - 1;
|
|
34875
34875
|
return /* @__PURE__ */ jsxs(HStack, { gap: "md", align: "start", className: "relative", children: [
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AvlOrbitalsCosmicZoom — Orbital Interaction Visualization
|
|
3
|
+
*
|
|
4
|
+
* Composed organism: renders AvlOrbitalUnit molecules positioned on a canvas,
|
|
5
|
+
* connected by cross-orbital event wire arrows. No React Flow dependency.
|
|
6
|
+
* Designed for documentation use.
|
|
7
|
+
*
|
|
8
|
+
* Composition:
|
|
9
|
+
* - AvlOrbitalUnit (molecule) for each orbital
|
|
10
|
+
* - SVG overlay for event wires between orbitals
|
|
11
|
+
* - Click to select an orbital and show info panel
|
|
12
|
+
*
|
|
13
|
+
* @packageDocumentation
|
|
14
|
+
*/
|
|
15
|
+
import React from 'react';
|
|
16
|
+
import type { OrbitalSchema } from '@almadar/core';
|
|
17
|
+
export interface AvlOrbitalsCosmicZoomProps {
|
|
18
|
+
/** The orbital schema (parsed object or JSON string) */
|
|
19
|
+
schema: OrbitalSchema | string;
|
|
20
|
+
/** CSS class for the outer container */
|
|
21
|
+
className?: string;
|
|
22
|
+
/** Primary color for the visualization */
|
|
23
|
+
color?: string;
|
|
24
|
+
/** Enable animations (default: true) */
|
|
25
|
+
animated?: boolean;
|
|
26
|
+
/** Container width */
|
|
27
|
+
width?: number | string;
|
|
28
|
+
/** Container height */
|
|
29
|
+
height?: number | string;
|
|
30
|
+
}
|
|
31
|
+
export declare const AvlOrbitalsCosmicZoom: React.FC<AvlOrbitalsCosmicZoomProps>;
|
|
@@ -10,6 +10,7 @@ export { OrbInspector, type OrbInspectorProps } from './OrbInspector';
|
|
|
10
10
|
export { ZoomBreadcrumb, type ZoomBreadcrumbProps } from './ZoomBreadcrumb';
|
|
11
11
|
export { ZoomLegend, type ZoomLegendProps } from './ZoomLegend';
|
|
12
12
|
export { AvlCosmicZoom, type AvlCosmicZoomProps } from './AvlCosmicZoom';
|
|
13
|
+
export { AvlOrbitalsCosmicZoom, type AvlOrbitalsCosmicZoomProps } from './AvlOrbitalsCosmicZoom';
|
|
13
14
|
export { AvlTraitScene, type AvlTraitSceneProps } from './AvlTraitScene';
|
|
14
15
|
export { AvlTransitionScene, type AvlTransitionSceneProps } from './AvlTransitionScene';
|
|
15
16
|
export { AvlClickTarget, type AvlClickTargetProps } from './AvlClickTarget';
|
package/dist/runtime/index.cjs
CHANGED
|
@@ -32022,7 +32022,7 @@ var Timeline = ({
|
|
|
32022
32022
|
title && /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "h5", weight: "semibold", children: title }),
|
|
32023
32023
|
/* @__PURE__ */ jsxRuntime.jsx(VStack, { gap: "none", className: "relative", children: items.map((item, idx) => {
|
|
32024
32024
|
const status = item.status || "pending";
|
|
32025
|
-
const style = STATUS_STYLES3[status];
|
|
32025
|
+
const style = STATUS_STYLES3[status] || STATUS_STYLES3.pending;
|
|
32026
32026
|
const ItemIcon = item.icon || style.icon;
|
|
32027
32027
|
const isLast = idx === items.length - 1;
|
|
32028
32028
|
return /* @__PURE__ */ jsxRuntime.jsxs(HStack, { gap: "md", align: "start", className: "relative", children: [
|
package/dist/runtime/index.js
CHANGED
|
@@ -31977,7 +31977,7 @@ var Timeline = ({
|
|
|
31977
31977
|
title && /* @__PURE__ */ jsx(Typography, { variant: "h5", weight: "semibold", children: title }),
|
|
31978
31978
|
/* @__PURE__ */ jsx(VStack, { gap: "none", className: "relative", children: items.map((item, idx) => {
|
|
31979
31979
|
const status = item.status || "pending";
|
|
31980
|
-
const style = STATUS_STYLES3[status];
|
|
31980
|
+
const style = STATUS_STYLES3[status] || STATUS_STYLES3.pending;
|
|
31981
31981
|
const ItemIcon = item.icon || style.icon;
|
|
31982
31982
|
const isLast = idx === items.length - 1;
|
|
31983
31983
|
return /* @__PURE__ */ jsxs(HStack, { gap: "md", align: "start", className: "relative", children: [
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@almadar/ui",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.50.1",
|
|
4
4
|
"description": "React UI components, hooks, and providers for Almadar",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/components/index.js",
|
|
@@ -122,7 +122,7 @@
|
|
|
122
122
|
"@almadar/evaluator": ">=2.5.4",
|
|
123
123
|
"@almadar/patterns": ">=2.10.0",
|
|
124
124
|
"@almadar/std": ">=5.2.0",
|
|
125
|
-
"@almadar/syntax": ">=1.2.
|
|
125
|
+
"@almadar/syntax": ">=1.2.1",
|
|
126
126
|
"@almadar/runtime": ">=2.0.0",
|
|
127
127
|
"@xyflow/react": "12.10.1",
|
|
128
128
|
"clsx": "^2.1.0",
|