@mbpockets/shared-ui 0.2.0 → 0.2.6

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 (205) hide show
  1. package/dist/EventPage/editMode/index.cjs.map +1 -1
  2. package/dist/EventPage/editMode/index.d.cts +1 -1
  3. package/dist/EventPage/editMode/index.d.ts +1 -1
  4. package/dist/EventPage/editMode/index.mjs.map +1 -1
  5. package/dist/EventPage/editMode.cjs.map +1 -1
  6. package/dist/EventPage/editMode.d.cts +1 -1
  7. package/dist/EventPage/editMode.d.ts +1 -1
  8. package/dist/EventPage/editMode.mjs.map +1 -1
  9. package/dist/EventPage/index.cjs +202 -96
  10. package/dist/EventPage/index.cjs.map +1 -1
  11. package/dist/EventPage/index.d.cts +1 -1
  12. package/dist/EventPage/index.d.ts +1 -1
  13. package/dist/EventPage/index.mjs +202 -96
  14. package/dist/EventPage/index.mjs.map +1 -1
  15. package/dist/EventPage.cjs +202 -96
  16. package/dist/EventPage.cjs.map +1 -1
  17. package/dist/EventPage.d.cts +6 -4
  18. package/dist/EventPage.d.ts +6 -4
  19. package/dist/EventPage.mjs +202 -96
  20. package/dist/EventPage.mjs.map +1 -1
  21. package/dist/PlayerPage/index.cjs +12 -8
  22. package/dist/PlayerPage/index.cjs.map +1 -1
  23. package/dist/PlayerPage/index.mjs +12 -8
  24. package/dist/PlayerPage/index.mjs.map +1 -1
  25. package/dist/PlayerPage.cjs +12 -8
  26. package/dist/PlayerPage.cjs.map +1 -1
  27. package/dist/PlayerPage.mjs +12 -8
  28. package/dist/PlayerPage.mjs.map +1 -1
  29. package/dist/ProfilePage/index.cjs +12 -8
  30. package/dist/ProfilePage/index.cjs.map +1 -1
  31. package/dist/ProfilePage/index.mjs +12 -8
  32. package/dist/ProfilePage/index.mjs.map +1 -1
  33. package/dist/ProfilePage.cjs +12 -8
  34. package/dist/ProfilePage.cjs.map +1 -1
  35. package/dist/ProfilePage.mjs +12 -8
  36. package/dist/ProfilePage.mjs.map +1 -1
  37. package/dist/SearchPage/Filters/index.cjs +38 -18
  38. package/dist/SearchPage/Filters/index.cjs.map +1 -1
  39. package/dist/SearchPage/Filters/index.d.cts +2 -1
  40. package/dist/SearchPage/Filters/index.d.ts +2 -1
  41. package/dist/SearchPage/Filters/index.mjs +34 -17
  42. package/dist/SearchPage/Filters/index.mjs.map +1 -1
  43. package/dist/SearchPage/Filters.cjs +38 -18
  44. package/dist/SearchPage/Filters.cjs.map +1 -1
  45. package/dist/SearchPage/Filters.d.cts +13 -1
  46. package/dist/SearchPage/Filters.d.ts +13 -1
  47. package/dist/SearchPage/Filters.mjs +34 -17
  48. package/dist/SearchPage/Filters.mjs.map +1 -1
  49. package/dist/SearchPage/Results/index.cjs +137 -73
  50. package/dist/SearchPage/Results/index.cjs.map +1 -1
  51. package/dist/SearchPage/Results/index.mjs +137 -73
  52. package/dist/SearchPage/Results/index.mjs.map +1 -1
  53. package/dist/SearchPage/Results.cjs +137 -73
  54. package/dist/SearchPage/Results.cjs.map +1 -1
  55. package/dist/SearchPage/Results.d.cts +14 -3
  56. package/dist/SearchPage/Results.d.ts +14 -3
  57. package/dist/SearchPage/Results.mjs +137 -73
  58. package/dist/SearchPage/Results.mjs.map +1 -1
  59. package/dist/SearchPage/index.cjs +265 -130
  60. package/dist/SearchPage/index.cjs.map +1 -1
  61. package/dist/SearchPage/index.d.cts +2 -2
  62. package/dist/SearchPage/index.d.ts +2 -2
  63. package/dist/SearchPage/index.mjs +261 -129
  64. package/dist/SearchPage/index.mjs.map +1 -1
  65. package/dist/SearchPage.cjs +265 -130
  66. package/dist/SearchPage.cjs.map +1 -1
  67. package/dist/SearchPage.d.cts +25 -3
  68. package/dist/SearchPage.d.ts +25 -3
  69. package/dist/SearchPage.mjs +261 -129
  70. package/dist/SearchPage.mjs.map +1 -1
  71. package/dist/TablePage/EditComponents/index.cjs +296 -0
  72. package/dist/TablePage/EditComponents/index.cjs.map +1 -0
  73. package/dist/TablePage/EditComponents/index.d.cts +3 -0
  74. package/dist/TablePage/EditComponents/index.d.ts +3 -0
  75. package/dist/TablePage/EditComponents/index.mjs +286 -0
  76. package/dist/TablePage/EditComponents/index.mjs.map +1 -0
  77. package/dist/TablePage/EditComponents.cjs +296 -0
  78. package/dist/TablePage/EditComponents.cjs.map +1 -0
  79. package/dist/TablePage/EditComponents.d.cts +21 -0
  80. package/dist/TablePage/EditComponents.d.ts +21 -0
  81. package/dist/TablePage/EditComponents.mjs +286 -0
  82. package/dist/TablePage/EditComponents.mjs.map +1 -0
  83. package/dist/TablePage/ModalProvider/index.cjs +59 -58
  84. package/dist/TablePage/ModalProvider/index.cjs.map +1 -1
  85. package/dist/TablePage/ModalProvider/index.d.cts +1 -1
  86. package/dist/TablePage/ModalProvider/index.d.ts +1 -1
  87. package/dist/TablePage/ModalProvider/index.mjs +50 -59
  88. package/dist/TablePage/ModalProvider/index.mjs.map +1 -1
  89. package/dist/TablePage/ModalProvider.cjs +59 -58
  90. package/dist/TablePage/ModalProvider.cjs.map +1 -1
  91. package/dist/TablePage/ModalProvider.d.cts +7 -2
  92. package/dist/TablePage/ModalProvider.d.ts +7 -2
  93. package/dist/TablePage/ModalProvider.mjs +50 -59
  94. package/dist/TablePage/ModalProvider.mjs.map +1 -1
  95. package/dist/TablePage/index.cjs +555 -331
  96. package/dist/TablePage/index.cjs.map +1 -1
  97. package/dist/TablePage/index.d.cts +3 -2
  98. package/dist/TablePage/index.d.ts +3 -2
  99. package/dist/TablePage/index.mjs +539 -320
  100. package/dist/TablePage/index.mjs.map +1 -1
  101. package/dist/TablePage/players/index.cjs +24 -4
  102. package/dist/TablePage/players/index.cjs.map +1 -1
  103. package/dist/TablePage/players/index.mjs +24 -4
  104. package/dist/TablePage/players/index.mjs.map +1 -1
  105. package/dist/TablePage/players.cjs +24 -4
  106. package/dist/TablePage/players.cjs.map +1 -1
  107. package/dist/TablePage/players.mjs +24 -4
  108. package/dist/TablePage/players.mjs.map +1 -1
  109. package/dist/TablePage.cjs +555 -331
  110. package/dist/TablePage.cjs.map +1 -1
  111. package/dist/TablePage.d.cts +4 -1
  112. package/dist/TablePage.d.ts +4 -1
  113. package/dist/TablePage.mjs +539 -320
  114. package/dist/TablePage.mjs.map +1 -1
  115. package/dist/{index-D7WHhl3Q.d.ts → index-B23RQop0.d.ts} +12 -12
  116. package/dist/{index-DC0kK3aC.d.cts → index-Csj8S4A4.d.cts} +12 -12
  117. package/dist/index.cjs +972 -460
  118. package/dist/index.cjs.map +1 -1
  119. package/dist/index.d.cts +5 -4
  120. package/dist/index.d.ts +5 -4
  121. package/dist/index.mjs +953 -457
  122. package/dist/index.mjs.map +1 -1
  123. package/dist/mocks/{EventDB.cjs → EventDetails.cjs} +203 -3
  124. package/dist/mocks/EventDetails.cjs.map +1 -0
  125. package/dist/mocks/EventDetails.d.cts +6 -0
  126. package/dist/mocks/EventDetails.d.ts +6 -0
  127. package/dist/mocks/{EventDB.mjs → EventDetails.mjs} +203 -3
  128. package/dist/mocks/EventDetails.mjs.map +1 -0
  129. package/dist/mocks/Tables.cjs +1 -1
  130. package/dist/mocks/Tables.cjs.map +1 -1
  131. package/dist/mocks/Tables.mjs +1 -1
  132. package/dist/mocks/Tables.mjs.map +1 -1
  133. package/dist/mocks/Tags.cjs +200 -0
  134. package/dist/mocks/Tags.cjs.map +1 -1
  135. package/dist/mocks/Tags.mjs +200 -0
  136. package/dist/mocks/Tags.mjs.map +1 -1
  137. package/dist/mocks/index.cjs +202 -2
  138. package/dist/mocks/index.cjs.map +1 -1
  139. package/dist/mocks/index.d.cts +1 -1
  140. package/dist/mocks/index.d.ts +1 -1
  141. package/dist/mocks/index.mjs +202 -2
  142. package/dist/mocks/index.mjs.map +1 -1
  143. package/dist/mocks.cjs +202 -2
  144. package/dist/mocks.cjs.map +1 -1
  145. package/dist/mocks.d.cts +1 -1
  146. package/dist/mocks.d.ts +1 -1
  147. package/dist/mocks.mjs +202 -2
  148. package/dist/mocks.mjs.map +1 -1
  149. package/dist/shared/index.cjs +327 -64
  150. package/dist/shared/index.cjs.map +1 -1
  151. package/dist/shared/index.d.cts +1 -1
  152. package/dist/shared/index.d.ts +1 -1
  153. package/dist/shared/index.mjs +324 -64
  154. package/dist/shared/index.mjs.map +1 -1
  155. package/dist/shared.cjs +327 -64
  156. package/dist/shared.cjs.map +1 -1
  157. package/dist/shared.d.cts +25 -2
  158. package/dist/shared.d.ts +25 -2
  159. package/dist/shared.mjs +324 -64
  160. package/dist/shared.mjs.map +1 -1
  161. package/dist/types/event.d.cts +2 -3
  162. package/dist/types/event.d.ts +2 -3
  163. package/dist/types/index.d.cts +2 -2
  164. package/dist/types/index.d.ts +2 -2
  165. package/dist/types/search.d.cts +7 -1
  166. package/dist/types/search.d.ts +7 -1
  167. package/dist/types/tables.d.cts +1 -0
  168. package/dist/types/tables.d.ts +1 -0
  169. package/dist/types.d.cts +2 -2
  170. package/dist/types.d.ts +2 -2
  171. package/package.json +9 -2
  172. package/dist/TablePage/ModalProvider/index.css +0 -49
  173. package/dist/TablePage/ModalProvider/index.css.map +0 -1
  174. package/dist/TablePage/ModalProvider.css +0 -49
  175. package/dist/TablePage/ModalProvider.css.map +0 -1
  176. package/dist/TablePage/index.css +0 -49
  177. package/dist/TablePage/index.css.map +0 -1
  178. package/dist/TablePage.css +0 -49
  179. package/dist/TablePage.css.map +0 -1
  180. package/dist/index.css +0 -49
  181. package/dist/index.css.map +0 -1
  182. package/dist/mocks/EventDB.cjs.map +0 -1
  183. package/dist/mocks/EventDB.d.cts +0 -6
  184. package/dist/mocks/EventDB.d.ts +0 -6
  185. package/dist/mocks/EventDB.mjs.map +0 -1
  186. package/dist/shared/Modal/index.cjs +0 -64
  187. package/dist/shared/Modal/index.cjs.map +0 -1
  188. package/dist/shared/Modal/index.css +0 -49
  189. package/dist/shared/Modal/index.css.map +0 -1
  190. package/dist/shared/Modal/index.d.cts +0 -2
  191. package/dist/shared/Modal/index.d.ts +0 -2
  192. package/dist/shared/Modal/index.mjs +0 -62
  193. package/dist/shared/Modal/index.mjs.map +0 -1
  194. package/dist/shared/Modal.cjs +0 -64
  195. package/dist/shared/Modal.cjs.map +0 -1
  196. package/dist/shared/Modal.css +0 -49
  197. package/dist/shared/Modal.css.map +0 -1
  198. package/dist/shared/Modal.d.cts +0 -9
  199. package/dist/shared/Modal.d.ts +0 -9
  200. package/dist/shared/Modal.mjs +0 -62
  201. package/dist/shared/Modal.mjs.map +0 -1
  202. package/dist/shared/index.css +0 -49
  203. package/dist/shared/index.css.map +0 -1
  204. package/dist/shared.css +0 -49
  205. package/dist/shared.css.map +0 -1
package/dist/index.cjs CHANGED
@@ -5,13 +5,13 @@ var React7 = require('react');
5
5
  var jsxRuntime = require('react/jsx-runtime');
6
6
  var material = require('@mui/material');
7
7
  var DeleteIcon = require('@mui/icons-material/Delete');
8
- var EditIcon = require('@mui/icons-material/Edit');
8
+ var EditIcon3 = require('@mui/icons-material/Edit');
9
9
  var AddIcon = require('@mui/icons-material/Add');
10
10
  var ColorizeIcon = require('@mui/icons-material/Colorize');
11
11
  var CancelIcon = require('@mui/icons-material/Cancel');
12
12
  var CheckCircleIcon = require('@mui/icons-material/CheckCircle');
13
13
  var Box2 = require('@mui/material/Box');
14
- var Grid8 = require('@mui/material/Grid');
14
+ var Grid10 = require('@mui/material/Grid');
15
15
  var Card10 = require('@mui/material/Card');
16
16
  var CardContent10 = require('@mui/material/CardContent');
17
17
  var CardHeader4 = require('@mui/material/CardHeader');
@@ -19,6 +19,7 @@ var Divider3 = require('@mui/material/Divider');
19
19
  var Typography4 = require('@mui/material/Typography');
20
20
  var Pagination = require('@mui/material/Pagination');
21
21
  var Avatar = require('@mui/material/Avatar');
22
+ var navigation = require('next/navigation');
22
23
  var Chip2 = require('@mui/material/Chip');
23
24
  var LinearProgress = require('@mui/material/LinearProgress');
24
25
  var PersonIcon = require('@mui/icons-material/Person');
@@ -29,31 +30,41 @@ var LocationOnIcon = require('@mui/icons-material/LocationOn');
29
30
  var EventIcon = require('@mui/icons-material/Event');
30
31
  var Autocomplete = require('@mui/material/Autocomplete');
31
32
  var Popper = require('@mui/material/Popper');
33
+ var FormControl2 = require('@mui/material/FormControl');
34
+ var Select2 = require('@mui/material/Select');
35
+ var MenuItem2 = require('@mui/material/MenuItem');
32
36
  var FormControlLabel = require('@mui/material/FormControlLabel');
33
37
  var Checkbox = require('@mui/material/Checkbox');
34
- var FormControl2 = require('@mui/material/FormControl');
35
38
  var RadioGroup = require('@mui/material/RadioGroup');
36
39
  var Radio = require('@mui/material/Radio');
37
- var TextField4 = require('@mui/material/TextField');
40
+ var TextField7 = require('@mui/material/TextField');
38
41
  var FormGroup = require('@mui/material/FormGroup');
39
- var Button7 = require('@mui/material/Button');
42
+ var Button8 = require('@mui/material/Button');
40
43
  var SearchIcon = require('@mui/icons-material/Search');
41
44
  var CircularProgress3 = require('@mui/material/CircularProgress');
45
+ var CasinoIcon = require('@mui/icons-material/Casino');
46
+ var Dialog3 = require('@mui/material/Dialog');
47
+ var DialogContent3 = require('@mui/material/DialogContent');
48
+ var DialogActions3 = require('@mui/material/DialogActions');
49
+ var IconButton3 = require('@mui/material/IconButton');
50
+ var CloseIcon = require('@mui/icons-material/Close');
51
+ var ReactMarkdown = require('react-markdown');
42
52
  var Image2 = require('next/image');
43
53
  var ListIcon = require('@mui/icons-material/List');
44
54
  var SaveIcon = require('@mui/icons-material/Save');
55
+ var DialogTitle3 = require('@mui/material/DialogTitle');
45
56
 
46
57
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
47
58
 
48
59
  var React7__default = /*#__PURE__*/_interopDefault(React7);
49
60
  var DeleteIcon__default = /*#__PURE__*/_interopDefault(DeleteIcon);
50
- var EditIcon__default = /*#__PURE__*/_interopDefault(EditIcon);
61
+ var EditIcon3__default = /*#__PURE__*/_interopDefault(EditIcon3);
51
62
  var AddIcon__default = /*#__PURE__*/_interopDefault(AddIcon);
52
63
  var ColorizeIcon__default = /*#__PURE__*/_interopDefault(ColorizeIcon);
53
64
  var CancelIcon__default = /*#__PURE__*/_interopDefault(CancelIcon);
54
65
  var CheckCircleIcon__default = /*#__PURE__*/_interopDefault(CheckCircleIcon);
55
66
  var Box2__default = /*#__PURE__*/_interopDefault(Box2);
