@almadar/ui 4.51.16 → 4.53.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
- import * as React75 from 'react';
3
- import React75__default, { useContext, useMemo, useRef, useEffect, useCallback, createContext, Suspense, useState, lazy, useSyncExternalStore, useLayoutEffect, useId } from 'react';
2
+ import * as React78 from 'react';
3
+ import React78__default, { useContext, useMemo, useRef, useEffect, useCallback, createContext, Suspense, useState, lazy, useSyncExternalStore, useLayoutEffect, useId } from 'react';
4
4
  import { clsx } from 'clsx';
5
5
  import { twMerge } from 'tailwind-merge';
6
6
  import { EventBusContext, useTraitScope, TraitScopeProvider } from '@almadar/ui/providers';
@@ -206,7 +206,7 @@ var init_SvgFlow = __esm({
206
206
  opacity = 1,
207
207
  className
208
208
  }) => {
209
- const markerId = React75__default.useMemo(() => {
209
+ const markerId = React78__default.useMemo(() => {
210
210
  flowIdCounter += 1;
211
211
  return `almadar-flow-arrow-${flowIdCounter}`;
212
212
  }, []);
@@ -749,7 +749,7 @@ var init_SvgRing = __esm({
749
749
  className,
750
750
  label
751
751
  }) => {
752
- const gradientId = React75__default.useMemo(() => {
752
+ const gradientId = React78__default.useMemo(() => {
753
753
  ringIdCounter += 1;
754
754
  return `almadar-ring-glow-${ringIdCounter}`;
755
755
  }, []);
@@ -1177,7 +1177,7 @@ function resolveIconProp(value, sizeClass) {
1177
1177
  const IconComp = value;
1178
1178
  return /* @__PURE__ */ jsx(IconComp, { className: sizeClass });
1179
1179
  }
1180
- if (React75__default.isValidElement(value)) {
1180
+ if (React78__default.isValidElement(value)) {
1181
1181
  return value;
1182
1182
  }
1183
1183
  if (typeof value === "object" && value !== null && "render" in value) {
@@ -1253,7 +1253,7 @@ var init_Button = __esm({
1253
1253
  md: "h-4 w-4",
1254
1254
  lg: "h-5 w-5"
1255
1255
  };
1256
- Button = React75__default.forwardRef(
1256
+ Button = React78__default.forwardRef(
1257
1257
  ({
1258
1258
  className,
1259
1259
  variant = "primary",
@@ -1318,7 +1318,7 @@ var Input;
1318
1318
  var init_Input = __esm({
1319
1319
  "components/atoms/Input.tsx"() {
1320
1320
  init_cn();
1321
- Input = React75__default.forwardRef(
1321
+ Input = React78__default.forwardRef(
1322
1322
  ({
1323
1323
  className,
1324
1324
  inputType,
@@ -1436,7 +1436,7 @@ var Label;
1436
1436
  var init_Label = __esm({
1437
1437
  "components/atoms/Label.tsx"() {
1438
1438
  init_cn();
1439
- Label = React75__default.forwardRef(
1439
+ Label = React78__default.forwardRef(
1440
1440
  ({ className, required, children, ...props }, ref) => {
1441
1441
  return /* @__PURE__ */ jsxs(
1442
1442
  "label",
@@ -1462,7 +1462,7 @@ var Textarea;
1462
1462
  var init_Textarea = __esm({
1463
1463
  "components/atoms/Textarea.tsx"() {
1464
1464
  init_cn();
1465
- Textarea = React75__default.forwardRef(
1465
+ Textarea = React78__default.forwardRef(
1466
1466
  ({ className, error, ...props }, ref) => {
1467
1467
  return /* @__PURE__ */ jsx(
1468
1468
  "textarea",
@@ -1491,7 +1491,7 @@ var Select;
1491
1491
  var init_Select = __esm({
1492
1492
  "components/atoms/Select.tsx"() {
1493
1493
  init_cn();
1494
- Select = React75__default.forwardRef(
1494
+ Select = React78__default.forwardRef(
1495
1495
  ({ className, options, placeholder, error, ...props }, ref) => {
1496
1496
  return /* @__PURE__ */ jsxs("div", { className: "relative", children: [
1497
1497
  /* @__PURE__ */ jsxs(
@@ -1533,7 +1533,7 @@ var Checkbox;
1533
1533
  var init_Checkbox = __esm({
1534
1534
  "components/atoms/Checkbox.tsx"() {
1535
1535
  init_cn();
1536
- Checkbox = React75__default.forwardRef(
1536
+ Checkbox = React78__default.forwardRef(
1537
1537
  ({ className, label, id, ...props }, ref) => {
1538
1538
  const inputId = id || `checkbox-${Math.random().toString(36).substr(2, 9)}`;
1539
1539
  return /* @__PURE__ */ jsxs("div", { className: "flex items-center", children: [
@@ -1615,7 +1615,7 @@ var init_Card = __esm({
1615
1615
  md: "shadow",
1616
1616
  lg: "shadow-lg"
1617
1617
  };
1618
- Card = React75__default.forwardRef(
1618
+ Card = React78__default.forwardRef(
1619
1619
  ({
1620
1620
  className,
1621
1621
  variant = "bordered",
@@ -1651,9 +1651,9 @@ var init_Card = __esm({
1651
1651
  }
1652
1652
  );
1653
1653
  Card.displayName = "Card";
1654
- CardHeader = React75__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", { ref, className: cn("mb-4", className), ...props }));
1654
+ CardHeader = React78__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", { ref, className: cn("mb-4", className), ...props }));
1655
1655
  CardHeader.displayName = "CardHeader";
1656
- CardTitle = React75__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
1656
+ CardTitle = React78__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
1657
1657
  "h3",
1658
1658
  {
1659
1659
  ref,
@@ -1666,11 +1666,11 @@ var init_Card = __esm({
1666
1666
  }
1667
1667
  ));
1668
1668
  CardTitle.displayName = "CardTitle";
1669
- CardContent = React75__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", { ref, className: cn("", className), ...props }));
1669
+ CardContent = React78__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", { ref, className: cn("", className), ...props }));
1670
1670
  CardContent.displayName = "CardContent";
1671
1671
  CardBody = CardContent;
1672
1672
  CardBody.displayName = "CardBody";
1673
- CardFooter = React75__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
1673
+ CardFooter = React78__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
1674
1674
  "div",
1675
1675
  {
1676
1676
  ref,
@@ -1723,7 +1723,7 @@ var init_Badge = __esm({
1723
1723
  md: "px-2.5 py-1 text-sm",
1724
1724
  lg: "px-3 py-1.5 text-base"
1725
1725
  };
1726
- Badge = React75__default.forwardRef(
1726
+ Badge = React78__default.forwardRef(
1727
1727
  ({ className, variant = "default", size = "sm", amount, label, icon, children, ...props }, ref) => {
1728
1728
  const iconSizes3 = { sm: "w-3 h-3", md: "w-3.5 h-3.5", lg: "w-4 h-4" };
1729
1729
  const resolvedIcon = typeof icon === "string" ? (() => {
@@ -1796,7 +1796,7 @@ var init_FilterPill = __esm({
1796
1796
  md: "w-3.5 h-3.5",
1797
1797
  lg: "w-4 h-4"
1798
1798
  };
1799
- FilterPill = React75__default.forwardRef(
1799
+ FilterPill = React78__default.forwardRef(
1800
1800
  ({
1801
1801
  className,
1802
1802
  variant = "default",
@@ -1875,7 +1875,7 @@ var init_Spinner = __esm({
1875
1875
  md: "h-6 w-6",
1876
1876
  lg: "h-8 w-8"
1877
1877
  };
1878
- Spinner = React75__default.forwardRef(
1878
+ Spinner = React78__default.forwardRef(
1879
1879
  ({ className, size = "md", ...props }, ref) => {
1880
1880
  return /* @__PURE__ */ jsx(
1881
1881
  "div",
@@ -2156,7 +2156,7 @@ var init_Box = __esm({
2156
2156
  fixed: "fixed",
2157
2157
  sticky: "sticky"
2158
2158
  };
2159
- Box = React75__default.forwardRef(
2159
+ Box = React78__default.forwardRef(
2160
2160
  ({
2161
2161
  padding,
2162
2162
  paddingX,
@@ -2206,38 +2206,26 @@ var init_Box = __esm({
2206
2206
  onMouseLeave?.(e);
2207
2207
  }, [hoverEvent, eventBus, onMouseLeave]);
2208
2208
  const isClickable = action || onClick;
2209
- const Comp = Component;
2210
- return /* @__PURE__ */ jsx(
2211
- Comp,
2209
+ return React78__default.createElement(
2210
+ Component,
2212
2211
  {
2213
2212
  ref,
2214
2213
  className: cn(
2215
- // Padding
2216
2214
  padding && paddingStyles2[padding],
2217
2215
  paddingX && paddingXStyles[paddingX],
2218
2216
  paddingY && paddingYStyles[paddingY],
2219
- // Margin
2220
2217
  margin && marginStyles[margin],
2221
2218
  marginX && marginXStyles[marginX],
2222
2219
  marginY && marginYStyles[marginY],
2223
- // Background
2224
2220
  bgStyles[bg],
2225
- // Border - uses theme variables
2226
2221
  border && "border-[length:var(--border-width)] border-border",
2227
- // Rounded
2228
2222
  roundedStyles[rounded],
2229
- // Shadow
2230
2223
  shadowStyles2[shadow],
2231
- // Display
2232
2224
  display && displayStyles[display],
2233
- // Dimensions
2234
2225
  fullWidth && "w-full",
2235
2226
  fullHeight && "h-full",
2236
- // Overflow
2237
2227
  overflow && overflowStyles[overflow],
2238
- // Position
2239
2228
  position && positionStyles[position],
2240
- // Cursor for clickable
2241
2229
  isClickable && "cursor-pointer",
2242
2230
  className
2243
2231
  ),
@@ -2245,9 +2233,9 @@ var init_Box = __esm({
2245
2233
  onMouseEnter: hoverEvent || onMouseEnter ? handleMouseEnter : void 0,
2246
2234
  onMouseLeave: hoverEvent || onMouseLeave ? handleMouseLeave : void 0,
2247
2235
  style: maxWidth ? { maxWidth, ...rest.style } : rest.style,
2248
- ...rest,
2249
- children
2250
- }
2236
+ ...rest
2237
+ },
2238
+ children
2251
2239
  );
2252
2240
  }
2253
2241
  );
@@ -2529,7 +2517,7 @@ var Radio;
2529
2517
  var init_Radio = __esm({
2530
2518
  "components/atoms/Radio.tsx"() {
2531
2519
  init_cn();
2532
- Radio = React75__default.forwardRef(
2520
+ Radio = React78__default.forwardRef(
2533
2521
  ({
2534
2522
  label,
2535
2523
  helperText,
@@ -2701,7 +2689,7 @@ var init_Switch = __esm({
2701
2689
  "components/atoms/Switch.tsx"() {
2702
2690
  "use client";
2703
2691
  init_cn();
2704
- Switch = React75.forwardRef(
2692
+ Switch = React78.forwardRef(
2705
2693
  ({
2706
2694
  checked,
2707
2695
  defaultChecked = false,
@@ -2712,10 +2700,10 @@ var init_Switch = __esm({
2712
2700
  name,
2713
2701
  className
2714
2702
  }, ref) => {
2715
- const [isChecked, setIsChecked] = React75.useState(
2703
+ const [isChecked, setIsChecked] = React78.useState(
2716
2704
  checked !== void 0 ? checked : defaultChecked
2717
2705
  );
2718
- React75.useEffect(() => {
2706
+ React78.useEffect(() => {
2719
2707
  if (checked !== void 0) {
2720
2708
  setIsChecked(checked);
2721
2709
  }
@@ -3530,6 +3518,42 @@ var init_FlipContainer = __esm({
3530
3518
  FlipContainer.displayName = "FlipContainer";
3531
3519
  }
3532
3520
  });
3521
+ var Dialog;
3522
+ var init_Dialog = __esm({
3523
+ "components/atoms/Dialog.tsx"() {
3524
+ init_cn();
3525
+ Dialog = React78__default.forwardRef(
3526
+ ({
3527
+ role = "dialog",
3528
+ "aria-modal": ariaModal = true,
3529
+ className,
3530
+ children,
3531
+ ...rest
3532
+ }, ref) => /* @__PURE__ */ jsx(
3533
+ "dialog",
3534
+ {
3535
+ ref,
3536
+ role,
3537
+ "aria-modal": ariaModal,
3538
+ className: cn(className),
3539
+ ...rest,
3540
+ children
3541
+ }
3542
+ )
3543
+ );
3544
+ Dialog.displayName = "Dialog";
3545
+ }
3546
+ });
3547
+ var Aside;
3548
+ var init_Aside = __esm({
3549
+ "components/atoms/Aside.tsx"() {
3550
+ init_cn();
3551
+ Aside = React78__default.forwardRef(
3552
+ ({ className, children, ...rest }, ref) => /* @__PURE__ */ jsx("aside", { ref, className: cn(className), ...rest, children })
3553
+ );
3554
+ Aside.displayName = "Aside";
3555
+ }
3556
+ });
3533
3557
  function toSharedContext(ctx) {
3534
3558
  return createMinimalContext(
3535
3559
  {
@@ -3601,8 +3625,8 @@ var init_LawReferenceTooltip = __esm({
3601
3625
  position = "top",
3602
3626
  className
3603
3627
  }) => {
3604
- const [isVisible, setIsVisible] = React75__default.useState(false);
3605
- const timeoutRef = React75__default.useRef(null);
3628
+ const [isVisible, setIsVisible] = React78__default.useState(false);
3629
+ const timeoutRef = React78__default.useRef(null);
3606
3630
  const handleMouseEnter = () => {
3607
3631
  if (timeoutRef.current) clearTimeout(timeoutRef.current);
3608
3632
  timeoutRef.current = setTimeout(() => setIsVisible(true), 200);
@@ -3611,7 +3635,7 @@ var init_LawReferenceTooltip = __esm({
3611
3635
  if (timeoutRef.current) clearTimeout(timeoutRef.current);
3612
3636
  setIsVisible(false);
3613
3637
  };
3614
- React75__default.useEffect(() => {
3638
+ React78__default.useEffect(() => {
3615
3639
  return () => {
3616
3640
  if (timeoutRef.current) clearTimeout(timeoutRef.current);
3617
3641
  };
@@ -3821,7 +3845,7 @@ var init_StatusDot = __esm({
3821
3845
  md: "w-2.5 h-2.5",
3822
3846
  lg: "w-3 h-3"
3823
3847
  };
3824
- StatusDot = React75__default.forwardRef(
3848
+ StatusDot = React78__default.forwardRef(
3825
3849
  ({ className, status = "offline", pulse = false, size = "md", label, ...props }, ref) => {
3826
3850
  return /* @__PURE__ */ jsx(
3827
3851
  "span",
@@ -3874,7 +3898,7 @@ var init_TrendIndicator = __esm({
3874
3898
  down: TrendingDown,
3875
3899
  flat: ArrowRight
3876
3900
  };
3877
- TrendIndicator = React75__default.forwardRef(
3901
+ TrendIndicator = React78__default.forwardRef(
3878
3902
  ({
3879
3903
  className,
3880
3904
  value,
@@ -3941,7 +3965,7 @@ var init_RangeSlider = __esm({
3941
3965
  md: "w-4 h-4",
3942
3966
  lg: "w-5 h-5"
3943
3967
  };
3944
- RangeSlider = React75__default.forwardRef(
3968
+ RangeSlider = React78__default.forwardRef(
3945
3969
  ({
3946
3970
  className,
3947
3971
  min = 0,
@@ -4537,7 +4561,7 @@ var init_ContentSection = __esm({
4537
4561
  md: "py-16",
4538
4562
  lg: "py-24"
4539
4563
  };
4540
- ContentSection = React75__default.forwardRef(
4564
+ ContentSection = React78__default.forwardRef(
4541
4565
  ({ children, background = "default", padding = "lg", id, className }, ref) => {
4542
4566
  return /* @__PURE__ */ jsx(
4543
4567
  Box,
@@ -5071,7 +5095,7 @@ var init_AnimatedReveal = __esm({
5071
5095
  "scale-up": { opacity: 1, transform: "scale(1) translateY(0)" },
5072
5096
  "none": {}
5073
5097
  };
5074
- AnimatedReveal = React75__default.forwardRef(
5098
+ AnimatedReveal = React78__default.forwardRef(
5075
5099
  ({
5076
5100
  trigger = "scroll",
5077
5101
  animation = "fade-up",
@@ -5231,7 +5255,7 @@ var init_AnimatedGraphic = __esm({
5231
5255
  "components/atoms/AnimatedGraphic.tsx"() {
5232
5256
  "use client";
5233
5257
  init_cn();
5234
- AnimatedGraphic = React75__default.forwardRef(
5258
+ AnimatedGraphic = React78__default.forwardRef(
5235
5259
  ({
5236
5260
  src,
5237
5261
  svgContent,
@@ -5254,7 +5278,7 @@ var init_AnimatedGraphic = __esm({
5254
5278
  const fetchedSvg = useFetchedSvg(svgContent ? void 0 : src);
5255
5279
  const resolvedSvg = svgContent ?? fetchedSvg;
5256
5280
  const prevAnimateRef = useRef(animate);
5257
- const setRef = React75__default.useCallback(
5281
+ const setRef = React78__default.useCallback(
5258
5282
  (node) => {
5259
5283
  containerRef.current = node;
5260
5284
  if (typeof ref === "function") ref(node);
@@ -5356,8 +5380,9 @@ var sizeClasses5, minWidths, Modal;
5356
5380
  var init_Modal = __esm({
5357
5381
  "components/molecules/Modal.tsx"() {
5358
5382
  "use client";
5359
- init_Icon();
5360
5383
  init_Box();
5384
+ init_Button();
5385
+ init_Dialog();
5361
5386
  init_Typography();
5362
5387
  init_Overlay();
5363
5388
  init_cn();
@@ -5450,7 +5475,7 @@ var init_Modal = __esm({
5450
5475
  }
5451
5476
  ),
5452
5477
  /* @__PURE__ */ jsx(
5453
- "div",
5478
+ Box,
5454
5479
  {
5455
5480
  className: cn(
5456
5481
  "fixed inset-0 z-50 pointer-events-none",
@@ -5459,17 +5484,17 @@ var init_Modal = __esm({
5459
5484
  ),
5460
5485
  style: { paddingTop: "10vh" },
5461
5486
  children: /* @__PURE__ */ jsxs(
5462
- Box,
5487
+ Dialog,
5463
5488
  {
5464
5489
  ref: modalRef,
5465
- bg: "surface",
5466
- border: true,
5467
- shadow: "lg",
5468
- rounded: "md",
5490
+ open: true,
5469
5491
  className: cn(
5470
- "pointer-events-auto w-full flex flex-col",
5492
+ // Reset browser-default dialog chrome — we own styling.
5493
+ "m-0 p-0 border-0 bg-transparent",
5494
+ // Pre-existing dialog frame
5495
+ "pointer-events-auto w-full flex flex-col bg-surface border shadow-lg rounded-md",
5471
5496
  sizeClasses5[size],
5472
- "max-sm:max-w-full max-sm:rounded-b-none max-sm:rounded-t-2xl",
5497
+ "max-sm:max-w-full max-sm:min-w-0 max-sm:rounded-b-none max-sm:rounded-t-2xl",
5473
5498
  className
5474
5499
  ),
5475
5500
  style: {
@@ -5480,12 +5505,10 @@ var init_Modal = __esm({
5480
5505
  transition: isDragging.current ? "none" : "transform 200ms ease-out"
5481
5506
  }
5482
5507
  },
5483
- role: "dialog",
5484
- "aria-modal": "true",
5485
5508
  ...title && { "aria-labelledby": "modal-title" },
5486
5509
  children: [
5487
5510
  /* @__PURE__ */ jsx(
5488
- "div",
5511
+ Box,
5489
5512
  {
5490
5513
  className: "hidden max-sm:flex justify-center py-2 cursor-grab active:cursor-grabbing touch-none",
5491
5514
  onPointerDown: (e) => {
@@ -5511,11 +5534,11 @@ var init_Modal = __esm({
5511
5534
  isDragging.current = false;
5512
5535
  setDragY(0);
5513
5536
  },
5514
- children: /* @__PURE__ */ jsx("div", { className: "w-10 h-1 rounded-full bg-border" })
5537
+ children: /* @__PURE__ */ jsx(Box, { className: "w-10 h-1 rounded-full bg-border" })
5515
5538
  }
5516
5539
  ),
5517
5540
  (title || showCloseButton) && /* @__PURE__ */ jsxs(
5518
- "div",
5541
+ Box,
5519
5542
  {
5520
5543
  className: cn(
5521
5544
  "px-6 py-4 flex items-center justify-between",
@@ -5524,25 +5547,22 @@ var init_Modal = __esm({
5524
5547
  children: [
5525
5548
  title && /* @__PURE__ */ jsx(Typography, { variant: "h4", as: "h2", id: "modal-title", children: title }),
5526
5549
  showCloseButton && /* @__PURE__ */ jsx(
5527
- "button",
5550
+ Button,
5528
5551
  {
5529
- type: "button",
5552
+ variant: "ghost",
5553
+ size: "sm",
5554
+ icon: X,
5530
5555
  onClick: handleClose,
5531
5556
  "data-event": "CLOSE",
5532
- className: cn(
5533
- "p-1 transition-colors rounded-sm",
5534
- "hover:bg-muted"
5535
- ),
5536
- "aria-label": "Close modal",
5537
- children: /* @__PURE__ */ jsx(Icon, { icon: X, size: "md" })
5557
+ "aria-label": "Close modal"
5538
5558
  }
5539
5559
  )
5540
5560
  ]
5541
5561
  }
5542
5562
  ),
5543
- /* @__PURE__ */ jsx("div", { className: "flex-1 overflow-y-auto p-6", children }),
5563
+ /* @__PURE__ */ jsx(Box, { className: "flex-1 overflow-y-auto p-6", children }),
5544
5564
  footer && /* @__PURE__ */ jsx(
5545
- "div",
5565
+ Box,
5546
5566
  {
5547
5567
  className: cn(
5548
5568
  "px-6 py-4 bg-muted",
@@ -5565,21 +5585,19 @@ var sizeWidths, Drawer;
5565
5585
  var init_Drawer = __esm({
5566
5586
  "components/molecules/Drawer.tsx"() {
5567
5587
  "use client";
5568
- init_Icon();
5569
5588
  init_Box();
5589
+ init_Button();
5570
5590
  init_Typography();
5571
5591
  init_Overlay();
5572
5592
  init_cn();
5573
5593
  init_useEventBus();
5574
5594
  sizeWidths = {
5575
- sm: "w-80",
5595
+ sm: "w-full sm:w-80",
5576
5596
  // 320px
5577
- md: "w-96",
5597
+ md: "w-full sm:w-96",
5578
5598
  // 384px
5579
- lg: "w-[480px]",
5580
- // 480px
5581
- xl: "w-[640px]",
5582
- // 640px
5599
+ lg: "w-full sm:w-[480px]",
5600
+ xl: "w-full sm:w-[640px]",
5583
5601
  full: "w-screen"
5584
5602
  };
5585
5603
  Drawer = ({
@@ -5677,7 +5695,7 @@ var init_Drawer = __esm({
5677
5695
  ...title && { "aria-labelledby": "drawer-title" },
5678
5696
  children: [
5679
5697
  (title || showCloseButton) && /* @__PURE__ */ jsxs(
5680
- "div",
5698
+ Box,
5681
5699
  {
5682
5700
  className: cn(
5683
5701
  "px-6 py-4 flex items-center justify-between shrink-0",
@@ -5686,25 +5704,22 @@ var init_Drawer = __esm({
5686
5704
  children: [
5687
5705
  title && /* @__PURE__ */ jsx(Typography, { variant: "h4", as: "h2", id: "drawer-title", children: title }),
5688
5706
  showCloseButton && /* @__PURE__ */ jsx(
5689
- "button",
5707
+ Button,
5690
5708
  {
5691
- type: "button",
5709
+ variant: "ghost",
5710
+ size: "sm",
5711
+ icon: X,
5692
5712
  onClick: handleClose,
5693
- className: cn(
5694
- "p-1 transition-colors rounded-sm",
5695
- "hover:bg-muted",
5696
- !title && "ml-auto"
5697
- ),
5698
5713
  "aria-label": "Close drawer",
5699
- children: /* @__PURE__ */ jsx(Icon, { icon: X, size: "md" })
5714
+ className: cn(!title && "ml-auto")
5700
5715
  }
5701
5716
  )
5702
5717
  ]
5703
5718
  }
5704
5719
  ),
5705
- /* @__PURE__ */ jsx("div", { className: "flex-1 overflow-y-auto p-6", children }),
5720
+ /* @__PURE__ */ jsx(Box, { className: "flex-1 overflow-y-auto p-6", children }),
5706
5721
  footer && /* @__PURE__ */ jsx(
5707
- "div",
5722
+ Box,
5708
5723
  {
5709
5724
  className: cn(
5710
5725
  "px-6 py-4 shrink-0 bg-muted",
@@ -5749,6 +5764,7 @@ var variantClasses, iconMap2, iconColors, Toast;
5749
5764
  var init_Toast = __esm({
5750
5765
  "components/molecules/Toast.tsx"() {
5751
5766
  "use client";
5767
+ init_Box();
5752
5768
  init_Icon();
5753
5769
  init_Typography();
5754
5770
  init_Button();
@@ -5806,17 +5822,20 @@ var init_Toast = __esm({
5806
5822
  return () => clearTimeout(timer);
5807
5823
  }, [duration, onDismiss, dismissEvent]);
5808
5824
  return /* @__PURE__ */ jsx(
5809
- "div",
5825
+ Box,
5810
5826
  {
5811
5827
  className: cn(
5812
- "border-l-4 p-4 shadow min-w-[300px] max-w-md",
5828
+ // `min-w-[300px]` only kicks in at `sm:` and above so a phone
5829
+ // viewport doesn't get a toast wider than the screen near the
5830
+ // edge. `max-w-[calc(100vw-2rem)]` clamps to viewport too.
5831
+ "border-l-4 p-4 shadow min-w-0 sm:min-w-[300px] max-w-md max-w-[calc(100vw-2rem)]",
5813
5832
  "rounded-sm",
5814
5833
  variantClasses[variant],
5815
5834
  className
5816
5835
  ),
5817
5836
  role: "alert",
5818
- children: /* @__PURE__ */ jsxs("div", { className: "flex items-start gap-3", children: [
5819
- /* @__PURE__ */ jsx("div", { className: "flex-shrink-0 mt-0.5", children: /* @__PURE__ */ jsx(
5837
+ children: /* @__PURE__ */ jsxs(Box, { className: "flex items-start gap-3", children: [
5838
+ /* @__PURE__ */ jsx(Box, { className: "flex-shrink-0 mt-0.5", children: /* @__PURE__ */ jsx(
5820
5839
  Icon,
5821
5840
  {
5822
5841
  icon: iconMap2[variant],
@@ -5824,25 +5843,22 @@ var init_Toast = __esm({
5824
5843
  className: iconColors[variant]
5825
5844
  }
5826
5845
  ) }),
5827
- /* @__PURE__ */ jsxs("div", { className: "flex-1 min-w-0", children: [
5846
+ /* @__PURE__ */ jsxs(Box, { className: "flex-1 min-w-0", children: [
5828
5847
  title && /* @__PURE__ */ jsx(Typography, { variant: "h6", className: "mb-1", children: title }),
5829
5848
  /* @__PURE__ */ jsx(Typography, { variant: "small", className: "text-sm", children: message }),
5830
- actionLabel && (onAction || actionEvent) && /* @__PURE__ */ jsx("div", { className: "mt-3", children: /* @__PURE__ */ jsx(Button, { variant: "ghost", size: "sm", onClick: handleAction, children: actionLabel }) })
5849
+ actionLabel && (onAction || actionEvent) && /* @__PURE__ */ jsx(Box, { className: "mt-3", children: /* @__PURE__ */ jsx(Button, { variant: "ghost", size: "sm", onClick: handleAction, children: actionLabel }) })
5831
5850
  ] }),
5832
- /* @__PURE__ */ jsxs("div", { className: "flex items-start gap-2 flex-shrink-0", children: [
5851
+ /* @__PURE__ */ jsxs(Box, { className: "flex items-start gap-2 flex-shrink-0", children: [
5833
5852
  badge !== void 0 && /* @__PURE__ */ jsx(Badge, { variant: "default", size: "sm", children: badge }),
5834
5853
  dismissible && /* @__PURE__ */ jsx(
5835
- "button",
5854
+ Button,
5836
5855
  {
5837
- type: "button",
5856
+ variant: "ghost",
5857
+ size: "sm",
5858
+ icon: X,
5838
5859
  onClick: handleDismiss,
5839
- className: cn(
5840
- "flex-shrink-0 p-1 transition-colors rounded-sm",
5841
- "hover:bg-muted",
5842
- "focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2"
5843
- ),
5844
5860
  "aria-label": "Dismiss toast",
5845
- children: /* @__PURE__ */ jsx(Icon, { icon: X, size: "sm" })
5861
+ className: "flex-shrink-0"
5846
5862
  }
5847
5863
  )
5848
5864
  ] })
@@ -6064,7 +6080,7 @@ var init_ErrorBoundary = __esm({
6064
6080
  "use client";
6065
6081
  init_cn();
6066
6082
  init_ErrorState();
6067
- ErrorBoundary = class extends React75__default.Component {
6083
+ ErrorBoundary = class extends React78__default.Component {
6068
6084
  constructor(props) {
6069
6085
  super(props);
6070
6086
  __publicField(this, "reset", () => {
@@ -6617,7 +6633,7 @@ var init_HeroSection = __esm({
6617
6633
  HeroSection.displayName = "HeroSection";
6618
6634
  }
6619
6635
  });
6620
- var ArticleSection;
6636
+ var maxWidthMap, ArticleSection;
6621
6637
  var init_ArticleSection = __esm({
6622
6638
  "components/molecules/ArticleSection.tsx"() {
6623
6639
  "use client";
@@ -6625,6 +6641,11 @@ var init_ArticleSection = __esm({
6625
6641
  init_Box();
6626
6642
  init_Stack();
6627
6643
  init_Typography();
6644
+ maxWidthMap = {
6645
+ sm: "max-w-full sm:max-w-xl md:max-w-2xl",
6646
+ md: "max-w-full sm:max-w-2xl md:max-w-3xl",
6647
+ lg: "max-w-full sm:max-w-3xl md:max-w-4xl"
6648
+ };
6628
6649
  ArticleSection = ({
6629
6650
  title,
6630
6651
  children,
@@ -6639,7 +6660,7 @@ var init_ArticleSection = __esm({
6639
6660
  className
6640
6661
  ),
6641
6662
  padding: "md",
6642
- children: /* @__PURE__ */ jsxs(VStack, { gap: "lg", align: "start", children: [
6663
+ children: /* @__PURE__ */ jsxs(VStack, { gap: "lg", align: "start", className: cn("w-full mx-auto", maxWidthMap[maxWidth]), children: [
6643
6664
  /* @__PURE__ */ jsx(Typography, { variant: "h2", children: title }),
6644
6665
  /* @__PURE__ */ jsx(Box, { className: "w-full", children })
6645
6666
  ] })
@@ -6691,6 +6712,7 @@ var init_TeamCard = __esm({
6691
6712
  var gapStyles2, colStyles, SimpleGrid;
6692
6713
  var init_SimpleGrid = __esm({
6693
6714
  "components/molecules/SimpleGrid.tsx"() {
6715
+ init_Box();
6694
6716
  init_cn();
6695
6717
  gapStyles2 = {
6696
6718
  none: "gap-0",
@@ -6703,10 +6725,10 @@ var init_SimpleGrid = __esm({
6703
6725
  colStyles = {
6704
6726
  1: "grid-cols-1",
6705
6727
  2: "grid-cols-1 sm:grid-cols-2",
6706
- 3: "grid-cols-1 sm:grid-cols-2 lg:grid-cols-3",
6707
- 4: "grid-cols-1 sm:grid-cols-2 lg:grid-cols-4",
6708
- 5: "grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-5",
6709
- 6: "grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-6"
6728
+ 3: "grid-cols-1 sm:grid-cols-2 md:grid-cols-3",
6729
+ 4: "grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4",
6730
+ 5: "grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 xl:grid-cols-5",
6731
+ 6: "grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 xl:grid-cols-6"
6710
6732
  };
6711
6733
  SimpleGrid = ({
6712
6734
  minChildWidth = 250,
@@ -6717,12 +6739,12 @@ var init_SimpleGrid = __esm({
6717
6739
  children
6718
6740
  }) => {
6719
6741
  if (cols) {
6720
- return /* @__PURE__ */ jsx("div", { className: cn("grid", colStyles[cols], gapStyles2[gap], className), children });
6742
+ return /* @__PURE__ */ jsx(Box, { className: cn("grid", colStyles[cols], gapStyles2[gap], className), children });
6721
6743
  }
6722
6744
  const minWidth = typeof minChildWidth === "number" ? `${minChildWidth}px` : minChildWidth;
6723
6745
  const templateColumns = maxCols ? `repeat(auto-fit, minmax(min(${minWidth}, 100%), 1fr))` : `repeat(auto-fit, minmax(${minWidth}, 1fr))`;
6724
6746
  return /* @__PURE__ */ jsx(
6725
- "div",
6747
+ Box,
6726
6748
  {
6727
6749
  className: cn("grid", gapStyles2[gap], className),
6728
6750
  style: {
@@ -7112,8 +7134,8 @@ var init_Tooltip = __esm({
7112
7134
  if (hideTimeoutRef.current) clearTimeout(hideTimeoutRef.current);
7113
7135
  };
7114
7136
  }, []);
7115
- const triggerElement = React75__default.isValidElement(children) ? children : /* @__PURE__ */ jsx("span", { children });
7116
- const trigger = React75__default.cloneElement(triggerElement, {
7137
+ const triggerElement = React78__default.isValidElement(children) ? children : /* @__PURE__ */ jsx("span", { children });
7138
+ const trigger = React78__default.cloneElement(triggerElement, {
7117
7139
  ref: triggerRef,
7118
7140
  onMouseEnter: handleMouseEnter,
7119
7141
  onMouseLeave: handleMouseLeave,
@@ -7234,8 +7256,8 @@ var init_Popover = __esm({
7234
7256
  onMouseEnter: handleOpen,
7235
7257
  onMouseLeave: handleClose
7236
7258
  };
7237
- const childElement = React75__default.isValidElement(children) ? children : /* @__PURE__ */ jsx("span", { children });
7238
- const triggerElement = React75__default.cloneElement(
7259
+ const childElement = React78__default.isValidElement(children) ? children : /* @__PURE__ */ jsx("span", { children });
7260
+ const triggerElement = React78__default.cloneElement(
7239
7261
  childElement,
7240
7262
  {
7241
7263
  ref: triggerRef,
@@ -7284,6 +7306,7 @@ var Menu;
7284
7306
  var init_Menu = __esm({
7285
7307
  "components/molecules/Menu.tsx"() {
7286
7308
  "use client";
7309
+ init_Box();
7287
7310
  init_Icon();
7288
7311
  init_Divider();
7289
7312
  init_Typography();
@@ -7352,8 +7375,8 @@ var init_Menu = __esm({
7352
7375
  "bottom-start": "top-full left-0 mt-2",
7353
7376
  "bottom-end": "top-full right-0 mt-2"
7354
7377
  };
7355
- const triggerChild = React75__default.isValidElement(trigger) ? trigger : /* @__PURE__ */ jsx("span", { children: trigger });
7356
- const triggerElement = React75__default.cloneElement(
7378
+ const triggerChild = React78__default.isValidElement(trigger) ? trigger : /* @__PURE__ */ jsx(Typography, { variant: "small", as: "span", children: trigger });
7379
+ const triggerElement = React78__default.cloneElement(
7357
7380
  triggerChild,
7358
7381
  {
7359
7382
  ref: triggerRef,
@@ -7365,17 +7388,17 @@ var init_Menu = __esm({
7365
7388
  "border-[length:var(--border-width)] border-border",
7366
7389
  "shadow",
7367
7390
  "rounded-sm",
7368
- "min-w-[200px] py-1"
7391
+ "min-w-0 sm:min-w-[200px] max-w-[calc(100vw-1rem)] py-1"
7369
7392
  );
7370
7393
  const renderMenuItem = (item, hasSubMenu, index) => {
7371
7394
  const itemId = item.id ?? `item-${item.label.toLowerCase().replace(/\s+/g, "-")}-${index}`;
7372
7395
  const isDanger = item.variant === "danger";
7373
7396
  return /* @__PURE__ */ jsx(
7374
- "button",
7397
+ Box,
7375
7398
  {
7376
- type: "button",
7377
- onClick: () => handleItemClick({ ...item, id: itemId }),
7378
- disabled: item.disabled,
7399
+ as: "button",
7400
+ onClick: () => !item.disabled && handleItemClick({ ...item, id: itemId }),
7401
+ "aria-disabled": item.disabled || void 0,
7379
7402
  onMouseEnter: () => hasSubMenu && setActiveSubMenu(itemId),
7380
7403
  "data-testid": item.event ? `action-${item.event}` : void 0,
7381
7404
  className: cn(
@@ -7387,7 +7410,7 @@ var init_Menu = __esm({
7387
7410
  item.disabled && "cursor-not-allowed",
7388
7411
  isDanger && "text-error hover:bg-error/10"
7389
7412
  ),
7390
- children: /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3 flex-1 min-w-0", children: [
7413
+ children: /* @__PURE__ */ jsxs(Box, { className: "flex items-center gap-3 flex-1 min-w-0", children: [
7391
7414
  item.icon && (typeof item.icon === "string" ? /* @__PURE__ */ jsx(Icon, { name: item.icon, size: "sm", className: "flex-shrink-0" }) : /* @__PURE__ */ jsx(Icon, { icon: item.icon, size: "sm", className: "flex-shrink-0" })),
7392
7415
  /* @__PURE__ */ jsx(
7393
7416
  Typography,
@@ -7412,10 +7435,10 @@ var init_Menu = __esm({
7412
7435
  if (isDivider) {
7413
7436
  return /* @__PURE__ */ jsx(Divider, { className: "my-1" }, `divider-${index}`);
7414
7437
  }
7415
- return /* @__PURE__ */ jsxs("div", { children: [
7438
+ return /* @__PURE__ */ jsxs(Box, { children: [
7416
7439
  renderMenuItem(item, !!hasSubMenu, index),
7417
7440
  hasSubMenu && activeSubMenu === itemId && item.subMenu && /* @__PURE__ */ jsx(
7418
- "div",
7441
+ Box,
7419
7442
  {
7420
7443
  className: cn(
7421
7444
  "absolute left-full top-0 ml-2 z-50",
@@ -7427,10 +7450,10 @@ var init_Menu = __esm({
7427
7450
  ] }, itemId);
7428
7451
  });
7429
7452
  };
7430
- return /* @__PURE__ */ jsxs("div", { className: "relative", children: [
7453
+ return /* @__PURE__ */ jsxs(Box, { className: "relative", children: [
7431
7454
  triggerElement,
7432
7455
  isOpen && triggerRect && /* @__PURE__ */ jsx(
7433
- "div",
7456
+ Box,
7434
7457
  {
7435
7458
  ref: menuRef,
7436
7459
  className: cn(
@@ -7769,13 +7792,13 @@ var init_MapView = __esm({
7769
7792
  shadowSize: [41, 41]
7770
7793
  });
7771
7794
  L.Marker.prototype.options.icon = defaultIcon;
7772
- const { useEffect: useEffect70, useRef: useRef66, useCallback: useCallback126, useState: useState107 } = React75__default;
7795
+ const { useEffect: useEffect71, useRef: useRef66, useCallback: useCallback126, useState: useState108 } = React78__default;
7773
7796
  const { Typography: Typography2 } = await Promise.resolve().then(() => (init_Typography(), Typography_exports));
7774
7797
  const { useEventBus: useEventBus2 } = await Promise.resolve().then(() => (init_useEventBus(), useEventBus_exports));
7775
7798
  function MapUpdater({ centerLat, centerLng, zoom }) {
7776
7799
  const map = useMap();
7777
7800
  const prevRef = useRef66({ centerLat, centerLng, zoom });
7778
- useEffect70(() => {
7801
+ useEffect71(() => {
7779
7802
  const prev = prevRef.current;
7780
7803
  if (prev.centerLat !== centerLat || prev.centerLng !== centerLng || prev.zoom !== zoom) {
7781
7804
  map.setView([centerLat, centerLng], zoom);
@@ -7786,7 +7809,7 @@ var init_MapView = __esm({
7786
7809
  }
7787
7810
  function MapClickHandler({ onMapClick }) {
7788
7811
  const map = useMap();
7789
- useEffect70(() => {
7812
+ useEffect71(() => {
7790
7813
  if (!onMapClick) return;
7791
7814
  const handler = (e) => {
7792
7815
  onMapClick(e.latlng.lat, e.latlng.lng);
@@ -7814,7 +7837,7 @@ var init_MapView = __esm({
7814
7837
  showAttribution = true
7815
7838
  }) {
7816
7839
  const eventBus = useEventBus2();
7817
- const [clickedPosition, setClickedPosition] = useState107(null);
7840
+ const [clickedPosition, setClickedPosition] = useState108(null);
7818
7841
  const handleMapClick = useCallback126((lat, lng) => {
7819
7842
  if (showClickedPin) {
7820
7843
  setClickedPosition({ lat, lng });
@@ -8015,7 +8038,7 @@ function InputPattern({
8015
8038
  fieldName
8016
8039
  }) {
8017
8040
  const { emit } = useEventBus();
8018
- const [localValue, setLocalValue] = React75__default.useState(value);
8041
+ const [localValue, setLocalValue] = React78__default.useState(value);
8019
8042
  const handleChange = (e) => {
8020
8043
  setLocalValue(e.target.value);
8021
8044
  if (onChange) {
@@ -8053,7 +8076,7 @@ function TextareaPattern({
8053
8076
  fieldName
8054
8077
  }) {
8055
8078
  const { emit } = useEventBus();
8056
- const [localValue, setLocalValue] = React75__default.useState(value);
8079
+ const [localValue, setLocalValue] = React78__default.useState(value);
8057
8080
  const handleChange = (e) => {
8058
8081
  setLocalValue(e.target.value);
8059
8082
  if (onChange) {
@@ -8085,7 +8108,7 @@ function SelectPattern({
8085
8108
  fieldName
8086
8109
  }) {
8087
8110
  const { emit } = useEventBus();
8088
- const [localValue, setLocalValue] = React75__default.useState(value);
8111
+ const [localValue, setLocalValue] = React78__default.useState(value);
8089
8112
  const handleChange = (e) => {
8090
8113
  setLocalValue(e.target.value);
8091
8114
  if (onChange) {
@@ -8114,7 +8137,7 @@ function CheckboxPattern({
8114
8137
  className
8115
8138
  }) {
8116
8139
  const { emit } = useEventBus();
8117
- const [localChecked, setLocalChecked] = React75__default.useState(checked);
8140
+ const [localChecked, setLocalChecked] = React78__default.useState(checked);
8118
8141
  const handleChange = (e) => {
8119
8142
  setLocalChecked(e.target.checked);
8120
8143
  if (onChange) {
@@ -8427,9 +8450,9 @@ function ControlButton({
8427
8450
  className
8428
8451
  }) {
8429
8452
  const eventBus = useEventBus();
8430
- const [isPressed, setIsPressed] = React75.useState(false);
8453
+ const [isPressed, setIsPressed] = React78.useState(false);
8431
8454
  const actualPressed = pressed ?? isPressed;
8432
- const handlePointerDown = React75.useCallback(
8455
+ const handlePointerDown = React78.useCallback(
8433
8456
  (e) => {
8434
8457
  e.preventDefault();
8435
8458
  if (disabled) return;
@@ -8439,7 +8462,7 @@ function ControlButton({
8439
8462
  },
8440
8463
  [disabled, pressEvent, eventBus, onPress]
8441
8464
  );
8442
- const handlePointerUp = React75.useCallback(
8465
+ const handlePointerUp = React78.useCallback(
8443
8466
  (e) => {
8444
8467
  e.preventDefault();
8445
8468
  if (disabled) return;
@@ -8449,7 +8472,7 @@ function ControlButton({
8449
8472
  },
8450
8473
  [disabled, releaseEvent, eventBus, onRelease]
8451
8474
  );
8452
- const handlePointerLeave = React75.useCallback(
8475
+ const handlePointerLeave = React78.useCallback(
8453
8476
  (e) => {
8454
8477
  if (isPressed) {
8455
8478
  setIsPressed(false);
@@ -8526,8 +8549,8 @@ function ActionButtons({
8526
8549
  disabled
8527
8550
  }) {
8528
8551
  const eventBus = useEventBus();
8529
- const [activeButtons, setActiveButtons] = React75.useState(/* @__PURE__ */ new Set());
8530
- const handlePress = React75.useCallback(
8552
+ const [activeButtons, setActiveButtons] = React78.useState(/* @__PURE__ */ new Set());
8553
+ const handlePress = React78.useCallback(
8531
8554
  (id) => {
8532
8555
  setActiveButtons((prev) => new Set(prev).add(id));
8533
8556
  if (actionEvent) eventBus.emit(`UI:${actionEvent}`, { id, pressed: true });
@@ -8535,7 +8558,7 @@ function ActionButtons({
8535
8558
  },
8536
8559
  [actionEvent, eventBus, onAction]
8537
8560
  );
8538
- const handleRelease = React75.useCallback(
8561
+ const handleRelease = React78.useCallback(
8539
8562
  (id) => {
8540
8563
  setActiveButtons((prev) => {
8541
8564
  const next = new Set(prev);
@@ -11297,7 +11320,7 @@ var init_MarkdownContent = __esm({
11297
11320
  init_Box();
11298
11321
  init_useTranslate();
11299
11322
  init_cn();
11300
- MarkdownContent = React75__default.memo(
11323
+ MarkdownContent = React78__default.memo(
11301
11324
  ({ content, direction, className }) => {
11302
11325
  const { t: _t } = useTranslate();
11303
11326
  const safeContent = typeof content === "string" ? content : String(content ?? "");
@@ -11515,7 +11538,7 @@ var init_CodeBlock = __esm({
11515
11538
  log5 = createLogger("almadar:ui:markdown-code");
11516
11539
  LINE_PROPS_FN = (n) => ({ "data-line": String(n - 1) });
11517
11540
  HIDDEN_LINE_NUMBERS = { display: "none" };
11518
- CodeBlock = React75__default.memo(
11541
+ CodeBlock = React78__default.memo(
11519
11542
  ({
11520
11543
  code: rawCode,
11521
11544
  language = "text",
@@ -12824,7 +12847,7 @@ var init_StateMachineView = __esm({
12824
12847
  style: { top: title ? 30 : 0 },
12825
12848
  children: [
12826
12849
  entity && /* @__PURE__ */ jsx(EntityBox, { entity, config }),
12827
- states.map((state) => renderStateNode ? /* @__PURE__ */ jsx(React75__default.Fragment, { children: renderStateNode(state, config) }, state.id) : /* @__PURE__ */ jsx(
12850
+ states.map((state) => renderStateNode ? /* @__PURE__ */ jsx(React78__default.Fragment, { children: renderStateNode(state, config) }, state.id) : /* @__PURE__ */ jsx(
12828
12851
  StateNode,
12829
12852
  {
12830
12853
  state,
@@ -14405,27 +14428,23 @@ var init_Grid = __esm({
14405
14428
  as: Component = "div"
14406
14429
  }) => {
14407
14430
  const mergedStyle = rows ? { gridTemplateRows: `repeat(${rows}, minmax(0, 1fr))`, ...style } : style;
14408
- const Comp = Component;
14409
- return /* @__PURE__ */ jsx(
14410
- Comp,
14431
+ return React78__default.createElement(
14432
+ Component,
14411
14433
  {
14412
14434
  className: cn(
14413
14435
  "grid",
14414
14436
  getColsClass(cols),
14415
- // Gap (rowGap/colGap override gap)
14416
14437
  rowGap ? rowGapStyles[rowGap] : colGap ? void 0 : gapStyles3[gap],
14417
14438
  colGap ? colGapStyles[colGap] : rowGap ? void 0 : void 0,
14418
14439
  rowGap && colGap ? `${rowGapStyles[rowGap]} ${colGapStyles[colGap]}` : void 0,
14419
- // Alignment
14420
14440
  alignItems && alignStyles2[alignItems],
14421
14441
  justifyItems && justifyStyles2[justifyItems],
14422
- // Flow
14423
14442
  flow && flowStyles[flow],
14424
14443
  className
14425
14444
  ),
14426
- style: mergedStyle,
14427
- children
14428
- }
14445
+ style: mergedStyle
14446
+ },
14447
+ children
14429
14448
  );
14430
14449
  };
14431
14450
  Grid.displayName = "Grid";
@@ -15444,6 +15463,35 @@ var init_useSwipeGesture = __esm({
15444
15463
  "use client";
15445
15464
  }
15446
15465
  });
15466
+ function dayWindowForViewport(width) {
15467
+ if (width <= 640) return 1;
15468
+ if (width <= 1024) return 3;
15469
+ return 7;
15470
+ }
15471
+ function useDayWindow(override) {
15472
+ const [w, setW] = useState(() => {
15473
+ if (override !== "auto") return override;
15474
+ if (typeof window === "undefined") return 7;
15475
+ return dayWindowForViewport(window.innerWidth);
15476
+ });
15477
+ useEffect(() => {
15478
+ if (override !== "auto") {
15479
+ setW(override);
15480
+ return void 0;
15481
+ }
15482
+ if (typeof window === "undefined") return void 0;
15483
+ const onResize = () => setW(dayWindowForViewport(window.innerWidth));
15484
+ onResize();
15485
+ window.addEventListener("resize", onResize);
15486
+ return () => window.removeEventListener("resize", onResize);
15487
+ }, [override]);
15488
+ return w;
15489
+ }
15490
+ function formatDateRange(start, end) {
15491
+ const startStr = start.toLocaleDateString(void 0, SHORT_DATE);
15492
+ const endStr = end.toLocaleDateString(void 0, SHORT_DATE);
15493
+ return start.toDateString() === end.toDateString() ? startStr : `${startStr} \u2013 ${endStr}`;
15494
+ }
15447
15495
  function getStartOfWeek(date) {
15448
15496
  const d = new Date(date);
15449
15497
  const day = d.getDay();
@@ -15484,7 +15532,8 @@ function CalendarGrid({
15484
15532
  longPressEvent,
15485
15533
  longPressPayload,
15486
15534
  swipeLeftEvent,
15487
- swipeRightEvent
15535
+ swipeRightEvent,
15536
+ dayWindow = "auto"
15488
15537
  }) {
15489
15538
  const eventBus = useEventBus();
15490
15539
  const longPressTimer = useRef(null);
@@ -15500,6 +15549,26 @@ function CalendarGrid({
15500
15549
  () => timeSlots ?? generateDefaultTimeSlots(),
15501
15550
  [timeSlots]
15502
15551
  );
15552
+ const visibleCount = useDayWindow(dayWindow);
15553
+ const [dayOffset, setDayOffset] = useState(0);
15554
+ useEffect(() => {
15555
+ if (dayOffset + visibleCount > 7) {
15556
+ setDayOffset(Math.max(0, 7 - visibleCount));
15557
+ }
15558
+ }, [visibleCount, dayOffset]);
15559
+ const visibleDays = useMemo(
15560
+ () => weekDays.slice(dayOffset, dayOffset + visibleCount),
15561
+ [weekDays, dayOffset, visibleCount]
15562
+ );
15563
+ const canPrev = dayOffset > 0;
15564
+ const canNext = dayOffset + visibleCount < 7;
15565
+ const stepPrev = useCallback(() => {
15566
+ setDayOffset((d) => Math.max(0, d - visibleCount));
15567
+ }, [visibleCount]);
15568
+ const stepNext = useCallback(() => {
15569
+ setDayOffset((d) => Math.min(7 - visibleCount, d + visibleCount));
15570
+ }, [visibleCount]);
15571
+ const gridColsClass = visibleCount === 1 ? "grid-cols-2" : visibleCount === 3 ? "grid-cols-4" : "grid-cols-8";
15503
15572
  const handleSlotClick = useCallback(
15504
15573
  (day, time) => {
15505
15574
  onSlotClick?.(day, time);
@@ -15551,93 +15620,124 @@ function CalendarGrid({
15551
15620
  },
15552
15621
  event.id
15553
15622
  );
15554
- return /* @__PURE__ */ jsx(
15623
+ return /* @__PURE__ */ jsxs(
15555
15624
  Box,
15556
15625
  {
15557
- className: cn("overflow-x-auto", className),
15626
+ className,
15558
15627
  ...swipeLeftEvent || swipeRightEvent ? {
15559
15628
  onPointerDown: swipe.onPointerDown,
15560
15629
  onPointerMove: swipe.onPointerMove,
15561
15630
  onPointerUp: swipe.onPointerUp,
15562
15631
  onPointerCancel: swipe.onPointerCancel
15563
15632
  } : {},
15564
- children: /* @__PURE__ */ jsxs(Box, { className: "min-w-[800px]", children: [
15565
- /* @__PURE__ */ jsxs(Box, { className: "grid grid-cols-8 border-b border-border", children: [
15566
- /* @__PURE__ */ jsx(Box, { className: "p-2" }),
15567
- weekDays.map((day) => {
15568
- const isToday = day.toDateString() === (/* @__PURE__ */ new Date()).toDateString();
15569
- const count = eventsForDayCount(day);
15570
- return /* @__PURE__ */ jsxs(
15571
- Box,
15572
- {
15573
- className: "border-l border-border",
15574
- children: [
15575
- /* @__PURE__ */ jsx(
15576
- DayCell,
15577
- {
15578
- date: day,
15579
- isToday,
15580
- onClick: onDayClick
15581
- }
15582
- ),
15583
- count > 0 && /* @__PURE__ */ jsx(Box, { className: "text-center pb-1", children: /* @__PURE__ */ jsx(Badge, { variant: "default", size: "sm", children: count }) })
15584
- ]
15585
- },
15586
- day.toISOString()
15587
- );
15588
- })
15633
+ children: [
15634
+ visibleCount < 7 && /* @__PURE__ */ jsxs(HStack, { align: "center", justify: "between", className: "mb-2 px-2", children: [
15635
+ /* @__PURE__ */ jsx(
15636
+ Button,
15637
+ {
15638
+ variant: "ghost",
15639
+ size: "sm",
15640
+ icon: ChevronLeft,
15641
+ onClick: stepPrev,
15642
+ "aria-disabled": !canPrev || void 0,
15643
+ "aria-label": "Previous days",
15644
+ children: "Prev"
15645
+ }
15646
+ ),
15647
+ /* @__PURE__ */ jsx(Typography, { variant: "small", className: "text-muted-foreground", children: formatDateRange(visibleDays[0], visibleDays[visibleDays.length - 1]) }),
15648
+ /* @__PURE__ */ jsx(
15649
+ Button,
15650
+ {
15651
+ variant: "ghost",
15652
+ size: "sm",
15653
+ iconRight: ChevronRight,
15654
+ onClick: stepNext,
15655
+ "aria-disabled": !canNext || void 0,
15656
+ "aria-label": "Next days",
15657
+ children: "Next"
15658
+ }
15659
+ )
15589
15660
  ] }),
15590
- /* @__PURE__ */ jsx(Box, { className: "max-h-[500px] overflow-y-auto", children: resolvedTimeSlots.map((time) => /* @__PURE__ */ jsxs(
15591
- Box,
15592
- {
15593
- className: "grid grid-cols-8 border-b border-border",
15594
- children: [
15595
- /* @__PURE__ */ jsx(Box, { className: "p-2 text-right pr-3", children: /* @__PURE__ */ jsx(
15596
- Typography,
15661
+ /* @__PURE__ */ jsxs(Box, { children: [
15662
+ /* @__PURE__ */ jsxs(Box, { className: cn("grid border-b border-border", gridColsClass), children: [
15663
+ /* @__PURE__ */ jsx(Box, { className: "p-2" }),
15664
+ visibleDays.map((day) => {
15665
+ const isToday = day.toDateString() === (/* @__PURE__ */ new Date()).toDateString();
15666
+ const count = eventsForDayCount(day);
15667
+ return /* @__PURE__ */ jsxs(
15668
+ Box,
15597
15669
  {
15598
- variant: "small",
15599
- className: "text-muted-foreground",
15600
- children: time
15601
- }
15602
- ) }),
15603
- weekDays.map((day) => {
15604
- const slotEvents = events2.filter(
15605
- (ev) => eventInSlot(ev, day, time)
15606
- );
15607
- const isToday = day.toDateString() === (/* @__PURE__ */ new Date()).toDateString();
15608
- return /* @__PURE__ */ jsx(
15609
- TimeSlotCell,
15610
- {
15611
- time,
15612
- isOccupied: slotEvents.length > 0,
15613
- onClick: () => handleSlotClick(day, time),
15614
- className: cn(
15615
- "border-l border-border",
15616
- isToday && "bg-blue-50/30"
15670
+ className: "border-l border-border",
15671
+ children: [
15672
+ /* @__PURE__ */ jsx(
15673
+ DayCell,
15674
+ {
15675
+ date: day,
15676
+ isToday,
15677
+ onClick: onDayClick
15678
+ }
15617
15679
  ),
15618
- ...longPressEvent ? {
15619
- onPointerDown: () => startLongPress(day, time),
15620
- onPointerUp: clearLongPress,
15621
- onPointerCancel: clearLongPress
15622
- } : {},
15623
- children: /* @__PURE__ */ jsx(VStack, { gap: "xs", children: slotEvents.map(renderEvent) })
15624
- },
15625
- `${day.toISOString()}-${time}`
15626
- );
15627
- })
15628
- ]
15629
- },
15630
- time
15631
- )) })
15632
- ] })
15680
+ count > 0 && /* @__PURE__ */ jsx(Box, { className: "text-center pb-1", children: /* @__PURE__ */ jsx(Badge, { variant: "default", size: "sm", children: count }) })
15681
+ ]
15682
+ },
15683
+ day.toISOString()
15684
+ );
15685
+ })
15686
+ ] }),
15687
+ /* @__PURE__ */ jsx(Box, { className: "max-h-[500px] overflow-y-auto", children: resolvedTimeSlots.map((time) => /* @__PURE__ */ jsxs(
15688
+ Box,
15689
+ {
15690
+ className: cn("grid border-b border-border", gridColsClass),
15691
+ children: [
15692
+ /* @__PURE__ */ jsx(Box, { className: "p-2 text-right pr-3", children: /* @__PURE__ */ jsx(
15693
+ Typography,
15694
+ {
15695
+ variant: "small",
15696
+ className: "text-muted-foreground",
15697
+ children: time
15698
+ }
15699
+ ) }),
15700
+ visibleDays.map((day) => {
15701
+ const slotEvents = events2.filter(
15702
+ (ev) => eventInSlot(ev, day, time)
15703
+ );
15704
+ const isToday = day.toDateString() === (/* @__PURE__ */ new Date()).toDateString();
15705
+ return /* @__PURE__ */ jsx(
15706
+ TimeSlotCell,
15707
+ {
15708
+ time,
15709
+ isOccupied: slotEvents.length > 0,
15710
+ onClick: () => handleSlotClick(day, time),
15711
+ className: cn(
15712
+ "border-l border-border",
15713
+ isToday && "bg-blue-50/30"
15714
+ ),
15715
+ ...longPressEvent ? {
15716
+ onPointerDown: () => startLongPress(day, time),
15717
+ onPointerUp: clearLongPress,
15718
+ onPointerCancel: clearLongPress
15719
+ } : {},
15720
+ children: /* @__PURE__ */ jsx(VStack, { gap: "xs", children: slotEvents.map(renderEvent) })
15721
+ },
15722
+ `${day.toISOString()}-${time}`
15723
+ );
15724
+ })
15725
+ ]
15726
+ },
15727
+ time
15728
+ )) })
15729
+ ] })
15730
+ ]
15633
15731
  }
15634
15732
  );
15635
15733
  }
15734
+ var SHORT_DATE;
15636
15735
  var init_CalendarGrid = __esm({
15637
15736
  "components/molecules/CalendarGrid.tsx"() {
15638
15737
  "use client";
15639
15738
  init_cn();
15640
15739
  init_Box();
15740
+ init_Button();
15641
15741
  init_Stack();
15642
15742
  init_Typography();
15643
15743
  init_Badge();
@@ -15645,6 +15745,7 @@ var init_CalendarGrid = __esm({
15645
15745
  init_TimeSlotCell();
15646
15746
  init_useEventBus();
15647
15747
  init_useSwipeGesture();
15748
+ SHORT_DATE = { month: "short", day: "numeric" };
15648
15749
  CalendarGrid.displayName = "CalendarGrid";
15649
15750
  }
15650
15751
  });
@@ -18852,9 +18953,9 @@ var init_Tabs = __esm({
18852
18953
  className
18853
18954
  }) => {
18854
18955
  const rawItems = items ?? tabs ?? [];
18855
- const safeItems = rawItems.map((item) => ({
18856
- ...item,
18857
- id: item.id || item.value || ""
18956
+ const safeItems = rawItems.map(({ id, value, ...rest }) => ({
18957
+ ...rest,
18958
+ id: id || value || ""
18858
18959
  }));
18859
18960
  const eventBus = useEventBus();
18860
18961
  const { t } = useTranslate();
@@ -18923,7 +19024,12 @@ var init_Tabs = __esm({
18923
19024
  role: "tablist",
18924
19025
  className: cn(
18925
19026
  "flex",
18926
- orientation === "horizontal" ? "flex-row border-b-[length:var(--border-width)] border-border" : "flex-col border-r-[length:var(--border-width)] border-border",
19027
+ // Horizontal tab strip becomes a horizontally-scrollable lane
19028
+ // below its container width — phones with many tabs scroll
19029
+ // instead of clipping. `snap-x` snaps to each tab; the
19030
+ // scrollbar is hidden for a cleaner affordance (the swipe
19031
+ // gesture is the discoverability cue).
19032
+ orientation === "horizontal" ? "flex-row border-b-[length:var(--border-width)] border-border overflow-x-auto snap-x snap-mandatory [&::-webkit-scrollbar]:hidden" : "flex-col border-r-[length:var(--border-width)] border-border",
18927
19033
  variant === "pills" && "gap-1 p-1 bg-muted border-0 rounded-md",
18928
19034
  variant === "underline" && orientation === "vertical" && "border-b-0"
18929
19035
  ),
@@ -18945,7 +19051,8 @@ var init_Tabs = __esm({
18945
19051
  onKeyDown: (e) => handleKeyDown(e, index),
18946
19052
  "data-active": isActive,
18947
19053
  className: cn(
18948
- "flex items-center gap-2 px-4 py-2 text-sm font-medium transition-all",
19054
+ "flex items-center gap-2 px-4 py-2 text-sm font-medium transition-all whitespace-nowrap",
19055
+ orientation === "horizontal" && "snap-start shrink-0",
18949
19056
  "focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",
18950
19057
  isDisabled && "opacity-50 cursor-not-allowed",
18951
19058
  variantClasses2[variant],
@@ -19842,7 +19949,7 @@ function CraftingRecipe({
19842
19949
  className
19843
19950
  }) {
19844
19951
  const eventBus = useEventBus();
19845
- const handleCraft = React75.useCallback(() => {
19952
+ const handleCraft = React78.useCallback(() => {
19846
19953
  onCraft?.();
19847
19954
  if (craftEvent) {
19848
19955
  eventBus.emit(craftEvent, { output: output.label });
@@ -19859,7 +19966,7 @@ function CraftingRecipe({
19859
19966
  children: [
19860
19967
  /* @__PURE__ */ jsx(HStack, { gap: "xs", className: "flex-wrap items-center", children: inputs.map((ingredient, index) => {
19861
19968
  const hasSufficient = ingredient.available >= ingredient.required;
19862
- return /* @__PURE__ */ jsxs(React75.Fragment, { children: [
19969
+ return /* @__PURE__ */ jsxs(React78.Fragment, { children: [
19863
19970
  /* @__PURE__ */ jsx(Box, { className: "relative", children: /* @__PURE__ */ jsx(
19864
19971
  ItemSlot,
19865
19972
  {
@@ -19922,8 +20029,8 @@ function DPad({
19922
20029
  }) {
19923
20030
  const eventBus = useEventBus();
19924
20031
  const sizes = sizeMap6[size];
19925
- const [activeDirections, setActiveDirections] = React75.useState(/* @__PURE__ */ new Set());
19926
- const handlePress = React75.useCallback(
20032
+ const [activeDirections, setActiveDirections] = React78.useState(/* @__PURE__ */ new Set());
20033
+ const handlePress = React78.useCallback(
19927
20034
  (direction) => {
19928
20035
  setActiveDirections((prev) => new Set(prev).add(direction));
19929
20036
  if (directionEvent) eventBus.emit(`UI:${directionEvent}`, { direction, pressed: true });
@@ -19931,7 +20038,7 @@ function DPad({
19931
20038
  },
19932
20039
  [directionEvent, eventBus, onDirection]
19933
20040
  );
19934
- const handleRelease = React75.useCallback(
20041
+ const handleRelease = React78.useCallback(
19935
20042
  (direction) => {
19936
20043
  setActiveDirections((prev) => {
19937
20044
  const next = new Set(prev);
@@ -20190,12 +20297,12 @@ var init_DashboardLayout = __esm({
20190
20297
  HStack,
20191
20298
  {
20192
20299
  gap: "none",
20193
- className: "min-h-screen w-full bg-background dark:bg-background items-stretch",
20300
+ className: "@container/dashboard min-h-screen w-full bg-background dark:bg-background items-stretch",
20194
20301
  children: [
20195
20302
  sidebarOpen && /* @__PURE__ */ jsx(
20196
20303
  Box,
20197
20304
  {
20198
- className: "fixed inset-0 bg-foreground/50 dark:bg-foreground/70 z-20 lg:hidden",
20305
+ className: "fixed inset-0 bg-foreground/50 dark:bg-foreground/70 z-20 @lg/dashboard:hidden",
20199
20306
  onClick: () => setSidebarOpen(false)
20200
20307
  }
20201
20308
  ),
@@ -20205,7 +20312,7 @@ var init_DashboardLayout = __esm({
20205
20312
  as: "aside",
20206
20313
  className: cn(
20207
20314
  "z-30 w-64 flex-shrink-0 bg-card dark:bg-card border-r border-border dark:border-border",
20208
- "fixed inset-y-0 left-0 lg:static lg:translate-x-0 lg:h-auto",
20315
+ "fixed inset-y-0 left-0 @lg/dashboard:static @lg/dashboard:translate-x-0 @lg/dashboard:h-auto",
20209
20316
  "transform transition-transform duration-200 ease-in-out",
20210
20317
  "flex flex-col",
20211
20318
  sidebarOpen ? "translate-x-0" : "-translate-x-full"
@@ -20242,7 +20349,7 @@ var init_DashboardLayout = __esm({
20242
20349
  Button,
20243
20350
  {
20244
20351
  variant: "ghost",
20245
- className: "lg:hidden p-2 rounded-md hover:bg-muted dark:hover:bg-muted text-muted-foreground dark:text-muted-foreground",
20352
+ className: "@lg/dashboard:hidden p-2 rounded-md hover:bg-muted dark:hover:bg-muted text-muted-foreground dark:text-muted-foreground",
20246
20353
  onClick: () => setSidebarOpen(false),
20247
20354
  children: /* @__PURE__ */ jsx(X, { className: "h-5 w-5" })
20248
20355
  }
@@ -20281,19 +20388,19 @@ var init_DashboardLayout = __esm({
20281
20388
  {
20282
20389
  align: "center",
20283
20390
  justify: "between",
20284
- className: "h-full px-3 sm:px-4 gap-2 sm:gap-4",
20391
+ className: "h-full px-3 @sm/dashboard:px-4 gap-2 @sm/dashboard:gap-4",
20285
20392
  children: [
20286
20393
  /* @__PURE__ */ jsx(
20287
20394
  Button,
20288
20395
  {
20289
20396
  variant: "ghost",
20290
- className: "lg:hidden p-2 rounded-md hover:bg-muted dark:hover:bg-muted text-muted-foreground dark:text-muted-foreground touch-manipulation min-h-[44px] min-w-[44px] flex items-center justify-center",
20397
+ className: "@lg/dashboard:hidden p-2 rounded-md hover:bg-muted dark:hover:bg-muted text-muted-foreground dark:text-muted-foreground touch-manipulation min-h-[44px] min-w-[44px] flex items-center justify-center",
20291
20398
  onClick: () => setSidebarOpen(true),
20292
20399
  "aria-label": "Open sidebar",
20293
20400
  children: /* @__PURE__ */ jsx(Menu$1, { className: "h-5 w-5" })
20294
20401
  }
20295
20402
  ),
20296
- searchEnabled && /* @__PURE__ */ jsx(Box, { className: "hidden sm:block flex-1 min-w-0 xl:max-w-md", children: /* @__PURE__ */ jsxs(Box, { className: "relative", children: [
20403
+ searchEnabled && /* @__PURE__ */ jsx(Box, { className: "hidden @sm/dashboard:block flex-1 min-w-0 @xl/dashboard:max-w-md", children: /* @__PURE__ */ jsxs(Box, { className: "relative", children: [
20297
20404
  /* @__PURE__ */ jsx(Search, { className: "absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-muted-foreground dark:text-muted-foreground" }),
20298
20405
  /* @__PURE__ */ jsx(
20299
20406
  Input,
@@ -20378,12 +20485,12 @@ var init_DashboardLayout = __esm({
20378
20485
  Typography,
20379
20486
  {
20380
20487
  variant: "small",
20381
- className: "hidden sm:block text-sm font-medium text-foreground dark:text-foreground",
20488
+ className: "hidden @sm/dashboard:block text-sm font-medium text-foreground dark:text-foreground",
20382
20489
  as: "span",
20383
20490
  children: user.name
20384
20491
  }
20385
20492
  ),
20386
- /* @__PURE__ */ jsx(ChevronDown, { className: "hidden sm:block h-4 w-4 text-muted-foreground dark:text-muted-foreground" })
20493
+ /* @__PURE__ */ jsx(ChevronDown, { className: "hidden @sm/dashboard:block h-4 w-4 text-muted-foreground dark:text-muted-foreground" })
20387
20494
  ]
20388
20495
  }
20389
20496
  ),
@@ -20440,7 +20547,7 @@ var init_DashboardLayout = __esm({
20440
20547
  )
20441
20548
  }
20442
20549
  ),
20443
- /* @__PURE__ */ jsx(Box, { as: "main", className: "flex-1 p-3 sm:p-4 md:p-6", children })
20550
+ /* @__PURE__ */ jsx(Box, { as: "main", className: "flex-1 p-3 @sm/dashboard:p-4 @md/dashboard:p-6", children })
20444
20551
  ] })
20445
20552
  ]
20446
20553
  }
@@ -20525,14 +20632,14 @@ function useDataDnd(args) {
20525
20632
  const isZone = Boolean(dragGroup || accepts || sortable);
20526
20633
  const enabled = isZone || Boolean(dndRoot);
20527
20634
  const eventBus = useEventBus();
20528
- const parentRoot = React75__default.useContext(RootCtx);
20635
+ const parentRoot = React78__default.useContext(RootCtx);
20529
20636
  const isRoot = enabled && parentRoot === null;
20530
- const zoneId = React75__default.useId();
20637
+ const zoneId = React78__default.useId();
20531
20638
  const ownGroup = dragGroup ?? accepts ?? zoneId;
20532
- const [optimisticOrders, setOptimisticOrders] = React75__default.useState(() => /* @__PURE__ */ new Map());
20533
- const optimisticOrdersRef = React75__default.useRef(optimisticOrders);
20639
+ const [optimisticOrders, setOptimisticOrders] = React78__default.useState(() => /* @__PURE__ */ new Map());
20640
+ const optimisticOrdersRef = React78__default.useRef(optimisticOrders);
20534
20641
  optimisticOrdersRef.current = optimisticOrders;
20535
- const clearOptimisticOrder = React75__default.useCallback((group) => {
20642
+ const clearOptimisticOrder = React78__default.useCallback((group) => {
20536
20643
  setOptimisticOrders((prev) => {
20537
20644
  if (!prev.has(group)) return prev;
20538
20645
  const next = new Map(prev);
@@ -20557,7 +20664,7 @@ function useDataDnd(args) {
20557
20664
  const raw = it[dndItemIdField];
20558
20665
  return String(raw ?? `__idx_${idx}`);
20559
20666
  }).join("|");
20560
- const itemIds = React75__default.useMemo(
20667
+ const itemIds = React78__default.useMemo(
20561
20668
  () => orderedItems.map((it, idx) => {
20562
20669
  const raw = it[dndItemIdField];
20563
20670
  return raw ?? `__idx_${idx}`;
@@ -20565,7 +20672,7 @@ function useDataDnd(args) {
20565
20672
  [itemIdsSignature]
20566
20673
  );
20567
20674
  const itemsContentSig = items.map((it, idx) => String(it[dndItemIdField] ?? `__${idx}`)).join("|");
20568
- React75__default.useEffect(() => {
20675
+ React78__default.useEffect(() => {
20569
20676
  const root = isRoot ? null : parentRoot;
20570
20677
  if (root) {
20571
20678
  root.clearOptimisticOrder(ownGroup);
@@ -20573,20 +20680,20 @@ function useDataDnd(args) {
20573
20680
  clearOptimisticOrder(ownGroup);
20574
20681
  }
20575
20682
  }, [itemsContentSig, ownGroup]);
20576
- const zonesRef = React75__default.useRef(/* @__PURE__ */ new Map());
20577
- const registerZone = React75__default.useCallback((zoneId2, meta2) => {
20683
+ const zonesRef = React78__default.useRef(/* @__PURE__ */ new Map());
20684
+ const registerZone = React78__default.useCallback((zoneId2, meta2) => {
20578
20685
  zonesRef.current.set(zoneId2, meta2);
20579
20686
  }, []);
20580
- const unregisterZone = React75__default.useCallback((zoneId2) => {
20687
+ const unregisterZone = React78__default.useCallback((zoneId2) => {
20581
20688
  zonesRef.current.delete(zoneId2);
20582
20689
  }, []);
20583
- const [activeDrag, setActiveDrag] = React75__default.useState(null);
20584
- const [overZoneGroup, setOverZoneGroup] = React75__default.useState(null);
20585
- const meta = React75__default.useMemo(
20690
+ const [activeDrag, setActiveDrag] = React78__default.useState(null);
20691
+ const [overZoneGroup, setOverZoneGroup] = React78__default.useState(null);
20692
+ const meta = React78__default.useMemo(
20586
20693
  () => ({ group: ownGroup, dropEvent, reorderEvent, positionEvent, itemIds, rawItems: items, idField: dndItemIdField }),
20587
20694
  [ownGroup, dropEvent, reorderEvent, positionEvent, itemIds, items, dndItemIdField]
20588
20695
  );
20589
- React75__default.useEffect(() => {
20696
+ React78__default.useEffect(() => {
20590
20697
  const target = isRoot ? null : parentRoot;
20591
20698
  if (!target) {
20592
20699
  zonesRef.current.set(zoneId, meta);
@@ -20605,7 +20712,7 @@ function useDataDnd(args) {
20605
20712
  }, [parentRoot, isRoot, zoneId, meta]);
20606
20713
  const sensors = useAlmadarDndSensors(true);
20607
20714
  const collisionDetection = almadarDndCollisionDetection;
20608
- const findZoneByItem = React75__default.useCallback(
20715
+ const findZoneByItem = React78__default.useCallback(
20609
20716
  (id) => {
20610
20717
  for (const z of zonesRef.current.values()) {
20611
20718
  if (z.itemIds.includes(id)) return z;
@@ -20614,7 +20721,7 @@ function useDataDnd(args) {
20614
20721
  },
20615
20722
  []
20616
20723
  );
20617
- React75__default.useCallback(
20724
+ React78__default.useCallback(
20618
20725
  (group) => {
20619
20726
  for (const z of zonesRef.current.values()) {
20620
20727
  if (z.group === group) return z;
@@ -20623,7 +20730,7 @@ function useDataDnd(args) {
20623
20730
  },
20624
20731
  []
20625
20732
  );
20626
- const handleDragEnd = React75__default.useCallback(
20733
+ const handleDragEnd = React78__default.useCallback(
20627
20734
  (event) => {
20628
20735
  const { active, over } = event;
20629
20736
  const activeIdStr = String(active.id);
@@ -20714,8 +20821,8 @@ function useDataDnd(args) {
20714
20821
  },
20715
20822
  [eventBus]
20716
20823
  );
20717
- const sortableData = React75__default.useMemo(() => ({ dndGroup: ownGroup }), [ownGroup]);
20718
- const SortableItem = React75__default.useCallback(
20824
+ const sortableData = React78__default.useMemo(() => ({ dndGroup: ownGroup }), [ownGroup]);
20825
+ const SortableItem = React78__default.useCallback(
20719
20826
  ({ id, children }) => {
20720
20827
  const {
20721
20828
  attributes,
@@ -20755,7 +20862,7 @@ function useDataDnd(args) {
20755
20862
  id: droppableId,
20756
20863
  data: sortableData
20757
20864
  });
20758
- const ctx = React75__default.useContext(RootCtx);
20865
+ const ctx = React78__default.useContext(RootCtx);
20759
20866
  const activeDrag2 = ctx?.activeDrag ?? null;
20760
20867
  const overZoneGroup2 = ctx?.overZoneGroup ?? null;
20761
20868
  const isThisZoneOver = overZoneGroup2 === ownGroup;
@@ -20770,7 +20877,7 @@ function useDataDnd(args) {
20770
20877
  showForeignPlaceholder,
20771
20878
  ctxAvailable: ctx != null
20772
20879
  });
20773
- React75__default.useEffect(() => {
20880
+ React78__default.useEffect(() => {
20774
20881
  dndLog.info("dropzone:isOver:change", { droppableId, group: ownGroup, isOver, isThisZoneOver, showForeignPlaceholder, activeDragSourceGroup: activeDrag2?.sourceGroup ?? null });
20775
20882
  }, [droppableId, isOver, isThisZoneOver, showForeignPlaceholder]);
20776
20883
  return /* @__PURE__ */ jsx(
@@ -20784,11 +20891,11 @@ function useDataDnd(args) {
20784
20891
  }
20785
20892
  );
20786
20893
  };
20787
- const rootContextValue = React75__default.useMemo(
20894
+ const rootContextValue = React78__default.useMemo(
20788
20895
  () => ({ registerZone, unregisterZone, activeDrag, overZoneGroup, optimisticOrders, clearOptimisticOrder }),
20789
20896
  [registerZone, unregisterZone, activeDrag, overZoneGroup, optimisticOrders, clearOptimisticOrder]
20790
20897
  );
20791
- const handleDragStart = React75__default.useCallback((event) => {
20898
+ const handleDragStart = React78__default.useCallback((event) => {
20792
20899
  const sourceZone = findZoneByItem(event.active.id);
20793
20900
  const rect = event.active.rect.current.initial;
20794
20901
  const height = rect?.height && rect.height > 0 ? rect.height : 64;
@@ -20807,7 +20914,7 @@ function useDataDnd(args) {
20807
20914
  isRoot
20808
20915
  });
20809
20916
  }, [findZoneByItem, isRoot, zoneId]);
20810
- const handleDragOver = React75__default.useCallback((event) => {
20917
+ const handleDragOver = React78__default.useCallback((event) => {
20811
20918
  const { active, over } = event;
20812
20919
  const overData = over?.data?.current;
20813
20920
  const overGroup = overData?.dndGroup ?? null;
@@ -20877,7 +20984,7 @@ function useDataDnd(args) {
20877
20984
  return next;
20878
20985
  });
20879
20986
  }, []);
20880
- const handleDragCancel = React75__default.useCallback((event) => {
20987
+ const handleDragCancel = React78__default.useCallback((event) => {
20881
20988
  setActiveDrag(null);
20882
20989
  setOverZoneGroup(null);
20883
20990
  dndLog.warn("dragCancel", {
@@ -20885,12 +20992,12 @@ function useDataDnd(args) {
20885
20992
  reason: "dnd-kit cancelled the drag (escape key, pointer interrupted, or external)"
20886
20993
  });
20887
20994
  }, []);
20888
- const handleDragEndWithCleanup = React75__default.useCallback((event) => {
20995
+ const handleDragEndWithCleanup = React78__default.useCallback((event) => {
20889
20996
  handleDragEnd(event);
20890
20997
  setActiveDrag(null);
20891
20998
  setOverZoneGroup(null);
20892
20999
  }, [handleDragEnd]);
20893
- const wrapContainer = React75__default.useCallback(
21000
+ const wrapContainer = React78__default.useCallback(
20894
21001
  (children) => {
20895
21002
  if (!enabled) return children;
20896
21003
  const strategy = layout === "grid" ? rectSortingStrategy : verticalListSortingStrategy;
@@ -20944,7 +21051,7 @@ var init_useDataDnd = __esm({
20944
21051
  init_useAlmadarDndCollision();
20945
21052
  init_Box();
20946
21053
  dndLog = createLogger("almadar:ui:dnd");
20947
- RootCtx = React75__default.createContext(null);
21054
+ RootCtx = React78__default.createContext(null);
20948
21055
  }
20949
21056
  });
20950
21057
  function fieldLabel2(key) {
@@ -21433,7 +21540,7 @@ function DataList({
21433
21540
  }) {
21434
21541
  const eventBus = useEventBus();
21435
21542
  const { t } = useTranslate();
21436
- const [visibleCount, setVisibleCount] = React75__default.useState(pageSize || Infinity);
21543
+ const [visibleCount, setVisibleCount] = React78__default.useState(pageSize || Infinity);
21437
21544
  const fieldDefs = fields ?? columns ?? [];
21438
21545
  const allDataRaw = Array.isArray(entity) ? entity : entity ? [entity] : [];
21439
21546
  const dnd = useDataDnd({
@@ -21452,7 +21559,7 @@ function DataList({
21452
21559
  const data = pageSize > 0 ? allData.slice(0, visibleCount) : allData;
21453
21560
  const hasMoreLocal = pageSize > 0 && visibleCount < allData.length;
21454
21561
  const hasRenderProp = typeof children === "function";
21455
- React75__default.useEffect(() => {
21562
+ React78__default.useEffect(() => {
21456
21563
  const renderItemTypeOf = typeof schemaRenderItem;
21457
21564
  const childrenTypeOf = typeof children;
21458
21565
  if (data.length > 0 && !hasRenderProp) {
@@ -21509,7 +21616,7 @@ function DataList({
21509
21616
  const items2 = data.map((item) => item);
21510
21617
  const groups2 = groupBy ? groupData(items2, groupBy) : [{ label: "", items: items2 }];
21511
21618
  const contentField = titleField?.name ?? fieldDefs[0]?.name ?? "";
21512
- return /* @__PURE__ */ jsx(VStack, { gap: "sm", className: cn("py-2", className), children: groups2.map((group, gi) => /* @__PURE__ */ jsxs(React75__default.Fragment, { children: [
21619
+ return /* @__PURE__ */ jsx(VStack, { gap: "sm", className: cn("py-2", className), children: groups2.map((group, gi) => /* @__PURE__ */ jsxs(React78__default.Fragment, { children: [
21513
21620
  group.label && /* @__PURE__ */ jsx(Divider, { label: group.label, className: "my-2" }),
21514
21621
  group.items.map((itemData, index) => {
21515
21622
  const id = itemData.id || `${gi}-${index}`;
@@ -21697,7 +21804,7 @@ function DataList({
21697
21804
  className
21698
21805
  ),
21699
21806
  children: [
21700
- groups.map((group, gi) => /* @__PURE__ */ jsxs(React75__default.Fragment, { children: [
21807
+ groups.map((group, gi) => /* @__PURE__ */ jsxs(React78__default.Fragment, { children: [
21701
21808
  group.label && /* @__PURE__ */ jsx(Divider, { label: group.label, className: gi > 0 ? "mt-4" : "mt-0" }),
21702
21809
  group.items.map(
21703
21810
  (itemData, index) => renderItem(itemData, index, gi === groups.length - 1 && index === group.items.length - 1)
@@ -22934,6 +23041,8 @@ var SidePanel;
22934
23041
  var init_SidePanel = __esm({
22935
23042
  "components/molecules/SidePanel.tsx"() {
22936
23043
  "use client";
23044
+ init_Aside();
23045
+ init_Box();
22937
23046
  init_Button();
22938
23047
  init_Typography();
22939
23048
  init_cn();
@@ -22943,7 +23052,7 @@ var init_SidePanel = __esm({
22943
23052
  children,
22944
23053
  isOpen,
22945
23054
  onClose,
22946
- width = "w-96",
23055
+ width = "w-full sm:w-96",
22947
23056
  position = "right",
22948
23057
  showOverlay = true,
22949
23058
  className,
@@ -22957,14 +23066,14 @@ var init_SidePanel = __esm({
22957
23066
  if (!isOpen) return null;
22958
23067
  return /* @__PURE__ */ jsxs(Fragment, { children: [
22959
23068
  showOverlay && /* @__PURE__ */ jsx(
22960
- "div",
23069
+ Box,
22961
23070
  {
22962
23071
  className: "fixed inset-0 bg-white/80 backdrop-blur-sm z-40 lg:hidden",
22963
23072
  onClick: handleClose
22964
23073
  }
22965
23074
  ),
22966
23075
  /* @__PURE__ */ jsxs(
22967
- "aside",
23076
+ Aside,
22968
23077
  {
22969
23078
  className: cn(
22970
23079
  "fixed top-16 lg:top-0 bottom-0 z-[60]",
@@ -22978,7 +23087,7 @@ var init_SidePanel = __esm({
22978
23087
  className
22979
23088
  ),
22980
23089
  children: [
22981
- /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between p-4 border-b-2 border-border sticky top-0 bg-card z-10", children: [
23090
+ /* @__PURE__ */ jsxs(Box, { className: "flex items-center justify-between p-4 border-b-2 border-border sticky top-0 bg-card z-10", children: [
22982
23091
  /* @__PURE__ */ jsx(Typography, { variant: "h6", children: title }),
22983
23092
  /* @__PURE__ */ jsx(
22984
23093
  Button,
@@ -22988,11 +23097,11 @@ var init_SidePanel = __esm({
22988
23097
  icon: X,
22989
23098
  onClick: handleClose,
22990
23099
  "aria-label": "Close panel",
22991
- children: /* @__PURE__ */ jsx("span", { className: "sr-only", children: "Close" })
23100
+ children: /* @__PURE__ */ jsx(Typography, { variant: "small", as: "span", className: "sr-only", children: "Close" })
22992
23101
  }
22993
23102
  )
22994
23103
  ] }),
22995
- /* @__PURE__ */ jsx("div", { className: "p-4 flex-1 overflow-y-auto", children })
23104
+ /* @__PURE__ */ jsx(Box, { className: "p-4 flex-1 overflow-y-auto", children })
22996
23105
  ]
22997
23106
  }
22998
23107
  )
@@ -23043,7 +23152,7 @@ var init_WizardProgress = __esm({
23043
23152
  children: /* @__PURE__ */ jsx("div", { className: "flex items-center gap-2", children: normalizedSteps.map((step, index) => {
23044
23153
  const isActive = index === currentStep;
23045
23154
  const isCompleted = index < currentStep;
23046
- return /* @__PURE__ */ jsxs(React75__default.Fragment, { children: [
23155
+ return /* @__PURE__ */ jsxs(React78__default.Fragment, { children: [
23047
23156
  /* @__PURE__ */ jsx(
23048
23157
  "button",
23049
23158
  {
@@ -23168,7 +23277,9 @@ var init_WizardNavigation = __esm({
23168
23277
  {
23169
23278
  border: true,
23170
23279
  className: cn(
23171
- "border-t-2 border-x-0 border-b-0 border-border flex justify-between items-center",
23280
+ // `flex-wrap gap-2` lets the Back / Step / Next trio reflow on
23281
+ // narrow viewports rather than crushing the step counter.
23282
+ "border-t-2 border-x-0 border-b-0 border-border flex flex-wrap gap-2 justify-between items-center",
23172
23283
  compact ? "px-4 py-2" : "px-6 py-4",
23173
23284
  className
23174
23285
  ),
@@ -24088,9 +24199,9 @@ function ScoreDisplay({
24088
24199
  ...rest
24089
24200
  }) {
24090
24201
  const resolvedValue = typeof value === "number" && !Number.isNaN(value) ? value : typeof rest.score === "number" && !Number.isNaN(rest.score) ? rest.score : 0;
24091
- const [displayValue, setDisplayValue] = React75.useState(resolvedValue);
24092
- const [isAnimating, setIsAnimating] = React75.useState(false);
24093
- React75.useEffect(() => {
24202
+ const [displayValue, setDisplayValue] = React78.useState(resolvedValue);
24203
+ const [isAnimating, setIsAnimating] = React78.useState(false);
24204
+ React78.useEffect(() => {
24094
24205
  if (!animated || displayValue === resolvedValue) {
24095
24206
  setDisplayValue(resolvedValue);
24096
24207
  return;
@@ -24240,7 +24351,7 @@ function InventoryGrid({
24240
24351
  const eventBus = useEventBus();
24241
24352
  const slotCount = totalSlots ?? items.length;
24242
24353
  const emptySlotCount = Math.max(0, slotCount - items.length);
24243
- const handleSelect = React75.useCallback(
24354
+ const handleSelect = React78.useCallback(
24244
24355
  (id) => {
24245
24356
  onSelect?.(id);
24246
24357
  if (selectEvent) {
@@ -24522,15 +24633,15 @@ function GameCanvas2D({
24522
24633
  fps = 60,
24523
24634
  className
24524
24635
  }) {
24525
- const canvasRef = React75.useRef(null);
24526
- const rafRef = React75.useRef(0);
24527
- const frameRef = React75.useRef(0);
24528
- const lastTimeRef = React75.useRef(0);
24529
- const onDrawRef = React75.useRef(onDraw);
24636
+ const canvasRef = React78.useRef(null);
24637
+ const rafRef = React78.useRef(0);
24638
+ const frameRef = React78.useRef(0);
24639
+ const lastTimeRef = React78.useRef(0);
24640
+ const onDrawRef = React78.useRef(onDraw);
24530
24641
  onDrawRef.current = onDraw;
24531
- const onTickRef = React75.useRef(onTick);
24642
+ const onTickRef = React78.useRef(onTick);
24532
24643
  onTickRef.current = onTick;
24533
- React75.useEffect(() => {
24644
+ React78.useEffect(() => {
24534
24645
  const canvas = canvasRef.current;
24535
24646
  if (!canvas) return;
24536
24647
  const ctx = canvas.getContext("2d");
@@ -24871,7 +24982,7 @@ function TurnPanel({
24871
24982
  className
24872
24983
  }) {
24873
24984
  const eventBus = useEventBus();
24874
- const handleAction = React75.useCallback(
24985
+ const handleAction = React78.useCallback(
24875
24986
  (event) => {
24876
24987
  if (event) {
24877
24988
  eventBus.emit(event, { turn: currentTurn, phase, activeTeam });
@@ -25017,7 +25128,7 @@ function UnitCommandBar({
25017
25128
  className
25018
25129
  }) {
25019
25130
  const eventBus = useEventBus();
25020
- const handleCommand = React75.useCallback(
25131
+ const handleCommand = React78.useCallback(
25021
25132
  (event) => {
25022
25133
  if (event) {
25023
25134
  eventBus.emit(event, { unitId: selectedUnitId });
@@ -25502,7 +25613,7 @@ function GameMenu({
25502
25613
  } catch {
25503
25614
  }
25504
25615
  const eventBus = eventBusProp || eventBusFromHook;
25505
- const handleOptionClick = React75.useCallback(
25616
+ const handleOptionClick = React78.useCallback(
25506
25617
  (option) => {
25507
25618
  if (option.event && eventBus) {
25508
25619
  eventBus.emit(`UI:${option.event}`, { option });
@@ -25616,7 +25727,7 @@ function GameOverScreen({
25616
25727
  } catch {
25617
25728
  }
25618
25729
  const eventBus = eventBusProp || eventBusFromHook;
25619
- const handleActionClick = React75.useCallback(
25730
+ const handleActionClick = React78.useCallback(
25620
25731
  (action) => {
25621
25732
  if (action.event && eventBus) {
25622
25733
  eventBus.emit(`UI:${action.event}`, { action });
@@ -28285,7 +28396,16 @@ var init_StepFlow = __esm({
28285
28396
  "flex items-center justify-center",
28286
28397
  "bg-primary text-primary-foreground"
28287
28398
  ),
28288
- children: /* @__PURE__ */ jsx("span", { className: "font-semibold text-sm text-primary-foreground leading-none", children: step.number ?? index + 1 })
28399
+ children: /* @__PURE__ */ jsx(
28400
+ Typography,
28401
+ {
28402
+ as: "span",
28403
+ variant: "small",
28404
+ weight: "semibold",
28405
+ className: "text-primary-foreground leading-none",
28406
+ children: step.number ?? index + 1
28407
+ }
28408
+ )
28289
28409
  }
28290
28410
  );
28291
28411
  };
@@ -28297,7 +28417,7 @@ var init_StepFlow = __esm({
28297
28417
  className
28298
28418
  }) => {
28299
28419
  if (orientation === "vertical") {
28300
- return /* @__PURE__ */ jsx(VStack, { gap: "none", className: cn("w-full", className), children: steps.map((step, index) => /* @__PURE__ */ jsx(React75__default.Fragment, { children: /* @__PURE__ */ jsxs(HStack, { gap: "md", align: "start", className: "w-full", children: [
28420
+ return /* @__PURE__ */ jsx(VStack, { gap: "none", className: cn("w-full", className), children: steps.map((step, index) => /* @__PURE__ */ jsx(React78__default.Fragment, { children: /* @__PURE__ */ jsxs(HStack, { gap: "md", align: "start", className: "w-full", children: [
28301
28421
  /* @__PURE__ */ jsxs(VStack, { gap: "none", align: "center", children: [
28302
28422
  /* @__PURE__ */ jsx(StepCircle, { step, index }),
28303
28423
  showConnectors && index < steps.length - 1 && /* @__PURE__ */ jsx(Box, { className: "w-px h-8 bg-border" })
@@ -28308,7 +28428,7 @@ var init_StepFlow = __esm({
28308
28428
  ] })
28309
28429
  ] }) }, index)) });
28310
28430
  }
28311
- return /* @__PURE__ */ jsx(Box, { className: cn("w-full flex flex-col md:flex-row items-start gap-0", className), children: steps.map((step, index) => /* @__PURE__ */ jsxs(React75__default.Fragment, { children: [
28431
+ return /* @__PURE__ */ jsx(Box, { className: cn("w-full flex flex-col md:flex-row items-start gap-0", className), children: steps.map((step, index) => /* @__PURE__ */ jsxs(React78__default.Fragment, { children: [
28312
28432
  /* @__PURE__ */ jsxs(VStack, { gap: "sm", align: "center", className: "flex-1 w-full md:w-auto", children: [
28313
28433
  /* @__PURE__ */ jsx(StepCircle, { step, index }),
28314
28434
  /* @__PURE__ */ jsx(Typography, { variant: "h4", className: "text-center", children: step.title }),
@@ -28376,9 +28496,9 @@ var init_SplitSection = __esm({
28376
28496
  className
28377
28497
  ),
28378
28498
  padding: "lg",
28379
- children: /* @__PURE__ */ jsxs(Box, { className: cn("w-full flex flex-col lg:flex-row gap-10 lg:gap-16 items-center", isImageLeft && "lg:flex-row-reverse"), children: [
28380
- /* @__PURE__ */ jsx(Box, { className: "flex-1 min-w-0 lg:min-w-[45%]", children: textContent }),
28381
- /* @__PURE__ */ jsx(Box, { className: "flex-1 min-w-0 lg:max-w-[50%]", children: mediaContent })
28499
+ children: /* @__PURE__ */ jsxs(Box, { className: cn("w-full flex flex-col md:flex-row gap-8 md:gap-12 lg:gap-16 items-center", isImageLeft && "md:flex-row-reverse"), children: [
28500
+ /* @__PURE__ */ jsx(Box, { className: "flex-1 min-w-0 md:min-w-[45%]", children: textContent }),
28501
+ /* @__PURE__ */ jsx(Box, { className: "flex-1 min-w-0 md:max-w-[50%]", children: mediaContent })
28382
28502
  ] })
28383
28503
  }
28384
28504
  );
@@ -29190,7 +29310,7 @@ var init_LikertScale = __esm({
29190
29310
  md: "text-base",
29191
29311
  lg: "text-lg"
29192
29312
  };
29193
- LikertScale = React75__default.forwardRef(
29313
+ LikertScale = React78__default.forwardRef(
29194
29314
  ({
29195
29315
  question,
29196
29316
  options = DEFAULT_LIKERT_OPTIONS,
@@ -29202,7 +29322,7 @@ var init_LikertScale = __esm({
29202
29322
  variant = "radios",
29203
29323
  className
29204
29324
  }, ref) => {
29205
- const groupId = React75__default.useId();
29325
+ const groupId = React78__default.useId();
29206
29326
  const eventBus = useEventBus();
29207
29327
  const handleSelect = useCallback(
29208
29328
  (next) => {
@@ -30010,64 +30130,68 @@ var init_PositionedCanvas = __esm({
30010
30130
  },
30011
30131
  [onSelect, selectEvent, eventBus]
30012
30132
  );
30013
- return /* @__PURE__ */ jsx(
30014
- Box,
30015
- {
30016
- ref: containerRef,
30017
- "data-testid": "positioned-canvas",
30018
- className: cn(
30019
- "relative bg-background border border-border rounded-md overflow-hidden",
30020
- className
30021
- ),
30022
- style: { width, height },
30023
- onClick: handleContainerClick,
30024
- children: items.map((item) => {
30025
- const status = item.status ?? "empty";
30026
- const shape = item.shape ?? "round";
30027
- const isSelected = selectedId === item.id;
30028
- const isDragging = draggingId === item.id;
30029
- const statusBadge = STATUS_BADGE[status];
30030
- return /* @__PURE__ */ jsxs(
30031
- Box,
30032
- {
30033
- "data-testid": `item-node-${item.id}`,
30034
- "data-status": status,
30035
- className: cn(
30036
- "absolute flex flex-col items-center justify-center gap-1 border-2 select-none",
30037
- "transition-shadow",
30038
- STATUS_CLASSES[status],
30039
- getShapeClasses(shape),
30040
- editable ? "cursor-move" : "cursor-pointer",
30041
- isSelected && "outline outline-2 outline-offset-2 outline-primary shadow-md",
30042
- isDragging && "shadow-lg z-10"
30043
- ),
30044
- style: { left: item.x, top: item.y, touchAction: "none" },
30045
- onPointerDown: (e) => handlePointerDown(e, item),
30046
- onPointerMove: handlePointerMove,
30047
- onPointerUp: (e) => handlePointerUp(e, item),
30048
- onPointerCancel: (e) => handlePointerUp(e, item),
30049
- children: [
30050
- /* @__PURE__ */ jsxs(Box, { className: "flex items-center gap-1", children: [
30051
- getStatusIcon(status),
30052
- /* @__PURE__ */ jsx(Typography, { variant: "body2", weight: "semibold", children: item.label })
30053
- ] }),
30054
- /* @__PURE__ */ jsx(Typography, { variant: "caption", color: "secondary", children: item.partySize !== void 0 && status === "seated" ? `${item.partySize}/${item.capacity}` : `Cap ${item.capacity}` }),
30055
- status === "seated" && item.serverName && /* @__PURE__ */ jsx(Typography, { variant: "caption", color: "secondary", className: "truncate max-w-[80%]", children: item.serverName }),
30056
- isSelected && /* @__PURE__ */ jsx(
30057
- Badge,
30058
- {
30059
- variant: statusBadge.variant,
30060
- size: "sm",
30061
- className: "absolute -top-2 -right-2",
30062
- children: statusBadge.label
30063
- }
30064
- )
30065
- ]
30066
- },
30067
- item.id
30068
- );
30069
- })
30070
- }
30133
+ return (
30134
+ // Outer scroll viewport: caps the visual footprint to the parent's
30135
+ // available width on small screens. The inner plane keeps its fixed
30136
+ // {width × height} coordinate system (items are positioned by
30137
+ // absolute item.x/item.y), so a phone-sized viewport pans inside
30138
+ // the larger logical canvas rather than busting the layout.
30139
+ /* @__PURE__ */ jsx(Box, { className: cn("max-w-full overflow-auto rounded-md", className), children: /* @__PURE__ */ jsx(
30140
+ Box,
30141
+ {
30142
+ ref: containerRef,
30143
+ "data-testid": "positioned-canvas",
30144
+ className: "relative bg-background border border-border rounded-md overflow-hidden",
30145
+ style: { width, height },
30146
+ onClick: handleContainerClick,
30147
+ children: items.map((item) => {
30148
+ const status = item.status ?? "empty";
30149
+ const shape = item.shape ?? "round";
30150
+ const isSelected = selectedId === item.id;
30151
+ const isDragging = draggingId === item.id;
30152
+ const statusBadge = STATUS_BADGE[status];
30153
+ return /* @__PURE__ */ jsxs(
30154
+ Box,
30155
+ {
30156
+ "data-testid": `item-node-${item.id}`,
30157
+ "data-status": status,
30158
+ className: cn(
30159
+ "absolute flex flex-col items-center justify-center gap-1 border-2 select-none",
30160
+ "transition-shadow",
30161
+ STATUS_CLASSES[status],
30162
+ getShapeClasses(shape),
30163
+ editable ? "cursor-move" : "cursor-pointer",
30164
+ isSelected && "outline outline-2 outline-offset-2 outline-primary shadow-md",
30165
+ isDragging && "shadow-lg z-10"
30166
+ ),
30167
+ style: { left: item.x, top: item.y, touchAction: "none" },
30168
+ onPointerDown: (e) => handlePointerDown(e, item),
30169
+ onPointerMove: handlePointerMove,
30170
+ onPointerUp: (e) => handlePointerUp(e, item),
30171
+ onPointerCancel: (e) => handlePointerUp(e, item),
30172
+ children: [
30173
+ /* @__PURE__ */ jsxs(Box, { className: "flex items-center gap-1", children: [
30174
+ getStatusIcon(status),
30175
+ /* @__PURE__ */ jsx(Typography, { variant: "body2", weight: "semibold", children: item.label })
30176
+ ] }),
30177
+ /* @__PURE__ */ jsx(Typography, { variant: "caption", color: "secondary", children: item.partySize !== void 0 && status === "seated" ? `${item.partySize}/${item.capacity}` : `Cap ${item.capacity}` }),
30178
+ status === "seated" && item.serverName && /* @__PURE__ */ jsx(Typography, { variant: "caption", color: "secondary", className: "truncate max-w-[80%]", children: item.serverName }),
30179
+ isSelected && /* @__PURE__ */ jsx(
30180
+ Badge,
30181
+ {
30182
+ variant: statusBadge.variant,
30183
+ size: "sm",
30184
+ className: "absolute -top-2 -right-2",
30185
+ children: statusBadge.label
30186
+ }
30187
+ )
30188
+ ]
30189
+ },
30190
+ item.id
30191
+ );
30192
+ })
30193
+ }
30194
+ ) })
30071
30195
  );
30072
30196
  };
30073
30197
  PositionedCanvas.displayName = "PositionedCanvas";
@@ -31206,7 +31330,7 @@ var init_VersionDiff = __esm({
31206
31330
  /* @__PURE__ */ jsxs(HStack, { gap: "sm", align: "center", className: "flex-wrap", children: [
31207
31331
  /* @__PURE__ */ jsx(Icon, { icon: GitCommit, size: "sm", className: "text-muted-foreground" }),
31208
31332
  /* @__PURE__ */ jsx(Typography, { variant: "small", weight: "medium", className: "whitespace-nowrap", children: "Compare" }),
31209
- /* @__PURE__ */ jsx(Box, { className: "min-w-[160px]", children: /* @__PURE__ */ jsx(
31333
+ /* @__PURE__ */ jsx(Box, { className: "min-w-0 md:min-w-[160px]", children: /* @__PURE__ */ jsx(
31210
31334
  Select,
31211
31335
  {
31212
31336
  options,
@@ -31216,7 +31340,7 @@ var init_VersionDiff = __esm({
31216
31340
  }
31217
31341
  ) }),
31218
31342
  /* @__PURE__ */ jsx(Typography, { variant: "caption", color: "secondary", children: "to" }),
31219
- /* @__PURE__ */ jsx(Box, { className: "min-w-[160px]", children: /* @__PURE__ */ jsx(
31343
+ /* @__PURE__ */ jsx(Box, { className: "min-w-0 md:min-w-[160px]", children: /* @__PURE__ */ jsx(
31220
31344
  Select,
31221
31345
  {
31222
31346
  options,
@@ -31281,8 +31405,8 @@ var init_VersionDiff = __esm({
31281
31405
  ]
31282
31406
  }
31283
31407
  ),
31284
- /* @__PURE__ */ jsx(Box, { className: "overflow-auto bg-muted/20", style: { maxHeight: 600 }, children: activeView === "side-by-side" ? /* @__PURE__ */ jsxs(Box, { className: "grid grid-cols-2", children: [
31285
- /* @__PURE__ */ jsx(Box, { className: "border-r border-border", children: /* @__PURE__ */ jsx(VStack, { gap: "none", className: "font-mono text-xs", children: beforeLines.map((line, idx) => {
31408
+ /* @__PURE__ */ jsx(Box, { className: "overflow-auto bg-muted/20", style: { maxHeight: 600 }, children: activeView === "side-by-side" ? /* @__PURE__ */ jsxs(Box, { className: "grid grid-cols-1 md:grid-cols-2", children: [
31409
+ /* @__PURE__ */ jsx(Box, { className: "border-b md:border-b-0 md:border-r border-border", children: /* @__PURE__ */ jsx(VStack, { gap: "none", className: "font-mono text-xs", children: beforeLines.map((line, idx) => {
31286
31410
  const isRemoved = line.type === "removed";
31287
31411
  return /* @__PURE__ */ jsxs(
31288
31412
  HStack,
@@ -31428,7 +31552,7 @@ var init_DocBreadcrumb = __esm({
31428
31552
  "aria-label": "Breadcrumb",
31429
31553
  children: /* @__PURE__ */ jsx(HStack, { gap: "xs", align: "center", wrap: true, children: items.map((item, idx) => {
31430
31554
  const isLast = idx === items.length - 1;
31431
- return /* @__PURE__ */ jsxs(React75__default.Fragment, { children: [
31555
+ return /* @__PURE__ */ jsxs(React78__default.Fragment, { children: [
31432
31556
  idx > 0 && /* @__PURE__ */ jsx(
31433
31557
  Icon,
31434
31558
  {
@@ -32318,7 +32442,7 @@ var init_MiniStateMachine = __esm({
32318
32442
  const x = 2 + i * (NODE_W + GAP + ARROW_W + GAP);
32319
32443
  const tc = transitionCounts[s.name] ?? 0;
32320
32444
  const role = getStateRole(s.name, s.isInitial, s.isTerminal, tc, maxTC);
32321
- return /* @__PURE__ */ jsxs(React75__default.Fragment, { children: [
32445
+ return /* @__PURE__ */ jsxs(React78__default.Fragment, { children: [
32322
32446
  /* @__PURE__ */ jsx(
32323
32447
  AvlState,
32324
32448
  {
@@ -33832,7 +33956,7 @@ var init_DocumentViewer = __esm({
33832
33956
  }
33833
33957
  });
33834
33958
  function extractTitle(children) {
33835
- if (!React75__default.isValidElement(children)) return void 0;
33959
+ if (!React78__default.isValidElement(children)) return void 0;
33836
33960
  const props = children.props;
33837
33961
  if (typeof props.title === "string") {
33838
33962
  return props.title;
@@ -33944,7 +34068,7 @@ function LinearView({
33944
34068
  /* @__PURE__ */ jsx(HStack, { className: "flex-wrap items-center", gap: "xs", children: trait.states.map((state, i) => {
33945
34069
  const isDone = i < currentIdx;
33946
34070
  const isCurrent = i === currentIdx;
33947
- return /* @__PURE__ */ jsxs(React75__default.Fragment, { children: [
34071
+ return /* @__PURE__ */ jsxs(React78__default.Fragment, { children: [
33948
34072
  i > 0 && /* @__PURE__ */ jsx(
33949
34073
  Typography,
33950
34074
  {
@@ -34845,12 +34969,12 @@ var init_Form = __esm({
34845
34969
  const isSchemaEntity = isOrbitalEntitySchema(entity);
34846
34970
  const resolvedEntity = isSchemaEntity ? entity : void 0;
34847
34971
  const entityName = typeof entity === "string" ? entity : resolvedEntity?.name;
34848
- const normalizedInitialData = React75__default.useMemo(() => {
34972
+ const normalizedInitialData = React78__default.useMemo(() => {
34849
34973
  const entityRowAsInitial = isPlainEntityRow(entity) ? entity : void 0;
34850
34974
  const callerInitial = initialData !== null && typeof initialData === "object" && !Array.isArray(initialData) ? initialData : {};
34851
34975
  return entityRowAsInitial !== void 0 ? { ...entityRowAsInitial, ...callerInitial } : callerInitial;
34852
34976
  }, [entity, initialData]);
34853
- const entityDerivedFields = React75__default.useMemo(() => {
34977
+ const entityDerivedFields = React78__default.useMemo(() => {
34854
34978
  if (fields && fields.length > 0) return void 0;
34855
34979
  if (!resolvedEntity) return void 0;
34856
34980
  return resolvedEntity.fields.map(
@@ -34869,16 +34993,16 @@ var init_Form = __esm({
34869
34993
  const conditionalFields = typeof conditionalFieldsRaw === "boolean" ? {} : conditionalFieldsRaw;
34870
34994
  const hiddenCalculations = typeof hiddenCalculationsRaw === "boolean" ? [] : hiddenCalculationsRaw;
34871
34995
  const violationTriggers = typeof violationTriggersRaw === "boolean" ? [] : violationTriggersRaw;
34872
- const [formData, setFormData] = React75__default.useState(
34996
+ const [formData, setFormData] = React78__default.useState(
34873
34997
  normalizedInitialData
34874
34998
  );
34875
- const [collapsedSections, setCollapsedSections] = React75__default.useState(
34999
+ const [collapsedSections, setCollapsedSections] = React78__default.useState(
34876
35000
  /* @__PURE__ */ new Set()
34877
35001
  );
34878
- const [submitError, setSubmitError] = React75__default.useState(null);
34879
- const formRef = React75__default.useRef(null);
35002
+ const [submitError, setSubmitError] = React78__default.useState(null);
35003
+ const formRef = React78__default.useRef(null);
34880
35004
  const formMode = props.mode;
34881
- const mountedRef = React75__default.useRef(false);
35005
+ const mountedRef = React78__default.useRef(false);
34882
35006
  if (!mountedRef.current) {
34883
35007
  mountedRef.current = true;
34884
35008
  debug("forms", "mount", {
@@ -34891,7 +35015,7 @@ var init_Form = __esm({
34891
35015
  });
34892
35016
  }
34893
35017
  const shouldShowCancel = showCancel ?? (fields && fields.length > 0);
34894
- const evalContext = React75__default.useMemo(
35018
+ const evalContext = React78__default.useMemo(
34895
35019
  () => ({
34896
35020
  formValues: formData,
34897
35021
  globalVariables: externalContext?.globalVariables ?? {},
@@ -34900,7 +35024,7 @@ var init_Form = __esm({
34900
35024
  }),
34901
35025
  [formData, externalContext]
34902
35026
  );
34903
- React75__default.useEffect(() => {
35027
+ React78__default.useEffect(() => {
34904
35028
  debug("forms", "initialData-sync", {
34905
35029
  mode: formMode,
34906
35030
  normalizedInitialData,
@@ -34911,7 +35035,7 @@ var init_Form = __esm({
34911
35035
  setFormData(normalizedInitialData);
34912
35036
  }
34913
35037
  }, [normalizedInitialData]);
34914
- const processCalculations = React75__default.useCallback(
35038
+ const processCalculations = React78__default.useCallback(
34915
35039
  (changedFieldId, newFormData) => {
34916
35040
  if (!hiddenCalculations.length) return;
34917
35041
  const context = {
@@ -34936,7 +35060,7 @@ var init_Form = __esm({
34936
35060
  },
34937
35061
  [hiddenCalculations, externalContext, eventBus]
34938
35062
  );
34939
- const checkViolations = React75__default.useCallback(
35063
+ const checkViolations = React78__default.useCallback(
34940
35064
  (changedFieldId, newFormData) => {
34941
35065
  if (!violationTriggers.length) return;
34942
35066
  const context = {
@@ -34974,7 +35098,7 @@ var init_Form = __esm({
34974
35098
  processCalculations(name, newFormData);
34975
35099
  checkViolations(name, newFormData);
34976
35100
  };
34977
- const isFieldVisible = React75__default.useCallback(
35101
+ const isFieldVisible = React78__default.useCallback(
34978
35102
  (fieldName) => {
34979
35103
  const condition = conditionalFields[fieldName];
34980
35104
  if (!condition) return true;
@@ -34982,7 +35106,7 @@ var init_Form = __esm({
34982
35106
  },
34983
35107
  [conditionalFields, evalContext]
34984
35108
  );
34985
- const isSectionVisible = React75__default.useCallback(
35109
+ const isSectionVisible = React78__default.useCallback(
34986
35110
  (section) => {
34987
35111
  if (!section.condition) return true;
34988
35112
  return Boolean(evaluateFormExpression(section.condition, evalContext));
@@ -35058,7 +35182,7 @@ var init_Form = __esm({
35058
35182
  eventBus.emit(`UI:${onCancel}`);
35059
35183
  }
35060
35184
  };
35061
- const renderField = React75__default.useCallback(
35185
+ const renderField = React78__default.useCallback(
35062
35186
  (field) => {
35063
35187
  const fieldName = field.name || field.field;
35064
35188
  if (!fieldName) return null;
@@ -35079,7 +35203,7 @@ var init_Form = __esm({
35079
35203
  [formData, isFieldVisible, relationsData, relationsLoading, isLoading]
35080
35204
  );
35081
35205
  const effectiveFields = entityDerivedFields ?? fields;
35082
- const normalizedFields = React75__default.useMemo(() => {
35206
+ const normalizedFields = React78__default.useMemo(() => {
35083
35207
  if (!effectiveFields || effectiveFields.length === 0) return [];
35084
35208
  return effectiveFields.map((field) => {
35085
35209
  if (typeof field === "string") {
@@ -35101,7 +35225,7 @@ var init_Form = __esm({
35101
35225
  return field;
35102
35226
  });
35103
35227
  }, [effectiveFields, resolvedEntity]);
35104
- const schemaFields = React75__default.useMemo(() => {
35228
+ const schemaFields = React78__default.useMemo(() => {
35105
35229
  if (normalizedFields.length === 0) return null;
35106
35230
  if (isDebugEnabled()) {
35107
35231
  debugGroup(`Form: ${entityName || "unknown"}`);
@@ -35111,7 +35235,7 @@ var init_Form = __esm({
35111
35235
  }
35112
35236
  return normalizedFields.map(renderField).filter(Boolean);
35113
35237
  }, [normalizedFields, renderField, entityName, conditionalFields]);
35114
- const sectionElements = React75__default.useMemo(() => {
35238
+ const sectionElements = React78__default.useMemo(() => {
35115
35239
  if (!sections || sections.length === 0) return null;
35116
35240
  return sections.map((section) => {
35117
35241
  if (!isSectionVisible(section)) {
@@ -36837,7 +36961,7 @@ var init_List = __esm({
36837
36961
  if (entity && typeof entity === "object" && "id" in entity) return [entity];
36838
36962
  return [];
36839
36963
  }, [entity]);
36840
- const getItemActions = React75__default.useCallback(
36964
+ const getItemActions = React78__default.useCallback(
36841
36965
  (item) => {
36842
36966
  if (!itemActions) return [];
36843
36967
  if (typeof itemActions === "function") {
@@ -37310,7 +37434,7 @@ var init_MediaGallery = __esm({
37310
37434
  [selectable, selectedItems, selectionEvent, eventBus]
37311
37435
  );
37312
37436
  const entityData = Array.isArray(entity) ? entity : [];
37313
- const items = React75__default.useMemo(() => {
37437
+ const items = React78__default.useMemo(() => {
37314
37438
  if (propItems) return propItems;
37315
37439
  if (entityData.length === 0) return [];
37316
37440
  return entityData.map((record, idx) => ({
@@ -37483,9 +37607,9 @@ function MiniMap({
37483
37607
  viewportRect,
37484
37608
  className
37485
37609
  }) {
37486
- const canvasRef = React75.useRef(null);
37487
- const frameRef = React75.useRef(0);
37488
- React75.useEffect(() => {
37610
+ const canvasRef = React78.useRef(null);
37611
+ const frameRef = React78.useRef(0);
37612
+ React78.useEffect(() => {
37489
37613
  const canvas = canvasRef.current;
37490
37614
  if (!canvas) return;
37491
37615
  const ctx = canvas.getContext("2d");
@@ -37567,7 +37691,7 @@ var init_MiniMap = __esm({
37567
37691
  }
37568
37692
  });
37569
37693
  function extractTitle2(children) {
37570
- if (!React75__default.isValidElement(children)) return void 0;
37694
+ if (!React78__default.isValidElement(children)) return void 0;
37571
37695
  const props = children.props;
37572
37696
  if (typeof props.title === "string") {
37573
37697
  return props.title;
@@ -38280,7 +38404,7 @@ var init_PageHeader = __esm({
38280
38404
  info: "bg-info/10 text-info"
38281
38405
  };
38282
38406
  return /* @__PURE__ */ jsxs(Box, { className: cn("mb-6", className), children: [
38283
- breadcrumbs && breadcrumbs.length > 0 && /* @__PURE__ */ jsx(Box, { as: "nav", className: "mb-4", children: /* @__PURE__ */ jsx(Box, { as: "ol", className: "flex items-center gap-2 text-sm", children: breadcrumbs.map((crumb, idx) => /* @__PURE__ */ jsxs(React75__default.Fragment, { children: [
38407
+ breadcrumbs && breadcrumbs.length > 0 && /* @__PURE__ */ jsx(Box, { as: "nav", className: "mb-4", children: /* @__PURE__ */ jsx(Box, { as: "ol", className: "flex items-center gap-2 text-sm", children: breadcrumbs.map((crumb, idx) => /* @__PURE__ */ jsxs(React78__default.Fragment, { children: [
38284
38408
  idx > 0 && /* @__PURE__ */ jsx(Typography, { variant: "small", color: "muted", children: "/" }),
38285
38409
  crumb.href ? /* @__PURE__ */ jsx(
38286
38410
  "a",
@@ -38621,7 +38745,7 @@ var init_debugRegistry = __esm({
38621
38745
  }
38622
38746
  });
38623
38747
  function useDebugData() {
38624
- const [data, setData] = React75.useState(() => ({
38748
+ const [data, setData] = React78.useState(() => ({
38625
38749
  traits: [],
38626
38750
  ticks: [],
38627
38751
  guards: [],
@@ -38635,7 +38759,7 @@ function useDebugData() {
38635
38759
  },
38636
38760
  lastUpdate: Date.now()
38637
38761
  }));
38638
- React75.useEffect(() => {
38762
+ React78.useEffect(() => {
38639
38763
  const updateData = () => {
38640
38764
  setData({
38641
38765
  traits: getAllTraits(),
@@ -38744,12 +38868,12 @@ function layoutGraph(states, transitions, initialState, width, height) {
38744
38868
  return positions;
38745
38869
  }
38746
38870
  function WalkMinimap() {
38747
- const [walkStep, setWalkStep] = React75.useState(null);
38748
- const [traits2, setTraits] = React75.useState([]);
38749
- const [coveredEdges, setCoveredEdges] = React75.useState([]);
38750
- const [completedTraits, setCompletedTraits] = React75.useState(/* @__PURE__ */ new Set());
38751
- const prevTraitRef = React75.useRef(null);
38752
- React75.useEffect(() => {
38871
+ const [walkStep, setWalkStep] = React78.useState(null);
38872
+ const [traits2, setTraits] = React78.useState([]);
38873
+ const [coveredEdges, setCoveredEdges] = React78.useState([]);
38874
+ const [completedTraits, setCompletedTraits] = React78.useState(/* @__PURE__ */ new Set());
38875
+ const prevTraitRef = React78.useRef(null);
38876
+ React78.useEffect(() => {
38753
38877
  const interval = setInterval(() => {
38754
38878
  const w = window;
38755
38879
  const step = w.__orbitalWalkStep;
@@ -39196,15 +39320,15 @@ var init_EntitiesTab = __esm({
39196
39320
  }
39197
39321
  });
39198
39322
  function EventFlowTab({ events: events2 }) {
39199
- const [filter, setFilter] = React75.useState("all");
39200
- const containerRef = React75.useRef(null);
39201
- const [autoScroll, setAutoScroll] = React75.useState(true);
39202
- React75.useEffect(() => {
39323
+ const [filter, setFilter] = React78.useState("all");
39324
+ const containerRef = React78.useRef(null);
39325
+ const [autoScroll, setAutoScroll] = React78.useState(true);
39326
+ React78.useEffect(() => {
39203
39327
  if (autoScroll && containerRef.current) {
39204
39328
  containerRef.current.scrollTop = containerRef.current.scrollHeight;
39205
39329
  }
39206
39330
  }, [events2.length, autoScroll]);
39207
- const filteredEvents = React75.useMemo(() => {
39331
+ const filteredEvents = React78.useMemo(() => {
39208
39332
  if (filter === "all") return events2;
39209
39333
  return events2.filter((e) => e.type === filter);
39210
39334
  }, [events2, filter]);
@@ -39323,7 +39447,7 @@ var init_EventFlowTab = __esm({
39323
39447
  }
39324
39448
  });
39325
39449
  function GuardsPanel({ guards }) {
39326
- const [filter, setFilter] = React75.useState("all");
39450
+ const [filter, setFilter] = React78.useState("all");
39327
39451
  if (guards.length === 0) {
39328
39452
  return /* @__PURE__ */ jsx(
39329
39453
  EmptyState,
@@ -39336,7 +39460,7 @@ function GuardsPanel({ guards }) {
39336
39460
  }
39337
39461
  const passedCount = guards.filter((g) => g.result).length;
39338
39462
  const failedCount = guards.length - passedCount;
39339
- const filteredGuards = React75.useMemo(() => {
39463
+ const filteredGuards = React78.useMemo(() => {
39340
39464
  if (filter === "all") return guards;
39341
39465
  if (filter === "passed") return guards.filter((g) => g.result);
39342
39466
  return guards.filter((g) => !g.result);
@@ -39497,10 +39621,10 @@ function EffectBadge({ effect }) {
39497
39621
  ] });
39498
39622
  }
39499
39623
  function TransitionTimeline({ transitions }) {
39500
- const containerRef = React75.useRef(null);
39501
- const [autoScroll, setAutoScroll] = React75.useState(true);
39502
- const [expandedId, setExpandedId] = React75.useState(null);
39503
- React75.useEffect(() => {
39624
+ const containerRef = React78.useRef(null);
39625
+ const [autoScroll, setAutoScroll] = React78.useState(true);
39626
+ const [expandedId, setExpandedId] = React78.useState(null);
39627
+ React78.useEffect(() => {
39504
39628
  if (autoScroll && containerRef.current) {
39505
39629
  containerRef.current.scrollTop = containerRef.current.scrollHeight;
39506
39630
  }
@@ -39786,9 +39910,9 @@ function getAllEvents(traits2) {
39786
39910
  }
39787
39911
  function EventDispatcherTab({ traits: traits2, schema }) {
39788
39912
  const eventBus = useEventBus();
39789
- const [log18, setLog] = React75.useState([]);
39790
- const prevStatesRef = React75.useRef(/* @__PURE__ */ new Map());
39791
- React75.useEffect(() => {
39913
+ const [log18, setLog] = React78.useState([]);
39914
+ const prevStatesRef = React78.useRef(/* @__PURE__ */ new Map());
39915
+ React78.useEffect(() => {
39792
39916
  for (const trait of traits2) {
39793
39917
  const prev = prevStatesRef.current.get(trait.id);
39794
39918
  if (prev && prev !== trait.currentState) {
@@ -39958,10 +40082,10 @@ function VerifyModePanel({
39958
40082
  serverCount,
39959
40083
  localCount
39960
40084
  }) {
39961
- const [expanded, setExpanded] = React75.useState(true);
39962
- const scrollRef = React75.useRef(null);
39963
- const prevCountRef = React75.useRef(0);
39964
- React75.useEffect(() => {
40085
+ const [expanded, setExpanded] = React78.useState(true);
40086
+ const scrollRef = React78.useRef(null);
40087
+ const prevCountRef = React78.useRef(0);
40088
+ React78.useEffect(() => {
39965
40089
  if (expanded && transitions.length > prevCountRef.current && scrollRef.current) {
39966
40090
  scrollRef.current.scrollTop = scrollRef.current.scrollHeight;
39967
40091
  }
@@ -40027,10 +40151,10 @@ function RuntimeDebugger({
40027
40151
  defaultTab,
40028
40152
  schema
40029
40153
  }) {
40030
- const [isCollapsed, setIsCollapsed] = React75.useState(mode === "verify" ? true : defaultCollapsed);
40031
- const [isVisible, setIsVisible] = React75.useState(mode === "inline" || mode === "verify" || isDebugEnabled2());
40154
+ const [isCollapsed, setIsCollapsed] = React78.useState(mode === "verify" ? true : defaultCollapsed);
40155
+ const [isVisible, setIsVisible] = React78.useState(mode === "inline" || mode === "verify" || isDebugEnabled2());
40032
40156
  const debugData = useDebugData();
40033
- React75.useEffect(() => {
40157
+ React78.useEffect(() => {
40034
40158
  if (mode === "inline") return;
40035
40159
  return onDebugToggle((enabled) => {
40036
40160
  setIsVisible(enabled);
@@ -40039,7 +40163,7 @@ function RuntimeDebugger({
40039
40163
  }
40040
40164
  });
40041
40165
  }, [mode]);
40042
- React75.useEffect(() => {
40166
+ React78.useEffect(() => {
40043
40167
  if (mode === "inline") return;
40044
40168
  const handleKeyDown = (e) => {
40045
40169
  if (e.key === "`" && isVisible) {
@@ -40588,7 +40712,7 @@ function SequenceBar({
40588
40712
  onSlotRemove(index);
40589
40713
  }, [onSlotRemove, playing]);
40590
40714
  const paddedSlots = Array.from({ length: maxSlots }, (_, i) => slots[i]);
40591
- return /* @__PURE__ */ jsx(HStack, { className: cn("items-center", className), gap: "sm", children: paddedSlots.map((slot, i) => /* @__PURE__ */ jsxs(React75__default.Fragment, { children: [
40715
+ return /* @__PURE__ */ jsx(HStack, { className: cn("items-center", className), gap: "sm", children: paddedSlots.map((slot, i) => /* @__PURE__ */ jsxs(React78__default.Fragment, { children: [
40592
40716
  i > 0 && /* @__PURE__ */ jsx(
40593
40717
  Typography,
40594
40718
  {
@@ -42101,7 +42225,7 @@ var init_StatCard = __esm({
42101
42225
  const labelToUse = propLabel ?? propTitle;
42102
42226
  const eventBus = useEventBus();
42103
42227
  const { t } = useTranslate();
42104
- const handleActionClick = React75__default.useCallback(() => {
42228
+ const handleActionClick = React78__default.useCallback(() => {
42105
42229
  if (action?.event) {
42106
42230
  eventBus.emit(`UI:${action.event}`, {});
42107
42231
  }
@@ -42112,7 +42236,7 @@ var init_StatCard = __esm({
42112
42236
  const data = Array.isArray(entity) ? entity : entity ? [entity] : [];
42113
42237
  const isLoading = externalLoading ?? false;
42114
42238
  const error = externalError;
42115
- const computeMetricValue = React75__default.useCallback(
42239
+ const computeMetricValue = React78__default.useCallback(
42116
42240
  (metric, items) => {
42117
42241
  if (metric.value !== void 0) {
42118
42242
  return metric.value;
@@ -42151,7 +42275,7 @@ var init_StatCard = __esm({
42151
42275
  },
42152
42276
  []
42153
42277
  );
42154
- const schemaStats = React75__default.useMemo(() => {
42278
+ const schemaStats = React78__default.useMemo(() => {
42155
42279
  if (!metrics || metrics.length === 0) return null;
42156
42280
  return metrics.map((metric) => ({
42157
42281
  label: metric.label,
@@ -42159,7 +42283,7 @@ var init_StatCard = __esm({
42159
42283
  format: metric.format
42160
42284
  }));
42161
42285
  }, [metrics, data, computeMetricValue]);
42162
- const calculatedTrend = React75__default.useMemo(() => {
42286
+ const calculatedTrend = React78__default.useMemo(() => {
42163
42287
  if (manualTrend !== void 0) return manualTrend;
42164
42288
  if (previousValue === void 0 || currentValue === void 0)
42165
42289
  return void 0;
@@ -43341,7 +43465,7 @@ var init_Timeline = __esm({
43341
43465
  }) => {
43342
43466
  const { t } = useTranslate();
43343
43467
  const entityData = Array.isArray(entity) ? entity : [];
43344
- const items = React75__default.useMemo(() => {
43468
+ const items = React78__default.useMemo(() => {
43345
43469
  if (propItems) return propItems;
43346
43470
  if (entityData.length === 0) return [];
43347
43471
  return entityData.map((record, idx) => {
@@ -43498,7 +43622,7 @@ var init_TimerDisplay = __esm({
43498
43622
  }
43499
43623
  });
43500
43624
  function extractToastProps(children) {
43501
- if (!React75__default.isValidElement(children)) {
43625
+ if (!React78__default.isValidElement(children)) {
43502
43626
  if (typeof children === "string") {
43503
43627
  return { message: children };
43504
43628
  }
@@ -43536,7 +43660,7 @@ var init_ToastSlot = __esm({
43536
43660
  eventBus.emit("UI:CLOSE");
43537
43661
  };
43538
43662
  if (!isVisible) return null;
43539
- const isCustomContent = React75__default.isValidElement(children) && !message;
43663
+ const isCustomContent = React78__default.isValidElement(children) && !message;
43540
43664
  return /* @__PURE__ */ jsx(Box, { className: "fixed bottom-4 right-4 z-50", children: isCustomContent ? children : /* @__PURE__ */ jsx(
43541
43665
  Toast,
43542
43666
  {
@@ -43805,7 +43929,7 @@ var init_WizardContainer = __esm({
43805
43929
  const isCompleted = index < currentStep;
43806
43930
  const stepKey = step.id ?? step.tabId ?? `step-${index}`;
43807
43931
  const stepTitle = step.title ?? step.name ?? `Step ${index + 1}`;
43808
- return /* @__PURE__ */ jsxs(React75__default.Fragment, { children: [
43932
+ return /* @__PURE__ */ jsxs(React78__default.Fragment, { children: [
43809
43933
  /* @__PURE__ */ jsx(
43810
43934
  Button,
43811
43935
  {
@@ -44255,12 +44379,12 @@ var init_XPBar = __esm({
44255
44379
  }
44256
44380
  });
44257
44381
  function lazyThree(name, loader) {
44258
- const Lazy = React75__default.lazy(() => loader().then((m) => ({ default: m[name] })));
44382
+ const Lazy = React78__default.lazy(() => loader().then((m) => ({ default: m[name] })));
44259
44383
  function ThreeWrapper(props) {
44260
- return React75__default.createElement(
44261
- React75__default.Suspense,
44384
+ return React78__default.createElement(
44385
+ React78__default.Suspense,
44262
44386
  { fallback: null },
44263
- React75__default.createElement(Lazy, props)
44387
+ React78__default.createElement(Lazy, props)
44264
44388
  );
44265
44389
  }
44266
44390
  ThreeWrapper.displayName = `Lazy(${name})`;
@@ -44279,6 +44403,7 @@ var init_component_registry_generated = __esm({
44279
44403
  init_AnimatedGraphic();
44280
44404
  init_AnimatedReveal();
44281
44405
  init_ArticleSection();
44406
+ init_Aside();
44282
44407
  init_AuthLayout();
44283
44408
  init_BattleBoard();
44284
44409
  init_BattleTemplate();
@@ -44333,6 +44458,7 @@ var init_component_registry_generated = __esm({
44333
44458
  init_DayCell();
44334
44459
  init_DebuggerBoard();
44335
44460
  init_DetailPanel();
44461
+ init_Dialog();
44336
44462
  init_DialogueBox();
44337
44463
  init_DialogueBubble();
44338
44464
  init_DocBreadcrumb();
@@ -44546,6 +44672,7 @@ var init_component_registry_generated = __esm({
44546
44672
  "AnimatedGraphic": AnimatedGraphic,
44547
44673
  "AnimatedReveal": AnimatedReveal,
44548
44674
  "ArticleSection": ArticleSection,
44675
+ "Aside": Aside,
44549
44676
  "AuthLayout": AuthLayout,
44550
44677
  "Avatar": AvatarPattern,
44551
44678
  "AvatarPattern": AvatarPattern,
@@ -44615,6 +44742,7 @@ var init_component_registry_generated = __esm({
44615
44742
  "DayCell": DayCell,
44616
44743
  "DebuggerBoard": DebuggerBoard,
44617
44744
  "DetailPanel": DetailPanel,
44745
+ "Dialog": Dialog,
44618
44746
  "DialogueBox": DialogueBox,
44619
44747
  "DialogueBubble": DialogueBubble,
44620
44748
  "Divider": DividerPattern,
@@ -44868,7 +44996,7 @@ function SuspenseConfigProvider({
44868
44996
  config,
44869
44997
  children
44870
44998
  }) {
44871
- return React75__default.createElement(
44999
+ return React78__default.createElement(
44872
45000
  SuspenseConfigContext.Provider,
44873
45001
  { value: config },
44874
45002
  children
@@ -45351,7 +45479,7 @@ function renderPatternChildren(children, onDismiss, parentId = "root", parentPat
45351
45479
  const key = `${parentId}-${index}-trait:${traitName}`;
45352
45480
  return /* @__PURE__ */ jsx(TraitFrame, { traitName }, key);
45353
45481
  }
45354
- return /* @__PURE__ */ jsx(React75__default.Fragment, { children: child }, `${parentId}-${index}`);
45482
+ return /* @__PURE__ */ jsx(React78__default.Fragment, { children: child }, `${parentId}-${index}`);
45355
45483
  }
45356
45484
  if (!child || typeof child !== "object") return null;
45357
45485
  const childId = `${parentId}-${index}`;
@@ -45388,14 +45516,14 @@ function isPatternConfig(value) {
45388
45516
  if (value === null || value === void 0) return false;
45389
45517
  if (typeof value !== "object") return false;
45390
45518
  if (Array.isArray(value)) return false;
45391
- if (React75__default.isValidElement(value)) return false;
45519
+ if (React78__default.isValidElement(value)) return false;
45392
45520
  if (value instanceof Date) return false;
45393
45521
  if (typeof value === "function") return false;
45394
45522
  const record = value;
45395
45523
  return "type" in record && typeof record.type === "string";
45396
45524
  }
45397
45525
  function isPlainConfigObject(value) {
45398
- if (React75__default.isValidElement(value)) return false;
45526
+ if (React78__default.isValidElement(value)) return false;
45399
45527
  if (value instanceof Date) return false;
45400
45528
  const proto = Object.getPrototypeOf(value);
45401
45529
  return proto === Object.prototype || proto === null;
@@ -45787,6 +45915,8 @@ var init_atoms = __esm({
45787
45915
  init_ThemeSelector();
45788
45916
  init_Overlay();
45789
45917
  init_FlipContainer();
45918
+ init_Dialog();
45919
+ init_Aside();
45790
45920
  init_ConditionalWrapper();
45791
45921
  init_LawReferenceTooltip();
45792
45922
  init_DayCell();
@@ -45840,7 +45970,7 @@ var FormSection = ({
45840
45970
  columns = 1,
45841
45971
  className
45842
45972
  }) => {
45843
- const [collapsed, setCollapsed] = React75__default.useState(defaultCollapsed);
45973
+ const [collapsed, setCollapsed] = React78__default.useState(defaultCollapsed);
45844
45974
  const { t } = useTranslate();
45845
45975
  const eventBus = useEventBus();
45846
45976
  const gridClass = {
@@ -45848,7 +45978,7 @@ var FormSection = ({
45848
45978
  2: "grid-cols-1 md:grid-cols-2",
45849
45979
  3: "grid-cols-1 md:grid-cols-2 lg:grid-cols-3"
45850
45980
  }[columns];
45851
- React75__default.useCallback(() => {
45981
+ React78__default.useCallback(() => {
45852
45982
  if (collapsible) {
45853
45983
  setCollapsed((prev) => !prev);
45854
45984
  eventBus.emit("UI:TOGGLE_COLLAPSE", { collapsed: !collapsed });
@@ -48716,4 +48846,4 @@ function useGitHubBranches(owner, repo, enabled = true) {
48716
48846
  });
48717
48847
  }
48718
48848
 
48719
- export { ALL_PRESETS, ALMADAR_DND_MIME, AR_BOOK_FIELDS, AboutPageTemplate, Accordion, ActionButton, ActionButtons, Card2 as ActionCard, ActionPalette, ActionTile, Alert, AnimatedCounter, AnimatedGraphic, AnimatedReveal, ArticleSection, AuthLayout, Avatar, Badge, BattleBoard, BattleTemplate, BehaviorView, BookChapterView, BookCoverPage, BookNavBar, BookTableOfContents, BookViewer, Box, BranchingLogicBuilder, Breadcrumb, BuilderBoard, Button, ButtonGroup, CTABanner, CalendarGrid, CanvasEffect, Card, CardBody, CardContent, CardFooter, CardGrid, CardHeader, CardTitle, Carousel, CaseStudyCard, CaseStudyOrganism, CastleBoard, CastleTemplate, Center, Chart, ChartLegend, Checkbox, ChoiceButton, ClassifierBoard, CodeBlock, CodeExample, CodeView, CodeViewer, CollapsibleSection, CombatLog, ComboCounter, CommunityLinks, ConditionalWrapper, ConfettiEffect, ConfirmDialog, Container, ContentRenderer, ContentSection, ControlButton, CounterTemplate, CraftingRecipe, DEFAULT_LIKERT_OPTIONS, DEFAULT_MATRIX_COLUMNS, DEFAULT_SLOTS, DIAMOND_TOP_Y, DPad, DamageNumber, DashboardGrid, DashboardLayout, DataGrid, DataList, DataTable, DateRangePicker, DateRangeSelector, DayCell, DebuggerBoard, DetailPanel, DialogueBox, DialogueBubble, Divider, DocBreadcrumb, DocCodeBlock, DocPagination, DocSearch, DocSidebar, DocTOC, DocumentViewer, StateMachineView as DomStateMachineVisualizer, Drawer, DrawerSlot, EdgeDecoration, EditorCheckbox, EditorSelect, EditorSlider, EditorTextInput, EditorToolbar, EmptyState, EnemyPlate, EntityDisplayEvents, ErrorBoundary, ErrorState, EventHandlerBoard, EventLog, FEATURE_COLORS, FEATURE_TYPES, FLOOR_HEIGHT, FeatureCard, FeatureDetailPageTemplate, FeatureGrid, FeatureGridOrganism, FeatureRenderer2 as FeatureRenderer, FileTree, FilterGroup, FilterPill, Flex, FlipCard, FlipContainer, FloatingActionButton, Form, FormActions, FormField, FormLayout, FormSection, FormSectionHeader, GameAudioContext, GameAudioProvider, GameAudioToggle, GameCanvas2D, GameHud, GameMenu, GameOverScreen, GameShell, GameTemplate, GenericAppTemplate, GeometricPattern, GradientDivider, GraphCanvas, GraphView, Grid, HStack, Header, Heading, HealthBar, HealthPanel, HeroOrganism, HeroSection, I18nProvider, IDENTITY_BOOK_FIELDS, Icon, InfiniteScrollSentinel, Input, InputGroup, InstallBox, InventoryGrid, InventoryPanel, IsometricCanvas, ItemSlot, JazariStateMachine, Label, LandingPageTemplate, LawReferenceTooltip, Lightbox, LikertScale, LineChart2 as LineChart, List3 as List, LoadingState, MapView, MarkdownContent, MarketingStatCard, MasterDetail, MasterDetailLayout, MatrixQuestion, MediaGallery, Menu, Meter, MiniMap, Modal, ModalSlot, ModuleCard, Navigation, NegotiatorBoard, NotifyListener, NumberStepper, ObjectRulePanel, OptionConstraintGroup, StateMachineView as OrbitalStateMachineView, OrbitalVisualization, Overlay, PageHeader, Pagination, PatternTile, PhysicsManager, PlatformerCanvas, Popover, PositionedCanvas, PowerupSlots, PricingCard, PricingGrid, PricingOrganism, PricingPageTemplate, ProgressBar, ProgressDots, PullQuote, PullToRefresh, QrScanner, QuestTracker, QuizBlock, Radio, RangeSlider, RelationSelect, RepeatableFormSection, ReplyTree, ResourceBar, ResourceCounter, RichBlockEditor, RuleEditor, RuntimeDebugger, SHEET_COLUMNS, SPRITE_SHEET_LAYOUT, ScaledDiagram, ScoreBoard, ScoreDisplay, SearchInput, Section, SectionHeader, Select, SequenceBar, SequencerBoard, ServiceCatalog, ShowcaseCard, ShowcaseOrganism, SidePanel, Sidebar, SignaturePad, SimpleGrid, SimulationCanvas, SimulationControls, SimulationGraph, SimulatorBoard, Skeleton, SlotContentRenderer, SocialProof, SortableList, Spacer, Sparkline, Spinner, Split, SplitPane, SplitSection, Sprite, Stack, StarRating, StatBadge, StatCard, StatDisplay, StateArchitectBoard, StateIndicator, StateMachineView, StateNode2 as StateNode, StatsGrid, StatsOrganism, StatusBar, StatusDot, StatusEffect, StepFlow, StepFlowOrganism, SvgBranch, SvgConnection, SvgFlow, SvgGrid, SvgLobe, SvgMesh, SvgMorph, SvgNode, SvgPulse, SvgRing, SvgShield, SvgStack, SwipeableRow, Switch, TERRAIN_COLORS, TILE_HEIGHT, TILE_WIDTH, TabbedContainer, Table, Tabs, TagCloud, TeamCard, TeamOrganism, TerrainPalette, Text, TextHighlight, Textarea, ThemeSelector, ThemeToggle, TimeSlotCell, Timeline, TimerDisplay, Toast, ToastSlot, Tooltip, TraitFrame, TraitSlot, TraitStateViewer, TransitionArrow, TrendIndicator, TurnIndicator, TurnPanel, TypewriterText, Typography, UISlotComponent, UISlotRenderer, UncontrolledBattleBoard, UnitCommandBar, UploadDropZone, VStack, VariablePanel, VersionDiff, ViolationAlert, VoteStack, WaypointMarker, WizardContainer, WizardNavigation, WizardProgress, WorldMapBoard, WorldMapTemplate, XPBar, applyTemporaryEffect, calculateAttackTargets, calculateDamage, calculateValidMoves, clearEntities, cn, combatAnimations, combatClasses, combatEffects, createInitialGameState, createTranslate, createUnitAnimationState, drawSprite, generateCombatMessage, getAllEntities, getByType, getCurrentFrame, getEntity, getSingleton, getTileDimensions, inferDirection, isoToScreen, mapBookData, parseQueryBinding, pendulum, projectileMotion, removeEntity, resolveFieldMap, resolveFrame, resolveSheetDirection, screenToIso, spawnEntity, springOscillator, tickAnimationState, transitionAnimation, updateEntity, updateSingleton, useAgentChat, useAuthContext, useBattleState, useCamera, useCompile, useConnectGitHub, useDeepAgentGeneration, useDisconnectGitHub, useDragReorder, useDraggable, useDropZone, useEmitEvent, useEntities, useEntitiesByType, useEntity as useEntityById, useEventBus, useEventListener, useExtensions, useFileEditor, useFileSystem, useGameAudio, useGameAudioContext, useGitHubBranches, useGitHubRepo, useGitHubRepos, useGitHubStatus, useImageCache, useInfiniteScroll, useInput, useLongPress, useOrbitalHistory, usePhysics, usePhysics2D, usePinchZoom, usePlayer, usePreview, usePullToRefresh, useQuerySingleton, useSingletonEntity, useSpriteAnimations, useSwipeGesture, useTraitListens, useTranslate, useUIEvents, useUISlotManager, useValidation };
48849
+ export { ALL_PRESETS, ALMADAR_DND_MIME, AR_BOOK_FIELDS, AboutPageTemplate, Accordion, ActionButton, ActionButtons, Card2 as ActionCard, ActionPalette, ActionTile, Alert, AnimatedCounter, AnimatedGraphic, AnimatedReveal, ArticleSection, Aside, AuthLayout, Avatar, Badge, BattleBoard, BattleTemplate, BehaviorView, BookChapterView, BookCoverPage, BookNavBar, BookTableOfContents, BookViewer, Box, BranchingLogicBuilder, Breadcrumb, BuilderBoard, Button, ButtonGroup, CTABanner, CalendarGrid, CanvasEffect, Card, CardBody, CardContent, CardFooter, CardGrid, CardHeader, CardTitle, Carousel, CaseStudyCard, CaseStudyOrganism, CastleBoard, CastleTemplate, Center, Chart, ChartLegend, Checkbox, ChoiceButton, ClassifierBoard, CodeBlock, CodeExample, CodeView, CodeViewer, CollapsibleSection, CombatLog, ComboCounter, CommunityLinks, ConditionalWrapper, ConfettiEffect, ConfirmDialog, Container, ContentRenderer, ContentSection, ControlButton, CounterTemplate, CraftingRecipe, DEFAULT_LIKERT_OPTIONS, DEFAULT_MATRIX_COLUMNS, DEFAULT_SLOTS, DIAMOND_TOP_Y, DPad, DamageNumber, DashboardGrid, DashboardLayout, DataGrid, DataList, DataTable, DateRangePicker, DateRangeSelector, DayCell, DebuggerBoard, DetailPanel, Dialog, DialogueBox, DialogueBubble, Divider, DocBreadcrumb, DocCodeBlock, DocPagination, DocSearch, DocSidebar, DocTOC, DocumentViewer, StateMachineView as DomStateMachineVisualizer, Drawer, DrawerSlot, EdgeDecoration, EditorCheckbox, EditorSelect, EditorSlider, EditorTextInput, EditorToolbar, EmptyState, EnemyPlate, EntityDisplayEvents, ErrorBoundary, ErrorState, EventHandlerBoard, EventLog, FEATURE_COLORS, FEATURE_TYPES, FLOOR_HEIGHT, FeatureCard, FeatureDetailPageTemplate, FeatureGrid, FeatureGridOrganism, FeatureRenderer2 as FeatureRenderer, FileTree, FilterGroup, FilterPill, Flex, FlipCard, FlipContainer, FloatingActionButton, Form, FormActions, FormField, FormLayout, FormSection, FormSectionHeader, GameAudioContext, GameAudioProvider, GameAudioToggle, GameCanvas2D, GameHud, GameMenu, GameOverScreen, GameShell, GameTemplate, GenericAppTemplate, GeometricPattern, GradientDivider, GraphCanvas, GraphView, Grid, HStack, Header, Heading, HealthBar, HealthPanel, HeroOrganism, HeroSection, I18nProvider, IDENTITY_BOOK_FIELDS, Icon, InfiniteScrollSentinel, Input, InputGroup, InstallBox, InventoryGrid, InventoryPanel, IsometricCanvas, ItemSlot, JazariStateMachine, Label, LandingPageTemplate, LawReferenceTooltip, Lightbox, LikertScale, LineChart2 as LineChart, List3 as List, LoadingState, MapView, MarkdownContent, MarketingStatCard, MasterDetail, MasterDetailLayout, MatrixQuestion, MediaGallery, Menu, Meter, MiniMap, Modal, ModalSlot, ModuleCard, Navigation, NegotiatorBoard, NotifyListener, NumberStepper, ObjectRulePanel, OptionConstraintGroup, StateMachineView as OrbitalStateMachineView, OrbitalVisualization, Overlay, PageHeader, Pagination, PatternTile, PhysicsManager, PlatformerCanvas, Popover, PositionedCanvas, PowerupSlots, PricingCard, PricingGrid, PricingOrganism, PricingPageTemplate, ProgressBar, ProgressDots, PullQuote, PullToRefresh, QrScanner, QuestTracker, QuizBlock, Radio, RangeSlider, RelationSelect, RepeatableFormSection, ReplyTree, ResourceBar, ResourceCounter, RichBlockEditor, RuleEditor, RuntimeDebugger, SHEET_COLUMNS, SPRITE_SHEET_LAYOUT, ScaledDiagram, ScoreBoard, ScoreDisplay, SearchInput, Section, SectionHeader, Select, SequenceBar, SequencerBoard, ServiceCatalog, ShowcaseCard, ShowcaseOrganism, SidePanel, Sidebar, SignaturePad, SimpleGrid, SimulationCanvas, SimulationControls, SimulationGraph, SimulatorBoard, Skeleton, SlotContentRenderer, SocialProof, SortableList, Spacer, Sparkline, Spinner, Split, SplitPane, SplitSection, Sprite, Stack, StarRating, StatBadge, StatCard, StatDisplay, StateArchitectBoard, StateIndicator, StateMachineView, StateNode2 as StateNode, StatsGrid, StatsOrganism, StatusBar, StatusDot, StatusEffect, StepFlow, StepFlowOrganism, SvgBranch, SvgConnection, SvgFlow, SvgGrid, SvgLobe, SvgMesh, SvgMorph, SvgNode, SvgPulse, SvgRing, SvgShield, SvgStack, SwipeableRow, Switch, TERRAIN_COLORS, TILE_HEIGHT, TILE_WIDTH, TabbedContainer, Table, Tabs, TagCloud, TeamCard, TeamOrganism, TerrainPalette, Text, TextHighlight, Textarea, ThemeSelector, ThemeToggle, TimeSlotCell, Timeline, TimerDisplay, Toast, ToastSlot, Tooltip, TraitFrame, TraitSlot, TraitStateViewer, TransitionArrow, TrendIndicator, TurnIndicator, TurnPanel, TypewriterText, Typography, UISlotComponent, UISlotRenderer, UncontrolledBattleBoard, UnitCommandBar, UploadDropZone, VStack, VariablePanel, VersionDiff, ViolationAlert, VoteStack, WaypointMarker, WizardContainer, WizardNavigation, WizardProgress, WorldMapBoard, WorldMapTemplate, XPBar, applyTemporaryEffect, calculateAttackTargets, calculateDamage, calculateValidMoves, clearEntities, cn, combatAnimations, combatClasses, combatEffects, createInitialGameState, createTranslate, createUnitAnimationState, drawSprite, generateCombatMessage, getAllEntities, getByType, getCurrentFrame, getEntity, getSingleton, getTileDimensions, inferDirection, isoToScreen, mapBookData, parseQueryBinding, pendulum, projectileMotion, removeEntity, resolveFieldMap, resolveFrame, resolveSheetDirection, screenToIso, spawnEntity, springOscillator, tickAnimationState, transitionAnimation, updateEntity, updateSingleton, useAgentChat, useAuthContext, useBattleState, useCamera, useCompile, useConnectGitHub, useDeepAgentGeneration, useDisconnectGitHub, useDragReorder, useDraggable, useDropZone, useEmitEvent, useEntities, useEntitiesByType, useEntity as useEntityById, useEventBus, useEventListener, useExtensions, useFileEditor, useFileSystem, useGameAudio, useGameAudioContext, useGitHubBranches, useGitHubRepo, useGitHubRepos, useGitHubStatus, useImageCache, useInfiniteScroll, useInput, useLongPress, useOrbitalHistory, usePhysics, usePhysics2D, usePinchZoom, usePlayer, usePreview, usePullToRefresh, useQuerySingleton, useSingletonEntity, useSpriteAnimations, useSwipeGesture, useTraitListens, useTranslate, useUIEvents, useUISlotManager, useValidation };