@almadar/ui 2.1.10 → 2.1.11
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.
|
@@ -3587,6 +3587,7 @@ function Card2({
|
|
|
3587
3587
|
action
|
|
3588
3588
|
}) {
|
|
3589
3589
|
const eventBus = useEventBus();
|
|
3590
|
+
const { t } = useTranslate();
|
|
3590
3591
|
const isClickable = !!onClick || !!action;
|
|
3591
3592
|
const handleClick = () => {
|
|
3592
3593
|
if (action) eventBus.emit(`UI:${action}`, {});
|
|
@@ -3611,7 +3612,7 @@ function Card2({
|
|
|
3611
3612
|
"img",
|
|
3612
3613
|
{
|
|
3613
3614
|
src: image,
|
|
3614
|
-
alt: title || "
|
|
3615
|
+
alt: title || t("card.imageAlt"),
|
|
3615
3616
|
className: "w-full h-full object-cover"
|
|
3616
3617
|
}
|
|
3617
3618
|
) }),
|
|
@@ -6654,6 +6655,7 @@ function DataTable({
|
|
|
6654
6655
|
/* @__PURE__ */ jsx(
|
|
6655
6656
|
"th",
|
|
6656
6657
|
{
|
|
6658
|
+
"data-column": String(col.key),
|
|
6657
6659
|
className: cn(
|
|
6658
6660
|
"px-4 py-3 text-left text-xs font-bold text-[var(--color-foreground)] uppercase tracking-wider whitespace-nowrap",
|
|
6659
6661
|
col.sortable && "cursor-pointer select-none hover:bg-[var(--color-table-row-hover)]"
|
|
@@ -6727,6 +6729,7 @@ function DataTable({
|
|
|
6727
6729
|
/* @__PURE__ */ jsxs(
|
|
6728
6730
|
"tr",
|
|
6729
6731
|
{
|
|
6732
|
+
"data-entity-row": true,
|
|
6730
6733
|
className: cn(
|
|
6731
6734
|
"border-b border-[var(--color-table-border)] last:border-0 hover:bg-[var(--color-table-row-hover)] transition-colors",
|
|
6732
6735
|
selectedIds.includes(row.id) && "bg-[var(--color-primary)]/10 font-medium",
|
|
@@ -6752,6 +6755,7 @@ function DataTable({
|
|
|
6752
6755
|
/* @__PURE__ */ jsx(
|
|
6753
6756
|
"td",
|
|
6754
6757
|
{
|
|
6758
|
+
"data-column": String(col.key),
|
|
6755
6759
|
className: "px-4 py-3 text-sm text-[var(--color-foreground)] whitespace-nowrap sm:whitespace-normal",
|
|
6756
6760
|
children: col.render ? col.render(cellValue, row, rowIndex) : String(cellValue ?? "")
|
|
6757
6761
|
},
|
|
@@ -7443,8 +7447,9 @@ var DetailPanel = ({
|
|
|
7443
7447
|
/* @__PURE__ */ jsx(Typography, { variant: "h4", weight: "semibold", children: section.title }),
|
|
7444
7448
|
/* @__PURE__ */ jsx(Divider, {}),
|
|
7445
7449
|
/* @__PURE__ */ jsx(SimpleGrid, { minChildWidth: "250px", maxCols: 2, gap: "lg", children: section.fields.map((field, fieldIdx) => {
|
|
7450
|
+
const fieldKey = typeof field === "string" ? field : void 0;
|
|
7446
7451
|
const resolved = typeof field === "string" ? { label: formatFieldLabel(field), value: normalizedData ? formatFieldValue(getNestedValue(normalizedData, field), field) : "\u2014", icon: getFieldIcon(field) } : field;
|
|
7447
|
-
return /* @__PURE__ */ jsxs(HStack, { gap: "sm", align: "start", children: [
|
|
7452
|
+
return /* @__PURE__ */ jsxs(HStack, { gap: "sm", align: "start", "data-field": fieldKey, children: [
|
|
7448
7453
|
resolved.icon && /* @__PURE__ */ jsx(
|
|
7449
7454
|
Icon,
|
|
7450
7455
|
{
|
|
@@ -7751,7 +7756,7 @@ var Form = ({
|
|
|
7751
7756
|
const inputType = determineInputType(field);
|
|
7752
7757
|
const label = field.label || fieldName.charAt(0).toUpperCase() + fieldName.slice(1).replace(/([A-Z])/g, " $1");
|
|
7753
7758
|
const currentValue = formData[fieldName] ?? field.defaultValue ?? "";
|
|
7754
|
-
return /* @__PURE__ */ jsxs(VStack, { gap: "xs", children: [
|
|
7759
|
+
return /* @__PURE__ */ jsxs(VStack, { gap: "xs", "data-field": fieldName, children: [
|
|
7755
7760
|
inputType !== "checkbox" && /* @__PURE__ */ jsxs(Typography, { as: "label", variant: "label", weight: "bold", children: [
|
|
7756
7761
|
label,
|
|
7757
7762
|
field.required && /* @__PURE__ */ jsx(Typography, { as: "span", color: "error", className: "ml-1", children: "*" })
|
|
@@ -8118,6 +8123,7 @@ var CardGrid = ({
|
|
|
8118
8123
|
return /* @__PURE__ */ jsxs(
|
|
8119
8124
|
Box,
|
|
8120
8125
|
{
|
|
8126
|
+
"data-entity-row": true,
|
|
8121
8127
|
className: cn(
|
|
8122
8128
|
"bg-[var(--color-card)] rounded-[var(--radius-lg)] border border-[var(--color-border)] p-4 shadow-[var(--shadow-sm)]",
|
|
8123
8129
|
"cursor-pointer hover:border-[var(--color-primary)] transition-colors"
|
|
@@ -114,6 +114,8 @@ type BadgeSize = "sm" | "md" | "lg";
|
|
|
114
114
|
interface BadgeProps extends React__default.HTMLAttributes<HTMLSpanElement> {
|
|
115
115
|
variant?: BadgeVariant;
|
|
116
116
|
size?: BadgeSize;
|
|
117
|
+
/** Numeric count or amount to display in badge */
|
|
118
|
+
amount?: number;
|
|
117
119
|
}
|
|
118
120
|
declare const Badge: React__default.ForwardRefExoticComponent<BadgeProps & React__default.RefAttributes<HTMLSpanElement>>;
|
|
119
121
|
|
|
@@ -1437,6 +1439,14 @@ interface CardProps {
|
|
|
1437
1439
|
className?: string;
|
|
1438
1440
|
/** Declarative event name — emits UI:{action} via eventBus on card click */
|
|
1439
1441
|
action?: string;
|
|
1442
|
+
/** Whether the card is selected (highlighted state) */
|
|
1443
|
+
isSelected?: boolean;
|
|
1444
|
+
/** Card name (alias for title) */
|
|
1445
|
+
name?: string;
|
|
1446
|
+
/** Level indicator */
|
|
1447
|
+
level?: number;
|
|
1448
|
+
/** Maximum level */
|
|
1449
|
+
maxLevel?: number;
|
|
1440
1450
|
}
|
|
1441
1451
|
/**
|
|
1442
1452
|
* Card component for displaying content in a contained box
|
|
@@ -2683,6 +2693,8 @@ interface StatCardProps extends EntityDisplayProps {
|
|
|
2683
2693
|
};
|
|
2684
2694
|
/** Metrics to display (schema format) - accepts readonly for compatibility with generated const arrays */
|
|
2685
2695
|
metrics?: readonly MetricDefinition[];
|
|
2696
|
+
/** Compact display mode */
|
|
2697
|
+
compact?: boolean;
|
|
2686
2698
|
}
|
|
2687
2699
|
declare const StatCard: React__default.FC<StatCardProps>;
|
|
2688
2700
|
|
|
@@ -3587,6 +3599,10 @@ interface CardGridProps extends EntityDisplayProps {
|
|
|
3587
3599
|
itemActions?: readonly CardItemAction[];
|
|
3588
3600
|
/** Show total count in pagination */
|
|
3589
3601
|
showTotal?: boolean;
|
|
3602
|
+
/** Show avatar/image field on cards */
|
|
3603
|
+
showAvatar?: boolean;
|
|
3604
|
+
/** Visual variant for the card grid */
|
|
3605
|
+
variant?: string;
|
|
3590
3606
|
}
|
|
3591
3607
|
/**
|
|
3592
3608
|
* CardGrid - Responsive card collection layout
|
|
@@ -4387,15 +4403,13 @@ interface SpriteSheetUrls {
|
|
|
4387
4403
|
* @packageDocumentation
|
|
4388
4404
|
*/
|
|
4389
4405
|
|
|
4390
|
-
|
|
4391
|
-
|
|
4392
|
-
|
|
4393
|
-
|
|
4394
|
-
|
|
4395
|
-
|
|
4396
|
-
|
|
4397
|
-
/** Entity name for schema-driven auto-fetch */
|
|
4398
|
-
entity?: string;
|
|
4406
|
+
/** Event Contract:
|
|
4407
|
+
* Emits: UI:TILE_CLICK
|
|
4408
|
+
* Emits: UI:UNIT_CLICK
|
|
4409
|
+
* Emits: UI:TILE_HOVER
|
|
4410
|
+
* Emits: UI:TILE_LEAVE
|
|
4411
|
+
*/
|
|
4412
|
+
interface IsometricCanvasProps extends EntityDisplayProps {
|
|
4399
4413
|
/** Array of tiles to render */
|
|
4400
4414
|
tiles?: IsometricTile[];
|
|
4401
4415
|
/** Array of units on the board */
|
|
@@ -4419,13 +4433,9 @@ interface IsometricCanvasProps {
|
|
|
4419
4433
|
x: number;
|
|
4420
4434
|
y: number;
|
|
4421
4435
|
} | null;
|
|
4422
|
-
/** Tile click handler */
|
|
4423
4436
|
onTileClick?: (x: number, y: number) => void;
|
|
4424
|
-
/** Unit click handler */
|
|
4425
4437
|
onUnitClick?: (unitId: string) => void;
|
|
4426
|
-
/** Tile hover handler */
|
|
4427
4438
|
onTileHover?: (x: number, y: number) => void;
|
|
4428
|
-
/** Tile leave handler */
|
|
4429
4439
|
onTileLeave?: () => void;
|
|
4430
4440
|
/** Declarative event: emits UI:{tileClickEvent} with { x, y } on tile click */
|
|
4431
4441
|
tileClickEvent?: string;
|
|
@@ -4447,6 +4457,10 @@ interface IsometricCanvasProps {
|
|
|
4447
4457
|
enableCamera?: boolean;
|
|
4448
4458
|
/** Extra scale multiplier for unit draw size. 1 = default. */
|
|
4449
4459
|
unitScale?: number;
|
|
4460
|
+
/** Board width in tiles (overrides tile-derived size) */
|
|
4461
|
+
boardWidth?: number;
|
|
4462
|
+
/** Board height in tiles (overrides tile-derived size) */
|
|
4463
|
+
boardHeight?: number;
|
|
4450
4464
|
/** Override for the diamond-top Y offset within the tile sprite (default: 374).
|
|
4451
4465
|
* This controls where the flat diamond face sits vertically inside the tile image. */
|
|
4452
4466
|
diamondTopY?: number;
|
|
@@ -4460,7 +4474,7 @@ interface IsometricCanvasProps {
|
|
|
4460
4474
|
resolveUnitFrame?: (unitId: string) => ResolvedFrame | null;
|
|
4461
4475
|
/** Additional sprite URLs to preload (e.g., effect sprites) */
|
|
4462
4476
|
effectSpriteUrls?: string[];
|
|
4463
|
-
/** Callback to draw canvas effects after units */
|
|
4477
|
+
/** Callback to draw canvas effects after units (canvas-specific: cannot be declarative) */
|
|
4464
4478
|
onDrawEffects?: (ctx: CanvasRenderingContext2D, animTime: number, getImage: (url: string) => HTMLImageElement | undefined) => void;
|
|
4465
4479
|
/** Whether there are active effects — keeps RAF loop alive */
|
|
4466
4480
|
hasActiveEffects?: boolean;
|
|
@@ -5350,6 +5364,11 @@ interface DialogueNode {
|
|
|
5350
5364
|
choices?: DialogueChoice[];
|
|
5351
5365
|
autoAdvance?: number;
|
|
5352
5366
|
}
|
|
5367
|
+
/** Event Contract:
|
|
5368
|
+
* Emits: UI:COMPLETE
|
|
5369
|
+
* Emits: UI:CHOICE
|
|
5370
|
+
* Emits: UI:ADVANCE
|
|
5371
|
+
*/
|
|
5353
5372
|
interface DialogueBoxProps {
|
|
5354
5373
|
/** Current dialogue node to display */
|
|
5355
5374
|
dialogue: DialogueNode;
|
|
@@ -5706,6 +5725,13 @@ interface WorldMapEntity {
|
|
|
5706
5725
|
};
|
|
5707
5726
|
backgroundImage?: string;
|
|
5708
5727
|
}
|
|
5728
|
+
/** Event Contract:
|
|
5729
|
+
* Emits: UI:HERO_SELECT
|
|
5730
|
+
* Emits: UI:HERO_MOVE
|
|
5731
|
+
* Emits: UI:BATTLE_ENCOUNTER
|
|
5732
|
+
* Emits: UI:FEATURE_ENTER
|
|
5733
|
+
* Emits: UI:TILE_CLICK
|
|
5734
|
+
*/
|
|
5709
5735
|
interface WorldMapBoardProps extends Omit<EntityDisplayProps, 'entity'> {
|
|
5710
5736
|
/** World map entity data */
|
|
5711
5737
|
entity: WorldMapEntity;
|
|
@@ -5929,6 +5955,10 @@ interface SlotItemData {
|
|
|
5929
5955
|
/** Optional state machine for tooltip display */
|
|
5930
5956
|
stateMachine?: TraitStateMachineDefinition;
|
|
5931
5957
|
}
|
|
5958
|
+
/** Event Contract:
|
|
5959
|
+
* Emits: UI:CLICK
|
|
5960
|
+
* Emits: UI:REMOVE
|
|
5961
|
+
*/
|
|
5932
5962
|
interface TraitSlotProps {
|
|
5933
5963
|
/** Slot index (1-based) */
|
|
5934
5964
|
slotNumber: number;
|
|
@@ -7866,6 +7896,8 @@ interface DashboardLayoutProps {
|
|
|
7866
7896
|
sidebarFooter?: React__default.ReactNode;
|
|
7867
7897
|
/** Callback when user clicks sign out (optional - uses auth context signOut if not provided) */
|
|
7868
7898
|
onSignOut?: () => void;
|
|
7899
|
+
/** Page content rendered inside the main area */
|
|
7900
|
+
children?: React__default.ReactNode;
|
|
7869
7901
|
}
|
|
7870
7902
|
declare const DashboardLayout: React__default.FC<DashboardLayoutProps>;
|
|
7871
7903
|
|
|
@@ -7997,11 +8029,10 @@ declare const GenericAppTemplate: React__default.FC<GenericAppTemplateProps>;
|
|
|
7997
8029
|
* Replaces DashboardLayout for game clients — no sidebar nav, just full-viewport
|
|
7998
8030
|
* rendering with an optional HUD overlay bar.
|
|
7999
8031
|
*
|
|
8000
|
-
*
|
|
8001
|
-
* <
|
|
8002
|
-
* <
|
|
8003
|
-
*
|
|
8004
|
-
* </Route>
|
|
8032
|
+
* Wrap game page content directly as children:
|
|
8033
|
+
* <GameShell appName="TraitWars">
|
|
8034
|
+
* <WorldMapPage />
|
|
8035
|
+
* </GameShell>
|
|
8005
8036
|
*
|
|
8006
8037
|
* @generated pattern — can be customised per-game via props
|
|
8007
8038
|
*/
|
|
@@ -8015,11 +8046,13 @@ interface GameShellProps {
|
|
|
8015
8046
|
className?: string;
|
|
8016
8047
|
/** Whether to show the minimal top bar (default: true) */
|
|
8017
8048
|
showTopBar?: boolean;
|
|
8049
|
+
/** Game content rendered inside the full-screen area */
|
|
8050
|
+
children?: React__default.ReactNode;
|
|
8018
8051
|
}
|
|
8019
8052
|
/**
|
|
8020
8053
|
* Full-viewport game shell layout.
|
|
8021
8054
|
*
|
|
8022
|
-
* Renders
|
|
8055
|
+
* Renders children inside a full-height flex container.
|
|
8023
8056
|
* An optional top bar shows the game title and can host HUD widgets.
|
|
8024
8057
|
*/
|
|
8025
8058
|
declare const GameShell: React__default.FC<GameShellProps>;
|
package/dist/components/index.js
CHANGED
|
@@ -2,8 +2,8 @@ import { useAuthContext } from '../chunk-6OACETQB.js';
|
|
|
2
2
|
export { ENTITY_EVENTS, useAgentChat, useAuthContext, useCompile, useConnectGitHub, useCreateEntity, useDeepAgentGeneration, useDeleteEntity, useDisconnectGitHub, useEntities, useEntitiesByType, useEntity as useEntityById, useEntityMutations, useExtensions, useFileEditor, useFileSystem, useGitHubBranches, useGitHubRepo, useGitHubRepos, useGitHubStatus, useInput, useOrbitalHistory, useOrbitalMutations, usePhysics, usePlayer, usePreview, useResolvedEntity, useSelectedEntity, useSendOrbitalEvent, useSingletonEntity, useUIEvents, useUpdateEntity, useValidation } from '../chunk-6OACETQB.js';
|
|
3
3
|
import { DEFAULT_CONFIG, renderStateMachineToDomData, parseContentSegments } from '../chunk-N6DJVKZ6.js';
|
|
4
4
|
import '../chunk-3HJHHULT.js';
|
|
5
|
-
import { VStack, HStack, Typography, Button, Icon, Box, Card, Avatar, Badge, SearchInput, Checkbox, Menu as Menu$1, Pagination, LoadingState, EmptyState, Modal, ErrorState, QuizBlock, CodeBlock, ScaledDiagram, MarkdownContent, Divider, ProgressBar, Stack, Select, Drawer, Toast, Tabs, Input, ThemeToggle, EntityDisplayEvents, HealthBar, ScoreDisplay, StateIndicator, Container } from '../chunk-
|
|
6
|
-
export { Accordion, Card2 as ActionCard, Alert, Avatar, Badge, Box, Breadcrumb, Button, ButtonGroup, Card, CardBody, CardContent, CardFooter, CardGrid, CardHeader, CardTitle, Center, Checkbox, CodeBlock, ConditionalWrapper, Container, ControlButton, DataTable, DetailPanel, Divider, Drawer, EmptyState, EntityDisplayEvents, ErrorBoundary, ErrorState, FilterGroup, Flex, FloatingActionButton, Form, FormField, FormSectionHeader, Grid, HStack, Heading, HealthBar, Icon, Input, InputGroup, Label, LawReferenceTooltip, LoadingState, MarkdownContent, MasterDetail, Menu, Modal, Overlay, PageHeader, Pagination, Popover, ProgressBar, QuizBlock, Radio, RelationSelect, RepeatableFormSection, ScaledDiagram, ScoreDisplay, SearchInput, Select, SidePanel, SimpleGrid, Skeleton, SlotContentRenderer, Spacer, Spinner, Sprite, Stack, StatCard, StateIndicator, Switch, Tabs, Text, TextHighlight, Textarea, ThemeSelector, ThemeToggle, Toast, Tooltip, Typography, UISlotComponent, UISlotRenderer, VStack, ViolationAlert, WizardNavigation, WizardProgress, drawSprite } from '../chunk-
|
|
5
|
+
import { VStack, HStack, Typography, Button, Icon, Box, Card, Avatar, Badge, SearchInput, Checkbox, Menu as Menu$1, Pagination, LoadingState, EmptyState, Modal, ErrorState, QuizBlock, CodeBlock, ScaledDiagram, MarkdownContent, Divider, ProgressBar, Stack, Select, Drawer, Toast, Tabs, Input, ThemeToggle, EntityDisplayEvents, HealthBar, ScoreDisplay, StateIndicator, Container } from '../chunk-CTNDYHXY.js';
|
|
6
|
+
export { Accordion, Card2 as ActionCard, Alert, Avatar, Badge, Box, Breadcrumb, Button, ButtonGroup, Card, CardBody, CardContent, CardFooter, CardGrid, CardHeader, CardTitle, Center, Checkbox, CodeBlock, ConditionalWrapper, Container, ControlButton, DataTable, DetailPanel, Divider, Drawer, EmptyState, EntityDisplayEvents, ErrorBoundary, ErrorState, FilterGroup, Flex, FloatingActionButton, Form, FormField, FormSectionHeader, Grid, HStack, Heading, HealthBar, Icon, Input, InputGroup, Label, LawReferenceTooltip, LoadingState, MarkdownContent, MasterDetail, Menu, Modal, Overlay, PageHeader, Pagination, Popover, ProgressBar, QuizBlock, Radio, RelationSelect, RepeatableFormSection, ScaledDiagram, ScoreDisplay, SearchInput, Select, SidePanel, SimpleGrid, Skeleton, SlotContentRenderer, Spacer, Spinner, Sprite, Stack, StatCard, StateIndicator, Switch, Tabs, Text, TextHighlight, Textarea, ThemeSelector, ThemeToggle, Toast, Tooltip, Typography, UISlotComponent, UISlotRenderer, VStack, ViolationAlert, WizardNavigation, WizardProgress, drawSprite } from '../chunk-CTNDYHXY.js';
|
|
7
7
|
import '../chunk-BTXQJGFB.js';
|
|
8
8
|
import { useTranslate } from '../chunk-JLEMVREZ.js';
|
|
9
9
|
export { EntityDataProvider, I18nProvider, createTranslate, entityDataKeys, parseQueryBinding, useEntity, useEntityDataAdapter, useEntityDetail, useEntityList, useEntityListSuspense, useEntitySuspense, useQuerySingleton, useTranslate } from '../chunk-JLEMVREZ.js';
|
|
@@ -3961,6 +3961,7 @@ function IsometricCanvas({
|
|
|
3961
3961
|
assetManifest
|
|
3962
3962
|
}) {
|
|
3963
3963
|
const eventBus = useEventBus();
|
|
3964
|
+
const { t } = useTranslate();
|
|
3964
3965
|
const canvasRef = useRef(null);
|
|
3965
3966
|
const containerRef = useRef(null);
|
|
3966
3967
|
const minimapRef = useRef(null);
|
|
@@ -3994,11 +3995,11 @@ function IsometricCanvas({
|
|
|
3994
3995
|
}, [tilesProp]);
|
|
3995
3996
|
const gridWidth = useMemo(() => {
|
|
3996
3997
|
if (sortedTiles.length === 0) return 0;
|
|
3997
|
-
return Math.max(...sortedTiles.map((
|
|
3998
|
+
return Math.max(...sortedTiles.map((t2) => t2.x)) + 1;
|
|
3998
3999
|
}, [sortedTiles]);
|
|
3999
4000
|
const gridHeight = useMemo(() => {
|
|
4000
4001
|
if (sortedTiles.length === 0) return 0;
|
|
4001
|
-
return Math.max(...sortedTiles.map((
|
|
4002
|
+
return Math.max(...sortedTiles.map((t2) => t2.y)) + 1;
|
|
4002
4003
|
}, [sortedTiles]);
|
|
4003
4004
|
const scaledTileWidth = TILE_WIDTH * scale;
|
|
4004
4005
|
const scaledTileHeight = TILE_HEIGHT * scale;
|
|
@@ -4095,7 +4096,7 @@ function IsometricCanvas({
|
|
|
4095
4096
|
miniCanvas.width = mW;
|
|
4096
4097
|
miniCanvas.height = mH;
|
|
4097
4098
|
mCtx.clearRect(0, 0, mW, mH);
|
|
4098
|
-
const allScreenPos = sortedTiles.map((
|
|
4099
|
+
const allScreenPos = sortedTiles.map((t2) => isoToScreen(t2.x, t2.y, scale, baseOffsetX));
|
|
4099
4100
|
const minX = Math.min(...allScreenPos.map((p2) => p2.x));
|
|
4100
4101
|
const maxX = Math.max(...allScreenPos.map((p2) => p2.x + scaledTileWidth));
|
|
4101
4102
|
const minY = Math.min(...allScreenPos.map((p2) => p2.y));
|
|
@@ -4508,7 +4509,7 @@ function IsometricCanvas({
|
|
|
4508
4509
|
const adjustedX = world.x - scaledTileWidth / 2;
|
|
4509
4510
|
const adjustedY = world.y - scaledDiamondTopY - scaledFloorHeight / 2;
|
|
4510
4511
|
const isoPos = screenToIso(adjustedX, adjustedY, scale, baseOffsetX);
|
|
4511
|
-
const tileExists = tilesProp.some((
|
|
4512
|
+
const tileExists = tilesProp.some((t2) => t2.x === isoPos.x && t2.y === isoPos.y);
|
|
4512
4513
|
if (tileExists) {
|
|
4513
4514
|
if (tileHoverEvent) eventBus.emit(`UI:${tileHoverEvent}`, { x: isoPos.x, y: isoPos.y });
|
|
4514
4515
|
onTileHover?.(isoPos.x, isoPos.y);
|
|
@@ -4536,7 +4537,7 @@ function IsometricCanvas({
|
|
|
4536
4537
|
if (unitClickEvent) eventBus.emit(`UI:${unitClickEvent}`, { unitId: clickedUnit.id });
|
|
4537
4538
|
onUnitClick?.(clickedUnit.id);
|
|
4538
4539
|
} else if (onTileClick || tileClickEvent) {
|
|
4539
|
-
const tileExists = tilesProp.some((
|
|
4540
|
+
const tileExists = tilesProp.some((t2) => t2.x === isoPos.x && t2.y === isoPos.y);
|
|
4540
4541
|
if (tileExists) {
|
|
4541
4542
|
if (tileClickEvent) eventBus.emit(`UI:${tileClickEvent}`, { x: isoPos.x, y: isoPos.y });
|
|
4542
4543
|
onTileClick?.(isoPos.x, isoPos.y);
|
|
@@ -4544,7 +4545,7 @@ function IsometricCanvas({
|
|
|
4544
4545
|
}
|
|
4545
4546
|
}, [dragDistance, screenToWorld, viewportSize, scaledTileWidth, scaledDiamondTopY, scaledFloorHeight, scale, baseOffsetX, units, tilesProp, onUnitClick, onTileClick, unitClickEvent, tileClickEvent, eventBus]);
|
|
4546
4547
|
if (error) {
|
|
4547
|
-
return /* @__PURE__ */ jsx(ErrorState, { title: "
|
|
4548
|
+
return /* @__PURE__ */ jsx(ErrorState, { title: t("canvas.errorTitle"), message: error.message, className });
|
|
4548
4549
|
}
|
|
4549
4550
|
if (isLoading) {
|
|
4550
4551
|
return /* @__PURE__ */ jsx(LoadingState, { className });
|
|
@@ -12949,7 +12950,8 @@ var DashboardLayout = ({
|
|
|
12949
12950
|
headerActions,
|
|
12950
12951
|
showSearch = true,
|
|
12951
12952
|
sidebarFooter,
|
|
12952
|
-
onSignOut: onSignOutProp
|
|
12953
|
+
onSignOut: onSignOutProp,
|
|
12954
|
+
children
|
|
12953
12955
|
}) => {
|
|
12954
12956
|
const [sidebarOpen, setSidebarOpen] = useState(false);
|
|
12955
12957
|
const [userMenuOpen, setUserMenuOpen] = useState(false);
|
|
@@ -13197,7 +13199,7 @@ var DashboardLayout = ({
|
|
|
13197
13199
|
)
|
|
13198
13200
|
}
|
|
13199
13201
|
),
|
|
13200
|
-
/* @__PURE__ */ jsx(Box, { as: "main", className: "p-4 sm:p-6 pb-20 sm:pb-6", children
|
|
13202
|
+
/* @__PURE__ */ jsx(Box, { as: "main", className: "p-4 sm:p-6 pb-20 sm:pb-6", children })
|
|
13201
13203
|
] })
|
|
13202
13204
|
] });
|
|
13203
13205
|
};
|
|
@@ -13717,7 +13719,8 @@ var GameShell = ({
|
|
|
13717
13719
|
appName = "Game",
|
|
13718
13720
|
hud,
|
|
13719
13721
|
className,
|
|
13720
|
-
showTopBar = true
|
|
13722
|
+
showTopBar = true,
|
|
13723
|
+
children
|
|
13721
13724
|
}) => {
|
|
13722
13725
|
return /* @__PURE__ */ jsxs(
|
|
13723
13726
|
Box,
|
|
@@ -13773,7 +13776,7 @@ var GameShell = ({
|
|
|
13773
13776
|
overflow: "hidden",
|
|
13774
13777
|
position: "relative"
|
|
13775
13778
|
},
|
|
13776
|
-
children
|
|
13779
|
+
children
|
|
13777
13780
|
}
|
|
13778
13781
|
)
|
|
13779
13782
|
]
|
package/dist/providers/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { SuspenseConfigProvider } from '../chunk-
|
|
1
|
+
import { SuspenseConfigProvider } from '../chunk-CTNDYHXY.js';
|
|
2
2
|
import { ThemeProvider } from '../chunk-BTXQJGFB.js';
|
|
3
3
|
import { SelectionProvider, EntityDataProvider } from '../chunk-JLEMVREZ.js';
|
|
4
4
|
export { SelectionContext, SelectionProvider, useSelection, useSelectionOptional } from '../chunk-JLEMVREZ.js';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@almadar/ui",
|
|
3
|
-
"version": "2.1.
|
|
3
|
+
"version": "2.1.11",
|
|
4
4
|
"description": "React UI components, hooks, and providers for Almadar",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/components/index.js",
|
|
@@ -123,7 +123,11 @@
|
|
|
123
123
|
"@storybook/addon-docs": "^10.2.6",
|
|
124
124
|
"@types/react-syntax-highlighter": "^15.5.0",
|
|
125
125
|
"katex": "^0.16.0",
|
|
126
|
-
"@types/node": "^22.0.0"
|
|
126
|
+
"@types/node": "^22.0.0",
|
|
127
|
+
"eslint": "10.0.0",
|
|
128
|
+
"@typescript-eslint/parser": "8.56.0",
|
|
129
|
+
"@almadar/eslint-plugin": ">=2.3.0",
|
|
130
|
+
"eslint-plugin-react-compiler": "19.1.0-rc.2"
|
|
127
131
|
},
|
|
128
132
|
"repository": {
|
|
129
133
|
"type": "git",
|