@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,1245 @@
1
+ "use client";
2
+ 'use strict';
3
+
4
+ var react = require('react');
5
+ var jsxRuntime = require('react/jsx-runtime');
6
+ var material = require('@mui/material');
7
+ var DeleteIcon = require('@mui/icons-material/Delete');
8
+ var EditIcon = require('@mui/icons-material/Edit');
9
+ var AddIcon = require('@mui/icons-material/Add');
10
+ var ColorizeIcon = require('@mui/icons-material/Colorize');
11
+ var CancelIcon = require('@mui/icons-material/Cancel');
12
+ var CheckCircleIcon = require('@mui/icons-material/CheckCircle');
13
+ var Box2 = require('@mui/material/Box');
14
+ var Grid5 = require('@mui/material/Grid');
15
+ var Card4 = require('@mui/material/Card');
16
+ var CardContent4 = require('@mui/material/CardContent');
17
+ var CardHeader = require('@mui/material/CardHeader');
18
+ var Divider = require('@mui/material/Divider');
19
+ var Avatar = require('@mui/material/Avatar');
20
+ var CasinoIcon = require('@mui/icons-material/Casino');
21
+ var CalendarTodayIcon = require('@mui/icons-material/CalendarToday');
22
+ var LocationOnIcon = require('@mui/icons-material/LocationOn');
23
+ var EventIcon = require('@mui/icons-material/Event');
24
+
25
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
26
+
27
+ var DeleteIcon__default = /*#__PURE__*/_interopDefault(DeleteIcon);
28
+ var EditIcon__default = /*#__PURE__*/_interopDefault(EditIcon);
29
+ var AddIcon__default = /*#__PURE__*/_interopDefault(AddIcon);
30
+ var ColorizeIcon__default = /*#__PURE__*/_interopDefault(ColorizeIcon);
31
+ var CancelIcon__default = /*#__PURE__*/_interopDefault(CancelIcon);
32
+ var CheckCircleIcon__default = /*#__PURE__*/_interopDefault(CheckCircleIcon);
33
+ var Box2__default = /*#__PURE__*/_interopDefault(Box2);
34
+ var Grid5__default = /*#__PURE__*/_interopDefault(Grid5);
35
+ var Card4__default = /*#__PURE__*/_interopDefault(Card4);
36
+ var CardContent4__default = /*#__PURE__*/_interopDefault(CardContent4);
37
+ var CardHeader__default = /*#__PURE__*/_interopDefault(CardHeader);
38
+ var Divider__default = /*#__PURE__*/_interopDefault(Divider);
39
+ var Avatar__default = /*#__PURE__*/_interopDefault(Avatar);
40
+ var CasinoIcon__default = /*#__PURE__*/_interopDefault(CasinoIcon);
41
+ var CalendarTodayIcon__default = /*#__PURE__*/_interopDefault(CalendarTodayIcon);
42
+ var LocationOnIcon__default = /*#__PURE__*/_interopDefault(LocationOnIcon);
43
+ var EventIcon__default = /*#__PURE__*/_interopDefault(EventIcon);
44
+
45
+ // src/components/EventPage/editMode/EventBannerEdit.tsx
46
+ var defaultValue = {
47
+ isOwner: false,
48
+ updateEvent: async () => false,
49
+ updateImages: () => {
50
+ },
51
+ event: null
52
+ };
53
+ var EventEditContext = react.createContext(defaultValue);
54
+ function EventEditProvider({
55
+ value,
56
+ initialEvent,
57
+ children
58
+ }) {
59
+ const [event, setEvent] = react.useState(initialEvent);
60
+ react.useEffect(() => {
61
+ setEvent(initialEvent);
62
+ }, [initialEvent]);
63
+ const handleUpdateEvent = async (patch) => {
64
+ if (value == null ? void 0 : value.updateEvent) {
65
+ const result = value.updateEvent(patch);
66
+ if (result instanceof Promise) {
67
+ const success = await result;
68
+ if (success) {
69
+ setEvent((prev) => ({ ...prev, ...patch }));
70
+ }
71
+ return success;
72
+ } else {
73
+ const success = result === false ? false : true;
74
+ if (success) {
75
+ setEvent((prev) => ({ ...prev, ...patch }));
76
+ }
77
+ return success;
78
+ }
79
+ }
80
+ return false;
81
+ };
82
+ const mergedValue = {
83
+ ...defaultValue,
84
+ ...value,
85
+ event,
86
+ updateEvent: handleUpdateEvent
87
+ };
88
+ return /* @__PURE__ */ jsxRuntime.jsx(EventEditContext.Provider, { value: mergedValue, children });
89
+ }
90
+ function useEventEdit() {
91
+ const context = react.useContext(EventEditContext);
92
+ if (!context) {
93
+ throw new Error("useEventEdit must be used within an EventEditProvider");
94
+ }
95
+ return context;
96
+ }
97
+ function generateTagsDisplay(tag) {
98
+ return /* @__PURE__ */ jsxRuntime.jsx(
99
+ "span",
100
+ {
101
+ className: "inline-block text-sm px-3 py-1 rounded-full outline-black outline-2 font-outlined",
102
+ style: {
103
+ marginTop: "6px",
104
+ marginRight: "6px",
105
+ marginBottom: "6px",
106
+ background: tag.color || "#bfbcbb",
107
+ color: "white",
108
+ textShadow: "black 0.2em 0.2em 0.4em"
109
+ },
110
+ children: tag.label
111
+ },
112
+ tag.id
113
+ );
114
+ }
115
+ function EventBannerEdit({
116
+ initialValue,
117
+ onCancel,
118
+ onSave
119
+ }) {
120
+ const { updateImages } = useEventEdit();
121
+ const [title, setTitle] = react.useState(initialValue.title);
122
+ const [bannerColor, setBannerColor] = react.useState(initialValue.bannerColor || "");
123
+ const [desktopBanner, setDesktopBanner] = react.useState(initialValue.bannerUrl.desktop);
124
+ const [mobileBanner, setMobileBanner] = react.useState(initialValue.bannerUrl.mobile || "");
125
+ const [links, setLinks] = react.useState(initialValue.links);
126
+ const [linkToEdit, setLinkToEdit] = react.useState(null);
127
+ const [isSaving, setIsSaving] = react.useState(false);
128
+ const backgroundColor = bannerColor || "linear-gradient(135deg, rgba(25,118,210,0.8), rgba(25,118,210,1))";
129
+ const handleSave = async () => {
130
+ setIsSaving(true);
131
+ try {
132
+ const patch = {};
133
+ if (title !== initialValue.title) {
134
+ patch.title = title;
135
+ }
136
+ const currentBannerColor = bannerColor || void 0;
137
+ const initialBannerColor = initialValue.bannerColor || void 0;
138
+ if (currentBannerColor !== initialBannerColor) {
139
+ patch.bannerColor = currentBannerColor;
140
+ }
141
+ const currentMobile = mobileBanner || void 0;
142
+ const initialMobile = initialValue.bannerUrl.mobile || void 0;
143
+ if (desktopBanner !== initialValue.bannerUrl.desktop || currentMobile !== initialMobile) {
144
+ patch.bannerUrl = {
145
+ desktop: desktopBanner,
146
+ mobile: currentMobile
147
+ };
148
+ }
149
+ if (JSON.stringify(links) !== JSON.stringify(initialValue.links)) {
150
+ patch.links = links;
151
+ }
152
+ if (Object.keys(patch).length > 0) {
153
+ await onSave(patch);
154
+ } else {
155
+ onCancel();
156
+ }
157
+ } catch (error) {
158
+ console.error("Failed to save banner changes", error);
159
+ } finally {
160
+ setIsSaving(false);
161
+ }
162
+ };
163
+ const removeLink = (index) => {
164
+ setLinks(links.filter((_, i) => i !== index));
165
+ };
166
+ const openEditLink = (index) => {
167
+ setLinkToEdit({
168
+ index,
169
+ text: links[index].text,
170
+ url: links[index].url
171
+ });
172
+ };
173
+ const saveEditedLink = () => {
174
+ if (linkToEdit) {
175
+ const newLinks = [...links];
176
+ if (linkToEdit.index === -1) {
177
+ newLinks.push({ text: linkToEdit.text, url: linkToEdit.url });
178
+ } else {
179
+ newLinks[linkToEdit.index] = { text: linkToEdit.text, url: linkToEdit.url };
180
+ }
181
+ setLinks(newLinks);
182
+ setLinkToEdit(null);
183
+ }
184
+ };
185
+ const handleEyeDropper = async () => {
186
+ if (!window.EyeDropper) {
187
+ alert("EyeDropper API is not supported in this browser");
188
+ return;
189
+ }
190
+ const eyeDropper = new window.EyeDropper();
191
+ try {
192
+ const result = await eyeDropper.open();
193
+ setBannerColor(result.sRGBHex);
194
+ } catch (e) {
195
+ console.log("EyeDropper cancelled or failed", e);
196
+ }
197
+ };
198
+ return /* @__PURE__ */ jsxRuntime.jsxs(material.Box, { sx: { position: "relative", width: "100%" }, children: [
199
+ /* @__PURE__ */ jsxRuntime.jsxs(
200
+ material.Grid,
201
+ {
202
+ sx: {
203
+ background: backgroundColor,
204
+ paddingTop: "8px",
205
+ position: "relative",
206
+ border: "2px dashed rgba(255,255,255,0.5)",
207
+ borderRadius: 1
208
+ },
209
+ children: [
210
+ /* @__PURE__ */ jsxRuntime.jsxs(material.Box, { sx: {
211
+ position: "absolute",
212
+ top: 8,
213
+ left: 8,
214
+ zIndex: 10,
215
+ display: "flex",
216
+ flexDirection: "column",
217
+ gap: 1,
218
+ bgcolor: "rgba(0,0,0,0.5)",
219
+ p: 1,
220
+ borderRadius: 1,
221
+ width: "300px"
222
+ }, children: [
223
+ /* @__PURE__ */ jsxRuntime.jsx(
224
+ material.TextField,
225
+ {
226
+ label: "Title",
227
+ variant: "outlined",
228
+ size: "small",
229
+ value: title,
230
+ onChange: (e) => setTitle(e.target.value),
231
+ sx: { input: { color: "white" }, label: { color: "rgba(255,255,255,0.7)" }, "& .MuiOutlinedInput-root": { "& fieldset": { borderColor: "rgba(255,255,255,0.3)" } } }
232
+ }
233
+ ),
234
+ /* @__PURE__ */ jsxRuntime.jsxs(material.Box, { sx: { display: "flex", alignItems: "center", gap: 1 }, children: [
235
+ /* @__PURE__ */ jsxRuntime.jsx(
236
+ material.TextField,
237
+ {
238
+ label: "Banner Color",
239
+ variant: "outlined",
240
+ size: "small",
241
+ value: bannerColor,
242
+ onChange: (e) => setBannerColor(e.target.value),
243
+ placeholder: "#HEX or linear-gradient(...)",
244
+ sx: { flex: 1, input: { color: "white" }, label: { color: "rgba(255,255,255,0.7)" }, "& .MuiOutlinedInput-root": { "& fieldset": { borderColor: "rgba(255,255,255,0.3)" } } }
245
+ }
246
+ ),
247
+ /* @__PURE__ */ jsxRuntime.jsx(material.Tooltip, { title: "Eye Dropper", children: /* @__PURE__ */ jsxRuntime.jsx(
248
+ material.IconButton,
249
+ {
250
+ size: "small",
251
+ onClick: handleEyeDropper,
252
+ sx: { color: "white", bgcolor: "rgba(255,255,255,0.1)", "&:hover": { bgcolor: "rgba(255,255,255,0.2)" } },
253
+ children: /* @__PURE__ */ jsxRuntime.jsx(ColorizeIcon__default.default, { fontSize: "small" })
254
+ }
255
+ ) }),
256
+ /* @__PURE__ */ jsxRuntime.jsx(
257
+ "input",
258
+ {
259
+ type: "color",
260
+ value: bannerColor.startsWith("#") ? bannerColor : "#1976d2",
261
+ onChange: (e) => setBannerColor(e.target.value),
262
+ style: { width: "40px", height: "40px", padding: 0, border: "none", background: "transparent", cursor: "pointer" }
263
+ }
264
+ )
265
+ ] }),
266
+ /* @__PURE__ */ jsxRuntime.jsx(material.Box, { sx: { display: "flex", gap: 1 }, children: /* @__PURE__ */ jsxRuntime.jsx(
267
+ material.Button,
268
+ {
269
+ variant: "contained",
270
+ size: "small",
271
+ fullWidth: true,
272
+ onClick: updateImages,
273
+ children: "Update Images"
274
+ }
275
+ ) })
276
+ ] }),
277
+ /* @__PURE__ */ jsxRuntime.jsx(
278
+ material.Box,
279
+ {
280
+ sx: {
281
+ width: "100%",
282
+ height: "auto",
283
+ maxHeight: "250px",
284
+ overflow: "hidden",
285
+ display: "flex",
286
+ justifyContent: "center",
287
+ opacity: 0.8
288
+ },
289
+ children: /* @__PURE__ */ jsxRuntime.jsx(
290
+ material.Box,
291
+ {
292
+ component: "img",
293
+ src: desktopBanner,
294
+ alt: title,
295
+ sx: {
296
+ width: "100%",
297
+ height: "auto",
298
+ objectFit: "contain"
299
+ }
300
+ }
301
+ )
302
+ }
303
+ ),
304
+ /* @__PURE__ */ jsxRuntime.jsxs(
305
+ material.Grid,
306
+ {
307
+ display: "flex",
308
+ justifyContent: "center",
309
+ alignItems: "center",
310
+ paddingTop: "3px",
311
+ paddingBottom: "3px",
312
+ sx: { gap: 1.5, flexWrap: "wrap" },
313
+ children: [
314
+ /* @__PURE__ */ jsxRuntime.jsx(material.Box, { sx: { px: 1.5, py: 0.5, color: "rgba(255,255,255,0.5)", bgcolor: "rgba(0,0,0,0.4)", borderRadius: 2, border: "1px dashed rgba(255,255,255,0.2)" }, children: "Stats Placeholder" }),
315
+ generateTagsDisplay(initialValue.eventTag),
316
+ links.map((link, index) => /* @__PURE__ */ jsxRuntime.jsxs(
317
+ material.Box,
318
+ {
319
+ sx: {
320
+ position: "relative",
321
+ display: "flex",
322
+ alignItems: "center",
323
+ px: 1.5,
324
+ py: 0.5,
325
+ color: "#fff",
326
+ bgcolor: "rgba(0,0,0,0.7)",
327
+ borderRadius: 2,
328
+ boxShadow: "0 8px 16px rgba(0,0,0,0.25), 0 2px 4px rgba(0,0,0,0.15)",
329
+ border: "1px solid rgba(255,255,255,0.25)",
330
+ backdropFilter: "blur(6px)",
331
+ fontWeight: 700,
332
+ letterSpacing: 0.2
333
+ },
334
+ children: [
335
+ link.text,
336
+ /* @__PURE__ */ jsxRuntime.jsxs(material.Box, { sx: { ml: 1, display: "flex" }, children: [
337
+ /* @__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" }) }) }),
338
+ /* @__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" }) }) })
339
+ ] })
340
+ ]
341
+ },
342
+ index
343
+ )),
344
+ /* @__PURE__ */ jsxRuntime.jsx(
345
+ material.Button,
346
+ {
347
+ variant: "outlined",
348
+ size: "small",
349
+ startIcon: /* @__PURE__ */ jsxRuntime.jsx(AddIcon__default.default, {}),
350
+ onClick: () => setLinkToEdit({ index: -1, text: "", url: "" }),
351
+ sx: {
352
+ color: "white",
353
+ borderColor: "rgba(255,255,255,0.5)",
354
+ borderRadius: 2,
355
+ "&:hover": { borderColor: "white", bgcolor: "rgba(255,255,255,0.1)" }
356
+ },
357
+ children: "Add Link"
358
+ }
359
+ )
360
+ ]
361
+ }
362
+ )
363
+ ]
364
+ }
365
+ ),
366
+ /* @__PURE__ */ jsxRuntime.jsxs(material.Box, { sx: { display: "flex", justifyContent: "flex-end", gap: 2, mt: 2 }, children: [
367
+ /* @__PURE__ */ jsxRuntime.jsx(material.Button, { onClick: onCancel, color: "inherit", disabled: isSaving, children: "Cancel" }),
368
+ /* @__PURE__ */ jsxRuntime.jsx(
369
+ material.Button,
370
+ {
371
+ onClick: handleSave,
372
+ variant: "contained",
373
+ color: "primary",
374
+ disabled: isSaving,
375
+ startIcon: isSaving ? /* @__PURE__ */ jsxRuntime.jsx(material.CircularProgress, { size: 20, color: "inherit" }) : null,
376
+ children: isSaving ? "Saving..." : "Save Changes"
377
+ }
378
+ )
379
+ ] }),
380
+ /* @__PURE__ */ jsxRuntime.jsxs(material.Dialog, { open: linkToEdit !== null, onClose: () => setLinkToEdit(null), children: [
381
+ /* @__PURE__ */ jsxRuntime.jsx(material.DialogTitle, { children: (linkToEdit == null ? void 0 : linkToEdit.index) === -1 ? "Add Link" : "Edit Link" }),
382
+ /* @__PURE__ */ jsxRuntime.jsx(material.DialogContent, { children: /* @__PURE__ */ jsxRuntime.jsxs(material.Box, { sx: { display: "flex", flexDirection: "column", gap: 2, pt: 1, width: "400px" }, children: [
383
+ /* @__PURE__ */ jsxRuntime.jsx(
384
+ material.TextField,
385
+ {
386
+ label: "Link Text",
387
+ fullWidth: true,
388
+ value: (linkToEdit == null ? void 0 : linkToEdit.text) || "",
389
+ onChange: (e) => setLinkToEdit((prev) => prev ? { ...prev, text: e.target.value } : null)
390
+ }
391
+ ),
392
+ /* @__PURE__ */ jsxRuntime.jsx(
393
+ material.TextField,
394
+ {
395
+ label: "Link URL",
396
+ fullWidth: true,
397
+ value: (linkToEdit == null ? void 0 : linkToEdit.url) || "",
398
+ onChange: (e) => setLinkToEdit((prev) => prev ? { ...prev, url: e.target.value } : null)
399
+ }
400
+ )
401
+ ] }) }),
402
+ /* @__PURE__ */ jsxRuntime.jsxs(material.DialogActions, { children: [
403
+ /* @__PURE__ */ jsxRuntime.jsx(material.Button, { onClick: () => setLinkToEdit(null), children: "Cancel" }),
404
+ /* @__PURE__ */ jsxRuntime.jsx(material.Button, { onClick: saveEditedLink, variant: "contained", children: "Confirm" })
405
+ ] })
406
+ ] })
407
+ ] });
408
+ }
409
+ var CANDIDATE_TIMEZONES = [
410
+ "America/New_York",
411
+ "America/Chicago",
412
+ "America/Denver",
413
+ "America/Los_Angeles",
414
+ "America/Anchorage",
415
+ "America/Adak",
416
+ "Pacific/Honolulu",
417
+ "UTC"
418
+ ];
419
+ function EventBasicInfo(props) {
420
+ var _a, _b, _c, _d, _e, _f, _g, _h;
421
+ const { isOwner, updateEvent, event } = useEventEdit();
422
+ const [isEditing, setIsEditing] = react.useState(false);
423
+ const description = (_b = (_a = props.description) != null ? _a : event == null ? void 0 : event.description) != null ? _b : "";
424
+ const startingDate = (_c = props.startingDate) != null ? _c : event == null ? void 0 : event.startingDate;
425
+ const endingDate = (_d = props.endingDate) != null ? _d : event == null ? void 0 : event.endingDate;
426
+ const timeInfo = (_f = (_e = props.timeInfo) != null ? _e : event == null ? void 0 : event.date) != null ? _f : "";
427
+ const timezone = (_h = (_g = props.timezone) != null ? _g : event == null ? void 0 : event.timezone) != null ? _h : "UTC";
428
+ if (isEditing) {
429
+ return /* @__PURE__ */ jsxRuntime.jsx(
430
+ EventBasicInfoEdit,
431
+ {
432
+ initialValue: {
433
+ description,
434
+ startingDate: typeof startingDate === "string" ? startingDate : startingDate == null ? void 0 : startingDate.toISOString(),
435
+ endingDate: typeof endingDate === "string" ? endingDate : endingDate == null ? void 0 : endingDate.toISOString(),
436
+ date: timeInfo,
437
+ timezone
438
+ },
439
+ onCancel: () => setIsEditing(false),
440
+ onSave: async (payload) => {
441
+ const success = await updateEvent(payload);
442
+ if (success) {
443
+ setIsEditing(false);
444
+ }
445
+ }
446
+ }
447
+ );
448
+ }
449
+ return /* @__PURE__ */ jsxRuntime.jsx(
450
+ EventBasicInfoView,
451
+ {
452
+ ...props,
453
+ description,
454
+ startingDate,
455
+ endingDate,
456
+ timeInfo,
457
+ timezone,
458
+ isOwner,
459
+ onEdit: () => setIsEditing(true)
460
+ }
461
+ );
462
+ }
463
+ function EventBasicInfoView({ description, locationId, startingDate, endingDate, timeInfo, timezone, isOwner, onEdit }) {
464
+ return /* @__PURE__ */ jsxRuntime.jsx(Grid5__default.default, { sx: { position: "relative" }, children: /* @__PURE__ */ jsxRuntime.jsx(material.Card, { style: {
465
+ boxShadow: "0px 4px 10px rgba(0, 0, 0, 0.1)",
466
+ background: "linear-gradient(135deg, rgba(225, 225, 225, 1), rgba(250, 250, 250, 1))"
467
+ }, children: /* @__PURE__ */ jsxRuntime.jsxs(material.CardContent, { children: [
468
+ isOwner && /* @__PURE__ */ jsxRuntime.jsx(Box2__default.default, { sx: { display: "flex", justifyContent: "flex-end" }, children: /* @__PURE__ */ jsxRuntime.jsx(material.Button, { size: "small", onClick: onEdit, variant: "outlined", children: "Edit" }) }),
469
+ generateTimeInfo(timeInfo, timezone || "UTC", startingDate, endingDate),
470
+ /* @__PURE__ */ jsxRuntime.jsx(material.Typography, { variant: "h5", paddingTop: 2, children: "About:" }),
471
+ /* @__PURE__ */ jsxRuntime.jsx(material.Typography, { sx: { whiteSpace: "pre-wrap" }, paddingTop: 1, children: description }),
472
+ getLocation()
473
+ ] }) }) });
474
+ }
475
+ var generateTimeInfo = function(timeInfo, timezone, startingDate, endingDate) {
476
+ const formatDateTime = (dateInput) => {
477
+ const d = typeof dateInput === "string" ? new Date(dateInput) : dateInput;
478
+ if (!d || isNaN(d.getTime())) return "";
479
+ try {
480
+ return new Intl.DateTimeFormat("en-US", {
481
+ month: "short",
482
+ day: "numeric",
483
+ year: "numeric",
484
+ hour: "numeric",
485
+ minute: "2-digit",
486
+ hour12: true,
487
+ timeZone: timezone,
488
+ timeZoneName: "shortGeneric"
489
+ }).format(d).replace(",", " @");
490
+ } catch (e) {
491
+ return d.toUTCString();
492
+ }
493
+ };
494
+ let rangeText = null;
495
+ if (startingDate && endingDate) {
496
+ rangeText = `From ${formatDateTime(startingDate)}
497
+ Until ${formatDateTime(endingDate)}`;
498
+ } else if (startingDate) {
499
+ rangeText = `starting ${formatDateTime(startingDate)}`;
500
+ } else if (endingDate) {
501
+ rangeText = `until ${formatDateTime(endingDate)}`;
502
+ }
503
+ return /* @__PURE__ */ jsxRuntime.jsxs(Box2__default.default, { sx: { mt: 2 }, children: [
504
+ rangeText && /* @__PURE__ */ jsxRuntime.jsx(material.Typography, { variant: "body1", fontSize: "x-large", fontWeight: "bold", sx: { whiteSpace: "pre-wrap" }, children: rangeText }),
505
+ timeInfo && /* @__PURE__ */ jsxRuntime.jsxs(Box2__default.default, { sx: { mt: 1 }, children: [
506
+ /* @__PURE__ */ jsxRuntime.jsx(material.Typography, { variant: "h5", children: "Hours of Operation:" }),
507
+ /* @__PURE__ */ jsxRuntime.jsx(material.Typography, { variant: "body1", sx: { whiteSpace: "pre-wrap" }, children: timeInfo })
508
+ ] })
509
+ ] });
510
+ };
511
+ var getLocation = function(locationId) {
512
+ return /* @__PURE__ */ jsxRuntime.jsx(Box2__default.default, { sx: {
513
+ width: "100%",
514
+ p: 1.5,
515
+ borderRadius: 2,
516
+ boxShadow: "0px 4px 10px rgba(0, 0, 0, 0.1)",
517
+ background: "linear-gradient(135deg, rgba(180, 180,180, 1), rgba(225, 225, 225, 0.8))",
518
+ mt: 2
519
+ }, children: "Location Data goes here" });
520
+ };
521
+ function EventBasicInfoEdit({
522
+ initialValue,
523
+ onCancel,
524
+ onSave
525
+ }) {
526
+ const toWallTimeISO = (dateInput, timeZone) => {
527
+ if (!dateInput) return "";
528
+ const d = new Date(dateInput);
529
+ if (isNaN(d.getTime())) return "";
530
+ const parts = new Intl.DateTimeFormat("en-US", {
531
+ year: "numeric",
532
+ month: "2-digit",
533
+ day: "2-digit",
534
+ hour: "2-digit",
535
+ minute: "2-digit",
536
+ hour12: false,
537
+ timeZone
538
+ }).formatToParts(d);
539
+ const f = (type) => {
540
+ var _a;
541
+ return (_a = parts.find((p) => p.type === type)) == null ? void 0 : _a.value;
542
+ };
543
+ const year = f("year");
544
+ const month = f("month");
545
+ const day = f("day");
546
+ let hour = f("hour");
547
+ if (hour === "24") hour = "00";
548
+ const minute = f("minute");
549
+ return `${year}-${month}-${day}T${hour}:${minute}`;
550
+ };
551
+ const toUTCISOString = (wallTime, timeZone) => {
552
+ var _a;
553
+ if (!wallTime) return void 0;
554
+ const d = /* @__PURE__ */ new Date(wallTime + ":00Z");
555
+ const parts = new Intl.DateTimeFormat("en-US", {
556
+ timeZone,
557
+ timeZoneName: "longOffset"
558
+ }).formatToParts(d);
559
+ const offsetPart = ((_a = parts.find((p) => p.type === "timeZoneName")) == null ? void 0 : _a.value) || "GMT";
560
+ const offset = offsetPart.replace("GMT", "");
561
+ const isoWithOffset = `${wallTime}:00${offset || "+00:00"}`;
562
+ return new Date(isoWithOffset).toISOString();
563
+ };
564
+ const [description, setDescription] = react.useState(initialValue.description);
565
+ const [timezone, setTimezone] = react.useState(initialValue.timezone);
566
+ const [startingDate, setStartingDate] = react.useState(toWallTimeISO(initialValue.startingDate, initialValue.timezone));
567
+ const [endingDate, setEndingDate] = react.useState(toWallTimeISO(initialValue.endingDate, initialValue.timezone));
568
+ const [timeInfo, setTimeInfo] = react.useState(initialValue.date);
569
+ const [isSaving, setIsSaving] = react.useState(false);
570
+ const handleSave = async () => {
571
+ setIsSaving(true);
572
+ try {
573
+ const patch = {};
574
+ if (description !== initialValue.description) patch.description = description;
575
+ if (timeInfo !== initialValue.date) patch.date = timeInfo;
576
+ if (timezone !== initialValue.timezone) patch.timezone = timezone;
577
+ if (startingDate !== toWallTimeISO(initialValue.startingDate, timezone) || timezone !== initialValue.timezone) {
578
+ patch.startingDate = toUTCISOString(startingDate, timezone);
579
+ }
580
+ if (endingDate !== toWallTimeISO(initialValue.endingDate, timezone) || timezone !== initialValue.timezone) {
581
+ patch.endingDate = toUTCISOString(endingDate, timezone);
582
+ }
583
+ if (Object.keys(patch).length > 0) {
584
+ await onSave(patch);
585
+ } else {
586
+ onCancel();
587
+ }
588
+ } catch (error) {
589
+ console.error("Failed to save basic info changes", error);
590
+ } finally {
591
+ setIsSaving(false);
592
+ }
593
+ };
594
+ return /* @__PURE__ */ jsxRuntime.jsx(material.Card, { sx: {
595
+ boxShadow: "0px 4px 10px rgba(0, 0, 0, 0.1)",
596
+ background: "linear-gradient(135deg, rgba(225, 225, 225, 1), rgba(250, 250, 250, 1))",
597
+ border: "2px dashed rgba(25,118,210,0.5)",
598
+ width: "100%"
599
+ }, children: /* @__PURE__ */ jsxRuntime.jsxs(material.CardContent, { sx: { position: "relative" }, children: [
600
+ /* @__PURE__ */ jsxRuntime.jsxs(material.Box, { sx: { display: "flex", justifyContent: "flex-end", mb: 1, gap: 1 }, children: [
601
+ /* @__PURE__ */ jsxRuntime.jsx(material.Tooltip, { title: "Cancel", children: /* @__PURE__ */ jsxRuntime.jsx(material.IconButton, { size: "small", onClick: onCancel, color: "error", disabled: isSaving, children: /* @__PURE__ */ jsxRuntime.jsx(CancelIcon__default.default, {}) }) }),
602
+ /* @__PURE__ */ jsxRuntime.jsx(material.Tooltip, { title: "Apply Changes", children: /* @__PURE__ */ jsxRuntime.jsx(material.IconButton, { size: "small", onClick: handleSave, color: "primary", disabled: isSaving, children: isSaving ? /* @__PURE__ */ jsxRuntime.jsx(material.CircularProgress, { size: 24 }) : /* @__PURE__ */ jsxRuntime.jsx(CheckCircleIcon__default.default, {}) }) })
603
+ ] }),
604
+ /* @__PURE__ */ jsxRuntime.jsxs(material.Box, { sx: { mt: 2 }, children: [
605
+ /* @__PURE__ */ jsxRuntime.jsx(material.Typography, { variant: "body1", fontSize: "x-large", fontWeight: "bold", sx: { mb: 1 }, children: "Event Dates & Times:" }),
606
+ /* @__PURE__ */ jsxRuntime.jsxs(material.Grid, { container: true, spacing: 2, children: [
607
+ /* @__PURE__ */ jsxRuntime.jsx(material.Grid, { size: { xs: 12, sm: 4 }, children: /* @__PURE__ */ jsxRuntime.jsx(
608
+ material.TextField,
609
+ {
610
+ fullWidth: true,
611
+ label: "Starting Date",
612
+ type: "datetime-local",
613
+ size: "small",
614
+ value: startingDate,
615
+ onChange: (e) => setStartingDate(e.target.value),
616
+ InputLabelProps: { shrink: true }
617
+ }
618
+ ) }),
619
+ /* @__PURE__ */ jsxRuntime.jsx(material.Grid, { size: { xs: 12, sm: 4 }, children: /* @__PURE__ */ jsxRuntime.jsx(
620
+ material.TextField,
621
+ {
622
+ fullWidth: true,
623
+ label: "Ending Date",
624
+ type: "datetime-local",
625
+ size: "small",
626
+ value: endingDate,
627
+ onChange: (e) => setEndingDate(e.target.value),
628
+ InputLabelProps: { shrink: true }
629
+ }
630
+ ) }),
631
+ /* @__PURE__ */ jsxRuntime.jsx(material.Grid, { size: { xs: 12, sm: 4 }, children: /* @__PURE__ */ jsxRuntime.jsxs(material.FormControl, { fullWidth: true, size: "small", children: [
632
+ /* @__PURE__ */ jsxRuntime.jsx(material.InputLabel, { children: "Display Timezone" }),
633
+ /* @__PURE__ */ jsxRuntime.jsx(
634
+ material.Select,
635
+ {
636
+ label: "Display Timezone",
637
+ value: timezone,
638
+ onChange: (e) => setTimezone(e.target.value),
639
+ children: CANDIDATE_TIMEZONES.map((tz) => /* @__PURE__ */ jsxRuntime.jsx(material.MenuItem, { value: tz, children: tz }, tz))
640
+ }
641
+ )
642
+ ] }) })
643
+ ] }),
644
+ /* @__PURE__ */ jsxRuntime.jsxs(material.Box, { sx: { mt: 2 }, children: [
645
+ /* @__PURE__ */ jsxRuntime.jsx(material.Typography, { variant: "h5", children: "Hours of Operation:" }),
646
+ /* @__PURE__ */ jsxRuntime.jsx(
647
+ material.TextField,
648
+ {
649
+ fullWidth: true,
650
+ multiline: true,
651
+ variant: "standard",
652
+ placeholder: "e.g. Mon-Fri 9am-5pm",
653
+ value: timeInfo,
654
+ onChange: (e) => setTimeInfo(e.target.value),
655
+ sx: { mt: 1 }
656
+ }
657
+ )
658
+ ] })
659
+ ] }),
660
+ /* @__PURE__ */ jsxRuntime.jsx(material.Typography, { variant: "h5", paddingTop: 2, children: "About:" }),
661
+ /* @__PURE__ */ jsxRuntime.jsx(
662
+ material.TextField,
663
+ {
664
+ fullWidth: true,
665
+ multiline: true,
666
+ variant: "standard",
667
+ value: description,
668
+ onChange: (e) => setDescription(e.target.value),
669
+ sx: {
670
+ paddingTop: 1,
671
+ "& .MuiInputBase-root": {
672
+ lineHeight: 1.5,
673
+ whiteSpace: "pre-wrap"
674
+ }
675
+ }
676
+ }
677
+ ),
678
+ /* @__PURE__ */ jsxRuntime.jsx(material.Box, { sx: {
679
+ mt: 2,
680
+ width: "100%",
681
+ p: 1.5,
682
+ borderRadius: 2,
683
+ boxShadow: "0px 4px 10px rgba(0, 0, 0, 0.1)",
684
+ background: "linear-gradient(135deg, rgba(180, 180,180, 1), rgba(225, 225, 225, 0.8))",
685
+ color: "rgba(0,0,0,0.5)",
686
+ border: "1px dashed rgba(0,0,0,0.2)"
687
+ }, children: "Location Data (Not Editable)" })
688
+ ] }) });
689
+ }
690
+ function EventBanner(props) {
691
+ const { isOwner, updateEvent, event } = useEventEdit();
692
+ const [isEditing, setIsEditing] = react.useState(false);
693
+ if (!event && !props.bannerUrl) return null;
694
+ const bannerUrl = props.bannerUrl || (event == null ? void 0 : event.bannerUrl);
695
+ const links = props.links || (event == null ? void 0 : event.links) || [];
696
+ const title = props.title || (event == null ? void 0 : event.title) || "";
697
+ const eventTag = props.eventTag || (event == null ? void 0 : event.eventTag);
698
+ const bannerColor = props.bannerColor || (event == null ? void 0 : event.bannerColor);
699
+ if (!bannerUrl || !eventTag) return null;
700
+ if (isEditing) {
701
+ return /* @__PURE__ */ jsxRuntime.jsx(
702
+ EventBannerEdit,
703
+ {
704
+ initialValue: {
705
+ bannerUrl,
706
+ bannerColor,
707
+ links,
708
+ title,
709
+ eventTag
710
+ },
711
+ onCancel: () => setIsEditing(false),
712
+ onSave: async (payload) => {
713
+ const success = await updateEvent(payload);
714
+ if (success) {
715
+ setIsEditing(false);
716
+ }
717
+ }
718
+ }
719
+ );
720
+ }
721
+ return /* @__PURE__ */ jsxRuntime.jsx(
722
+ EventBannerView,
723
+ {
724
+ ...props,
725
+ bannerUrl,
726
+ links,
727
+ title,
728
+ eventTag,
729
+ bannerColor,
730
+ isOwner,
731
+ onEdit: () => setIsEditing(true)
732
+ }
733
+ );
734
+ }
735
+ function EventBannerView({
736
+ bannerUrl,
737
+ links,
738
+ bannerColor,
739
+ title,
740
+ eventTag,
741
+ attendees,
742
+ numGames,
743
+ isOwner,
744
+ onEdit
745
+ }) {
746
+ const backgroundColor = bannerColor || "linear-gradient(135deg, rgba(25,118,210,0.8), rgba(25,118,210,1))";
747
+ return /* @__PURE__ */ jsxRuntime.jsxs(
748
+ Grid5__default.default,
749
+ {
750
+ sx: {
751
+ background: backgroundColor,
752
+ paddingTop: "8px",
753
+ position: "relative"
754
+ },
755
+ children: [
756
+ /* @__PURE__ */ jsxRuntime.jsxs(Grid5__default.default, { children: [
757
+ /* @__PURE__ */ jsxRuntime.jsxs(
758
+ material.Box,
759
+ {
760
+ sx: {
761
+ width: "100%",
762
+ height: "auto",
763
+ maxHeight: "250px",
764
+ overflow: "hidden",
765
+ display: "flex",
766
+ justifyContent: "center"
767
+ },
768
+ children: [
769
+ /* @__PURE__ */ jsxRuntime.jsx(
770
+ material.Box,
771
+ {
772
+ component: "img",
773
+ src: bannerUrl.desktop,
774
+ alt: title,
775
+ sx: {
776
+ width: "100%",
777
+ height: "auto",
778
+ objectFit: "contain",
779
+ display: { xs: "none", md: "block" }
780
+ }
781
+ }
782
+ ),
783
+ bannerUrl.mobile && /* @__PURE__ */ jsxRuntime.jsx(
784
+ material.Box,
785
+ {
786
+ component: "img",
787
+ src: bannerUrl.mobile,
788
+ alt: title,
789
+ sx: {
790
+ width: "100%",
791
+ height: "auto",
792
+ objectFit: "contain",
793
+ display: { xs: "block", md: "none" }
794
+ }
795
+ }
796
+ ),
797
+ !bannerUrl.mobile && /* @__PURE__ */ jsxRuntime.jsx(
798
+ material.Box,
799
+ {
800
+ component: "img",
801
+ src: bannerUrl.desktop,
802
+ alt: title,
803
+ sx: {
804
+ width: "100%",
805
+ height: "auto",
806
+ objectFit: "contain",
807
+ display: { xs: "block", md: "none" }
808
+ }
809
+ }
810
+ )
811
+ ]
812
+ }
813
+ ),
814
+ /* @__PURE__ */ jsxRuntime.jsxs(
815
+ Grid5__default.default,
816
+ {
817
+ display: "flex",
818
+ justifyContent: "center",
819
+ alignItems: "center",
820
+ paddingTop: "3px",
821
+ paddingBottom: "3px",
822
+ sx: { gap: 1.5, flexWrap: "wrap" },
823
+ children: [
824
+ /* @__PURE__ */ jsxRuntime.jsx(
825
+ material.Box,
826
+ {
827
+ sx: {
828
+ px: 1.5,
829
+ py: 0.5,
830
+ color: "#fff",
831
+ bgcolor: "rgba(0,0,0,0.7)",
832
+ borderRadius: 2,
833
+ boxShadow: "0 8px 16px rgba(0,0,0,0.25), 0 2px 4px rgba(0,0,0,0.15)",
834
+ border: "1px solid rgba(255,255,255,0.25)",
835
+ backdropFilter: "blur(6px)",
836
+ fontWeight: 700,
837
+ letterSpacing: 0.2,
838
+ alignItems: "center",
839
+ justifyContent: "center"
840
+ },
841
+ children: `${attendees} Players`
842
+ }
843
+ ),
844
+ /* @__PURE__ */ jsxRuntime.jsx(
845
+ material.Box,
846
+ {
847
+ sx: {
848
+ px: 1.5,
849
+ py: 0.5,
850
+ color: "#fff",
851
+ bgcolor: "rgba(0,0,0,0.7)",
852
+ borderRadius: 2,
853
+ boxShadow: "0 8px 16px rgba(0,0,0,0.25), 0 2px 4px rgba(0,0,0,0.15)",
854
+ border: "1px solid rgba(255,255,255,0.25)",
855
+ backdropFilter: "blur(6px)",
856
+ fontWeight: 700,
857
+ letterSpacing: 0.2,
858
+ alignItems: "center",
859
+ justifyContent: "center"
860
+ },
861
+ children: `${numGames} tables`
862
+ }
863
+ ),
864
+ generateTagsDisplay(eventTag),
865
+ links.map((link) => generateLink(link))
866
+ ]
867
+ }
868
+ )
869
+ ] }),
870
+ isOwner && /* @__PURE__ */ jsxRuntime.jsx(
871
+ material.Button,
872
+ {
873
+ variant: "contained",
874
+ onClick: onEdit,
875
+ sx: {
876
+ position: "absolute",
877
+ top: 16,
878
+ right: 16,
879
+ bgcolor: "rgba(255, 255, 255, 0.9)",
880
+ color: "primary.main",
881
+ "&:hover": {
882
+ bgcolor: "white"
883
+ }
884
+ },
885
+ children: "Edit"
886
+ }
887
+ )
888
+ ]
889
+ }
890
+ );
891
+ }
892
+ var generateLink = function(link) {
893
+ return /* @__PURE__ */ jsxRuntime.jsx(
894
+ material.Box,
895
+ {
896
+ component: "a",
897
+ href: link.url,
898
+ target: "_blank",
899
+ rel: "noopener noreferrer",
900
+ sx: {
901
+ px: 1.5,
902
+ py: 0.5,
903
+ color: "#fff",
904
+ bgcolor: "rgba(0,0,0,0.7)",
905
+ borderRadius: 2,
906
+ boxShadow: "0 8px 16px rgba(0,0,0,0.25), 0 2px 4px rgba(0,0,0,0.15)",
907
+ border: "1px solid rgba(255,255,255,0.25)",
908
+ backdropFilter: "blur(6px)",
909
+ fontWeight: 700,
910
+ letterSpacing: 0.2,
911
+ alignItems: "center",
912
+ justifyContent: "center",
913
+ textDecoration: "none",
914
+ "&:hover": {
915
+ bgcolor: "rgba(255,255,255,0.1)"
916
+ }
917
+ },
918
+ children: link.text
919
+ },
920
+ link.text
921
+ );
922
+ };
923
+ var BaseSearchResultCard = ({
924
+ result,
925
+ onClick,
926
+ children,
927
+ icon,
928
+ tags
929
+ }) => {
930
+ const handleClick = () => {
931
+ if (onClick) {
932
+ onClick(result.id);
933
+ }
934
+ };
935
+ return /* @__PURE__ */ jsxRuntime.jsx(
936
+ material.Card,
937
+ {
938
+ elevation: 6,
939
+ sx: {
940
+ width: "100%",
941
+ cursor: onClick ? "pointer" : "default",
942
+ boxShadow: "0px 8px 24px rgba(0, 0, 0, 0.15)",
943
+ transition: "box-shadow 0.3s ease-in-out",
944
+ "&:hover": {
945
+ boxShadow: "0px 12px 28px rgba(0, 0, 0, 0.2)"
946
+ },
947
+ marginBottom: 2
948
+ },
949
+ onClick: handleClick,
950
+ children: /* @__PURE__ */ jsxRuntime.jsxs(material.CardContent, { sx: { display: "flex", alignItems: "flex-start" }, children: [
951
+ icon && /* @__PURE__ */ jsxRuntime.jsx(material.Box, { sx: { mr: 2, display: "flex", alignItems: "center", pt: 0.5 }, children: icon }),
952
+ /* @__PURE__ */ jsxRuntime.jsxs(material.Box, { sx: { flex: 1 }, children: [
953
+ /* @__PURE__ */ jsxRuntime.jsx(material.Typography, { variant: "h6", sx: { mb: 1 }, children: result.title }),
954
+ children,
955
+ /* @__PURE__ */ jsxRuntime.jsx(material.Typography, { variant: "body1", children: result.description }),
956
+ result.tags && result.tags.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(material.Box, { sx: { mt: 1 }, children: /* @__PURE__ */ jsxRuntime.jsx(material.Box, { sx: {
957
+ display: "block",
958
+ whiteSpace: "nowrap",
959
+ overflow: "hidden",
960
+ textOverflow: "clip",
961
+ pl: 0.5
962
+ // Add some padding to prevent clipping of the leftmost tag
963
+ }, children: (() => {
964
+ const MAX_VISIBLE = 5;
965
+ const tagObjs = result.tags.map((tagId) => tags.find((t) => t.id === tagId)).filter((t) => Boolean(t));
966
+ const visible = tagObjs.slice(0, MAX_VISIBLE);
967
+ const hiddenCount = Math.max(tagObjs.length - visible.length, 0);
968
+ return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
969
+ visible.map((tag) => generateTagsDisplay(tag)),
970
+ hiddenCount > 0 && /* @__PURE__ */ jsxRuntime.jsxs(
971
+ "span",
972
+ {
973
+ className: "inline-block text-sm px-3 py-1 rounded-full outline-black outline-2 font-outlined",
974
+ style: {
975
+ marginTop: "6px",
976
+ marginRight: "6px",
977
+ marginBottom: "6px",
978
+ background: "#9e9e9e",
979
+ color: "white",
980
+ textShadow: "black 0.2em 0.2em 0.4em"
981
+ },
982
+ children: [
983
+ "+",
984
+ hiddenCount,
985
+ " more"
986
+ ]
987
+ }
988
+ )
989
+ ] });
990
+ })() }) })
991
+ ] })
992
+ ] })
993
+ }
994
+ );
995
+ };
996
+ var BaseSearchResultCard_default = BaseSearchResultCard;
997
+ var PlayerResultCard = ({
998
+ result,
999
+ onClick,
1000
+ tags
1001
+ }) => {
1002
+ const firstLetter = result.title.charAt(0).toUpperCase();
1003
+ const getAvatarColor = (name) => {
1004
+ const colors = [
1005
+ "#F44336",
1006
+ "#E91E63",
1007
+ "#9C27B0",
1008
+ "#673AB7",
1009
+ "#3F51B5",
1010
+ "#2196F3",
1011
+ "#03A9F4",
1012
+ "#00BCD4",
1013
+ "#009688",
1014
+ "#4CAF50",
1015
+ "#8BC34A",
1016
+ "#CDDC39",
1017
+ "#FFEB3B",
1018
+ "#FFC107",
1019
+ "#FF9800",
1020
+ "#FF5722"
1021
+ ];
1022
+ let hash = 0;
1023
+ for (let i = 0; i < name.length; i++) {
1024
+ hash = name.charCodeAt(i) + ((hash << 5) - hash);
1025
+ }
1026
+ return colors[Math.abs(hash) % colors.length];
1027
+ };
1028
+ const avatarColor = getAvatarColor(result.title);
1029
+ const playerIcon = /* @__PURE__ */ jsxRuntime.jsx(
1030
+ Avatar__default.default,
1031
+ {
1032
+ src: result.imageUrl,
1033
+ alt: result.title,
1034
+ sx: {
1035
+ width: 40,
1036
+ height: 40,
1037
+ bgcolor: !result.imageUrl ? avatarColor : void 0
1038
+ },
1039
+ children: !result.imageUrl && firstLetter
1040
+ }
1041
+ );
1042
+ return /* @__PURE__ */ jsxRuntime.jsx(BaseSearchResultCard_default, { result, onClick, icon: playerIcon, tags });
1043
+ };
1044
+ var PlayerResultCard_default = PlayerResultCard;
1045
+ var TableResultCard = ({ result, tags, onClick }) => {
1046
+ const capacity = result.capacity || 1;
1047
+ const numPlayers = result.numPlayers || 0;
1048
+ const occupancy = numPlayers / capacity * 100;
1049
+ 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: [
1050
+ /* @__PURE__ */ jsxRuntime.jsxs(material.Box, { sx: { display: "flex", justifyContent: "space-between", alignItems: "center", mb: 0.5 }, children: [
1051
+ /* @__PURE__ */ jsxRuntime.jsxs(material.Typography, { variant: "body2", color: "text.secondary", children: [
1052
+ "Players: ",
1053
+ numPlayers,
1054
+ " / ",
1055
+ capacity
1056
+ ] }),
1057
+ 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" })
1058
+ ] }),
1059
+ /* @__PURE__ */ jsxRuntime.jsx(material.LinearProgress, { variant: "determinate", value: occupancy, sx: { height: 8, borderRadius: 4 } })
1060
+ ] }) });
1061
+ };
1062
+ var TableResultCard_default = TableResultCard;
1063
+ var EventResultCard = ({
1064
+ result,
1065
+ onClick,
1066
+ tags
1067
+ }) => {
1068
+ const formatDate = (dateString) => {
1069
+ const options = {
1070
+ weekday: "long",
1071
+ year: "numeric",
1072
+ month: "long",
1073
+ day: "numeric"
1074
+ };
1075
+ try {
1076
+ const date = new Date(dateString);
1077
+ return date.toLocaleDateString("en-US", options);
1078
+ } catch {
1079
+ return dateString;
1080
+ }
1081
+ };
1082
+ const formattedDate = result.date ? formatDate(result.date) : "Date TBD";
1083
+ const location = result.location || "Location TBD";
1084
+ 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: [
1085
+ /* @__PURE__ */ jsxRuntime.jsxs(material.Box, { sx: { display: "flex", alignItems: "center", mb: 0.5 }, children: [
1086
+ /* @__PURE__ */ jsxRuntime.jsx(CalendarTodayIcon__default.default, { sx: { mr: 1, fontSize: "small", color: "text.secondary" } }),
1087
+ /* @__PURE__ */ jsxRuntime.jsx(material.Typography, { variant: "body2", color: "text.secondary", children: formattedDate })
1088
+ ] }),
1089
+ /* @__PURE__ */ jsxRuntime.jsxs(material.Box, { sx: { display: "flex", alignItems: "center", mb: 1 }, children: [
1090
+ /* @__PURE__ */ jsxRuntime.jsx(LocationOnIcon__default.default, { sx: { mr: 1, fontSize: "small", color: "text.secondary" } }),
1091
+ /* @__PURE__ */ jsxRuntime.jsx(material.Typography, { variant: "body2", color: "text.secondary", children: location })
1092
+ ] })
1093
+ ] }) });
1094
+ };
1095
+ var EventResultCard_default = EventResultCard;
1096
+ var ResultsContainer = ({
1097
+ results,
1098
+ onResultClick,
1099
+ tags
1100
+ }) => {
1101
+ if (results.length === 0 || !results.map) {
1102
+ return /* @__PURE__ */ jsxRuntime.jsx(Box2__default.default, { sx: { textAlign: "center", py: 4 }, children: "No results found. Try adjusting your filters." });
1103
+ }
1104
+ const onPlayerClick = (id) => {
1105
+ onResultClick == null ? void 0 : onResultClick(id, "player");
1106
+ };
1107
+ const onTableClick = (id) => {
1108
+ onResultClick == null ? void 0 : onResultClick(id, "table");
1109
+ };
1110
+ const onEventClick = (id) => {
1111
+ onResultClick == null ? void 0 : onResultClick(id, "event");
1112
+ };
1113
+ return /* @__PURE__ */ jsxRuntime.jsx(Box2__default.default, { sx: { display: "flex", flexDirection: "column", gap: 2 }, children: results.map((result) => {
1114
+ switch (result.type) {
1115
+ case "player":
1116
+ return /* @__PURE__ */ jsxRuntime.jsx(
1117
+ PlayerResultCard_default,
1118
+ {
1119
+ result,
1120
+ onClick: onPlayerClick,
1121
+ tags
1122
+ },
1123
+ result.id
1124
+ );
1125
+ case "table":
1126
+ return /* @__PURE__ */ jsxRuntime.jsx(
1127
+ TableResultCard_default,
1128
+ {
1129
+ result,
1130
+ onClick: onTableClick,
1131
+ tags
1132
+ },
1133
+ result.id
1134
+ );
1135
+ case "event":
1136
+ return /* @__PURE__ */ jsxRuntime.jsx(
1137
+ EventResultCard_default,
1138
+ {
1139
+ result,
1140
+ onClick: onEventClick,
1141
+ tags
1142
+ },
1143
+ result.id
1144
+ );
1145
+ default:
1146
+ console.error(`Unknown result type: ${result.type}`);
1147
+ return null;
1148
+ }
1149
+ }) });
1150
+ };
1151
+ var ResultsContainer_default = ResultsContainer;
1152
+ var ScrollableResultsList = ({
1153
+ results,
1154
+ tags,
1155
+ maxHeight = 400,
1156
+ onResultClick,
1157
+ emptyText
1158
+ }) => {
1159
+ const hasResults = Array.isArray(results) && results.length > 0;
1160
+ 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." }) });
1161
+ };
1162
+ var ScrollableResultsList_default = ScrollableResultsList;
1163
+ var TablesScrollableList = ({
1164
+ results,
1165
+ tags,
1166
+ maxHeight,
1167
+ onResultClick,
1168
+ sortBy = "availability"
1169
+ }) => {
1170
+ const tables = (results || []).filter((r) => (r == null ? void 0 : r.type) === "table");
1171
+ const getAvailableSlots = (r) => {
1172
+ const capacity = typeof r.capacity === "number" ? r.capacity : 0;
1173
+ const playersCount = typeof r.numPlayers === "number" ? r.numPlayers : 0;
1174
+ return Math.max(capacity - playersCount, 0);
1175
+ };
1176
+ const sortedTables = sortBy === "availability" ? [...tables].sort((a, b) => getAvailableSlots(b) - getAvailableSlots(a)) : tables;
1177
+ const handleClick = (id) => onResultClick == null ? void 0 : onResultClick(id);
1178
+ return /* @__PURE__ */ jsxRuntime.jsx(
1179
+ ScrollableResultsList_default,
1180
+ {
1181
+ results: sortedTables,
1182
+ tags,
1183
+ maxHeight,
1184
+ onResultClick: (id, type) => {
1185
+ if (type === "table") handleClick(id);
1186
+ }
1187
+ }
1188
+ );
1189
+ };
1190
+ var TablesScrollableList_default = TablesScrollableList;
1191
+ var EventTablesCard = ({
1192
+ tables,
1193
+ tags,
1194
+ maxHeight = 450,
1195
+ onTableClick
1196
+ }) => {
1197
+ return /* @__PURE__ */ jsxRuntime.jsxs(Card4__default.default, { elevation: 6, sx: { width: "100%", boxShadow: "0px 8px 24px rgba(0, 0, 0, 0.15)" }, children: [
1198
+ /* @__PURE__ */ jsxRuntime.jsx(CardHeader__default.default, { title: "Tables" }),
1199
+ /* @__PURE__ */ jsxRuntime.jsx(Divider__default.default, {}),
1200
+ /* @__PURE__ */ jsxRuntime.jsx(CardContent4__default.default, { children: /* @__PURE__ */ jsxRuntime.jsx(TablesScrollableList_default, { results: tables, tags, maxHeight, onResultClick: onTableClick, sortBy: "availability" }) })
1201
+ ] });
1202
+ };
1203
+ var EventTablesCard_default = EventTablesCard;
1204
+ function EventPageLayout({
1205
+ mergedEvent,
1206
+ isOwner,
1207
+ updateEvent,
1208
+ updateImages,
1209
+ attendees,
1210
+ numGames,
1211
+ tables,
1212
+ allTags
1213
+ }) {
1214
+ return /* @__PURE__ */ jsxRuntime.jsx(Grid5__default.default, { container: true, flexDirection: "column", children: /* @__PURE__ */ jsxRuntime.jsxs(EventEditProvider, { initialEvent: mergedEvent, value: { isOwner, updateEvent, updateImages }, children: [
1215
+ /* @__PURE__ */ jsxRuntime.jsx(Grid5__default.default, { children: /* @__PURE__ */ jsxRuntime.jsx(
1216
+ EventBanner,
1217
+ {
1218
+ attendees,
1219
+ numGames
1220
+ }
1221
+ ) }),
1222
+ /* @__PURE__ */ jsxRuntime.jsxs(Grid5__default.default, { container: true, flexDirection: "row", spacing: 3, size: { xs: 12, md: 12 }, children: [
1223
+ /* @__PURE__ */ jsxRuntime.jsx(Grid5__default.default, { size: { xs: 12, md: 4 }, spacing: 3, padding: 3, children: /* @__PURE__ */ jsxRuntime.jsx(
1224
+ EventBasicInfo,
1225
+ {
1226
+ locationId: mergedEvent.location || "0"
1227
+ }
1228
+ ) }),
1229
+ /* @__PURE__ */ jsxRuntime.jsx(Grid5__default.default, { size: { xs: 12, md: 8 }, spacing: 3, padding: 3, children: /* @__PURE__ */ jsxRuntime.jsx(EventTablesCard_default, { tables, tags: allTags }) })
1230
+ ] }),
1231
+ /* @__PURE__ */ jsxRuntime.jsx(Grid5__default.default, {})
1232
+ ] }) });
1233
+ }
1234
+
1235
+ exports.CANDIDATE_TIMEZONES = CANDIDATE_TIMEZONES;
1236
+ exports.EventBanner = EventBanner;
1237
+ exports.EventBannerEdit = EventBannerEdit;
1238
+ exports.EventBasicInfo = EventBasicInfo;
1239
+ exports.EventBasicInfoEdit = EventBasicInfoEdit;
1240
+ exports.EventEditProvider = EventEditProvider;
1241
+ exports.EventPageLayout = EventPageLayout;
1242
+ exports.EventTablesCard = EventTablesCard_default;
1243
+ exports.useEventEdit = useEventEdit;
1244
+ //# sourceMappingURL=index.cjs.map
1245
+ //# sourceMappingURL=index.cjs.map