56
- var Grid8__default = /*#__PURE__*/_interopDefault(Grid8);
67
+ var Grid10__default = /*#__PURE__*/_interopDefault(Grid10);
57
68
  var Card10__default = /*#__PURE__*/_interopDefault(Card10);
58
69
  var CardContent10__default = /*#__PURE__*/_interopDefault(CardContent10);
59
70
  var CardHeader4__default = /*#__PURE__*/_interopDefault(CardHeader4);
@@ -71,19 +82,29 @@ var LocationOnIcon__default = /*#__PURE__*/_interopDefault(LocationOnIcon);
71
82
  var EventIcon__default = /*#__PURE__*/_interopDefault(EventIcon);
72
83
  var Autocomplete__default = /*#__PURE__*/_interopDefault(Autocomplete);
73
84
  var Popper__default = /*#__PURE__*/_interopDefault(Popper);
85
+ var FormControl2__default = /*#__PURE__*/_interopDefault(FormControl2);
86
+ var Select2__default = /*#__PURE__*/_interopDefault(Select2);
87
+ var MenuItem2__default = /*#__PURE__*/_interopDefault(MenuItem2);
74
88
  var FormControlLabel__default = /*#__PURE__*/_interopDefault(FormControlLabel);
75
89
  var Checkbox__default = /*#__PURE__*/_interopDefault(Checkbox);
76
- var FormControl2__default = /*#__PURE__*/_interopDefault(FormControl2);
77
90
  var RadioGroup__default = /*#__PURE__*/_interopDefault(RadioGroup);
78
91
  var Radio__default = /*#__PURE__*/_interopDefault(Radio);
79
- var TextField4__default = /*#__PURE__*/_interopDefault(TextField4);
92
+ var TextField7__default = /*#__PURE__*/_interopDefault(TextField7);
80
93
  var FormGroup__default = /*#__PURE__*/_interopDefault(FormGroup);
81
- var Button7__default = /*#__PURE__*/_interopDefault(Button7);
94
+ var Button8__default = /*#__PURE__*/_interopDefault(Button8);
82
95
  var SearchIcon__default = /*#__PURE__*/_interopDefault(SearchIcon);
83
96
  var CircularProgress3__default = /*#__PURE__*/_interopDefault(CircularProgress3);
97
+ var CasinoIcon__default = /*#__PURE__*/_interopDefault(CasinoIcon);
98
+ var Dialog3__default = /*#__PURE__*/_interopDefault(Dialog3);
99
+ var DialogContent3__default = /*#__PURE__*/_interopDefault(DialogContent3);
100
+ var DialogActions3__default = /*#__PURE__*/_interopDefault(DialogActions3);
101
+ var IconButton3__default = /*#__PURE__*/_interopDefault(IconButton3);
102
+ var CloseIcon__default = /*#__PURE__*/_interopDefault(CloseIcon);
103
+ var ReactMarkdown__default = /*#__PURE__*/_interopDefault(ReactMarkdown);
84
104
  var Image2__default = /*#__PURE__*/_interopDefault(Image2);
85
105
  var ListIcon__default = /*#__PURE__*/_interopDefault(ListIcon);
86
106
  var SaveIcon__default = /*#__PURE__*/_interopDefault(SaveIcon);
107
+ var DialogTitle3__default = /*#__PURE__*/_interopDefault(DialogTitle3);
87
108
 
88
109
  // src/components/EventPage/editMode/EventBannerEdit.tsx
