@dreamboard-games/sdk 0.5.0-alpha.0 → 0.5.0-alpha.2

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.
Files changed (113) hide show
  1. package/README.md +127 -0
  2. package/dist/browser-interaction.d.ts +22 -22
  3. package/dist/{chunk-VRRR6QZT.js → chunk-32PFKDV7.js} +170 -406
  4. package/dist/chunk-32PFKDV7.js.map +1 -0
  5. package/dist/{chunk-N33CGX2F.js → chunk-3BAD4VC2.js} +3 -3
  6. package/dist/{chunk-LMHCGCA6.js → chunk-3SKDNDPG.js} +2 -2
  7. package/dist/chunk-5YV2WHJ4.js +25 -0
  8. package/dist/chunk-5YV2WHJ4.js.map +1 -0
  9. package/dist/{chunk-VWTKGIYF.js → chunk-ANRB4XKA.js} +1 -1
  10. package/dist/chunk-ANRB4XKA.js.map +1 -0
  11. package/dist/{chunk-EOEA3I64.js → chunk-BI4G3PM2.js} +7 -7
  12. package/dist/chunk-BI4G3PM2.js.map +1 -0
  13. package/dist/{chunk-KRJPRYEA.js → chunk-EVCLTY4Q.js} +21 -8
  14. package/dist/chunk-EVCLTY4Q.js.map +1 -0
  15. package/dist/{chunk-DQS2EG5E.js → chunk-GDPKTBUR.js} +2 -2
  16. package/dist/{chunk-FL67RDID.js → chunk-H6VDGFL5.js} +128 -128
  17. package/dist/chunk-H6VDGFL5.js.map +1 -0
  18. package/dist/{chunk-6LMESVGT.js → chunk-LR3ZTWQF.js} +3 -3
  19. package/dist/chunk-LR3ZTWQF.js.map +1 -0
  20. package/dist/{chunk-TXELBVTG.js → chunk-PN5O6GG2.js} +2 -2
  21. package/dist/{chunk-533O7C4L.js → chunk-S2JEDVWH.js} +500 -430
  22. package/dist/chunk-S2JEDVWH.js.map +1 -0
  23. package/dist/{chunk-2GQIALJL.js → chunk-UGH54WZ2.js} +6 -2
  24. package/dist/chunk-UGH54WZ2.js.map +1 -0
  25. package/dist/chunk-VCDWP5VL.js +746 -0
  26. package/dist/chunk-VCDWP5VL.js.map +1 -0
  27. package/dist/{chunk-ZSTCUJKZ.js → chunk-Y75CFE77.js} +2 -6
  28. package/dist/chunk-Y75CFE77.js.map +1 -0
  29. package/dist/chunk-Z7QCREWI.js +3435 -0
  30. package/dist/chunk-Z7QCREWI.js.map +1 -0
  31. package/dist/chunk-ZZGN2ATS.js +1941 -0
  32. package/dist/chunk-ZZGN2ATS.js.map +1 -0
  33. package/dist/{components-CNAt5J1p.d.ts → components-gAbIz7hK.d.ts} +2 -18
  34. package/dist/{definitions-bZSBaPjj.d.ts → definitions-BgmV_GhC.d.ts} +3 -3
  35. package/dist/digest.d.ts +2 -2
  36. package/dist/game-CsZScpcn.d.ts +763 -0
  37. package/dist/{index-CR69MyWr.d.ts → index-CcT9Q7N7.d.ts} +1 -1
  38. package/dist/{index.d-Bw8AOcgp.d.ts → index.d-DjzoK7zn.d.ts} +67 -2
  39. package/dist/index.js +1 -2
  40. package/dist/package-set.js +1 -2
  41. package/dist/plugin-runtime-contract.d.ts +4 -4
  42. package/dist/plugin-runtime-contract.js +13 -15
  43. package/dist/{protocol-CVaSqPgX.d.ts → protocol-dYgafTYY.d.ts} +1 -7
  44. package/dist/reducer/advanced.d.ts +12 -11
  45. package/dist/reducer/advanced.js +10 -4
  46. package/dist/reducer-contract.d.ts +10 -2
  47. package/dist/reducer-contract.js +4 -4
  48. package/dist/reducer.d.ts +12 -689
  49. package/dist/reducer.js +19 -1293
  50. package/dist/reducer.js.map +1 -1
  51. package/dist/runtime/primitives.d.ts +4 -4
  52. package/dist/runtime/primitives.js +5 -5
  53. package/dist/runtime/runtime-api.d.ts +2 -2
  54. package/dist/runtime/workspace-contract.d.ts +50 -17
  55. package/dist/runtime/workspace-contract.js +15 -10
  56. package/dist/{runtime-C7Z2acNU.d.ts → runtime-RJ5orDJU.d.ts} +23 -30
  57. package/dist/{plugin-state-BRH3UiUp.d.ts → runtime-api-Bz5pwNU_.d.ts} +86 -4
  58. package/dist/runtime.d.ts +8 -8
  59. package/dist/runtime.js +19 -17
  60. package/dist/runtime.js.map +1 -1
  61. package/dist/schema.d.ts +2 -28
  62. package/dist/testing-compiler.d.ts +4 -4
  63. package/dist/testing-runtime.d.ts +7 -7
  64. package/dist/testing-runtime.js +6 -6
  65. package/dist/testing.d.ts +17 -17
  66. package/dist/testing.js +14 -14
  67. package/dist/{types-q1Guidm5.d.ts → types-DR7DoB1x.d.ts} +1 -1
  68. package/dist/{types-DN4O7kH_.d.ts → types-JWCYHmu7.d.ts} +2 -2
  69. package/dist/types.js +6 -18
  70. package/dist/types.js.map +1 -1
  71. package/dist/ui/components.d.ts +3 -4
  72. package/dist/ui/components.js +1 -5
  73. package/dist/{ui-contract-BC4JpysE.d.ts → ui-contract-GTUPkf8z.d.ts} +175 -176
  74. package/dist/ui.d.ts +4 -5
  75. package/dist/ui.js +2 -6
  76. package/dist/{views-D2Cfzr3h.d.ts → views-BpuWcOyN.d.ts} +101 -48
  77. package/package.json +3 -22
  78. package/dist/authoring/index.d.ts +0 -59
  79. package/dist/authoring/index.js +0 -24
  80. package/dist/authoring/index.js.map +0 -1
  81. package/dist/authoring-compiler.d.ts +0 -27
  82. package/dist/authoring-compiler.js +0 -11
  83. package/dist/authoring-compiler.js.map +0 -1
  84. package/dist/authoring-materialize-cli.d.ts +0 -1
  85. package/dist/authoring-materialize-cli.js +0 -45
  86. package/dist/authoring-materialize-cli.js.map +0 -1
  87. package/dist/chunk-2GQIALJL.js.map +0 -1
  88. package/dist/chunk-533O7C4L.js.map +0 -1
  89. package/dist/chunk-6LMESVGT.js.map +0 -1
  90. package/dist/chunk-EOEA3I64.js.map +0 -1
  91. package/dist/chunk-FL67RDID.js.map +0 -1
  92. package/dist/chunk-HIH6Y4FA.js +0 -7802
  93. package/dist/chunk-HIH6Y4FA.js.map +0 -1
  94. package/dist/chunk-HUK4234C.js +0 -166
  95. package/dist/chunk-HUK4234C.js.map +0 -1
  96. package/dist/chunk-KGV2EUNN.js +0 -532
  97. package/dist/chunk-KGV2EUNN.js.map +0 -1
  98. package/dist/chunk-KRJPRYEA.js.map +0 -1
  99. package/dist/chunk-KWHOFBDM.js +0 -9
  100. package/dist/chunk-KWHOFBDM.js.map +0 -1
  101. package/dist/chunk-VRRR6QZT.js.map +0 -1
  102. package/dist/chunk-VWTKGIYF.js.map +0 -1
  103. package/dist/chunk-XFMSLL3P.js +0 -637
  104. package/dist/chunk-XFMSLL3P.js.map +0 -1
  105. package/dist/chunk-ZSTCUJKZ.js.map +0 -1
  106. package/dist/codegen.d.ts +0 -941
  107. package/dist/codegen.js +0 -44
  108. package/dist/codegen.js.map +0 -1
  109. package/dist/runtime-api-CgPuEVeF.d.ts +0 -86
  110. /package/dist/{chunk-N33CGX2F.js.map → chunk-3BAD4VC2.js.map} +0 -0
  111. /package/dist/{chunk-LMHCGCA6.js.map → chunk-3SKDNDPG.js.map} +0 -0
  112. /package/dist/{chunk-DQS2EG5E.js.map → chunk-GDPKTBUR.js.map} +0 -0
  113. /package/dist/{chunk-TXELBVTG.js.map → chunk-PN5O6GG2.js.map} +0 -0
@@ -8771,240 +8771,6 @@ function OutcomeDialog({
8771
8771
  ) });
8772
8772
  }
8773
8773
 
