@almadar/ui 5.152.0 → 5.154.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/{EntityBindingContext-CD9ZoXb4.d.cts → EntityBindingContext-BfZGeDfX.d.cts} +4 -2
- package/dist/{EntityBindingContext-CD9ZoXb4.d.ts → EntityBindingContext-BfZGeDfX.d.ts} +4 -2
- package/dist/NavStackContext-BoVV9nWb.d.cts +83 -0
- package/dist/NavStackContext-BoVV9nWb.d.ts +83 -0
- package/dist/avl/index.cjs +571 -76
- package/dist/avl/index.js +572 -77
- package/dist/{avl-schema-parser-Cx_4SVg9.d.ts → avl-schema-parser-CLIm28Wa.d.ts} +1 -1
- package/dist/{avl-schema-parser-CVzkNzg7.d.cts → avl-schema-parser-Do_LPV1o.d.cts} +1 -1
- package/dist/{cn-DJTUjk1M.d.ts → cn-CFurBb2q.d.ts} +1 -1
- package/dist/{cn-BnAJZcNb.d.cts → cn-TH-RHihd.d.cts} +1 -1
- package/dist/components/index.cjs +502 -52
- package/dist/components/index.d.cts +58 -9
- package/dist/components/index.d.ts +58 -9
- package/dist/components/index.js +501 -55
- package/dist/hooks/index.cjs +4 -0
- package/dist/hooks/index.d.cts +1 -0
- package/dist/hooks/index.d.ts +1 -0
- package/dist/hooks/index.js +1 -0
- package/dist/lib/drawable/three/index.cjs +212 -0
- package/dist/lib/drawable/three/index.d.cts +3 -3
- package/dist/lib/drawable/three/index.d.ts +3 -3
- package/dist/lib/drawable/three/index.js +212 -0
- package/dist/lib/index.d.cts +2 -2
- package/dist/lib/index.d.ts +2 -2
- package/dist/{paintDispatch-CxdLjHQq.d.ts → paintDispatch-B5n2DTB-.d.ts} +178 -2
- package/dist/{paintDispatch-BjZjUbcb.d.cts → paintDispatch-DgBctxIq.d.cts} +178 -2
- package/dist/providers/index.cjs +677 -59
- package/dist/providers/index.d.cts +2 -1
- package/dist/providers/index.d.ts +2 -1
- package/dist/providers/index.js +677 -62
- package/dist/runtime/index.cjs +570 -75
- package/dist/runtime/index.d.cts +12 -5
- package/dist/runtime/index.d.ts +12 -5
- package/dist/runtime/index.js +571 -76
- package/package.json +4 -4
package/dist/components/index.js
CHANGED
|
@@ -3,8 +3,8 @@ import * as React77 from 'react';
|
|
|
3
3
|
import React77__default, { createContext, useContext, useMemo, useRef, useEffect, useCallback, useState, useLayoutEffect, useId, Suspense, lazy, useSyncExternalStore } from 'react';
|
|
4
4
|
import { clsx } from 'clsx';
|
|
5
5
|
import { twMerge } from 'tailwind-merge';
|
|
6
|
-
import { EventBusContext, useTraitScopeChain, useCurrentPagePath, useGameAudioContextOptional, useEntitySchemaOptional, useEntityBindingSnapshot, useTraitScope, TraitScopeProvider } from '@almadar/ui/providers';
|
|
7
|
-
export { GameAudioContext, GameAudioProvider, useGameAudioContext } from '@almadar/ui/providers';
|
|
6
|
+
import { EventBusContext, useTraitScopeChain, useCurrentPagePath, useGameAudioContextOptional, useEntitySchemaOptional, useEntityBindingSnapshot, useTraitScope, TraitScopeProvider, useNavStack } from '@almadar/ui/providers';
|
|
7
|
+
export { GameAudioContext, GameAudioProvider, useGameAudioContext, useNavStack } from '@almadar/ui/providers';
|
|
8
8
|
import { createLogger, isLogLevelEnabled } from '@almadar/logger';
|
|
9
9
|
import * as LucideIcons2 from 'lucide-react';
|
|
10
10
|
import { X, List, Printer, ChevronRight, ChevronLeft, Check, Copy, RotateCcw, Play, Terminal, CheckCircle, XCircle, ChevronDown, Search, ChevronUp, MoreHorizontal, ArrowLeft, DollarSign, Package, Calendar, Pencil, Eye, Image as Image$1, Upload, ZoomIn, TrendingUp, TrendingDown, Minus, AlertCircle, Circle, Clock, CheckCircle2, Loader2, Code, FileText, WrapText, HelpCircle, Type, Heading1, Heading2, Heading3, ListOrdered, Quote, GitBranch, Plus, ArrowRight, Trash, Menu as Menu$1, AlertTriangle, Trash2, Eraser, ZoomOut, Download, Lightbulb, PauseCircle, Link2, Tag, User } from 'lucide-react';
|
|
@@ -5149,27 +5149,61 @@ var init_InfiniteScrollSentinel = __esm({
|
|
|
5149
5149
|
InfiniteScrollSentinel.displayName = "InfiniteScrollSentinel";
|
|
5150
5150
|
}
|
|
5151
5151
|
});
|
|
5152
|
-
|
|
5153
|
-
|
|
5154
|
-
|
|
5155
|
-
|
|
5156
|
-
|
|
5157
|
-
|
|
5158
|
-
|
|
5159
|
-
|
|
5160
|
-
|
|
5161
|
-
|
|
5162
|
-
|
|
5163
|
-
|
|
5164
|
-
|
|
5165
|
-
|
|
5152
|
+
|
|
5153
|
+
// components/core/atoms/fx.ts
|
|
5154
|
+
function resolveFxView(item, presets) {
|
|
5155
|
+
const row = presets?.find((p) => p.type === item.type);
|
|
5156
|
+
if (!row) return item;
|
|
5157
|
+
return {
|
|
5158
|
+
...item,
|
|
5159
|
+
space: item.space ?? row.space,
|
|
5160
|
+
effect: item.effect ?? row.effect,
|
|
5161
|
+
color: item.color ?? row.color,
|
|
5162
|
+
size: item.size ?? row.size,
|
|
5163
|
+
vx: item.vx ?? row.vx,
|
|
5164
|
+
vy: item.vy ?? row.vy,
|
|
5165
|
+
vz: item.vz ?? row.vz,
|
|
5166
|
+
particleCount: item.particleCount ?? row.particleCount,
|
|
5167
|
+
shape: row.shape,
|
|
5168
|
+
count: row.count,
|
|
5169
|
+
glow: row.glow,
|
|
5170
|
+
gravity: row.gravity,
|
|
5171
|
+
color2: row.color2
|
|
5172
|
+
};
|
|
5166
5173
|
}
|
|
5167
|
-
|
|
5168
|
-
|
|
5169
|
-
|
|
5170
|
-
|
|
5171
|
-
|
|
5172
|
-
|
|
5174
|
+
function fxLifecycle(item, epochNowMs, tickMs) {
|
|
5175
|
+
const maxTtl = Math.max(item.maxTtl ?? item.ttl, item.ttl, 1);
|
|
5176
|
+
const lifeMs = maxTtl * tickMs;
|
|
5177
|
+
const ageMs = item.bornAt !== void 0 && epochNowMs > 0 ? Math.max(0, epochNowMs - item.bornAt) : (1 - item.ttl / maxTtl) * lifeMs;
|
|
5178
|
+
const progress = Math.min(1, Math.max(0, ageMs / lifeMs));
|
|
5179
|
+
return { lifeMs, ageMs, progress, fade: 1 - progress };
|
|
5180
|
+
}
|
|
5181
|
+
function fxHash01(seed, salt) {
|
|
5182
|
+
let h = 2166136261 ^ salt;
|
|
5183
|
+
for (let i = 0; i < seed.length; i++) {
|
|
5184
|
+
h ^= seed.charCodeAt(i);
|
|
5185
|
+
h = Math.imul(h, 16777619);
|
|
5186
|
+
}
|
|
5187
|
+
h ^= h >>> 13;
|
|
5188
|
+
h = Math.imul(h, 1274126177);
|
|
5189
|
+
h ^= h >>> 16;
|
|
5190
|
+
return (h >>> 0) / 4294967296;
|
|
5191
|
+
}
|
|
5192
|
+
function createConfettiParticles(count, seed) {
|
|
5193
|
+
return Array.from({ length: count }, (_, i) => ({
|
|
5194
|
+
id: i,
|
|
5195
|
+
color: CONFETTI_COLORS[Math.floor(fxHash01(seed, i * 7 + 1) * CONFETTI_COLORS.length)],
|
|
5196
|
+
left: 30 + fxHash01(seed, i * 7 + 2) * 40,
|
|
5197
|
+
delay: fxHash01(seed, i * 7 + 3) * 300,
|
|
5198
|
+
angle: fxHash01(seed, i * 7 + 4) * 360,
|
|
5199
|
+
distance: 40 + fxHash01(seed, i * 7 + 5) * 80,
|
|
5200
|
+
rotation: fxHash01(seed, i * 7 + 6) * 720 - 360,
|
|
5201
|
+
size: 4 + fxHash01(seed, i * 7 + 7) * 6
|
|
5202
|
+
}));
|
|
5203
|
+
}
|
|
5204
|
+
var CONFETTI_COLORS, CONFETTI_BURST_KEYFRAMES;
|
|
5205
|
+
var init_fx = __esm({
|
|
5206
|
+
"components/core/atoms/fx.ts"() {
|
|
5173
5207
|
CONFETTI_COLORS = [
|
|
5174
5208
|
"var(--color-primary)",
|
|
5175
5209
|
"var(--color-success)",
|
|
@@ -5178,7 +5212,30 @@ var init_ConfettiEffect = __esm({
|
|
|
5178
5212
|
"gold",
|
|
5179
5213
|
"dodgerblue"
|
|
5180
5214
|
];
|
|
5181
|
-
|
|
5215
|
+
CONFETTI_BURST_KEYFRAMES = `
|
|
5216
|
+
@keyframes confetti-burst {
|
|
5217
|
+
0% {
|
|
5218
|
+
opacity: 1;
|
|
5219
|
+
transform: translate(0, 0) rotate(0deg) scale(1);
|
|
5220
|
+
}
|
|
5221
|
+
70% {
|
|
5222
|
+
opacity: 1;
|
|
5223
|
+
}
|
|
5224
|
+
100% {
|
|
5225
|
+
opacity: 0;
|
|
5226
|
+
transform: translate(var(--confetti-tx), var(--confetti-ty)) rotate(var(--confetti-rotate)) scale(0.5);
|
|
5227
|
+
}
|
|
5228
|
+
}
|
|
5229
|
+
`;
|
|
5230
|
+
}
|
|
5231
|
+
});
|
|
5232
|
+
var ConfettiEffect;
|
|
5233
|
+
var init_ConfettiEffect = __esm({
|
|
5234
|
+
"components/core/atoms/ConfettiEffect.tsx"() {
|
|
5235
|
+
"use client";
|
|
5236
|
+
init_cn();
|
|
5237
|
+
init_Box();
|
|
5238
|
+
init_fx();
|
|
5182
5239
|
ConfettiEffect = ({
|
|
5183
5240
|
trigger,
|
|
5184
5241
|
duration = 2e3,
|
|
@@ -5187,11 +5244,13 @@ var init_ConfettiEffect = __esm({
|
|
|
5187
5244
|
}) => {
|
|
5188
5245
|
const [particles, setParticles] = useState([]);
|
|
5189
5246
|
const previousTriggerRef = useRef(false);
|
|
5247
|
+
const burstRef = useRef(0);
|
|
5190
5248
|
useEffect(() => {
|
|
5191
5249
|
const wasFalse = !previousTriggerRef.current;
|
|
5192
5250
|
previousTriggerRef.current = trigger;
|
|
5193
5251
|
if (trigger && wasFalse) {
|
|
5194
|
-
|
|
5252
|
+
burstRef.current += 1;
|
|
5253
|
+
const newParticles = createConfettiParticles(particleCount, `confetti-${burstRef.current}`);
|
|
5195
5254
|
setParticles(newParticles);
|
|
5196
5255
|
const timer = window.setTimeout(() => {
|
|
5197
5256
|
setParticles([]);
|
|
@@ -5239,21 +5298,7 @@ var init_ConfettiEffect = __esm({
|
|
|
5239
5298
|
p.id
|
|
5240
5299
|
);
|
|
5241
5300
|
}),
|
|
5242
|
-
/* @__PURE__ */ jsx("style", { children:
|
|
5243
|
-
@keyframes confetti-burst {
|
|
5244
|
-
0% {
|
|
5245
|
-
opacity: 1;
|
|
5246
|
-
transform: translate(0, 0) rotate(0deg) scale(1);
|
|
5247
|
-
}
|
|
5248
|
-
70% {
|
|
5249
|
-
opacity: 1;
|
|
5250
|
-
}
|
|
5251
|
-
100% {
|
|
5252
|
-
opacity: 0;
|
|
5253
|
-
transform: translate(var(--confetti-tx), var(--confetti-ty)) rotate(var(--confetti-rotate)) scale(0.5);
|
|
5254
|
-
}
|
|
5255
|
-
}
|
|
5256
|
-
` })
|
|
5301
|
+
/* @__PURE__ */ jsx("style", { children: CONFETTI_BURST_KEYFRAMES })
|
|
5257
5302
|
]
|
|
5258
5303
|
}
|
|
5259
5304
|
);
|
|
@@ -16081,17 +16126,27 @@ var init_Breadcrumb = __esm({
|
|
|
16081
16126
|
init_useEventBus();
|
|
16082
16127
|
Breadcrumb = ({
|
|
16083
16128
|
items,
|
|
16129
|
+
fromNavStack = false,
|
|
16130
|
+
itemEvent,
|
|
16084
16131
|
separator = "chevron-right",
|
|
16085
16132
|
maxItems,
|
|
16086
16133
|
className
|
|
16087
16134
|
}) => {
|
|
16088
16135
|
const eventBus = useEventBus();
|
|
16089
16136
|
const { t } = useTranslate();
|
|
16090
|
-
const
|
|
16091
|
-
|
|
16137
|
+
const navStack = useNavStack();
|
|
16138
|
+
const sourceItems = fromNavStack ? navStack.entries.map((entry, i) => ({
|
|
16139
|
+
label: entry.label,
|
|
16140
|
+
path: entry.href,
|
|
16141
|
+
isCurrent: i === navStack.entries.length - 1,
|
|
16142
|
+
event: itemEvent
|
|
16143
|
+
})) : items ?? [];
|
|
16144
|
+
if (fromNavStack && sourceItems.length === 0) return null;
|
|
16145
|
+
const displayItems = maxItems && sourceItems.length > maxItems ? [
|
|
16146
|
+
...sourceItems.slice(0, 1),
|
|
16092
16147
|
{ label: "...", isCurrent: false },
|
|
16093
|
-
...
|
|
16094
|
-
] :
|
|
16148
|
+
...sourceItems.slice(-maxItems + 1)
|
|
16149
|
+
] : sourceItems;
|
|
16095
16150
|
return /* @__PURE__ */ jsx(
|
|
16096
16151
|
"nav",
|
|
16097
16152
|
{
|
|
@@ -16101,7 +16156,7 @@ var init_Breadcrumb = __esm({
|
|
|
16101
16156
|
const isLast = index === displayItems.length - 1;
|
|
16102
16157
|
const isEllipsis = item.label === "...";
|
|
16103
16158
|
return /* @__PURE__ */ jsxs("li", { className: "flex items-center gap-2", children: [
|
|
16104
|
-
isEllipsis ? /* @__PURE__ */ jsx(Typography, { variant: "small", color: "muted", children: item.label }) : item.href || item.path ? /* @__PURE__ */ jsxs(
|
|
16159
|
+
isEllipsis ? /* @__PURE__ */ jsx(Typography, { variant: "small", color: "muted", children: item.label }) : (item.href || item.path) && !item.event && !fromNavStack ? /* @__PURE__ */ jsxs(
|
|
16105
16160
|
"a",
|
|
16106
16161
|
{
|
|
16107
16162
|
href: item.href || item.path,
|
|
@@ -16127,7 +16182,12 @@ var init_Breadcrumb = __esm({
|
|
|
16127
16182
|
{
|
|
16128
16183
|
type: "button",
|
|
16129
16184
|
onClick: () => {
|
|
16130
|
-
|
|
16185
|
+
const href = item.path ?? item.href;
|
|
16186
|
+
if (item.event) {
|
|
16187
|
+
eventBus.emit(`UI:${item.event}`, { label: item.label, href, index });
|
|
16188
|
+
} else if (fromNavStack && href) {
|
|
16189
|
+
navStack.goTo(href);
|
|
16190
|
+
}
|
|
16131
16191
|
item.onClick?.();
|
|
16132
16192
|
},
|
|
16133
16193
|
className: cn(
|
|
@@ -18057,7 +18117,7 @@ var init_DrawShape = __esm({
|
|
|
18057
18117
|
const cx = p.x + (node.offsetX ?? 0) * tw;
|
|
18058
18118
|
const cy = p.y + (node.offsetY ?? 0) * tw;
|
|
18059
18119
|
const rx = (node.radiusX ?? 0) * tw;
|
|
18060
|
-
const ry = (node.radiusY ??
|
|
18120
|
+
const ry = (node.radiusY ?? node.radiusX ?? 0) * tw;
|
|
18061
18121
|
if (pxFill) painter.fillEllipse(cx, cy, rx, ry, pxFill);
|
|
18062
18122
|
if (patFill) painter.fillEllipse(cx, cy, rx, ry, patFill);
|
|
18063
18123
|
if (pxStroke) painter.strokeEllipse(cx, cy, rx, ry, pxStroke, strokePx);
|
|
@@ -18247,6 +18307,172 @@ var init_DrawTextLayer = __esm({
|
|
|
18247
18307
|
};
|
|
18248
18308
|
}
|
|
18249
18309
|
});
|
|
18310
|
+
|
|
18311
|
+
// components/game/molecules/DrawFxLayer.tsx
|
|
18312
|
+
function fxPosition(view, dim, ageSec) {
|
|
18313
|
+
const g = view.gravity ?? 0;
|
|
18314
|
+
const fall = 0.5 * g * ageSec * ageSec;
|
|
18315
|
+
{
|
|
18316
|
+
const base2 = view.position ?? { x: view.x, y: view.z ?? view.y ?? 0 };
|
|
18317
|
+
if (!Number.isFinite(base2.x) || !Number.isFinite(base2.y)) return void 0;
|
|
18318
|
+
return {
|
|
18319
|
+
x: base2.x + (view.vx ?? 0) * ageSec,
|
|
18320
|
+
y: base2.y + (view.vz ?? 0) * ageSec + fall
|
|
18321
|
+
};
|
|
18322
|
+
}
|
|
18323
|
+
}
|
|
18324
|
+
function sparkShape(view, pos, i, fade, progress) {
|
|
18325
|
+
const size = view.size ?? 0.5;
|
|
18326
|
+
const angle = fxHash01(view.id, i * 3) * Math.PI * 2;
|
|
18327
|
+
const dist = size * (0.4 + 0.6 * fxHash01(view.id, i * 3 + 1)) * easeOut2(progress);
|
|
18328
|
+
const r = size * (0.06 + 0.06 * fxHash01(view.id, i * 3 + 2));
|
|
18329
|
+
const color = view.color ?? DEFAULT_SPARK_COLOR;
|
|
18330
|
+
return {
|
|
18331
|
+
type: "draw-shape",
|
|
18332
|
+
shape: "ellipse",
|
|
18333
|
+
position: { ...pos, x: pos.x + Math.cos(angle) * dist, y: pos.y + Math.sin(angle) * dist },
|
|
18334
|
+
anchor: "center",
|
|
18335
|
+
radiusX: r,
|
|
18336
|
+
fill: color,
|
|
18337
|
+
blendMode: "lighter",
|
|
18338
|
+
opacity: fade,
|
|
18339
|
+
...view.glow ? { shadow: { color, blur: view.glow } } : {}
|
|
18340
|
+
};
|
|
18341
|
+
}
|
|
18342
|
+
function proceduralShapes(view, pos, fade, progress) {
|
|
18343
|
+
const size = view.size ?? 0.5;
|
|
18344
|
+
const color = view.color ?? DEFAULT_SPARK_COLOR;
|
|
18345
|
+
switch (view.shape ?? "spark") {
|
|
18346
|
+
case "ring": {
|
|
18347
|
+
return [
|
|
18348
|
+
{
|
|
18349
|
+
type: "draw-shape",
|
|
18350
|
+
shape: "ellipse",
|
|
18351
|
+
position: pos,
|
|
18352
|
+
anchor: "center",
|
|
18353
|
+
radiusX: size * easeOut2(progress),
|
|
18354
|
+
stroke: view.color2 ?? color,
|
|
18355
|
+
strokeWidth: 2,
|
|
18356
|
+
blendMode: "lighter",
|
|
18357
|
+
opacity: fade,
|
|
18358
|
+
...view.glow ? { shadow: { color, blur: view.glow } } : {}
|
|
18359
|
+
}
|
|
18360
|
+
];
|
|
18361
|
+
}
|
|
18362
|
+
case "puff": {
|
|
18363
|
+
const count = view.count ?? 3;
|
|
18364
|
+
return Array.from({ length: count }, (_, i) => {
|
|
18365
|
+
const angle = fxHash01(view.id, i * 5) * Math.PI * 2;
|
|
18366
|
+
const drift = size * 0.3 * fxHash01(view.id, i * 5 + 1) * easeOut2(progress);
|
|
18367
|
+
return {
|
|
18368
|
+
type: "draw-shape",
|
|
18369
|
+
shape: "ellipse",
|
|
18370
|
+
position: { ...pos, x: pos.x + Math.cos(angle) * drift, y: pos.y + Math.sin(angle) * drift },
|
|
18371
|
+
anchor: "center",
|
|
18372
|
+
radiusX: size * (0.15 + 0.35 * progress) * (0.7 + 0.6 * fxHash01(view.id, i * 5 + 2)),
|
|
18373
|
+
fill: i === 0 && view.color2 ? view.color2 : color,
|
|
18374
|
+
opacity: fade * 0.6,
|
|
18375
|
+
...view.glow ? { shadow: { color, blur: view.glow } } : {}
|
|
18376
|
+
};
|
|
18377
|
+
});
|
|
18378
|
+
}
|
|
18379
|
+
case "streak": {
|
|
18380
|
+
const count = view.count ?? 5;
|
|
18381
|
+
return Array.from({ length: count }, (_, i) => {
|
|
18382
|
+
const angle = fxHash01(view.id, i * 3) * Math.PI * 2;
|
|
18383
|
+
const inner = size * (0.2 + 0.8 * easeOut2(progress)) * (0.6 + 0.4 * fxHash01(view.id, i * 3 + 1));
|
|
18384
|
+
const len = size * 0.35;
|
|
18385
|
+
return {
|
|
18386
|
+
type: "draw-shape",
|
|
18387
|
+
shape: "ellipse",
|
|
18388
|
+
position: pos,
|
|
18389
|
+
anchor: "center",
|
|
18390
|
+
offsetX: inner + len / 2,
|
|
18391
|
+
offsetY: 0,
|
|
18392
|
+
radiusX: len / 2,
|
|
18393
|
+
radiusY: size * 0.04,
|
|
18394
|
+
rotate: angle,
|
|
18395
|
+
fill: color,
|
|
18396
|
+
blendMode: "lighter",
|
|
18397
|
+
opacity: fade,
|
|
18398
|
+
...view.glow ? { shadow: { color, blur: view.glow } } : {}
|
|
18399
|
+
};
|
|
18400
|
+
});
|
|
18401
|
+
}
|
|
18402
|
+
default: {
|
|
18403
|
+
const count = view.count ?? 6;
|
|
18404
|
+
return Array.from({ length: count }, (_, i) => sparkShape(view, pos, i, fade, progress));
|
|
18405
|
+
}
|
|
18406
|
+
}
|
|
18407
|
+
}
|
|
18408
|
+
function expandFxItem(view, node, epochNowMs, dim) {
|
|
18409
|
+
if (view.space === "screen") return [];
|
|
18410
|
+
const tickMs = node.tickMs ?? DEFAULT_TICK_MS;
|
|
18411
|
+
const { ageMs, progress, fade } = fxLifecycle(view, epochNowMs, tickMs);
|
|
18412
|
+
if (progress >= 1) return [];
|
|
18413
|
+
const pos = fxPosition(view, dim, ageMs / 1e3);
|
|
18414
|
+
if (!pos) return [];
|
|
18415
|
+
const out = [];
|
|
18416
|
+
const artItems = node.art?.[view.type]?.["idle"];
|
|
18417
|
+
const sprite = node.sprites?.[view.type];
|
|
18418
|
+
if (Array.isArray(artItems)) {
|
|
18419
|
+
out.push({
|
|
18420
|
+
type: "draw-group",
|
|
18421
|
+
position: pos,
|
|
18422
|
+
opacity: fade,
|
|
18423
|
+
...view.size !== void 0 ? { scale: view.size } : {},
|
|
18424
|
+
items: artItems
|
|
18425
|
+
});
|
|
18426
|
+
} else if (sprite?.url) {
|
|
18427
|
+
const spriteSize = view.size ?? 0.6;
|
|
18428
|
+
out.push({
|
|
18429
|
+
type: "draw-sprite",
|
|
18430
|
+
position: pos,
|
|
18431
|
+
asset: sprite,
|
|
18432
|
+
anchor: "center",
|
|
18433
|
+
width: spriteSize,
|
|
18434
|
+
height: spriteSize,
|
|
18435
|
+
opacity: fade
|
|
18436
|
+
});
|
|
18437
|
+
} else {
|
|
18438
|
+
out.push(...proceduralShapes(view, pos, fade, progress));
|
|
18439
|
+
}
|
|
18440
|
+
if (view.message) {
|
|
18441
|
+
const text = {
|
|
18442
|
+
type: "draw-text",
|
|
18443
|
+
text: view.message,
|
|
18444
|
+
position: pos,
|
|
18445
|
+
offsetY: -(0.15 + 0.55 * progress),
|
|
18446
|
+
color: view.color ?? node.textColor ?? DEFAULT_TEXT_COLOR,
|
|
18447
|
+
opacity: fade
|
|
18448
|
+
};
|
|
18449
|
+
out.push(text);
|
|
18450
|
+
}
|
|
18451
|
+
return out;
|
|
18452
|
+
}
|
|
18453
|
+
function expandFxLayer(node, epochNowMs, dim) {
|
|
18454
|
+
if (!Array.isArray(node.items)) return [];
|
|
18455
|
+
const out = [];
|
|
18456
|
+
for (const item of node.items) {
|
|
18457
|
+
if (!item || typeof item.id !== "string") continue;
|
|
18458
|
+
out.push(...expandFxItem(resolveFxView(item, node.presets), node, epochNowMs, dim));
|
|
18459
|
+
}
|
|
18460
|
+
return out;
|
|
18461
|
+
}
|
|
18462
|
+
function DrawFxLayer(_props) {
|
|
18463
|
+
return null;
|
|
18464
|
+
}
|
|
18465
|
+
var DEFAULT_TICK_MS, DEFAULT_TEXT_COLOR, DEFAULT_SPARK_COLOR, easeOut2;
|
|
18466
|
+
var init_DrawFxLayer = __esm({
|
|
18467
|
+
"components/game/molecules/DrawFxLayer.tsx"() {
|
|
18468
|
+
"use client";
|
|
18469
|
+
init_fx();
|
|
18470
|
+
DEFAULT_TICK_MS = 500;
|
|
18471
|
+
DEFAULT_TEXT_COLOR = "#ffe066";
|
|
18472
|
+
DEFAULT_SPARK_COLOR = "#ffffff";
|
|
18473
|
+
easeOut2 = (t) => 1 - (1 - t) * (1 - t);
|
|
18474
|
+
}
|
|
18475
|
+
});
|
|
18250
18476
|
function paintDrawable(painter, node, dctx) {
|
|
18251
18477
|
switch (node.type) {
|
|
18252
18478
|
case "draw-sprite":
|
|
@@ -18294,6 +18520,11 @@ function paintDrawable(painter, node, dctx) {
|
|
|
18294
18520
|
case "draw-text-layer":
|
|
18295
18521
|
paintTextLayer(painter, node, dctx);
|
|
18296
18522
|
break;
|
|
18523
|
+
case "draw-fx-layer": {
|
|
18524
|
+
const epochNow = dctx.time > 0 && typeof performance !== "undefined" ? performance.timeOrigin + dctx.time : 0;
|
|
18525
|
+
for (const child of expandFxLayer(node, epochNow, "2d")) paintDrawable(painter, child, dctx);
|
|
18526
|
+
break;
|
|
18527
|
+
}
|
|
18297
18528
|
}
|
|
18298
18529
|
}
|
|
18299
18530
|
var paint2dLog, warnedUnsupported2d, warnUnsupported2d;
|
|
@@ -18308,6 +18539,7 @@ var init_paintDispatch = __esm({
|
|
|
18308
18539
|
init_DrawSpriteLayer();
|
|
18309
18540
|
init_DrawShapeLayer();
|
|
18310
18541
|
init_DrawTextLayer();
|
|
18542
|
+
init_DrawFxLayer();
|
|
18311
18543
|
paint2dLog = createLogger("almadar:ui:drawable-2d");
|
|
18312
18544
|
warnedUnsupported2d = /* @__PURE__ */ new Set();
|
|
18313
18545
|
warnUnsupported2d = (kind) => {
|
|
@@ -18556,6 +18788,7 @@ function Canvas2D({
|
|
|
18556
18788
|
return isAnimatedGroup(node) || Array.isArray(node.items) && node.items.some(drawableIsAnimated);
|
|
18557
18789
|
if (node.type === "draw-shape-layer") return Array.isArray(node.items) && node.items.some(isAnimatedShape);
|
|
18558
18790
|
if (node.type === "draw-sprite-layer") return Array.isArray(node.items) && node.items.some(isAnimatedSprite);
|
|
18791
|
+
if (node.type === "draw-fx-layer") return Array.isArray(node.items) && node.items.length > 0;
|
|
18559
18792
|
return false;
|
|
18560
18793
|
};
|
|
18561
18794
|
const animRafRef = useRef(0);
|
|
@@ -26478,6 +26711,196 @@ var init_PageTransition = __esm({
|
|
|
26478
26711
|
PageTransition.displayName = "PageTransition";
|
|
26479
26712
|
}
|
|
26480
26713
|
});
|
|
26714
|
+
function ConfettiBurst({ item, lifeMs }) {
|
|
26715
|
+
const particles = createConfettiParticles(item.particleCount ?? 30, item.id);
|
|
26716
|
+
const left = (item.x ?? 0.5) * 100;
|
|
26717
|
+
const top = (item.z ?? item.y ?? 0.4) * 100;
|
|
26718
|
+
return /* @__PURE__ */ jsx(Box, { position: "absolute", style: { left: `${left}%`, top: `${top}%` }, children: particles.map((p) => {
|
|
26719
|
+
const rad = p.angle * Math.PI / 180;
|
|
26720
|
+
const tx = Math.cos(rad) * p.distance * (item.size ?? 1);
|
|
26721
|
+
const ty = Math.sin(rad) * p.distance * (item.size ?? 1) - 20;
|
|
26722
|
+
return /* @__PURE__ */ jsx(
|
|
26723
|
+
Box,
|
|
26724
|
+
{
|
|
26725
|
+
className: "absolute rounded-sm",
|
|
26726
|
+
style: {
|
|
26727
|
+
left: (p.left - 50) * 2,
|
|
26728
|
+
top: -10,
|
|
26729
|
+
width: p.size,
|
|
26730
|
+
height: p.size,
|
|
26731
|
+
backgroundColor: item.color ?? p.color,
|
|
26732
|
+
animation: `confetti-burst ${Math.max(lifeMs - p.delay, 200)}ms ease-out ${p.delay}ms forwards`,
|
|
26733
|
+
opacity: 0,
|
|
26734
|
+
"--confetti-tx": `${tx}px`,
|
|
26735
|
+
"--confetti-ty": `${ty}px`,
|
|
26736
|
+
"--confetti-rotate": `${p.rotation}deg`
|
|
26737
|
+
}
|
|
26738
|
+
},
|
|
26739
|
+
p.id
|
|
26740
|
+
);
|
|
26741
|
+
}) });
|
|
26742
|
+
}
|
|
26743
|
+
function SparkleBurst({ item, lifeMs }) {
|
|
26744
|
+
const count = item.particleCount ?? 8;
|
|
26745
|
+
const scale = item.size ?? 1;
|
|
26746
|
+
const left = (item.x ?? 0.5) * 100;
|
|
26747
|
+
const top = (item.z ?? item.y ?? 0.4) * 100;
|
|
26748
|
+
return /* @__PURE__ */ jsx(Box, { position: "absolute", style: { left: `${left}%`, top: `${top}%` }, children: Array.from({ length: count }, (_, i) => {
|
|
26749
|
+
const dx = (fxHash01(item.id, i * 4) - 0.5) * 160 * scale;
|
|
26750
|
+
const dy = (fxHash01(item.id, i * 4 + 1) - 0.5) * 120 * scale;
|
|
26751
|
+
const dot = (4 + fxHash01(item.id, i * 4 + 2) * 5) * scale;
|
|
26752
|
+
const delay = fxHash01(item.id, i * 4 + 3) * lifeMs * 0.4;
|
|
26753
|
+
return /* @__PURE__ */ jsx(
|
|
26754
|
+
Box,
|
|
26755
|
+
{
|
|
26756
|
+
className: "absolute rounded-full",
|
|
26757
|
+
style: {
|
|
26758
|
+
left: dx,
|
|
26759
|
+
top: dy,
|
|
26760
|
+
width: dot,
|
|
26761
|
+
height: dot,
|
|
26762
|
+
backgroundColor: item.color ?? "gold",
|
|
26763
|
+
opacity: 0,
|
|
26764
|
+
animation: `fx-overlay-sparkle ${Math.max(lifeMs - delay, 200)}ms ease-in-out ${delay}ms forwards`
|
|
26765
|
+
}
|
|
26766
|
+
},
|
|
26767
|
+
i
|
|
26768
|
+
);
|
|
26769
|
+
}) });
|
|
26770
|
+
}
|
|
26771
|
+
function OverlayFxNode({ item, tickMs }) {
|
|
26772
|
+
const lifeMs = lifeMsOf(item, tickMs);
|
|
26773
|
+
switch (item.effect ?? "sparkle") {
|
|
26774
|
+
case "confetti":
|
|
26775
|
+
return /* @__PURE__ */ jsx(ConfettiBurst, { item, lifeMs });
|
|
26776
|
+
case "flash":
|
|
26777
|
+
return /* @__PURE__ */ jsx(
|
|
26778
|
+
Box,
|
|
26779
|
+
{
|
|
26780
|
+
position: "absolute",
|
|
26781
|
+
className: "inset-0",
|
|
26782
|
+
style: {
|
|
26783
|
+
backgroundColor: item.color ?? "#ffffff",
|
|
26784
|
+
opacity: 0,
|
|
26785
|
+
animation: `fx-overlay-flash ${lifeMs}ms ease-out forwards`
|
|
26786
|
+
}
|
|
26787
|
+
}
|
|
26788
|
+
);
|
|
26789
|
+
case "streak-glow":
|
|
26790
|
+
return /* @__PURE__ */ jsx(
|
|
26791
|
+
Box,
|
|
26792
|
+
{
|
|
26793
|
+
position: "absolute",
|
|
26794
|
+
className: "inset-0",
|
|
26795
|
+
style: {
|
|
26796
|
+
boxShadow: `inset 0 0 ${60 * (item.size ?? 1)}px ${item.color ?? "var(--color-warning)"}`,
|
|
26797
|
+
opacity: 0,
|
|
26798
|
+
animation: `fx-overlay-glow ${lifeMs}ms ease-in-out forwards`
|
|
26799
|
+
}
|
|
26800
|
+
}
|
|
26801
|
+
);
|
|
26802
|
+
case "float-text": {
|
|
26803
|
+
if (!item.message) return null;
|
|
26804
|
+
return /* @__PURE__ */ jsx(
|
|
26805
|
+
Box,
|
|
26806
|
+
{
|
|
26807
|
+
position: "absolute",
|
|
26808
|
+
style: {
|
|
26809
|
+
left: `${(item.x ?? 0.5) * 100}%`,
|
|
26810
|
+
top: `${(item.z ?? item.y ?? 0.4) * 100}%`,
|
|
26811
|
+
color: item.color ?? "var(--color-success)",
|
|
26812
|
+
fontWeight: 700,
|
|
26813
|
+
fontSize: 16 * (item.size ?? 1),
|
|
26814
|
+
textShadow: "0 1px 2px rgba(0,0,0,0.4)",
|
|
26815
|
+
opacity: 0,
|
|
26816
|
+
animation: `fx-overlay-float ${lifeMs}ms ease-out forwards`,
|
|
26817
|
+
whiteSpace: "nowrap"
|
|
26818
|
+
},
|
|
26819
|
+
children: item.message
|
|
26820
|
+
}
|
|
26821
|
+
);
|
|
26822
|
+
}
|
|
26823
|
+
case "shake":
|
|
26824
|
+
return null;
|
|
26825
|
+
default:
|
|
26826
|
+
return /* @__PURE__ */ jsx(SparkleBurst, { item, lifeMs });
|
|
26827
|
+
}
|
|
26828
|
+
}
|
|
26829
|
+
var DEFAULT_TICK_MS2, FX_OVERLAY_KEYFRAMES, lifeMsOf, FxOverlay;
|
|
26830
|
+
var init_FxOverlay = __esm({
|
|
26831
|
+
"components/core/molecules/FxOverlay.tsx"() {
|
|
26832
|
+
"use client";
|
|
26833
|
+
init_cn();
|
|
26834
|
+
init_Box();
|
|
26835
|
+
init_fx();
|
|
26836
|
+
DEFAULT_TICK_MS2 = 500;
|
|
26837
|
+
FX_OVERLAY_KEYFRAMES = `
|
|
26838
|
+
${CONFETTI_BURST_KEYFRAMES}
|
|
26839
|
+
@keyframes fx-overlay-flash {
|
|
26840
|
+
0% { opacity: 0.75; }
|
|
26841
|
+
100% { opacity: 0; }
|
|
26842
|
+
}
|
|
26843
|
+
@keyframes fx-overlay-glow {
|
|
26844
|
+
0% { opacity: 0.9; }
|
|
26845
|
+
60% { opacity: 0.6; }
|
|
26846
|
+
100% { opacity: 0; }
|
|
26847
|
+
}
|
|
26848
|
+
@keyframes fx-overlay-sparkle {
|
|
26849
|
+
0% { opacity: 0; transform: scale(0); }
|
|
26850
|
+
30% { opacity: 1; transform: scale(1); }
|
|
26851
|
+
100% { opacity: 0; transform: scale(0.3); }
|
|
26852
|
+
}
|
|
26853
|
+
@keyframes fx-overlay-float {
|
|
26854
|
+
0% { opacity: 0; transform: translate(-50%, 8px); }
|
|
26855
|
+
15% { opacity: 1; }
|
|
26856
|
+
100% { opacity: 0; transform: translate(-50%, -40px); }
|
|
26857
|
+
}
|
|
26858
|
+
@keyframes fx-overlay-shake {
|
|
26859
|
+
0% { transform: translateX(0); }
|
|
26860
|
+
15% { transform: translateX(-6px); }
|
|
26861
|
+
30% { transform: translateX(5px); }
|
|
26862
|
+
45% { transform: translateX(-4px); }
|
|
26863
|
+
60% { transform: translateX(3px); }
|
|
26864
|
+
75% { transform: translateX(-2px); }
|
|
26865
|
+
100% { transform: translateX(0); }
|
|
26866
|
+
}
|
|
26867
|
+
`;
|
|
26868
|
+
lifeMsOf = (it, tickMs) => Math.max(it.maxTtl ?? it.ttl, it.ttl, 1) * tickMs;
|
|
26869
|
+
FxOverlay = ({ items, tickMs = DEFAULT_TICK_MS2, children, className }) => {
|
|
26870
|
+
const screenItems = (Array.isArray(items) ? items : []).filter(
|
|
26871
|
+
(it) => Boolean(it) && typeof it.id === "string" && it.space !== "world"
|
|
26872
|
+
);
|
|
26873
|
+
const shakeItem = [...screenItems].reverse().find((it) => it.effect === "shake");
|
|
26874
|
+
const overlay = /* @__PURE__ */ jsxs(
|
|
26875
|
+
Box,
|
|
26876
|
+
{
|
|
26877
|
+
position: "absolute",
|
|
26878
|
+
className: cn("inset-0 pointer-events-none overflow-hidden z-50", !children && className),
|
|
26879
|
+
"aria-hidden": "true",
|
|
26880
|
+
children: [
|
|
26881
|
+
screenItems.map((it) => /* @__PURE__ */ jsx(OverlayFxNode, { item: it, tickMs }, it.id)),
|
|
26882
|
+
/* @__PURE__ */ jsx("style", { children: FX_OVERLAY_KEYFRAMES })
|
|
26883
|
+
]
|
|
26884
|
+
}
|
|
26885
|
+
);
|
|
26886
|
+
if (children !== void 0 && children !== null) {
|
|
26887
|
+
return /* @__PURE__ */ jsxs(Box, { position: "relative", className, children: [
|
|
26888
|
+
/* @__PURE__ */ jsx(
|
|
26889
|
+
Box,
|
|
26890
|
+
{
|
|
26891
|
+
style: shakeItem ? { animation: `fx-overlay-shake ${Math.min(lifeMsOf(shakeItem, tickMs), 600)}ms ease-in-out` } : void 0,
|
|
26892
|
+
children
|
|
26893
|
+
},
|
|
26894
|
+
shakeItem?.id ?? "steady"
|
|
26895
|
+
),
|
|
26896
|
+
overlay
|
|
26897
|
+
] });
|
|
26898
|
+
}
|
|
26899
|
+
return overlay;
|
|
26900
|
+
};
|
|
26901
|
+
FxOverlay.displayName = "FxOverlay";
|
|
26902
|
+
}
|
|
26903
|
+
});
|
|
26481
26904
|
function computePopoverStyle(position, triggerRect, popoverWidth) {
|
|
26482
26905
|
if (position === "left" || position === "right") {
|
|
26483
26906
|
return {
|
|
@@ -31167,7 +31590,7 @@ var init_MathCanvas = __esm({
|
|
|
31167
31590
|
x: mapX((first.x + last.x) / 2),
|
|
31168
31591
|
y: (mapY(region.samples[mid].y) + mapY(baseline)) / 2,
|
|
31169
31592
|
text: region.label,
|
|
31170
|
-
color
|
|
31593
|
+
color,
|
|
31171
31594
|
fontSize: 11
|
|
31172
31595
|
});
|
|
31173
31596
|
}
|
|
@@ -31200,14 +31623,14 @@ var init_MathCanvas = __esm({
|
|
|
31200
31623
|
const px = mapX(guide.at);
|
|
31201
31624
|
out.push({ type: "line", x1: px, y1: margin, x2: px, y2: height - margin, color, dash });
|
|
31202
31625
|
if (guide.label) {
|
|
31203
|
-
out.push({ type: "text", x: px + 4, y: margin + 10, text: guide.label, color
|
|
31626
|
+
out.push({ type: "text", x: px + 4, y: margin + 10, text: guide.label, color, fontSize: 11 });
|
|
31204
31627
|
}
|
|
31205
31628
|
} else {
|
|
31206
31629
|
if (guide.at < yMin || guide.at > yMax) continue;
|
|
31207
31630
|
const py = mapY(guide.at);
|
|
31208
31631
|
out.push({ type: "line", x1: margin, y1: py, x2: width - margin, y2: py, color, dash });
|
|
31209
31632
|
if (guide.label) {
|
|
31210
|
-
out.push({ type: "text", x: width - margin - 4, y: py - 8, text: guide.label, color
|
|
31633
|
+
out.push({ type: "text", x: width - margin - 4, y: py - 8, text: guide.label, color, fontSize: 11, align: "right" });
|
|
31211
31634
|
}
|
|
31212
31635
|
}
|
|
31213
31636
|
}
|
|
@@ -31273,7 +31696,7 @@ var init_MathCanvas = __esm({
|
|
|
31273
31696
|
x: (x1 + x2) / 2,
|
|
31274
31697
|
y: xAxisY - peak - 8,
|
|
31275
31698
|
text: hop.label,
|
|
31276
|
-
color
|
|
31699
|
+
color,
|
|
31277
31700
|
fontSize: 10,
|
|
31278
31701
|
align: "center"
|
|
31279
31702
|
});
|
|
@@ -31300,7 +31723,7 @@ var init_MathCanvas = __esm({
|
|
|
31300
31723
|
x: mapX(angle.x + 1.35 * radius * Math.cos(rad)),
|
|
31301
31724
|
y: mapY(angle.y + 1.35 * radius * Math.sin(rad)),
|
|
31302
31725
|
text: angle.label,
|
|
31303
|
-
color
|
|
31726
|
+
color,
|
|
31304
31727
|
fontSize: 11,
|
|
31305
31728
|
align: "center"
|
|
31306
31729
|
});
|
|
@@ -31318,7 +31741,7 @@ var init_MathCanvas = __esm({
|
|
|
31318
31741
|
fill: isOpen ? "#ffffff" : p.color ?? "#dc2626"
|
|
31319
31742
|
});
|
|
31320
31743
|
if (p.label) {
|
|
31321
|
-
out.push({ type: "text", x: mapX(p.x) + 8, y: mapY(p.y) - 8, text: p.label, color: "#111827", fontSize: 12 });
|
|
31744
|
+
out.push({ type: "text", x: mapX(p.x) + 8, y: mapY(p.y) - 8, text: p.label, color: p.color ?? "#111827", fontSize: 12 });
|
|
31322
31745
|
}
|
|
31323
31746
|
}
|
|
31324
31747
|
for (const v of vectors) {
|
|
@@ -31329,7 +31752,7 @@ var init_MathCanvas = __esm({
|
|
|
31329
31752
|
const y2 = mapY(v.y + v.vy);
|
|
31330
31753
|
out.push({ type: "arrow", x1, y1, x2, y2, color: v.color ?? "#7c3aed", lineWidth: 2 });
|
|
31331
31754
|
if (v.label) {
|
|
31332
|
-
out.push({ type: "text", x: x2 + 6, y: y2 - 6, text: v.label, color: "#
|
|
31755
|
+
out.push({ type: "text", x: x2 + 6, y: y2 - 6, text: v.label, color: v.color ?? "#7c3aed", fontSize: 12 });
|
|
31333
31756
|
}
|
|
31334
31757
|
}
|
|
31335
31758
|
out.push(...shapes);
|
|
@@ -42305,6 +42728,7 @@ var init_molecules2 = __esm({
|
|
|
42305
42728
|
init_Menu();
|
|
42306
42729
|
init_Modal();
|
|
42307
42730
|
init_PageTransition();
|
|
42731
|
+
init_FxOverlay();
|
|
42308
42732
|
init_Pagination();
|
|
42309
42733
|
init_Popover();
|
|
42310
42734
|
init_Coachmark();
|
|
@@ -43104,6 +43528,7 @@ var init_DetailPanel = __esm({
|
|
|
43104
43528
|
init_Box();
|
|
43105
43529
|
init_Stack();
|
|
43106
43530
|
init_SimpleGrid();
|
|
43531
|
+
init_Menu();
|
|
43107
43532
|
init_LoadingState();
|
|
43108
43533
|
init_ErrorState();
|
|
43109
43534
|
init_EmptyState();
|
|
@@ -43121,6 +43546,7 @@ var init_DetailPanel = __esm({
|
|
|
43121
43546
|
avatar,
|
|
43122
43547
|
sections: propSections,
|
|
43123
43548
|
actions,
|
|
43549
|
+
maxInlineActions,
|
|
43124
43550
|
backAction,
|
|
43125
43551
|
footer,
|
|
43126
43552
|
slideOver = false,
|
|
@@ -43355,7 +43781,7 @@ var init_DetailPanel = __esm({
|
|
|
43355
43781
|
}
|
|
43356
43782
|
) }),
|
|
43357
43783
|
/* @__PURE__ */ jsxs(HStack, { justify: "end", align: "center", gap: "xs", children: [
|
|
43358
|
-
otherActions.map((action, idx) => /* @__PURE__ */ jsx(
|
|
43784
|
+
(maxInlineActions != null ? otherActions.slice(0, maxInlineActions) : otherActions).map((action, idx) => /* @__PURE__ */ jsx(
|
|
43359
43785
|
Button,
|
|
43360
43786
|
{
|
|
43361
43787
|
variant: action.variant || "secondary",
|
|
@@ -43370,6 +43796,22 @@ var init_DetailPanel = __esm({
|
|
|
43370
43796
|
},
|
|
43371
43797
|
idx
|
|
43372
43798
|
)),
|
|
43799
|
+
maxInlineActions != null && otherActions.length > maxInlineActions && /* @__PURE__ */ jsx(
|
|
43800
|
+
Menu,
|
|
43801
|
+
{
|
|
43802
|
+
position: "bottom-end",
|
|
43803
|
+
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" }) }),
|
|
43804
|
+
items: otherActions.slice(maxInlineActions).map((action) => ({
|
|
43805
|
+
// ONE firing path: onClick → handleActionClick (emits with
|
|
43806
|
+
// the {id, row} payload). Passing `event` too would make
|
|
43807
|
+
// Menu emit a second, payload-less copy of the same event.
|
|
43808
|
+
label: action.label,
|
|
43809
|
+
icon: action.icon,
|
|
43810
|
+
variant: action.variant === "danger" ? "danger" : "default",
|
|
43811
|
+
onClick: () => handleActionClick(action, normalizedData)
|
|
43812
|
+
}))
|
|
43813
|
+
}
|
|
43814
|
+
),
|
|
43373
43815
|
/* @__PURE__ */ jsx(
|
|
43374
43816
|
Button,
|
|
43375
43817
|
{
|
|
@@ -49226,6 +49668,7 @@ var init_component_registry_generated = __esm({
|
|
|
49226
49668
|
init_DocSidebar();
|
|
49227
49669
|
init_DocTOC();
|
|
49228
49670
|
init_DocumentViewer();
|
|
49671
|
+
init_DrawFxLayer();
|
|
49229
49672
|
init_DrawGroup();
|
|
49230
49673
|
init_DrawMesh();
|
|
49231
49674
|
init_DrawShape();
|
|
@@ -49256,6 +49699,7 @@ var init_component_registry_generated = __esm({
|
|
|
49256
49699
|
init_FormField();
|
|
49257
49700
|
init_FormSection();
|
|
49258
49701
|
init_FormSectionHeader();
|
|
49702
|
+
init_FxOverlay();
|
|
49259
49703
|
init_GameAudioToggle();
|
|
49260
49704
|
init_GameHud();
|
|
49261
49705
|
init_GameIcon();
|
|
@@ -49496,6 +49940,7 @@ var init_component_registry_generated = __esm({
|
|
|
49496
49940
|
"DocSidebar": DocSidebar,
|
|
49497
49941
|
"DocTOC": DocTOC,
|
|
49498
49942
|
"DocumentViewer": DocumentViewer,
|
|
49943
|
+
"DrawFxLayer": DrawFxLayer,
|
|
49499
49944
|
"DrawGroup": DrawGroup,
|
|
49500
49945
|
"DrawMesh": DrawMesh,
|
|
49501
49946
|
"DrawShape": DrawShape,
|
|
@@ -49526,6 +49971,7 @@ var init_component_registry_generated = __esm({
|
|
|
49526
49971
|
"FormField": FormField,
|
|
49527
49972
|
"FormLayout": FormLayout,
|
|
49528
49973
|
"FormSectionHeader": FormSectionHeader,
|
|
49974
|
+
"FxOverlay": FxOverlay,
|
|
49529
49975
|
"GameAudioToggle": GameAudioToggle,
|
|
49530
49976
|
"GameHud": GameHud,
|
|
49531
49977
|
"GameIcon": GameIcon,
|
|
@@ -53201,4 +53647,4 @@ function useGitHubBranches(owner, repo, enabled = true) {
|
|
|
53201
53647
|
});
|
|
53202
53648
|
}
|
|
53203
53649
|
|
|
53204
|
-
export { ALL_PRESETS, ALMADAR_DND_MIME, AR_BOOK_FIELDS, AboutPageTemplate, Accordion, Card2 as ActionCard, ActionPalette, ActionTile, ActivationBlock, Alert, AlgoGraphCanvas, AlgorithmCanvas, AnimatedCounter, AnimatedGraphic, AnimatedReveal, ArticleSection, Aside, AssetPicker, AtlasImage, AtlasPanel, AuthLayout, Avatar, Badge, BehaviorView, BiologyCanvas, BloomQuizBlock, BookChapterView, BookCoverPage, BookNavBar, BookTableOfContents, BookViewer, Box, BranchingLogicBuilder, Breadcrumb, Button, ButtonGroup, CTABanner, CalendarGrid, Canvas, Canvas2D, Card, CardBody, CardContent, CardFooter, CardGrid, CardHeader, CardTitle, Carousel, CaseStudyCard, CaseStudyOrganism, Center, Chart, ChartLegend, ChatBar, Checkbox, ChemistryCanvas, ChoiceButton, Coachmark, CodeBlock, CodeRunnerPanel, CollapsibleSection, CommunityLinks, ConditionalWrapper, ConfettiEffect, ConfirmDialog, ConnectionBlock, Container, ContentRenderer, ContentSection, ControlButton, ControlGrid, CounterTemplate, DEFAULT_LIKERT_OPTIONS, DEFAULT_MATRIX_COLUMNS, DEFAULT_SLOTS, DIAMOND_TOP_Y, DashboardGrid, DashboardLayout, DataGrid, DataList, DataTable, DateRangePicker, DateRangeSelector, DayCell, DetailPanel, Dialog, DialogueBubble, Divider, DocBreadcrumb, DocPagination, DocSearch, DocSidebar, DocTOC, DocumentViewer, StateMachineView as DomStateMachineVisualizer, Drawer, DrawerSlot, ELEMENT_SELECTED_EVENT, EdgeDecoration, EditorCheckbox, EditorSelect, EditorSlider, EditorTextInput, EditorToolbar, EmojiPicker, EmptyState, EntityDisplayEvents, ErrorBoundary, ErrorState, FEATURE_COLORS, FEATURE_TYPES, FLOOR_HEIGHT, FeatureCard, FeatureDetailPageTemplate, FeatureGrid, FeatureGridOrganism, FileTree, FilterGroup, FilterPill, Flex, FlipCard, FlipContainer, FloatingActionButton, Form, FormActions, FormField, FormLayout, FormSection, FormSectionHeader, GameAudioToggle, GameHud, GameIcon, GameMenu, GameShell, GenericAppTemplate, GeometricPattern, GradientDivider, GraphCanvas, GraphView, Grid, GridPicker, HStack, Header, HealthBar, HeroOrganism, HeroSection, I18nProvider, IDENTITY_BOOK_FIELDS, Icon, IconPicker, ImportPreviewTree, ImportProgress, ImportSourcePicker, InfiniteScrollSentinel, Input, InputGroup, InstallBox, JazariStateMachine, JsonTreeEditor, Label, LandingPageTemplate, LawReferenceTooltip, LearningCanvas, LearningScene3D, Lightbox, LikertScale, LineChart2 as LineChart, List3 as List, LoadingState, MapView, MarkdownContent, MarketingFooter, MarketingStatCard, MasterDetail, MasterDetailLayout, MathCanvas, MatrixQuestion, MediaGallery, Menu, Meter, Modal, ModalSlot, ModuleCard, Navigation, NodeSlotEditor, NotifyListener, NumberStepper, OnboardingSpotlight, OptionConstraintGroup, StateMachineView as OrbitalStateMachineView, OrbitalVisualization, Overlay, PageHeader, PageTransition, Pagination, PatternTile, PhysicsCanvas, Popover, PositionedCanvas, Presence, PricingCard, PricingGrid, PricingOrganism, PricingPageTemplate, ProgressBar, ProgressDots, PropertyInspector, PullQuote, PullToRefresh, QrScanner, QuizBlock, Radio, RangeSlider, ReflectionBlock, RelationSelect, RepeatableFormSection, ReplyTree, RichBlockEditor, RuntimeDebugger, SHEET_COLUMNS, SPRITE_SHEET_LAYOUT, ScaledDiagram, ScoreDisplay, SearchInput, Section, SectionHeader, SegmentRenderer, Select, SequenceBar, ServiceCatalog, SharedEntityStoreContext, ShowcaseCard, ShowcaseOrganism, SidePanel, Sidebar, SignaturePad, SimpleGrid, Skeleton, SlotContentRenderer, SocialProof, SortableList, Spacer, Sparkline, Spinner, Split, SplitPane, SplitSection, Stack, StarRating, StatBadge, StatCard, StatDisplay, StateGraph, StateJsonView, StateMachineView, StateNode2 as StateNode, StatsGrid, StatsOrganism, StatusBar, StatusDot, StepFlow, StepFlowOrganism, SubagentTracePanel, SvgBranch, SvgConnection, SvgFlow, SvgGrid, SvgLobe, SvgMesh, SvgMorph, SvgNode, SvgPulse, SvgRing, SvgShield, SvgStack, SwipeableRow, Switch, TERRAIN_COLORS, TILE_HEIGHT, TILE_WIDTH, TabbedContainer, TableView, Tabs, TagCloud, TagInput, TeamCard, TeamOrganism, TerrainPalette, TextHighlight, Textarea, ThemeToggle, TimeSlotCell, Timeline, TimerDisplay, Toast, ToastSlot, Tooltip, TraitFrame, TraitSlot, TraitStateViewer, TransitionArrow, TrendIndicator, TypewriterText, Typography, UISlotComponent, UISlotRenderer, UploadDropZone, VStack, VersionDiff, ViolationAlert, VoteStack, WizardContainer, WizardNavigation, WizardProgress, arrowBetween, billboardLabel, boardEntity, bool, calculateAttackTargets, calculateValidMoves, cn, createInitialGameState, createSharedEntityStore, createTranslate, createUnitAnimationState, cylinderBetween, get3DClickPayload, getCurrentFrame, getTileDimensions, inferDirection, isoToScreen, makeAsset, makeAssetMap, mapBookData, meshSphere, num, objAvailableActions, objAvailableEvents, objCurrentState, objIcon, objId, objMaxRules, objName, objRules, objStates, parseEditFocus, parseLessonSegments, parseMarkdownWithCodeBlocks, parseQueryBinding, pendulum, projectileMotion, registerCodeLanguageLoader, renderPatternValue, resolveFieldMap, resolveFrame, resolveSheetDirection, rows, runTickFrame, screenToIso, springOscillator, str, tickAnimationState, toCodeLanguage, transitionAnimation, unitHealth, unitPosition, unitTeam, useAgentChat, useAnchorRect, useAtlasSliceDataUrl, useAuthContext, useCamera, useCanvasGestures, useCompile, useConnectGitHub, useDeepAgentGeneration, useDisconnectGitHub, useDragReorder, useDraggable, useDropZone, useEmitEvent, useEventBus, useEventListener, useExtensions, useFileEditor, useFileSystem, useGameAudio, useGitHubBranches, useGitHubRepo, useGitHubRepos, useGitHubStatus, useImageCache, useInfiniteScroll, useLongPress, useMediaQuery, useOrbitalHistory, usePresence, usePreview, usePullToRefresh, useQuerySingleton, useRenderInterpolation, useSharedEntitySnapshot, useSharedEntityStore, useSharedEntityStoreContext, useSwipeGesture, useTapReveal, useTraitListens, useTranslate114 as useTranslate, useUIEvents, useUISlotManager, useUnitSpriteAtlas, useValidation, vec2 };
|
|
53650
|
+
export { ALL_PRESETS, ALMADAR_DND_MIME, AR_BOOK_FIELDS, AboutPageTemplate, Accordion, Card2 as ActionCard, ActionPalette, ActionTile, ActivationBlock, Alert, AlgoGraphCanvas, AlgorithmCanvas, AnimatedCounter, AnimatedGraphic, AnimatedReveal, ArticleSection, Aside, AssetPicker, AtlasImage, AtlasPanel, AuthLayout, Avatar, Badge, BehaviorView, BiologyCanvas, BloomQuizBlock, BookChapterView, BookCoverPage, BookNavBar, BookTableOfContents, BookViewer, Box, BranchingLogicBuilder, Breadcrumb, Button, ButtonGroup, CTABanner, CalendarGrid, Canvas, Canvas2D, Card, CardBody, CardContent, CardFooter, CardGrid, CardHeader, CardTitle, Carousel, CaseStudyCard, CaseStudyOrganism, Center, Chart, ChartLegend, ChatBar, Checkbox, ChemistryCanvas, ChoiceButton, Coachmark, CodeBlock, CodeRunnerPanel, CollapsibleSection, CommunityLinks, ConditionalWrapper, ConfettiEffect, ConfirmDialog, ConnectionBlock, Container, ContentRenderer, ContentSection, ControlButton, ControlGrid, CounterTemplate, DEFAULT_LIKERT_OPTIONS, DEFAULT_MATRIX_COLUMNS, DEFAULT_SLOTS, DIAMOND_TOP_Y, DashboardGrid, DashboardLayout, DataGrid, DataList, DataTable, DateRangePicker, DateRangeSelector, DayCell, DetailPanel, Dialog, DialogueBubble, Divider, DocBreadcrumb, DocPagination, DocSearch, DocSidebar, DocTOC, DocumentViewer, StateMachineView as DomStateMachineVisualizer, Drawer, DrawerSlot, ELEMENT_SELECTED_EVENT, EdgeDecoration, EditorCheckbox, EditorSelect, EditorSlider, EditorTextInput, EditorToolbar, EmojiPicker, EmptyState, EntityDisplayEvents, ErrorBoundary, ErrorState, FEATURE_COLORS, FEATURE_TYPES, FLOOR_HEIGHT, FeatureCard, FeatureDetailPageTemplate, FeatureGrid, FeatureGridOrganism, FileTree, FilterGroup, FilterPill, Flex, FlipCard, FlipContainer, FloatingActionButton, Form, FormActions, FormField, FormLayout, FormSection, FormSectionHeader, FxOverlay, GameAudioToggle, GameHud, GameIcon, GameMenu, GameShell, GenericAppTemplate, GeometricPattern, GradientDivider, GraphCanvas, GraphView, Grid, GridPicker, HStack, Header, HealthBar, HeroOrganism, HeroSection, I18nProvider, IDENTITY_BOOK_FIELDS, Icon, IconPicker, ImportPreviewTree, ImportProgress, ImportSourcePicker, InfiniteScrollSentinel, Input, InputGroup, InstallBox, JazariStateMachine, JsonTreeEditor, Label, LandingPageTemplate, LawReferenceTooltip, LearningCanvas, LearningScene3D, Lightbox, LikertScale, LineChart2 as LineChart, List3 as List, LoadingState, MapView, MarkdownContent, MarketingFooter, MarketingStatCard, MasterDetail, MasterDetailLayout, MathCanvas, MatrixQuestion, MediaGallery, Menu, Meter, Modal, ModalSlot, ModuleCard, Navigation, NodeSlotEditor, NotifyListener, NumberStepper, OnboardingSpotlight, OptionConstraintGroup, StateMachineView as OrbitalStateMachineView, OrbitalVisualization, Overlay, PageHeader, PageTransition, Pagination, PatternTile, PhysicsCanvas, Popover, PositionedCanvas, Presence, PricingCard, PricingGrid, PricingOrganism, PricingPageTemplate, ProgressBar, ProgressDots, PropertyInspector, PullQuote, PullToRefresh, QrScanner, QuizBlock, Radio, RangeSlider, ReflectionBlock, RelationSelect, RepeatableFormSection, ReplyTree, RichBlockEditor, RuntimeDebugger, SHEET_COLUMNS, SPRITE_SHEET_LAYOUT, ScaledDiagram, ScoreDisplay, SearchInput, Section, SectionHeader, SegmentRenderer, Select, SequenceBar, ServiceCatalog, SharedEntityStoreContext, ShowcaseCard, ShowcaseOrganism, SidePanel, Sidebar, SignaturePad, SimpleGrid, Skeleton, SlotContentRenderer, SocialProof, SortableList, Spacer, Sparkline, Spinner, Split, SplitPane, SplitSection, Stack, StarRating, StatBadge, StatCard, StatDisplay, StateGraph, StateJsonView, StateMachineView, StateNode2 as StateNode, StatsGrid, StatsOrganism, StatusBar, StatusDot, StepFlow, StepFlowOrganism, SubagentTracePanel, SvgBranch, SvgConnection, SvgFlow, SvgGrid, SvgLobe, SvgMesh, SvgMorph, SvgNode, SvgPulse, SvgRing, SvgShield, SvgStack, SwipeableRow, Switch, TERRAIN_COLORS, TILE_HEIGHT, TILE_WIDTH, TabbedContainer, TableView, Tabs, TagCloud, TagInput, TeamCard, TeamOrganism, TerrainPalette, TextHighlight, Textarea, ThemeToggle, TimeSlotCell, Timeline, TimerDisplay, Toast, ToastSlot, Tooltip, TraitFrame, TraitSlot, TraitStateViewer, TransitionArrow, TrendIndicator, TypewriterText, Typography, UISlotComponent, UISlotRenderer, UploadDropZone, VStack, VersionDiff, ViolationAlert, VoteStack, WizardContainer, WizardNavigation, WizardProgress, arrowBetween, billboardLabel, boardEntity, bool, calculateAttackTargets, calculateValidMoves, cn, createInitialGameState, createSharedEntityStore, createTranslate, createUnitAnimationState, cylinderBetween, get3DClickPayload, getCurrentFrame, getTileDimensions, inferDirection, isoToScreen, makeAsset, makeAssetMap, mapBookData, meshSphere, num, objAvailableActions, objAvailableEvents, objCurrentState, objIcon, objId, objMaxRules, objName, objRules, objStates, parseEditFocus, parseLessonSegments, parseMarkdownWithCodeBlocks, parseQueryBinding, pendulum, projectileMotion, registerCodeLanguageLoader, renderPatternValue, resolveFieldMap, resolveFrame, resolveSheetDirection, rows, runTickFrame, screenToIso, springOscillator, str, tickAnimationState, toCodeLanguage, transitionAnimation, unitHealth, unitPosition, unitTeam, useAgentChat, useAnchorRect, useAtlasSliceDataUrl, useAuthContext, useCamera, useCanvasGestures, useCompile, useConnectGitHub, useDeepAgentGeneration, useDisconnectGitHub, useDragReorder, useDraggable, useDropZone, useEmitEvent, useEventBus, useEventListener, useExtensions, useFileEditor, useFileSystem, useGameAudio, useGitHubBranches, useGitHubRepo, useGitHubRepos, useGitHubStatus, useImageCache, useInfiniteScroll, useLongPress, useMediaQuery, useOrbitalHistory, usePresence, usePreview, usePullToRefresh, useQuerySingleton, useRenderInterpolation, useSharedEntitySnapshot, useSharedEntityStore, useSharedEntityStoreContext, useSwipeGesture, useTapReveal, useTraitListens, useTranslate114 as useTranslate, useUIEvents, useUISlotManager, useUnitSpriteAtlas, useValidation, vec2 };
|