89
110
  var defaultValue = {
@@ -172,12 +193,29 @@ function Chip({ tag, removeCallback }) {
172
193
  function generateTagsDisplay(tag) {
173
194
  return /* @__PURE__ */ jsxRuntime.jsx(Chip, { tag }, tag.id);
174
195
  }
175
- function renderTagsFromIds(ids, legalTags) {
196
+ function renderTagsFromIds(ids, legalTags, options = {}) {
176
197
  if (!ids || !legalTags || legalTags.length === 0) {
177
198
  return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, {});
178
199
  }
200
+ const { showEventTag = false, eventTagId } = options;
179
201
  const validTags = ids.map((id) => legalTags.find((tag) => tag.id === id)).filter((tag) => Boolean(tag));
180
- return validTags.map((tag) => generateTagsDisplay(tag));
202
+ const sortedTags = [...validTags].sort((a, b) => {
203
+ if (showEventTag && eventTagId !== void 0) {
204
+ if (a.id === eventTagId && b.id === eventTagId) return 0;
205
+ if (a.id === eventTagId) return -1;
206
+ if (b.id === eventTagId) return 1;
207
+ }
208
+ const priorityOrder = ["Organizer Run", "Display Only"];
209
+ const aIndex = priorityOrder.indexOf(a.label);
210
+ const bIndex = priorityOrder.indexOf(b.label);
211
+ if (aIndex !== -1 && bIndex !== -1) {
212
+ return aIndex - bIndex;
213
+ }
214
+ if (aIndex !== -1) return -1;
215
+ if (bIndex !== -1) return 1;
216
+ return 0;
217
+ });
218
+ return sortedTags.map((tag) => generateTagsDisplay(tag));
181
219
  }
182
220
  function EventBannerEdit({
183
221
  initialValue,
@@ -401,7 +439,7 @@ function EventBannerEdit({
401
439
  children: [
402
440
  link.text,
403
441
  /* @__PURE__ */ jsxRuntime.jsxs(material.Box, { sx: { ml: 1, display: "flex" }, children: [
404
- /* @__PURE__ */ jsxRuntime.jsx(material.Tooltip, { title: "Edit Link", children: /* @__PURE__ */ jsxRuntime.jsx(material.IconButton, { size: "small", onClick: () => openEditLink(index), sx: { color: "white", p: 0.2 }, children: /* @__PURE__ */ jsxRuntime.jsx(EditIcon__default.default, { fontSize: "inherit" }) }) }),
442
+ /* @__PURE__ */ jsxRuntime.jsx(material.Tooltip, { title: "Edit Link", children: /* @__PURE__ */ jsxRuntime.jsx(material.IconButton, { size: "small", onClick: () => openEditLink(index), sx: { color: "white", p: 0.2 }, children: /* @__PURE__ */ jsxRuntime.jsx(EditIcon3__default.default, { fontSize: "inherit" }) }) }),
405
443
  /* @__PURE__ */ jsxRuntime.jsx(material.Tooltip, { title: "Remove Link", children: /* @__PURE__ */ jsxRuntime.jsx(material.IconButton, { size: "small", onClick: () => removeLink(index), sx: { color: "error.light", p: 0.2 }, children: /* @__PURE__ */ jsxRuntime.jsx(DeleteIcon__default.default, { fontSize: "inherit" }) }) })
406
444
  ] })
407
445
  ]
@@ -528,7 +566,7 @@ function EventBasicInfo(props) {
528
566
  );
529
567
  }
530
568
  function EventBasicInfoView({ description, locationId, startingDate, endingDate, timeInfo, timezone, isOwner, onEdit }) {
531
- return /* @__PURE__ */ jsxRuntime.jsx(Grid8__default.default, { sx: { position: "relative" }, children: /* @__PURE__ */ jsxRuntime.jsx(material.Card, { style: {
569
+ return /* @__PURE__ */ jsxRuntime.jsx(Grid10__default.default, { sx: { position: "relative" }, children: /* @__PURE__ */ jsxRuntime.jsx(material.Card, { style: {
532
570
  boxShadow: "0px 4px 10px rgba(0, 0, 0, 0.1)",
533
571
  background: "linear-gradient(135deg, rgba(225, 225, 225, 1), rgba(250, 250, 250, 1))"
534
572
  }, children: /* @__PURE__ */ jsxRuntime.jsxs(material.CardContent, { children: [
@@ -812,7 +850,7 @@ function EventBannerView({
812
850
  }) {
813
851
  const backgroundColor = bannerColor || "linear-gradient(135deg, rgba(25,118,210,0.8), rgba(25,118,210,1))";
814
852
  return /* @__PURE__ */ jsxRuntime.jsxs(
815
- Grid8__default.default,
853
+ Grid10__default.default,
816
854
  {
817
855
  sx: {
818
856
  background: backgroundColor,
@@ -820,7 +858,7 @@ function EventBannerView({
820
858
  position: "relative"
821
859
  },
822
860
  children: [
823
- /* @__PURE__ */ jsxRuntime.jsxs(Grid8__default.default, { children: [
861
+ /* @__PURE__ */ jsxRuntime.jsxs(Grid10__default.default, { children: [
824
862
  /* @__PURE__ */ jsxRuntime.jsxs(
825
863
  material.Box,
826
864
  {
@@ -879,7 +917,7 @@ function EventBannerView({
879
917
  }
880
918
  ),
881
919
  /* @__PURE__ */ jsxRuntime.jsxs(
882
- Grid8__default.default,
920
+ Grid10__default.default,
883
921
  {
884
922
  display: "flex",
885
923
  justifyContent: "center",
@@ -987,6 +1025,11 @@ var generateLink = function(link) {
987
1025
  link.text
988
1026
  );
989
1027
  };
1028
+
1029
+ // src/data/values.tsx
1030
+ var DEFAULT_PROFILE_PIC = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2ZXJzaW9uPSIxLjEiIHdpZHRoPSIyNTYiIGhlaWdodD0iMjU2IiB2aWV3Qm94PSIwIDAgMjU2IDI1NiIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+CjxnIHN0eWxlPSJzdHJva2U6IG5vbmU7IHN0cm9rZS13aWR0aDogMDsgc3Ryb2tlLWRhc2hhcnJheTogbm9uZTsgc3Ryb2tlLWxpbmVjYXA6IGJ1dHQ7IHN0cm9rZS1saW5lam9pbjogbWl0ZXI7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDsgZmlsbDogbm9uZTsgZmlsbC1ydWxlOiBub256ZXJvOyBvcGFjaXR5OiAxOyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS40MDY1OTM0MDY1OTM0MDE2IDEuNDA2NTkzNDA2NTkzNDAxNikgc2NhbGUoMi44MSAyLjgxKSI+Cgk8cGF0aCBkPSJNIDQ1IDg4IGMgLTExLjA0OSAwIC0yMS4xOCAtMi4wMDMgLTI5LjAyMSAtOC42MzQgQyA2LjIxMiA3MS4xMDUgMCA1OC43NjQgMCA0NSBDIDAgMjAuMTg3IDIwLjE4NyAwIDQ1IDAgYyAyNC44MTMgMCA0NSAyMC4xODcgNDUgNDUgYyAwIDEzLjc2NSAtNi4yMTIgMjYuMTA1IC0xNS45NzkgMzQuMzY2IEMgNjYuMTgxIDg1Ljk5OCA1Ni4wNDkgODggNDUgODggeiIgc3R5bGU9InN0cm9rZTogbm9uZTsgc3Ryb2tlLXdpZHRoOiAxOyBzdHJva2UtZGFzaGFycmF5OiBub25lOyBzdHJva2UtbGluZWNhcDogYnV0dDsgc3Ryb2tlLWxpbmVqb2luOiBtaXRlcjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyBmaWxsOiByZ2IoMjE0LDIxNCwyMTQpOyBmaWxsLXJ1bGU6IG5vbnplcm87IG9wYWNpdHk6IDE7IiB0cmFuc2Zvcm09IiBtYXRyaXgoMSAwIDAgMSAwIDApICIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+Cgk8cGF0aCBkPSJNIDQ1IDYwLjcxIGMgLTExLjQ3OSAwIC0yMC44MTggLTkuMzM5IC0yMC44MTggLTIwLjgxNyBjIDAgLTExLjQ3OSA5LjMzOSAtMjAuODE4IDIwLjgxOCAtMjAuODE4IGMgMTEuNDc5IDAgMjAuODE3IDkuMzM5IDIwLjgxNyAyMC44MTggQyA2NS44MTcgNTEuMzcxIDU2LjQ3OSA2MC43MSA0NSA2MC43MSB6IiBzdHlsZT0ic3Ryb2tlOiBub25lOyBzdHJva2Utd2lkdGg6IDE7IHN0cm9rZS1kYXNoYXJyYXk6IG5vbmU7IHN0cm9rZS1saW5lY2FwOiBidXR0OyBzdHJva2UtbGluZWpvaW46IG1pdGVyOyBzdHJva2UtbWl0ZXJsaW1pdDogMTA7IGZpbGw6IHJnYigxNjUsMTY0LDE2NCk7IGZpbGwtcnVsZTogbm9uemVybzsgb3BhY2l0eTogMTsiIHRyYW5zZm9ybT0iIG1hdHJpeCgxIDAgMCAxIDAgMCkgIiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KCTxwYXRoIGQ9Ik0gNDUgOTAgYyAtMTAuNjEzIDAgLTIwLjkyMiAtMy43NzMgLTI5LjAyOCAtMTAuNjI1IGMgLTAuNjQ4IC0wLjU0OCAtMC44OCAtMS40NDQgLTAuNTc5IC0yLjIzNyBDIDIwLjAzNCA2NC45MTkgMzEuOTMzIDU2LjcxIDQ1IDU2LjcxIHMgMjQuOTY2IDguMjA5IDI5LjYwNyAyMC40MjggYyAwLjMwMSAwLjc5MyAwLjA2OSAxLjY4OSAtMC41NzkgMi4yMzcgQyA2NS45MjIgODYuMjI3IDU1LjYxMyA5MCA0NSA5MCB6IiBzdHlsZT0ic3Ryb2tlOiBub25lOyBzdHJva2Utd2lkdGg6IDE7IHN0cm9rZS1kYXNoYXJyYXk6IG5vbmU7IHN0cm9rZS1saW5lY2FwOiBidXR0OyBzdHJva2UtbGluZWpvaW46IG1pdGVyOyBzdHJva2UtbWl0ZXJsaW1pdDogMTA7IGZpbGw6IHJnYigxNjUsMTY0LDE2NCk7IGZpbGwtcnVsZTogbm9uemVybzsgb3BhY2l0eTogMTsiIHRyYW5zZm9ybT0iIG1hdHJpeCgxIDAgMCAxIDAgMCkgIiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPC9nPgo8L3N2Zz4=";
1031
+ var ProfilePictureSettings = {
1032
+ aspectRatio: 4 / 5};
990
1033
  var NextGameLabel = ({ nextGameTime }) => {
991
1034
  const date = typeof nextGameTime === "string" ? new Date(nextGameTime) : nextGameTime;
992
1035
  return /* @__PURE__ */ jsxRuntime.jsxs(material.Typography, { variant: "caption", sx: { display: "block", mb: 1, color: "primary.main", fontWeight: "bold" }, children: [
@@ -1000,17 +1043,22 @@ var BaseSearchResultCard = ({
1000
1043
  onClick,
1001
1044
  children,
1002
1045
  icon,
1003
- tags
1046
+ tags,
1047
+ showEventTag,
1048
+ eventTagId
1004
1049
  }) => {
1050
+ const router = navigation.useRouter();
1005
1051
  const handleClick = (e) => {
1052
+ const url = `/${result.type}/${result.id}`;
1053
+ if (e.ctrlKey || e.metaKey || e.shiftKey) {
1054
+ e.stopPropagation();
1055
+ window.open(url, "_blank");
1056
+ return;
1057
+ }
1006
1058
  if (onClick) {
1007
- if (e.ctrlKey || e.metaKey || e.shiftKey) {
1008
- e.stopPropagation();
1009
- const url = `/${result.type}/${result.id}`;
1010
- window.open(url, "_blank");
1011
- } else {
1012
- onClick(result.id);
1013
- }
1059
+ onClick(result.id);
1060
+ } else {
1061
+ router.push(url);
1014
1062
  }
1015
1063
  };
1016
1064
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -1019,7 +1067,7 @@ var BaseSearchResultCard = ({
1019
1067
  elevation: 6,
1020
1068
  sx: {
1021
1069
  width: "100%",
1022
- cursor: onClick ? "pointer" : "default",
1070
+ cursor: "pointer",
1023
1071
  boxShadow: "0px 8px 24px rgba(0, 0, 0, 0.15)",
1024
1072
  transition: "box-shadow 0.3s ease-in-out",
1025
1073
  "&:hover": {
@@ -1041,7 +1089,7 @@ var BaseSearchResultCard = ({
1041
1089
  const text = full || "";
1042
1090
  return text.length > 200 ? `${text.slice(0, 200).trimEnd()}...` : text;
1043
1091
  })() }) : /* @__PURE__ */ jsxRuntime.jsx(Typography4__default.default, { variant: "body1", children: result.description }),
1044
- result.tags && result.tags.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(Box2__default.default, { sx: { mt: 1, display: "flex", flexWrap: "wrap", gap: 1 }, children: renderTagsFromIds(result.tags, tags) })
1092
+ result.tags && result.tags.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(Box2__default.default, { sx: { mt: 1, display: "flex", flexWrap: "wrap", gap: 1 }, children: renderTagsFromIds(result.tags, tags, { showEventTag, eventTagId }) })
1045
1093
  ] })
1046
1094
  ] })
1047
1095
  }
@@ -1051,7 +1099,9 @@ var BaseSearchResultCard_default = BaseSearchResultCard;
1051
1099
  var PlayerResultCard = ({
1052
1100
  result,
1053
1101
  onClick,
1054
- tags
1102
+ tags,
1103
+ showEventTag,
1104
+ eventTagId
1055
1105
  }) => {
1056
1106
  const firstLetter = result.title.charAt(0).toUpperCase();
1057
1107
  const getAvatarColor = (name) => {
@@ -1083,7 +1133,7 @@ var PlayerResultCard = ({
1083
1133
  const playerIcon = /* @__PURE__ */ jsxRuntime.jsx(
1084
1134
  Avatar__default.default,
1085
1135
  {
1086
- src: result.imageUrl,
1136
+ src: result.imageUrl || DEFAULT_PROFILE_PIC,
1087
1137
  alt: result.title,
1088
1138
  sx: {
1089
1139
  width: 40,
@@ -1093,13 +1143,25 @@ var PlayerResultCard = ({
1093
1143
  children: !result.imageUrl && firstLetter
1094
1144
  }
1095
1145
  );
1096
- return /* @__PURE__ */ jsxRuntime.jsx(BaseSearchResultCard_default, { result, onClick, icon: playerIcon, tags });
1146
+ return /* @__PURE__ */ jsxRuntime.jsx(
1147
+ BaseSearchResultCard_default,
1148
+ {
1149
+ result,
1150
+ onClick,
1151
+ icon: playerIcon,
1152
+ tags,
1153
+ showEventTag,
1154
+ eventTagId
1155
+ }
1156
+ );
1097
1157
  };
1098
1158
  var PlayerResultCard_default = PlayerResultCard;
1099
1159
  var TableResultCard = ({
1100
1160
  result,
1101
1161
  onClick,
1102
- tags
1162
+ tags,
1163
+ showEventTag,
1164
+ eventTagId
1103
1165
  }) => {
1104
1166
  const rawCapacity = result.capacity;
1105
1167
  const hasDefinedCapacity = typeof rawCapacity === "number" && Number.isFinite(rawCapacity) && rawCapacity > 0;
@@ -1117,46 +1179,59 @@ var TableResultCard = ({
1117
1179
  }
1118
1180
  }
1119
1181
  );
1120
- return /* @__PURE__ */ jsxRuntime.jsx(BaseSearchResultCard_default, { result, onClick, icon: tableIcon, tags, children: /* @__PURE__ */ jsxRuntime.jsxs(Box2__default.default, { sx: { mb: 2 }, children: [
1121
- /* @__PURE__ */ jsxRuntime.jsxs(Box2__default.default, { sx: { display: "flex", justifyContent: "space-between", alignItems: "center", mb: 1 }, children: [
1122
- /* @__PURE__ */ jsxRuntime.jsxs(Typography4__default.default, { variant: "body2", children: [
1123
- /* @__PURE__ */ jsxRuntime.jsx("strong", { children: "Players:" }),
1124
- " ",
1125
- hasDefinedCapacity ? `${activePlayers}/${capacity}` : activePlayers
1126
- ] }),
1127
- typeof hasDM === "boolean" && /* @__PURE__ */ jsxRuntime.jsx(
1128
- Chip2__default.default,
1129
- {
1130
- icon: hasDM ? /* @__PURE__ */ jsxRuntime.jsx(SupervisorAccountIcon__default.default, {}) : /* @__PURE__ */ jsxRuntime.jsx(PersonIcon__default.default, {}),
1131
- label: hasDM ? "DM Present" : "No DM",
1132
- color: hasDM ? "success" : "warning",
1133
- size: "small"
1134
- }
1135
- )
1136
- ] }),
1137
- /* @__PURE__ */ jsxRuntime.jsx(
1138
- LinearProgress__default.default,
1139
- {
1140
- variant: "determinate",
1141
- value: occupancyPercentage,
1142
- sx: {
1143
- height: 10,
1144
- borderRadius: 5,
1145
- backgroundColor: "#e0e0e0",
1146
- "& .MuiLinearProgress-bar": {
1147
- backgroundColor: hasDefinedCapacity ? availableSlots > 0 ? "#4caf50" : "#f44336" : "#2196f3"
1182
+ return /* @__PURE__ */ jsxRuntime.jsx(
1183
+ BaseSearchResultCard_default,
1184
+ {
1185
+ result,
1186
+ onClick,
1187
+ icon: tableIcon,
1188
+ tags,
1189
+ showEventTag,
1190
+ eventTagId,
1191
+ children: /* @__PURE__ */ jsxRuntime.jsxs(Box2__default.default, { sx: { mb: 2 }, children: [
1192
+ /* @__PURE__ */ jsxRuntime.jsxs(Box2__default.default, { sx: { display: "flex", justifyContent: "space-between", alignItems: "center", mb: 1 }, children: [
1193
+ /* @__PURE__ */ jsxRuntime.jsxs(Typography4__default.default, { variant: "body2", children: [
1194
+ /* @__PURE__ */ jsxRuntime.jsx("strong", { children: "Players:" }),
1195
+ " ",
1196
+ hasDefinedCapacity ? `${activePlayers}/${capacity}` : activePlayers
1197
+ ] }),
1198
+ typeof hasDM === "boolean" && /* @__PURE__ */ jsxRuntime.jsx(
1199
+ Chip2__default.default,
1200
+ {
1201
+ icon: hasDM ? /* @__PURE__ */ jsxRuntime.jsx(SupervisorAccountIcon__default.default, {}) : /* @__PURE__ */ jsxRuntime.jsx(PersonIcon__default.default, {}),
1202
+ label: hasDM ? "DM Present" : "No DM",
1203
+ color: hasDM ? "success" : "warning",
1204
+ size: "small"
1205
+ }
1206
+ )
1207
+ ] }),
1208
+ /* @__PURE__ */ jsxRuntime.jsx(
1209
+ LinearProgress__default.default,
1210
+ {
1211
+ variant: "determinate",
1212
+ value: occupancyPercentage,
1213
+ sx: {
1214
+ height: 10,
1215
+ borderRadius: 5,
1216
+ backgroundColor: "#e0e0e0",
1217
+ "& .MuiLinearProgress-bar": {
1218
+ backgroundColor: hasDefinedCapacity ? availableSlots > 0 ? "#4caf50" : "#f44336" : "#2196f3"
1219
+ }
1220
+ }
1148
1221
  }
1149
- }
1150
- }
1151
- ),
1152
- hasDefinedCapacity && /* @__PURE__ */ jsxRuntime.jsx(Typography4__default.default, { variant: "body2", sx: { mt: 0.5, textAlign: "right" }, children: availableSlots > 0 ? `${availableSlots} slot${availableSlots !== 1 ? "s" : ""} available` : "Table full" })
1153
- ] }) });
1222
+ ),
1223
+ hasDefinedCapacity && /* @__PURE__ */ jsxRuntime.jsx(Typography4__default.default, { variant: "body2", sx: { mt: 0.5, textAlign: "right" }, children: availableSlots > 0 ? `${availableSlots} slot${availableSlots !== 1 ? "s" : ""} available` : "Table full" })
1224
+ ] })
1225
+ }
1226
+ );
1154
1227
  };
1155
1228
  var TableResultCard_default = TableResultCard;
1156
1229
  var EventResultCard = ({
1157
1230
  result,
1158
1231
  onClick,
1159
- tags
1232
+ tags,
1233
+ showEventTag,
1234
+ eventTagId
1160
1235
  }) => {
1161
1236
  const formatDate = (dateString) => {
1162
1237
  const options = {
@@ -1168,7 +1243,7 @@ var EventResultCard = ({
1168
1243
  try {
1169
1244
  const date = new Date(dateString);
1170
1245
  return date.toLocaleDateString("en-US", options);
1171
- } catch (error) {
1246
+ } catch (__) {
1172
1247
  return dateString;
1173
1248
  }
1174
1249
  };
@@ -1183,29 +1258,40 @@ var EventResultCard = ({
1183
1258
  }
1184
1259
  }
1185
1260
  );
1186
- return /* @__PURE__ */ jsxRuntime.jsx(BaseSearchResultCard_default, { result, onClick, icon: eventIcon, tags, children: /* @__PURE__ */ jsxRuntime.jsxs(Box2__default.default, { sx: { mb: 2 }, children: [
1187
- /* @__PURE__ */ jsxRuntime.jsxs(Box2__default.default, { sx: { display: "flex", alignItems: "center", mb: 1 }, children: [
1188
- /* @__PURE__ */ jsxRuntime.jsx(CalendarTodayIcon__default.default, { sx: { mr: 1, color: "primary.main" } }),
1189
- /* @__PURE__ */ jsxRuntime.jsxs(Typography4__default.default, { variant: "body2", children: [
1190
- /* @__PURE__ */ jsxRuntime.jsx("strong", { children: "Date:" }),
1191
- " ",
1192
- formattedDate
1193
- ] })
1194
- ] }),
1195
- /* @__PURE__ */ jsxRuntime.jsxs(Box2__default.default, { sx: { display: "flex", alignItems: "center" }, children: [
1196
- /* @__PURE__ */ jsxRuntime.jsx(LocationOnIcon__default.default, { sx: { mr: 1, color: "primary.main" } }),
1197
- /* @__PURE__ */ jsxRuntime.jsxs(Typography4__default.default, { variant: "body2", children: [
1198
- /* @__PURE__ */ jsxRuntime.jsx("strong", { children: "Location:" }),
1199
- " ",
1200
- location
1261
+ return /* @__PURE__ */ jsxRuntime.jsx(
1262
+ BaseSearchResultCard_default,
1263
+ {
1264
+ result,
1265
+ onClick,
1266
+ icon: eventIcon,
1267
+ tags,
1268
+ showEventTag,
1269
+ eventTagId,
1270
+ children: /* @__PURE__ */ jsxRuntime.jsxs(Box2__default.default, { sx: { mb: 2 }, children: [
1271
+ /* @__PURE__ */ jsxRuntime.jsxs(Box2__default.default, { sx: { display: "flex", alignItems: "center", mb: 1 }, children: [
1272
+ /* @__PURE__ */ jsxRuntime.jsx(CalendarTodayIcon__default.default, { sx: { mr: 1, color: "primary.main" } }),
1273
+ /* @__PURE__ */ jsxRuntime.jsxs(Typography4__default.default, { variant: "body2", children: [
1274
+ /* @__PURE__ */ jsxRuntime.jsx("strong", { children: "Date:" }),
1275
+ " ",
1276
+ formattedDate
1277
+ ] })
1278
+ ] }),
1279
+ /* @__PURE__ */ jsxRuntime.jsxs(Box2__default.default, { sx: { display: "flex", alignItems: "center" }, children: [
1280
+ /* @__PURE__ */ jsxRuntime.jsx(LocationOnIcon__default.default, { sx: { mr: 1, color: "primary.main" } }),
1281
+ /* @__PURE__ */ jsxRuntime.jsxs(Typography4__default.default, { variant: "body2", children: [
1282
+ /* @__PURE__ */ jsxRuntime.jsx("strong", { children: "Location:" }),
1283
+ " ",
1284
+ location
1285
+ ] })
1286
+ ] }),
1287
+ result.organizer && /* @__PURE__ */ jsxRuntime.jsxs(Typography4__default.default, { variant: "body2", sx: { mt: 1 }, children: [
1288
+ /* @__PURE__ */ jsxRuntime.jsx("strong", { children: "Organizer:" }),
1289
+ " ",
1290
+ result.organizer
1291
+ ] })
1201
1292
  ] })
1202
- ] }),
1203
- result.organizer && /* @__PURE__ */ jsxRuntime.jsxs(Typography4__default.default, { variant: "body2", sx: { mt: 1 }, children: [
1204
- /* @__PURE__ */ jsxRuntime.jsx("strong", { children: "Organizer:" }),
1205
- " ",
1206
- result.organizer
1207
- ] })
1208
- ] }) });
1293
+ }
1294
+ );
1209
1295
  };
1210
1296
  var EventResultCard_default = EventResultCard;
1211
1297
  var ResultsContainer = ({
@@ -1213,20 +1299,22 @@ var ResultsContainer = ({
1213
1299
  onResultClick,
1214
1300
  tags,
1215
1301
  pagination,
1216
- onPacketChange
1302
+ onPacketChange,
1303
+ showEventTag,
1304
+ eventTagId
1217
1305
  }) => {
1218
1306
  if (!results || results.length === 0 || !results.map) {
1219
1307
  return /* @__PURE__ */ jsxRuntime.jsx(Box2__default.default, { sx: { textAlign: "center", py: 4 }, children: "No results found. Try adjusting your filters." });
1220
1308
  }
1221
- const onPlayerClick = (id) => {
1222
- onResultClick == null ? void 0 : onResultClick(id, "player");
1223
- };
1224
- const onTableClick = (id) => {
1225
- onResultClick == null ? void 0 : onResultClick(id, "table");
1226
- };
1227
- const onEventClick = (id) => {
1228
- onResultClick == null ? void 0 : onResultClick(id, "event");
1229
- };
1309
+ const onPlayerClick = onResultClick ? (id) => {
1310
+ onResultClick(id, "player");
1311
+ } : void 0;
1312
+ const onTableClick = onResultClick ? (id) => {
1313
+ onResultClick(id, "table");
1314
+ } : void 0;
1315
+ const onEventClick = onResultClick ? (id) => {
1316
+ onResultClick(id, "event");
1317
+ } : void 0;
1230
1318
  const handlePacketChange = (_event, packet) => {
1231
1319
  onPacketChange == null ? void 0 : onPacketChange(packet);
1232
1320
  };
@@ -1250,7 +1338,9 @@ var ResultsContainer = ({
1250
1338
  {
1251
1339
  result,
1252
1340
  onClick: onPlayerClick,
1253
- tags
1341
+ tags,
1342
+ showEventTag,
1343
+ eventTagId
1254
1344
  },
1255
1345
  result.id
1256
1346
  );
@@ -1260,7 +1350,9 @@ var ResultsContainer = ({
1260
1350
  {
1261
1351
  result,
1262
1352
  onClick: onTableClick,
1263
- tags
1353
+ tags,
1354
+ showEventTag,
1355
+ eventTagId
1264
1356
  },
1265
1357
  result.id
1266
1358
  );
@@ -1270,7 +1362,9 @@ var ResultsContainer = ({
1270
1362
  {
1271
1363
  result,
1272
1364
  onClick: onEventClick,
1273
- tags
1365
+ tags,
1366
+ showEventTag,
1367
+ eventTagId
1274
1368
  },
1275
1369
  result.id
1276
1370
  );
@@ -1296,29 +1390,43 @@ var ScrollableResultsList = ({
1296
1390
  tags,
1297
1391
  maxHeight = 400,
1298
1392
  onResultClick,
1299
- emptyText
1393
+ emptyText,
1394
+ showEventTag,
1395
+ eventTagId
1300
1396
  }) => {
1301
1397
  const hasResults = Array.isArray(results) && results.length > 0;
1302
- return /* @__PURE__ */ jsxRuntime.jsx(Box2__default.default, { sx: { maxHeight, overflowY: "auto", pr: 1 }, children: hasResults ? /* @__PURE__ */ jsxRuntime.jsx(ResultsContainer_default, { results, onResultClick, tags }) : /* @__PURE__ */ jsxRuntime.jsx(Box2__default.default, { sx: { textAlign: "center", py: 2 }, children: emptyText || "No results to display." }) });
1398
+ return /* @__PURE__ */ jsxRuntime.jsx(Box2__default.default, { sx: { maxHeight, overflowY: "auto", pr: 1 }, children: hasResults ? /* @__PURE__ */ jsxRuntime.jsx(
1399
+ ResultsContainer_default,
1400
+ {
1401
+ results,
1402
+ onResultClick,
1403
+ tags,
1404
+ showEventTag,
1405
+ eventTagId
1406
+ }
1407
+ ) : /* @__PURE__ */ jsxRuntime.jsx(Box2__default.default, { sx: { textAlign: "center", py: 2 }, children: emptyText || "No results to display." }) });
1303
1408
  };
1304
1409
  var ScrollableResultsList_default = ScrollableResultsList;
1305
1410
  var TablesScrollableList = ({
1306
1411
  results,
1307
1412
  tags,
1308
1413
  maxHeight,
1309
- onResultClick
1414
+ onResultClick,
1415
+ showEventTag,
1416
+ eventTagId
1310
1417
  }) => {
1311
1418
  const tables = (results || []).filter((r) => (r == null ? void 0 : r.type) === "table");
1312
- const handleClick = (id) => onResultClick == null ? void 0 : onResultClick(id);
1313
1419
  return /* @__PURE__ */ jsxRuntime.jsx(
1314
1420
  ScrollableResultsList_default,
1315
1421
  {
1316
1422
  results: tables,
1317
1423
  tags,
1318
1424
  maxHeight,
1319
- onResultClick: (id, type) => {
1320
- if (type === "table") handleClick(id);
1321
- }
1425
+ onResultClick: onResultClick ? (id, type) => {
1426
+ if (type === "table") onResultClick(id);
1427
+ } : void 0,
1428
+ showEventTag,
1429
+ eventTagId
1322
1430
  }
1323
1431
  );
1324
1432
  };
@@ -1327,12 +1435,24 @@ var EventTablesCard = ({
1327
1435
  tables,
1328
1436
  tags,
1329
1437
  maxHeight = 450,
1330
- onTableClick
1438
+ onTableClick,
1439
+ showEventTag,
1440
+ eventTagId
1331
1441
  }) => {
1332
1442
  return /* @__PURE__ */ jsxRuntime.jsxs(Card10__default.default, { elevation: 6, sx: { width: "100%", boxShadow: "0px 8px 24px rgba(0, 0, 0, 0.15)" }, children: [
1333
1443
  /* @__PURE__ */ jsxRuntime.jsx(CardHeader4__default.default, { title: "Tables" }),
1334
1444
  /* @__PURE__ */ jsxRuntime.jsx(Divider3__default.default, {}),
1335
- /* @__PURE__ */ jsxRuntime.jsx(CardContent10__default.default, { children: /* @__PURE__ */ jsxRuntime.jsx(TablesScrollableList_default, { results: tables, tags, maxHeight, onResultClick: onTableClick }) })
1445
+ /* @__PURE__ */ jsxRuntime.jsx(CardContent10__default.default, { children: /* @__PURE__ */ jsxRuntime.jsx(
1446
+ TablesScrollableList_default,
1447
+ {
1448
+ results: tables,
1449
+ tags,
1450
+ maxHeight,
1451
+ onResultClick: onTableClick,
1452
+ showEventTag,
1453
+ eventTagId
1454
+ }
1455
+ ) })
1336
1456
  ] });
1337
1457
  };
1338
1458
  var EventTablesCard_default = EventTablesCard;
@@ -1346,24 +1466,32 @@ function EventPageLayout({
1346
1466
  tables,
1347
1467
  allTags
1348
1468
  }) {
1349
- return /* @__PURE__ */ jsxRuntime.jsx(Grid8__default.default, { container: true, flexDirection: "column", children: /* @__PURE__ */ jsxRuntime.jsxs(EventEditProvider, { initialEvent: mergedEvent, value: { isOwner, updateEvent, updateImages }, children: [
1350
- /* @__PURE__ */ jsxRuntime.jsx(Grid8__default.default, { children: /* @__PURE__ */ jsxRuntime.jsx(
1469
+ return /* @__PURE__ */ jsxRuntime.jsx(Grid10__default.default, { container: true, flexDirection: "column", children: /* @__PURE__ */ jsxRuntime.jsxs(EventEditProvider, { initialEvent: mergedEvent, value: { isOwner, updateEvent, updateImages }, children: [
1470
+ /* @__PURE__ */ jsxRuntime.jsx(Grid10__default.default, { children: /* @__PURE__ */ jsxRuntime.jsx(
1351
1471
  EventBanner,
1352
1472
  {
1353
1473
  attendees,
1354
1474
  numGames
1355
1475
  }
1356
1476
  ) }),
1357
- /* @__PURE__ */ jsxRuntime.jsxs(Grid8__default.default, { container: true, flexDirection: "row", spacing: 3, size: { xs: 12, md: 12 }, children: [
1358
- /* @__PURE__ */ jsxRuntime.jsx(Grid8__default.default, { size: { xs: 12, md: 4 }, spacing: 3, padding: 3, children: /* @__PURE__ */ jsxRuntime.jsx(
1477
+ /* @__PURE__ */ jsxRuntime.jsxs(Grid10__default.default, { container: true, flexDirection: "row", spacing: 3, size: { xs: 12, md: 12 }, children: [
1478
+ /* @__PURE__ */ jsxRuntime.jsx(Grid10__default.default, { size: { xs: 12, md: 4 }, spacing: 3, padding: 3, children: /* @__PURE__ */ jsxRuntime.jsx(
1359
1479
  EventBasicInfo,
1360
1480
  {
1361
1481
  locationId: mergedEvent.location || "0"
1362
1482
  }
1363
1483
  ) }),
1364
- /* @__PURE__ */ jsxRuntime.jsx(Grid8__default.default, { size: { xs: 12, md: 8 }, spacing: 3, padding: 3, children: /* @__PURE__ */ jsxRuntime.jsx(EventTablesCard_default, { tables, tags: allTags }) })
1484
+ /* @__PURE__ */ jsxRuntime.jsx(Grid10__default.default, { size: { xs: 12, md: 8 }, spacing: 3, padding: 3, children: /* @__PURE__ */ jsxRuntime.jsx(
1485
+ EventTablesCard_default,
1486
+ {
1487
+ tables,
1488
+ tags: allTags,
1489
+ showEventTag: true,
1490
+ eventTagId: mergedEvent.id
1491
+ }
1492
+ ) })
1365
1493
  ] }),
1366
- /* @__PURE__ */ jsxRuntime.jsx(Grid8__default.default, {})
1494
+ /* @__PURE__ */ jsxRuntime.jsx(Grid10__default.default, {})
1367
1495
  ] }) });
1368
1496
  }
1369
1497
  var PlayerDetailsCard = ({
@@ -1522,19 +1650,18 @@ var PlayerDetailsCard = ({
1522
1650
  );
1523
1651
  };
1524
1652
  var PlayerDetailsCard_default = PlayerDetailsCard;
1525
-
1526
- // src/data/values.tsx
1527
- var ProfilePictureSettings = {
1528
- aspectRatio: 4 / 5};
1529
- var PlayerDisplayCard = ({ profilePicture, username, bio, preferredPronouns }) => {
1530
- const defaultImg = "/man-walking-silhouette-clipart.jpg";
1531
- const [imageSrc, setImageSrc] = React7.useState(defaultImg);
1532
- const { aspectRatio } = ProfilePictureSettings;
1653
+ var PlayerDisplayCard = ({
1654
+ profilePicture,
1655
+ username,
1656
+ bio,
1657
+ preferredPronouns
1658
+ }) => {
1659
+ const [imageSrc, setImageSrc] = React7.useState(DEFAULT_PROFILE_PIC);
1533
1660
  React7.useEffect(() => {
1534
1661
  async function validateImage() {
1535
- const newImage = profilePicture || defaultImg;
1662
+ const newImage = profilePicture || DEFAULT_PROFILE_PIC;
1536
1663
  if (!profilePicture) {
1537
- setImageSrc(defaultImg);
1664
+ setImageSrc(DEFAULT_PROFILE_PIC);
1538
1665
  return;
1539
1666
  }
1540
1667
  const img = new Image();
@@ -1543,7 +1670,7 @@ var PlayerDisplayCard = ({ profilePicture, username, bio, preferredPronouns }) =
1543
1670
  setImageSrc(newImage);
1544
1671
  };
1545
1672
  img.onerror = () => {
1546
- setImageSrc(defaultImg);
1673
+ setImageSrc(DEFAULT_PROFILE_PIC);
1547
1674
  };
1548
1675
  }
1549
1676
  validateImage();
@@ -1573,7 +1700,7 @@ var PlayerDisplayCard = ({ profilePicture, username, bio, preferredPronouns }) =
1573
1700
  image: imageSrc,
1574
1701
  alt: `${username}'s Profile Picture`,
1575
1702
  sx: {
1576
- aspectRatio,
1703
+ aspectRatio: ProfilePictureSettings.aspectRatio,
1577
1704
  height: "auto",
1578
1705
  // Updates to maintain aspect ratio and fill space nicely
1579
1706
  width: "100%",
@@ -1892,6 +2019,24 @@ function PlayerPageLayout({
1892
2019
  ] }) })
1893
2020
  ] }) }) });
1894
2021
  }
2022
+ var DistanceFilter = ({ distances, selectedDistance, onChange }) => {
2023
+ return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
2024
+ /* @__PURE__ */ jsxRuntime.jsx(Typography4__default.default, { variant: "h6", gutterBottom: true, children: "Distance" }),
2025
+ /* @__PURE__ */ jsxRuntime.jsx(FormControl2__default.default, { fullWidth: true, size: "small", children: /* @__PURE__ */ jsxRuntime.jsxs(
2026
+ Select2__default.default,
2027
+ {
2028
+ value: selectedDistance !== void 0 ? selectedDistance : "",
2029
+ onChange: (e) => onChange(Number(e.target.value)),
2030
+ displayEmpty: true,
2031
+ children: [
2032
+ /* @__PURE__ */ jsxRuntime.jsx(MenuItem2__default.default, { value: "", children: /* @__PURE__ */ jsxRuntime.jsx("em", { children: "Any Distance" }) }),
2033
+ distances.map((option) => /* @__PURE__ */ jsxRuntime.jsx(MenuItem2__default.default, { value: option.value, children: option.display }, option.value))
2034
+ ]
2035
+ }
2036
+ ) })
2037
+ ] });
2038
+ };
2039
+ var DistanceFilter_default = DistanceFilter;
1895
2040
  var ExpiredTablesFilter = ({
1896
2041
  includeExpiredTables,
1897
2042
  onChange
@@ -1960,13 +2105,13 @@ var TagsFilter = ({
1960
2105
  shouldHaveAtLeastOne: ""
1961
2106
  });
1962
2107
  const tagOptions = React7__default.default.useMemo(() => {
2108
+ var _a;
1963
2109
  console.log("available tags: " + JSON.stringify(Tags));
1964
2110
  console.log(!Tags);
1965
- if (!Tags || Tags.length === 0 || !Tags.map) return [];
1966
- return Tags.map((tag) => ({
2111
+ return (_a = Tags == null ? void 0 : Tags.map((tag) => ({
1967
2112
  value: tag.id,
1968
2113
  label: tag.label
1969
- }));
2114
+ }))) != null ? _a : [];
1970
2115
  }, [Tags]);
1971
2116
  const handleTagChange = (tagId, category) => {
1972
2117
  let newTags = [];
@@ -1994,8 +2139,7 @@ var TagsFilter = ({
1994
2139
  };
1995
2140
  const renderSelectedTags = (selectedTags, category) => {
1996
2141
  const tagValues = [];
1997
- if (!Tags || Tags.length === 0 || !Tags.map) return null;
1998
- Tags.forEach((tag) => {
2142
+ Tags == null ? void 0 : Tags.forEach((tag) => {
1999
2143
  if (selectedTags.includes(tag.id)) {
2000
2144
  tagValues.push(tag);
2001
2145
  }
@@ -2061,7 +2205,7 @@ var TagsFilter = ({
2061
2205
  });
2062
2206
  },
2063
2207
  slots: { popper: CustomPopper2 },
2064
- renderInput: (params) => /* @__PURE__ */ jsxRuntime.jsx(TextField4__default.default, { ...params, label: `Select ${label}` })
2208
+ renderInput: (params) => /* @__PURE__ */ jsxRuntime.jsx(TextField7__default.default, { ...params, label: `Select ${label}` })
2065
2209
  },
2066
2210
  `${category}-${selectedTags.join("-")}`
2067
2211
  )
@@ -2133,7 +2277,7 @@ var TextSearchCard = ({ onChange, selectedTypes, initialTextSearch }) => {
2133
2277
  /* @__PURE__ */ jsxRuntime.jsx(Typography4__default.default, { variant: "h6", gutterBottom: true, children: "Text Search" }),
2134
2278
  /* @__PURE__ */ jsxRuntime.jsxs(Box2__default.default, { sx: { mb: 2 }, children: [
2135
2279
  /* @__PURE__ */ jsxRuntime.jsx(
2136
- TextField4__default.default,
2280
+ TextField7__default.default,
2137
2281
  {
2138
2282
  fullWidth: true,
2139
2283
  label: "Search in title and description",
@@ -2182,9 +2326,7 @@ var TypeFilter = ({ types, initialSelectedTypes = [], onChange }) => {
2182
2326
  Checkbox__default.default,
2183
2327
  {
2184
2328
  checked: selectedTypes.includes(type.id),
2185
- onChange: () => handleTypeChange(type.id),
2186
- disabled: type.id === "event",
2187
- title: type.id === "event" ? "Coming soon! Currently only player and table search are supported." : ""
2329
+ onChange: () => handleTypeChange(type.id)
2188
2330
  }
2189
2331
  ),
2190
2332
  label: type.label
@@ -2199,10 +2341,13 @@ var FiltersContainer = ({
2199
2341
  initialSelectedTags,
2200
2342
  initialTextSearch,
2201
2343
  includeExpiredTables = false,
2344
+ distance,
2345
+ distances,
2202
2346
  onTypeChange,
2203
2347
  onTagChange,
2204
2348
  onTextSearchChange,
2205
2349
  onIncludeExpiredTablesChange,
2350
+ onDistanceChange,
2206
2351
  onSubmit,
2207
2352
  tags,
2208
2353
  searchTypes
@@ -2217,7 +2362,10 @@ var FiltersContainer = ({
2217
2362
  onTypeChange(types);
2218
2363
  }
2219
2364
  };
2220
- return /* @__PURE__ */ jsxRuntime.jsxs(Box2__default.default, { children: [
2365
+ return /* @__PURE__ */ jsxRuntime.jsxs(Box2__default.default, { component: "form", onSubmit: (e) => {
2366
+ e.preventDefault();
2367
+ if (onSubmit) onSubmit();
2368
+ }, children: [
2221
2369
  /* @__PURE__ */ jsxRuntime.jsx(
2222
2370
  TypeFilter_default,
2223
2371
  {
@@ -2227,6 +2375,16 @@ var FiltersContainer = ({
2227
2375
  }
2228
2376
  ),
2229
2377
  /* @__PURE__ */ jsxRuntime.jsx(Divider3__default.default, { sx: { my: 2 } }),
2378
+ /* @__PURE__ */ jsxRuntime.jsx(
2379
+ DistanceFilter_default,
2380
+ {
2381
+ distances,
2382
+ selectedDistance: distance,
2383
+ onChange: onDistanceChange || (() => {
2384
+ })
2385
+ }
2386
+ ),
2387
+ /* @__PURE__ */ jsxRuntime.jsx(Divider3__default.default, { sx: { my: 2 } }),
2230
2388
  /* @__PURE__ */ jsxRuntime.jsx(
2231
2389
  TextSearchCard_default,
2232
2390
  {
@@ -2257,13 +2415,13 @@ var FiltersContainer = ({
2257
2415
  /* @__PURE__ */ jsxRuntime.jsx(Divider3__default.default, { sx: { my: 2 } })
2258
2416
  ] }),
2259
2417
  /* @__PURE__ */ jsxRuntime.jsx(Box2__default.default, { sx: { display: "flex", justifyContent: "center", mt: 2 }, children: /* @__PURE__ */ jsxRuntime.jsx(
2260
- Button7__default.default,
2418
+ Button8__default.default,
2261
2419
  {
2420
+ type: "submit",
2262
2421
  variant: "contained",
2263
2422
  color: "primary",
2264
2423
  size: "large",
2265
2424
  startIcon: /* @__PURE__ */ jsxRuntime.jsx(SearchIcon__default.default, {}),
2266
- onClick: onSubmit,
2267
2425
  sx: {
2268
2426
  width: "100%",
2269
2427
  py: 1.5,
@@ -2288,16 +2446,15 @@ var PlayersScrollableList = ({
2288
2446
  onResultClick
2289
2447
  }) => {
2290
2448
  const players = (results || []).filter((r) => (r == null ? void 0 : r.type) === "player");
2291
- const handleClick = (id) => onResultClick == null ? void 0 : onResultClick(id);
2292
2449
  return /* @__PURE__ */ jsxRuntime.jsx(
2293
2450
  ScrollableResultsList_default,
2294
2451
  {
2295
2452
  results: players,
2296
2453
  tags,
2297
2454
  maxHeight,
2298
- onResultClick: (id, type) => {
2299
- if (type === "player") handleClick(id);
2300
- }
2455
+ onResultClick: onResultClick ? (id, type) => {
2456
+ if (type === "player") onResultClick(id);
2457
+ } : void 0
2301
2458
  }
2302
2459
  );
2303
2460
  };
@@ -2323,11 +2480,13 @@ function SearchPageLayout({
2323
2480
  query: "",
2324
2481
  titleOnly: false
2325
2482
  },
2326
- includeExpiredTables: initialIncludeExpiredTables = false,
2483
+ initialDistance,
2484
+ distances,
2327
2485
  onTypeChange,
2328
2486
  onTagChange,
2329
2487
  onTextSearchChange,
2330
2488
  onIncludeExpiredTablesChange,
2489
+ onDistanceChange,
2331
2490
  onSubmit,
2332
2491
  onResultClick,
2333
2492
  onPacketChange,
@@ -2335,14 +2494,16 @@ function SearchPageLayout({
2335
2494
  validTags,
2336
2495
  allTags,
2337
2496
  searchTypes,
2338
- isLoading = false
2497
+ isLoading = false,
2498
+ eventTagId
2339
2499
  }) {
2340
2500
  const theme = material.useTheme();
2341
2501
  const isMobile = material.useMediaQuery(theme.breakpoints.down("md"));
2342
2502
  const [selectedTypes, setSelectedTypes] = React7.useState(initialSelectedTypes);
2343
2503
  const [selectedTags, setSelectedTags] = React7.useState(initialSelectedTags);
2344
2504
  const [textSearch, setTextSearch] = React7.useState(initialTextSearch);
2345
- const [includeExpiredTables, setIncludeExpiredTables] = React7.useState(initialIncludeExpiredTables);
2505
+ const [includeExpiredTables, setIncludeExpiredTables] = React7.useState(false);
2506
+ const [distance, setDistance] = React7.useState(initialDistance);
2346
2507
  React7.useEffect(() => {
2347
2508
  setSelectedTypes(initialSelectedTypes);
2348
2509
  }, [initialSelectedTypes]);
@@ -2353,8 +2514,8 @@ function SearchPageLayout({
2353
2514
  setTextSearch(initialTextSearch);
2354
2515
  }, [initialTextSearch]);
2355
2516
  React7.useEffect(() => {
2356
- setIncludeExpiredTables(initialIncludeExpiredTables);
2357
- }, [initialIncludeExpiredTables]);
2517
+ setDistance(initialDistance);
2518
+ }, [initialDistance]);
2358
2519
  const handleTypeChange = (types) => {
2359
2520
  setSelectedTypes(types);
2360
2521
  if (onTypeChange) onTypeChange(types);
@@ -2371,12 +2532,17 @@ function SearchPageLayout({
2371
2532
  setIncludeExpiredTables(include);
2372
2533
  if (onIncludeExpiredTablesChange) onIncludeExpiredTablesChange(include);
2373
2534
  };
2535
+ const handleDistanceChange = (dist) => {
2536
+ setDistance(dist);
2537
+ if (onDistanceChange) onDistanceChange(dist);
2538
+ };
2374
2539
  const handleSubmit = () => {
2375
2540
  const currentCriteria = {
2376
2541
  selectedTypes,
2377
2542
  selectedTags,
2378
2543
  textSearch,
2379
- includeExpiredTables
2544
+ includeExpiredTables,
2545
+ distance
2380
2546
  };
2381
2547
  if (onSubmit) {
2382
2548
  onSubmit(currentCriteria);
@@ -2395,8 +2561,8 @@ function SearchPageLayout({
2395
2561
  }
2396
2562
  }
2397
2563
  ) }),
2398
- /* @__PURE__ */ jsxRuntime.jsxs(Grid8__default.default, { container: true, spacing: 2, children: [
2399
- /* @__PURE__ */ jsxRuntime.jsx(Grid8__default.default, { size: { xs: 12, md: 3 }, children: /* @__PURE__ */ jsxRuntime.jsxs(Card10__default.default, { sx: { marginBottom: isMobile ? 2 : 0 }, children: [
2564
+ /* @__PURE__ */ jsxRuntime.jsxs(Grid10__default.default, { container: true, spacing: 2, children: [
2565
+ /* @__PURE__ */ jsxRuntime.jsx(Grid10__default.default, { size: { xs: 12, md: 3 }, children: /* @__PURE__ */ jsxRuntime.jsxs(Card10__default.default, { sx: { marginBottom: isMobile ? 2 : 0 }, children: [
2400
2566
  /* @__PURE__ */ jsxRuntime.jsx(
2401
2567
  CardHeader4__default.default,
2402
2568
  {
@@ -2416,17 +2582,20 @@ function SearchPageLayout({
2416
2582
  initialSelectedTags: selectedTags,
2417
2583
  initialTextSearch: textSearch,
2418
2584
  includeExpiredTables,
2585
+ distance,
2586
+ distances,
2419
2587
  onTypeChange: handleTypeChange,
2420
2588
  onTagChange: handleTagChange,
2421
2589
  onTextSearchChange: handleTextSearchChange,
2422
2590
  onIncludeExpiredTablesChange: handleIncludeExpiredTablesChange,
2591
+ onDistanceChange: handleDistanceChange,
2423
2592
  onSubmit: handleSubmit,
2424
2593
  tags: validTags,
2425
2594
  searchTypes
2426
2595
  }
2427
2596
  ) })
2428
2597
  ] }) }),
2429
- /* @__PURE__ */ jsxRuntime.jsx(Grid8__default.default, { size: { xs: 12, md: 9 }, children: /* @__PURE__ */ jsxRuntime.jsxs(Card10__default.default, { children: [
2598
+ /* @__PURE__ */ jsxRuntime.jsx(Grid10__default.default, { size: { xs: 12, md: 9 }, children: /* @__PURE__ */ jsxRuntime.jsxs(Card10__default.default, { children: [
2430
2599
  /* @__PURE__ */ jsxRuntime.jsx(
2431
2600
  CardHeader4__default.default,
2432
2601
  {
@@ -2446,13 +2615,255 @@ function SearchPageLayout({
2446
2615
  pagination,
2447
2616
  onPacketChange,
2448
2617
  onResultClick,
2449
- tags: allTags
2618
+ tags: allTags,
2619
+ showEventTag: true,
2620
+ eventTagId
2450
2621
  }
2451
2622
  ) })
2452
2623
  ] }) })
2453
2624
  ] })
2454
2625
  ] });
2455
2626
  }
2627
+
2628
+ // src/components/shared/NameGenerator.ts
2629
+ var getRandomTitle = () => {
2630
+ const randomPrefix = titlePrefixes[Math.random() * titlePrefixes.length | 0];
2631
+ const randomMiddle = tileMiddle[Math.random() * tileMiddle.length | 0];
2632
+ const randomSuffix = titleSuffixes[Math.random() * titleSuffixes.length | 0];
2633
+ return `${randomPrefix} ${randomMiddle} ${randomSuffix}`;
2634
+ };
2635
+ var getRandomTagline = () => taglines[Math.random() * taglines.length | 0];
2636
+ var titlePrefixes = [
2637
+ "The Knights of The",
2638
+ "The Fellowship of The",
2639
+ "The Order of The",
2640
+ "The Infamous",
2641
+ "The Legendary",
2642
+ "The Dubious",
2643
+ "The Sworn Guardians of The",
2644
+ "The Ancient Guild of The",
2645
+ "The Unstoppable",
2646
+ "The Misfit",
2647
+ "The Chaotic",
2648
+ "The Brave",
2649
+ "The Forgotten",
2650
+ "The Wandering",
2651
+ "The Noble Council of The",
2652
+ "The Dread Pirates of The",
2653
+ "The Honorable Society of The",
2654
+ "The Cursed",
2655
+ "The Unlikely Heroes of The",
2656
+ "The Elders of The",
2657
+ "The Seekers of The",
2658
+ "The Champions of The",
2659
+ "The Heralds of The",
2660
+ "The Disciples of The",
2661
+ "The Ragtag Band of The",
2662
+ "The Cult of The"
2663
+ ];
2664
+ var tileMiddle = [
2665
+ "Round",
2666
+ "Kitchen",
2667
+ "Deepest",
2668
+ "Sorcery",
2669
+ "Munchkin",
2670
+ "Shenanigan",
2671
+ "Secret",
2672
+ "Dungeon",
2673
+ "Fireside",
2674
+ "Tabletop",
2675
+ "Midnight",
2676
+ "Tavern",
2677
+ "Goblin",
2678
+ "Dragon",
2679
+ "Critical",
2680
+ "Natural Twenty",
2681
+ "Counterspell",
2682
+ "Nat One",
2683
+ "Cardboard",
2684
+ "Dice Tower",
2685
+ "Campaign",
2686
+ "Lore",
2687
+ "Awkward",
2688
+ "Unhinged",
2689
+ "Chaotic Neutral",
2690
+ "Homebrew",
2691
+ "Side Quest"
2692
+ ];
2693
+ var titleSuffixes = [
2694
+ "Table",
2695
+ "Dungeon",
2696
+ "Cave",
2697
+ "Crew",
2698
+ "Team",
2699
+ "League",
2700
+ "Horde",
2701
+ "Party",
2702
+ "Conclave",
2703
+ "Collective",
2704
+ "Alliance",
2705
+ "Syndicate",
2706
+ "Guild",
2707
+ "Cabal",
2708
+ "Council",
2709
+ "Expedition",
2710
+ "Enclave",
2711
+ "Consortium",
2712
+ "Troupe",
2713
+ "Vanguard",
2714
+ "Cohort",
2715
+ "Brotherhood",
2716
+ "Sisterhood",
2717
+ "Pantheon",
2718
+ "Assembly",
2719
+ "Coven"
2720
+ ];
2721
+ var taglines = [
2722
+ "Everyone is welcome!",
2723
+ "Looking for serious players.",
2724
+ "Get in nerds, we're gaming!",
2725
+ "If you aren't there, you're square.",
2726
+ "It will be legendary!",
2727
+ "Beginners welcome \u2014 we were all level 1 once.",
2728
+ "No experience necessary. Snacks encouraged.",
2729
+ "Roleplayers, board gamers, and chaos gremlins welcome.",
2730
+ "We don't metagame. Much.",
2731
+ "All alignments accepted. True Neutral gets the snacks.",
2732
+ "Where every session is a one-shot... until it isn't.",
2733
+ "Homebrew rules may apply.",
2734
+ "Warning: may contain excessive lore.",
2735
+ "Critical failures celebrated as much as critical hits.",
2736
+ "No powergamers. Okay, maybe one powergamer.",
2737
+ "We finish campaigns. (Eventually.)",
2738
+ "Veteran players seeking worthy companions.",
2739
+ "Casuals only \u2014 we're here for the vibes.",
2740
+ "Serious about fun, not about rules.",
2741
+ "Min-maxers need not apply.",
2742
+ "For those who read the rulebook... and those who definitely didn't.",
2743
+ "Roll for initiative. Arrive on time.",
2744
+ "Side quests are the main quest here.",
2745
+ "Chaotic good energy required.",
2746
+ "If you bring snacks, you can name the first NPC.",
2747
+ "We read the rulebook so you don't have to.",
2748
+ "Wargamers only \u2014 no take-backs, no mercy.",
2749
+ "Everyone welcome. Meeple provided.",
2750
+ "We always play the longest game on the shelf.",
2751
+ "Worker placement. Resource management. Existential dread.",
2752
+ "No phones at the table! We're here for the game.",
2753
+ "Someone always flips the table. Metaphorically. Usually.",
2754
+ "We have a designated rules lawyer. It's fine.",
2755
+ "Cooperative games only \u2014 we can't handle another Monopoly incident.",
2756
+ "Teaching time is half the fun!"
2757
+ ];
2758
+ function TagSelector({ initialTagIDs, allTags, onTagChange }) {
2759
+ const [tagList, updateTagList] = React7.useState(initialTagIDs);
2760
+ const [inputValue, setInputValue] = React7.useState("");
2761
+ const toggleTag = (id) => tagList.find((t) => t === id) ? removeTag(id) : addTag(id);
2762
+ const addTag = (id) => {
2763
+ const newList = [...tagList, id];
2764
+ updateTagList(newList);
2765
+ onTagChange(newList);
2766
+ };
2767
+ const removeTag = (id) => {
2768
+ const newList = tagList.filter((t) => t !== id);
2769
+ updateTagList(newList);
2770
+ onTagChange(newList);
2771
+ };
2772
+ const selectedTags = React7.useMemo(() => allTags.filter((tag) => tagList.includes(tag.id)), [allTags, tagList]);
2773
+ const options = React7.useMemo(
2774
+ () => allTags.map((tag) => ({ value: tag.id, label: tag.label })),
2775
+ [allTags]
2776
+ );
2777
+ return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
2778
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-wrap gap-2", children: selectedTags.map((tag) => /* @__PURE__ */ jsxRuntime.jsx(
2779
+ Chip,
2780
+ {
2781
+ tag,
2782
+ removeCallback: () => toggleTag(tag.id)
2783
+ },
2784
+ tag.id
2785
+ )) }),
2786
+ /* @__PURE__ */ jsxRuntime.jsx(Grid10__default.default, { container: true, spacing: 3, children: /* @__PURE__ */ jsxRuntime.jsx(Grid10__default.default, { sx: { marginTop: 3, width: "100%", minWidth: "550px" }, children: /* @__PURE__ */ jsxRuntime.jsx(
2787
+ Autocomplete__default.default,
2788
+ {
2789
+ options,
2790
+ filterOptions: (availableOptions, state) => availableOptions.filter(
2791
+ (option) => !tagList.includes(option.value) && option.label.toLowerCase().includes(state.inputValue.toLowerCase())
2792
+ ),
2793
+ value: null,
2794
+ inputValue,
2795
+ onInputChange: (event, newInputValue) => {
2796
+ if (event && event.type === "change") {
2797
+ setInputValue(newInputValue);
2798
+ }
2799
+ },
2800
+ onChange: (event, newValue) => {
2801
+ if (newValue) {
2802
+ toggleTag(newValue.value);
2803
+ }
2804
+ setInputValue("");
2805
+ },
2806
+ renderInput: (params) => /* @__PURE__ */ jsxRuntime.jsx(TextField7__default.default, { ...params, label: "Select Tags" })
2807
+ },
2808
+ tagList.join("-")
2809
+ ) }) })
2810
+ ] });
2811
+ }
2812
+ function EditTableDetailsForm({ initialTitle, initialSubtitle, onTitleChange, onSubtitleChange, allowEditingTitles, initialTagIDs, allTags, onTagChange }) {
2813
+ const [title, setTitle] = React7.useState(initialTitle);
2814
+ const [subtitle, setSubtitle] = React7.useState(initialSubtitle);
2815
+ const handleTitleChange = (newTitle) => {
2816
+ setTitle(newTitle);
2817
+ onTitleChange(newTitle);
2818
+ };
2819
+ const handleSubtitleChange = (newSubtitle) => {
2820
+ setSubtitle(newSubtitle);
2821
+ onSubtitleChange(newSubtitle);
2822
+ };
2823
+ return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
2824
+ allowEditingTitles && /* @__PURE__ */ jsxRuntime.jsxs(material.Box, { className: "flex flex-col gap-4 mb-8", children: [
2825
+ /* @__PURE__ */ jsxRuntime.jsxs(material.Box, { className: "inline-flex", children: [
2826
+ /* @__PURE__ */ jsxRuntime.jsx(
2827
+ TextField7__default.default,
2828
+ {
2829
+ sx: { minWidth: "400px" },
2830
+ label: "Title",
2831
+ onChange: (e) => handleTitleChange(e.target.value),
2832
+ variant: "filled",
2833
+ value: title
2834
+ }
2835
+ ),
2836
+ /* @__PURE__ */ jsxRuntime.jsx(material.Tooltip, { title: "Randomize", children: /* @__PURE__ */ jsxRuntime.jsx(
2837
+ CasinoIcon__default.default,
2838
+ {
2839
+ sx: { cursor: "pointer", alignSelf: "center", ml: 1 },
2840
+ onClick: () => handleTitleChange(getRandomTitle())
2841
+ }
2842
+ ) })
2843
+ ] }),
2844
+ /* @__PURE__ */ jsxRuntime.jsxs(material.Box, { className: "inline-flex min-w-96", children: [
2845
+ /* @__PURE__ */ jsxRuntime.jsx(
2846
+ TextField7__default.default,
2847
+ {
2848
+ sx: { minWidth: "400px" },
2849
+ label: "Short Description or Tagline",
2850
+ onChange: (e) => handleSubtitleChange(e.target.value),
2851
+ variant: "filled",
2852
+ value: subtitle
2853
+ }
2854
+ ),
2855
+ /* @__PURE__ */ jsxRuntime.jsx(material.Tooltip, { title: "Randomize", children: /* @__PURE__ */ jsxRuntime.jsx(
2856
+ CasinoIcon__default.default,
2857
+ {
2858
+ sx: { cursor: "pointer", alignSelf: "center", ml: 1 },
2859
+ onClick: () => handleSubtitleChange(getRandomTagline())
2860
+ }
2861
+ ) })
2862
+ ] })
2863
+ ] }),
2864
+ /* @__PURE__ */ jsxRuntime.jsx(TagSelector, { initialTagIDs, allTags, onTagChange })
2865
+ ] });
2866
+ }
2456
2867
  var GameTableContext = React7__default.default.createContext(void 0);
2457
2868
  function GameTableProvider(props) {
2458
2869
  return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: props.children });
@@ -2465,76 +2876,206 @@ function useGameTableContext() {
2465
2876
  throw new Error("useGameTableContext is deprecated in the package build. Pass table data through props instead.");
2466
2877
  }
2467
2878
  var ModalContext = React7.createContext({
2468
- showModal: (content) => {
2879
+ showModal: () => {
2469
2880
  },
2470
2881
  hideModal: () => {
2471
2882
  }
2472
2883
  });
2473
2884
  var useModal = () => React7.useContext(ModalContext);
2474
- var Modal = ({ onClose, children }) => {
2475
- const modalRef = React7.useRef(null);
2476
- const previouslyFocusedElement = React7.useRef(null);
2885
+ var AutoResizingTextarea = (props) => {
2886
+ const { isInEditMode, onChange, textareaRef, value } = props;
2477
2887
  React7.useEffect(() => {
2478
- var _a;
2479
- if (children) {
2480
- previouslyFocusedElement.current = document.activeElement;
2481
- (_a = modalRef.current) == null ? void 0 : _a.focus();
2888
+ if (isInEditMode && textareaRef.current) {
2889
+ const textarea = textareaRef.current;
2890
+ textarea.style.height = "auto";
2891
+ textarea.style.height = `${textarea.scrollHeight}px`;
2482
2892
  }
2483
- return () => {
2484
- var _a2;
2485
- (_a2 = previouslyFocusedElement.current) == null ? void 0 : _a2.focus();
2486
- };
2487
- }, [children]);
2488
- const handleOnClose = () => {
2489
- onClose();
2490
- };
2491
- const handleKeyDown = (e) => {
2492
- var _a;
2493
- if (e.key !== "Tab") return;
2494
- const focusableElements = (_a = modalRef.current) == null ? void 0 : _a.querySelectorAll(
2495
- 'button, [tabindex]:not([tabindex="-1"])'
2496
- );
2497
- if (!focusableElements || focusableElements.length === 0) return;
2498
- const first = focusableElements[0];
2499
- const last = focusableElements[focusableElements.length - 1];
2500
- if (e.shiftKey) {
2501
- if (document.activeElement === first) {
2502
- e.preventDefault();
2503
- last.focus();
2893
+ }, [isInEditMode, textareaRef, value]);
2894
+ return /* @__PURE__ */ jsxRuntime.jsx(
2895
+ "textarea",
2896
+ {
2897
+ ref: textareaRef,
2898
+ value,
2899
+ onChange: (e) => onChange(e.target.value),
2900
+ style: {
2901
+ backgroundColor: "#fffbea",
2902
+ overflow: "hidden",
2903
+ resize: "none",
2904
+ width: "100%"
2504
2905
  }
2505
- } else {
2506
- if (document.activeElement === last) {
2507
- e.preventDefault();
2508
- first.focus();
2906
+ }
2907
+ );
2908
+ };
2909
+ var AutoResizingTextarea_default = AutoResizingTextarea;
2910
+ var NextGameCountdown = ({ nextGameTime }) => {
2911
+ const [timeLeft, setTimeLeft] = React7.useState("");
2912
+ React7.useEffect(() => {
2913
+ if (!nextGameTime) return;
2914
+ const timer = setInterval(() => {
2915
+ const now = (/* @__PURE__ */ new Date()).getTime();
2916
+ const distance = new Date(nextGameTime).getTime() - now;
2917
+ if (distance < 0) {
2918
+ clearInterval(timer);
2919
+ setTimeLeft("Started");
2920
+ return;
2921
+ }
2922
+ const days = Math.floor(distance / (1e3 * 60 * 60 * 24));
2923
+ const hours = Math.floor(distance % (1e3 * 60 * 60 * 24) / (1e3 * 60 * 60));
2924
+ const minutes = Math.floor(distance % (1e3 * 60 * 60) / (1e3 * 60));
2925
+ const seconds = Math.floor(distance % (1e3 * 60) / 1e3);
2926
+ let timeString = "";
2927
+ if (days > 0) timeString += `${days}d `;
2928
+ if (hours > 0 || days > 0) timeString += `${hours}h `;
2929
+ timeString += `${minutes}m ${seconds}s`;
2930
+ setTimeLeft(timeString);
2931
+ }, 1e3);
2932
+ return () => clearInterval(timer);
2933
+ }, [nextGameTime]);
2934
+ if (!nextGameTime) return null;
2935
+ return /* @__PURE__ */ jsxRuntime.jsxs(material.Typography, { variant: "body2", color: "primary", sx: { fontWeight: "bold" }, children: [
2936
+ "Next Game: ",
2937
+ timeLeft
2938
+ ] });
2939
+ };
2940
+ function TagEditor({
2941
+ title,
2942
+ selectedTags,
2943
+ possibleTags,
2944
+ onToggleTag
2945
+ }) {
2946
+ const selectedIds = React7.useMemo(() => selectedTags.map((tag) => tag.id), [selectedTags]);
2947
+ const onTagChange = (newSelectedIds) => {
2948
+ const addedTags = newSelectedIds.filter((id) => !selectedIds.includes(id));
2949
+ const removedTags = selectedIds.filter((id) => !newSelectedIds.includes(id));
2950
+ addedTags.forEach((id) => onToggleTag(id));
2951
+ removedTags.forEach((id) => onToggleTag(id));
2952
+ };
2953
+ return /* @__PURE__ */ jsxRuntime.jsx(Grid10__default.default, { container: true, children: /* @__PURE__ */ jsxRuntime.jsx(Grid10__default.default, { size: { xs: 12 }, children: /* @__PURE__ */ jsxRuntime.jsxs(Card10__default.default, { children: [
2954
+ title ? /* @__PURE__ */ jsxRuntime.jsx(
2955
+ CardHeader4__default.default,
2956
+ {
2957
+ title,
2958
+ style: {
2959
+ background: "linear-gradient(135deg, rgba(25, 118, 210, 0.8), rgba(25, 118, 210, 1))",
2960
+ color: "#FFFFFF",
2961
+ fontSize: "1.5rem",
2962
+ textShadow: "0px 3px 6px rgba(0, 0, 0, 0.5)"
2963
+ }
2509
2964
  }
2965
+ ) : "",
2966
+ /* @__PURE__ */ jsxRuntime.jsx(CardContent10__default.default, { children: /* @__PURE__ */ jsxRuntime.jsx(TagSelector, { initialTagIDs: selectedIds, allTags: possibleTags, onTagChange }) })
2967
+ ] }) }) });
2968
+ }
2969
+ var UserAgreementModal = ({
2970
+ open,
2971
+ onClose,
2972
+ markdownContent,
2973
+ requirements,
2974
+ onAccept,
2975
+ title = "User Agreement",
2976
+ forceAgreement = false
2977
+ }) => {
2978
+ const [checkedState, setCheckedState] = React7.useState(
2979
+ new Array(requirements.length).fill(false)
2980
+ );
2981
+ const handleCheckboxChange = (index) => {
2982
+ const updatedCheckedState = checkedState.map(
2983
+ (item, i) => i === index ? !item : item
2984
+ );
2985
+ setCheckedState(updatedCheckedState);
2986
+ };
2987
+ const isAllRequiredChecked = requirements.every((req, index) => {
2988
+ if (req.required) {
2989
+ return checkedState[index];
2990
+ }
2991
+ return true;
2992
+ });
2993
+ const handleAccept = () => {
2994
+ if (isAllRequiredChecked) {
2995
+ onAccept();
2510
2996
  }
2511
2997
  };
2512
- return /* @__PURE__ */ jsxRuntime.jsx(
2513
- "div",
2998
+ const handleClose = (event, reason) => {
2999
+ if (forceAgreement) return;
3000
+ if (onClose) onClose();
3001
+ };
3002
+ return /* @__PURE__ */ jsxRuntime.jsxs(
3003
+ material.Dialog,
2514
3004
  {
2515
- className: "modal-overlay",
2516
- onKeyDown: handleKeyDown,
2517
- ref: modalRef,
2518
- role: "dialog",
2519
- tabIndex: -1,
2520
- children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "modal-container", children: [
2521
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "modal-control-strip", children: /* @__PURE__ */ jsxRuntime.jsx("button", { onClick: handleOnClose, children: "X" }) }),
2522
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "modal-content", children })
2523
- ] })
3005
+ open,
3006
+ onClose: handleClose,
3007
+ maxWidth: "md",
3008
+ fullWidth: true,
3009
+ disableEscapeKeyDown: forceAgreement,
3010
+ children: [
3011
+ /* @__PURE__ */ jsxRuntime.jsx(material.DialogTitle, { children: title }),
3012
+ /* @__PURE__ */ jsxRuntime.jsxs(material.DialogContent, { dividers: true, children: [
3013
+ /* @__PURE__ */ jsxRuntime.jsx(material.Box, { sx: { mb: 3 }, children: /* @__PURE__ */ jsxRuntime.jsx(
3014
+ ReactMarkdown__default.default,
3015
+ {
3016
+ components: {
3017
+ h1: ({ node, ...props }) => /* @__PURE__ */ jsxRuntime.jsx(material.Typography, { variant: "h4", gutterBottom: true, ...props }),
3018
+ h2: ({ node, ...props }) => /* @__PURE__ */ jsxRuntime.jsx(material.Typography, { variant: "h5", gutterBottom: true, ...props }),
3019
+ h3: ({ node, ...props }) => /* @__PURE__ */ jsxRuntime.jsx(material.Typography, { variant: "h6", gutterBottom: true, ...props }),
3020
+ h4: ({ node, ...props }) => /* @__PURE__ */ jsxRuntime.jsx(material.Typography, { variant: "subtitle1", gutterBottom: true, ...props }),
3021
+ h5: ({ node, ...props }) => /* @__PURE__ */ jsxRuntime.jsx(material.Typography, { variant: "subtitle2", gutterBottom: true, ...props }),
3022
+ h6: ({ node, ...props }) => /* @__PURE__ */ jsxRuntime.jsx(material.Typography, { variant: "caption", gutterBottom: true, ...props }),
3023
+ p: ({ node, ...props }) => /* @__PURE__ */ jsxRuntime.jsx(material.Typography, { variant: "body1", gutterBottom: true, ...props }),
3024
+ li: ({ node, ...props }) => /* @__PURE__ */ jsxRuntime.jsx(material.Box, { component: "li", sx: { mb: 1, ml: 2 }, ...props }),
3025
+ ul: ({ node, ...props }) => /* @__PURE__ */ jsxRuntime.jsx(material.Box, { component: "ul", sx: { mb: 2 }, ...props }),
3026
+ ol: ({ node, ...props }) => /* @__PURE__ */ jsxRuntime.jsx(material.Box, { component: "ol", sx: { mb: 2 }, ...props }),
3027
+ a: ({ node, ...props }) => /* @__PURE__ */ jsxRuntime.jsx(material.Link, { ...props, target: "_blank", rel: "noopener" })
3028
+ },
3029
+ children: markdownContent
3030
+ }
3031
+ ) }),
3032
+ /* @__PURE__ */ jsxRuntime.jsx(material.Box, { sx: { display: "flex", flexDirection: "column", gap: 1 }, children: requirements.map((req, index) => /* @__PURE__ */ jsxRuntime.jsx(material.Box, { sx: { display: "flex", alignItems: "flex-start" }, children: /* @__PURE__ */ jsxRuntime.jsx(
3033
+ material.FormControlLabel,
3034
+ {
3035
+ control: /* @__PURE__ */ jsxRuntime.jsx(
3036
+ material.Checkbox,
3037
+ {
3038
+ checked: checkedState[index],
3039
+ onChange: () => handleCheckboxChange(index)
3040
+ }
3041
+ ),
3042
+ label: /* @__PURE__ */ jsxRuntime.jsxs(material.Typography, { variant: "body2", children: [
3043
+ req.statement,
3044
+ req.link && req.linkText && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
3045
+ " ",
3046
+ /* @__PURE__ */ jsxRuntime.jsx(material.Link, { href: req.link, target: "_blank", rel: "noopener", children: req.linkText })
3047
+ ] }),
3048
+ req.required && /* @__PURE__ */ jsxRuntime.jsx(
3049
+ material.Typography,
3050
+ {
3051
+ component: "span",
3052
+ color: "error",
3053
+ sx: { ml: 0.5 },
3054
+ children: "*"
3055
+ }
3056
+ )
3057
+ ] })
3058
+ }
3059
+ ) }, index)) })
3060
+ ] }),
3061
+ /* @__PURE__ */ jsxRuntime.jsxs(material.DialogActions, { children: [
3062
+ !forceAgreement && /* @__PURE__ */ jsxRuntime.jsx(material.Button, { onClick: onClose, color: "inherit", children: "Cancel" }),
3063
+ /* @__PURE__ */ jsxRuntime.jsx(
3064
+ material.Button,
3065
+ {
3066
+ onClick: handleAccept,
3067
+ variant: "contained",
3068
+ disabled: !isAllRequiredChecked,
3069
+ fullWidth: forceAgreement,
3070
+ children: "Accept"
3071
+ }
3072
+ )
3073
+ ] })
3074
+ ]
2524
3075
  }
2525
3076
  );
2526
3077
  };
2527
- var Modal_default = Modal;
2528
- var ModalProvider = ({ children }) => {
2529
- const [modalContent, setModalContent] = React7.useState(null);
2530
- const showModal = (content) => setModalContent(content);
2531
- const hideModal = () => setModalContent(null);
2532
- return /* @__PURE__ */ jsxRuntime.jsxs(ModalContext.Provider, { value: { showModal, hideModal }, children: [
2533
- children,
2534
- modalContent && /* @__PURE__ */ jsxRuntime.jsx(Modal_default, { onClose: hideModal, children: modalContent })
2535
- ] });
2536
- };
2537
- var ModalProvider_default = ModalProvider;
3078
+ var UserAgreementModal_default = UserAgreementModal;
2538
3079
  var PlayerHighlightsCard = function(props) {
2539
3080
  const {
2540
3081
  allTags,
@@ -2546,16 +3087,16 @@ var PlayerHighlightsCard = function(props) {
2546
3087
  removeFromTable
2547
3088
  } = props;
2548
3089
  return /* @__PURE__ */ jsxRuntime.jsx(material.Card, { elevation: 3, sx: { backgroundColor: canEdit ? "#fffbea" : "#f5f9fa", marginBottom: "6px" }, children: /* @__PURE__ */ jsxRuntime.jsxs(material.CardContent, { children: [
2549
- /* @__PURE__ */ jsxRuntime.jsxs(Grid8__default.default, { container: true, spacing: 2, direction: "column", children: [
2550
- /* @__PURE__ */ jsxRuntime.jsxs(Grid8__default.default, { container: true, direction: "row", children: [
2551
- /* @__PURE__ */ jsxRuntime.jsx(Grid8__default.default, { children: /* @__PURE__ */ jsxRuntime.jsx(Image2__default.default, { alt: player.username + "'s profile pic", height: 64, src: player.miniPic || "", width: 64 }) }),
2552
- /* @__PURE__ */ jsxRuntime.jsx(Grid8__default.default, { children: /* @__PURE__ */ jsxRuntime.jsx(material.Typography, { variant: "h5", children: player.username }) })
3090
+ /* @__PURE__ */ jsxRuntime.jsxs(Grid10__default.default, { container: true, spacing: 2, direction: "column", children: [
3091
+ /* @__PURE__ */ jsxRuntime.jsxs(Grid10__default.default, { container: true, direction: "row", children: [
3092
+ /* @__PURE__ */ jsxRuntime.jsx(Grid10__default.default, { children: /* @__PURE__ */ jsxRuntime.jsx(Image2__default.default, { alt: player.username + "'s profile pic", height: 64, src: player.miniPic || DEFAULT_PROFILE_PIC, width: 64 }) }),
3093
+ /* @__PURE__ */ jsxRuntime.jsx(Grid10__default.default, { children: /* @__PURE__ */ jsxRuntime.jsx(material.Typography, { variant: "h5", children: player.username }) })
2553
3094
  ] }),
2554
- /* @__PURE__ */ jsxRuntime.jsx(Grid8__default.default, { children: renderTagsFromIds(player.tags, allTags) })
3095
+ /* @__PURE__ */ jsxRuntime.jsx(Grid10__default.default, { children: renderTagsFromIds(player.tags, allTags) })
2555
3096
  ] }),
2556
- canEdit && /* @__PURE__ */ jsxRuntime.jsxs(Grid8__default.default, { children: [
2557
- /* @__PURE__ */ jsxRuntime.jsx(Button7__default.default, { onClick: () => removeFromTable(player), children: isWaitList ? /* @__PURE__ */ jsxRuntime.jsx("p", { children: "Deny Player" }) : /* @__PURE__ */ jsxRuntime.jsx("p", { children: "Remove Player" }) }),
2558
- canChangeDungeonMaster && /* @__PURE__ */ jsxRuntime.jsx(Button7__default.default, { onClick: () => {
3097
+ canEdit && /* @__PURE__ */ jsxRuntime.jsxs(Grid10__default.default, { children: [
3098
+ /* @__PURE__ */ jsxRuntime.jsx(Button8__default.default, { onClick: () => removeFromTable(player), children: isWaitList ? /* @__PURE__ */ jsxRuntime.jsx("p", { children: "Deny Player" }) : /* @__PURE__ */ jsxRuntime.jsx("p", { children: "Remove Player" }) }),
3099
+ canChangeDungeonMaster && /* @__PURE__ */ jsxRuntime.jsx(Button8__default.default, { onClick: () => {
2559
3100
  handleAssignToDungeonMaster(player);
2560
3101
  removeFromTable(player);
2561
3102
  }, children: /* @__PURE__ */ jsxRuntime.jsx("p", { children: "Assign to DungeonMaster" }) })
@@ -2565,11 +3106,11 @@ var PlayerHighlightsCard = function(props) {
2565
3106
  var DMHighlightsCard = function({ canEdit, player, allTags }) {
2566
3107
  return /* @__PURE__ */ jsxRuntime.jsxs(material.Card, { elevation: 3, sx: { backgroundColor: "#f5f9fa", marginBottom: "6px" }, children: [
2567
3108
  /* @__PURE__ */ jsxRuntime.jsx(material.CardHeader, { slotProps: { title: { variant: "h4" } }, title: "Game Master" }),
2568
- /* @__PURE__ */ jsxRuntime.jsx(material.CardContent, { sx: { backgroundColor: canEdit ? "#fffbea" : "inherit" }, children: /* @__PURE__ */ jsxRuntime.jsxs(Grid8__default.default, { container: true, spacing: 2, direction: "column", children: [
2569
- /* @__PURE__ */ jsxRuntime.jsx(Grid8__default.default, { children: /* @__PURE__ */ jsxRuntime.jsx(material.Typography, { variant: "h5", children: player.username }) }),
2570
- /* @__PURE__ */ jsxRuntime.jsxs(Grid8__default.default, { container: true, direction: "row", children: [
2571
- /* @__PURE__ */ jsxRuntime.jsx(Grid8__default.default, { children: /* @__PURE__ */ jsxRuntime.jsx(Image2__default.default, { alt: player.username + "'s profile pic", height: 120, src: player.imageUrl ? player.imageUrl : "", width: 256 }) }),
2572
- /* @__PURE__ */ jsxRuntime.jsx(Grid8__default.default, { children: renderTagsFromIds(player.tags, allTags) }),
3109
+ /* @__PURE__ */ jsxRuntime.jsx(material.CardContent, { sx: { backgroundColor: canEdit ? "#fffbea" : "inherit" }, children: /* @__PURE__ */ jsxRuntime.jsxs(Grid10__default.default, { container: true, spacing: 2, direction: "column", children: [
3110
+ /* @__PURE__ */ jsxRuntime.jsx(Grid10__default.default, { children: /* @__PURE__ */ jsxRuntime.jsx(material.Typography, { variant: "h5", children: player.username }) }),
3111
+ /* @__PURE__ */ jsxRuntime.jsxs(Grid10__default.default, { container: true, direction: "row", children: [
3112
+ /* @__PURE__ */ jsxRuntime.jsx(Grid10__default.default, { children: /* @__PURE__ */ jsxRuntime.jsx(Image2__default.default, { alt: player.username + "'s profile pic", height: 120, src: player.imageUrl || DEFAULT_PROFILE_PIC, width: 256 }) }),
3113
+ /* @__PURE__ */ jsxRuntime.jsx(Grid10__default.default, { children: renderTagsFromIds(player.tags, allTags) }),
2573
3114
  /* @__PURE__ */ jsxRuntime.jsx(material.Typography, { children: player.description })
2574
3115
  ] })
2575
3116
  ] }) })
@@ -2598,12 +3139,11 @@ function TableActionsBar(props) {
2598
3139
  if (waitlistPlayers.length === 0) {
2599
3140
  return /* @__PURE__ */ jsxRuntime.jsx("p", { children: "Waitlist is empty!" });
2600
3141
  }
2601
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-center", children: [
2602
- /* @__PURE__ */ jsxRuntime.jsx(CardHeader4__default.default, { slotProps: { title: { variant: "h4" } }, title: "Waitlist Players: " }),
2603
- /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "gap-8", children: waitlistPlayers.map((player) => /* @__PURE__ */ jsxRuntime.jsxs(
3142
+ return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
3143
+ /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "gap-8 px-6", children: waitlistPlayers.map((player) => /* @__PURE__ */ jsxRuntime.jsxs(
2604
3144
  "li",
2605
3145
  {
2606
- className: `${canMovePlayersToTable ? "bg-amber-100 cursor-pointer" : "bg-gray-200"} mb-8 flex flex-row flex-start space-between justify-center items-center gap-3 p-2 rounded`,
3146
+ className: `${canMovePlayersToTable ? "bg-amber-100 cursor-pointer" : "bg-gray-200"} mb-8 flex flex-row flex-start space-between items-center gap-3 p-2 rounded`,
2607
3147
  onClick: () => canMovePlayersToTable ? onPromoteWaitlistPlayer == null ? void 0 : onPromoteWaitlistPlayer(player.id) : void 0,
2608
3148
  tabIndex: 0,
2609
3149
  children: [
@@ -2612,7 +3152,7 @@ function TableActionsBar(props) {
2612
3152
  {
2613
3153
  alt: player.username + "'s profile pic",
2614
3154
  height: 64,
2615
- src: player.miniPic || "",
3155
+ src: player.miniPic || DEFAULT_PROFILE_PIC,
2616
3156
  width: 64
2617
3157
  }
2618
3158
  ),
@@ -2621,7 +3161,7 @@ function TableActionsBar(props) {
2621
3161
  },
2622
3162
  player.id
2623
3163
  )) }),
2624
- /* @__PURE__ */ jsxRuntime.jsx("button", { onClick: () => hideModal(), children: "close modal" })
3164
+ /* @__PURE__ */ jsxRuntime.jsx(DialogActions3__default.default, { children: /* @__PURE__ */ jsxRuntime.jsx(Button8__default.default, { onClick: () => hideModal(), children: "Close" }) })
2625
3165
  ] });
2626
3166
  };
2627
3167
  return /* @__PURE__ */ jsxRuntime.jsxs(material.Grid, { container: true, direction: "column", spacing: 1, children: [
@@ -2632,33 +3172,45 @@ function TableActionsBar(props) {
2632
3172
  slots
2633
3173
  ] }) }),
2634
3174
  /* @__PURE__ */ jsxRuntime.jsxs(material.Grid, { container: true, direction: "row", children: [
2635
- !isOwner && !isPlayer && !isDM && !onWaitlist && /* @__PURE__ */ jsxRuntime.jsx(Button7__default.default, { onClick: () => onJoinWaitlist == null ? void 0 : onJoinWaitlist(), sx: buttonStyle, children: "Join Waitlist" }),
2636
- !isOwner && (isPlayer || onWaitlist) && /* @__PURE__ */ jsxRuntime.jsx(Button7__default.default, { onClick: () => onLeaveTable == null ? void 0 : onLeaveTable(), sx: buttonStyle, children: onWaitlist ? "Leave Waitlist" : "Leave Table" }),
3175
+ !isOwner && !isPlayer && !isDM && !onWaitlist && /* @__PURE__ */ jsxRuntime.jsx(Button8__default.default, { onClick: () => onJoinWaitlist == null ? void 0 : onJoinWaitlist(), sx: buttonStyle, children: "Join Waitlist" }),
3176
+ !isOwner && (isPlayer || onWaitlist) && /* @__PURE__ */ jsxRuntime.jsx(Button8__default.default, { onClick: () => onLeaveTable == null ? void 0 : onLeaveTable(), sx: buttonStyle, children: onWaitlist ? "Leave Waitlist" : "Leave Table" }),
2637
3177
  canEditTable ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
2638
- /* @__PURE__ */ jsxRuntime.jsx(Button7__default.default, { onClick: () => onEditModeChange(true), sx: buttonStyle, endIcon: /* @__PURE__ */ jsxRuntime.jsx(EditIcon__default.default, {}), children: "Edit" }),
3178
+ /* @__PURE__ */ jsxRuntime.jsx(Button8__default.default, { onClick: () => onEditModeChange(true), sx: buttonStyle, endIcon: /* @__PURE__ */ jsxRuntime.jsx(EditIcon3__default.default, {}), children: "Edit" }),
2639
3179
  canViewWaitlist ? /* @__PURE__ */ jsxRuntime.jsx(
2640
- Button7__default.default,
3180
+ Button8__default.default,
2641
3181
  {
2642
3182
  endIcon: /* @__PURE__ */ jsxRuntime.jsx(ListIcon__default.default, {}),
2643
- onClick: () => showModal(renderPlayerWaitlistModalContent(false)),
3183
+ onClick: () => showModal(renderPlayerWaitlistModalContent(false), "Waitlist Players:"),
2644
3184
  sx: buttonStyle,
2645
3185
  children: "View Waitlist"
2646
3186
  }
2647
3187
  ) : null
2648
3188
  ] }) : canSaveTable ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
2649
- /* @__PURE__ */ jsxRuntime.jsx(Button7__default.default, { onClick: onSave, sx: buttonStyle, endIcon: /* @__PURE__ */ jsxRuntime.jsx(SaveIcon__default.default, {}), children: "Save" }),
2650
- /* @__PURE__ */ jsxRuntime.jsx(Button7__default.default, { onClick: () => onEditModeChange(false), sx: buttonStyle, children: "Cancel" }),
3189
+ /* @__PURE__ */ jsxRuntime.jsx(Button8__default.default, { onClick: onSave, sx: buttonStyle, endIcon: /* @__PURE__ */ jsxRuntime.jsx(SaveIcon__default.default, {}), children: "Save" }),
3190
+ /* @__PURE__ */ jsxRuntime.jsx(Button8__default.default, { onClick: () => onEditModeChange(false), sx: buttonStyle, children: "Cancel" }),
2651
3191
  /* @__PURE__ */ jsxRuntime.jsx(
2652
- Button7__default.default,
3192
+ Button8__default.default,
2653
3193
  {
2654
3194
  endIcon: /* @__PURE__ */ jsxRuntime.jsx(ListIcon__default.default, {}),
2655
- onClick: () => showModal(renderPlayerWaitlistModalContent(true)),
3195
+ onClick: () => showModal(renderPlayerWaitlistModalContent(true), "Waitlist Players:"),
2656
3196
  sx: buttonStyle,
2657
3197
  children: "Edit Waitlist"
2658
3198
  }
2659
3199
  )
2660
3200
  ] }) : null,
2661
- isOwner && /* @__PURE__ */ jsxRuntime.jsx(Button7__default.default, { onClick: () => onDeleteTable == null ? void 0 : onDeleteTable(), sx: buttonStyle, endIcon: /* @__PURE__ */ jsxRuntime.jsx(DeleteIcon__default.default, {}), children: "Delete Table" })
3201
+ isOwner && /* @__PURE__ */ jsxRuntime.jsx(
3202
+ Button8__default.default,
3203
+ {
3204
+ onClick: () => showModal(
3205
+ /* @__PURE__ */ jsxRuntime.jsx(material.Typography, { children: "Are you sure you want to delete this table? This action cannot be undone." }),
3206
+ "Delete Table",
3207
+ { acceptText: "Delete", onAccept: () => onDeleteTable == null ? void 0 : onDeleteTable() }
3208
+ ),
3209
+ sx: buttonStyle,
3210
+ endIcon: /* @__PURE__ */ jsxRuntime.jsx(DeleteIcon__default.default, {}),
3211
+ children: "Delete Table"
3212
+ }
3213
+ )
2662
3214
  ] })
2663
3215
  ] });
2664
3216
  }
@@ -2668,165 +3220,82 @@ var buttonStyle = {
2668
3220
  color: "white",
2669
3221
  borderRadius: "5px"
2670
3222
  };
2671
- var AutoResizingTextarea = (props) => {
2672
- const { isInEditMode, onChange, textareaRef, value } = props;
2673
- React7.useEffect(() => {
2674
- if (isInEditMode && textareaRef.current) {
2675
- const textarea = textareaRef.current;
2676
- textarea.style.height = "auto";
2677
- textarea.style.height = `${textarea.scrollHeight}px`;
2678
- }
2679
- }, [isInEditMode, textareaRef, value]);
2680
- return /* @__PURE__ */ jsxRuntime.jsx(
2681
- "textarea",
2682
- {
2683
- ref: textareaRef,
2684
- value,
2685
- onChange: (e) => onChange(e.target.value),
2686
- style: {
2687
- backgroundColor: "#fffbea",
2688
- overflow: "hidden",
2689
- resize: "none",
2690
- width: "100%"
2691
- }
2692
- }
2693
- );
2694
- };
2695
- var AutoResizingTextarea_default = AutoResizingTextarea;
2696
- var NextGameCountdown = ({ nextGameTime }) => {
2697
- const [timeLeft, setTimeLeft] = React7.useState("");
2698
- React7.useEffect(() => {
2699
- if (!nextGameTime) return;
2700
- const timer = setInterval(() => {
2701
- const now = (/* @__PURE__ */ new Date()).getTime();
2702
- const distance = new Date(nextGameTime).getTime() - now;
2703
- if (distance < 0) {
2704
- clearInterval(timer);
2705
- setTimeLeft("Started");
2706
- return;
2707
- }
2708
- const days = Math.floor(distance / (1e3 * 60 * 60 * 24));
2709
- const hours = Math.floor(distance % (1e3 * 60 * 60 * 24) / (1e3 * 60 * 60));
2710
- const minutes = Math.floor(distance % (1e3 * 60 * 60) / (1e3 * 60));
2711
- const seconds = Math.floor(distance % (1e3 * 60) / 1e3);
2712
- let timeString = "";
2713
- if (days > 0) timeString += `${days}d `;
2714
- if (hours > 0 || days > 0) timeString += `${hours}h `;
2715
- timeString += `${minutes}m ${seconds}s`;
2716
- setTimeLeft(timeString);
2717
- }, 1e3);
2718
- return () => clearInterval(timer);
2719
- }, [nextGameTime]);
2720
- if (!nextGameTime) return null;
2721
- return /* @__PURE__ */ jsxRuntime.jsxs(material.Typography, { variant: "body2", color: "primary", sx: { fontWeight: "bold" }, children: [
2722
- "Next Game: ",
2723
- timeLeft
2724
- ] });
2725
- };
2726
- function TagEditor({
2727
- title = "Tags",
2728
- selectedTags,
2729
- possibleTags,
2730
- onToggleTag
2731
- }) {
2732
- const [inputValue, setInputValue] = React7.useState("");
2733
- const selectedIds = React7.useMemo(() => selectedTags.map((tag) => tag.id), [selectedTags]);
2734
- const options = React7.useMemo(
2735
- () => possibleTags.map((tag) => ({ value: tag.id, label: tag.label })),
2736
- [possibleTags]
2737
- );
2738
- return /* @__PURE__ */ jsxRuntime.jsx(Grid8__default.default, { container: true, children: /* @__PURE__ */ jsxRuntime.jsx(Grid8__default.default, { size: { xs: 12 }, children: /* @__PURE__ */ jsxRuntime.jsxs(Card10__default.default, { children: [
2739
- /* @__PURE__ */ jsxRuntime.jsx(
2740
- CardHeader4__default.default,
2741
- {
2742
- title,
2743
- style: {
2744
- background: "linear-gradient(135deg, rgba(25, 118, 210, 0.8), rgba(25, 118, 210, 1))",
2745
- color: "#FFFFFF",
2746
- fontSize: "1.5rem",
2747
- textShadow: "0px 3px 6px rgba(0, 0, 0, 0.5)"
2748
- }
2749
- }
2750
- ),
2751
- /* @__PURE__ */ jsxRuntime.jsxs(CardContent10__default.default, { children: [
2752
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-2 flex flex-wrap gap-2", children: selectedTags.map((tag) => /* @__PURE__ */ jsxRuntime.jsx(
2753
- Chip,
2754
- {
2755
- tag,
2756
- removeCallback: () => onToggleTag(tag.id)
2757
- },
2758
- tag.id
2759
- )) }),
2760
- /* @__PURE__ */ jsxRuntime.jsx(Grid8__default.default, { container: true, spacing: 3, children: /* @__PURE__ */ jsxRuntime.jsx(Grid8__default.default, { sx: { marginTop: 3, width: "100%" }, children: /* @__PURE__ */ jsxRuntime.jsx(
2761
- Autocomplete__default.default,
2762
- {
2763
- options,
2764
- filterOptions: (availableOptions, state) => availableOptions.filter(
2765
- (option) => !selectedIds.includes(option.value) && option.label.toLowerCase().includes(state.inputValue.toLowerCase())
2766
- ).slice(0, 3),
2767
- value: null,
2768
- inputValue,
2769
- onInputChange: (event, newInputValue) => {
2770
- if (event && event.type === "change") {
2771
- setInputValue(newInputValue);
2772
- }
2773
- },
2774
- onChange: (event, newValue) => {
2775
- if (newValue) {
2776
- onToggleTag(newValue.value);
2777
- }
2778
- setInputValue("");
2779
- },
2780
- slots: { popper: CustomPopper3 },
2781
- renderInput: (params) => /* @__PURE__ */ jsxRuntime.jsx(TextField4__default.default, { ...params, label: "Select Tags" })
2782
- },
2783
- selectedIds.join("-")
2784
- ) }) })
2785
- ] })
2786
- ] }) }) });
2787
- }
2788
- var CustomPopper3 = (props) => {
2789
- return /* @__PURE__ */ jsxRuntime.jsx(
2790
- Popper__default.default,
2791
- {
2792
- ...props,
2793
- modifiers: [
2794
- {
2795
- name: "preventOverflow",
2796
- options: { boundary: "viewport" }
2797
- },
2798
- {
2799
- name: "offset",
2800
- options: { offset: [0, -10] }
2801
- }
2802
- ],
2803
- placement: "top-start"
2804
- }
2805
- );
2806
- };
2807
3223
  function TablePageLayout(props) {
2808
3224
  var _a;
2809
- const { allTags, dungeonMaster, onDeleteTable, onJoinWaitlist, onLeaveTable, onSaveDraft, players, table, tableStatus, waitlistPlayers } = props;
3225
+ const { hideModal, showModal } = useModal();
3226
+ const { allTags, dungeonMaster, onDeleteTable, onJoinWaitlist, onLeaveTable, onSaveDraft, players, table, tableStatus, waitlistPlayers, startWithEditTitle, eventTagId } = props;
3227
+ const canEdit = tableStatus.isOwner;
2810
3228
  const textAreaRef = React7.useRef(null);
2811
3229
  const [isTableInEditMode, setIsTableInEditMode] = React7.useState(false);
3230
+ const [currentTitle, setCurrentTitle] = React7.useState(table.title);
3231
+ const [currentSubtitle, setCurrentSubtitle] = React7.useState(table.shortDescription);
2812
3232
  const [currentDescription, setCurrentDescription] = React7.useState(table.description);
2813
3233
  const [currentDungeonMaster, setCurrentDungeonMaster] = React7.useState(dungeonMaster);
2814
3234
  const [currentPlayers, setCurrentPlayers] = React7.useState(players);
2815
- const [currentShortDescription, setCurrentShortDescription] = React7.useState(table.shortDescription);
2816
- const [currentTitle, setCurrentTitle] = React7.useState(table.title);
2817
3235
  const [currentWaitlistPlayers, setCurrentWaitlistPlayers] = React7.useState(waitlistPlayers);
2818
3236
  const [currentTagIds, setCurrentTagIds] = React7.useState((_a = table.tags) != null ? _a : []);
3237
+ const pendingEdits = React7.useRef({ title: currentTitle, subtitle: currentSubtitle, tags: currentTagIds });
3238
+ const handleSaveTable = (tableData = {}) => {
3239
+ const nextDraft = {
3240
+ ...table,
3241
+ description: currentDescription,
3242
+ dungeonMaster: String(currentDungeonMaster.id),
3243
+ players: currentPlayers.map((player) => player.id),
3244
+ shortDescription: currentSubtitle,
3245
+ tags: currentTagIds,
3246
+ title: currentTitle,
3247
+ waitlist: currentWaitlistPlayers.map((player) => player.id),
3248
+ ...tableData
3249
+ };
3250
+ void (onSaveDraft == null ? void 0 : onSaveDraft(nextDraft));
3251
+ setIsTableInEditMode(false);
3252
+ };
3253
+ const clean = (text) => text.replaceAll(
3254
+ /\b(n[i1!]g+(er|a|e)s?|f[a@]g|f[a@]g+[o0]ts?|k[i1!]k[e3]s?|ch[i1!]nks?|w[e3]tb[a@]cks?|r[a@]gh[e3][a@]ds?|t[o0]w[e3]lh[e3][a@]ds?|r[e3]t[a@]rd(ed|s)?|c[o0][o0]ns?|tr[a@]nn(y|i[e3]s?)|g[o0][o0]ks?)\b/gi,
3255
+ "dudes"
3256
+ );
3257
+ const editTableDetails = () => {
3258
+ if (!canEdit) {
3259
+ return;
3260
+ }
3261
+ pendingEdits.current = {
3262
+ title: currentTitle,
3263
+ subtitle: currentSubtitle,
3264
+ tags: currentTagIds
3265
+ };
3266
+ const editContent = /* @__PURE__ */ jsxRuntime.jsx(
3267
+ EditTableDetailsForm,
3268
+ {
3269
+ initialTitle: currentTitle,
3270
+ initialSubtitle: currentSubtitle,
3271
+ onTitleChange: (t) => pendingEdits.current.title = t,
3272
+ onSubtitleChange: (s) => pendingEdits.current.subtitle = s,
3273
+ onTagChange: (t) => pendingEdits.current.tags = t,
3274
+ initialTagIDs: currentTagIds,
3275
+ allTags: allTags.filter((t) => t.appliesTo.tables),
3276
+ allowEditingTitles: true
3277
+ }
3278
+ );
3279
+ showModal(editContent, "Edit Table Details", {
3280
+ acceptText: "Save",
3281
+ onAccept: () => {
3282
+ setCurrentTitle(clean(pendingEdits.current.title));
3283
+ setCurrentSubtitle(clean(pendingEdits.current.subtitle));
3284
+ setCurrentTagIds(pendingEdits.current.tags);
3285
+ handleSaveTable({
3286
+ title: clean(pendingEdits.current.title),
3287
+ shortDescription: clean(pendingEdits.current.subtitle),
3288
+ tags: pendingEdits.current.tags
3289
+ });
3290
+ }
3291
+ });
3292
+ };
2819
3293
  React7.useEffect(() => {
2820
- var _a2;
2821
- setCurrentDescription(table.description);
2822
- setCurrentDungeonMaster(dungeonMaster);
2823
- setCurrentPlayers(players);
2824
- setCurrentShortDescription(table.shortDescription);
2825
- setCurrentTitle(table.title);
2826
- setCurrentWaitlistPlayers(waitlistPlayers);
2827
- setCurrentTagIds((_a2 = table.tags) != null ? _a2 : []);
2828
- }, [dungeonMaster, players, table, waitlistPlayers]);
2829
- const currentTags = React7.useMemo(
3294
+ if (startWithEditTitle) {
3295
+ editTableDetails();
3296
+ }
3297
+ });
3298
+ React7.useMemo(
2830
3299
  () => allTags.filter((tag) => currentTagIds.includes(tag.id)),
2831
3300
  [allTags, currentTagIds]
2832
3301
  );
@@ -2846,37 +3315,17 @@ function TablePageLayout(props) {
2846
3315
  return prevWaitlist.filter((player) => player.id !== playerIdToPromote);
2847
3316
  });
2848
3317
  };
2849
- const handleToggleTag = (tagId) => {
2850
- setCurrentTagIds(
2851
- (prevState) => prevState.includes(tagId) ? prevState.filter((id) => id !== tagId) : [...prevState, tagId]
2852
- );
2853
- };
2854
- const handleSaveTable = () => {
2855
- const nextDraft = {
2856
- ...table,
2857
- description: currentDescription,
2858
- dungeonMaster: String(currentDungeonMaster.id),
2859
- players: currentPlayers.map((player) => player.id),
2860
- shortDescription: currentShortDescription,
2861
- tags: currentTagIds,
2862
- title: currentTitle,
2863
- waitlist: currentWaitlistPlayers.map((player) => player.id)
2864
- };
2865
- void (onSaveDraft == null ? void 0 : onSaveDraft(nextDraft));
2866
- setIsTableInEditMode(false);
2867
- };
2868
3318
  return /* @__PURE__ */ jsxRuntime.jsx(
2869
3319
  material.Card,
2870
3320
  {
2871
3321
  sx: {
2872
3322
  backgroundColor: isTableInEditMode ? "lightsalmon" : "white",
2873
- borderRadius: "5%",
2874
3323
  p: 2,
2875
3324
  boxShadow: "0px 8px 15px rgba(25, 118, 210, 0.3)"
2876
3325
  },
2877
- children: /* @__PURE__ */ jsxRuntime.jsxs(Grid8__default.default, { container: true, direction: "column", children: [
3326
+ children: /* @__PURE__ */ jsxRuntime.jsxs(Grid10__default.default, { container: true, direction: "column", children: [
2878
3327
  /* @__PURE__ */ jsxRuntime.jsxs(
2879
- Grid8__default.default,
3328
+ Grid10__default.default,
2880
3329
  {
2881
3330
  container: true,
2882
3331
  direction: "column",
@@ -2889,39 +3338,49 @@ function TablePageLayout(props) {
2889
3338
  textShadow: "4px 4px 6px rgba(0, 0, 0, 0.5)"
2890
3339
  },
2891
3340
  children: [
2892
- /* @__PURE__ */ jsxRuntime.jsx(material.Box, { children: isTableInEditMode ? /* @__PURE__ */ jsxRuntime.jsx(
2893
- "input",
3341
+ /* @__PURE__ */ jsxRuntime.jsx(material.Box, { children: /* @__PURE__ */ jsxRuntime.jsxs(
3342
+ material.Box,
2894
3343
  {
2895
- onChange: (e) => setCurrentTitle(e.target.value),
2896
- style: { backgroundColor: "#fffbea" },
2897
- tabIndex: 0,
2898
- type: "text",
2899
- value: currentTitle
2900
- }
2901
- ) : /* @__PURE__ */ jsxRuntime.jsx(
2902
- material.CardHeader,
2903
- {
2904
- title: currentTitle,
2905
- sx: {
2906
- p: 0,
2907
- "& .MuiCardHeader-title": {
2908
- color: "white",
2909
- fontWeight: 700
2910
- }
2911
- }
3344
+ className: `flex items-center gap-1 ${canEdit ? "cursor-pointer" : ""}`,
3345
+ sx: { "&:hover .edit-icon": { opacity: 1 } },
3346
+ onClick: editTableDetails,
3347
+ children: [
3348
+ /* @__PURE__ */ jsxRuntime.jsx(
3349
+ material.CardHeader,
3350
+ {
3351
+ title: currentTitle,
3352
+ sx: {
3353
+ p: 0,
3354
+ "& .MuiCardHeader-title": {
3355
+ color: "white",
3356
+ fontWeight: 700
3357
+ }
3358
+ }
3359
+ }
3360
+ ),
3361
+ canEdit ? /* @__PURE__ */ jsxRuntime.jsx(EditIcon3__default.default, { className: "edit-icon text-white", sx: { opacity: 0, transition: "opacity 0.2s" } }) : ""
3362
+ ]
2912
3363
  }
2913
3364
  ) }),
2914
- isTableInEditMode ? /* @__PURE__ */ jsxRuntime.jsx(
2915
- "input",
3365
+ /* @__PURE__ */ jsxRuntime.jsxs(
3366
+ material.Box,
2916
3367
  {
2917
- onChange: (e) => setCurrentShortDescription(e.target.value),
2918
- style: { backgroundColor: "#fffbea" },
2919
- tabIndex: 0,
2920
- type: "text",
2921
- value: currentShortDescription
3368
+ className: `flex items-center gap-1 ${canEdit ? "cursor-pointer" : ""}`,
3369
+ sx: { "&:hover .edit-icon": { opacity: 1 } },
3370
+ onClick: editTableDetails,
3371
+ children: [
3372
+ /* @__PURE__ */ jsxRuntime.jsx(
3373
+ material.Typography,
3374
+ {
3375
+ sx: { color: "white", opacity: 0.95 },
3376
+ children: currentSubtitle
3377
+ }
3378
+ ),
3379
+ canEdit ? /* @__PURE__ */ jsxRuntime.jsx(EditIcon3__default.default, { className: "edit-icon text-white", sx: { opacity: 0, transition: "opacity 0.2s", fontSize: "medium" } }) : ""
3380
+ ]
2922
3381
  }
2923
- ) : /* @__PURE__ */ jsxRuntime.jsx(material.Typography, { sx: { color: "white", opacity: 0.95 }, children: currentShortDescription }),
2924
- /* @__PURE__ */ jsxRuntime.jsx(Grid8__default.default, { container: true, children: isTableInEditMode ? renderEditableTags(currentTags, allTags, handleToggleTag) : renderTags(currentTagIds, allTags) }),
3382
+ ),
3383
+ /* @__PURE__ */ jsxRuntime.jsx(Grid10__default.default, { container: true, onClick: editTableDetails, className: `${canEdit ? "cursor-pointer" : ""}`, children: renderTags(currentTagIds, allTags, canEdit, table.eventTagId || eventTagId) }),
2925
3384
  /* @__PURE__ */ jsxRuntime.jsx(
2926
3385
  TableActionsBar,
2927
3386
  {
@@ -2941,8 +3400,8 @@ function TablePageLayout(props) {
2941
3400
  ]
2942
3401
  }
2943
3402
  ),
2944
- /* @__PURE__ */ jsxRuntime.jsxs(Grid8__default.default, { container: true, spacing: 2, sx: { mt: 2 }, children: [
2945
- /* @__PURE__ */ jsxRuntime.jsx(Grid8__default.default, { size: { xs: 12, md: 8 }, children: /* @__PURE__ */ jsxRuntime.jsx(material.Card, { sx: { height: "100%" }, children: /* @__PURE__ */ jsxRuntime.jsx(material.CardContent, { children: isTableInEditMode ? /* @__PURE__ */ jsxRuntime.jsx(
3403
+ /* @__PURE__ */ jsxRuntime.jsxs(Grid10__default.default, { container: true, spacing: 2, sx: { mt: 2 }, children: [
3404
+ /* @__PURE__ */ jsxRuntime.jsx(Grid10__default.default, { size: { xs: 12, md: 8 }, children: /* @__PURE__ */ jsxRuntime.jsx(material.Card, { sx: { height: "100%" }, children: /* @__PURE__ */ jsxRuntime.jsx(material.CardContent, { children: isTableInEditMode ? /* @__PURE__ */ jsxRuntime.jsx(
2946
3405
  AutoResizingTextarea_default,
2947
3406
  {
2948
3407
  isInEditMode: isTableInEditMode,
@@ -2951,7 +3410,7 @@ function TablePageLayout(props) {
2951
3410
  value: currentDescription
2952
3411
  }
2953
3412
  ) : /* @__PURE__ */ jsxRuntime.jsx(material.Typography, { sx: { whiteSpace: "pre-wrap" }, children: currentDescription }) }) }) }),
2954
- /* @__PURE__ */ jsxRuntime.jsxs(Grid8__default.default, { size: { xs: 12, md: 4 }, children: [
3413
+ /* @__PURE__ */ jsxRuntime.jsxs(Grid10__default.default, { size: { xs: 12, md: 4 }, children: [
2955
3414
  /* @__PURE__ */ jsxRuntime.jsx(DMHighlightsCard, { canEdit: isTableInEditMode, player: currentDungeonMaster, allTags }),
2956
3415
  /* @__PURE__ */ jsxRuntime.jsxs(material.Card, { sx: { height: "100%" }, children: [
2957
3416
  /* @__PURE__ */ jsxRuntime.jsx(material.CardHeader, { slotProps: { title: { variant: "h4" } }, title: "Players: " }),
@@ -2974,36 +3433,85 @@ function TablePageLayout(props) {
2974
3433
  }
2975
3434
  );
2976
3435
  }
2977
- var renderTags = function(tags, allTags) {
3436
+ var renderTags = function(tags, allTags, canEdit, eventTagId) {
2978
3437
  if (!tags || !allTags) {
2979
3438
  return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, {});
2980
3439
  }
2981
- return /* @__PURE__ */ jsxRuntime.jsx(Grid8__default.default, { container: true, spacing: 1, sx: { pb: 1.5 }, children: tags.map((tagId) => {
2982
- const tag = allTags.find((potentialTag) => tagId === potentialTag.id);
2983
- return tag ? generateTagsDisplay(tag) : /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, {});
2984
- }) });
2985
- };
2986
- var renderEditableTags = function(selectedTags, allTags, onToggleTag) {
2987
- return /* @__PURE__ */ jsxRuntime.jsx(Grid8__default.default, { size: { xs: 12 }, sx: { pb: 1.5 }, children: /* @__PURE__ */ jsxRuntime.jsx(
2988
- TagEditor,
2989
- {
2990
- title: "Table Tags",
2991
- possibleTags: allTags.filter((tag) => {
2992
- var _a;
2993
- return (_a = tag.appliesTo) == null ? void 0 : _a.tables;
2994
- }),
2995
- selectedTags,
2996
- onToggleTag
2997
- }
2998
- ) });
3440
+ return /* @__PURE__ */ jsxRuntime.jsxs(Grid10__default.default, { container: true, spacing: 1, sx: { pb: 1.5 }, children: [
3441
+ renderTagsFromIds(tags, allTags, { showEventTag: true, eventTagId }),
3442
+ canEdit ? /* @__PURE__ */ jsxRuntime.jsx(
3443
+ material.Button,
3444
+ {
3445
+ variant: "text",
3446
+ className: "inline-block text-sm px-3 py-1font-outlined m-0.5 font-stretch-105% font-sans",
3447
+ sx: {
3448
+ color: "white",
3449
+ textShadow: "black 1.5px 1px 1.5px",
3450
+ "&:hover": {
3451
+ background: "#889"
3452
+ }
3453
+ },
3454
+ children: "Edit Tags..."
3455
+ }
3456
+ ) : ""
3457
+ ] });
2999
3458
  };
3000
3459
  var TablePageLayout_default = TablePageLayout;
3460
+ var ModalProvider = ({ children }) => {
3461
+ var _a;
3462
+ const [modalContent, setModalContent] = React7.useState(null);
3463
+ const [displayModal, setDisplayModal] = React7.useState(false);
3464
+ const [title, setTitle] = React7.useState("");
3465
+ const [options, setOptions] = React7.useState({});
3466
+ const showModal = (content, title2, opts) => {
3467
+ setModalContent(content);
3468
+ setTitle(title2);
3469
+ setOptions(opts != null ? opts : {});
3470
+ setDisplayModal(true);
3471
+ };
3472
+ const hideModal = () => {
3473
+ setDisplayModal(false);
3474
+ };
3475
+ return /* @__PURE__ */ jsxRuntime.jsxs(ModalContext.Provider, { value: { showModal, hideModal }, children: [
3476
+ children,
3477
+ /* @__PURE__ */ jsxRuntime.jsxs(Dialog3__default.default, { open: displayModal, onClose: hideModal, sx: { height: "85%" }, children: [
3478
+ /* @__PURE__ */ jsxRuntime.jsxs(material.Box, { children: [
3479
+ /* @__PURE__ */ jsxRuntime.jsx(DialogTitle3__default.default, { sx: { marginRight: "20px", minWidth: "400px" }, children: title }),
3480
+ /* @__PURE__ */ jsxRuntime.jsx(
3481
+ IconButton3__default.default,
3482
+ {
3483
+ "aria-label": "close",
3484
+ onClick: hideModal,
3485
+ sx: { position: "absolute", right: 8, top: 8 },
3486
+ children: /* @__PURE__ */ jsxRuntime.jsx(CloseIcon__default.default, {})
3487
+ }
3488
+ )
3489
+ ] }),
3490
+ /* @__PURE__ */ jsxRuntime.jsx(DialogContent3__default.default, { sx: { paddingTop: 0 }, children: modalContent }),
3491
+ (options.acceptText || options.onAccept) && /* @__PURE__ */ jsxRuntime.jsxs(DialogActions3__default.default, { children: [
3492
+ /* @__PURE__ */ jsxRuntime.jsx(Button8__default.default, { variant: "contained", onClick: () => {
3493
+ var _a2;
3494
+ hideModal();
3495
+ (_a2 = options.onAccept) == null ? void 0 : _a2.call(options);
3496
+ }, children: (_a = options.acceptText) != null ? _a : "OK" }),
3497
+ /* @__PURE__ */ jsxRuntime.jsx(Button8__default.default, { onClick: () => {
3498
+ var _a2;
3499
+ hideModal();
3500
+ (_a2 = options.onCancel) == null ? void 0 : _a2.call(options);
3501
+ }, children: "Cancel" })
3502
+ ] })
3503
+ ] })
3504
+ ] });
3505
+ };
3506
+ var ModalProvider_default = ModalProvider;
3001
3507
 
3002
3508
  exports.AutoResizingTextarea = AutoResizingTextarea_default;
3003
3509
  exports.BaseSearchResultCard = BaseSearchResultCard_default;
3004
3510
  exports.CANDIDATE_TIMEZONES = CANDIDATE_TIMEZONES;
3005
3511
  exports.Chip = Chip;
3006
3512
  exports.DMHighlightsCard = DMHighlightsCard;
3513
+ exports.DistanceFilter = DistanceFilter_default;
3514
+ exports.EditTableDetailsForm = EditTableDetailsForm;
3007
3515
  exports.EventBanner = EventBanner;
3008
3516
  exports.EventBannerEdit = EventBannerEdit;
3009
3517
  exports.EventBasicInfo = EventBasicInfo;
@@ -3038,10 +3546,14 @@ exports.TablePageLayout = TablePageLayout_default;
3038
3546
  exports.TableResultCard = TableResultCard_default;
3039
3547
  exports.TablesScrollableList = TablesScrollableList_default;
3040
3548
  exports.TagEditor = TagEditor;
3549
+ exports.TagSelector = TagSelector;
3041
3550
  exports.TagsFilter = TagsFilter_default;
3042
3551
  exports.TextSearchCard = TextSearchCard_default;
3043
3552
  exports.TypeFilter = TypeFilter_default;
3553
+ exports.UserAgreementModal = UserAgreementModal_default;
3044
3554
  exports.generateTagsDisplay = generateTagsDisplay;
3555
+ exports.getRandomTagline = getRandomTagline;
3556
+ exports.getRandomTitle = getRandomTitle;
3045
3557
  exports.renderTagsFromIds = renderTagsFromIds;
3046
3558
  exports.useEventEdit = useEventEdit;
3047
3559
  exports.useGameTableContext = useGameTableContext;