8774
- // src/ui/components/GameEventLog.tsx
8775
- import { Activity, ChevronDown as ChevronDown2 } from "lucide-react";
8776
- import { useId as useId7 } from "react";
8777
- import { jsx as jsx38, jsxs as jsxs21 } from "react/jsx-runtime";
8778
- function formatDetailValue(value) {
8779
- if (typeof value === "boolean") return value ? "Yes" : "No";
8780
- return String(value);
8781
- }
8782
- function eventKey(event) {
8783
- return `${event.version}:${event.index}`;
8784
- }
8785
- function SystemActionSummary({
8786
- event,
8787
- className,
8788
- style
8789
- }) {
8790
- const theme = useTheme();
8791
- const titleId = useId7();
8792
- const summaryId = useId7();
8793
- return /* @__PURE__ */ jsxs21(
8794
- "article",
8795
- {
8796
- className,
8797
- "aria-labelledby": titleId,
8798
- "aria-describedby": event.summary ? summaryId : void 0,
8799
- style: {
8800
- ...eventItemStyle(theme),
8801
- ...style
8802
- },
8803
- children: [
8804
- /* @__PURE__ */ jsx38(
8805
- Activity,
8806
- {
8807
- "aria-hidden": "true",
8808
- size: 18,
8809
- strokeWidth: 2.5,
8810
- style: {
8811
- color: theme.semantic.intent.info.solid,
8812
- flex: "0 0 auto",
8813
- marginTop: 2
8814
- }
8815
- }
8816
- ),
8817
- /* @__PURE__ */ jsxs21("div", { style: { display: "grid", gap: theme.space[2], minWidth: 0 }, children: [
8818
- /* @__PURE__ */ jsxs21("div", { style: { display: "grid", gap: theme.space[1] }, children: [
8819
- /* @__PURE__ */ jsx38("h3", { id: titleId, style: eventTitleStyle(theme), children: event.title }),
8820
- event.summary ? /* @__PURE__ */ jsx38("p", { id: summaryId, style: eventBodyStyle(theme), children: event.summary }) : null
8821
- ] }),
8822
- event.details && event.details.length > 0 ? /* @__PURE__ */ jsx38("dl", { style: detailGridStyle(theme), children: event.details.map((detail, index) => /* @__PURE__ */ jsxs21(
8823
- "div",
8824
- {
8825
- style: {
8826
- display: "flex",
8827
- justifyContent: "space-between",
8828
- gap: theme.space[3],
8829
- minWidth: 0
8830
- },
8831
- children: [
8832
- /* @__PURE__ */ jsx38("dt", { style: detailLabelStyle(theme), children: detail.label }),
8833
- /* @__PURE__ */ jsx38("dd", { style: detailValueStyle(theme), children: formatDetailValue(detail.value) })
8834
- ]
8835
- },
8836
- `${detail.label}:${index}`
8837
- )) }) : null
8838
- ] })
8839
- ]
8840
- }
8841
- );
8842
- }
8843
- function GameEventLog({
8844
- events,
8845
- empty = "No automated actions yet.",
8846
- maxVisible,
8847
- className,
8848
- style
8849
- }) {
8850
- const theme = useTheme();
8851
- const titleId = useId7();
8852
- const visibleEvents = maxVisible === void 0 ? events : events.slice(0, maxVisible);
8853
- const hiddenCount = Math.max(0, events.length - visibleEvents.length);
8854
- return /* @__PURE__ */ jsxs21(
8855
- "section",
8856
- {
8857
- className,
8858
- "aria-labelledby": titleId,
8859
- style: {
8860
- ...logContainerStyle(theme),
8861
- ...style
8862
- },
8863
- children: [
8864
- /* @__PURE__ */ jsxs21("header", { style: logHeaderStyle(theme), children: [
8865
- /* @__PURE__ */ jsx38("h2", { id: titleId, style: logTitleStyle(theme), children: "Automated actions" }),
8866
- /* @__PURE__ */ jsx38("span", { style: logCountStyle(theme), children: events.length })
8867
- ] }),
8868
- visibleEvents.length === 0 ? /* @__PURE__ */ jsx38("p", { style: emptyStyle(theme), children: empty }) : /* @__PURE__ */ jsx38(
8869
- "ol",
8870
- {
8871
- "aria-live": "polite",
8872
- style: {
8873
- display: "grid",
8874
- gap: theme.space[2],
8875
- margin: 0,
8876
- padding: 0,
8877
- listStyle: "none"
8878
- },
8879
- children: visibleEvents.map((event) => /* @__PURE__ */ jsx38("li", { children: /* @__PURE__ */ jsx38(SystemActionSummary, { event }) }, eventKey(event)))
8880
- }
8881
- ),
8882
- hiddenCount > 0 ? /* @__PURE__ */ jsxs21("div", { style: moreStyle(theme), children: [
8883
- /* @__PURE__ */ jsx38(ChevronDown2, { "aria-hidden": "true", size: 16 }),
8884
- /* @__PURE__ */ jsxs21("span", { children: [
8885
- hiddenCount,
8886
- " earlier actions hidden"
8887
- ] })
8888
- ] }) : null
8889
- ]
8890
- }
8891
- );
8892
- }
8893
- function logContainerStyle(theme) {
8894
- return {
8895
- ...surfaceStyle(theme, { tone: "card" }),
8896
- display: "grid",
8897
- gap: theme.space[3],
8898
- padding: theme.space[4],
8899
- borderRadius: theme.radius.lg,
8900
- border: `1px solid ${theme.semantic.border.subtle}`,
8901
- minWidth: 0
8902
- };
8903
- }
8904
- function logHeaderStyle(theme) {
8905
- return {
8906
- display: "flex",
8907
- justifyContent: "space-between",
8908
- alignItems: "center",
8909
- gap: theme.space[3],
8910
- minWidth: 0
8911
- };
8912
- }
8913
- function logTitleStyle(theme) {
8914
- return {
8915
- margin: 0,
8916
- color: theme.semantic.text.primary,
8917
- fontSize: theme.typography.fontSize.lg,
8918
- fontWeight: theme.typography.fontWeight.bold
8919
- };
8920
- }
8921
- function logCountStyle(theme) {
8922
- return {
8923
- minWidth: 28,
8924
- height: 28,
8925
- display: "inline-flex",
8926
- alignItems: "center",
8927
- justifyContent: "center",
8928
- borderRadius: theme.radius.pill,
8929
- background: theme.semantic.intent.info.soft,
8930
- color: theme.semantic.intent.info.onSoft,
8931
- fontFamily: theme.typography.fontFamily.tabular,
8932
- fontSize: theme.typography.fontSize.sm,
8933
- fontWeight: theme.typography.fontWeight.bold
8934
- };
8935
- }
8936
- function eventItemStyle(theme) {
8937
- return {
8938
- display: "grid",
8939
- gridTemplateColumns: "20px minmax(0, 1fr)",
8940
- gap: theme.space[3],
8941
- padding: theme.space[3],
8942
- borderRadius: theme.radius.md,
8943
- border: `1px solid ${theme.semantic.intent.info.border}`,
8944
- background: theme.semantic.intent.info.soft,
8945
- minWidth: 0
8946
- };
8947
- }
8948
- function eventTitleStyle(theme) {
8949
- return {
8950
- margin: 0,
8951
- color: theme.semantic.text.primary,
8952
- fontSize: theme.typography.fontSize.sm,
8953
- fontWeight: theme.typography.fontWeight.bold
8954
- };
8955
- }
8956
- function eventBodyStyle(theme) {
8957
- return {
8958
- margin: 0,
8959
- color: theme.semantic.text.muted,
8960
- fontSize: theme.typography.fontSize.sm,
8961
- lineHeight: theme.typography.lineHeight.normal
8962
- };
8963
- }
8964
- function detailGridStyle(theme) {
8965
- return {
8966
- display: "grid",
8967
- gap: theme.space[1],
8968
- margin: 0,
8969
- paddingTop: theme.space[2],
8970
- borderTop: `1px solid ${theme.semantic.intent.info.border}`
8971
- };
8972
- }
8973
- function detailLabelStyle(theme) {
8974
- return {
8975
- color: theme.semantic.text.muted,
8976
- fontSize: theme.typography.fontSize.xs,
8977
- minWidth: 0
8978
- };
8979
- }
8980
- function detailValueStyle(theme) {
8981
- return {
8982
- margin: 0,
8983
- color: theme.semantic.text.primary,
8984
- fontFamily: theme.typography.fontFamily.tabular,
8985
- fontSize: theme.typography.fontSize.xs,
8986
- fontWeight: theme.typography.fontWeight.bold,
8987
- textAlign: "right",
8988
- minWidth: 0
8989
- };
8990
- }
8991
- function emptyStyle(theme) {
8992
- return {
8993
- margin: 0,
8994
- color: theme.semantic.text.muted,
8995
- fontSize: theme.typography.fontSize.sm
8996
- };
8997
- }
8998
- function moreStyle(theme) {
8999
- return {
9000
- display: "inline-flex",
9001
- alignItems: "center",
9002
- gap: theme.space[1],
9003
- color: theme.semantic.text.muted,
9004
- fontSize: theme.typography.fontSize.xs
9005
- };
9006
- }
9007
-
9008
8774
  // src/ui/components/board/NetworkGraph.tsx
9009
8775
  import { useMemo as useMemo11 } from "react";
9010
8776
  import { clsx as clsx16 } from "clsx";
@@ -9025,7 +8791,7 @@ function handleKeyboardActivation(event, onActivate, options) {
9025
8791
  }
9026
8792
 
9027
8793
  // src/ui/components/board/NetworkGraph.tsx
9028
- import { Fragment as Fragment5, jsx as jsx39, jsxs as jsxs22 } from "react/jsx-runtime";
8794
+ import { Fragment as Fragment5, jsx as jsx38, jsxs as jsxs21 } from "react/jsx-runtime";
9029
8795
  var EMPTY_NETWORK_EDGES = [];
9030
8796
  var EMPTY_NETWORK_PIECES = [];
