@mbpockets/shared-ui 0.1.18

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 (281) hide show
  1. package/LICENSE +681 -0
  2. package/README.md +85 -0
  3. package/dist/EventPage/editMode/index.cjs +573 -0
  4. package/dist/EventPage/editMode/index.cjs.map +1 -0
  5. package/dist/EventPage/editMode/index.d.cts +5 -0
  6. package/dist/EventPage/editMode/index.d.ts +5 -0
  7. package/dist/EventPage/editMode/index.mjs +559 -0
  8. package/dist/EventPage/editMode/index.mjs.map +1 -0
  9. package/dist/EventPage/editMode.cjs +573 -0
  10. package/dist/EventPage/editMode.cjs.map +1 -0
  11. package/dist/EventPage/editMode.d.cts +5 -0
  12. package/dist/EventPage/editMode.d.ts +5 -0
  13. package/dist/EventPage/editMode.mjs +559 -0
  14. package/dist/EventPage/editMode.mjs.map +1 -0
  15. package/dist/EventPage/index.cjs +1245 -0
  16. package/dist/EventPage/index.cjs.map +1 -0
  17. package/dist/EventPage/index.d.cts +6 -0
  18. package/dist/EventPage/index.d.ts +6 -0
  19. package/dist/EventPage/index.mjs +1215 -0
  20. package/dist/EventPage/index.mjs.map +1 -0
  21. package/dist/EventPage.cjs +1245 -0
  22. package/dist/EventPage.cjs.map +1 -0
  23. package/dist/EventPage.d.cts +42 -0
  24. package/dist/EventPage.d.ts +42 -0
  25. package/dist/EventPage.mjs +1215 -0
  26. package/dist/EventPage.mjs.map +1 -0
  27. package/dist/PlayerPage/index.cjs +370 -0
  28. package/dist/PlayerPage/index.cjs.map +1 -0
  29. package/dist/PlayerPage/index.d.cts +4 -0
  30. package/dist/PlayerPage/index.d.ts +4 -0
  31. package/dist/PlayerPage/index.mjs +358 -0
  32. package/dist/PlayerPage/index.mjs.map +1 -0
  33. package/dist/PlayerPage.cjs +370 -0
  34. package/dist/PlayerPage.cjs.map +1 -0
  35. package/dist/PlayerPage.d.cts +32 -0
  36. package/dist/PlayerPage.d.ts +32 -0
  37. package/dist/PlayerPage.mjs +358 -0
  38. package/dist/PlayerPage.mjs.map +1 -0
  39. package/dist/ProfilePage/index.cjs +136 -0
  40. package/dist/ProfilePage/index.cjs.map +1 -0
  41. package/dist/ProfilePage/index.d.cts +3 -0
  42. package/dist/ProfilePage/index.d.ts +3 -0
  43. package/dist/ProfilePage/index.mjs +124 -0
  44. package/dist/ProfilePage/index.mjs.map +1 -0
  45. package/dist/ProfilePage.cjs +136 -0
  46. package/dist/ProfilePage.cjs.map +1 -0
  47. package/dist/ProfilePage.d.cts +10 -0
  48. package/dist/ProfilePage.d.ts +10 -0
  49. package/dist/ProfilePage.mjs +124 -0
  50. package/dist/ProfilePage.mjs.map +1 -0
  51. package/dist/SearchPage/Filters/index.cjs +270 -0
  52. package/dist/SearchPage/Filters/index.cjs.map +1 -0
  53. package/dist/SearchPage/Filters/index.d.cts +4 -0
  54. package/dist/SearchPage/Filters/index.d.ts +4 -0
  55. package/dist/SearchPage/Filters/index.mjs +250 -0
  56. package/dist/SearchPage/Filters/index.mjs.map +1 -0
  57. package/dist/SearchPage/Filters.cjs +270 -0
  58. package/dist/SearchPage/Filters.cjs.map +1 -0
  59. package/dist/SearchPage/Filters.d.cts +31 -0
  60. package/dist/SearchPage/Filters.d.ts +31 -0
  61. package/dist/SearchPage/Filters.mjs +250 -0
  62. package/dist/SearchPage/Filters.mjs.map +1 -0
  63. package/dist/SearchPage/Results/index.cjs +226 -0
  64. package/dist/SearchPage/Results/index.cjs.map +1 -0
  65. package/dist/SearchPage/Results/index.d.cts +4 -0
  66. package/dist/SearchPage/Results/index.d.ts +4 -0
  67. package/dist/SearchPage/Results/index.mjs +212 -0
  68. package/dist/SearchPage/Results/index.mjs.map +1 -0
  69. package/dist/SearchPage/Results.cjs +226 -0
  70. package/dist/SearchPage/Results.cjs.map +1 -0
  71. package/dist/SearchPage/Results.d.cts +53 -0
  72. package/dist/SearchPage/Results.d.ts +53 -0
  73. package/dist/SearchPage/Results.mjs +212 -0
  74. package/dist/SearchPage/Results.mjs.map +1 -0
  75. package/dist/SearchPage/index.cjs +737 -0
  76. package/dist/SearchPage/index.cjs.map +1 -0
  77. package/dist/SearchPage/index.d.cts +7 -0
  78. package/dist/SearchPage/index.d.ts +7 -0
  79. package/dist/SearchPage/index.mjs +695 -0
  80. package/dist/SearchPage/index.mjs.map +1 -0
  81. package/dist/SearchPage.cjs +737 -0
  82. package/dist/SearchPage.cjs.map +1 -0
  83. package/dist/SearchPage.d.cts +110 -0
  84. package/dist/SearchPage.d.ts +110 -0
  85. package/dist/SearchPage.mjs +695 -0
  86. package/dist/SearchPage.mjs.map +1 -0
  87. package/dist/TablePage/GameTableProvider/index.cjs +26 -0
  88. package/dist/TablePage/GameTableProvider/index.cjs.map +1 -0
  89. package/dist/TablePage/GameTableProvider/index.d.cts +4 -0
  90. package/dist/TablePage/GameTableProvider/index.d.ts +4 -0
  91. package/dist/TablePage/GameTableProvider/index.mjs +19 -0
  92. package/dist/TablePage/GameTableProvider/index.mjs.map +1 -0
  93. package/dist/TablePage/GameTableProvider.cjs +26 -0
  94. package/dist/TablePage/GameTableProvider.cjs.map +1 -0
  95. package/dist/TablePage/GameTableProvider.d.cts +15 -0
  96. package/dist/TablePage/GameTableProvider.d.ts +15 -0
  97. package/dist/TablePage/GameTableProvider.mjs +19 -0
  98. package/dist/TablePage/GameTableProvider.mjs.map +1 -0
  99. package/dist/TablePage/ModalProvider/index.cjs +83 -0
  100. package/dist/TablePage/ModalProvider/index.cjs.map +1 -0
  101. package/dist/TablePage/ModalProvider/index.css +49 -0
  102. package/dist/TablePage/ModalProvider/index.css.map +1 -0
  103. package/dist/TablePage/ModalProvider/index.d.cts +3 -0
  104. package/dist/TablePage/ModalProvider/index.d.ts +3 -0
  105. package/dist/TablePage/ModalProvider/index.mjs +79 -0
  106. package/dist/TablePage/ModalProvider/index.mjs.map +1 -0
  107. package/dist/TablePage/ModalProvider.cjs +83 -0
  108. package/dist/TablePage/ModalProvider.cjs.map +1 -0
  109. package/dist/TablePage/ModalProvider.css +49 -0
  110. package/dist/TablePage/ModalProvider.css.map +1 -0
  111. package/dist/TablePage/ModalProvider.d.cts +17 -0
  112. package/dist/TablePage/ModalProvider.d.ts +17 -0
  113. package/dist/TablePage/ModalProvider.mjs +79 -0
  114. package/dist/TablePage/ModalProvider.mjs.map +1 -0
  115. package/dist/TablePage/index.cjs +606 -0
  116. package/dist/TablePage/index.cjs.map +1 -0
  117. package/dist/TablePage/index.css +49 -0
  118. package/dist/TablePage/index.css.map +1 -0
  119. package/dist/TablePage/index.d.cts +10 -0
  120. package/dist/TablePage/index.d.ts +10 -0
  121. package/dist/TablePage/index.mjs +579 -0
  122. package/dist/TablePage/index.mjs.map +1 -0
  123. package/dist/TablePage/players/index.cjs +85 -0
  124. package/dist/TablePage/players/index.cjs.map +1 -0
  125. package/dist/TablePage/players/index.d.cts +4 -0
  126. package/dist/TablePage/players/index.d.ts +4 -0
  127. package/dist/TablePage/players/index.mjs +76 -0
  128. package/dist/TablePage/players/index.mjs.map +1 -0
  129. package/dist/TablePage/players.cjs +85 -0
  130. package/dist/TablePage/players.cjs.map +1 -0
  131. package/dist/TablePage/players.d.cts +22 -0
  132. package/dist/TablePage/players.d.ts +22 -0
  133. package/dist/TablePage/players.mjs +76 -0
  134. package/dist/TablePage/players.mjs.map +1 -0
  135. package/dist/TablePage.cjs +606 -0
  136. package/dist/TablePage.cjs.map +1 -0
  137. package/dist/TablePage.css +49 -0
  138. package/dist/TablePage.css.map +1 -0
  139. package/dist/TablePage.d.cts +54 -0
  140. package/dist/TablePage.d.ts +54 -0
  141. package/dist/TablePage.mjs +579 -0
  142. package/dist/TablePage.mjs.map +1 -0
  143. package/dist/common/Modal/index.cjs +64 -0
  144. package/dist/common/Modal/index.cjs.map +1 -0
  145. package/dist/common/Modal/index.css +49 -0
  146. package/dist/common/Modal/index.css.map +1 -0
  147. package/dist/common/Modal/index.d.cts +2 -0
  148. package/dist/common/Modal/index.d.ts +2 -0
  149. package/dist/common/Modal/index.mjs +62 -0
  150. package/dist/common/Modal/index.mjs.map +1 -0
  151. package/dist/common/Modal.cjs +64 -0
  152. package/dist/common/Modal.cjs.map +1 -0
  153. package/dist/common/Modal.css +49 -0
  154. package/dist/common/Modal.css.map +1 -0
  155. package/dist/common/Modal.d.cts +9 -0
  156. package/dist/common/Modal.d.ts +9 -0
  157. package/dist/common/Modal.mjs +62 -0
  158. package/dist/common/Modal.mjs.map +1 -0
  159. package/dist/common/index.cjs +210 -0
  160. package/dist/common/index.cjs.map +1 -0
  161. package/dist/common/index.css +49 -0
  162. package/dist/common/index.css.map +1 -0
  163. package/dist/common/index.d.cts +4 -0
  164. package/dist/common/index.d.ts +4 -0
  165. package/dist/common/index.mjs +194 -0
  166. package/dist/common/index.mjs.map +1 -0
  167. package/dist/common.cjs +210 -0
  168. package/dist/common.cjs.map +1 -0
  169. package/dist/common.css +49 -0
  170. package/dist/common.css.map +1 -0
  171. package/dist/common.d.cts +28 -0
  172. package/dist/common.d.ts +28 -0
  173. package/dist/common.mjs +194 -0
  174. package/dist/common.mjs.map +1 -0
  175. package/dist/index-D7WHhl3Q.d.ts +64 -0
  176. package/dist/index-DC0kK3aC.d.cts +64 -0
  177. package/dist/index.cjs +2608 -0
  178. package/dist/index.cjs.map +1 -0
  179. package/dist/index.css +49 -0
  180. package/dist/index.css.map +1 -0
  181. package/dist/index.d.cts +20 -0
  182. package/dist/index.d.ts +20 -0
  183. package/dist/index.mjs +2529 -0
  184. package/dist/index.mjs.map +1 -0
  185. package/dist/mocks/EventDB.cjs +171 -0
  186. package/dist/mocks/EventDB.cjs.map +1 -0
  187. package/dist/mocks/EventDB.d.cts +6 -0
  188. package/dist/mocks/EventDB.d.ts +6 -0
  189. package/dist/mocks/EventDB.mjs +169 -0
  190. package/dist/mocks/EventDB.mjs.map +1 -0
  191. package/dist/mocks/Events.cjs +59 -0
  192. package/dist/mocks/Events.cjs.map +1 -0
  193. package/dist/mocks/Events.d.cts +13 -0
  194. package/dist/mocks/Events.d.ts +13 -0
  195. package/dist/mocks/Events.mjs +57 -0
  196. package/dist/mocks/Events.mjs.map +1 -0
  197. package/dist/mocks/Players.cjs +75 -0
  198. package/dist/mocks/Players.cjs.map +1 -0
  199. package/dist/mocks/Players.d.cts +15 -0
  200. package/dist/mocks/Players.d.ts +15 -0
  201. package/dist/mocks/Players.mjs +73 -0
  202. package/dist/mocks/Players.mjs.map +1 -0
  203. package/dist/mocks/SearchResults.cjs +143 -0
  204. package/dist/mocks/SearchResults.cjs.map +1 -0
  205. package/dist/mocks/SearchResults.d.cts +30 -0
  206. package/dist/mocks/SearchResults.d.ts +30 -0
  207. package/dist/mocks/SearchResults.mjs +137 -0
  208. package/dist/mocks/SearchResults.mjs.map +1 -0
  209. package/dist/mocks/Tables.cjs +133 -0
  210. package/dist/mocks/Tables.cjs.map +1 -0
  211. package/dist/mocks/Tables.d.cts +38 -0
  212. package/dist/mocks/Tables.d.ts +38 -0
  213. package/dist/mocks/Tables.mjs +131 -0
  214. package/dist/mocks/Tables.mjs.map +1 -0
  215. package/dist/mocks/Tags.cjs +142 -0
  216. package/dist/mocks/Tags.cjs.map +1 -0
  217. package/dist/mocks/Tags.d.cts +5 -0
  218. package/dist/mocks/Tags.d.ts +5 -0
  219. package/dist/mocks/Tags.mjs +140 -0
  220. package/dist/mocks/Tags.mjs.map +1 -0
  221. package/dist/mocks/index.cjs +566 -0
  222. package/dist/mocks/index.cjs.map +1 -0
  223. package/dist/mocks/index.d.cts +8 -0
  224. package/dist/mocks/index.d.ts +8 -0
  225. package/dist/mocks/index.mjs +555 -0
  226. package/dist/mocks/index.mjs.map +1 -0
  227. package/dist/mocks.cjs +566 -0
  228. package/dist/mocks.cjs.map +1 -0
  229. package/dist/mocks.d.cts +8 -0
  230. package/dist/mocks.d.ts +8 -0
  231. package/dist/mocks.mjs +555 -0
  232. package/dist/mocks.mjs.map +1 -0
  233. package/dist/types/event.cjs +4 -0
  234. package/dist/types/event.cjs.map +1 -0
  235. package/dist/types/event.d.cts +37 -0
  236. package/dist/types/event.d.ts +37 -0
  237. package/dist/types/event.mjs +3 -0
  238. package/dist/types/event.mjs.map +1 -0
  239. package/dist/types/index.cjs +4 -0
  240. package/dist/types/index.cjs.map +1 -0
  241. package/dist/types/index.d.cts +6 -0
  242. package/dist/types/index.d.ts +6 -0
  243. package/dist/types/index.mjs +3 -0
  244. package/dist/types/index.mjs.map +1 -0
  245. package/dist/types/player.cjs +4 -0
  246. package/dist/types/player.cjs.map +1 -0
  247. package/dist/types/player.d.cts +20 -0
  248. package/dist/types/player.d.ts +20 -0
  249. package/dist/types/player.mjs +3 -0
  250. package/dist/types/player.mjs.map +1 -0
  251. package/dist/types/search.cjs +4 -0
  252. package/dist/types/search.cjs.map +1 -0
  253. package/dist/types/search.d.cts +20 -0
  254. package/dist/types/search.d.ts +20 -0
  255. package/dist/types/search.mjs +3 -0
  256. package/dist/types/search.mjs.map +1 -0
  257. package/dist/types/table.cjs +4 -0
  258. package/dist/types/table.cjs.map +1 -0
  259. package/dist/types/table.d.cts +21 -0
  260. package/dist/types/table.d.ts +21 -0
  261. package/dist/types/table.mjs +3 -0
  262. package/dist/types/table.mjs.map +1 -0
  263. package/dist/types/tables.cjs +4 -0
  264. package/dist/types/tables.cjs.map +1 -0
  265. package/dist/types/tables.d.cts +21 -0
  266. package/dist/types/tables.d.ts +21 -0
  267. package/dist/types/tables.mjs +3 -0
  268. package/dist/types/tables.mjs.map +1 -0
  269. package/dist/types/tag.cjs +4 -0
  270. package/dist/types/tag.cjs.map +1 -0
  271. package/dist/types/tag.d.cts +14 -0
  272. package/dist/types/tag.d.ts +14 -0
  273. package/dist/types/tag.mjs +3 -0
  274. package/dist/types/tag.mjs.map +1 -0
  275. package/dist/types.cjs +4 -0
  276. package/dist/types.cjs.map +1 -0
  277. package/dist/types.d.cts +6 -0
  278. package/dist/types.d.ts +6 -0
  279. package/dist/types.mjs +3 -0
  280. package/dist/types.mjs.map +1 -0
  281. package/package.json +117 -0
