@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 || "Card image",
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
- interface IsometricCanvasProps {
4391
- /** Additional CSS classes */
4392
- className?: string;
4393
- /** Loading state indicator */
4394
- isLoading?: boolean;
4395
- /** Error state */
4396
- error?: Error | null;
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
- * Used as a React Router layout route element:
8001
- * <Route element={<GameShell appName="TraitWars" />}>
8002
- * <Route index element={<WorldMapPage />} />
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 child routes via `<Outlet />` inside a full-height flex container.
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>;
@@ -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-XDCOHA5C.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-XDCOHA5C.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-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((t) => t.x)) + 1;
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((t) => t.y)) + 1;
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((t) => isoToScreen(t.x, t.y, scale, baseOffsetX));
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((t) => t.x === isoPos.x && t.y === isoPos.y);
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((t) => t.x === isoPos.x && t.y === isoPos.y);
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: "Canvas Error", message: error.message, className });
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: /* @__PURE__ */ jsx(Outlet, {}) })
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: /* @__PURE__ */ jsx(Outlet, {})
13779
+ children
13777
13780
  }
13778
13781
  )
13779
13782
  ]
@@ -1,4 +1,4 @@
1
- import { SuspenseConfigProvider } from '../chunk-XDCOHA5C.js';
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.10",
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",