9031
8797
  function DefaultNetworkNode({
@@ -9046,7 +8812,7 @@ function DefaultNetworkNode({
9046
8812
  const effectiveStroke = isSelected ? "#60a5fa" : isHighlighted ? "#4ade80" : stroke;
9047
8813
  const effectiveStrokeWidth = isSelected || isHighlighted ? 3 : strokeWidth;
9048
8814
  const displayLabel = label ? label.length > maxLabelLength ? label.slice(0, maxLabelLength - 1) + "\u2026" : label : void 0;
9049
- return /* @__PURE__ */ jsxs22(
8815
+ return /* @__PURE__ */ jsxs21(
9050
8816
  "g",
9051
8817
  {
9052
8818
  onClick,
@@ -9062,7 +8828,7 @@ function DefaultNetworkNode({
9062
8828
  tabIndex: onClick ? 0 : void 0,
9063
8829
  "aria-label": onClick ? label ?? "Network node" : void 0,
9064
8830
  children: [
9065
- /* @__PURE__ */ jsx39(
8831
+ /* @__PURE__ */ jsx38(
9066
8832
  "circle",
9067
8833
  {
9068
8834
  r: radius,
@@ -9071,7 +8837,7 @@ function DefaultNetworkNode({
9071
8837
  strokeWidth: effectiveStrokeWidth
9072
8838
  }
9073
8839
  ),
9074
- displayLabel && /* @__PURE__ */ jsx39(
8840
+ displayLabel && /* @__PURE__ */ jsx38(
9075
8841
  "text",
9076
8842
  {
9077
8843
  textAnchor: "middle",
@@ -9103,7 +8869,7 @@ function DefaultNetworkEdge({
9103
8869
  const effectiveWidth = isSelected || isHighlighted ? strokeWidth + 2 : strokeWidth;
9104
8870
  const midX = (from.x + to.x) / 2;
9105
8871
  const midY = (from.y + to.y) / 2;
9106
- return /* @__PURE__ */ jsxs22(
8872
+ return /* @__PURE__ */ jsxs21(
9107
8873
  "g",
9108
8874
  {
9109
8875
  onClick,
@@ -9119,7 +8885,7 @@ function DefaultNetworkEdge({
9119
8885
  tabIndex: onClick ? 0 : void 0,
9120
8886
  "aria-label": onClick ? label !== void 0 ? `Network edge ${label}` : "Network edge" : void 0,
9121
8887
  children: [
9122
- /* @__PURE__ */ jsx39(
8888
+ /* @__PURE__ */ jsx38(
9123
8889
  "line",
9124
8890
  {
9125
8891
  x1: from.x,
@@ -9131,8 +8897,8 @@ function DefaultNetworkEdge({
9131
8897
  strokeLinecap: "round"
9132
8898
  }
9133
8899
  ),
9134
- label !== void 0 && /* @__PURE__ */ jsxs22(Fragment5, { children: [
9135
- /* @__PURE__ */ jsx39(
8900
+ label !== void 0 && /* @__PURE__ */ jsxs21(Fragment5, { children: [
8901
+ /* @__PURE__ */ jsx38(
9136
8902
  "circle",
9137
8903
  {
9138
8904
  cx: midX,
@@ -9143,7 +8909,7 @@ function DefaultNetworkEdge({
9143
8909
  strokeWidth: 1
9144
8910
  }
9145
8911
  ),
9146
- /* @__PURE__ */ jsx39(
8912
+ /* @__PURE__ */ jsx38(
9147
8913
  "text",
9148
8914
  {
9149
8915
  x: midX,
@@ -9168,7 +8934,7 @@ function DefaultNetworkPiece({
9168
8934
  onClick,
9169
8935
  className
9170
8936
  }) {
9171
- return /* @__PURE__ */ jsx39(
8937
+ return /* @__PURE__ */ jsx38(
9172
8938
  "g",
9173
8939
  {
9174
8940
  onClick,
@@ -9177,7 +8943,7 @@ function DefaultNetworkPiece({
9177
8943
  role: onClick ? "button" : void 0,
9178
8944
  tabIndex: onClick ? 0 : void 0,
9179
8945
  "aria-label": onClick ? "Network piece" : void 0,
9180
- children: shape === "square" ? /* @__PURE__ */ jsx39(
8946
+ children: shape === "square" ? /* @__PURE__ */ jsx38(
9181
8947
  "rect",
9182
8948
  {
9183
8949
  x: -radius,
@@ -9188,7 +8954,7 @@ function DefaultNetworkPiece({
9188
8954
  stroke: "white",
9189
8955
  strokeWidth: 1.5
9190
8956
  }
9191
- ) : /* @__PURE__ */ jsx39("circle", { r: radius, fill: color, stroke: "white", strokeWidth: 1.5 })
8957
+ ) : /* @__PURE__ */ jsx38("circle", { r: radius, fill: color, stroke: "white", strokeWidth: 1.5 })
9192
8958
  }
9193
8959
  );
9194
8960
  }
@@ -9255,7 +9021,7 @@ function NetworkGraph({
9255
9021
  const viewBoxX = viewBoxParts[0] ?? 0;
9256
9022
  const viewBoxY = viewBoxParts[1] ?? 0;
9257
9023
  const viewBoxHeight = viewBoxParts[3] ?? 0;
9258
- return /* @__PURE__ */ jsxs22(
9024
+ return /* @__PURE__ */ jsxs21(
9259
9025
  "svg",
9260
9026
  {
9261
9027
  width,
@@ -9272,11 +9038,11 @@ function NetworkGraph({
9272
9038
  role: "img",
9273
9039
  "aria-label": "Network graph",
9274
9040
  children: [
9275
- /* @__PURE__ */ jsx39("g", { className: "network-edges", role: "list", "aria-label": "Network connections", children: edges.map((edge) => {
9041
+ /* @__PURE__ */ jsx38("g", { className: "network-edges", role: "list", "aria-label": "Network connections", children: edges.map((edge) => {
9276
9042
  const fromNode = nodeMap[edge.from];
9277
9043
  const toNode = nodeMap[edge.to];
9278
9044
  if (!fromNode || !toNode) return null;
9279
- return /* @__PURE__ */ jsx39(
9045
+ return /* @__PURE__ */ jsx38(
9280
9046
  "g",
9281
9047
  {
9282
9048
  role: "listitem",
@@ -9286,9 +9052,9 @@ function NetworkGraph({
9286
9052
  edge.id
9287
9053
  );
9288
9054
  }) }),
9289
- /* @__PURE__ */ jsx39("g", { className: "network-nodes", role: "list", "aria-label": "Network nodes", children: nodes.map((node) => {
9055
+ /* @__PURE__ */ jsx38("g", { className: "network-nodes", role: "list", "aria-label": "Network nodes", children: nodes.map((node) => {
9290
9056
  const nodePieces = piecesByNode[node.id] ?? [];
9291
- return /* @__PURE__ */ jsxs22(
9057
+ return /* @__PURE__ */ jsxs21(
9292
9058
  "g",
9293
9059
  {
9294
9060
  transform: `translate(${node.position.x}, ${node.position.y})`,
@@ -9296,11 +9062,11 @@ function NetworkGraph({
9296
9062
  "aria-label": node.label ?? node.id,
9297
9063
  children: [
9298
9064
  renderNode(node, nodePieces),
9299
- nodePieces.length > 0 && /* @__PURE__ */ jsx39("g", { className: "node-pieces", children: nodePieces.map((piece, i) => {
9065
+ nodePieces.length > 0 && /* @__PURE__ */ jsx38("g", { className: "node-pieces", children: nodePieces.map((piece, i) => {
9300
9066
  const angle = i / nodePieces.length * 2 * Math.PI - Math.PI / 2;
9301
9067
  const pieceX = Math.cos(angle) * (nodeRadius + 8);
9302
9068
  const pieceY = Math.sin(angle) * (nodeRadius + 8);
9303
- return /* @__PURE__ */ jsx39(
9069
+ return /* @__PURE__ */ jsx38(
9304
9070
  "g",
9305
9071
  {
9306
9072
  transform: `translate(${pieceX}, ${pieceY})`,
@@ -9314,12 +9080,12 @@ function NetworkGraph({
9314
9080
  node.id
9315
9081
  );
9316
9082
  }) }),
9317
- enablePanZoom && transform.zoom !== 1 && /* @__PURE__ */ jsxs22(
9083
+ enablePanZoom && transform.zoom !== 1 && /* @__PURE__ */ jsxs21(
9318
9084
  "g",
9319
9085
  {
9320
9086
  transform: `translate(${viewBoxX + 10}, ${viewBoxY + viewBoxHeight - 30})`,
9321
9087
  children: [
9322
- /* @__PURE__ */ jsx39(
9088
+ /* @__PURE__ */ jsx38(
9323
9089
  "rect",
9324
9090
  {
9325
9091
  x: 0,
@@ -9330,7 +9096,7 @@ function NetworkGraph({
9330
9096
  fill: "rgba(0,0,0,0.6)"
9331
9097
  }
9332
9098
  ),
9333
- /* @__PURE__ */ jsxs22("text", { x: 30, y: 14, textAnchor: "middle", fill: "white", fontSize: 12, children: [
9099
+ /* @__PURE__ */ jsxs21("text", { x: 30, y: 14, textAnchor: "middle", fill: "white", fontSize: 12, children: [
9334
9100
  Math.round(transform.zoom * 100),
9335
9101
  "%"
9336
9102
  ] })
@@ -9345,7 +9111,7 @@ function NetworkGraph({
9345
9111
  // src/ui/components/board/ZoneMap.tsx
9346
9112
  import { useMemo as useMemo12 } from "react";
9347
9113
  import { clsx as clsx17 } from "clsx";
9348
- import { jsx as jsx40, jsxs as jsxs23 } from "react/jsx-runtime";
9114
+ import { jsx as jsx39, jsxs as jsxs22 } from "react/jsx-runtime";
9349
9115
  var HIGHLIGHT_COLORS = {
9350
9116
  valid: "rgba(34, 197, 94, 0.4)",
9351
9117
  // Green
@@ -9398,7 +9164,7 @@ function DefaultZone({
9398
9164
  switch (zone.shape.type) {
9399
9165
  case "polygon":
9400
9166
  if (!zone.shape.points) return null;
9401
- return /* @__PURE__ */ jsx40(
9167
+ return /* @__PURE__ */ jsx39(
9402
9168
  "polygon",
9403
9169
  {
9404
9170
  points: zone.shape.points.map((p) => `${p.x},${p.y}`).join(" "),
@@ -9409,7 +9175,7 @@ function DefaultZone({
9409
9175
  );
9410
9176
  case "path":
9411
9177
  if (!zone.shape.path) return null;
9412
- return /* @__PURE__ */ jsx40(
9178
+ return /* @__PURE__ */ jsx39(
9413
9179
  "path",
9414
9180
  {
9415
9181
  d: zone.shape.path,
@@ -9420,7 +9186,7 @@ function DefaultZone({
9420
9186
  );
9421
9187
  case "circle":
9422
9188
  if (!zone.shape.center) return null;
9423
- return /* @__PURE__ */ jsx40(
9189
+ return /* @__PURE__ */ jsx39(
9424
9190
  "circle",
9425
9191
  {
9426
9192
  cx: zone.shape.center.x,
@@ -9435,7 +9201,7 @@ function DefaultZone({
9435
9201
  return null;
9436
9202
  }
9437
9203
  };
9438
- return /* @__PURE__ */ jsxs23(
9204
+ return /* @__PURE__ */ jsxs22(
9439
9205
  "g",
9440
9206
  {
9441
9207
  onClick,
@@ -9448,7 +9214,7 @@ function DefaultZone({
9448
9214
  tabIndex: onClick ? 0 : void 0,
9449
9215
  children: [
9450
9216
  renderShape(),
9451
- showLabel && zone.shape?.center && /* @__PURE__ */ jsx40(
9217
+ showLabel && zone.shape?.center && /* @__PURE__ */ jsx39(
9452
9218
  "text",
9453
9219
  {
9454
9220
  x: zone.shape.center.x,
@@ -9462,7 +9228,7 @@ function DefaultZone({
9462
9228
  children: zone.name
9463
9229
  }
9464
9230
  ),
9465
- showValue && zone.value !== void 0 && zone.shape?.center && /* @__PURE__ */ jsxs23(
9231
+ showValue && zone.value !== void 0 && zone.shape?.center && /* @__PURE__ */ jsxs22(
9466
9232
  "text",
9467
9233
  {
9468
9234
  x: zone.shape.center.x,
@@ -9508,19 +9274,19 @@ function DefaultZonePieces({
9508
9274
  });
9509
9275
  const owners = Object.keys(piecesByOwner);
9510
9276
  const startOffset = -((owners.length - 1) * spacing) / 2;
9511
- return /* @__PURE__ */ jsx40("g", { className: clsx17("zone-pieces", className), children: owners.map((owner, i) => {
9277
+ return /* @__PURE__ */ jsx39("g", { className: clsx17("zone-pieces", className), children: owners.map((owner, i) => {
9512
9278
  const ownerPieces = piecesByOwner[owner] || [];
9513
9279
  const totalCount = ownerPieces.reduce(
9514
9280
  (sum, p) => sum + (p.count || 1),
9515
9281
  0
9516
9282
  );
9517
9283
  const offsetX = startOffset + i * spacing;
9518
- return /* @__PURE__ */ jsxs23(
9284
+ return /* @__PURE__ */ jsxs22(
9519
9285
  "g",
9520
9286
  {
9521
9287
  transform: `translate(${centerX + offsetX}, ${centerY + yOffset})`,
9522
9288
  children: [
9523
- /* @__PURE__ */ jsx40(
9289
+ /* @__PURE__ */ jsx39(
9524
9290
  "circle",
9525
9291
  {
9526
9292
  r: radius,
@@ -9529,7 +9295,7 @@ function DefaultZonePieces({
9529
9295
  strokeWidth: 2
9530
9296
  }
9531
9297
  ),
9532
- /* @__PURE__ */ jsx40(
9298
+ /* @__PURE__ */ jsx39(
9533
9299
  "text",
9534
9300
  {
9535
9301
  textAnchor: "middle",
@@ -9556,7 +9322,7 @@ function DefaultZonePiece({
9556
9322
  className
9557
9323
  }) {
9558
9324
  const count = piece.count || 1;
9559
- return /* @__PURE__ */ jsxs23(
9325
+ return /* @__PURE__ */ jsxs22(
9560
9326
  "g",
9561
9327
  {
9562
9328
  transform: `translate(${x}, ${y})`,
@@ -9570,8 +9336,8 @@ function DefaultZonePiece({
9570
9336
  tabIndex: onClick ? 0 : void 0,
9571
9337
  "aria-label": `Piece ${piece.id}`,
9572
9338
  children: [
9573
- /* @__PURE__ */ jsx40("circle", { r: radius, fill: color, stroke: "white", strokeWidth: 2 }),
9574
- /* @__PURE__ */ jsx40(
9339
+ /* @__PURE__ */ jsx39("circle", { r: radius, fill: color, stroke: "white", strokeWidth: 2 }),
9340
+ /* @__PURE__ */ jsx39(
9575
9341
  "text",
9576
9342
  {
9577
9343
  textAnchor: "middle",
@@ -9624,7 +9390,7 @@ function ZoneMap({
9624
9390
  const viewBoxHeight = baseHeight / transform.zoom;
9625
9391
  const viewBoxX = (baseWidth - viewBoxWidth) / 2 - transform.pan.x;
9626
9392
  const viewBoxY = (baseHeight - viewBoxHeight) / 2 - transform.pan.y;
9627
- return /* @__PURE__ */ jsxs23(
9393
+ return /* @__PURE__ */ jsxs22(
9628
9394
  "svg",
9629
9395
  {
9630
9396
  width,
@@ -9641,17 +9407,17 @@ function ZoneMap({
9641
9407
  role: "img",
9642
9408
  "aria-label": "Zone map",
9643
9409
  children: [
9644
- backgroundImage && /* @__PURE__ */ jsx40("image", { href: backgroundImage, width, height }),
9645
- /* @__PURE__ */ jsx40("g", { className: "zones", role: "list", "aria-label": "Map zones", children: zones.map((zone) => {
9410
+ backgroundImage && /* @__PURE__ */ jsx39("image", { href: backgroundImage, width, height }),
9411
+ /* @__PURE__ */ jsx39("g", { className: "zones", role: "list", "aria-label": "Map zones", children: zones.map((zone) => {
9646
9412
  const zonePieces = piecesByZone[zone.id] || [];
9647
- return /* @__PURE__ */ jsx40("g", { children: renderZone(zone, zonePieces) }, zone.id);
9413
+ return /* @__PURE__ */ jsx39("g", { children: renderZone(zone, zonePieces) }, zone.id);
9648
9414
  }) }),
9649
- enablePanZoom && transform.zoom !== 1 && /* @__PURE__ */ jsxs23(
9415
+ enablePanZoom && transform.zoom !== 1 && /* @__PURE__ */ jsxs22(
9650
9416
  "g",
9651
9417
  {
9652
9418
  transform: `translate(${viewBoxX + 10}, ${viewBoxY + viewBoxHeight - 30})`,
9653
9419
  children: [
9654
- /* @__PURE__ */ jsx40(
9420
+ /* @__PURE__ */ jsx39(
9655
9421
  "rect",
9656
9422
  {
9657
9423
  x: 0,
@@ -9662,7 +9428,7 @@ function ZoneMap({
9662
9428
  fill: "rgba(0,0,0,0.6)"
9663
9429
  }
9664
9430
  ),
9665
- /* @__PURE__ */ jsxs23("text", { x: 30, y: 14, textAnchor: "middle", fill: "white", fontSize: 12, children: [
9431
+ /* @__PURE__ */ jsxs22("text", { x: 30, y: 14, textAnchor: "middle", fill: "white", fontSize: 12, children: [
9666
9432
  Math.round(transform.zoom * 100),
9667
9433
  "%"
9668
9434
  ] })
@@ -9677,7 +9443,7 @@ function ZoneMap({
9677
9443
  // src/ui/components/board/TrackBoard.tsx
9678
9444
  import { useMemo as useMemo13 } from "react";
9679
9445
  import { clsx as clsx18 } from "clsx";
9680
- import { jsx as jsx41, jsxs as jsxs24 } from "react/jsx-runtime";
9446
+ import { jsx as jsx40, jsxs as jsxs23 } from "react/jsx-runtime";
9681
9447
  function DefaultTrackSpace({
9682
9448
  space,
9683
9449
  size = 50,
@@ -9696,7 +9462,7 @@ function DefaultTrackSpace({
9696
9462
  const computedFill = isHighlighted ? "rgba(59, 130, 246, 0.3)" : fill;
9697
9463
  const computedStroke = isSelected ? "#3b82f6" : isHighlighted ? "#60a5fa" : stroke;
9698
9464
  const computedStrokeWidth = isHighlighted || isSelected ? 3 : strokeWidth;
9699
- return /* @__PURE__ */ jsxs24(
9465
+ return /* @__PURE__ */ jsxs23(
9700
9466
  "g",
9701
9467
  {
9702
9468
  onClick,
@@ -9708,7 +9474,7 @@ function DefaultTrackSpace({
9708
9474
  "aria-label": space.name || `Space ${space.index}`,
9709
9475
  tabIndex: onClick ? 0 : void 0,
9710
9476
  children: [
9711
- /* @__PURE__ */ jsx41(
9477
+ /* @__PURE__ */ jsx40(
9712
9478
  "rect",
9713
9479
  {
9714
9480
  x: -halfSize,
@@ -9721,7 +9487,7 @@ function DefaultTrackSpace({
9721
9487
  strokeWidth: computedStrokeWidth
9722
9488
  }
9723
9489
  ),
9724
- space.name ? /* @__PURE__ */ jsx41(
9490
+ space.name ? /* @__PURE__ */ jsx40(
9725
9491
  "text",
9726
9492
  {
9727
9493
  textAnchor: "middle",
@@ -9731,7 +9497,7 @@ function DefaultTrackSpace({
9731
9497
  fontWeight: "bold",
9732
9498
  children: space.name.length > 8 ? space.name.slice(0, 7) + "\u2026" : space.name
9733
9499
  }
9734
- ) : /* @__PURE__ */ jsx41(
9500
+ ) : /* @__PURE__ */ jsx40(
9735
9501
  "text",
9736
9502
  {
9737
9503
  textAnchor: "middle",
@@ -9742,9 +9508,9 @@ function DefaultTrackSpace({
9742
9508
  children: space.index
9743
9509
  }
9744
9510
  ),
9745
- showJumpIndicator && space.jumpTo && /* @__PURE__ */ jsxs24("g", { transform: `translate(${halfSize - 6}, ${-halfSize + 6})`, children: [
9746
- /* @__PURE__ */ jsx41("circle", { r: 6, fill: "#fbbf24" }),
9747
- /* @__PURE__ */ jsx41(
9511
+ showJumpIndicator && space.jumpTo && /* @__PURE__ */ jsxs23("g", { transform: `translate(${halfSize - 6}, ${-halfSize + 6})`, children: [
9512
+ /* @__PURE__ */ jsx40("circle", { r: 6, fill: "#fbbf24" }),
9513
+ /* @__PURE__ */ jsx40(
9748
9514
  "text",
9749
9515
  {
9750
9516
  textAnchor: "middle",
@@ -9775,7 +9541,7 @@ function DefaultTrackPiece({
9775
9541
  const offset = total > 1 ? spacing : 0;
9776
9542
  const px = Math.cos(angle) * offset;
9777
9543
  const py = Math.sin(angle) * offset;
9778
- return /* @__PURE__ */ jsx41(
9544
+ return /* @__PURE__ */ jsx40(
9779
9545
  "circle",
9780
9546
  {
9781
9547
  cx: px,
@@ -9803,7 +9569,7 @@ function DefaultTrackConnection({
9803
9569
  strokeWidth = 2,
9804
9570
  className
9805
9571
  }) {
9806
- return /* @__PURE__ */ jsx41(
9572
+ return /* @__PURE__ */ jsx40(
9807
9573
  "line",
9808
9574
  {
9809
9575
  x1: from.x,
@@ -9838,8 +9604,8 @@ function DefaultTrackJump({
9838
9604
  const endX = to.x - unitX * (spaceSize / 2 + 5);
9839
9605
  const endY = to.y - unitY * (spaceSize / 2 + 5);
9840
9606
  const markerId = `arrow-${isUp ? "up" : "down"}-${from.x}-${from.y}`;
9841
- return /* @__PURE__ */ jsxs24("g", { className, children: [
9842
- /* @__PURE__ */ jsx41("defs", { children: /* @__PURE__ */ jsx41(
9607
+ return /* @__PURE__ */ jsxs23("g", { className, children: [
9608
+ /* @__PURE__ */ jsx40("defs", { children: /* @__PURE__ */ jsx40(
9843
9609
  "marker",
9844
9610
  {
9845
9611
  id: markerId,
@@ -9848,10 +9614,10 @@ function DefaultTrackJump({
9848
9614
  refX: "9",
9849
9615
  refY: "3.5",
9850
9616
  orient: "auto",
9851
- children: /* @__PURE__ */ jsx41("polygon", { points: "0 0, 10 3.5, 0 7", fill: color })
9617
+ children: /* @__PURE__ */ jsx40("polygon", { points: "0 0, 10 3.5, 0 7", fill: color })
9852
9618
  }
9853
9619
  ) }),
9854
- /* @__PURE__ */ jsx41(
9620
+ /* @__PURE__ */ jsx40(
9855
9621
  "line",
9856
9622
  {
9857
9623
  x1: startX,
@@ -9915,7 +9681,7 @@ function TrackBoard({
9915
9681
  return nextSpaceIds.map((nextId) => {
9916
9682
  const targetSpace = spaceMap.get(nextId);
9917
9683
  if (!targetSpace) return null;
9918
- return /* @__PURE__ */ jsx41("g", { children: renderConnection(
9684
+ return /* @__PURE__ */ jsx40("g", { children: renderConnection(
9919
9685
  space.position,
9920
9686
  targetSpace.position,
9921
9687
  space,
@@ -9932,7 +9698,7 @@ function TrackBoard({
9932
9698
  if (!targetSpace) return [];
9933
9699
  const isUp = targetSpace.index > space.index;
9934
9700
  return [
9935
- /* @__PURE__ */ jsx41("g", { children: renderJump(
9701
+ /* @__PURE__ */ jsx40("g", { children: renderJump(
9936
9702
  space.position,
9937
9703
  targetSpace.position,
9938
9704
  space,
@@ -9948,7 +9714,7 @@ function TrackBoard({
9948
9714
  const viewBoxHeight = baseHeight / transform.zoom;
9949
9715
  const viewBoxX = (baseWidth - viewBoxWidth) / 2 - transform.pan.x;
9950
9716
  const viewBoxY = (baseHeight - viewBoxHeight) / 2 - transform.pan.y;
9951
- return /* @__PURE__ */ jsxs24(
9717
+ return /* @__PURE__ */ jsxs23(
9952
9718
  "svg",
9953
9719
  {
9954
9720
  width,
@@ -9965,11 +9731,11 @@ function TrackBoard({
9965
9731
  role: "img",
9966
9732
  "aria-label": "Track board",
9967
9733
  children: [
9968
- /* @__PURE__ */ jsx41("g", { className: "track-connections", children: renderConnections() }),
9969
- /* @__PURE__ */ jsx41("g", { className: "track-jumps", children: renderJumps() }),
9970
- /* @__PURE__ */ jsx41("g", { className: "track-spaces", role: "list", "aria-label": "Track spaces", children: spaces.map((space) => {
9734
+ /* @__PURE__ */ jsx40("g", { className: "track-connections", children: renderConnections() }),
9735
+ /* @__PURE__ */ jsx40("g", { className: "track-jumps", children: renderJumps() }),
9736
+ /* @__PURE__ */ jsx40("g", { className: "track-spaces", role: "list", "aria-label": "Track spaces", children: spaces.map((space) => {
9971
9737
  const spacePieces = piecesBySpace[space.id] || [];
9972
- return /* @__PURE__ */ jsx41(
9738
+ return /* @__PURE__ */ jsx40(
9973
9739
  "g",
9974
9740
  {
9975
9741
  transform: `translate(${space.position.x}, ${space.position.y})`,
@@ -9978,12 +9744,12 @@ function TrackBoard({
9978
9744
  space.id
9979
9745
  );
9980
9746
  }) }),
9981
- enablePanZoom && transform.zoom !== 1 && /* @__PURE__ */ jsxs24(
9747
+ enablePanZoom && transform.zoom !== 1 && /* @__PURE__ */ jsxs23(
9982
9748
  "g",
9983
9749
  {
9984
9750
  transform: `translate(${viewBoxX + 10}, ${viewBoxY + viewBoxHeight - 30})`,
9985
9751
  children: [
9986
- /* @__PURE__ */ jsx41(
9752
+ /* @__PURE__ */ jsx40(
9987
9753
  "rect",
9988
9754
  {
9989
9755
  x: 0,
@@ -9994,7 +9760,7 @@ function TrackBoard({
9994
9760
  fill: "rgba(0,0,0,0.6)"
9995
9761
  }
9996
9762
  ),
9997
- /* @__PURE__ */ jsxs24("text", { x: 30, y: 14, textAnchor: "middle", fill: "white", fontSize: 12, children: [
9763
+ /* @__PURE__ */ jsxs23("text", { x: 30, y: 14, textAnchor: "middle", fill: "white", fontSize: 12, children: [
9998
9764
  Math.round(transform.zoom * 100),
9999
9765
  "%"
10000
9766
  ] })
@@ -10010,7 +9776,7 @@ function TrackBoard({
10010
9776
  import { useMemo as useMemo14 } from "react";
10011
9777
  import { clsx as clsx19 } from "clsx";
10012
9778
  import { Users, Lock, Gift, Coins } from "lucide-react";
10013
- import { jsx as jsx42, jsxs as jsxs25 } from "react/jsx-runtime";
9779
+ import { jsx as jsx41, jsxs as jsxs24 } from "react/jsx-runtime";
10014
9780
  var EMPTY_SLOT_OCCUPANTS = [];
10015
9781
  function DefaultSlotItem({
10016
9782
  name,
@@ -10034,7 +9800,7 @@ function DefaultSlotItem({
10034
9800
  const borderColor = isSelected ? theme.semantic.intent.primary.border : isFull ? theme.semantic.border.strong : isAvailable ? theme.semantic.border.default : theme.semantic.border.subtle;
10035
9801
  const background = isSelected ? theme.semantic.intent.primary.soft : isFull ? theme.semantic.surface.inset : theme.semantic.surface.card;
10036
9802
  const ringColor = isSelected ? theme.semantic.intent.primary.border : isHighlighted ? theme.semantic.intent.warning.border : void 0;
10037
- return /* @__PURE__ */ jsxs25(
9803
+ return /* @__PURE__ */ jsxs24(
10038
9804
  "div",
10039
9805
  {
10040
9806
  onClick: isAvailable ? onClick : void 0,
@@ -10056,9 +9822,9 @@ function DefaultSlotItem({
10056
9822
  "aria-disabled": !isAvailable,
10057
9823
  tabIndex: isAvailable && onClick ? 0 : void 0,
10058
9824
  children: [
10059
- /* @__PURE__ */ jsxs25("div", { className: "flex items-start justify-between gap-2", children: [
10060
- /* @__PURE__ */ jsxs25("div", { children: [
10061
- /* @__PURE__ */ jsx42(
9825
+ /* @__PURE__ */ jsxs24("div", { className: "flex items-start justify-between gap-2", children: [
9826
+ /* @__PURE__ */ jsxs24("div", { children: [
9827
+ /* @__PURE__ */ jsx41(
10062
9828
  "h3",
10063
9829
  {
10064
9830
  className: "font-bold",
@@ -10066,7 +9832,7 @@ function DefaultSlotItem({
10066
9832
  children: name
10067
9833
  }
10068
9834
  ),
10069
- description && /* @__PURE__ */ jsx42(
9835
+ description && /* @__PURE__ */ jsx41(
10070
9836
  "p",
10071
9837
  {
10072
9838
  className: "text-xs mt-0.5",
@@ -10075,8 +9841,8 @@ function DefaultSlotItem({
10075
9841
  }
10076
9842
  )
10077
9843
  ] }),
10078
- /* @__PURE__ */ jsxs25("div", { className: "flex items-center gap-1", children: [
10079
- isExclusive && /* @__PURE__ */ jsx42(
9844
+ /* @__PURE__ */ jsxs24("div", { className: "flex items-center gap-1", children: [
9845
+ isExclusive && /* @__PURE__ */ jsx41(
10080
9846
  Lock,
10081
9847
  {
10082
9848
  className: "w-4 h-4",
@@ -10084,46 +9850,46 @@ function DefaultSlotItem({
10084
9850
  "aria-label": "Exclusive slot"
10085
9851
  }
10086
9852
  ),
10087
- capacity > 1 && /* @__PURE__ */ jsxs25(
9853
+ capacity > 1 && /* @__PURE__ */ jsxs24(
10088
9854
  "div",
10089
9855
  {
10090
9856
  className: "flex items-center gap-0.5 text-xs",
10091
9857
  style: { color: theme.semantic.text.muted },
10092
9858
  title: `Capacity: ${capacity}`,
10093
9859
  children: [
10094
- /* @__PURE__ */ jsx42(Users, { className: "w-3 h-3" }),
10095
- /* @__PURE__ */ jsx42("span", { children: capacity })
9860
+ /* @__PURE__ */ jsx41(Users, { className: "w-3 h-3" }),
9861
+ /* @__PURE__ */ jsx41("span", { children: capacity })
10096
9862
  ]
10097
9863
  }
10098
9864
  )
10099
9865
  ] })
10100
9866
  ] }),
10101
- (costLabel || rewardLabel) && /* @__PURE__ */ jsxs25("div", { className: "mt-2 flex flex-wrap gap-2 text-xs", children: [
10102
- costLabel && /* @__PURE__ */ jsxs25(
9867
+ (costLabel || rewardLabel) && /* @__PURE__ */ jsxs24("div", { className: "mt-2 flex flex-wrap gap-2 text-xs", children: [
9868
+ costLabel && /* @__PURE__ */ jsxs24(
10103
9869
  "div",
10104
9870
  {
10105
9871
  className: "flex items-center gap-1",
10106
9872
  style: { color: theme.semantic.intent.danger.solid },
10107
9873
  children: [
10108
- /* @__PURE__ */ jsx42(Coins, { className: "w-3 h-3", "aria-hidden": "true" }),
10109
- /* @__PURE__ */ jsx42("span", { children: costLabel })
9874
+ /* @__PURE__ */ jsx41(Coins, { className: "w-3 h-3", "aria-hidden": "true" }),
9875
+ /* @__PURE__ */ jsx41("span", { children: costLabel })
10110
9876
  ]
10111
9877
  }
10112
9878
  ),
10113
- rewardLabel && /* @__PURE__ */ jsxs25(
9879
+ rewardLabel && /* @__PURE__ */ jsxs24(
10114
9880
  "div",
10115
9881
  {
10116
9882
  className: "flex items-center gap-1",
10117
9883
  style: { color: theme.semantic.intent.success.solid },
10118
9884
  children: [
10119
- /* @__PURE__ */ jsx42(Gift, { className: "w-3 h-3", "aria-hidden": "true" }),
10120
- /* @__PURE__ */ jsx42("span", { children: rewardLabel })
9885
+ /* @__PURE__ */ jsx41(Gift, { className: "w-3 h-3", "aria-hidden": "true" }),
9886
+ /* @__PURE__ */ jsx41("span", { children: rewardLabel })
10121
9887
  ]
10122
9888
  }
10123
9889
  )
10124
9890
  ] }),
10125
- renderOccupants && /* @__PURE__ */ jsx42("div", { className: "mt-2", children: renderOccupants() }),
10126
- !isAvailable && !isFull && /* @__PURE__ */ jsx42(
9891
+ renderOccupants && /* @__PURE__ */ jsx41("div", { className: "mt-2", children: renderOccupants() }),
9892
+ !isAvailable && !isFull && /* @__PURE__ */ jsx41(
10127
9893
  "div",
10128
9894
  {
10129
9895
  className: "mt-2 text-xs",
@@ -10143,7 +9909,7 @@ function DefaultSlotOccupant({
10143
9909
  onClick,
10144
9910
  className
10145
9911
  }) {
10146
- return /* @__PURE__ */ jsx42(
9912
+ return /* @__PURE__ */ jsx41(
10147
9913
  "div",
10148
9914
  {
10149
9915
  onClick,
@@ -10171,7 +9937,7 @@ function DefaultEmptySlot({
10171
9937
  className
10172
9938
  }) {
10173
9939
  const theme = useTheme();
10174
- return /* @__PURE__ */ jsx42(
9940
+ return /* @__PURE__ */ jsx41(
10175
9941
  "div",
10176
9942
  {
10177
9943
  className: clsx19("rounded-full border-2 border-dashed", className),
@@ -10226,18 +9992,18 @@ function SlotSystem({
10226
9992
  }, [slots, layout]);
10227
9993
  const renderSlotItem = (slot) => {
10228
9994
  const slotOccupants = occupantsBySlot[slot.id] ?? [];
10229
- return /* @__PURE__ */ jsx42("div", { role: "listitem", "aria-label": slot.name, children: renderSlot(slot, slotOccupants) }, slot.id);
9995
+ return /* @__PURE__ */ jsx41("div", { role: "listitem", "aria-label": slot.name, children: renderSlot(slot, slotOccupants) }, slot.id);
10230
9996
  };
10231
9997
  const responsiveGridStyle = {
10232
9998
  display: "grid",
10233
9999
  gridTemplateColumns: `repeat(auto-fit, minmax(${minSlotWidth}px, 1fr))`,
10234
10000
  gap: "1rem"
10235
10001
  };
10236
- const wrapContent = (content) => /* @__PURE__ */ jsx42("div", { style: { width, height }, className: clsx19("slot-system", className), children: content });
10002
+ const wrapContent = (content) => /* @__PURE__ */ jsx41("div", { style: { width, height }, className: clsx19("slot-system", className), children: content });
10237
10003
  if (layout === "grouped" && slotGroups) {
10238
10004
  return wrapContent(
10239
- /* @__PURE__ */ jsx42("div", { className: "space-y-6", role: "list", children: Object.entries(slotGroups).map(([groupName, groupSlots]) => /* @__PURE__ */ jsxs25("div", { children: [
10240
- /* @__PURE__ */ jsx42(
10005
+ /* @__PURE__ */ jsx41("div", { className: "space-y-6", role: "list", children: Object.entries(slotGroups).map(([groupName, groupSlots]) => /* @__PURE__ */ jsxs24("div", { children: [
10006
+ /* @__PURE__ */ jsx41(
10241
10007
  "h3",
10242
10008
  {
10243
10009
  className: "text-lg font-semibold mb-3",
@@ -10245,17 +10011,17 @@ function SlotSystem({
10245
10011
  children: groupName
10246
10012
  }
10247
10013
  ),
10248
- /* @__PURE__ */ jsx42("div", { style: responsiveGridStyle, children: groupSlots.map(renderSlotItem) })
10014
+ /* @__PURE__ */ jsx41("div", { style: responsiveGridStyle, children: groupSlots.map(renderSlotItem) })
10249
10015
  ] }, groupName)) })
10250
10016
  );
10251
10017
  }
10252
10018
  if (layout === "list") {
10253
10019
  return wrapContent(
10254
- /* @__PURE__ */ jsx42("div", { className: "flex flex-col gap-2", role: "list", children: slots.map(renderSlotItem) })
10020
+ /* @__PURE__ */ jsx41("div", { className: "flex flex-col gap-2", role: "list", children: slots.map(renderSlotItem) })
10255
10021
  );
10256
10022
  }
10257
10023
  return wrapContent(
10258
- /* @__PURE__ */ jsx42("div", { style: responsiveGridStyle, role: "list", children: slots.map(renderSlotItem) })
10024
+ /* @__PURE__ */ jsx41("div", { style: responsiveGridStyle, role: "list", children: slots.map(renderSlotItem) })
10259
10025
  );
10260
10026
  }
10261
10027
 
@@ -10377,7 +10143,7 @@ function isInteractiveTargetSelectable(layer, state) {
10377
10143
  }
10378
10144
 
10379
10145
  // src/ui/components/board/tiled-grid/interactive-layer.tsx
10380
- import { jsx as jsx43 } from "react/jsx-runtime";
10146
+ import { jsx as jsx42 } from "react/jsx-runtime";
10381
10147
  function InteractiveTargetLayerGroup({
10382
10148
  layer,
10383
10149
  targets,
@@ -10392,7 +10158,7 @@ function InteractiveTargetLayerGroup({
10392
10158
  renderTargetContent
10393
10159
  }) {
10394
10160
  const { hoveredTargetId, setHoveredTargetId } = hover;
10395
- return /* @__PURE__ */ jsx43("g", { className: groupClassName, role: "group", "aria-label": groupAriaLabel, children: targets.map((target) => {
10161
+ return /* @__PURE__ */ jsx42("g", { className: groupClassName, role: "group", "aria-label": groupAriaLabel, children: targets.map((target) => {
10396
10162
  const targetId = getTargetId(target);
10397
10163
  const state = interactiveTargetRenderState(
10398
10164
  layer,
@@ -10409,7 +10175,7 @@ function InteractiveTargetLayerGroup({
10409
10175
  // HexGrid markup variant: browserAttributes spread first, then
10410
10176
  // transform, role, className (preserves HexGrid's rendered
10411
10177
  // attribute order).
10412
- /* @__PURE__ */ jsx43(
10178
+ /* @__PURE__ */ jsx42(
10413
10179
  "g",
10414
10180
  {
10415
10181
  ...state.browserAttributes,
@@ -10435,7 +10201,7 @@ function InteractiveTargetLayerGroup({
10435
10201
  // SquareGrid markup variant: transform first, then browser
10436
10202
  // attributes, className, role (preserves SquareGrid's rendered
10437
10203
  // attribute order while exposing semantic replay metadata).
10438
- /* @__PURE__ */ jsx43(
10204
+ /* @__PURE__ */ jsx42(
10439
10205
  "g",
10440
10206
  {
10441
10207
  ...getTargetTransform ? { transform: getTargetTransform(target) } : {},
@@ -10467,7 +10233,7 @@ function resolveBoardProp(props, buildInlineBoard) {
10467
10233
  }
10468
10234
 
10469
10235
  // src/ui/components/board/SquareGrid.tsx
10470
- import { Fragment as Fragment6, jsx as jsx44, jsxs as jsxs26 } from "react/jsx-runtime";
10236
+ import { Fragment as Fragment6, jsx as jsx43, jsxs as jsxs25 } from "react/jsx-runtime";
10471
10237
  function DefaultGridCell({
10472
10238
  size,
10473
10239
  isLight = true,
@@ -10485,7 +10251,7 @@ function DefaultGridCell({
10485
10251
  className
10486
10252
  }) {
10487
10253
  const baseColor = isLight ? lightColor : darkColor;
10488
- return /* @__PURE__ */ jsxs26(
10254
+ return /* @__PURE__ */ jsxs25(
10489
10255
  "g",
10490
10256
  {
10491
10257
  onClick,
@@ -10501,8 +10267,8 @@ function DefaultGridCell({
10501
10267
  tabIndex: onClick ? 0 : void 0,
10502
10268
  "aria-label": onClick ? "Grid cell" : void 0,
10503
10269
  children: [
10504
- /* @__PURE__ */ jsx44("rect", { width: size, height: size, fill: baseColor }),
10505
- isSelected && /* @__PURE__ */ jsx44(
10270
+ /* @__PURE__ */ jsx43("rect", { width: size, height: size, fill: baseColor }),
10271
+ isSelected && /* @__PURE__ */ jsx43(
10506
10272
  "rect",
10507
10273
  {
10508
10274
  width: size,
@@ -10511,7 +10277,7 @@ function DefaultGridCell({
10511
10277
  pointerEvents: "none"
10512
10278
  }
10513
10279
  ),
10514
- isHighlighted && !isSelected && /* @__PURE__ */ jsx44(
10280
+ isHighlighted && !isSelected && /* @__PURE__ */ jsx43(
10515
10281
  "rect",
10516
10282
  {
10517
10283
  width: size,
@@ -10520,7 +10286,7 @@ function DefaultGridCell({
10520
10286
  pointerEvents: "none"
10521
10287
  }
10522
10288
  ),
10523
- isValidMove && !isCapture && /* @__PURE__ */ jsx44(
10289
+ isValidMove && !isCapture && /* @__PURE__ */ jsx43(
10524
10290
  "circle",
10525
10291
  {
10526
10292
  cx: size / 2,
@@ -10530,7 +10296,7 @@ function DefaultGridCell({
10530
10296
  pointerEvents: "none"
10531
10297
  }
10532
10298
  ),
10533
- isCapture && /* @__PURE__ */ jsx44(
10299
+ isCapture && /* @__PURE__ */ jsx43(
10534
10300
  "circle",
10535
10301
  {
10536
10302
  cx: size / 2,
@@ -10558,7 +10324,7 @@ function DefaultGridPiece({
10558
10324
  }) {
10559
10325
  const radius = size * 0.38;
10560
10326
  const effectiveStroke = strokeColor ?? (color === "#f8fafc" || color === "#ffffff" ? "#1e293b" : "#f8fafc");
10561
- return /* @__PURE__ */ jsxs26(
10327
+ return /* @__PURE__ */ jsxs25(
10562
10328
  "g",
10563
10329
  {
10564
10330
  onClick,
@@ -10574,7 +10340,7 @@ function DefaultGridPiece({
10574
10340
  tabIndex: onClick ? 0 : void 0,
10575
10341
  "aria-label": onClick ? label ?? "Grid piece" : void 0,
10576
10342
  children: [
10577
- /* @__PURE__ */ jsx44(
10343
+ /* @__PURE__ */ jsx43(
10578
10344
  "circle",
10579
10345
  {
10580
10346
  r: isDragging ? radius * 1.1 : radius,
@@ -10584,7 +10350,7 @@ function DefaultGridPiece({
10584
10350
  style: { filter: "drop-shadow(1px 2px 2px rgba(0,0,0,0.4))" }
10585
10351
  }
10586
10352
  ),
10587
- label && /* @__PURE__ */ jsx44(
10353
+ label && /* @__PURE__ */ jsx43(
10588
10354
  "text",
10589
10355
  {
10590
10356
  y: 4,
@@ -10629,7 +10395,7 @@ function DefaultChessPiece({
10629
10395
  const symbol = CHESS_SYMBOLS[owner]?.[type] ?? "?";
10630
10396
  const textColor = owner === "white" ? "#f8fafc" : "#1e293b";
10631
10397
  const shadowFilter = owner === "white" ? "drop-shadow(1px 1px 1px rgba(0,0,0,0.5))" : "drop-shadow(1px 1px 1px rgba(255,255,255,0.3))";
10632
- return /* @__PURE__ */ jsx44(
10398
+ return /* @__PURE__ */ jsx43(
10633
10399
  "g",
10634
10400
  {
10635
10401
  onClick,
@@ -10642,7 +10408,7 @@ function DefaultChessPiece({
10642
10408
  role: onClick ? "button" : void 0,
10643
10409
  tabIndex: onClick ? 0 : void 0,
10644
10410
  "aria-label": onClick ? `${owner} ${type}` : void 0,
10645
- children: /* @__PURE__ */ jsx44(
10411
+ children: /* @__PURE__ */ jsx43(
10646
10412
  "text",
10647
10413
  {
10648
10414
  textAnchor: "middle",
@@ -10899,7 +10665,7 @@ function SquareGridImpl(props) {
10899
10665
  bounds: { minX: 0, minY: 0, width: totalWidth, height: totalHeight },
10900
10666
  viewBoxMode: "static-when-disabled"
10901
10667
  });
10902
- return /* @__PURE__ */ jsxs26(
10668
+ return /* @__PURE__ */ jsxs25(
10903
10669
  "svg",
10904
10670
  {
10905
10671
  width: svgWidth,
@@ -10916,11 +10682,11 @@ function SquareGridImpl(props) {
10916
10682
  role: "group",
10917
10683
  "aria-label": `${rows}x${cols} game grid`,
10918
10684
  children: [
10919
- /* @__PURE__ */ jsx44("defs", { children: /* @__PURE__ */ jsx44("filter", { id: "pieceShadow", x: "-20%", y: "-20%", width: "140%", height: "140%", children: /* @__PURE__ */ jsx44("feDropShadow", { dx: "1", dy: "2", stdDeviation: "2", floodOpacity: "0.4" }) }) }),
10920
- /* @__PURE__ */ jsx44("g", { className: "cells", role: "list", "aria-label": "Grid cells", children: renderableCells.map(({ row, col }) => {
10685
+ /* @__PURE__ */ jsx43("defs", { children: /* @__PURE__ */ jsx43("filter", { id: "pieceShadow", x: "-20%", y: "-20%", width: "140%", height: "140%", children: /* @__PURE__ */ jsx43("feDropShadow", { dx: "1", dy: "2", stdDeviation: "2", floodOpacity: "0.4" }) }) }),
10686
+ /* @__PURE__ */ jsx43("g", { className: "cells", role: "list", "aria-label": "Grid cells", children: renderableCells.map(({ row, col }) => {
10921
10687
  const x = labelMargin + col * cellSize;
10922
10688
  const y = row * cellSize;
10923
- return /* @__PURE__ */ jsx44(
10689
+ return /* @__PURE__ */ jsx43(
10924
10690
  "g",
10925
10691
  {
10926
10692
  transform: `translate(${x}, ${y})`,
@@ -10931,7 +10697,7 @@ function SquareGridImpl(props) {
10931
10697
  `${row}-${col}`
10932
10698
  );
10933
10699
  }) }),
10934
- interactiveSpaces && /* @__PURE__ */ jsx44(
10700
+ interactiveSpaces && /* @__PURE__ */ jsx43(
10935
10701
  InteractiveTargetLayerGroup,
10936
10702
  {
10937
10703
  layer: interactiveSpaces,
@@ -10944,8 +10710,8 @@ function SquareGridImpl(props) {
10944
10710
  selectMode: "layer-direct",
10945
10711
  hover: spaceHover,
10946
10712
  getTargetTransform: (space) => `translate(${labelMargin + space.col * cellSize}, ${space.row * cellSize})`,
10947
- renderTargetContent: (space, state, isSelectable) => /* @__PURE__ */ jsxs26(Fragment6, { children: [
10948
- isSelectable && /* @__PURE__ */ jsx44(
10713
+ renderTargetContent: (space, state, isSelectable) => /* @__PURE__ */ jsxs25(Fragment6, { children: [
10714
+ isSelectable && /* @__PURE__ */ jsx43(
10949
10715
  "rect",
10950
10716
  {
10951
10717
  x: 0,
@@ -10960,8 +10726,8 @@ function SquareGridImpl(props) {
10960
10726
  ] })
10961
10727
  }
10962
10728
  ),
10963
- renderEdge && resolvedEdgePositions.length > 0 && /* @__PURE__ */ jsx44("g", { className: "edges", "aria-label": "Board edges", children: resolvedEdgePositions.map(({ edge, interactiveEdge }) => /* @__PURE__ */ jsx44("g", { children: renderEdge(edge, interactiveEdge.position) }, edge.id)) }),
10964
- interactiveEdges && /* @__PURE__ */ jsx44(
10729
+ renderEdge && resolvedEdgePositions.length > 0 && /* @__PURE__ */ jsx43("g", { className: "edges", "aria-label": "Board edges", children: resolvedEdgePositions.map(({ edge, interactiveEdge }) => /* @__PURE__ */ jsx43("g", { children: renderEdge(edge, interactiveEdge.position) }, edge.id)) }),
10730
+ interactiveEdges && /* @__PURE__ */ jsx43(
10965
10731
  InteractiveTargetLayerGroup,
10966
10732
  {
10967
10733
  layer: interactiveEdges,
@@ -10973,7 +10739,7 @@ function SquareGridImpl(props) {
10973
10739
  browserAttributeOrder: "after-transform",
10974
10740
  selectMode: "layer-direct",
10975
10741
  hover: edgeHover,
10976
- renderTargetContent: ({ interactiveEdge: edge }, state) => renderInteractiveEdge ? renderInteractiveEdge(edge, edge.position, state) : state.isEnabled && state.isEligible ? /* @__PURE__ */ jsx44(
10742
+ renderTargetContent: ({ interactiveEdge: edge }, state) => renderInteractiveEdge ? renderInteractiveEdge(edge, edge.position, state) : state.isEnabled && state.isEligible ? /* @__PURE__ */ jsx43(
10977
10743
  "line",
10978
10744
  {
10979
10745
  x1: edge.position.x1,
@@ -10987,8 +10753,8 @@ function SquareGridImpl(props) {
10987
10753
  ) : null
10988
10754
  }
10989
10755
  ),
10990
- renderVertex && resolvedVertexPositions.length > 0 && /* @__PURE__ */ jsx44("g", { className: "vertices", "aria-label": "Board vertices", children: resolvedVertexPositions.map(({ vertex, interactiveVertex }) => /* @__PURE__ */ jsx44("g", { children: renderVertex(vertex, interactiveVertex.position) }, vertex.id)) }),
10991
- interactiveVertices && /* @__PURE__ */ jsx44(
10756
+ renderVertex && resolvedVertexPositions.length > 0 && /* @__PURE__ */ jsx43("g", { className: "vertices", "aria-label": "Board vertices", children: resolvedVertexPositions.map(({ vertex, interactiveVertex }) => /* @__PURE__ */ jsx43("g", { children: renderVertex(vertex, interactiveVertex.position) }, vertex.id)) }),
10757
+ interactiveVertices && /* @__PURE__ */ jsx43(
10992
10758
  InteractiveTargetLayerGroup,
10993
10759
  {
10994
10760
  layer: interactiveVertices,
@@ -11000,7 +10766,7 @@ function SquareGridImpl(props) {
11000
10766
  browserAttributeOrder: "after-transform",
11001
10767
  selectMode: "layer-direct",
11002
10768
  hover: vertexHover,
11003
- renderTargetContent: ({ interactiveVertex: vertex }, state) => renderInteractiveVertex ? renderInteractiveVertex(vertex, vertex.position, state) : state.isEnabled && state.isEligible ? /* @__PURE__ */ jsx44(
10769
+ renderTargetContent: ({ interactiveVertex: vertex }, state) => renderInteractiveVertex ? renderInteractiveVertex(vertex, vertex.position, state) : state.isEnabled && state.isEligible ? /* @__PURE__ */ jsx43(
11004
10770
  "circle",
11005
10771
  {
11006
10772
  cx: vertex.position.x,
@@ -11012,10 +10778,10 @@ function SquareGridImpl(props) {
11012
10778
  ) : null
11013
10779
  }
11014
10780
  ),
11015
- showCoordinates && coordinateStyle !== "none" && /* @__PURE__ */ jsxs26("g", { className: "coordinates", "aria-hidden": "true", children: [
10781
+ showCoordinates && coordinateStyle !== "none" && /* @__PURE__ */ jsxs25("g", { className: "coordinates", "aria-hidden": "true", children: [
11016
10782
  Array.from({ length: cols }).map((_, col) => {
11017
10783
  const label = coordinateStyle === "algebraic" ? String.fromCharCode(97 + col) : String(col + 1);
11018
- return /* @__PURE__ */ jsx44(
10784
+ return /* @__PURE__ */ jsx43(
11019
10785
  "text",
11020
10786
  {
11021
10787
  x: labelMargin + col * cellSize + cellSize / 2,
@@ -11031,7 +10797,7 @@ function SquareGridImpl(props) {
11031
10797
  }),
11032
10798
  Array.from({ length: rows }).map((_, row) => {
11033
10799
  const label = coordinateStyle === "algebraic" ? String(rows - row) : String(row + 1);
11034
- return /* @__PURE__ */ jsx44(
10800
+ return /* @__PURE__ */ jsx43(
11035
10801
  "text",
11036
10802
  {
11037
10803
  x: 10,
@@ -11046,10 +10812,10 @@ function SquareGridImpl(props) {
11046
10812
  );
11047
10813
  })
11048
10814
  ] }),
11049
- /* @__PURE__ */ jsx44("g", { className: "pieces", role: "list", "aria-label": "Game pieces", children: resolvedPieces.map((piece) => {
10815
+ /* @__PURE__ */ jsx43("g", { className: "pieces", role: "list", "aria-label": "Game pieces", children: resolvedPieces.map((piece) => {
11050
10816
  const x = labelMargin + piece.col * cellSize + cellSize / 2;
11051
10817
  const y = piece.row * cellSize + cellSize / 2;
11052
- return /* @__PURE__ */ jsx44(
10818
+ return /* @__PURE__ */ jsx43(
11053
10819
  "g",
11054
10820
  {
11055
10821
  transform: `translate(${x}, ${y})`,
@@ -11060,7 +10826,7 @@ function SquareGridImpl(props) {
11060
10826
  piece.id
11061
10827
  );
11062
10828
  }) }),
11063
- enablePanZoom && transform.zoom !== 1 && /* @__PURE__ */ jsx44(
10829
+ enablePanZoom && transform.zoom !== 1 && /* @__PURE__ */ jsx43(
11064
10830
  GridZoomIndicator,
11065
10831
  {
11066
10832
  viewBoxX,
@@ -11078,7 +10844,7 @@ var SquareGrid = SquareGridImpl;
11078
10844
  // src/ui/components/board/HexGrid.tsx
11079
10845
  import { useMemo as useMemo16 } from "react";
11080
10846
  import { clsx as clsx22 } from "clsx";
11081
- import { Fragment as Fragment7, jsx as jsx45, jsxs as jsxs27 } from "react/jsx-runtime";
10847
+ import { Fragment as Fragment7, jsx as jsx44, jsxs as jsxs26 } from "react/jsx-runtime";
11082
10848
  function DefaultHexTile({
11083
10849
  size,
11084
10850
  fill,
@@ -11099,7 +10865,7 @@ function DefaultHexTile({
11099
10865
  const effectiveStroke = isSelected ? "#3b82f6" : isHighlighted ? "#22c55e" : stroke;
11100
10866
  const effectiveStrokeWidth = isSelected || isHighlighted ? 3 : strokeWidth;
11101
10867
  const points = hexUtils.getHexPoints(0, 0, size * 0.95, orientation);
11102
- return /* @__PURE__ */ jsxs27(
10868
+ return /* @__PURE__ */ jsxs26(
11103
10869
  "g",
11104
10870
  {
11105
10871
  onClick,
@@ -11115,7 +10881,7 @@ function DefaultHexTile({
11115
10881
  tabIndex: onClick ? 0 : void 0,
11116
10882
  "aria-label": onClick ? label ?? "Hex tile" : void 0,
11117
10883
  children: [
11118
- /* @__PURE__ */ jsx45(
10884
+ /* @__PURE__ */ jsx44(
11119
10885
  "polygon",
11120
10886
  {
11121
10887
  points,
@@ -11125,7 +10891,7 @@ function DefaultHexTile({
11125
10891
  filter: "url(#hexShadow)"
11126
10892
  }
11127
10893
  ),
11128
- label && /* @__PURE__ */ jsx45(
10894
+ label && /* @__PURE__ */ jsx44(
11129
10895
  "text",
11130
10896
  {
11131
10897
  x: 0,
@@ -11140,7 +10906,7 @@ function DefaultHexTile({
11140
10906
  children: label
11141
10907
  }
11142
10908
  ),
11143
- showCoordinates && coordinates && /* @__PURE__ */ jsxs27(
10909
+ showCoordinates && coordinates && /* @__PURE__ */ jsxs26(
11144
10910
  "text",
11145
10911
  {
11146
10912
  x: 0,
@@ -11174,7 +10940,7 @@ function DefaultHexEdge({
11174
10940
  position.x2 - position.x1,
11175
10941
  position.y2 - position.y1
11176
10942
  );
11177
- return /* @__PURE__ */ jsxs27(
10943
+ return /* @__PURE__ */ jsxs26(
11178
10944
  "g",
11179
10945
  {
11180
10946
  onClick,
@@ -11188,7 +10954,7 @@ function DefaultHexEdge({
11188
10954
  tabIndex: onClick ? 0 : void 0,
11189
10955
  "aria-label": onClick ? "Hex edge" : void 0,
11190
10956
  children: [
11191
- /* @__PURE__ */ jsx45(
10957
+ /* @__PURE__ */ jsx44(
11192
10958
  "rect",
11193
10959
  {
11194
10960
  x: position.midX - touchTargetLength / 2,
@@ -11201,7 +10967,7 @@ function DefaultHexEdge({
11201
10967
  pointerEvents: "all"
11202
10968
  }
11203
10969
  ),
11204
- /* @__PURE__ */ jsx45(
10970
+ /* @__PURE__ */ jsx44(
11205
10971
  "line",
11206
10972
  {
11207
10973
  x1: position.x1,
@@ -11237,7 +11003,7 @@ function DefaultHexVertex({
11237
11003
  const effectiveColor = isSelected ? "rgba(59, 130, 246, 0.8)" : isHighlighted ? "rgba(34, 197, 94, 0.8)" : color;
11238
11004
  const effectiveStroke = isSelected ? "#3b82f6" : isHighlighted ? "#22c55e" : stroke;
11239
11005
  const effectiveStrokeWidth = isSelected || isHighlighted ? 3 : strokeWidth;
11240
- return /* @__PURE__ */ jsxs27(
11006
+ return /* @__PURE__ */ jsxs26(
11241
11007
  "g",
11242
11008
  {
11243
11009
  onClick,
@@ -11254,7 +11020,7 @@ function DefaultHexVertex({
11254
11020
  tabIndex: onClick ? 0 : void 0,
11255
11021
  "aria-label": onClick ? "Hex vertex" : void 0,
11256
11022
  children: [
11257
- /* @__PURE__ */ jsx45(
11023
+ /* @__PURE__ */ jsx44(
11258
11024
  "circle",
11259
11025
  {
11260
11026
  cx: position.x,
@@ -11264,7 +11030,7 @@ function DefaultHexVertex({
11264
11030
  pointerEvents: "all"
11265
11031
  }
11266
11032
  ),
11267
- shape === "square" ? /* @__PURE__ */ jsx45(
11033
+ shape === "square" ? /* @__PURE__ */ jsx44(
11268
11034
  "rect",
11269
11035
  {
11270
11036
  x: position.x - size,
@@ -11276,7 +11042,7 @@ function DefaultHexVertex({
11276
11042
  strokeWidth: effectiveStrokeWidth,
11277
11043
  className: hasOwner ? "" : "opacity-30"
11278
11044
  }
11279
- ) : /* @__PURE__ */ jsx45(
11045
+ ) : /* @__PURE__ */ jsx44(
11280
11046
  "circle",
11281
11047
  {
11282
11048
  cx: position.x,
@@ -11300,7 +11066,7 @@ function DefaultInteractiveVertex({
11300
11066
  hoverColor = "rgba(34, 197, 94, 0.8)",
11301
11067
  className
11302
11068
  }) {
11303
- return /* @__PURE__ */ jsx45(
11069
+ return /* @__PURE__ */ jsx44(
11304
11070
  "circle",
11305
11071
  {
11306
11072
  cx: position.x,
@@ -11321,7 +11087,7 @@ function DefaultInteractiveEdge({
11321
11087
  hoverColor = "rgba(251, 146, 60, 0.8)",
11322
11088
  className
11323
11089
  }) {
11324
- return /* @__PURE__ */ jsx45(
11090
+ return /* @__PURE__ */ jsx44(
11325
11091
  "line",
11326
11092
  {
11327
11093
  x1: position.x1,
@@ -11601,7 +11367,7 @@ function HexGridImpl(props) {
11601
11367
  bounds,
11602
11368
  viewBoxMode: "transformed"
11603
11369
  });
11604
- return /* @__PURE__ */ jsxs27(
11370
+ return /* @__PURE__ */ jsxs26(
11605
11371
  "svg",
11606
11372
  {
11607
11373
  width,
@@ -11618,18 +11384,18 @@ function HexGridImpl(props) {
11618
11384
  role: "group",
11619
11385
  "aria-label": "Hex grid game board",
11620
11386
  children: [
11621
- /* @__PURE__ */ jsxs27("defs", { children: [
11622
- /* @__PURE__ */ jsxs27("linearGradient", { id: "oceanGradient", x1: "0%", y1: "0%", x2: "100%", y2: "100%", children: [
11623
- /* @__PURE__ */ jsx45("stop", { offset: "0%", stopColor: "#0ea5e9" }),
11624
- /* @__PURE__ */ jsx45("stop", { offset: "100%", stopColor: "#0284c7" })
11387
+ /* @__PURE__ */ jsxs26("defs", { children: [
11388
+ /* @__PURE__ */ jsxs26("linearGradient", { id: "oceanGradient", x1: "0%", y1: "0%", x2: "100%", y2: "100%", children: [
11389
+ /* @__PURE__ */ jsx44("stop", { offset: "0%", stopColor: "#0ea5e9" }),
11390
+ /* @__PURE__ */ jsx44("stop", { offset: "100%", stopColor: "#0284c7" })
11625
11391
  ] }),
11626
- /* @__PURE__ */ jsx45("filter", { id: "hexShadow", x: "-20%", y: "-20%", width: "140%", height: "140%", children: /* @__PURE__ */ jsx45("feDropShadow", { dx: "1", dy: "1", stdDeviation: "2", floodOpacity: "0.3" }) })
11392
+ /* @__PURE__ */ jsx44("filter", { id: "hexShadow", x: "-20%", y: "-20%", width: "140%", height: "140%", children: /* @__PURE__ */ jsx44("feDropShadow", { dx: "1", dy: "1", stdDeviation: "2", floodOpacity: "0.3" }) })
11627
11393
  ] }),
11628
- /* @__PURE__ */ jsx45("g", { className: "tiles", role: "list", "aria-label": "Hex tiles", children: resolvedTiles.map((tile) => {
11394
+ /* @__PURE__ */ jsx44("g", { className: "tiles", role: "list", "aria-label": "Hex tiles", children: resolvedTiles.map((tile) => {
11629
11395
  const pos = tilePositions.get(tile.id);
11630
11396
  if (!pos) return null;
11631
11397
  const geometry = buildTileGeometry(pos);
11632
- return /* @__PURE__ */ jsx45(
11398
+ return /* @__PURE__ */ jsx44(
11633
11399
  "g",
11634
11400
  {
11635
11401
  transform: `translate(${pos.x}, ${pos.y})`,
@@ -11640,7 +11406,7 @@ function HexGridImpl(props) {
11640
11406
  tile.id
11641
11407
  );
11642
11408
  }) }),
11643
- interactiveSpaces && resolvedTiles.length > 0 && /* @__PURE__ */ jsx45(
11409
+ interactiveSpaces && resolvedTiles.length > 0 && /* @__PURE__ */ jsx44(
11644
11410
  InteractiveTargetLayerGroup,
11645
11411
  {
11646
11412
  layer: interactiveSpaces,
@@ -11653,8 +11419,8 @@ function HexGridImpl(props) {
11653
11419
  selectMode: "render-state",
11654
11420
  hover: spaceHover,
11655
11421
  getTargetTransform: ({ pos }) => `translate(${pos.x}, ${pos.y})`,
11656
- renderTargetContent: ({ space, pos }, state, isSelectable) => /* @__PURE__ */ jsxs27(Fragment7, { children: [
11657
- isSelectable && /* @__PURE__ */ jsx45(
11422
+ renderTargetContent: ({ space, pos }, state, isSelectable) => /* @__PURE__ */ jsxs26(Fragment7, { children: [
11423
+ isSelectable && /* @__PURE__ */ jsx44(
11658
11424
  "polygon",
11659
11425
  {
11660
11426
  points: buildTileGeometry(pos).points({
@@ -11668,13 +11434,13 @@ function HexGridImpl(props) {
11668
11434
  ] })
11669
11435
  }
11670
11436
  ),
11671
- resolvedEdges.length > 0 && /* @__PURE__ */ jsx45("g", { className: "edges", role: "list", "aria-label": "Hex edges", children: resolvedEdgePositions.map(({ edge, interactiveEdge }) => {
11672
- return /* @__PURE__ */ jsx45("g", { role: "listitem", children: renderEdge(edge, interactiveEdge.position) }, edge.id);
11437
+ resolvedEdges.length > 0 && /* @__PURE__ */ jsx44("g", { className: "edges", role: "list", "aria-label": "Hex edges", children: resolvedEdgePositions.map(({ edge, interactiveEdge }) => {
11438
+ return /* @__PURE__ */ jsx44("g", { role: "listitem", children: renderEdge(edge, interactiveEdge.position) }, edge.id);
11673
11439
  }) }),
11674
- resolvedVertices.length > 0 && /* @__PURE__ */ jsx45("g", { className: "vertices", role: "list", "aria-label": "Hex vertices", children: resolvedVertexPositions.map(({ vertex, interactiveVertex }) => {
11675
- return /* @__PURE__ */ jsx45("g", { role: "listitem", children: renderVertex(vertex, interactiveVertex.position) }, vertex.id);
11440
+ resolvedVertices.length > 0 && /* @__PURE__ */ jsx44("g", { className: "vertices", role: "list", "aria-label": "Hex vertices", children: resolvedVertexPositions.map(({ vertex, interactiveVertex }) => {
11441
+ return /* @__PURE__ */ jsx44("g", { role: "listitem", children: renderVertex(vertex, interactiveVertex.position) }, vertex.id);
11676
11442
  }) }),
11677
- interactiveEdges && resolvedEdgePositions.length > 0 && /* @__PURE__ */ jsx45(
11443
+ interactiveEdges && resolvedEdgePositions.length > 0 && /* @__PURE__ */ jsx44(
11678
11444
  InteractiveTargetLayerGroup,
11679
11445
  {
11680
11446
  layer: interactiveEdges,
@@ -11691,8 +11457,8 @@ function HexGridImpl(props) {
11691
11457
  edge.position.x2 - edge.position.x1,
11692
11458
  edge.position.y2 - edge.position.y1
11693
11459
  );
11694
- return /* @__PURE__ */ jsxs27(Fragment7, { children: [
11695
- isSelectable && /* @__PURE__ */ jsx45(
11460
+ return /* @__PURE__ */ jsxs26(Fragment7, { children: [
11461
+ isSelectable && /* @__PURE__ */ jsx44(
11696
11462
  "rect",
11697
11463
  {
11698
11464
  x: edge.position.midX - touchTargetLength / 2,
@@ -11705,7 +11471,7 @@ function HexGridImpl(props) {
11705
11471
  pointerEvents: "all"
11706
11472
  }
11707
11473
  ),
11708
- renderInteractiveEdge ? renderInteractiveEdge(edge, edge.position, state) : state.isEnabled && state.isEligible ? /* @__PURE__ */ jsx45(
11474
+ renderInteractiveEdge ? renderInteractiveEdge(edge, edge.position, state) : state.isEnabled && state.isEligible ? /* @__PURE__ */ jsx44(
11709
11475
  DefaultInteractiveEdge,
11710
11476
  {
11711
11477
  position: edge.position,
@@ -11717,7 +11483,7 @@ function HexGridImpl(props) {
11717
11483
  }
11718
11484
  }
11719
11485
  ),
11720
- interactiveVertices && resolvedVertexPositions.length > 0 && /* @__PURE__ */ jsx45(
11486
+ interactiveVertices && resolvedVertexPositions.length > 0 && /* @__PURE__ */ jsx44(
11721
11487
  InteractiveTargetLayerGroup,
11722
11488
  {
11723
11489
  layer: interactiveVertices,
@@ -11729,8 +11495,8 @@ function HexGridImpl(props) {
11729
11495
  browserAttributeOrder: "before-transform",
11730
11496
  selectMode: "render-state",
11731
11497
  hover: vertexHover,
11732
- renderTargetContent: ({ interactiveVertex: vertex }, state, isSelectable) => /* @__PURE__ */ jsxs27(Fragment7, { children: [
11733
- isSelectable && /* @__PURE__ */ jsx45(
11498
+ renderTargetContent: ({ interactiveVertex: vertex }, state, isSelectable) => /* @__PURE__ */ jsxs26(Fragment7, { children: [
11499
+ isSelectable && /* @__PURE__ */ jsx44(
11734
11500
  "circle",
11735
11501
  {
11736
11502
  cx: vertex.position.x,
@@ -11740,7 +11506,7 @@ function HexGridImpl(props) {
11740
11506
  pointerEvents: "all"
11741
11507
  }
11742
11508
  ),
11743
- renderInteractiveVertex ? renderInteractiveVertex(vertex, vertex.position, state) : state.isEnabled && state.isEligible ? /* @__PURE__ */ jsx45(
11509
+ renderInteractiveVertex ? renderInteractiveVertex(vertex, vertex.position, state) : state.isEnabled && state.isEligible ? /* @__PURE__ */ jsx44(
11744
11510
  DefaultInteractiveVertex,
11745
11511
  {
11746
11512
  position: vertex.position,
@@ -11751,7 +11517,7 @@ function HexGridImpl(props) {
11751
11517
  ] })
11752
11518
  }
11753
11519
  ),
11754
- effectivePanZoom && transform.zoom !== 1 && /* @__PURE__ */ jsx45(
11520
+ effectivePanZoom && transform.zoom !== 1 && /* @__PURE__ */ jsx44(
11755
11521
  GridZoomIndicator,
11756
11522
  {
11757
11523
  viewBoxX,
@@ -11906,8 +11672,6 @@ export {
11906
11672
  ActionHelp,
11907
11673
  StandingsTable,
11908
11674
  OutcomeDialog,
11909
- SystemActionSummary,
11910
- GameEventLog,
11911
11675
  DefaultNetworkNode,
11912
11676
  DefaultNetworkEdge,
11913
11677
  DefaultNetworkPiece,
@@ -11938,4 +11702,4 @@ export {
11938
11702
  HexGrid,
11939
11703
  createHexBoardView
11940
11704
  };
11941
- //# sourceMappingURL=chunk-VRRR6QZT.js.map
11705
+ //# sourceMappingURL=chunk-32PFKDV7.js.map