@@ -0,0 +1,737 @@
1
+ "use client";
2
+ 'use strict';
3
+
4
+ var Typography2 = require('@mui/material/Typography');
5
+ var FormControl = require('@mui/material/FormControl');
6
+ var RadioGroup = require('@mui/material/RadioGroup');
7
+ var FormControlLabel = require('@mui/material/FormControlLabel');
8
+ var Radio = require('@mui/material/Radio');
9
+ var jsxRuntime = require('react/jsx-runtime');
10
+ var React = require('react');
11
+ var Box2 = require('@mui/material/Box');
12
+ var Autocomplete = require('@mui/material/Autocomplete');
13
+ var TextField = require('@mui/material/TextField');
14
+ var Popper = require('@mui/material/Popper');
15
+ var Divider = require('@mui/material/Divider');
16
+ var FormGroup = require('@mui/material/FormGroup');
17
+ var Checkbox = require('@mui/material/Checkbox');
18
+ var Button = require('@mui/material/Button');
19
+ var SearchIcon = require('@mui/icons-material/Search');
20
+ var Avatar = require('@mui/material/Avatar');
21
+ var material = require('@mui/material');
22
+ var CasinoIcon = require('@mui/icons-material/Casino');
23
+ var CalendarTodayIcon = require('@mui/icons-material/CalendarToday');
24
+ var LocationOnIcon = require('@mui/icons-material/LocationOn');
25
+ var EventIcon = require('@mui/icons-material/Event');
26
+ var Grid = require('@mui/material/Grid');
27
+ var Card2 = require('@mui/material/Card');
28
+ var CardHeader = require('@mui/material/CardHeader');
29
+ var CardContent2 = require('@mui/material/CardContent');
30
+
31
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
32
+
33
+ var Typography2__default = /*#__PURE__*/_interopDefault(Typography2);
34
+ var FormControl__default = /*#__PURE__*/_interopDefault(FormControl);
35
+ var RadioGroup__default = /*#__PURE__*/_interopDefault(RadioGroup);
36
+ var FormControlLabel__default = /*#__PURE__*/_interopDefault(FormControlLabel);
37
+ var Radio__default = /*#__PURE__*/_interopDefault(Radio);
38
+ var React__default = /*#__PURE__*/_interopDefault(React);
39
+ var Box2__default = /*#__PURE__*/_interopDefault(Box2);
40
+ var Autocomplete__default = /*#__PURE__*/_interopDefault(Autocomplete);
41
+ var TextField__default = /*#__PURE__*/_interopDefault(TextField);
42
+ var Popper__default = /*#__PURE__*/_interopDefault(Popper);
43
+ var Divider__default = /*#__PURE__*/_interopDefault(Divider);
44
+ var FormGroup__default = /*#__PURE__*/_interopDefault(FormGroup);
45
+ var Checkbox__default = /*#__PURE__*/_interopDefault(Checkbox);
46
+ var Button__default = /*#__PURE__*/_interopDefault(Button);
47
+ var SearchIcon__default = /*#__PURE__*/_interopDefault(SearchIcon);
48
+ var Avatar__default = /*#__PURE__*/_interopDefault(Avatar);
49
+ var CasinoIcon__default = /*#__PURE__*/_interopDefault(CasinoIcon);
50
+ var CalendarTodayIcon__default = /*#__PURE__*/_interopDefault(CalendarTodayIcon);
51
+ var LocationOnIcon__default = /*#__PURE__*/_interopDefault(LocationOnIcon);
52
+ var EventIcon__default = /*#__PURE__*/_interopDefault(EventIcon);
53
+ var Grid__default = /*#__PURE__*/_interopDefault(Grid);
54
+ var Card2__default = /*#__PURE__*/_interopDefault(Card2);
55
+ var CardHeader__default = /*#__PURE__*/_interopDefault(CardHeader);
56
+ var CardContent2__default = /*#__PURE__*/_interopDefault(CardContent2);
57
+
58
+ // src/components/SearchPage/Filters/SortOptions.tsx
59
+ var SORT_OPTIONS = [
60
+ { id: "relevance", label: "Relevance" },
61
+ { id: "newest", label: "Newest" },
62
+ { id: "popular", label: "Most Popular" }
63
+ ];
64
+ var SortOptions = ({
65
+ defaultValue = "relevance",
66
+ onChange
67
+ }) => {
68
+ const handleSortChange = (event) => {
69
+ onChange == null ? void 0 : onChange(event.target.value);
70
+ };
71
+ return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
72
+ /* @__PURE__ */ jsxRuntime.jsx(Typography2__default.default, { variant: "h6", gutterBottom: true, children: "Sort By" }),
73
+ /* @__PURE__ */ jsxRuntime.jsx(FormControl__default.default, { children: /* @__PURE__ */ jsxRuntime.jsx(RadioGroup__default.default, { defaultValue, onChange: handleSortChange, children: SORT_OPTIONS.map((option) => /* @__PURE__ */ jsxRuntime.jsx(
74
+ FormControlLabel__default.default,
75
+ {
76
+ value: option.id,
77
+ control: /* @__PURE__ */ jsxRuntime.jsx(Radio__default.default, {}),
78
+ label: option.label
79
+ },
80
+ option.id
81
+ )) }) })
82
+ ] });
83
+ };
84
+ var SortOptions_default = SortOptions;
85
+ var TagsFilter = ({
86
+ onChange,
87
+ tags: Tags = []
88
+ }) => {
89
+ const [mustHaveTags, setMustHaveTags] = React__default.default.useState([]);
90
+ const [mustNotHaveTags, setMustNotHaveTags] = React__default.default.useState([]);
91
+ const [shouldHaveAtLeastOneTags, setShouldHaveAtLeastOneTags] = React__default.default.useState([]);
92
+ Tags = !!Tags ? Tags : [];
93
+ const [inputValues, setInputValues] = React__default.default.useState({
94
+ mustHave: "",
95
+ mustNotHave: "",
96
+ shouldHaveAtLeastOne: ""
97
+ });
98
+ const tagOptions = React__default.default.useMemo(() => {
99
+ console.log("available tags: " + JSON.stringify(Tags));
100
+ console.log(!Tags);
101
+ if (!Tags || Tags.length == 0 || !Tags.map) return [];
102
+ return Tags.map((tag) => ({
103
+ value: tag.id,
104
+ label: tag.label
105
+ }));
106
+ }, [Tags]);
107
+ const handleTagChange = (tagId, category) => {
108
+ let newTags = [];
109
+ switch (category) {
110
+ case "mustHave":
111
+ newTags = mustHaveTags.includes(tagId) ? mustHaveTags.filter((id) => id !== tagId) : [...mustHaveTags, tagId];
112
+ setMustHaveTags(newTags);
113
+ break;
114
+ case "mustNotHave":
115
+ newTags = mustNotHaveTags.includes(tagId) ? mustNotHaveTags.filter((id) => id !== tagId) : [...mustNotHaveTags, tagId];
116
+ setMustNotHaveTags(newTags);
117
+ break;
118
+ case "shouldHaveAtLeastOne":
119
+ newTags = shouldHaveAtLeastOneTags.includes(tagId) ? shouldHaveAtLeastOneTags.filter((id) => id !== tagId) : [...shouldHaveAtLeastOneTags, tagId];
120
+ setShouldHaveAtLeastOneTags(newTags);
121
+ break;
122
+ }
123
+ if (onChange) {
124
+ onChange({
125
+ mustHave: category === "mustHave" ? newTags : mustHaveTags,
126
+ mustNotHave: category === "mustNotHave" ? newTags : mustNotHaveTags,
127
+ shouldHaveAtLeastOne: category === "shouldHaveAtLeastOne" ? newTags : shouldHaveAtLeastOneTags
128
+ });
129
+ }
130
+ };
131
+ const renderSelectedTags = (selectedTags, category) => {
132
+ const tagValues = [];
133
+ if (!Tags || Tags.length == 0 || !Tags.map) return null;
134
+ Tags.forEach((tag) => {
135
+ if (selectedTags.includes(tag.id)) {
136
+ tagValues.push(tag);
137
+ }
138
+ });
139
+ if (tagValues.length === 0) {
140
+ return null;
141
+ }
142
+ return /* @__PURE__ */ jsxRuntime.jsx(Box2__default.default, { sx: { display: "flex", flexWrap: "wrap", gap: 1, mb: 2 }, children: tagValues.map((tag) => /* @__PURE__ */ jsxRuntime.jsxs(
143
+ "span",
144
+ {
145
+ className: "inline-block text-sm px-3 py-1 rounded-full outline-black outline-2 font-outlined",
146
+ style: {
147
+ background: tag.color || "#bfbcbb",
148
+ color: "white",
149
+ textShadow: "black 0.2em 0.2em 0.4em"
150
+ },
151
+ children: [
152
+ tag.label,
153
+ /* @__PURE__ */ jsxRuntime.jsx(
154
+ "button",
155
+ {
156
+ type: "button",
157
+ onClick: () => handleTagChange(tag.id, category),
158
+ className: "ml-2 text-red-500 bg-white bg-opacity-50 rounded-full outline-black outline-2 font-outlined",
159
+ children: "\xD7"
160
+ }
161
+ )
162
+ ]
163
+ },
164
+ tag.id
165
+ )) });
166
+ };
167
+ const createTagSelector = (category, label) => {
168
+ const selectedTags = category === "mustHave" ? mustHaveTags : category === "mustNotHave" ? mustNotHaveTags : shouldHaveAtLeastOneTags;
169
+ return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
170
+ /* @__PURE__ */ jsxRuntime.jsx(Typography2__default.default, { variant: "subtitle1", gutterBottom: true, sx: { mt: 2 }, children: label }),
171
+ renderSelectedTags(selectedTags, category),
172
+ /* @__PURE__ */ jsxRuntime.jsx(
173
+ Autocomplete__default.default,
174
+ {
175
+ options: tagOptions,
176
+ filterOptions: (options, state) => {
177
+ const tagsToExclude = /* @__PURE__ */ new Set();
178
+ selectedTags.forEach((id) => tagsToExclude.add(id));
179
+ if (category !== "mustHave") {
180
+ mustHaveTags.forEach((id) => tagsToExclude.add(id));
181
+ }
182
+ if (category !== "mustNotHave") {
183
+ mustNotHaveTags.forEach((id) => tagsToExclude.add(id));
184
+ }
185
+ if (category !== "shouldHaveAtLeastOne") {
186
+ shouldHaveAtLeastOneTags.forEach((id) => tagsToExclude.add(id));
187
+ }
188
+ return options.filter(
189
+ (option) => (
190
+ // Exclude options already selected in any category
191
+ !tagsToExclude.has(option.value) && // Filter based on user input
192
+ option.label.toLowerCase().includes(state.inputValue.toLowerCase())
193
+ )
194
+ ).slice(0, 3);
195
+ },
196
+ value: null,
197
+ inputValue: inputValues[category],
198
+ onInputChange: (event, newInputValue) => {
199
+ if (event && event.type === "change") {
200
+ setInputValues({
201
+ ...inputValues,
202
+ [category]: newInputValue
203
+ });
204
+ }
205
+ },
206
+ onChange: (event, newValue) => {
207
+ if (newValue) {
208
+ handleTagChange(newValue.value, category);
209
+ }
210
+ setInputValues({
211
+ ...inputValues,
212
+ [category]: ""
213
+ });
214
+ },
215
+ slots: { popper: CustomPopper },
216
+ renderInput: (params) => /* @__PURE__ */ jsxRuntime.jsx(TextField__default.default, { ...params, label: `Select ${label}` })
217
+ },
218
+ `${category}-${selectedTags.join("-")}`
219
+ )
220
+ ] });
221
+ };
222
+ return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
223
+ /* @__PURE__ */ jsxRuntime.jsx(Typography2__default.default, { variant: "h6", gutterBottom: true, children: "Tags" }),
224
+ createTagSelector("mustHave", "Must Have Tags"),
225
+ /* @__PURE__ */ jsxRuntime.jsx(Divider__default.default, { sx: { my: 2 } }),
226
+ createTagSelector("mustNotHave", "Must Not Have Tags"),
227
+ /* @__PURE__ */ jsxRuntime.jsx(Divider__default.default, { sx: { my: 2 } }),
228
+ createTagSelector("shouldHaveAtLeastOne", "Should Contain At Least One Tag")
229
+ ] });
230
+ };
231
+ var CustomPopper = (props) => {
232
+ return /* @__PURE__ */ jsxRuntime.jsx(
233
+ Popper__default.default,
234
+ {
235
+ ...props,
236
+ modifiers: [
237
+ {
238
+ name: "preventOverflow",
239
+ options: {
240
+ boundary: "viewport"
241
+ // Prevent the Popper from going outside the viewport
242
+ }
243
+ },
244
+ {
245
+ name: "offset",
246
+ options: {
247
+ offset: [0, -10]
248
+ // Set negative vertical offset (adjust value as needed)
249
+ }
250
+ }
251
+ ],
252
+ placement: "top-start"
253
+ }
254
+ );
255
+ };
256
+ var TagsFilter_default = TagsFilter;
257
+ var FILTER_TYPES = [
258
+ { id: "player", label: "Players" },
259
+ { id: "event", label: "Events", disabled: true },
260
+ { id: "table", label: "Tables", disabled: true }
261
+ ];
262
+ var TypeFilter = ({ onChange }) => {
263
+ const [selectedTypes, setSelectedTypes] = React__default.default.useState([]);
264
+ const handleTypeChange = (typeId) => {
265
+ const newSelectedTypes = selectedTypes.includes(typeId) ? selectedTypes.filter((id) => id !== typeId) : [...selectedTypes, typeId];
266
+ setSelectedTypes(newSelectedTypes);
267
+ onChange == null ? void 0 : onChange(newSelectedTypes);
268
+ };
269
+ return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
270
+ /* @__PURE__ */ jsxRuntime.jsx(Typography2__default.default, { variant: "h6", gutterBottom: true, children: "Type" }),
271
+ /* @__PURE__ */ jsxRuntime.jsx(FormGroup__default.default, { children: FILTER_TYPES.map((type) => /* @__PURE__ */ jsxRuntime.jsx(
272
+ FormControlLabel__default.default,
273
+ {
274
+ control: /* @__PURE__ */ jsxRuntime.jsx(
275
+ Checkbox__default.default,
276
+ {
277
+ checked: selectedTypes.includes(type.id),
278
+ onChange: () => handleTypeChange(type.id),
279
+ disabled: type.disabled
280
+ }
281
+ ),
282
+ label: type.label
283
+ },
284
+ type.id
285
+ )) })
286
+ ] });
287
+ };
288
+ var TypeFilter_default = TypeFilter;
289
+ var FiltersContainer = ({
290
+ onTypeChange,
291
+ onTagChange,
292
+ onSubmit,
293
+ tags
294
+ }) => {
295
+ return /* @__PURE__ */ jsxRuntime.jsxs(Box2__default.default, { children: [
296
+ /* @__PURE__ */ jsxRuntime.jsx(TypeFilter_default, { onChange: onTypeChange }),
297
+ /* @__PURE__ */ jsxRuntime.jsx(Divider__default.default, { sx: { my: 2 } }),
298
+ /* @__PURE__ */ jsxRuntime.jsx(
299
+ TagsFilter_default,
300
+ {
301
+ tags,
302
+ onChange: onTagChange
303
+ }
304
+ ),
305
+ /* @__PURE__ */ jsxRuntime.jsx(Divider__default.default, { sx: { my: 2 } }),
306
+ /* @__PURE__ */ jsxRuntime.jsx(Box2__default.default, { sx: { display: "flex", justifyContent: "center", mt: 2 }, children: /* @__PURE__ */ jsxRuntime.jsx(
307
+ Button__default.default,
308
+ {
309
+ variant: "contained",
310
+ color: "primary",
311
+ size: "large",
312
+ startIcon: /* @__PURE__ */ jsxRuntime.jsx(SearchIcon__default.default, {}),
313
+ onClick: onSubmit,
314
+ sx: {
315
+ width: "100%",
316
+ py: 1.5,
317
+ borderRadius: 2,
318
+ boxShadow: "0px 4px 10px rgba(0, 0, 0, 0.1)",
319
+ background: "linear-gradient(135deg, rgba(25, 118, 210, 0.8), rgba(25, 118, 210, 1))",
320
+ "&:hover": {
321
+ background: "linear-gradient(135deg, rgba(25, 118, 210, 0.9), rgba(25, 118, 210, 1))",
322
+ boxShadow: "0px 6px 15px rgba(0, 0, 0, 0.2)"
323
+ }
324
+ },
325
+ children: "Search"
326
+ }
327
+ ) })
328
+ ] });
329
+ };
330
+ var FiltersContainer_default = FiltersContainer;
331
+ function generateTagsDisplay(tag) {
332
+ return /* @__PURE__ */ jsxRuntime.jsx(
333
+ "span",
334
+ {
335
+ className: "inline-block text-sm px-3 py-1 rounded-full outline-black outline-2 font-outlined",
336
+ style: {
337
+ marginTop: "6px",
338
+ marginRight: "6px",
339
+ marginBottom: "6px",
340
+ background: tag.color || "#bfbcbb",
341
+ color: "white",
342
+ textShadow: "black 0.2em 0.2em 0.4em"
343
+ },
344
+ children: tag.label
345
+ },
346
+ tag.id
347
+ );
348
+ }
349
+ var BaseSearchResultCard = ({
350
+ result,
351
+ onClick,
352
+ children,
353
+ icon,
354
+ tags
355
+ }) => {
356
+ const handleClick = () => {
357
+ if (onClick) {
358
+ onClick(result.id);
359
+ }
360
+ };
361
+ return /* @__PURE__ */ jsxRuntime.jsx(
362
+ material.Card,
363
+ {
364
+ elevation: 6,
365
+ sx: {
366
+ width: "100%",
367
+ cursor: onClick ? "pointer" : "default",
368
+ boxShadow: "0px 8px 24px rgba(0, 0, 0, 0.15)",
369
+ transition: "box-shadow 0.3s ease-in-out",
370
+ "&:hover": {
371
+ boxShadow: "0px 12px 28px rgba(0, 0, 0, 0.2)"
372
+ },
373
+ marginBottom: 2
374
+ },
375
+ onClick: handleClick,
376
+ children: /* @__PURE__ */ jsxRuntime.jsxs(material.CardContent, { sx: { display: "flex", alignItems: "flex-start" }, children: [
377
+ icon && /* @__PURE__ */ jsxRuntime.jsx(material.Box, { sx: { mr: 2, display: "flex", alignItems: "center", pt: 0.5 }, children: icon }),
378
+ /* @__PURE__ */ jsxRuntime.jsxs(material.Box, { sx: { flex: 1 }, children: [
379
+ /* @__PURE__ */ jsxRuntime.jsx(material.Typography, { variant: "h6", sx: { mb: 1 }, children: result.title }),
380
+ children,
381
+ /* @__PURE__ */ jsxRuntime.jsx(material.Typography, { variant: "body1", children: result.description }),
382
+ result.tags && result.tags.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(material.Box, { sx: { mt: 1 }, children: /* @__PURE__ */ jsxRuntime.jsx(material.Box, { sx: {
383
+ display: "block",
384
+ whiteSpace: "nowrap",
385
+ overflow: "hidden",
386
+ textOverflow: "clip",
387
+ pl: 0.5
388
+ // Add some padding to prevent clipping of the leftmost tag
389
+ }, children: (() => {
390
+ const MAX_VISIBLE = 5;
391
+ const tagObjs = result.tags.map((tagId) => tags.find((t) => t.id === tagId)).filter((t) => Boolean(t));
392
+ const visible = tagObjs.slice(0, MAX_VISIBLE);
393
+ const hiddenCount = Math.max(tagObjs.length - visible.length, 0);
394
+ return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
395
+ visible.map((tag) => generateTagsDisplay(tag)),
396
+ hiddenCount > 0 && /* @__PURE__ */ jsxRuntime.jsxs(
397
+ "span",
398
+ {
399
+ className: "inline-block text-sm px-3 py-1 rounded-full outline-black outline-2 font-outlined",
400
+ style: {
401
+ marginTop: "6px",
402
+ marginRight: "6px",
403
+ marginBottom: "6px",
404
+ background: "#9e9e9e",
405
+ color: "white",
406
+ textShadow: "black 0.2em 0.2em 0.4em"
407
+ },
408
+ children: [
409
+ "+",
410
+ hiddenCount,
411
+ " more"
412
+ ]
413
+ }
414
+ )
415
+ ] });
416
+ })() }) })
417
+ ] })
418
+ ] })
419
+ }
420
+ );
421
+ };
422
+ var BaseSearchResultCard_default = BaseSearchResultCard;
423
+ var PlayerResultCard = ({
424
+ result,
425
+ onClick,
426
+ tags
427
+ }) => {
428
+ const firstLetter = result.title.charAt(0).toUpperCase();
429
+ const getAvatarColor = (name) => {
430
+ const colors = [
431
+ "#F44336",
432
+ "#E91E63",
433
+ "#9C27B0",
434
+ "#673AB7",
435
+ "#3F51B5",
436
+ "#2196F3",
437
+ "#03A9F4",
438
+ "#00BCD4",
439
+ "#009688",
440
+ "#4CAF50",
441
+ "#8BC34A",
442
+ "#CDDC39",
443
+ "#FFEB3B",
444
+ "#FFC107",
445
+ "#FF9800",
446
+ "#FF5722"
447
+ ];
448
+ let hash = 0;
449
+ for (let i = 0; i < name.length; i++) {
450
+ hash = name.charCodeAt(i) + ((hash << 5) - hash);
451
+ }
452
+ return colors[Math.abs(hash) % colors.length];
453
+ };
454
+ const avatarColor = getAvatarColor(result.title);
455
+ const playerIcon = /* @__PURE__ */ jsxRuntime.jsx(
456
+ Avatar__default.default,
457
+ {
458
+ src: result.imageUrl,
459
+ alt: result.title,
460
+ sx: {
461
+ width: 40,
462
+ height: 40,
463
+ bgcolor: !result.imageUrl ? avatarColor : void 0
464
+ },
465
+ children: !result.imageUrl && firstLetter
466
+ }
467
+ );
468
+ return /* @__PURE__ */ jsxRuntime.jsx(BaseSearchResultCard_default, { result, onClick, icon: playerIcon, tags });
469
+ };
470
+ var PlayerResultCard_default = PlayerResultCard;
471
+ var TableResultCard = ({ result, tags, onClick }) => {
472
+ const capacity = result.capacity || 1;
473
+ const numPlayers = result.numPlayers || 0;
474
+ const occupancy = numPlayers / capacity * 100;
475
+ return /* @__PURE__ */ jsxRuntime.jsx(BaseSearchResultCard, { result, tags, onClick, icon: /* @__PURE__ */ jsxRuntime.jsx(CasinoIcon__default.default, { color: "primary" }), children: /* @__PURE__ */ jsxRuntime.jsxs(material.Box, { sx: { mb: 1 }, children: [
476
+ /* @__PURE__ */ jsxRuntime.jsxs(material.Box, { sx: { display: "flex", justifyContent: "space-between", alignItems: "center", mb: 0.5 }, children: [
477
+ /* @__PURE__ */ jsxRuntime.jsxs(material.Typography, { variant: "body2", color: "text.secondary", children: [
478
+ "Players: ",
479
+ numPlayers,
480
+ " / ",
481
+ capacity
482
+ ] }),
483
+ result.dungeonMaster ? /* @__PURE__ */ jsxRuntime.jsx(material.Chip, { label: "DM Present", size: "small", color: "success", variant: "outlined" }) : /* @__PURE__ */ jsxRuntime.jsx(material.Chip, { label: "No DM", size: "small", color: "warning", variant: "outlined" })
484
+ ] }),
485
+ /* @__PURE__ */ jsxRuntime.jsx(material.LinearProgress, { variant: "determinate", value: occupancy, sx: { height: 8, borderRadius: 4 } })
486
+ ] }) });
487
+ };
488
+ var TableResultCard_default = TableResultCard;
489
+ var EventResultCard = ({
490
+ result,
491
+ onClick,
492
+ tags
493
+ }) => {
494
+ const formatDate = (dateString) => {
495
+ const options = {
496
+ weekday: "long",
497
+ year: "numeric",
498
+ month: "long",
499
+ day: "numeric"
500
+ };
501
+ try {
502
+ const date = new Date(dateString);
503
+ return date.toLocaleDateString("en-US", options);
504
+ } catch {
505
+ return dateString;
506
+ }
507
+ };
508
+ const formattedDate = result.date ? formatDate(result.date) : "Date TBD";
509
+ const location = result.location || "Location TBD";
510
+ return /* @__PURE__ */ jsxRuntime.jsx(BaseSearchResultCard_default, { result, onClick, icon: /* @__PURE__ */ jsxRuntime.jsx(EventIcon__default.default, { color: "primary" }), tags, children: /* @__PURE__ */ jsxRuntime.jsxs(material.Box, { sx: { mb: 1 }, children: [
511
+ /* @__PURE__ */ jsxRuntime.jsxs(material.Box, { sx: { display: "flex", alignItems: "center", mb: 0.5 }, children: [
512
+ /* @__PURE__ */ jsxRuntime.jsx(CalendarTodayIcon__default.default, { sx: { mr: 1, fontSize: "small", color: "text.secondary" } }),
513
+ /* @__PURE__ */ jsxRuntime.jsx(material.Typography, { variant: "body2", color: "text.secondary", children: formattedDate })
514
+ ] }),
515
+ /* @__PURE__ */ jsxRuntime.jsxs(material.Box, { sx: { display: "flex", alignItems: "center", mb: 1 }, children: [
516
+ /* @__PURE__ */ jsxRuntime.jsx(LocationOnIcon__default.default, { sx: { mr: 1, fontSize: "small", color: "text.secondary" } }),
517
+ /* @__PURE__ */ jsxRuntime.jsx(material.Typography, { variant: "body2", color: "text.secondary", children: location })
518
+ ] })
519
+ ] }) });
520
+ };
521
+ var EventResultCard_default = EventResultCard;
522
+ var ResultsContainer = ({
523
+ results,
524
+ onResultClick,
525
+ tags
526
+ }) => {
527
+ if (results.length === 0 || !results.map) {
528
+ return /* @__PURE__ */ jsxRuntime.jsx(Box2__default.default, { sx: { textAlign: "center", py: 4 }, children: "No results found. Try adjusting your filters." });
529
+ }
530
+ const onPlayerClick = (id) => {
531
+ onResultClick == null ? void 0 : onResultClick(id, "player");
532
+ };
533
+ const onTableClick = (id) => {
534
+ onResultClick == null ? void 0 : onResultClick(id, "table");
535
+ };
536
+ const onEventClick = (id) => {
537
+ onResultClick == null ? void 0 : onResultClick(id, "event");
538
+ };
539
+ return /* @__PURE__ */ jsxRuntime.jsx(Box2__default.default, { sx: { display: "flex", flexDirection: "column", gap: 2 }, children: results.map((result) => {
540
+ switch (result.type) {
541
+ case "player":
542
+ return /* @__PURE__ */ jsxRuntime.jsx(
543
+ PlayerResultCard_default,
544
+ {
545
+ result,
546
+ onClick: onPlayerClick,
547
+ tags
548
+ },
549
+ result.id
550
+ );
551
+ case "table":
552
+ return /* @__PURE__ */ jsxRuntime.jsx(
553
+ TableResultCard_default,
554
+ {
555
+ result,
556
+ onClick: onTableClick,
557
+ tags
558
+ },
559
+ result.id
560
+ );
561
+ case "event":
562
+ return /* @__PURE__ */ jsxRuntime.jsx(
563
+ EventResultCard_default,
564
+ {
565
+ result,
566
+ onClick: onEventClick,
567
+ tags
568
+ },
569
+ result.id
570
+ );
571
+ default:
572
+ console.error(`Unknown result type: ${result.type}`);
573
+ return null;
574
+ }
575
+ }) });
576
+ };
577
+ var ResultsContainer_default = ResultsContainer;
578
+ var ScrollableResultsList = ({
579
+ results,
580
+ tags,
581
+ maxHeight = 400,
582
+ onResultClick,
583
+ emptyText
584
+ }) => {
585
+ const hasResults = Array.isArray(results) && results.length > 0;
586
+ 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." }) });
587
+ };
588
+ var ScrollableResultsList_default = ScrollableResultsList;
589
+ var PlayersScrollableList = ({
590
+ results,
591
+ tags,
592
+ maxHeight,
593
+ onResultClick
594
+ }) => {
595
+ const players = (results || []).filter((r) => (r == null ? void 0 : r.type) === "player");
596
+ const handleClick = (id) => onResultClick == null ? void 0 : onResultClick(id);
597
+ return /* @__PURE__ */ jsxRuntime.jsx(
598
+ ScrollableResultsList_default,
599
+ {
600
+ results: players,
601
+ tags,
602
+ maxHeight,
603
+ onResultClick: (id, type) => {
604
+ if (type === "player") handleClick(id);
605
+ }
606
+ }
607
+ );
608
+ };
609
+ var PlayersScrollableList_default = PlayersScrollableList;
610
+ var SearchResultCard = ({
611
+ result,
612
+ onClick,
613
+ tags
614
+ }) => {
615
+ return /* @__PURE__ */ jsxRuntime.jsx(BaseSearchResultCard_default, { result, onClick, tags });
616
+ };
617
+ var SearchResultCard_default = SearchResultCard;
618
+ function SearchPageLayout({
619
+ results,
620
+ title = "Search Results",
621
+ onTypeChange,
622
+ onTagChange,
623
+ onSubmit,
624
+ onResultClick,
625
+ validTags,
626
+ allTags
627
+ }) {
628
+ "use client";
629
+ const theme = material.useTheme();
630
+ const isMobile = material.useMediaQuery(theme.breakpoints.down("md"));
631
+ return /* @__PURE__ */ jsxRuntime.jsxs(Box2__default.default, { sx: { padding: 2 }, children: [
632
+ /* @__PURE__ */ jsxRuntime.jsx(Card2__default.default, { sx: { marginBottom: 2 }, children: /* @__PURE__ */ jsxRuntime.jsx(
633
+ CardHeader__default.default,
634
+ {
635
+ title,
636
+ style: {
637
+ background: "linear-gradient(135deg, rgba(25, 118, 210, 0.8), rgba(25, 118, 210, 1))",
638
+ color: "#FFFFFF",
639
+ fontSize: "1.5rem",
640
+ textShadow: "0px 3px 6px rgba(0, 0, 0, 0.5)"
641
+ }
642
+ }
643
+ ) }),
644
+ /* @__PURE__ */ jsxRuntime.jsxs(Grid__default.default, { container: true, spacing: 2, children: [
645
+ /* @__PURE__ */ jsxRuntime.jsx(Grid__default.default, { size: { xs: 12, md: 3 }, children: /* @__PURE__ */ jsxRuntime.jsxs(Card2__default.default, { sx: { marginBottom: isMobile ? 2 : 0 }, children: [
646
+ /* @__PURE__ */ jsxRuntime.jsx(
647
+ CardHeader__default.default,
648
+ {
649
+ title: "Filters",
650
+ style: {
651
+ background: "linear-gradient(135deg, rgba(25, 118, 210, 0.8), rgba(25, 118, 210, 1))",
652
+ color: "#FFFFFF",
653
+ fontSize: "1.5rem",
654
+ textShadow: "0px 3px 6px rgba(0, 0, 0, 0.5)"
655
+ }
656
+ }
657
+ ),
658
+ /* @__PURE__ */ jsxRuntime.jsx(CardContent2__default.default, { children: /* @__PURE__ */ jsxRuntime.jsx(
659
+ FiltersContainer_default,
660
+ {
661
+ onTypeChange,
662
+ onTagChange,
663
+ onSubmit,
664
+ tags: validTags
665
+ }
666
+ ) })
667
+ ] }) }),
668
+ /* @__PURE__ */ jsxRuntime.jsx(Grid__default.default, { size: { xs: 12, md: 9 }, children: /* @__PURE__ */ jsxRuntime.jsxs(Card2__default.default, { children: [
669
+ /* @__PURE__ */ jsxRuntime.jsx(
670
+ CardHeader__default.default,
671
+ {
672
+ title: "Results",
673
+ style: {
674
+ background: "linear-gradient(135deg, rgba(25, 118, 210, 0.8), rgba(25, 118, 210, 1))",
675
+ color: "#FFFFFF",
676
+ fontSize: "1.5rem",
677
+ textShadow: "0px 3px 6px rgba(0, 0, 0, 0.5)"
678
+ }
679
+ }
680
+ ),
681
+ /* @__PURE__ */ jsxRuntime.jsx(CardContent2__default.default, { children: /* @__PURE__ */ jsxRuntime.jsx(
682
+ ResultsContainer_default,
683
+ {
684
+ results,
685
+ onResultClick,
686
+ tags: allTags
687
+ }
688
+ ) })
689
+ ] }) })
690
+ ] })
691
+ ] });
692
+ }
693
+ var TablesScrollableList = ({
694
+ results,
695
+ tags,
696
+ maxHeight,
697
+ onResultClick,
698
+ sortBy = "availability"
699
+ }) => {
700
+ const tables = (results || []).filter((r) => (r == null ? void 0 : r.type) === "table");
701
+ const getAvailableSlots = (r) => {
702
+ const capacity = typeof r.capacity === "number" ? r.capacity : 0;
703
+ const playersCount = typeof r.numPlayers === "number" ? r.numPlayers : 0;
704
+ return Math.max(capacity - playersCount, 0);
705
+ };
706
+ const sortedTables = sortBy === "availability" ? [...tables].sort((a, b) => getAvailableSlots(b) - getAvailableSlots(a)) : tables;
707
+ const handleClick = (id) => onResultClick == null ? void 0 : onResultClick(id);
708
+ return /* @__PURE__ */ jsxRuntime.jsx(
709
+ ScrollableResultsList_default,
710
+ {
711
+ results: sortedTables,
712
+ tags,
713
+ maxHeight,
714
+ onResultClick: (id, type) => {
715
+ if (type === "table") handleClick(id);
716
+ }
717
+ }
718
+ );
719
+ };
720
+ var TablesScrollableList_default = TablesScrollableList;
721
+
722
+ exports.BaseSearchResultCard = BaseSearchResultCard_default;
723
+ exports.EventResultCard = EventResultCard_default;
724
+ exports.FiltersContainer = FiltersContainer_default;
725
+ exports.PlayerResultCard = PlayerResultCard_default;
726
+ exports.PlayersScrollableList = PlayersScrollableList_default;
727
+ exports.ResultsContainer = ResultsContainer_default;
728
+ exports.ScrollableResultsList = ScrollableResultsList_default;
729
+ exports.SearchPageLayout = SearchPageLayout;
730
+ exports.SearchResultCard = SearchResultCard_default;
731
+ exports.SortOptions = SortOptions_default;
732
+ exports.TableResultCard = TableResultCard_default;
733
+ exports.TablesScrollableList = TablesScrollableList_default;
734
+ exports.TagsFilter = TagsFilter_default;
735
+ exports.TypeFilter = TypeFilter_default;
736
+ //# sourceMappingURL=SearchPage.cjs.map
737
+ //# sourceMappingURL=SearchPage.cjs.map