@mbpockets/shared-ui 0.2.0 → 0.2.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (205) hide show
  1. package/dist/EventPage/editMode/index.cjs.map +1 -1
  2. package/dist/EventPage/editMode/index.d.cts +1 -1
  3. package/dist/EventPage/editMode/index.d.ts +1 -1
  4. package/dist/EventPage/editMode/index.mjs.map +1 -1
  5. package/dist/EventPage/editMode.cjs.map +1 -1
  6. package/dist/EventPage/editMode.d.cts +1 -1
  7. package/dist/EventPage/editMode.d.ts +1 -1
  8. package/dist/EventPage/editMode.mjs.map +1 -1
  9. package/dist/EventPage/index.cjs +202 -96
  10. package/dist/EventPage/index.cjs.map +1 -1
  11. package/dist/EventPage/index.d.cts +1 -1
  12. package/dist/EventPage/index.d.ts +1 -1
  13. package/dist/EventPage/index.mjs +202 -96
  14. package/dist/EventPage/index.mjs.map +1 -1
  15. package/dist/EventPage.cjs +202 -96
  16. package/dist/EventPage.cjs.map +1 -1
  17. package/dist/EventPage.d.cts +6 -4
  18. package/dist/EventPage.d.ts +6 -4
  19. package/dist/EventPage.mjs +202 -96
  20. package/dist/EventPage.mjs.map +1 -1
  21. package/dist/PlayerPage/index.cjs +12 -8
  22. package/dist/PlayerPage/index.cjs.map +1 -1
  23. package/dist/PlayerPage/index.mjs +12 -8
  24. package/dist/PlayerPage/index.mjs.map +1 -1
  25. package/dist/PlayerPage.cjs +12 -8
  26. package/dist/PlayerPage.cjs.map +1 -1
  27. package/dist/PlayerPage.mjs +12 -8
  28. package/dist/PlayerPage.mjs.map +1 -1
  29. package/dist/ProfilePage/index.cjs +12 -8
  30. package/dist/ProfilePage/index.cjs.map +1 -1
  31. package/dist/ProfilePage/index.mjs +12 -8
  32. package/dist/ProfilePage/index.mjs.map +1 -1
  33. package/dist/ProfilePage.cjs +12 -8
  34. package/dist/ProfilePage.cjs.map +1 -1
  35. package/dist/ProfilePage.mjs +12 -8
  36. package/dist/ProfilePage.mjs.map +1 -1
  37. package/dist/SearchPage/Filters/index.cjs +38 -18
  38. package/dist/SearchPage/Filters/index.cjs.map +1 -1
  39. package/dist/SearchPage/Filters/index.d.cts +2 -1
  40. package/dist/SearchPage/Filters/index.d.ts +2 -1
  41. package/dist/SearchPage/Filters/index.mjs +34 -17
  42. package/dist/SearchPage/Filters/index.mjs.map +1 -1
  43. package/dist/SearchPage/Filters.cjs +38 -18
  44. package/dist/SearchPage/Filters.cjs.map +1 -1
  45. package/dist/SearchPage/Filters.d.cts +13 -1
  46. package/dist/SearchPage/Filters.d.ts +13 -1
  47. package/dist/SearchPage/Filters.mjs +34 -17
  48. package/dist/SearchPage/Filters.mjs.map +1 -1
  49. package/dist/SearchPage/Results/index.cjs +137 -73
  50. package/dist/SearchPage/Results/index.cjs.map +1 -1
  51. package/dist/SearchPage/Results/index.mjs +137 -73
  52. package/dist/SearchPage/Results/index.mjs.map +1 -1
  53. package/dist/SearchPage/Results.cjs +137 -73
  54. package/dist/SearchPage/Results.cjs.map +1 -1
  55. package/dist/SearchPage/Results.d.cts +14 -3
  56. package/dist/SearchPage/Results.d.ts +14 -3
  57. package/dist/SearchPage/Results.mjs +137 -73
  58. package/dist/SearchPage/Results.mjs.map +1 -1
  59. package/dist/SearchPage/index.cjs +265 -130
  60. package/dist/SearchPage/index.cjs.map +1 -1
  61. package/dist/SearchPage/index.d.cts +2 -2
  62. package/dist/SearchPage/index.d.ts +2 -2
  63. package/dist/SearchPage/index.mjs +261 -129
  64. package/dist/SearchPage/index.mjs.map +1 -1
  65. package/dist/SearchPage.cjs +265 -130
  66. package/dist/SearchPage.cjs.map +1 -1
  67. package/dist/SearchPage.d.cts +25 -3
  68. package/dist/SearchPage.d.ts +25 -3
  69. package/dist/SearchPage.mjs +261 -129
  70. package/dist/SearchPage.mjs.map +1 -1
  71. package/dist/TablePage/EditComponents/index.cjs +296 -0
  72. package/dist/TablePage/EditComponents/index.cjs.map +1 -0
  73. package/dist/TablePage/EditComponents/index.d.cts +3 -0
  74. package/dist/TablePage/EditComponents/index.d.ts +3 -0
  75. package/dist/TablePage/EditComponents/index.mjs +286 -0
  76. package/dist/TablePage/EditComponents/index.mjs.map +1 -0
  77. package/dist/TablePage/EditComponents.cjs +296 -0
  78. package/dist/TablePage/EditComponents.cjs.map +1 -0
  79. package/dist/TablePage/EditComponents.d.cts +21 -0
  80. package/dist/TablePage/EditComponents.d.ts +21 -0
  81. package/dist/TablePage/EditComponents.mjs +286 -0
  82. package/dist/TablePage/EditComponents.mjs.map +1 -0
  83. package/dist/TablePage/ModalProvider/index.cjs +59 -58
  84. package/dist/TablePage/ModalProvider/index.cjs.map +1 -1
  85. package/dist/TablePage/ModalProvider/index.d.cts +1 -1
  86. package/dist/TablePage/ModalProvider/index.d.ts +1 -1
  87. package/dist/TablePage/ModalProvider/index.mjs +50 -59
  88. package/dist/TablePage/ModalProvider/index.mjs.map +1 -1
  89. package/dist/TablePage/ModalProvider.cjs +59 -58
  90. package/dist/TablePage/ModalProvider.cjs.map +1 -1
  91. package/dist/TablePage/ModalProvider.d.cts +7 -2
  92. package/dist/TablePage/ModalProvider.d.ts +7 -2
  93. package/dist/TablePage/ModalProvider.mjs +50 -59
  94. package/dist/TablePage/ModalProvider.mjs.map +1 -1
  95. package/dist/TablePage/index.cjs +555 -331
  96. package/dist/TablePage/index.cjs.map +1 -1
  97. package/dist/TablePage/index.d.cts +3 -2
  98. package/dist/TablePage/index.d.ts +3 -2
  99. package/dist/TablePage/index.mjs +539 -320
  100. package/dist/TablePage/index.mjs.map +1 -1
  101. package/dist/TablePage/players/index.cjs +24 -4
  102. package/dist/TablePage/players/index.cjs.map +1 -1
  103. package/dist/TablePage/players/index.mjs +24 -4
  104. package/dist/TablePage/players/index.mjs.map +1 -1
  105. package/dist/TablePage/players.cjs +24 -4
  106. package/dist/TablePage/players.cjs.map +1 -1
  107. package/dist/TablePage/players.mjs +24 -4
  108. package/dist/TablePage/players.mjs.map +1 -1
  109. package/dist/TablePage.cjs +555 -331
  110. package/dist/TablePage.cjs.map +1 -1
  111. package/dist/TablePage.d.cts +4 -1
  112. package/dist/TablePage.d.ts +4 -1
  113. package/dist/TablePage.mjs +539 -320
  114. package/dist/TablePage.mjs.map +1 -1
  115. package/dist/{index-D7WHhl3Q.d.ts → index-B23RQop0.d.ts} +12 -12
  116. package/dist/{index-DC0kK3aC.d.cts → index-Csj8S4A4.d.cts} +12 -12
  117. package/dist/index.cjs +972 -460
  118. package/dist/index.cjs.map +1 -1
  119. package/dist/index.d.cts +5 -4
  120. package/dist/index.d.ts +5 -4
  121. package/dist/index.mjs +953 -457
  122. package/dist/index.mjs.map +1 -1
  123. package/dist/mocks/{EventDB.cjs → EventDetails.cjs} +203 -3
  124. package/dist/mocks/EventDetails.cjs.map +1 -0
  125. package/dist/mocks/EventDetails.d.cts +6 -0
  126. package/dist/mocks/EventDetails.d.ts +6 -0
  127. package/dist/mocks/{EventDB.mjs → EventDetails.mjs} +203 -3
  128. package/dist/mocks/EventDetails.mjs.map +1 -0
  129. package/dist/mocks/Tables.cjs +1 -1
  130. package/dist/mocks/Tables.cjs.map +1 -1
  131. package/dist/mocks/Tables.mjs +1 -1
  132. package/dist/mocks/Tables.mjs.map +1 -1
  133. package/dist/mocks/Tags.cjs +200 -0
  134. package/dist/mocks/Tags.cjs.map +1 -1
  135. package/dist/mocks/Tags.mjs +200 -0
  136. package/dist/mocks/Tags.mjs.map +1 -1
  137. package/dist/mocks/index.cjs +202 -2
  138. package/dist/mocks/index.cjs.map +1 -1
  139. package/dist/mocks/index.d.cts +1 -1
  140. package/dist/mocks/index.d.ts +1 -1
  141. package/dist/mocks/index.mjs +202 -2
  142. package/dist/mocks/index.mjs.map +1 -1
  143. package/dist/mocks.cjs +202 -2
  144. package/dist/mocks.cjs.map +1 -1
  145. package/dist/mocks.d.cts +1 -1
  146. package/dist/mocks.d.ts +1 -1
  147. package/dist/mocks.mjs +202 -2
  148. package/dist/mocks.mjs.map +1 -1
  149. package/dist/shared/index.cjs +327 -64
  150. package/dist/shared/index.cjs.map +1 -1
  151. package/dist/shared/index.d.cts +1 -1
  152. package/dist/shared/index.d.ts +1 -1
  153. package/dist/shared/index.mjs +324 -64
  154. package/dist/shared/index.mjs.map +1 -1
  155. package/dist/shared.cjs +327 -64
  156. package/dist/shared.cjs.map +1 -1
  157. package/dist/shared.d.cts +25 -2
  158. package/dist/shared.d.ts +25 -2
  159. package/dist/shared.mjs +324 -64
  160. package/dist/shared.mjs.map +1 -1
  161. package/dist/types/event.d.cts +2 -3
  162. package/dist/types/event.d.ts +2 -3
  163. package/dist/types/index.d.cts +2 -2
  164. package/dist/types/index.d.ts +2 -2
  165. package/dist/types/search.d.cts +7 -1
  166. package/dist/types/search.d.ts +7 -1
  167. package/dist/types/tables.d.cts +1 -0
  168. package/dist/types/tables.d.ts +1 -0
  169. package/dist/types.d.cts +2 -2
  170. package/dist/types.d.ts +2 -2
  171. package/package.json +9 -2
  172. package/dist/TablePage/ModalProvider/index.css +0 -49
  173. package/dist/TablePage/ModalProvider/index.css.map +0 -1
  174. package/dist/TablePage/ModalProvider.css +0 -49
  175. package/dist/TablePage/ModalProvider.css.map +0 -1
  176. package/dist/TablePage/index.css +0 -49
  177. package/dist/TablePage/index.css.map +0 -1
  178. package/dist/TablePage.css +0 -49
  179. package/dist/TablePage.css.map +0 -1
  180. package/dist/index.css +0 -49
  181. package/dist/index.css.map +0 -1
  182. package/dist/mocks/EventDB.cjs.map +0 -1
  183. package/dist/mocks/EventDB.d.cts +0 -6
  184. package/dist/mocks/EventDB.d.ts +0 -6
  185. package/dist/mocks/EventDB.mjs.map +0 -1
  186. package/dist/shared/Modal/index.cjs +0 -64
  187. package/dist/shared/Modal/index.cjs.map +0 -1
  188. package/dist/shared/Modal/index.css +0 -49
  189. package/dist/shared/Modal/index.css.map +0 -1
  190. package/dist/shared/Modal/index.d.cts +0 -2
  191. package/dist/shared/Modal/index.d.ts +0 -2
  192. package/dist/shared/Modal/index.mjs +0 -62
  193. package/dist/shared/Modal/index.mjs.map +0 -1
  194. package/dist/shared/Modal.cjs +0 -64
  195. package/dist/shared/Modal.cjs.map +0 -1
  196. package/dist/shared/Modal.css +0 -49
  197. package/dist/shared/Modal.css.map +0 -1
  198. package/dist/shared/Modal.d.cts +0 -9
  199. package/dist/shared/Modal.d.ts +0 -9
  200. package/dist/shared/Modal.mjs +0 -62
  201. package/dist/shared/Modal.mjs.map +0 -1
  202. package/dist/shared/index.css +0 -49
  203. package/dist/shared/index.css.map +0 -1
  204. package/dist/shared.css +0 -49
  205. package/dist/shared.css.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/EventPage/editMode/EventEditContext.tsx","../src/components/shared/Chip.tsx","../src/components/shared/TagComponents.tsx","../src/components/EventPage/editMode/EventBannerEdit.tsx","../src/components/EventPage/EventBasicInfo.tsx","../src/components/EventPage/editMode/EventBasicInfoEdit.tsx","../src/components/EventPage/EventBanner.tsx","../src/components/TablePage/NextGameLabel.tsx","../src/components/SearchPage/Results/BaseSearchResultCard.tsx","../src/components/SearchPage/Results/PlayerResultCard.tsx","../src/components/SearchPage/Results/TableResultCard.tsx","../src/components/SearchPage/Results/EventResultCard.tsx","../src/components/SearchPage/ResultsContainer.tsx","../src/components/SearchPage/ScrollableResultsList.tsx","../src/components/SearchPage/TablesScrollableList.tsx","../src/components/EventPage/EventTablesCard.tsx","../src/components/EventPage/EventPageLayout.tsx","../src/components/PlayerPage/PlayerDetailsCard.tsx","../src/data/values.tsx","../src/components/PlayerPage/PlayerDisplayCard.tsx","../src/components/PlayerPage/PlayerTagsCard.tsx","../src/components/PlayerPage/PlayerPromptCard.tsx","../src/components/PlayerPage/PlayerTagsEdit.tsx","../src/components/PlayerPage/PlayerPageLayout.tsx","../src/components/SearchPage/Filters/ExpiredTablesFilter.tsx","../src/components/SearchPage/Filters/SortOptions.tsx","../src/components/SearchPage/Filters/TagsFilter.tsx","../src/components/SearchPage/Filters/TextSearchCard.tsx","../src/components/SearchPage/Filters/TypeFilter.tsx","../src/components/SearchPage/FiltersContainer.tsx","../src/components/SearchPage/PlayersScrollableList.tsx","../src/components/SearchPage/Results/SearchResultCard.tsx","../src/components/SearchPage/SearchPageLayout.tsx","../src/components/TablePage/GameTableProvider/GameTableContext.tsx","../src/components/TablePage/ModalProvider/ModalContext.ts","../src/components/shared/Modal/index.tsx","../src/components/TablePage/ModalProvider/ModalProvider.tsx","../src/components/TablePage/players/PlayerHighlightsCard.tsx","../src/components/TablePage/TableActionsBar.tsx","../src/components/shared/AutoResizingTextarea.tsx","../src/components/shared/NextGameCountdown.tsx","../src/components/shared/TagEditor.tsx","../src/components/TablePage/TablePageLayout.tsx"],"names":["createContext","useState","useEffect","useContext","jsx","Fragment","jsxs","Box","Grid","TextField","Tooltip","IconButton","ColorizeIcon","Button","EditIcon","DeleteIcon","AddIcon","CircularProgress","Dialog","DialogTitle","DialogContent","DialogActions","Card","CardContent","Typography","CancelIcon","CheckCircleIcon","FormControl","InputLabel","Select","MenuItem","Avatar","TableRestaurantIcon","Chip","SupervisorAccountIcon","PersonIcon","LinearProgress","EventIcon","CalendarTodayIcon","LocationOnIcon","Pagination","CardHeader","Divider","CardMedia","useMemo","Autocomplete","Popper","useTheme","useMediaQuery","NoSsr","FormControlLabel","Checkbox","defaultValue","RadioGroup","Radio","React","CustomPopper","FormGroup","SearchIcon","useRef","_a","Image","ListIcon","SaveIcon"],"mappings":"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","file":"index.cjs","sourcesContent":["\"use client\"\r\nimport React, { createContext, useContext, ReactNode, useState, useEffect } from \"react\";\r\nimport { EventEditContextValue, EventDB } from \"@/types/event\";\r\n\r\ntype ExtendedEventEditContextValue = EventEditContextValue & {\r\n event: EventDB | null;\r\n};\r\n\r\n/**\r\n * Default Values for stability\r\n */\r\nconst defaultValue: ExtendedEventEditContextValue = {\r\n isOwner: false,\r\n updateEvent: async () => false,\r\n updateImages: () => {},\r\n event: null,\r\n}\r\n\r\n/**\r\n * Default call (safe fallback)\r\n * Components using this without a provider will behave as non-owner.\r\n */\r\nconst EventEditContext = createContext<ExtendedEventEditContextValue>(defaultValue);\r\n\r\n/**\r\n * Provider props\r\n */\r\ntype EventEditProviderProps = {\r\n value?: Partial<EventEditContextValue>;\r\n initialEvent: EventDB;\r\n children: ReactNode;\r\n};\r\n\r\n/**\r\n * Provider component\r\n */\r\nexport function EventEditProvider({\r\n value,\r\n initialEvent,\r\n children,\r\n }: EventEditProviderProps) {\r\n const [event, setEvent] = useState<EventDB>(initialEvent);\r\n\r\n // Update internal state if initialEvent changes (e.g. from parent fetch)\r\n useEffect(() => {\r\n setEvent(initialEvent);\r\n }, [initialEvent]);\r\n\r\n const handleUpdateEvent = async (patch: Partial<EventDB>) => {\r\n if (value?.updateEvent) {\r\n const result = value.updateEvent(patch);\r\n \r\n // Handle both Promise<boolean> and void/boolean return\r\n if (result instanceof Promise) {\r\n const success = await result;\r\n if (success) {\r\n setEvent(prev => ({ ...prev, ...patch }));\r\n }\r\n return success;\r\n } else {\r\n // If it's a boolean, use it. If void, assume true.\r\n const success = result === false ? false : true;\r\n if (success) {\r\n setEvent(prev => ({ ...prev, ...patch }));\r\n }\r\n return success;\r\n }\r\n }\r\n return false;\r\n };\r\n\r\n /**\r\n * automatically fill in default values if data is missing or incomplete\r\n */\r\n const mergedValue: ExtendedEventEditContextValue = {\r\n ...defaultValue,\r\n ...value,\r\n event,\r\n updateEvent: handleUpdateEvent,\r\n }\r\n\r\n return (\r\n <EventEditContext.Provider value={mergedValue}>\r\n {children}\r\n </EventEditContext.Provider>\r\n );\r\n}\r\n\r\n/**\r\n * Hook for consuming context\r\n */\r\nexport function useEventEdit(): ExtendedEventEditContextValue {\r\n const context = useContext(EventEditContext);\r\n\r\n // Optional guard (useful during development)\r\n if (!context) {\r\n throw new Error(\"useEventEdit must be used within an EventEditProvider\");\r\n }\r\n\r\n return context;\r\n}","import React from \"react\";\r\nimport {Tag} from \"@/types/tag\";\r\n\r\nexport default function Chip({ tag, removeCallback }: { tag: Tag, removeCallback?: (tagId: number) => void }) {\r\n const color = tag.color ?? \"#bfbcbb\";\r\n return (\r\n <>\r\n <span\r\n key={tag.id}\r\n className=\"inline-block text-sm px-3 py-1 rounded-full border-2 font-outlined text-white m-0.5 font-stretch-105% font-sans\"\r\n style={{\r\n borderColor: `color-mix(in srgb, ${color}, black 50%)`,\r\n background: `linear-gradient(160deg, color-mix(in srgb, ${color}, white 10%) 0%, color-mix(in srgb, ${color}, black 60%) 100%)`,\r\n textShadow: \"black 1.5px 1px 1.5px\",\r\n filter: `drop-shadow(2px 2px 1.5px color-mix(in srgb, ${color}, black 80%))`\r\n }}\r\n >\r\n {tag.label}\r\n {removeCallback && (\r\n <button\r\n type=\"button\"\r\n onClick={() => removeCallback(tag.id)}\r\n className=\"ml-2 text-white hover:text-red-700 focus:outline-none pl-0.5 pr-1 cursor-pointer hover:bg-white rounded-full\"\r\n style={{\r\n textShadow: \"black 1px 1px 1px\"\r\n }}\r\n >\r\n X\r\n </button>\r\n )}\r\n </span>\r\n </>\r\n )\r\n\r\n}","\"use client\";\r\n\r\nimport React from \"react\";\r\nimport type { Tag } from \"@/types/tag\";\r\nimport Chip from \"@/components/shared/Chip\";\r\n\r\nexport function generateTagsDisplay(tag: Tag) {\r\n return (\r\n <Chip tag={tag} key={tag.id} />\r\n )\r\n}\r\n\r\nexport function renderTagsFromIds(ids: number[] | undefined, legalTags: Tag[]) {\r\n if (!ids || !legalTags || legalTags.length === 0) { return ( <></>) }\r\n const validTags = ids\r\n .map((id) => legalTags.find((tag) => tag.id === id))\r\n .filter((tag): tag is Tag => Boolean(tag));\r\n\r\n return validTags.map((tag) => generateTagsDisplay(tag));\r\n}\r\n","\"use client\"\r\nimport React, { useState } from \"react\";\r\nimport { useEventEdit } from \"./EventEditContext\";\r\nimport type { EventBannerEditPayload } from \"../EventBanner\";\r\nimport { \r\n Box, \r\n Button, \r\n Grid, \r\n TextField, \r\n IconButton, \r\n Tooltip, \r\n Dialog, \r\n DialogTitle, \r\n DialogContent, \r\n DialogActions,\r\n CircularProgress \r\n} from \"@mui/material\";\r\nimport DeleteIcon from \"@mui/icons-material/Delete\";\r\nimport EditIcon from \"@mui/icons-material/Edit\";\r\nimport AddIcon from \"@mui/icons-material/Add\";\r\nimport ColorizeIcon from \"@mui/icons-material/Colorize\";\r\nimport { generateTagsDisplay } from \"@/components/shared/TagComponents\";\r\n\r\ntype EventBannerEditProps = {\r\n initialValue: EventBannerEditPayload;\r\n onCancel: () => void;\r\n onSave: (payload: Partial<EventBannerEditPayload>) => Promise<void> | void;\r\n};\r\n\r\ntype LinkEditState = {\r\n index: number;\r\n text: string;\r\n url: string;\r\n} | null;\r\n\r\nexport default function EventBannerEdit({\r\n initialValue,\r\n onCancel,\r\n onSave,\r\n }: EventBannerEditProps) {\r\n const { updateImages } = useEventEdit();\r\n const [title, setTitle] = useState(initialValue.title);\r\n const [bannerColor, setBannerColor] = useState(initialValue.bannerColor || \"\");\r\n const [desktopBanner, setDesktopBanner] = useState(initialValue.bannerUrl.desktop);\r\n const [mobileBanner, setMobileBanner] = useState(initialValue.bannerUrl.mobile || \"\");\r\n const [links, setLinks] = useState(initialValue.links);\r\n const [linkToEdit, setLinkToEdit] = useState<LinkEditState>(null);\r\n const [isSaving, setIsSaving] = useState(false);\r\n\r\n const backgroundColor = bannerColor || \"linear-gradient(135deg, rgba(25,118,210,0.8), rgba(25,118,210,1))\";\r\n\r\n const handleSave = async () => {\r\n setIsSaving(true);\r\n try {\r\n const patch: Partial<EventBannerEditPayload> = {};\r\n\r\n if (title !== initialValue.title) {\r\n patch.title = title;\r\n }\r\n\r\n const currentBannerColor = bannerColor || undefined;\r\n const initialBannerColor = initialValue.bannerColor || undefined;\r\n if (currentBannerColor !== initialBannerColor) {\r\n patch.bannerColor = currentBannerColor;\r\n }\r\n\r\n const currentMobile = mobileBanner || undefined;\r\n const initialMobile = initialValue.bannerUrl.mobile || undefined;\r\n if (desktopBanner !== initialValue.bannerUrl.desktop || currentMobile !== initialMobile) {\r\n patch.bannerUrl = {\r\n desktop: desktopBanner,\r\n mobile: currentMobile,\r\n };\r\n }\r\n\r\n // Deep comparison for links\r\n if (JSON.stringify(links) !== JSON.stringify(initialValue.links)) {\r\n patch.links = links;\r\n }\r\n\r\n if (Object.keys(patch).length > 0) {\r\n await onSave(patch);\r\n } else {\r\n onCancel(); // Nothing changed\r\n }\r\n } catch (error) {\r\n console.error(\"Failed to save banner changes\", error);\r\n } finally {\r\n setIsSaving(false);\r\n }\r\n };\r\n\r\n const removeLink = (index: number) => {\r\n setLinks(links.filter((_, i) => i !== index));\r\n };\r\n\r\n const openEditLink = (index: number) => {\r\n setLinkToEdit({\r\n index,\r\n text: links[index].text,\r\n url: links[index].url\r\n });\r\n };\r\n\r\n const saveEditedLink = () => {\r\n if (linkToEdit) {\r\n const newLinks = [...links];\r\n if (linkToEdit.index === -1) {\r\n newLinks.push({ text: linkToEdit.text, url: linkToEdit.url });\r\n } else {\r\n newLinks[linkToEdit.index] = { text: linkToEdit.text, url: linkToEdit.url };\r\n }\r\n setLinks(newLinks);\r\n setLinkToEdit(null);\r\n }\r\n };\r\n\r\n const handleEyeDropper = async () => {\r\n if (!(window as any).EyeDropper) {\r\n alert(\"EyeDropper API is not supported in this browser\");\r\n return;\r\n }\r\n const eyeDropper = new (window as any).EyeDropper();\r\n try {\r\n const result = await eyeDropper.open();\r\n setBannerColor(result.sRGBHex);\r\n } catch (e) {\r\n console.log(\"EyeDropper cancelled or failed\", e);\r\n }\r\n };\r\n\r\n return (\r\n <Box sx={{ position: 'relative', width: '100%' }}>\r\n <Grid\r\n sx={{\r\n background: backgroundColor,\r\n paddingTop: \"8px\",\r\n position: 'relative',\r\n border: '2px dashed rgba(255,255,255,0.5)',\r\n borderRadius: 1\r\n }}\r\n >\r\n {/* SETTINGS OVERLAY */}\r\n <Box sx={{ \r\n position: 'absolute', \r\n top: 8, \r\n left: 8, \r\n zIndex: 10, \r\n display: 'flex', \r\n flexDirection: 'column', \r\n gap: 1,\r\n bgcolor: 'rgba(0,0,0,0.5)',\r\n p: 1,\r\n borderRadius: 1,\r\n width: '300px'\r\n }}>\r\n <TextField\r\n label=\"Title\"\r\n variant=\"outlined\"\r\n size=\"small\"\r\n value={title}\r\n onChange={(e) => setTitle(e.target.value)}\r\n sx={{ input: { color: 'white' }, label: { color: 'rgba(255,255,255,0.7)' }, '& .MuiOutlinedInput-root': { '& fieldset': { borderColor: 'rgba(255,255,255,0.3)' } } }}\r\n />\r\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>\r\n <TextField\r\n label=\"Banner Color\"\r\n variant=\"outlined\"\r\n size=\"small\"\r\n value={bannerColor}\r\n onChange={(e) => setBannerColor(e.target.value)}\r\n placeholder=\"#HEX or linear-gradient(...)\"\r\n sx={{ flex: 1, input: { color: 'white' }, label: { color: 'rgba(255,255,255,0.7)' }, '& .MuiOutlinedInput-root': { '& fieldset': { borderColor: 'rgba(255,255,255,0.3)' } } }}\r\n />\r\n <Tooltip title=\"Eye Dropper\">\r\n <IconButton \r\n size=\"small\" \r\n onClick={handleEyeDropper}\r\n sx={{ color: 'white', bgcolor: 'rgba(255,255,255,0.1)', '&:hover': { bgcolor: 'rgba(255,255,255,0.2)' } }}\r\n >\r\n <ColorizeIcon fontSize=\"small\" />\r\n </IconButton>\r\n </Tooltip>\r\n <input\r\n type=\"color\"\r\n value={bannerColor.startsWith('#') ? bannerColor : '#1976d2'}\r\n onChange={(e) => setBannerColor(e.target.value)}\r\n style={{ width: '40px', height: '40px', padding: 0, border: 'none', background: 'transparent', cursor: 'pointer' }}\r\n />\r\n </Box>\r\n <Box sx={{ display: 'flex', gap: 1 }}>\r\n <Button \r\n variant=\"contained\" \r\n size=\"small\" \r\n fullWidth \r\n onClick={updateImages}\r\n >\r\n Update Images\r\n </Button>\r\n </Box>\r\n </Box>\r\n\r\n {/* VISUAL PREVIEW */}\r\n <Box\r\n sx={{\r\n width: '100%',\r\n height: 'auto',\r\n maxHeight: '250px',\r\n overflow: 'hidden',\r\n display: 'flex',\r\n justifyContent: 'center',\r\n opacity: 0.8\r\n }}\r\n >\r\n <Box\r\n component=\"img\"\r\n src={desktopBanner}\r\n alt={title}\r\n sx={{\r\n width: '100%',\r\n height: 'auto',\r\n objectFit: 'contain',\r\n }}\r\n />\r\n </Box>\r\n\r\n <Grid\r\n display=\"flex\"\r\n justifyContent=\"center\"\r\n alignItems=\"center\"\r\n paddingTop=\"3px\"\r\n paddingBottom=\"3px\"\r\n sx={{ gap: 1.5, flexWrap: 'wrap' }}\r\n >\r\n {/* Placeholder for Stats (not editable here as per instructions) */}\r\n <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)\" }}>\r\n Stats Placeholder\r\n </Box>\r\n\r\n {generateTagsDisplay(initialValue.eventTag)}\r\n\r\n {links.map((link, index) => (\r\n <Box\r\n key={index}\r\n sx={{\r\n position: 'relative',\r\n display: 'flex',\r\n alignItems: 'center',\r\n px: 1.5,\r\n py: 0.5,\r\n color: \"#fff\",\r\n bgcolor: \"rgba(0,0,0,0.7)\",\r\n borderRadius: 2,\r\n boxShadow: \"0 8px 16px rgba(0,0,0,0.25), 0 2px 4px rgba(0,0,0,0.15)\",\r\n border: \"1px solid rgba(255,255,255,0.25)\",\r\n backdropFilter: \"blur(6px)\",\r\n fontWeight: 700,\r\n letterSpacing: 0.2,\r\n }}\r\n >\r\n {link.text}\r\n <Box sx={{ ml: 1, display: 'flex' }}>\r\n <Tooltip title=\"Edit Link\">\r\n <IconButton size=\"small\" onClick={() => openEditLink(index)} sx={{ color: 'white', p: 0.2 }}>\r\n <EditIcon fontSize=\"inherit\" />\r\n </IconButton>\r\n </Tooltip>\r\n <Tooltip title=\"Remove Link\">\r\n <IconButton size=\"small\" onClick={() => removeLink(index)} sx={{ color: 'error.light', p: 0.2 }}>\r\n <DeleteIcon fontSize=\"inherit\" />\r\n </IconButton>\r\n </Tooltip>\r\n </Box>\r\n </Box>\r\n ))}\r\n\r\n <Button\r\n variant=\"outlined\"\r\n size=\"small\"\r\n startIcon={<AddIcon />}\r\n onClick={() => setLinkToEdit({ index: -1, text: \"\", url: \"\" })}\r\n sx={{\r\n color: 'white',\r\n borderColor: 'rgba(255,255,255,0.5)',\r\n borderRadius: 2,\r\n '&:hover': { borderColor: 'white', bgcolor: 'rgba(255,255,255,0.1)' }\r\n }}\r\n >\r\n Add Link\r\n </Button>\r\n </Grid>\r\n </Grid>\r\n\r\n {/* ACTION BUTTONS */}\r\n <Box sx={{ display: 'flex', justifyContent: 'flex-end', gap: 2, mt: 2 }}>\r\n <Button onClick={onCancel} color=\"inherit\" disabled={isSaving}>Cancel</Button>\r\n <Button \r\n onClick={handleSave} \r\n variant=\"contained\" \r\n color=\"primary\" \r\n disabled={isSaving}\r\n startIcon={isSaving ? <CircularProgress size={20} color=\"inherit\" /> : null}\r\n >\r\n {isSaving ? \"Saving...\" : \"Save Changes\"}\r\n </Button>\r\n </Box>\r\n\r\n {/* LINK EDIT DIALOG */}\r\n <Dialog open={linkToEdit !== null} onClose={() => setLinkToEdit(null)}>\r\n <DialogTitle>{linkToEdit?.index === -1 ? \"Add Link\" : \"Edit Link\"}</DialogTitle>\r\n <DialogContent>\r\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 2, pt: 1, width: '400px' }}>\r\n <TextField\r\n label=\"Link Text\"\r\n fullWidth\r\n value={linkToEdit?.text || \"\"}\r\n onChange={(e) => setLinkToEdit(prev => prev ? { ...prev, text: e.target.value } : null)}\r\n />\r\n <TextField\r\n label=\"Link URL\"\r\n fullWidth\r\n value={linkToEdit?.url || \"\"}\r\n onChange={(e) => setLinkToEdit(prev => prev ? { ...prev, url: e.target.value } : null)}\r\n />\r\n </Box>\r\n </DialogContent>\r\n <DialogActions>\r\n <Button onClick={() => setLinkToEdit(null)}>Cancel</Button>\r\n <Button onClick={saveEditedLink} variant=\"contained\">Confirm</Button>\r\n </DialogActions>\r\n </Dialog>\r\n </Box>\r\n );\r\n}","\"use client\"\r\nimport React, { useState } from \"react\";\r\nimport {Card, CardContent, Typography, Button} from \"@mui/material\";\r\nimport Box from \"@mui/material/Box\";\r\nimport Grid from \"@mui/material/Grid\";\r\nimport { useEventEdit } from \"./editMode/EventEditContext\";\r\nimport EventBasicInfoEdit from \"./editMode/EventBasicInfoEdit\";\r\n\r\nexport type EventBasicInfoProps = {\r\n locationId: string,\r\n description?: string,\r\n startingDate?: Date | string,\r\n endingDate?: Date | string,\r\n timeInfo?: string,\r\n timezone?: string\r\n}\r\n\r\nexport const CANDIDATE_TIMEZONES = [\r\n \"America/New_York\",\r\n \"America/Chicago\",\r\n \"America/Denver\",\r\n \"America/Los_Angeles\",\r\n \"America/Anchorage\",\r\n \"America/Adak\",\r\n \"Pacific/Honolulu\",\r\n \"UTC\"\r\n];\r\n\r\nexport default function EventBasicInfo(props: EventBasicInfoProps) {\r\n const { isOwner, updateEvent, event } = useEventEdit();\r\n const [isEditing, setIsEditing] = useState(false);\r\n\r\n // Fallback to context if props are not provided\r\n const description = props.description ?? event?.description ?? \"\";\r\n const startingDate = props.startingDate ?? event?.startingDate;\r\n const endingDate = props.endingDate ?? event?.endingDate;\r\n const timeInfo = props.timeInfo ?? event?.date ?? \"\";\r\n const timezone = props.timezone ?? event?.timezone ?? \"UTC\";\r\n\r\n if (isEditing) {\r\n return (\r\n <EventBasicInfoEdit\r\n initialValue={{\r\n description: description,\r\n startingDate: typeof startingDate === 'string' ? startingDate : startingDate?.toISOString(),\r\n endingDate: typeof endingDate === 'string' ? endingDate : endingDate?.toISOString(),\r\n date: timeInfo,\r\n timezone: timezone\r\n }}\r\n onCancel={() => setIsEditing(false)}\r\n onSave={async (payload) => {\r\n const success = await updateEvent(payload);\r\n if (success) {\r\n setIsEditing(false);\r\n }\r\n }}\r\n />\r\n );\r\n }\r\n\r\n return (\r\n <EventBasicInfoView\r\n {...props}\r\n description={description}\r\n startingDate={startingDate}\r\n endingDate={endingDate}\r\n timeInfo={timeInfo}\r\n timezone={timezone}\r\n isOwner={isOwner}\r\n onEdit={() => setIsEditing(true)}\r\n />\r\n );\r\n}\r\n\r\ntype EventBasicInfoViewProps = {\r\n locationId: string;\r\n description: string;\r\n startingDate?: Date | string;\r\n endingDate?: Date | string;\r\n timeInfo: string;\r\n timezone: string;\r\n isOwner: boolean;\r\n onEdit: () => void;\r\n};\r\n\r\nfunction EventBasicInfoView({description, locationId, startingDate, endingDate, timeInfo, timezone, isOwner, onEdit} : EventBasicInfoViewProps) {\r\n return (\r\n <Grid sx={{ position: 'relative' }}>\r\n <Card style={{\r\n boxShadow: '0px 4px 10px rgba(0, 0, 0, 0.1)',\r\n background: 'linear-gradient(135deg, rgba(225, 225, 225, 1), rgba(250, 250, 250, 1))',\r\n }}>\r\n <CardContent>\r\n {isOwner && (\r\n <Box sx={{ display: 'flex', justifyContent: 'flex-end' }}>\r\n <Button size=\"small\" onClick={onEdit} variant=\"outlined\">Edit</Button>\r\n </Box>\r\n )}\r\n {generateTimeInfo(timeInfo, timezone || \"UTC\", startingDate, endingDate)}\r\n <Typography variant={\"h5\"} paddingTop={2}>\r\n About:\r\n </Typography>\r\n <Typography sx={{whiteSpace: 'pre-wrap'}} paddingTop={1}>\r\n {description}\r\n </Typography>\r\n {getLocation(locationId)}\r\n </CardContent>\r\n </Card>\r\n </Grid>\r\n )\r\n}\r\n\r\n\r\nconst generateTimeInfo = function (timeInfo: string, timezone: string, startingDate?: Date | string, endingDate?: Date | string) {\r\n\r\n const formatDateTime = (dateInput: Date | string) => {\r\n const d = typeof dateInput === 'string' ? new Date(dateInput) : dateInput;\r\n if (!d || isNaN(d.getTime())) return \"\";\r\n\r\n try {\r\n return new Intl.DateTimeFormat('en-US', {\r\n month: 'short',\r\n day: 'numeric',\r\n year: 'numeric',\r\n hour: 'numeric',\r\n minute: '2-digit',\r\n hour12: true,\r\n timeZone: timezone,\r\n timeZoneName: 'shortGeneric'\r\n }).format(d).replace(',', ' @');\r\n } catch (e) {\r\n // Fallback for invalid timezones\r\n return d.toUTCString();\r\n }\r\n }\r\n\r\n let rangeText: string | null = null;\r\n if (startingDate && endingDate) {\r\n rangeText = `From ${formatDateTime(startingDate)}\\nUntil ${formatDateTime(endingDate)}`;\r\n } else if (startingDate) {\r\n rangeText = `starting ${formatDateTime(startingDate)}`;\r\n } else if (endingDate) {\r\n rangeText = `until ${formatDateTime(endingDate)}`;\r\n }\r\n\r\n return (\r\n <Box sx={{ mt: 2 }}>\r\n {rangeText && (\r\n <Typography variant={\"body1\"} fontSize={\"x-large\"} fontWeight={\"bold\"} sx={{whiteSpace:\"pre-wrap\"}}>\r\n {rangeText}\r\n </Typography>\r\n )}\r\n {timeInfo && (\r\n <Box sx={{ mt: 1 }}>\r\n <Typography variant={\"h5\"}>\r\n Hours of Operation:\r\n </Typography>\r\n <Typography variant={\"body1\"} sx={{whiteSpace:\"pre-wrap\"}}>\r\n {timeInfo}\r\n </Typography>\r\n </Box>\r\n )}\r\n </Box>\r\n )\r\n}\r\n\r\n\r\n/*\r\n DUMMY FUNCTIONS -- these relate heavily to sensitive data, so the functions below are simply placeholders\r\n */\r\n\r\nconst getLocation = function(locationId: string) {\r\n return (<Box sx={{\r\n width: '100%',\r\n p: 1.5,\r\n borderRadius: 2,\r\n boxShadow: '0px 4px 10px rgba(0, 0, 0, 0.1)',\r\n background: 'linear-gradient(135deg, rgba(180, 180,180, 1), rgba(225, 225, 225, 0.8))',\r\n mt: 2\r\n }}>\r\n Location Data goes here\r\n </Box>\r\n )\r\n}","\"use client\"\r\nimport React, { useState } from \"react\";\r\nimport { \r\n Box, \r\n Button, \r\n TextField, \r\n Grid, \r\n Card, \r\n CardContent, \r\n Typography, \r\n IconButton, \r\n Tooltip, \r\n Select, \r\n MenuItem, \r\n FormControl, \r\n InputLabel,\r\n CircularProgress \r\n} from \"@mui/material\";\r\nimport CancelIcon from \"@mui/icons-material/Cancel\";\r\nimport CheckCircleIcon from \"@mui/icons-material/CheckCircle\";\r\nimport { CANDIDATE_TIMEZONES } from \"../EventBasicInfo\";\r\n\r\nexport type EventBasicInfoEditPayload = {\r\n description: string;\r\n startingDate?: string;\r\n endingDate?: string;\r\n date: string; // timeInfo\r\n timezone: string;\r\n};\r\n\r\ntype EventBasicInfoEditProps = {\r\n initialValue: EventBasicInfoEditPayload;\r\n onCancel: () => void;\r\n onSave: (payload: Partial<EventBasicInfoEditPayload>) => Promise<void> | void;\r\n};\r\n\r\nexport default function EventBasicInfoEdit({\r\n initialValue,\r\n onCancel,\r\n onSave,\r\n }: EventBasicInfoEditProps) {\r\n\r\n // Helper to get YYYY-MM-DDThh:mm wall time for a specific timezone\r\n const toWallTimeISO = (dateInput: string | undefined, timeZone: string) => {\r\n if (!dateInput) return \"\";\r\n const d = new Date(dateInput);\r\n if (isNaN(d.getTime())) return \"\";\r\n\r\n const parts = new Intl.DateTimeFormat('en-US', {\r\n year: 'numeric', month: '2-digit', day: '2-digit',\r\n hour: '2-digit', minute: '2-digit', hour12: false,\r\n timeZone: timeZone\r\n }).formatToParts(d);\r\n \r\n const f = (type: string) => parts.find(p => p.type === type)?.value;\r\n // Some environments might return 24 for hour 0 if hour12 is false, but usually 00.\r\n // Also handle the order of parts.\r\n const year = f('year');\r\n const month = f('month');\r\n const day = f('day');\r\n let hour = f('hour');\r\n if (hour === '24') hour = '00';\r\n const minute = f('minute');\r\n\r\n return `${year}-${month}-${day}T${hour}:${minute}`;\r\n };\r\n\r\n // Helper to combine wall time + timezone into UTC ISO string\r\n const toUTCISOString = (wallTime: string, timeZone: string) => {\r\n if (!wallTime) return undefined;\r\n \r\n // We need to find the offset for this wall time in the target timezone.\r\n const d = new Date(wallTime + \":00Z\"); \r\n \r\n const parts = new Intl.DateTimeFormat('en-US', {\r\n timeZone: timeZone,\r\n timeZoneName: 'longOffset'\r\n }).formatToParts(d);\r\n \r\n const offsetPart = parts.find(p => p.type === 'timeZoneName')?.value || \"GMT\";\r\n const offset = offsetPart.replace('GMT', ''); \r\n \r\n const isoWithOffset = `${wallTime}:00${offset || \"+00:00\"}`;\r\n return new Date(isoWithOffset).toISOString();\r\n };\r\n\r\n const [description, setDescription] = useState(initialValue.description);\r\n const [timezone, setTimezone] = useState(initialValue.timezone);\r\n const [startingDate, setStartingDate] = useState(toWallTimeISO(initialValue.startingDate, initialValue.timezone));\r\n const [endingDate, setEndingDate] = useState(toWallTimeISO(initialValue.endingDate, initialValue.timezone));\r\n const [timeInfo, setTimeInfo] = useState(initialValue.date);\r\n const [isSaving, setIsSaving] = useState(false);\r\n\r\n const handleSave = async () => {\r\n setIsSaving(true);\r\n try {\r\n const patch: Partial<EventBasicInfoEditPayload> = {};\r\n\r\n if (description !== initialValue.description) patch.description = description;\r\n if (timeInfo !== initialValue.date) patch.date = timeInfo;\r\n if (timezone !== initialValue.timezone) patch.timezone = timezone;\r\n\r\n if (startingDate !== toWallTimeISO(initialValue.startingDate, timezone) || timezone !== initialValue.timezone) {\r\n patch.startingDate = toUTCISOString(startingDate, timezone);\r\n }\r\n\r\n if (endingDate !== toWallTimeISO(initialValue.endingDate, timezone) || timezone !== initialValue.timezone) {\r\n patch.endingDate = toUTCISOString(endingDate, timezone);\r\n }\r\n\r\n if (Object.keys(patch).length > 0) {\r\n await onSave(patch);\r\n } else {\r\n onCancel();\r\n }\r\n } catch (error) {\r\n console.error(\"Failed to save basic info changes\", error);\r\n } finally {\r\n setIsSaving(false);\r\n }\r\n };\r\n\r\n return (\r\n <Card sx={{\r\n boxShadow: '0px 4px 10px rgba(0, 0, 0, 0.1)',\r\n background: 'linear-gradient(135deg, rgba(225, 225, 225, 1), rgba(250, 250, 250, 1))',\r\n border: '2px dashed rgba(25,118,210,0.5)',\r\n width: '100%'\r\n }}>\r\n <CardContent sx={{ position: 'relative' }}>\r\n <Box sx={{ display: 'flex', justifyContent: 'flex-end', mb: 1, gap: 1 }}>\r\n <Tooltip title=\"Cancel\">\r\n <IconButton size=\"small\" onClick={onCancel} color=\"error\" disabled={isSaving}>\r\n <CancelIcon />\r\n </IconButton>\r\n </Tooltip>\r\n <Tooltip title=\"Apply Changes\">\r\n <IconButton size=\"small\" onClick={handleSave} color=\"primary\" disabled={isSaving}>\r\n {isSaving ? <CircularProgress size={24} /> : <CheckCircleIcon />}\r\n </IconButton>\r\n </Tooltip>\r\n </Box>\r\n\r\n <Box sx={{ mt: 2 }}>\r\n <Typography variant={\"body1\"} fontSize={\"x-large\"} fontWeight={\"bold\"} sx={{ mb: 1 }}>\r\n Event Dates & Times:\r\n </Typography>\r\n <Grid container spacing={2}>\r\n <Grid size={{ xs: 12, sm: 4 }}>\r\n <TextField\r\n fullWidth\r\n label=\"Starting Date\"\r\n type=\"datetime-local\"\r\n size=\"small\"\r\n value={startingDate}\r\n onChange={(e) => setStartingDate(e.target.value)}\r\n InputLabelProps={{ shrink: true }}\r\n />\r\n </Grid>\r\n <Grid size={{ xs: 12, sm: 4 }}>\r\n <TextField\r\n fullWidth\r\n label=\"Ending Date\"\r\n type=\"datetime-local\"\r\n size=\"small\"\r\n value={endingDate}\r\n onChange={(e) => setEndingDate(e.target.value)}\r\n InputLabelProps={{ shrink: true }}\r\n />\r\n </Grid>\r\n <Grid size={{ xs: 12, sm: 4 }}>\r\n <FormControl fullWidth size=\"small\">\r\n <InputLabel>Display Timezone</InputLabel>\r\n <Select\r\n label=\"Display Timezone\"\r\n value={timezone}\r\n onChange={(e) => setTimezone(e.target.value)}\r\n >\r\n {CANDIDATE_TIMEZONES.map(tz => (\r\n <MenuItem key={tz} value={tz}>{tz}</MenuItem>\r\n ))}\r\n </Select>\r\n </FormControl>\r\n </Grid>\r\n </Grid>\r\n\r\n <Box sx={{ mt: 2 }}>\r\n <Typography variant={\"h5\"}>\r\n Hours of Operation:\r\n </Typography>\r\n <TextField\r\n fullWidth\r\n multiline\r\n variant=\"standard\"\r\n placeholder=\"e.g. Mon-Fri 9am-5pm\"\r\n value={timeInfo}\r\n onChange={(e) => setTimeInfo(e.target.value)}\r\n sx={{ mt: 1 }}\r\n />\r\n </Box>\r\n </Box>\r\n\r\n <Typography variant={\"h5\"} paddingTop={2}>\r\n About:\r\n </Typography>\r\n <TextField\r\n fullWidth\r\n multiline\r\n variant=\"standard\"\r\n value={description}\r\n onChange={(e) => setDescription(e.target.value)}\r\n sx={{\r\n paddingTop: 1,\r\n '& .MuiInputBase-root': {\r\n lineHeight: 1.5,\r\n whiteSpace: 'pre-wrap'\r\n }\r\n }}\r\n />\r\n\r\n <Box sx={{\r\n mt: 2,\r\n width: '100%',\r\n p: 1.5,\r\n borderRadius: 2,\r\n boxShadow: '0px 4px 10px rgba(0, 0, 0, 0.1)',\r\n background: 'linear-gradient(135deg, rgba(180, 180,180, 1), rgba(225, 225, 225, 0.8))',\r\n color: 'rgba(0,0,0,0.5)',\r\n border: '1px dashed rgba(0,0,0,0.2)'\r\n }}>\r\n Location Data (Not Editable)\r\n </Box>\r\n </CardContent>\r\n </Card>\r\n );\r\n}\r\n","import { useState } from \"react\";\r\nimport { useEventEdit } from \"./editMode/EventEditContext\";\r\nimport type { EventDB } from \"../../types/event\";\r\nimport EventBannerEdit from \"./editMode/EventBannerEdit\";\r\nimport { generateTagsDisplay } from \"@/components/shared/TagComponents\";\r\nimport { Box, Button } from \"@mui/material\";\r\nimport Grid from \"@mui/material/Grid\";\r\n\r\nexport type EventBannerProps = {\r\n attendees: number;\r\n numGames: number;\r\n // These are now optional as they are taken from context if not provided\r\n bannerUrl?: EventDB[\"bannerUrl\"];\r\n links?: EventDB[\"links\"];\r\n title?: EventDB[\"title\"];\r\n eventTag?: EventDB[\"eventTag\"];\r\n bannerColor?: string;\r\n};\r\n\r\nexport type EventBannerEditPayload = {\r\n bannerUrl: EventDB[\"bannerUrl\"];\r\n bannerColor?: EventDB[\"bannerColor\"];\r\n links: EventDB[\"links\"];\r\n title: EventDB[\"title\"];\r\n eventTag: EventDB[\"eventTag\"];\r\n};\r\n\r\nexport default function EventBanner(props: EventBannerProps) {\r\n const { isOwner, updateEvent, event } = useEventEdit();\r\n const [isEditing, setIsEditing] = useState(false);\r\n\r\n if (!event && !props.bannerUrl) return null;\r\n\r\n // Use context values if available, otherwise fallback to props\r\n const bannerUrl = props.bannerUrl || event?.bannerUrl;\r\n const links = props.links || event?.links || [];\r\n const title = props.title || event?.title || \"\";\r\n const eventTag = props.eventTag || event?.eventTag;\r\n const bannerColor = props.bannerColor || event?.bannerColor;\r\n\r\n if (!bannerUrl || !eventTag) return null;\r\n\r\n if (isEditing) {\r\n return (\r\n <EventBannerEdit\r\n initialValue={{\r\n bannerUrl,\r\n bannerColor,\r\n links,\r\n title,\r\n eventTag,\r\n }}\r\n onCancel={() => setIsEditing(false)}\r\n onSave={async (payload) => {\r\n const success = await updateEvent(payload);\r\n if (success) {\r\n setIsEditing(false);\r\n }\r\n }}\r\n />\r\n );\r\n }\r\n\r\n return (\r\n <EventBannerView\r\n {...props}\r\n bannerUrl={bannerUrl}\r\n links={links}\r\n title={title}\r\n eventTag={eventTag}\r\n bannerColor={bannerColor}\r\n isOwner={isOwner}\r\n onEdit={() => setIsEditing(true)}\r\n />\r\n );\r\n}\r\n\r\ntype EventBannerViewProps = {\r\n bannerUrl: EventDB[\"bannerUrl\"];\r\n links: EventDB[\"links\"];\r\n bannerColor?: string;\r\n title: string;\r\n eventTag: EventDB[\"eventTag\"];\r\n attendees: number;\r\n numGames: number;\r\n isOwner: boolean;\r\n onEdit: () => void;\r\n};\r\n\r\nfunction EventBannerView({\r\n bannerUrl,\r\n links,\r\n bannerColor,\r\n title,\r\n eventTag,\r\n attendees,\r\n numGames,\r\n isOwner,\r\n onEdit,\r\n }: EventBannerViewProps) {\r\n const backgroundColor = bannerColor || \"linear-gradient(135deg, rgba(25,118,210,0.8), rgba(25,118,210,1))\";\r\n return (\r\n <Grid\r\n sx={{\r\n background: backgroundColor,\r\n paddingTop: \"8px\",\r\n position: 'relative'\r\n }}\r\n >\r\n <Grid>\r\n {/* BANNER */}\r\n <Box\r\n sx={{\r\n width: '100%',\r\n height: 'auto',\r\n maxHeight: '250px',\r\n overflow: 'hidden',\r\n display: 'flex',\r\n justifyContent: 'center'\r\n }}\r\n >\r\n <Box\r\n component=\"img\"\r\n src={bannerUrl.desktop}\r\n alt={title}\r\n sx={{\r\n width: '100%',\r\n height: 'auto',\r\n objectFit: 'contain',\r\n display: { xs: 'none', md: 'block' }\r\n }}\r\n />\r\n {bannerUrl.mobile && (\r\n <Box\r\n component=\"img\"\r\n src={bannerUrl.mobile}\r\n alt={title}\r\n sx={{\r\n width: '100%',\r\n height: 'auto',\r\n objectFit: 'contain',\r\n display: { xs: 'block', md: 'none' }\r\n }}\r\n />\r\n )}\r\n {!bannerUrl.mobile && (\r\n <Box\r\n component=\"img\"\r\n src={bannerUrl.desktop}\r\n alt={title}\r\n sx={{\r\n width: '100%',\r\n height: 'auto',\r\n objectFit: 'contain',\r\n display: { xs: 'block', md: 'none' }\r\n }}\r\n />\r\n )}\r\n </Box>\r\n\r\n <Grid\r\n display=\"flex\"\r\n justifyContent=\"center\"\r\n alignItems=\"center\"\r\n paddingTop=\"3px\"\r\n paddingBottom=\"3px\"\r\n sx={{ gap: 1.5, flexWrap: 'wrap' }}\r\n >\r\n <Box\r\n sx={{\r\n px: 1.5,\r\n py: 0.5,\r\n color: \"#fff\",\r\n bgcolor: \"rgba(0,0,0,0.7)\",\r\n borderRadius: 2,\r\n boxShadow: \"0 8px 16px rgba(0,0,0,0.25), 0 2px 4px rgba(0,0,0,0.15)\",\r\n border: \"1px solid rgba(255,255,255,0.25)\",\r\n backdropFilter: \"blur(6px)\",\r\n fontWeight: 700,\r\n letterSpacing: 0.2,\r\n alignItems: \"center\",\r\n justifyContent: \"center\"\r\n }}\r\n >\r\n {`${attendees} Players`}\r\n </Box>\r\n\r\n <Box\r\n sx={{\r\n px: 1.5,\r\n py: 0.5,\r\n color: \"#fff\",\r\n bgcolor: \"rgba(0,0,0,0.7)\",\r\n borderRadius: 2,\r\n boxShadow: \"0 8px 16px rgba(0,0,0,0.25), 0 2px 4px rgba(0,0,0,0.15)\",\r\n border: \"1px solid rgba(255,255,255,0.25)\",\r\n backdropFilter: \"blur(6px)\",\r\n fontWeight: 700,\r\n letterSpacing: 0.2,\r\n alignItems: \"center\",\r\n justifyContent: \"center\"\r\n }}\r\n >\r\n {`${numGames} tables`}\r\n </Box>\r\n\r\n {generateTagsDisplay(eventTag)}\r\n {links.map((link) => generateLink(link))}\r\n </Grid>\r\n </Grid>\r\n\r\n {isOwner && (\r\n <Button\r\n variant=\"contained\"\r\n onClick={onEdit}\r\n sx={{\r\n position: 'absolute',\r\n top: 16,\r\n right: 16,\r\n bgcolor: 'rgba(255, 255, 255, 0.9)',\r\n color: 'primary.main',\r\n '&:hover': {\r\n bgcolor: 'white',\r\n }\r\n }}\r\n >\r\n Edit\r\n </Button>\r\n )}\r\n </Grid>\r\n )\r\n}\r\n\r\nconst generateLink = function (link: { url: string, text: string }) {\r\n return (\r\n <Box\r\n component=\"a\"\r\n href={link.url}\r\n target=\"_blank\"\r\n rel=\"noopener noreferrer\"\r\n key={link.text}\r\n sx={{\r\n px: 1.5,\r\n py: 0.5,\r\n color: \"#fff\",\r\n bgcolor: \"rgba(0,0,0,0.7)\",\r\n borderRadius: 2,\r\n boxShadow: \"0 8px 16px rgba(0,0,0,0.25), 0 2px 4px rgba(0,0,0,0.15)\",\r\n border: \"1px solid rgba(255,255,255,0.25)\",\r\n backdropFilter: \"blur(6px)\",\r\n fontWeight: 700,\r\n letterSpacing: 0.2,\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n textDecoration: 'none',\r\n '&:hover': {\r\n bgcolor: \"rgba(255,255,255,0.1)\",\r\n }\r\n }}\r\n >\r\n {link.text}\r\n </Box>\r\n )\r\n}","import React from 'react';\r\nimport { Typography } from '@mui/material';\r\n\r\ninterface NextGameCountdownProps {\r\n nextGameTime: string | Date;\r\n}\r\n\r\nconst NextGameLabel: React.FC<NextGameCountdownProps> = ({ nextGameTime }) => {\r\n const date = typeof nextGameTime === 'string' ? new Date(nextGameTime) : nextGameTime;\r\n \r\n return (\r\n <Typography variant=\"caption\" sx={{ display: 'block', mb: 1, color: 'primary.main', fontWeight: 'bold' }}>\r\n Next Game: {date.toLocaleString()}\r\n </Typography>\r\n );\r\n};\r\n\r\nexport default NextGameLabel;\r\n","import React from 'react';\r\nimport Card from '@mui/material/Card';\r\nimport CardContent from '@mui/material/CardContent';\r\nimport Typography from '@mui/material/Typography';\r\nimport Box from '@mui/material/Box';\r\nimport { Tag } from '@/types/tag';\r\nimport { SearchResultItem } from '@/types/search';\r\nimport NextGameLabel from \"@/components/TablePage/NextGameLabel\";\r\nimport { renderTagsFromIds } from \"@/components/shared/TagComponents\";\r\n\r\nexport interface BaseSearchResultCardProps {\r\n result: SearchResultItem;\r\n onClick?: (id: number) => void;\r\n icon?: React.ReactNode;\r\n children?: React.ReactNode;\r\n tags: Tag[];\r\n}\r\n\r\n/**\r\n * Base component for displaying search results with common functionality\r\n */\r\nconst BaseSearchResultCard: React.FC<BaseSearchResultCardProps> = ({ \r\n result,\r\n onClick,\r\n children,\r\n icon,\r\n tags\r\n}) => {\r\n const handleClick = (e: React.MouseEvent) => {\r\n if (onClick) {\r\n // If modifier key is pressed, let the browser handle the navigation behavior\r\n if (e.ctrlKey || e.metaKey || e.shiftKey) {\r\n // Prevent the default onClick behavior\r\n e.stopPropagation();\r\n\r\n // Get the URL that would be navigated to\r\n const url = `/${result.type}/${result.id}`;\r\n\r\n // Open in new tab/window based on the modifier key\r\n window.open(url, '_blank');\r\n } else {\r\n // Normal click - use the provided onClick handler\r\n onClick(result.id);\r\n }\r\n }\r\n };\r\n\r\n return (\r\n <Card \r\n elevation={6}\r\n sx={{ \r\n width: '100%', \r\n cursor: onClick ? 'pointer' : 'default',\r\n boxShadow: '0px 8px 24px rgba(0, 0, 0, 0.15)',\r\n transition: 'box-shadow 0.3s ease-in-out',\r\n '&:hover': {\r\n boxShadow: '0px 12px 28px rgba(0, 0, 0, 0.2)'\r\n },\r\n marginBottom: 2\r\n }}\r\n onClick={(e) => handleClick(e)}\r\n >\r\n <CardContent sx={{ display: 'flex', alignItems: 'flex-start' }}>\r\n {/* Icon on the left */}\r\n {icon && (\r\n <Box sx={{ mr: 2, display: 'flex', alignItems: 'center', pt: 0.5 }}>\r\n {icon}\r\n </Box>\r\n )}\r\n\r\n {/* Content on the right */}\r\n <Box sx={{ flex: 1 }}>\r\n <Typography variant=\"h6\" sx={{ mb: 1 }}>\r\n {result.title}\r\n </Typography>\r\n {/* show Next Game Time if available */}\r\n {result.nextGameTime && (\r\n <NextGameLabel nextGameTime={result.nextGameTime}/>\r\n )}\r\n {/* Show short description above player info for tables */}\r\n {result.type === 'table' && result.shortDescription ? (\r\n <Typography variant=\"body2\" sx={{ mb: 1 }}>\r\n {result.shortDescription}\r\n </Typography>\r\n ) : null}\r\n\r\n {/* Specialized content will be inserted here */}\r\n {children}\r\n\r\n {/* Description: for tables show trimmed full description below players; otherwise show the default description */}\r\n {result.type === 'table' ? (\r\n <Typography variant=\"body1\">\r\n {(() => {\r\n const full = result.fullDescription ?? result.description ?? '';\r\n const text = full || '';\r\n return text.length > 200 ? `${text.slice(0, 200).trimEnd()}...` : text;\r\n })()}\r\n </Typography>\r\n ) : (\r\n <Typography variant=\"body1\">\r\n {result.description}\r\n </Typography>\r\n )}\r\n\r\n {result.tags && result.tags.length > 0 && (\r\n <Box sx={{ mt: 1, display: 'flex', flexWrap: 'wrap', gap: 1 }}>\r\n {renderTagsFromIds(result.tags, tags)}\r\n </Box>\r\n )}\r\n </Box>\r\n </CardContent>\r\n </Card>\r\n );\r\n};\r\n\r\nexport default BaseSearchResultCard;","import React from 'react';\nimport Avatar from '@mui/material/Avatar';\nimport { SearchResultItem } from '@/types/search';\nimport BaseSearchResultCard, { BaseSearchResultCardProps } from './BaseSearchResultCard';\nimport { Tag } from \"@/types/tag\";\n\ninterface PlayerResultCardProps extends BaseSearchResultCardProps {\n result: SearchResultItem & { type: 'player' }\n tags: Tag[];\n}\n\n/**\n * Component for displaying player search results\n * Includes an avatar image or defaults to a MUI colored circle with a letter in it\n */\nconst PlayerResultCard: React.FC<PlayerResultCardProps> = ({ \n result,\n onClick,\n tags\n}) => {\n // Get the first letter of the username for the avatar fallback\n const firstLetter = result.title.charAt(0).toUpperCase();\n \n // Generate a consistent color based on the username\n const getAvatarColor = (name: string) => {\n const colors = [\n '#F44336', '#E91E63', '#9C27B0', '#673AB7', \n '#3F51B5', '#2196F3', '#03A9F4', '#00BCD4', \n '#009688', '#4CAF50', '#8BC34A', '#CDDC39', \n '#FFEB3B', '#FFC107', '#FF9800', '#FF5722'\n ];\n \n // Simple hash function to get a consistent index\n let hash = 0;\n for (let i = 0; i < name.length; i++) {\n hash = name.charCodeAt(i) + ((hash << 5) - hash);\n }\n \n return colors[Math.abs(hash) % colors.length];\n };\n \n const avatarColor = getAvatarColor(result.title);\n \n // Create avatar for use as icon\n const playerIcon = (\n <Avatar \n src={result.imageUrl} \n alt={result.title}\n sx={{ \n width: 40, \n height: 40, \n bgcolor: !result.imageUrl ? avatarColor : undefined\n }}\n >\n {!result.imageUrl && firstLetter}\n </Avatar>\n );\n\n return (\n <BaseSearchResultCard result={result} onClick={onClick} icon={playerIcon} tags={tags}>\n {/* No additional content needed after removing join date */}\n </BaseSearchResultCard>\n );\n};\n\nexport default PlayerResultCard;","import React from 'react';\nimport Box from '@mui/material/Box';\nimport Typography from '@mui/material/Typography';\nimport Chip from '@mui/material/Chip';\nimport LinearProgress from '@mui/material/LinearProgress';\nimport PersonIcon from '@mui/icons-material/Person';\nimport SupervisorAccountIcon from '@mui/icons-material/SupervisorAccount';\nimport TableRestaurantIcon from '@mui/icons-material/TableRestaurant';\nimport { SearchResultItem } from '@/types/search';\nimport BaseSearchResultCard, { BaseSearchResultCardProps } from './BaseSearchResultCard';\n\ninterface TableResultCardProps extends BaseSearchResultCardProps {\n result: SearchResultItem & { type: 'table' };\n}\n\n/**\n * Component for displaying table search results\n * Shows active players vs. available slots and DM status\n */\nconst TableResultCard: React.FC<TableResultCardProps> = ({ \n result,\n onClick,\n tags\n}) => {\n // Use real capacity and player counts from result when available; no randomization\n const rawCapacity = result.capacity;\n const hasDefinedCapacity = typeof rawCapacity === 'number' && Number.isFinite(rawCapacity) && rawCapacity > 0;\n const capacity = hasDefinedCapacity ? rawCapacity : 0;\n const activePlayers = typeof result.numPlayers === 'number' ? result.numPlayers : 0;\n const availableSlots = Math.max(capacity - activePlayers, 0);\n const hasDM = typeof result.hasDM === 'boolean' ? result.hasDM : Boolean(result.dungeonMaster);\n\n // Calculate percentage for progress bar safely\n const occupancyPercentage = hasDefinedCapacity ? (activePlayers / capacity) * 100 : 100;\n\n // Create table icon\n const tableIcon = (\n <TableRestaurantIcon \n sx={{ \n fontSize: 40,\n color: 'primary.main'\n }}\n />\n );\n\n return (\n <BaseSearchResultCard result={result} onClick={onClick} icon={tableIcon} tags={tags}>\n <Box sx={{ mb: 2 }}>\n <Box sx={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', mb: 1 }}>\n <Typography variant=\"body2\">\n <strong>Players:</strong> {hasDefinedCapacity ? `${activePlayers}/${capacity}` : activePlayers}\n </Typography>\n {typeof hasDM === 'boolean' && (\n <Chip\n icon={hasDM ? <SupervisorAccountIcon /> : <PersonIcon />}\n label={hasDM ? \"DM Present\" : \"No DM\"}\n color={hasDM ? \"success\" : \"warning\"}\n size=\"small\"\n />\n )}\n </Box>\n\n <LinearProgress \n variant=\"determinate\" \n value={occupancyPercentage} \n sx={{ \n height: 10, \n borderRadius: 5,\n backgroundColor: '#e0e0e0',\n '& .MuiLinearProgress-bar': {\n backgroundColor: hasDefinedCapacity ? (availableSlots > 0 ? '#4caf50' : '#f44336') : '#2196f3'\n }\n }}\n />\n\n {hasDefinedCapacity && (\n <Typography variant=\"body2\" sx={{ mt: 0.5, textAlign: 'right' }}>\n {availableSlots > 0 \n ? `${availableSlots} slot${availableSlots !== 1 ? 's' : ''} available` \n : 'Table full'}\n </Typography>\n )}\n </Box>\n </BaseSearchResultCard>\n );\n};\n\nexport default TableResultCard;","import React from 'react';\nimport Box from '@mui/material/Box';\nimport Typography from '@mui/material/Typography';\nimport CalendarTodayIcon from '@mui/icons-material/CalendarToday';\nimport LocationOnIcon from '@mui/icons-material/LocationOn';\nimport EventIcon from '@mui/icons-material/Event';\nimport { SearchResultItem } from '@/types/search';\nimport BaseSearchResultCard, { BaseSearchResultCardProps } from './BaseSearchResultCard';\n\ninterface EventResultCardProps extends BaseSearchResultCardProps {\n result: SearchResultItem & { type: 'event' };\n}\n\n/**\n * Component for displaying event search results\n * Shows event location and dates\n */\nconst EventResultCard: React.FC<EventResultCardProps> = ({ \n result,\n onClick,\n tags\n}) => {\n // Format the date for display\n const formatDate = (dateString: string) => {\n const options: Intl.DateTimeFormatOptions = { \n weekday: 'long', \n year: 'numeric', \n month: 'long', \n day: 'numeric' \n };\n \n try {\n const date = new Date(dateString);\n return date.toLocaleDateString('en-US', options);\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n } catch (error) {\n return dateString; // Fallback to the original string if parsing fails\n }\n };\n \n const formattedDate = result.date ? formatDate(result.date) : 'Date TBD';\n const location = result.location || 'Location TBD';\n \n // Create event icon\n const eventIcon = (\n <EventIcon \n sx={{ \n fontSize: 40,\n color: 'primary.main'\n }}\n />\n );\n\n return (\n <BaseSearchResultCard result={result} onClick={onClick} icon={eventIcon} tags={tags}>\n <Box sx={{ mb: 2 }}>\n <Box sx={{ display: 'flex', alignItems: 'center', mb: 1 }}>\n <CalendarTodayIcon sx={{ mr: 1, color: 'primary.main' }} />\n <Typography variant=\"body2\">\n <strong>Date:</strong> {formattedDate}\n </Typography>\n </Box>\n \n <Box sx={{ display: 'flex', alignItems: 'center' }}>\n <LocationOnIcon sx={{ mr: 1, color: 'primary.main' }} />\n <Typography variant=\"body2\">\n <strong>Location:</strong> {location}\n </Typography>\n </Box>\n \n {result.organizer && (\n <Typography variant=\"body2\" sx={{ mt: 1 }}>\n <strong>Organizer:</strong> {result.organizer}\n </Typography>\n )}\n </Box>\n </BaseSearchResultCard>\n );\n};\n\nexport default EventResultCard;\n","import React from 'react';\nimport Box from '@mui/material/Box';\nimport Typography from '@mui/material/Typography';\nimport Pagination from '@mui/material/Pagination';\nimport { SearchResultItem, PaginationData } from '@/types/search';\nimport PlayerResultCard from './Results/PlayerResultCard';\nimport TableResultCard from './Results/TableResultCard';\nimport EventResultCard from './Results/EventResultCard';\nimport { Tag } from '@/types/tag';\n\ninterface ResultsContainerProps {\n results: SearchResultItem[];\n onResultClick?: (id: number, type: \"player\" | \"event\" | \"table\") => void;\n tags: Tag[];\n pagination?: PaginationData;\n onPacketChange?: (packet: number) => void;\n}\n\n/**\n * Container component that displays a list of search results\n */\nconst ResultsContainer: React.FC<ResultsContainerProps> = ({\n results,\n onResultClick,\n tags,\n pagination,\n onPacketChange\n}) => {\n if (!results || results.length === 0 || !results.map) {\n return (\n <Box sx={{ textAlign: 'center', py: 4 }}>\n No results found. Try adjusting your filters.\n </Box>\n );\n }\n\n const onPlayerClick = (id: number) => {\n onResultClick?.(id, 'player');\n }\n\n const onTableClick = (id: number) => {\n onResultClick?.(id, 'table');\n }\n\n const onEventClick = (id: number) => {\n onResultClick?.(id, 'event');\n }\n\n const handlePacketChange = (_event: React.ChangeEvent<unknown>, packet: number) => {\n onPacketChange?.(packet);\n };\n\n const startResult = pagination ? (pagination.currentPacket - 1) * pagination.packetSize + 1 : 1;\n const endResult = pagination ? Math.min(pagination.currentPacket * pagination.packetSize, pagination.totalResults) : results.length;\n\n return (\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 2 }}>\n {pagination && (\n <Box sx={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', mb: 1 }}>\n <Typography variant=\"body2\" color=\"text.secondary\">\n Showing {startResult}-{endResult} of {pagination.totalResults} results\n </Typography>\n </Box>\n )}\n\n {results.map((result) => {\n // Render the appropriate card based on result type\n switch (result.type) {\n case 'player':\n return (\n <PlayerResultCard \n key={result.id} \n result={result as SearchResultItem & { type: 'player' }} \n onClick={onPlayerClick}\n tags={tags}\n />\n );\n case 'table':\n return (\n <TableResultCard \n key={result.id} \n result={result as SearchResultItem & { type: 'table' }} \n onClick={onTableClick}\n tags={tags}\n />\n );\n case 'event':\n return (\n <EventResultCard \n key={result.id} \n result={result as SearchResultItem & { type: 'event' }} \n onClick={onEventClick}\n tags={tags}\n />\n );\n default:\n console.error(`Unknown result type: ${result.type}`);\n return null;\n }\n })}\n\n {pagination && pagination.totalPackets > 1 && (\n <Box sx={{ display: 'flex', justifyContent: 'center', mt: 4 }}>\n <Pagination \n count={pagination.totalPackets} \n page={pagination.currentPacket} \n onChange={handlePacketChange} \n color=\"primary\" \n />\n </Box>\n )}\n </Box>\n );\n};\n\nexport default ResultsContainer;","\"use client\"\nimport React from 'react';\nimport Box from '@mui/material/Box';\nimport ResultsContainer from './ResultsContainer';\nimport { SearchResultItem } from '@/types/search';\nimport { Tag } from '@/types/tag';\n\nexport interface ScrollableResultsListProps {\n results: SearchResultItem[];\n tags: Tag[];\n maxHeight?: number | string;\n onResultClick?: (id: number, type: 'player' | 'event' | 'table') => void;\n emptyText?: string;\n}\n\n/**\n * Generic scrollable list for search results. Reuses ResultsContainer and simply constrains height.\n */\nconst ScrollableResultsList: React.FC<ScrollableResultsListProps> = ({\n results,\n tags,\n maxHeight = 400,\n onResultClick,\n emptyText,\n}) => {\n const hasResults = Array.isArray(results) && results.length > 0;\n\n return (\n <Box sx={{ maxHeight, overflowY: 'auto', pr: 1 }}>\n {hasResults ? (\n <ResultsContainer results={results} onResultClick={onResultClick} tags={tags} />\n ) : (\n <Box sx={{ textAlign: 'center', py: 2 }}>\n {emptyText || 'No results to display.'}\n </Box>\n )}\n </Box>\n );\n};\n\nexport default ScrollableResultsList;\n","import React from 'react';\nimport ScrollableResultsList from './ScrollableResultsList';\nimport { SearchResultItem } from '@/types/search';\nimport { Tag } from '@/types/tag';\n\nexport interface TablesScrollableListProps {\n results: SearchResultItem[];\n tags: Tag[];\n maxHeight?: number | string;\n onResultClick?: (id: number) => void;\n}\n\n/**\n * Thin wrapper to show only table results in a scrollable list.\n */\nconst TablesScrollableList: React.FC<TablesScrollableListProps> = ({\n results,\n tags,\n maxHeight,\n onResultClick,\n}) => {\n const tables = (results || []).filter((r): r is SearchResultItem & { type: 'table' } => r?.type === 'table');\n const handleClick = (id: number) => onResultClick?.(id);\n\n return (\n <ScrollableResultsList\n results={tables}\n tags={tags}\n maxHeight={maxHeight}\n onResultClick={(id, type) => {\n if (type === 'table') handleClick(id);\n }}\n />\n );\n};\n\nexport default TablesScrollableList;\n","\"use client\"\nimport React from 'react';\nimport Card from '@mui/material/Card';\nimport CardContent from '@mui/material/CardContent';\nimport CardHeader from '@mui/material/CardHeader';\nimport Divider from '@mui/material/Divider';\nimport TablesScrollableList from '@/components/SearchPage/TablesScrollableList';\nimport { Tag } from '@/types/tag';\n\nexport interface EventTablesCardProps {\n tables: any[];\n tags: Tag[];\n maxHeight?: number | string;\n onTableClick?: (id: number) => void;\n}\n\n/**\n * Event page card that shows a scrollable list of tables, reusing search result cards.\n */\nconst EventTablesCard: React.FC<EventTablesCardProps> = ({\n tables,\n tags,\n maxHeight = 450,\n onTableClick,\n}) => {\n return (\n <Card elevation={6} sx={{ width: '100%', boxShadow: '0px 8px 24px rgba(0, 0, 0, 0.15)' }}>\n <CardHeader title=\"Tables\" />\n <Divider />\n <CardContent>\n <TablesScrollableList results={tables} tags={tags} maxHeight={maxHeight} onResultClick={onTableClick} />\n </CardContent>\n </Card>\n );\n};\n\nexport default EventTablesCard;\n","\"use client\"\r\nimport React from \"react\";\r\nimport EventBanner from \"@/components/EventPage/EventBanner\";\r\nimport Grid from \"@mui/material/Grid\";\r\nimport EventBasicInfo from \"@/components/EventPage/EventBasicInfo\";\r\nimport EventTablesCard from \"@/components/EventPage/EventTablesCard\";\r\nimport type { EventDB, EventEditContextValue } from \"@/types/event\";\r\nimport type { Tag } from \"@/types/tag\";\r\nimport { EventEditProvider } from \"@/components/EventPage/editMode/EventEditContext\";\r\n\r\nexport type EventPageProps = {\r\n mergedEvent: EventDB;\r\n isOwner: boolean;\r\n updateEvent?: (patch: Partial<EventDB>) => void;\r\n updateImages?: () => void;\r\n attendees: number;\r\n numGames: number;\r\n tables: any[];\r\n players: any[];\r\n allTags: Tag[];\r\n};\r\n\r\nexport default function EventPageLayout({\r\n mergedEvent,\r\n isOwner,\r\n updateEvent,\r\n updateImages,\r\n attendees,\r\n numGames,\r\n tables,\r\n allTags,\r\n }: EventPageProps) {\r\n return (\r\n <Grid container flexDirection=\"column\">\r\n {/* 3. Context wiring */}\r\n <EventEditProvider initialEvent={mergedEvent} value={{ isOwner, updateEvent, updateImages }}>\r\n <Grid>\r\n <EventBanner\r\n attendees={attendees}\r\n numGames={numGames}\r\n />\r\n </Grid>\r\n <Grid container flexDirection=\"row\" spacing={3} size={{ xs: 12, md: 12 }}>\r\n <Grid size={{ xs: 12, md: 4 }} spacing={3} padding={3}>\r\n <EventBasicInfo\r\n locationId={mergedEvent.location || \"0\"}\r\n />\r\n </Grid>\r\n <Grid size={{ xs: 12, md: 8 }} spacing={3} padding={3}>\r\n <EventTablesCard tables={tables} tags={allTags} />\r\n </Grid>\r\n </Grid>\r\n <Grid />\r\n </EventEditProvider>\r\n </Grid>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport React from \"react\";\r\nimport { Card, CardContent, Typography } from \"@mui/material\";\r\n\r\nexport type PlayerDetailsProps = {\r\n preferredPronouns: string | null;\r\n age: number | null;\r\n yearsPlaying: number | null;\r\n discordUsername: string | null;\r\n preferredGames: string[] | string | null;\r\n};\r\n\r\nconst PlayerDetailsCard: React.FC<PlayerDetailsProps> = ({\r\n preferredPronouns,\r\n age,\r\n yearsPlaying,\r\n discordUsername,\r\n preferredGames,\r\n}) => {\r\n return (\r\n <Card\r\n sx={{\r\n margin: \"1rem\",\r\n background: \"linear-gradient(135deg, rgba(25, 118, 210, 0.8), rgba(25, 118, 210, 1))\", // Primary Blue Gradient\r\n boxShadow: \"0px 8px 15px rgba(25, 118, 210, 0.3)\", // Deep shadow based on the color\r\n borderRadius: \"12px\", // Rounded corners\r\n color: \"#FFFFFF\", // White as the base text color for contrast\r\n position: \"relative\",\r\n overflow: \"hidden\", // Ensures clean edges\r\n }}\r\n className=\"transition duration-300 transform hover:scale-105 hover:shadow-2xl\"\r\n >\r\n {/* Decorative Overlay */}\r\n <div\r\n className=\"absolute inset-0 bg-gradient-to-t from-white/10 to-transparent opacity-60\"\r\n aria-hidden=\"true\"\r\n ></div>\r\n\r\n <CardContent className=\"relative p-6\">\r\n {/* Title */}\r\n <Typography\r\n variant=\"h5\"\r\n className=\"font-bold uppercase text-center tracking-wide mb-4\"\r\n sx={{\r\n color: \"#FFFFFF\", // Bright white for high contrast\r\n textShadow: \"0px 4px 8px rgba(0, 0, 0, 0.5)\", // Stronger shadow for bold presence\r\n fontSize: \"1.5rem\", // Slightly larger title size\r\n }}\r\n >\r\n Player Details\r\n </Typography>\r\n\r\n {/* Details Section */}\r\n <div className=\"space-y-3\">\r\n {preferredPronouns && (\r\n <Typography\r\n variant=\"body2\"\r\n className=\"text-sm font-medium\"\r\n sx={{\r\n color: \"#FFFFFF\",\r\n textShadow: \"0px 2px 6px rgba(0, 0, 0, 0.5)\",\r\n fontWeight: \"bold\",\r\n }}\r\n >\r\n <span className=\"font-extrabold text-cyan-300\">Preferred Pronouns:</span> {preferredPronouns}\r\n </Typography>\r\n )}\r\n {age !== null && (\r\n <Typography\r\n variant=\"body2\"\r\n className=\"text-sm font-medium\"\r\n sx={{\r\n color: \"#FFFFFF\",\r\n textShadow: \"0px 2px 6px rgba(0, 0, 0, 0.5)\",\r\n fontWeight: \"bold\",\r\n }}\r\n >\r\n <span className=\"font-extrabold text-cyan-300\">Age:</span> {age}\r\n </Typography>\r\n )}\r\n {yearsPlaying !== null && (\r\n <Typography\r\n variant=\"body2\"\r\n className=\"text-sm font-medium\"\r\n sx={{\r\n color: \"#FFFFFF\",\r\n textShadow: \"0px 2px 6px rgba(0, 0, 0, 0.5)\",\r\n fontWeight: \"bold\",\r\n }}\r\n >\r\n <span className=\"font-extrabold text-cyan-300\">Years Playing:</span> {yearsPlaying}\r\n </Typography>\r\n )}\r\n {discordUsername && (\r\n <Typography\r\n variant=\"body2\"\r\n className=\"text-sm font-medium\"\r\n sx={{\r\n color: \"#FFFFFF\",\r\n textShadow: \"0px 2px 6px rgba(0, 0, 0, 0.5)\",\r\n fontWeight: \"bold\",\r\n }}\r\n >\r\n <span className=\"font-extrabold text-cyan-300\">Discord Username:</span> {discordUsername}\r\n </Typography>\r\n )}\r\n {preferredGames && (\r\n <Typography\r\n variant=\"body2\"\r\n className=\"text-sm font-medium\"\r\n sx={{\r\n color: \"#FFFFFF\",\r\n textShadow: \"0px 2px 6px rgba(0, 0, 0, 0.5)\",\r\n fontWeight: \"bold\",\r\n }}\r\n >\r\n <span className=\"font-extrabold text-cyan-300\">Preferred Games:</span>{\" \"}\r\n {Array.isArray(preferredGames) ? preferredGames.join(\", \") : preferredGames}\r\n </Typography>\r\n )}\r\n </div>\r\n\r\n {/* Footer Section */}\r\n <div className=\"mt-6 text-center\">\r\n <Typography\r\n variant=\"caption\"\r\n className=\"text-xs italic\"\r\n sx={{\r\n color: \"#BBDEFB\", // Subtle light blue for footer text\r\n textShadow: \"0px 1px 3px rgba(0, 0, 0, 0.2)\",\r\n }}\r\n >\r\n All information is player-submitted.\r\n </Typography>\r\n </div>\r\n </CardContent>\r\n </Card>\r\n );\r\n};\r\n\r\nexport default PlayerDetailsCard;\r\n\r\n","export function BlurbTitles() {\r\n const blurbTitles = new Map();\r\n blurbTitles.set(1, \"What’s your most epic tabletop moment?\");\r\n blurbTitles.set(2, \"What type of character do you dream of playing?\");\r\n blurbTitles.set(3, \"What kind of story are you most excited to be part of?\");\r\n blurbTitles.set(4, \"Which tabletop world would you want to live in?\");\r\n blurbTitles.set(5, \"If you could only play one tabletop game forever, what would it be?\");\r\n blurbTitles.set(6, \"What’s a fantasy or sci-fi world you love and would want to game in?\");\r\n blurbTitles.set(7, \"Who’s the most chaotic (or hilarious) player you've ever gamed with?\");\r\n blurbTitles.set(8, \"What motivates you to join a tabletop game: adventure, laughs, or something else?\");\r\n blurbTitles.set(9, \"What’s your weirdest in-game flex?\");\r\n blurbTitles.set(10, \"Which class or archetype are you drawn to—fighter, mage, rogue, healer, or wildcard?\");\r\n blurbTitles.set(11, \"What character did you have the most fun playing?\");\r\n blurbTitles.set(12, \"What kind of player are you: Min-maxer, storyteller, or chaos incarnate?\");\r\n blurbTitles.set(13, \"Describe the best campaign twist you’ve ever experienced.\");\r\n blurbTitles.set(14, \"What’s your guilty pleasure when it comes to character archetypes?\");\r\n blurbTitles.set(15, \"Who’s your favorite villain or antagonist you’ve faced in a campaign?\");\r\n blurbTitles.set(16, \"What’s the hardest decision your character ever had to make?\");\r\n blurbTitles.set(17, \"What’s the funniest tabletop memory you’ve ever had?\");\r\n blurbTitles.set(18, \"Ever had a tabletop game go completely off the rails? What happened?\");\r\n blurbTitles.set(19, \"Introduce us to your favorite homebrew rule!\");\r\n blurbTitles.set(20, \"What’s your favorite dice-rolling ritual or superstition?\");\r\n blurbTitles.set(21, \"What’s your go-to tabletop snack during sessions?\");\r\n blurbTitles.set(22, \"What’s the most creative solution you’ve ever come up with in a game?\");\r\n blurbTitles.set(23, \"What NPC or character from a campaign would you date IRL?\");\r\n blurbTitles.set(24, \"What’s your favorite tabletop rule or mechanic?\");\r\n blurbTitles.set(25, \"What’s the most emotional tabletop moment you’ve had?\");\r\n blurbTitles.set(26, \"What kind of story twist or epic moment would make you fall in love with the game?\");\r\n blurbTitles.set(27, \"What’s the most challenging yet rewarding NPC you've ever created?\");\r\n blurbTitles.set(28, \"How do you keep players on track without railroading your game?\");\r\n blurbTitles.set(29, \"What’s the most unexpected way your players solved a problem you designed?\");\r\n blurbTitles.set(30, \"What’s your favorite resource or tool for planning campaigns?\");\r\n blurbTitles.set(31, \"What’s the funniest way your players have broken your carefully-planned encounter?\");\r\n blurbTitles.set(32, \"What’s the most memorable villain or antagonist you’ve created?\");\r\n blurbTitles.set(33, \"How do you handle player conflict in your campaigns?\");\r\n blurbTitles.set(34, \"What’s your favorite homebrew rule to spice up your campaigns?\");\r\n blurbTitles.set(35, \"Have you ever scrapped a planned session because of something your players did?\");\r\n blurbTitles.set(36, \"What’s the most creative environment or setting you’ve designed for your players?\");\r\n\r\n return blurbTitles;\r\n}\r\n\r\nexport function PrivacyValues() {\r\n const privacyValues = new Map();\r\n privacyValues.set(1, \"private\");\r\n privacyValues.set(\"private\", 1);\r\n\r\n privacyValues.set(2, \"connection\");\r\n privacyValues.set(\"connection\",2);\r\n\r\n privacyValues.set(3, \"public\");\r\n privacyValues.set(\"public\", 3);\r\n\r\n privacyValues.set(4, \"table\");\r\n privacyValues.set(\"table\", 4);\r\n\r\n return privacyValues;\r\n}\r\n\r\nexport function PlayerTagLabels(): string[] {\r\n const tagTitles: string[] = [];\r\n\r\n tagTitles.push(\"girl gamer\");\r\n tagTitles.push(\"veteran\");\r\n tagTitles.push(\"new\");\r\n tagTitles.push(\"min-maxer\");\r\n tagTitles.push(\"role-player\");\r\n tagTitles.push(\"rules lawyer\");\r\n tagTitles.push(\"storyteller\");\r\n tagTitles.push(\"chaotic\");\r\n tagTitles.push(\"planner\");\r\n tagTitles.push(\"wildcard\");\r\n tagTitles.push(\"protector\");\r\n tagTitles.push(\"rogue-like\");\r\n tagTitles.push(\"power gamer\");\r\n tagTitles.push(\"thinker\");\r\n tagTitles.push(\"narrative\");\r\n tagTitles.push(\"homebrewer\");\r\n tagTitles.push(\"dungeon master\");\r\n tagTitles.push(\"world builder\");\r\n tagTitles.push(\"solver\");\r\n tagTitles.push(\"strategist\");\r\n tagTitles.push(\"dice lover\");\r\n tagTitles.push(\"performer\");\r\n tagTitles.push(\"casual\");\r\n tagTitles.push(\"character-focused\");\r\n tagTitles.push(\"team player\");\r\n tagTitles.push(\"mechanics\");\r\n tagTitles.push(\"adventurer\");\r\n tagTitles.push(\"collector\");\r\n tagTitles.push(\"problem solver\");\r\n tagTitles.push(\"innovator\");\r\n tagTitles.push(\"lorekeeper\");\r\n tagTitles.push(\"rule bender\");\r\n tagTitles.push(\"sandboxer\");\r\n tagTitles.push(\"cartographer\");\r\n tagTitles.push(\"loyalist\");\r\n tagTitles.push(\"wrangler\");\r\n tagTitles.push(\"moment maker\");\r\n tagTitles.push(\"jinxed roller\");\r\n tagTitles.push(\"lucky roller\");\r\n tagTitles.push(\"meticulous\");\r\n tagTitles.push(\"improviser\");\r\n tagTitles.push(\"tactician\");\r\n tagTitles.push(\"butterfly\");\r\n tagTitles.push(\"beginner\");\r\n tagTitles.push(\"voice actor\");\r\n tagTitles.push(\"multi-campaign\");\r\n tagTitles.push(\"starter\");\r\n tagTitles.push(\"forever DM\");\r\n tagTitles.push(\"finisher\");\r\n tagTitles.push(\"swapper\");\r\n tagTitles.push(\"meta-gamer\");\r\n tagTitles.push(\"specialist\");\r\n\r\n return tagTitles;\r\n}\r\n\r\n\r\nexport const FantasyNouns = [\r\n // Core D&D Classes\r\n \"Fighter\", \"Rogue\", \"Wizard\", \"Cleric\", \"Paladin\", \"Barbarian\", \"Ranger\", \"Sorcerer\", \"Bard\", \"Monk\", \"Warlock\", \"Druid\", \"Artificer\",\r\n\r\n // Fantasy Occupations\r\n \"Alchemist\", \"Blacksmith\", \"Knight\", \"Mage\", \"Mercenary\", \"Archer\", \"Scribe\", \"Healer\", \"Hunter\", \"Assassin\", \"Enchanter\",\r\n \"Miner\", \"Sailor\", \"Merchant\", \"Herbalist\", \"Cartographer\", \"Tailor\", \"Innkeeper\", \"Cook\", \"Scholar\",\r\n\r\n // Archetypes\r\n \"Adventurer\", \"Champion\", \"Warlord\", \"Outlaw\", \"Pilgrim\", \"Prophet\", \"Necromancer\", \"Witch\", \"Shaman\",\r\n \"Beastmaster\", \"Acolyte\", \"Spellblade\", \"Battlemage\", \"Blademaster\", \"Warpriest\", \"Berserker\", \"Elementalist\",\r\n\r\n // Fantasy Creatures/Beings\r\n \"Dragon\", \"Elf\", \"Dwarf\", \"Orc\", \"Goblin\", \"Gnome\", \"Tiefling\", \"Genasi\", \"Halfling\", \"Lich\", \"Vampire\", \"Werewolf\",\r\n \"Demon\", \"Angel\", \"Pixie\", \"Dryad\", \"Centaur\", \"Chimera\", \"Golem\", \"Fairy\", \"Troll\", \"Minotaur\", \"Kraken\",\r\n \"Griffin\", \"Phoenix\",\r\n\r\n // Fantasy Roles/Titles\r\n \"Archmage\", \"High Priestess\", \"King\", \"Queen\", \"Duke\", \"Duchess\", \"Emperor\", \"Empress\", \"Captain\", \"Seer\", \"Oracle\",\r\n \"Warden\", \"Guardian\", \"Watchman\", \"Hero\", \"Villain\", \"Herald\", \"Scout\", \"Envoy\",\r\n\r\n // Other Fantasy-Themed Nouns\r\n \"Spellcaster\", \"Summoner\", \"Conjurer\", \"Warrior\", \"Gladiator\", \"Pathfinder\", \"Explorer\", \"Tinkerer\", \"Shadowblade\",\r\n \"Dungeoneer\", \"Archon\", \"Mystic\", \"Sage\", \"Runemaster\", \"Smith\", \"Wanderer\", \"Wayfarer\", \"Avenger\", \"Defender\", \"Keeper\"\r\n];\r\n\r\nexport const FantasyAdjectives = [\r\n // Descriptive of Power/Strength\r\n \"Mighty\", \"Powerful\", \"Fierce\", \"Tough\", \"Armored\", \"Indomitable\", \"Savage\", \"Vengeful\", \"Heroic\", \"Valiant\",\r\n\r\n // Magical Features\r\n \"Enchanted\", \"Bewitched\", \"Magical\", \"Mystical\", \"Ethereal\", \"Arcane\", \"Spellbound\", \"Supernatural\", \"Runed\",\r\n\r\n // Personality/Appearance Traits\r\n \"Noble\", \"Gallant\", \"Cunning\", \"Crafty\", \"Shadowy\", \"Elegant\", \"Wise\", \"Shrewd\", \"Merciless\", \"Serene\",\r\n \"Infernal\", \"Wicked\", \"Pious\", \"Charming\", \"Loyal\", \"Treacherous\", \"Bold\", \"Cowardly\", \"Sly\",\r\n\r\n // Environment-Themed\r\n \"Cursed\", \"Blessed\", \"Haunted\", \"Frozen\", \"Burning\", \"Fiery\", \"Icy\", \"Stormy\", \"Sunlit\", \"Moonlit\",\r\n \"Dark\", \"Luminous\", \"Glistening\", \"Ancient\", \"Shattered\", \"Sacred\", \"Forbidden\", \"Hidden\", \"Lost\",\r\n \"Verdant\", \"Barren\",\r\n\r\n // Monster/Creature Traits\r\n \"Ferocious\", \"Ravenous\", \"Menacing\", \"Grotesque\", \"Spiked\", \"Scaled\", \"Hulking\", \"Winged\", \"Fanged\", \"Horned\",\r\n \"Tentacled\", \"Shapeshifting\",\r\n\r\n // Mystical/Abstract Traits\r\n \"Immortal\", \"Mythical\", \"Omniscient\", \"Unbreakable\",\r\n \"Unfathomable\", \"Celestial\", \"Void\", \"Otherworldly\", \"Primordial\",\r\n\r\n // Precious/Gleaming Adjectives\r\n \"Golden\", \"Silver\", \"Crystalline\", \"Diamond\", \"Jeweled\", \"Sapphire\", \"Emerald\", \"Shimmering\", \"Gleaming\", \"Radiant\",\r\n\r\n // Combat-Related Traits\r\n \"Bloodstained\", \"Battleworn\", \"Unyielding\", \"Victorious\", \"Deadly\", \"Sharp\", \"Piercing\", \"Relentless\", \"Untouchable\",\r\n\r\n // Nature-Themed\r\n \"Whispering\", \"Thorned\", \"Blossoming\", \"Blooming\", \"Overgrown\", \"Howling\", \"Cracked\", \"Twisted\", \"Mossy\", \"Winding\",\r\n \"Towering\", \"Rooted\",\r\n\r\n // Emotional/Thematic Descriptors\r\n \"Free\", \"Courageous\", \"Reckless\", \"Damned\", \"Lonely\", \"Heartless\", \"Driven\", \"Hopeful\",\r\n \"Fateful\"\r\n];\r\n\r\nexport const FantasyQualifiers = [\r\n // Describing Uniqueness or Origins\r\n \"Original\", \"Prime\", \"Primal\", \"Archetypal\", \"Ancestral\", \"Legendary\", \"Foremost\",\r\n\r\n // Describing Finality or Completion\r\n \"Final\", \"Ultimate\", \"Absolute\", \"Conclusive\", \"Eternal\", \"Enduring\", \"Definitive\",\r\n\r\n // Describing Supremacy or Greatness\r\n \"Supreme\", \"Paramount\", \"Preeminent\", \"Pinnacle\", \"Peerless\", \"Unrivaled\", \"Sovereign\", \"Dominant\",\r\n\r\n // Describing Perfection or Excellence\r\n \"Flawless\", \"Perfect\", \"Divine\", \"Exalted\", \"Transcendent\", \"Matchless\", \"Incomparable\",\r\n\r\n // Describing Eternity or Timelessness\r\n \"Timeless\", \"Boundless\", \"Ageless\", \"Perpetual\", \"Infinite\", \"Everlasting\",\r\n\r\n // Describing Power or Authority\r\n \"Omnipotent\", \"Almighty\", \"Unassailable\", \"Overwhelming\", \"Irresistible\", \"Unconquerable\", \"Majestic\"\r\n];\r\n\r\nexport const generateUsername = () => {\r\n let output = \"\"\r\n\r\n output+= getRandomElement(FantasyQualifiers)\r\n output+= getRandomElement(FantasyAdjectives)\r\n output+= getRandomElement(FantasyNouns)\r\n\r\n return output;\r\n}\r\n\r\nexport const ProfilePictureSettings = {\r\n aspectRatio: 4/5,\r\n minWidth: 400,\r\n}\r\n\r\nconst getRandomElement = (array: string[]) => {\r\n return array[Math.floor(Math.random() * array.length)];\r\n}\r\n\r\n","\"use client\";\r\n\r\nimport React, { useState, useEffect } from \"react\";\r\nimport { Card, CardMedia, CardContent, Typography } from \"@mui/material\";\r\nimport { ProfilePictureSettings } from \"@/data/values\";\r\n\r\nexport type PlayerDisplayProps = {\r\n profilePicture: string | null;\r\n username: string;\r\n bio: string | null;\r\n preferredPronouns: string | null;\r\n};\r\n\r\nconst PlayerDisplayCard: React.FC<PlayerDisplayProps> = ({ profilePicture, username, bio, preferredPronouns }) => {\r\n const defaultImg = \"/man-walking-silhouette-clipart.jpg\";\r\n const [imageSrc, setImageSrc] = useState<string>(defaultImg);\r\n const { aspectRatio } = ProfilePictureSettings;\r\n\r\n useEffect(() => {\r\n async function validateImage() {\r\n const newImage = profilePicture || defaultImg;\r\n if (!profilePicture) {\r\n setImageSrc(defaultImg);\r\n return;\r\n }\r\n\r\n const img = new Image();\r\n img.src = newImage;\r\n\r\n img.onload = () => {\r\n setImageSrc(newImage);\r\n };\r\n\r\n img.onerror = () => {\r\n setImageSrc(defaultImg);\r\n };\r\n }\r\n\r\n validateImage();\r\n }, [profilePicture]);\r\n\r\n return (\r\n <Card\r\n sx={{\r\n margin: \"1rem\",\r\n background: \"linear-gradient(135deg, rgba(25, 118, 210, 0.8), rgba(25, 118, 210, 1))\", // Vibrant blue gradient\r\n boxShadow: \"0px 8px 15px rgba(25, 118, 210, 0.3)\", // Blue shadow to add depth\r\n borderRadius: \"12px\", // Smooth rounded corners\r\n color: \"#FFFFFF\", // White text for high contrast\r\n overflow: \"hidden\", // Clean edges\r\n }}\r\n className=\"transition duration-300 transform hover:scale-105 hover:shadow-2xl\"\r\n >\r\n {/* Image Section */}\r\n <CardMedia\r\n component=\"img\"\r\n image={imageSrc}\r\n alt={`${username}'s Profile Picture`}\r\n sx={{\r\n aspectRatio: aspectRatio,\r\n height: \"auto\", // Updates to maintain aspect ratio and fill space nicely\r\n width: \"100%\",\r\n objectFit: \"cover\",\r\n }}\r\n />\r\n\r\n <CardContent className=\"relative p-6\">\r\n {/* Username */}\r\n <Typography\r\n variant=\"h5\"\r\n component=\"div\"\r\n className=\"font-bold text-lg uppercase text-center tracking-wide mb-2\"\r\n sx={{\r\n color: \"#FFFFFF\", // Pure white for username\r\n fontSize: \"1.5rem\",\r\n textShadow: \"0px 3px 6px rgba(0, 0, 0, 0.5)\", // Strong shadow for visibility\r\n }}\r\n >\r\n {username}\r\n </Typography>\r\n\r\n {/* Preferred Pronouns */}\r\n {preferredPronouns && (\r\n <Typography\r\n variant=\"body2\"\r\n className=\"text-sm font-medium\"\r\n sx={{\r\n color: \"#E3F2FD\",\r\n textShadow: \"0px 2px 4px rgba(0, 0, 0, 0.3)\", // Subtle shadow for readability\r\n fontWeight: \"bold\", // Emphasize key details\r\n marginBottom: \"1rem\",\r\n }}\r\n >\r\n {preferredPronouns}\r\n </Typography>\r\n )}\r\n\r\n {/* Bio */}\r\n {bio && (\r\n <Typography\r\n variant=\"body2\"\r\n className=\"text-sm font-light\"\r\n sx={{\r\n color: \"#E3F2FD\", // Softer muted tone for secondary text\r\n textShadow: \"0px 2px 4px rgba(0, 0, 0, 0.3)\", // Subtle shadow for readability\r\n fontStyle: \"italic\", // Distinguish bio visually\r\n }}\r\n >\r\n {bio}\r\n </Typography>\r\n )}\r\n </CardContent>\r\n </Card>\r\n );\r\n};\r\n\r\nexport default PlayerDisplayCard;\r\n\r\n\r\n\r\n\r\n\r\n\r\n","\"use client\";\r\n\r\nimport React from \"react\";\r\nimport { Card, CardContent, CardHeader } from \"@mui/material\";\r\nimport { Tag } from \"@/types/tag\";\r\nimport Chip from \"@/components/shared/Chip\";\r\n\r\nexport type PlayerTagsCardProps = {\r\n tags: Tag[];\r\n};\r\n\r\nconst PlayerTagsCard: React.FC<PlayerTagsCardProps> = ({ tags = [] }) => {\r\n return (\r\n <Card sx={{\r\n margin: \"1rem\",\r\n borderRadius: \"12px\",\r\n boxShadow: \"0px 8px 15px rgba(25, 118, 210, 0.3)\",\r\n overflow: \"hidden\"\r\n }} className=\"transition duration-300 transform hover:scale-105 hover:shadow-2xl\">\r\n <CardHeader\r\n title=\"Player Tags\"\r\n sx={{\r\n background: \"linear-gradient(135deg, rgba(25, 118, 210, 0.8), rgba(25, 118, 210, 1))\",\r\n color: \"#FFFFFF\",\r\n fontSize: \"1.5rem\",\r\n textShadow: \"0px 3px 6px rgba(0, 0, 0, 0.5)\",\r\n '& .MuiCardHeader-title': {\r\n fontWeight: \"bold\",\r\n fontSize: \"1.5rem\",\r\n textAlign: \"center\",\r\n textTransform: \"uppercase\",\r\n letterSpacing: \"0.05em\"\r\n }\r\n }}\r\n />\r\n <CardContent className=\"p-6\">\r\n <div className=\"flex flex-wrap gap-2\">\r\n {tags.map((tag) => (\r\n <Chip key={tag.id} tag={tag} />\r\n ))}\r\n </div>\r\n </CardContent>\r\n </Card>\r\n );\r\n};\r\n\r\nexport default PlayerTagsCard;","\"use client\";\r\n\r\nimport React from \"react\";\r\nimport { Card, CardContent, Typography } from \"@mui/material\";\r\n\r\nexport type PlayerPromptCardProps = {\r\n title: string | null;\r\n description: string | null;\r\n};\r\n\r\nconst PlayerPromptCard: React.FC<PlayerPromptCardProps> = ({ title, description }) => (\r\n <Card\r\n sx={{\r\n margin: \"1rem\",\r\n background: \"linear-gradient(135deg, rgba(25, 118, 210, 0.8), rgba(25, 118, 210, 1))\", // Gradient color scheme\r\n boxShadow: \"0px 8px 15px rgba(25, 118, 210, 0.3)\", // Card shadow\r\n borderRadius: \"12px\", // Rounded corners\r\n color: \"#FFFFFF\", // Text contrast with the background\r\n overflow: \"hidden\", // Keeps consistent and clean card shape\r\n }}\r\n className=\"transition duration-300 transform hover:scale-105 hover:shadow-2xl\"\r\n >\r\n <CardContent className=\"p-6\">\r\n {/* Title */}\r\n {title && (\r\n <Typography\r\n variant=\"h5\"\r\n className=\"font-bold text-lg uppercase text-center tracking-wide mb-4\"\r\n sx={{\r\n color: \"#FFFFFF\", // Bright white for high visibility\r\n textShadow: \"0px 3px 6px rgba(0, 0, 0, 0.5)\", // Strong text shadow for contrast\r\n fontSize: \"1.5rem\",\r\n }}\r\n >\r\n {title}\r\n </Typography>\r\n )}\r\n\r\n {/* Description */}\r\n {description && (\r\n <Typography\r\n variant=\"body2\"\r\n className=\"text-sm font-medium text-center\"\r\n sx={{\r\n color: \"#E3F2FD\", // Softer light blue for description\r\n textShadow: \"0px 2px 4px rgba(0, 0, 0, 0.3)\", // Subtle shadow\r\n lineHeight: 1.6,\r\n marginTop: \"1rem\",\r\n }}\r\n >\r\n {description}\r\n </Typography>\r\n )}\r\n </CardContent>\r\n </Card>\r\n);\r\n\r\nexport default PlayerPromptCard;\r\n\r\n","\"use client\";\r\n\r\nimport React, { useMemo, useState } from \"react\";\r\nimport Autocomplete from \"@mui/material/Autocomplete\";\r\nimport { Card, CardContent, CardHeader, TextField } from \"@mui/material\";\r\nimport Popper, { PopperProps } from \"@mui/material/Popper\";\r\nimport { Tag } from \"@/types/tag\";\r\nimport Chip from \"@/components/shared/Chip\";\r\n\r\nexport interface PlayerTagsEditProps {\r\n selectedTags: Tag[];\r\n possibleTags: Tag[];\r\n onToggleTag: (id: number) => void;\r\n}\r\n\r\nconst PlayerTagsEdit: React.FC<PlayerTagsEditProps> = ({\r\n selectedTags = [],\r\n possibleTags = [],\r\n onToggleTag,\r\n}) => {\r\n const [inputValue, setInputValue] = useState(\"\");\r\n const selectedIds = useMemo(() => selectedTags.map((tag) => tag.id), [selectedTags]);\r\n\r\n const options = useMemo(\r\n () => possibleTags.map((tag) => ({ value: tag.id, label: tag.label, alternate_title: tag.alternate_title })),\r\n [possibleTags]\r\n );\r\n\r\n return (\r\n <Card sx={{\r\n margin: \"1rem\",\r\n borderRadius: \"12px\",\r\n boxShadow: \"0px 8px 15px rgba(25, 118, 210, 0.3)\",\r\n overflow: \"hidden\"\r\n }}>\r\n <CardHeader \r\n title=\"Player Tags\" \r\n sx={{\r\n background: \"linear-gradient(135deg, rgba(25, 118, 210, 0.8), rgba(25, 118, 210, 1))\",\r\n color: \"#FFFFFF\",\r\n fontSize: \"1.5rem\",\r\n textShadow: \"0px 3px 6px rgba(0, 0, 0, 0.5)\",\r\n '& .MuiCardHeader-title': {\r\n fontWeight: \"bold\",\r\n fontSize: \"1.5rem\",\r\n textAlign: \"center\",\r\n textTransform: \"uppercase\",\r\n letterSpacing: \"0.05em\"\r\n }\r\n }}\r\n />\r\n <CardContent className=\"p-6\">\r\n <div className=\"flex flex-wrap gap-2 mb-4\">\r\n {selectedTags.map((tag) => (\r\n <Chip\r\n key={tag.id}\r\n tag={tag}\r\n removeCallback={() => onToggleTag(tag.id)}\r\n />\r\n ))}\r\n </div>\r\n <Autocomplete\r\n key={selectedIds.join(\"-\")}\r\n options={options}\r\n filterOptions={(availableOptions, state) => {\r\n const query = state.inputValue.toLowerCase();\r\n return availableOptions\r\n .filter(\r\n (option) =>\r\n !selectedIds.includes(option.value) &&\r\n (option.label.toLowerCase().includes(query) ||\r\n option.alternate_title?.some((title) => title.toLowerCase().includes(query)))\r\n )\r\n .slice(0, 5);\r\n }}\r\n value={null}\r\n inputValue={inputValue}\r\n onInputChange={(event, newInputValue) => {\r\n if (event && event.type === \"change\") {\r\n setInputValue(newInputValue);\r\n }\r\n }}\r\n onChange={(event, newValue) => {\r\n if (newValue) {\r\n onToggleTag(newValue.value);\r\n }\r\n setInputValue(\"\");\r\n }}\r\n slots={{ popper: CustomPopper }}\r\n renderInput={(params) => (\r\n <TextField\r\n {...params}\r\n label=\"Select Tags\"\r\n variant=\"outlined\"\r\n />\r\n )}\r\n />\r\n </CardContent>\r\n </Card>\r\n );\r\n};\r\n\r\nconst CustomPopper = (props: PopperProps) => {\r\n return (\r\n <Popper\r\n {...props}\r\n modifiers={[\r\n {\r\n name: \"preventOverflow\",\r\n options: {\r\n boundary: \"viewport\",\r\n },\r\n },\r\n {\r\n name: \"offset\",\r\n options: {\r\n offset: [0, -10],\r\n },\r\n },\r\n ]}\r\n placement=\"top-start\"\r\n />\r\n );\r\n};\r\n\r\nexport default PlayerTagsEdit;\r\n","\"use client\";\r\n\r\nimport React from \"react\";\r\nimport { Grid, Box, useMediaQuery, useTheme, NoSsr } from \"@mui/material\";\r\nimport PlayerDisplayCard, { PlayerDisplayProps } from \"./PlayerDisplayCard\";\r\nimport PlayerDetailsCard, { PlayerDetailsProps } from \"./PlayerDetailsCard\";\r\nimport PlayerTagsCard from \"./PlayerTagsCard\";\r\nimport PlayerPromptCard, { PlayerPromptCardProps } from \"./PlayerPromptCard\";\r\nimport PlayerTagsEdit from \"./PlayerTagsEdit\";\r\nimport { Tag } from \"@/types/tag\";\r\n\r\nexport type PlayerPageLayoutProps = {\r\n playerData: PlayerDisplayProps & PlayerDetailsProps;\r\n tags: Tag[];\r\n blurbs: PlayerPromptCardProps[];\r\n isOwner?: boolean;\r\n possibleTags?: Tag[];\r\n onToggleTag?: (tagId: number) => void;\r\n};\r\n\r\nexport default function PlayerPageLayout({\r\n playerData,\r\n tags = [],\r\n blurbs = [],\r\n isOwner = false,\r\n possibleTags = [],\r\n onToggleTag = () => {},\r\n}: PlayerPageLayoutProps) {\r\n const theme = useTheme();\r\n const isSmallScreen = useMediaQuery(theme.breakpoints.down(\"lg\"));\r\n\r\n const tagsElement = isOwner ? (\r\n <PlayerTagsEdit\r\n selectedTags={tags}\r\n possibleTags={possibleTags}\r\n onToggleTag={onToggleTag}\r\n />\r\n ) : (\r\n <PlayerTagsCard tags={tags} />\r\n );\r\n\r\n return (\r\n <NoSsr>\r\n <Box sx={{ padding: \"2rem\", marginRight: \"auto\", marginLeft: \"auto\" }} justifyContent=\"center\">\r\n <Grid container spacing={3} justifyContent=\"center\" sx={{ marginRight: \"auto\", marginLeft: \"auto\" }}>\r\n {/* Left Lane: PlayerDetails and Tags (only on large screens) */}\r\n {!isSmallScreen && (\r\n <Grid size={{ xs: 12, lg: 3 }}>\r\n <PlayerDetailsCard\r\n preferredPronouns={playerData.preferredPronouns}\r\n age={playerData.age}\r\n yearsPlaying={playerData.yearsPlaying}\r\n discordUsername={playerData.discordUsername}\r\n preferredGames={playerData.preferredGames}\r\n />\r\n {tagsElement}\r\n </Grid>\r\n )}\r\n\r\n {/* Right Side: All other cards */}\r\n <Grid size={{ xs: 12, lg: 6 }}>\r\n <Grid container spacing={3}>\r\n {/* PlayerDisplay Card */}\r\n <Grid size={{ xs: 12, lg: 8 }}>\r\n <PlayerDisplayCard\r\n profilePicture={playerData.profilePicture}\r\n username={playerData.username}\r\n bio={playerData.bio}\r\n preferredPronouns={playerData.preferredPronouns}\r\n />\r\n </Grid>\r\n\r\n {/* Render DetailsCard in small screens */}\r\n {isSmallScreen && (\r\n <Grid size={{ xs: 12, lg: 3 }}>\r\n <PlayerDetailsCard\r\n preferredPronouns={playerData.preferredPronouns}\r\n age={playerData.age}\r\n yearsPlaying={playerData.yearsPlaying}\r\n discordUsername={playerData.discordUsername}\r\n preferredGames={playerData.preferredGames}\r\n />\r\n </Grid>\r\n )}\r\n\r\n {/* PlayerPromptCards */}\r\n {blurbs.map((blurb, index) => (\r\n <Grid size={{ xs: 12, lg: 8 }} key={index}>\r\n <PlayerPromptCard\r\n title={blurb.title}\r\n description={blurb.description}\r\n />\r\n </Grid>\r\n ))}\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n </Box>\r\n </NoSsr>\r\n );\r\n}\r\n","\"use client\"\r\nimport React from 'react';\r\nimport FormControlLabel from '@mui/material/FormControlLabel';\r\nimport Checkbox from '@mui/material/Checkbox';\r\nimport Box from '@mui/material/Box';\r\n\r\ninterface ExpiredTablesFilterProps {\r\n includeExpiredTables: boolean;\r\n onChange: (include: boolean) => void;\r\n}\r\n\r\nconst ExpiredTablesFilter: React.FC<ExpiredTablesFilterProps> = ({\r\n includeExpiredTables,\r\n onChange\r\n}) => {\r\n return (\r\n <Box sx={{ mt: 2 }}>\r\n <FormControlLabel\r\n control={\r\n <Checkbox\r\n checked={includeExpiredTables}\r\n onChange={(e) => onChange(e.target.checked)}\r\n color=\"primary\"\r\n />\r\n }\r\n label=\"Show expired tables\"\r\n />\r\n </Box>\r\n );\r\n};\r\n\r\nexport default ExpiredTablesFilter;\r\n","\"use client\";\n\nimport React from 'react';\nimport Typography from '@mui/material/Typography';\nimport FormControl from '@mui/material/FormControl';\nimport RadioGroup from '@mui/material/RadioGroup';\nimport FormControlLabel from '@mui/material/FormControlLabel';\nimport Radio from '@mui/material/Radio';\n\ninterface SortOptionsProps {\n defaultValue?: string;\n onChange?: (sortOption: string) => void;\n}\n\nconst SORT_OPTIONS = [\n { id: 'relevance', label: 'Relevance' },\n { id: 'newest', label: 'Newest' },\n { id: 'popular', label: 'Most Popular' },\n];\n\nconst SortOptions: React.FC<SortOptionsProps> = ({\n defaultValue = 'relevance',\n onChange\n}) => {\n const handleSortChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n onChange?.(event.target.value);\n };\n\n return (\n <>\n <Typography variant=\"h6\" gutterBottom>\n Sort By\n </Typography>\n <FormControl>\n <RadioGroup defaultValue={defaultValue} onChange={handleSortChange}>\n {SORT_OPTIONS.map((option) => (\n <FormControlLabel\n key={option.id}\n value={option.id}\n control={<Radio />}\n label={option.label}\n />\n ))}\n </RadioGroup>\n </FormControl>\n </>\n );\n};\n\nexport default SortOptions;\n","\"use client\"\r\nimport React from 'react';\r\nimport Typography from '@mui/material/Typography';\r\nimport Box from '@mui/material/Box';\r\nimport Autocomplete from '@mui/material/Autocomplete';\r\nimport TextField from '@mui/material/TextField';\r\nimport Popper, { PopperProps } from '@mui/material/Popper';\r\nimport {Tag} from '@/types/tag';\r\nimport Divider from '@mui/material/Divider';\r\nimport Chip from \"@/components/shared/Chip\";\r\n\r\ninterface TagsFilterProps {\r\n initialSelectedTags?: {\r\n mustHave: number[];\r\n mustNotHave: number[];\r\n shouldHaveAtLeastOne: number[];\r\n };\r\n onChange?: (selectedTags: {\r\n mustHave: number[];\r\n mustNotHave: number[];\r\n shouldHaveAtLeastOne: number[];\r\n }) => void;\r\n tags: Tag[];\r\n}\r\n\r\ntype TagCategory = 'mustHave' | 'mustNotHave' | 'shouldHaveAtLeastOne';\r\n\r\n/**\r\n * Component for filtering search results by tags\r\n * Uses Autocomplete for interactive tag selection similar to PlayerTagsEdit\r\n * Provides three separate sections for tags: must haves, must not haves, and should contain at least one\r\n */\r\nconst TagsFilter: React.FC<TagsFilterProps> = ({ \r\n onChange, tags: Tags = [], initialSelectedTags\r\n}) => {\r\n const [mustHaveTags, setMustHaveTags] = React.useState<number[]>(initialSelectedTags?.mustHave || []);\r\n const [mustNotHaveTags, setMustNotHaveTags] = React.useState<number[]>(initialSelectedTags?.mustNotHave || []);\r\n const [shouldHaveAtLeastOneTags, setShouldHaveAtLeastOneTags] = React.useState<number[]>(initialSelectedTags?.shouldHaveAtLeastOne || []);\r\n \r\n // Update state when initialSelectedTags changes\r\n React.useEffect(() => {\r\n if (initialSelectedTags) {\r\n setMustHaveTags(initialSelectedTags.mustHave || []);\r\n setMustNotHaveTags(initialSelectedTags.mustNotHave || []);\r\n setShouldHaveAtLeastOneTags(initialSelectedTags.shouldHaveAtLeastOne || []);\r\n }\r\n }, [initialSelectedTags]);\r\n\r\n Tags = !!Tags ? Tags : [];\r\n \r\n const [inputValues, setInputValues] = React.useState({\r\n mustHave: '',\r\n mustNotHave: '',\r\n shouldHaveAtLeastOne: ''\r\n });\r\n\r\n // Convert tags to format needed for Autocomplete\r\n const tagOptions = React.useMemo(() => {\r\n console.log(\"available tags: \" + JSON.stringify(Tags))\r\n console.log(!Tags)\r\n if (!Tags || Tags.length === 0 || !Tags.map) return [];\r\n return Tags.map(tag => ({\r\n value: tag.id,\r\n label: tag.label\r\n }));\r\n }, [Tags]);\r\n\r\n const handleTagChange = (tagId: number, category: TagCategory) => {\r\n let newTags: number[] = [];\r\n \r\n switch (category) {\r\n case 'mustHave':\r\n newTags = mustHaveTags.includes(tagId)\r\n ? mustHaveTags.filter(id => id !== tagId)\r\n : [...mustHaveTags, tagId];\r\n setMustHaveTags(newTags);\r\n break;\r\n case 'mustNotHave':\r\n newTags = mustNotHaveTags.includes(tagId)\r\n ? mustNotHaveTags.filter(id => id !== tagId)\r\n : [...mustNotHaveTags, tagId];\r\n setMustNotHaveTags(newTags);\r\n break;\r\n case 'shouldHaveAtLeastOne':\r\n newTags = shouldHaveAtLeastOneTags.includes(tagId)\r\n ? shouldHaveAtLeastOneTags.filter(id => id !== tagId)\r\n : [...shouldHaveAtLeastOneTags, tagId];\r\n setShouldHaveAtLeastOneTags(newTags);\r\n break;\r\n }\r\n \r\n if (onChange) {\r\n onChange({\r\n mustHave: category === 'mustHave' ? newTags : mustHaveTags,\r\n mustNotHave: category === 'mustNotHave' ? newTags : mustNotHaveTags,\r\n shouldHaveAtLeastOne: category === 'shouldHaveAtLeastOne' ? newTags : shouldHaveAtLeastOneTags\r\n });\r\n }\r\n };\r\n\r\n // Render selected tags as labels with remove buttons\r\n const renderSelectedTags = (selectedTags: number[], category: TagCategory) => {\r\n const tagValues: Tag[] = [];\r\n\r\n if (!Tags || Tags.length === 0 || !Tags.map) return null;\r\n Tags.forEach((tag) => {\r\n if (selectedTags.includes(tag.id)) {\r\n tagValues.push(tag);\r\n }\r\n });\r\n\r\n if (tagValues.length === 0) {\r\n return null;\r\n }\r\n\r\n return (\r\n <Box sx={{ display: 'flex', flexWrap: 'wrap', gap: 1, mb: 2 }}>\r\n {tagValues.map((tag) => (\r\n <Chip\r\n key={tag.id}\r\n tag={tag}\r\n removeCallback={(tagId) => handleTagChange(tagId, category)}\r\n />\r\n ))}\r\n </Box>\r\n );\r\n };\r\n\r\n // Helper function to create an Autocomplete component for a specific category\r\n const createTagSelector = (category: TagCategory, label: string) => {\r\n const selectedTags = \r\n category === 'mustHave' \r\n ? mustHaveTags \r\n : category === 'mustNotHave' \r\n ? mustNotHaveTags \r\n : shouldHaveAtLeastOneTags;\r\n \r\n return (\r\n <>\r\n <Typography variant=\"subtitle1\" gutterBottom sx={{ mt: 2 }}>\r\n {label}\r\n </Typography>\r\n \r\n {renderSelectedTags(selectedTags, category)}\r\n \r\n <Autocomplete\r\n key={`${category}-${selectedTags.join('-')}`}\r\n options={tagOptions}\r\n filterOptions={(options, state) => {\r\n // Determine which tags to exclude based on the current category\r\n const tagsToExclude = new Set<number>();\r\n \r\n // Always exclude tags already selected in the current category\r\n selectedTags.forEach(id => tagsToExclude.add(id));\r\n \r\n // Exclude tags selected in other categories\r\n if (category !== 'mustHave') {\r\n mustHaveTags.forEach(id => tagsToExclude.add(id));\r\n }\r\n if (category !== 'mustNotHave') {\r\n mustNotHaveTags.forEach(id => tagsToExclude.add(id));\r\n }\r\n if (category !== 'shouldHaveAtLeastOne') {\r\n shouldHaveAtLeastOneTags.forEach(id => tagsToExclude.add(id));\r\n }\r\n \r\n return options\r\n .filter(\r\n (option) =>\r\n // Exclude options already selected in any category\r\n !tagsToExclude.has(option.value) &&\r\n // Filter based on user input\r\n option.label.toLowerCase().includes(state.inputValue.toLowerCase())\r\n )\r\n .slice(0, 3); // Show up to 3 results\r\n }}\r\n value={null} // Clearing the selected value immediately\r\n inputValue={inputValues[category]} // Bind the input value to state\r\n onInputChange={(event, newInputValue) => {\r\n // Check if this is clearing after selection\r\n if (event && event.type === 'change') {\r\n setInputValues({\r\n ...inputValues,\r\n [category]: newInputValue\r\n });\r\n }\r\n }}\r\n onChange={(event, newValue) => {\r\n if (newValue) {\r\n handleTagChange(newValue.value, category); // Update selected tags\r\n }\r\n // Clear the text box after selection\r\n setInputValues({\r\n ...inputValues,\r\n [category]: ''\r\n });\r\n }}\r\n slots={{ popper: CustomPopper }}\r\n renderInput={(params) => <TextField {...params} label={`Select ${label}`} />}\r\n />\r\n </>\r\n );\r\n };\r\n\r\n return (\r\n <>\r\n <Typography variant=\"h6\" gutterBottom>\r\n Tags\r\n </Typography>\r\n \r\n {createTagSelector('mustHave', 'Must Have Tags')}\r\n \r\n <Divider sx={{ my: 2 }} />\r\n \r\n {createTagSelector('mustNotHave', 'Must Not Have Tags')}\r\n \r\n <Divider sx={{ my: 2 }} />\r\n \r\n {createTagSelector('shouldHaveAtLeastOne', 'Should Contain At Least One Tag')}\r\n </>\r\n );\r\n};\r\n\r\n// Custom popper for dropdown placement\r\nconst CustomPopper = (props: PopperProps) => {\r\n return (\r\n <Popper\r\n {...props}\r\n modifiers={[\r\n {\r\n name: \"preventOverflow\",\r\n options: {\r\n boundary: \"viewport\", // Prevent the Popper from going outside the viewport\r\n },\r\n },\r\n {\r\n name: \"offset\",\r\n options: {\r\n offset: [0, -10], // Set negative vertical offset (adjust value as needed)\r\n },\r\n },\r\n ]}\r\n placement=\"top-start\" // Position the dropdown above the input field\r\n />\r\n );\r\n};\r\n\r\nexport default TagsFilter;","import React, { useEffect } from 'react';\r\nimport Typography from '@mui/material/Typography';\r\nimport TextField from '@mui/material/TextField';\r\nimport FormControlLabel from '@mui/material/FormControlLabel';\r\nimport Checkbox from '@mui/material/Checkbox';\r\nimport Box from '@mui/material/Box';\r\n\r\ninterface TextSearchCardProps {\r\n onChange?: (textSearch: { query: string; titleOnly: boolean }) => void;\r\n selectedTypes: string[];\r\n initialTextSearch?: {\r\n query: string;\r\n titleOnly: boolean;\r\n };\r\n}\r\n\r\n/**\r\n * Component for searching text within tables and events\r\n * Only shown when table or event types are selected\r\n */\r\nconst TextSearchCard: React.FC<TextSearchCardProps> = ({ onChange, selectedTypes, initialTextSearch }) => {\r\n const [query, setQuery] = React.useState<string>(initialTextSearch?.query || '');\r\n const [titleOnly, setTitleOnly] = React.useState<boolean>(initialTextSearch?.titleOnly || false);\r\n\r\n // Update state when initialTextSearch changes\r\n useEffect(() => {\r\n if (initialTextSearch) {\r\n setQuery(initialTextSearch.query || '');\r\n setTitleOnly(initialTextSearch.titleOnly || false);\r\n }\r\n }, [initialTextSearch]);\r\n\r\n // Check if we should show this card (only when table or event is selected)\r\n const shouldShow = selectedTypes.includes('table') || selectedTypes.includes('event');\r\n\r\n if (!shouldShow) {\r\n return null;\r\n }\r\n\r\n const handleQueryChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n const newQuery = e.target.value;\r\n setQuery(newQuery);\r\n\r\n if (onChange) {\r\n onChange({ query: newQuery, titleOnly });\r\n }\r\n };\r\n\r\n const handleTitleOnlyChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n const newTitleOnly = e.target.checked;\r\n setTitleOnly(newTitleOnly);\r\n\r\n if (onChange) {\r\n onChange({ query, titleOnly: newTitleOnly });\r\n }\r\n };\r\n\r\n return (\r\n <>\r\n <Typography variant=\"h6\" gutterBottom>\r\n Text Search\r\n </Typography>\r\n <Box sx={{ mb: 2 }}>\r\n <TextField\r\n fullWidth\r\n label=\"Search in title and description\"\r\n variant=\"outlined\"\r\n value={query}\r\n onChange={handleQueryChange}\r\n placeholder=\"Enter search terms...\"\r\n sx={{ mb: 1 }}\r\n />\r\n <FormControlLabel\r\n control={\r\n <Checkbox \r\n checked={titleOnly}\r\n onChange={handleTitleOnlyChange}\r\n />\r\n }\r\n label=\"Search in title only\"\r\n />\r\n </Box>\r\n </>\r\n );\r\n};\r\n\r\nexport default TextSearchCard;\r\n","\"use client\";\n\nimport React, { useEffect } from 'react';\nimport Typography from '@mui/material/Typography';\nimport FormGroup from '@mui/material/FormGroup';\nimport FormControlLabel from '@mui/material/FormControlLabel';\nimport Checkbox from '@mui/material/Checkbox';\n\ninterface TypeFilterProps {\n types: { id: string; label: string }[];\n initialSelectedTypes?: string[];\n onChange?: (selectedTypes: string[]) => void;\n}\n\n/**\n * Component for filtering search results by type (player, event, table)\n */\nconst TypeFilter: React.FC<TypeFilterProps> = ({ types, initialSelectedTypes = [], onChange }) => {\n const [selectedTypes, setSelectedTypes] = React.useState<string[]>(initialSelectedTypes);\n\n // Update state when initialSelectedTypes changes\n useEffect(() => {\n setSelectedTypes(initialSelectedTypes);\n }, [initialSelectedTypes]);\n\n const handleTypeChange = (typeId: string) => {\n const newSelectedTypes = selectedTypes.includes(typeId)\n ? selectedTypes.filter(id => id !== typeId)\n : [...selectedTypes, typeId];\n\n setSelectedTypes(newSelectedTypes);\n\n if (onChange) {\n onChange(newSelectedTypes);\n }\n };\n\n return (\n <>\n <Typography variant=\"h6\" gutterBottom>\n Type\n </Typography>\n <FormGroup>\n {types.map((type) => (\n <FormControlLabel\n key={type.id}\n control={\n <Checkbox \n checked={selectedTypes.includes(type.id)}\n onChange={() => handleTypeChange(type.id)}\n disabled={type.id === 'event'}\n title={type.id === 'event' ? 'Coming soon! Currently only player and table search are supported.' : ''}\n />\n }\n label={type.label}\n />\n ))}\n </FormGroup>\n </>\n );\n};\n\nexport default TypeFilter;\n","\"use client\"\nimport React, { useEffect } from 'react';\nimport Box from '@mui/material/Box';\nimport Divider from '@mui/material/Divider';\nimport Button from '@mui/material/Button';\nimport SearchIcon from '@mui/icons-material/Search';\nimport TypeFilter from './Filters/TypeFilter';\nimport TagsFilter from './Filters/TagsFilter';\nimport TextSearchCard from './Filters/TextSearchCard';\nimport ExpiredTablesFilter from './Filters/ExpiredTablesFilter';\nimport { Tag } from '@/types/tag';\n\ninterface FiltersContainerProps {\n initialSelectedTypes?: string[];\n initialSelectedTags?: {\n mustHave: number[];\n mustNotHave: number[];\n shouldHaveAtLeastOne: number[];\n };\n initialTextSearch?: {\n query: string;\n titleOnly: boolean;\n };\n includeExpiredTables?: boolean;\n onTypeChange?: (selectedTypes: string[]) => void;\n onTagChange?: (selectedTags: {\n mustHave: number[];\n mustNotHave: number[];\n shouldHaveAtLeastOne: number[];\n }) => void;\n onTextSearchChange?: (textSearch: { query: string; titleOnly: boolean }) => void;\n onIncludeExpiredTablesChange?: (include: boolean) => void;\n onSubmit?: () => void;\n tags: Tag[];\n searchTypes: { id: string; label: string }[];\n}\n\n/**\n * Container component that combines all filter components\n */\nconst FiltersContainer: React.FC<FiltersContainerProps> = ({\n initialSelectedTypes = [],\n initialSelectedTags,\n initialTextSearch,\n includeExpiredTables = false,\n onTypeChange,\n onTagChange,\n onTextSearchChange,\n onIncludeExpiredTablesChange,\n onSubmit,\n tags,\n searchTypes\n}) => {\n // Track selected types to conditionally show TextSearchCard and ExpiredTablesFilter\n const [selectedTypes, setSelectedTypes] = React.useState<string[]>(initialSelectedTypes);\n\n // Update state when initialSelectedTypes changes\n useEffect(() => {\n setSelectedTypes(initialSelectedTypes);\n }, [initialSelectedTypes]);\n\n // Handler for type changes\n const handleTypeChange = (types: string[]) => {\n setSelectedTypes(types);\n if (onTypeChange) {\n onTypeChange(types);\n }\n };\n\n return (\n <Box>\n {/* Type Filters */}\n <TypeFilter \n types={searchTypes}\n initialSelectedTypes={initialSelectedTypes}\n onChange={handleTypeChange}\n />\n\n <Divider sx={{ my: 2 }} />\n\n {/* Text Search - only shown when table or event is selected */}\n <TextSearchCard \n selectedTypes={selectedTypes}\n initialTextSearch={initialTextSearch}\n onChange={onTextSearchChange}\n />\n\n {/* Only show divider if TextSearchCard is visible */}\n {(selectedTypes.includes('table') || selectedTypes.includes('event')) && (\n <Divider sx={{ my: 2 }} />\n )}\n\n {/* Tags Filter */}\n <TagsFilter\n tags={tags}\n initialSelectedTags={initialSelectedTags}\n onChange={onTagChange} \n />\n\n <Divider sx={{ my: 2 }} />\n\n {/* Only show the expired tables filter when 'table' is selected */}\n {selectedTypes.includes('table') && (\n <>\n <ExpiredTablesFilter\n includeExpiredTables={includeExpiredTables}\n onChange={onIncludeExpiredTablesChange || (() => {})}\n />\n <Divider sx={{ my: 2 }} />\n </>\n )}\n\n {/* Submit Button */}\n <Box sx={{ display: 'flex', justifyContent: 'center', mt: 2 }}>\n <Button\n variant=\"contained\"\n color=\"primary\"\n size=\"large\"\n startIcon={<SearchIcon />}\n onClick={onSubmit}\n sx={{\n width: '100%',\n py: 1.5,\n borderRadius: 2,\n boxShadow: '0px 4px 10px rgba(0, 0, 0, 0.1)',\n background: 'linear-gradient(135deg, rgba(25, 118, 210, 0.8), rgba(25, 118, 210, 1))',\n '&:hover': {\n background: 'linear-gradient(135deg, rgba(25, 118, 210, 0.9), rgba(25, 118, 210, 1))',\n boxShadow: '0px 6px 15px rgba(0, 0, 0, 0.2)',\n }\n }}\n >\n Search\n </Button>\n </Box>\n </Box>\n );\n};\n\nexport default FiltersContainer;","\"use client\"\nimport React from 'react';\nimport ScrollableResultsList from './ScrollableResultsList';\nimport { SearchResultItem } from '@/types/search';\nimport { Tag } from '@/types/tag';\n\nexport interface PlayersScrollableListProps {\n results: SearchResultItem[];\n tags: Tag[];\n maxHeight?: number | string;\n onResultClick?: (id: number) => void;\n}\n\n/**\n * Thin wrapper to show only player results in a scrollable list.\n */\nconst PlayersScrollableList: React.FC<PlayersScrollableListProps> = ({\n results,\n tags,\n maxHeight,\n onResultClick,\n}) => {\n const players = (results || []).filter((r): r is SearchResultItem & { type: 'player' } => r?.type === 'player');\n const handleClick = (id: number) => onResultClick?.(id);\n\n return (\n <ScrollableResultsList\n results={players}\n tags={tags}\n maxHeight={maxHeight}\n onResultClick={(id, type) => {\n if (type === 'player') handleClick(id);\n }}\n />\n );\n};\n\nexport default PlayersScrollableList;\n","\"use client\";\n\nimport React from 'react';\r\nimport BaseSearchResultCard from './BaseSearchResultCard';\r\nimport { Tag } from '@/types/tag';\r\n\r\ninterface SearchResultCardProps {\r\n result: any;\r\n onClick?: (id: number) => void;\r\n tags: Tag[];\r\n}\r\n\r\n/**\r\n * @deprecated Use specialized card components (PlayerResultCard, TableResultCard, EventResultCard) instead\r\n * This component is kept for backward compatibility\r\n */\r\nconst SearchResultCard: React.FC<SearchResultCardProps> = ({ \r\n result,\r\n onClick,\r\n tags,\r\n}) => {\r\n return (\r\n <BaseSearchResultCard result={result} onClick={onClick} tags={tags}>\r\n {/* No specialized content for the generic card */}\r\n </BaseSearchResultCard>\r\n );\r\n};\r\n\r\nexport default SearchResultCard;","import React, { useState, useEffect } from 'react';\nimport Grid from '@mui/material/Grid';\nimport Card from '@mui/material/Card';\nimport CardHeader from '@mui/material/CardHeader';\nimport CardContent from '@mui/material/CardContent';\nimport Box from '@mui/material/Box';\nimport CircularProgress from '@mui/material/CircularProgress';\nimport { useMediaQuery, useTheme } from '@mui/material';\nimport FiltersContainer from './FiltersContainer';\nimport ResultsContainer from './ResultsContainer';\nimport { SearchResultItem, PaginationData, SearchCriteria } from '@/types/search';\nimport { Tag } from '@/types/tag';\n\ninterface SearchPageLayoutProps {\n /**\n * Search results to display\n */\n results: SearchResultItem[];\n\n /**\n * Pagination information\n */\n pagination?: PaginationData;\n\n /**\n * Optional callback for when the packet changes\n */\n onPacketChange?: (packet: number) => void;\n\n /**\n * Optional title for the search page\n */\n title?: string;\n\n /**\n * Initial selected types for the type filter\n */\n initialSelectedTypes?: string[];\n\n /**\n * Initial selected tags for the tag filter\n */\n initialSelectedTags?: {\n mustHave: number[];\n mustNotHave: number[];\n shouldHaveAtLeastOne: number[];\n };\n\n /**\n * Initial text search values\n */\n initialTextSearch?: {\n query: string;\n titleOnly: boolean;\n };\n\n /**\n * Include expired tables option\n */\n includeExpiredTables?: boolean;\n\n /**\n * Optional callback for when a type filter changes\n */\n onTypeChange?: (selectedTypes: string[]) => void;\n\n /**\n * Optional callback for when tag filter changes\n */\n onTagChange?: (selectedTags: {\n mustHave: number[];\n mustNotHave: number[];\n shouldHaveAtLeastOne: number[];\n }) => void;\n\n /**\n * Optional callback for when text search changes\n */\n onTextSearchChange?: (textSearch: { query: string; titleOnly: boolean }) => void;\n\n /**\n * Optional callback for when include expired tables changes\n */\n onIncludeExpiredTablesChange?: (include: boolean) => void;\n\n allTags: Tag[];\n validTags: Tag[];\n\n /**\n * Optional callback for when the search button is clicked.\n * If provided, SearchPageLayout will call this when it determines a backend search is needed.\n */\n onSubmit?: (criteria: SearchCriteria) => void;\n\n /**\n * Is the search loading?\n */\n isLoading?: boolean;\n\n /**\n * Optional callback for when a result is clicked\n */\n onResultClick?: (id: number, type: \"player\" | \"event\" | \"table\") => void;\n searchTypes: { id: string; label: string }[];\n}\n\n/**\n * Layout component for the search page with responsive design\n * - Title bar at the top\n * - Two containers side by side on desktop\n * - Right container takes 9 lanes on desktop, 12 on mobile\n * - Left container takes 3 lanes on desktop, appears above results on mobile\n */\nexport default function SearchPageLayout({\n results,\n title = 'Search Results',\n initialSelectedTypes = [],\n initialSelectedTags = {\n mustHave: [],\n mustNotHave: [],\n shouldHaveAtLeastOne: []\n },\n initialTextSearch = {\n query: '',\n titleOnly: false\n },\n includeExpiredTables: initialIncludeExpiredTables = false,\n onTypeChange,\n onTagChange,\n onTextSearchChange,\n onIncludeExpiredTablesChange,\n onSubmit,\n onResultClick,\n onPacketChange,\n pagination,\n validTags,\n allTags,\n searchTypes,\n isLoading = false\n}: SearchPageLayoutProps) {\n const theme = useTheme();\n const isMobile = useMediaQuery(theme.breakpoints.down('md'));\n\n // --- Internal Search State ---\n const [selectedTypes, setSelectedTypes] = useState<string[]>(initialSelectedTypes);\n const [selectedTags, setSelectedTags] = useState(initialSelectedTags);\n const [textSearch, setTextSearch] = useState(initialTextSearch);\n const [includeExpiredTables, setIncludeExpiredTables] = useState<boolean>(initialIncludeExpiredTables);\n \n // Update internal state when props change\n useEffect(() => {\n setSelectedTypes(initialSelectedTypes);\n }, [initialSelectedTypes]);\n\n useEffect(() => {\n setSelectedTags(initialSelectedTags);\n }, [initialSelectedTags]);\n\n useEffect(() => {\n setTextSearch(initialTextSearch);\n }, [initialTextSearch]);\n\n useEffect(() => {\n setIncludeExpiredTables(initialIncludeExpiredTables);\n }, [initialIncludeExpiredTables]);\n\n // Handle filter changes and sync with props\n const handleTypeChange = (types: string[]) => {\n setSelectedTypes(types);\n if (onTypeChange) onTypeChange(types);\n };\n\n const handleTagChange = (tags: {\n mustHave: number[];\n mustNotHave: number[];\n shouldHaveAtLeastOne: number[];\n }) => {\n setSelectedTags(tags);\n if (onTagChange) onTagChange(tags);\n };\n\n const handleTextSearchChange = (ts: { query: string; titleOnly: boolean }) => {\n setTextSearch(ts);\n if (onTextSearchChange) onTextSearchChange(ts);\n };\n\n const handleIncludeExpiredTablesChange = (include: boolean) => {\n setIncludeExpiredTables(include);\n if (onIncludeExpiredTablesChange) onIncludeExpiredTablesChange(include);\n };\n\n const handleSubmit = () => {\n const currentCriteria: SearchCriteria = {\n selectedTypes,\n selectedTags,\n textSearch,\n includeExpiredTables\n };\n\n if (onSubmit) {\n onSubmit(currentCriteria);\n }\n };\n\n return (\n <Box sx={{ padding: 2 }}>\n {/* Title Bar */}\n <Card sx={{ marginBottom: 2 }}>\n <CardHeader \n title={title}\n style={{\n background: \"linear-gradient(135deg, rgba(25, 118, 210, 0.8), rgba(25, 118, 210, 1))\",\n color: \"#FFFFFF\",\n fontSize: \"1.5rem\",\n textShadow: \"0px 3px 6px rgba(0, 0, 0, 0.5)\",\n }}\n />\n </Card>\n\n {/* Main Content */}\n <Grid container spacing={2}>\n {/* Filters Section - Desktop view (side by side) or Mobile view (above results) */}\n {/* For desktop: 3 columns on the left */}\n {/* For mobile: full width above results */}\n <Grid size={{ xs: 12, md: 3 }}>\n <Card sx={{ marginBottom: isMobile ? 2 : 0 }}>\n <CardHeader \n title=\"Filters\"\n style={{\n background: \"linear-gradient(135deg, rgba(25, 118, 210, 0.8), rgba(25, 118, 210, 1))\",\n color: \"#FFFFFF\",\n fontSize: \"1.5rem\",\n textShadow: \"0px 3px 6px rgba(0, 0, 0, 0.5)\",\n }}\n />\n <CardContent>\n <FiltersContainer \n initialSelectedTypes={selectedTypes}\n initialSelectedTags={selectedTags}\n initialTextSearch={textSearch}\n includeExpiredTables={includeExpiredTables}\n onTypeChange={handleTypeChange}\n onTagChange={handleTagChange}\n onTextSearchChange={handleTextSearchChange}\n onIncludeExpiredTablesChange={handleIncludeExpiredTablesChange}\n onSubmit={handleSubmit}\n tags={validTags}\n searchTypes={searchTypes}\n />\n </CardContent>\n </Card>\n </Grid>\n\n {/* Results Section */}\n <Grid size={{ xs: 12, md: 9 }}>\n <Card>\n <CardHeader \n title=\"Results\"\n style={{\n background: \"linear-gradient(135deg, rgba(25, 118, 210, 0.8), rgba(25, 118, 210, 1))\",\n color: \"#FFFFFF\",\n fontSize: \"1.5rem\",\n textShadow: \"0px 3px 6px rgba(0, 0, 0, 0.5)\",\n }}\n />\n <CardContent>\n {/* Results content */}\n {isLoading ? (\n <Box sx={{ display: 'flex', justifyContent: 'center', py: 8 }}>\n <CircularProgress size={60} thickness={4} />\n </Box>\n ) : (\n <ResultsContainer \n results={results}\n pagination={pagination}\n onPacketChange={onPacketChange}\n onResultClick={onResultClick}\n tags={allTags}\n />\n )}\n </CardContent>\n </Card>\n </Grid>\n </Grid>\n </Box>\n );\n}","\"use client\"\nimport React from \"react\";\nimport type { TableFormat } from \"@/types/table\";\n\ninterface IGameTableContextType {\n table: TableFormat;\n setTable: React.Dispatch<React.SetStateAction<TableFormat | null>>;\n}\n\ninterface IGameTableProviderProps {\n children: React.ReactNode;\n}\n\nconst GameTableContext = React.createContext<IGameTableContextType | undefined>(undefined);\n\nexport function GameTableProvider(props: IGameTableProviderProps) {\n return <>{props.children}</>;\n}\n\nexport function useGameTableContext(): IGameTableContextType {\n const context = React.useContext(GameTableContext);\n\n if (context) {\n return context;\n }\n\n throw new Error('useGameTableContext is deprecated in the package build. Pass table data through props instead.');\n}\n","\"use client\"\r\nimport { createContext, ReactNode, useContext } from \"react\";\r\n\r\ntype ModalContextType = {\r\n showModal: (content: ReactNode) => void;\r\n hideModal: () => void;\r\n}\r\n\r\nexport const ModalContext = createContext<ModalContextType>({\r\n showModal: (content: ReactNode) => {},\r\n hideModal: () => {},\r\n});\r\n\r\nexport const useModal = () => useContext(ModalContext);","\"use client\"\r\nimport React, { useEffect, useRef } from \"react\";\r\nimport \"./style.css\";\r\n\r\ninterface IModalProps {\r\n onClose: () => void;\r\n children: React.ReactNode;\r\n}\r\n\r\nconst Modal: React.FC<IModalProps> = ({ onClose, children }) => {\r\n const modalRef = useRef<HTMLDivElement>(null);\r\n const previouslyFocusedElement = useRef<HTMLElement | null>(null);\r\n\r\n useEffect(() => {\r\n if (children) {\r\n previouslyFocusedElement.current = document.activeElement as HTMLElement;\r\n modalRef.current?.focus();\r\n }\r\n return () => {\r\n previouslyFocusedElement.current?.focus();\r\n }\r\n }, [children]);\r\n\r\n const handleOnClose = () => {\r\n onClose();\r\n };\r\n\r\n const handleKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\r\n if (e.key !== 'Tab') return;\r\n\r\n const focusableElements = modalRef.current?.querySelectorAll<HTMLElement>(\r\n 'button, [tabindex]:not([tabindex=\"-1\"])'\r\n );\r\n\r\n if (!focusableElements || focusableElements.length === 0) return;\r\n\r\n const first = focusableElements[0];\r\n const last = focusableElements[focusableElements.length - 1];\r\n\r\n if (e.shiftKey) {\r\n // shift + tab\r\n if (document.activeElement === first) {\r\n e.preventDefault();\r\n last.focus();\r\n }\r\n } else {\r\n // tab\r\n if (document.activeElement === last) {\r\n e.preventDefault();\r\n first.focus();\r\n }\r\n }\r\n };\r\n\r\n return (\r\n <div\r\n className=\"modal-overlay\"\r\n onKeyDown={handleKeyDown}\r\n ref={modalRef}\r\n role=\"dialog\"\r\n tabIndex={-1}\r\n >\r\n <div className=\"modal-container\">\r\n <div className=\"modal-control-strip\">\r\n <button onClick={handleOnClose}>X</button>\r\n </div>\r\n <div className=\"modal-content\">\r\n {children}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default Modal;\r\n","\"use client\";\n\nimport React, { ReactNode, useState } from \"react\";\r\nimport { ModalContext } from './ModalContext';\r\nimport Modal from \"@/components/shared/Modal\";\r\n\r\ntype ModalProviderProps = {\r\n children: ReactNode;\r\n}\r\n\r\nexport const ModalProvider = ({ children }: ModalProviderProps) => {\r\n const [modalContent, setModalContent] = useState<null | ReactNode>(null);\r\n\r\n const showModal = (content: ReactNode) => setModalContent(content);\r\n const hideModal = () => setModalContent(null);\r\n\r\n return (\r\n <ModalContext.Provider value={{ showModal, hideModal }}>\r\n {children}\r\n {modalContent && (\r\n <Modal onClose={hideModal}>\r\n {modalContent}\r\n </Modal>\r\n )}\r\n </ModalContext.Provider>\r\n );\r\n}\r\n\r\nexport default ModalProvider;","\"use client\";\n\nimport Image from \"next/image\";\nimport Button from \"@mui/material/Button\";\nimport {Card, CardContent, CardHeader, Typography} from \"@mui/material\";\nimport Grid from \"@mui/material/Grid\";\nimport {renderTagsFromIds} from \"@/components/shared/TagComponents\";\nimport type { Player } from \"@/types/player\";\nimport type { Tag } from \"@/types/tag\";\n\nexport type PlayerHighlightsCardProps = {\n addToTable?: (player: Player) => void;\n allTags: Tag[];\n canChangeDungeonMaster: boolean;\n canEdit: boolean;\n handleAssignToDungeonMaster: (player: Player) => void;\n isWaitList?: boolean;\n player: Player;\n removeFromTable: (player: Player) => void;\n}\n\nexport const PlayerHighlightsCard = function(props: PlayerHighlightsCardProps) {\n const {\n allTags,\n canChangeDungeonMaster,\n canEdit,\n handleAssignToDungeonMaster,\n isWaitList,\n player,\n removeFromTable\n } = props;\n\n return (\n <Card elevation={3} sx={{ backgroundColor: canEdit ? \"#fffbea\" : \"#f5f9fa\", marginBottom:\"6px\" }}>\n <CardContent>\n <Grid container spacing={2} direction=\"column\">\n <Grid container direction=\"row\">\n <Grid>\n <Image alt={player.username + \"'s profile pic\"} height={64} src={player.miniPic || \"\"} width={64} />\n </Grid>\n <Grid>\n <Typography variant=\"h5\">{player.username}</Typography>\n </Grid>\n </Grid>\n <Grid>{renderTagsFromIds(player.tags, allTags)}</Grid>\n </Grid>\n {canEdit && (\n <Grid>\n <Button onClick={() => removeFromTable(player)}>\n { isWaitList ? <p>Deny Player</p> : <p>Remove Player</p> }\n </Button>\n {canChangeDungeonMaster && (\n <Button onClick={() => {\n handleAssignToDungeonMaster(player);\n removeFromTable(player);\n }}>\n <p>Assign to DungeonMaster</p>\n </Button>\n )}\n </Grid>\n )}\n </CardContent>\n </Card>\n )\n}\n\nexport const DMHighlightsCard = function({canEdit, player, allTags}:{canEdit: boolean, player: Player, allTags:Tag[]}) {\n return (\n <Card elevation={3} sx={{ backgroundColor: \"#f5f9fa\", marginBottom:\"6px\" }}>\n <CardHeader slotProps={{title: { variant: \"h4\"}}} title=\"Game Master\"/>\n <CardContent sx={{ backgroundColor: canEdit ? '#fffbea' : 'inherit' }}>\n <Grid container spacing={2} direction=\"column\">\n <Grid>\n <Typography variant=\"h5\">{player.username}</Typography>\n </Grid>\n <Grid container direction=\"row\">\n <Grid>\n <Image alt={player.username + \"'s profile pic\"} height={120} src={player.imageUrl ? player.imageUrl : \"\"} width={256} />\n </Grid>\n <Grid>{renderTagsFromIds(player.tags, allTags)}</Grid>\n <Typography>{player.description}</Typography>\n </Grid>\n </Grid>\n </CardContent>\n </Card>\n )\n}\n","\"use client\";\n\nimport type { ReactNode } from \"react\";\nimport Image from \"next/image\";\nimport Button from \"@mui/material/Button\";\nimport CardHeader from \"@mui/material/CardHeader\";\nimport { Grid, Typography } from \"@mui/material\";\nimport DeleteIcon from \"@mui/icons-material/Delete\";\nimport EditIcon from \"@mui/icons-material/Edit\";\nimport ListIcon from \"@mui/icons-material/List\";\nimport SaveIcon from \"@mui/icons-material/Save\";\nimport { useModal } from \"@/components/TablePage/ModalProvider/ModalContext\";\nimport type { Player } from \"@/types/player\";\nimport type { TableStatus } from \"@/components/TablePage/types\";\n\nexport interface TableActionProps {\n isInEditMode: boolean;\n numPlayers: number;\n onDeleteTable?: () => void | Promise<void>;\n onEditModeChange: (nextValue: boolean) => void;\n onJoinWaitlist?: () => void | Promise<void>;\n onLeaveTable?: () => void | Promise<void>;\n onPromoteWaitlistPlayer?: (playerId: number) => void;\n onSave: () => void;\n slots: number;\n tableStatus: TableStatus;\n waitlistPlayers: Player[];\n}\n\nexport default function TableActionsBar(props: TableActionProps) {\n const { hideModal, showModal } = useModal();\n const {\n isInEditMode,\n numPlayers,\n onDeleteTable,\n onEditModeChange,\n onJoinWaitlist,\n onLeaveTable,\n onPromoteWaitlistPlayer,\n onSave,\n slots,\n tableStatus,\n waitlistPlayers,\n } = props;\n const {isOwner, isPlayer, isDM, onWaitlist} = tableStatus;\n\n const canEditTable = isOwner && !isInEditMode;\n const canSaveTable = isOwner && isInEditMode;\n const canViewWaitlist = isOwner || isDM || waitlistPlayers.length > 0;\n\n const renderPlayerWaitlistModalContent = (canMovePlayersToTable?: boolean): ReactNode => {\n if (waitlistPlayers.length === 0) {\n return <p>Waitlist is empty!</p>;\n }\n\n return (\n <div className=\"flex flex-col items-center\">\n <CardHeader slotProps={{title: {variant: \"h4\"}}} title=\"Waitlist Players: \"/>\n <ul className=\"gap-8\">\n {waitlistPlayers.map((player) => (\n <li\n className={`${canMovePlayersToTable ? 'bg-amber-100 cursor-pointer' : 'bg-gray-200'} mb-8 flex flex-row flex-start space-between justify-center items-center gap-3 p-2 rounded`}\n key={player.id}\n onClick={() => canMovePlayersToTable ? onPromoteWaitlistPlayer?.(player.id) : undefined}\n tabIndex={0}\n >\n <Image\n alt={player.username + \"'s profile pic\"}\n height={64}\n src={player.miniPic || \"\"}\n width={64}\n />\n <div>{player.username}</div>\n </li>\n ))}\n </ul>\n <button onClick={() => hideModal()}>close modal</button>\n </div>\n )\n }\n\n return (\n <Grid container direction=\"column\" spacing={1}>\n <Grid container direction=\"row\">\n <Typography color=\"white\" sx={{ textShadow:'4px 4px 6px rgba(0, 0, 0, 0.5)' }}>\n Players: {numPlayers} / {slots}\n </Typography>\n </Grid>\n\n <Grid container direction=\"row\">\n {!isOwner && !isPlayer && !isDM && !onWaitlist && (\n <Button onClick={() => onJoinWaitlist?.()} sx={buttonStyle}>\n Join Waitlist\n </Button>\n )}\n\n {!isOwner && (isPlayer || onWaitlist) && (\n <Button onClick={() => onLeaveTable?.()} sx={buttonStyle}>\n {onWaitlist ? \"Leave Waitlist\" : \"Leave Table\"}\n </Button>\n )}\n\n { canEditTable ? (\n <>\n <Button onClick={() => onEditModeChange(true)} sx={buttonStyle} endIcon={<EditIcon/>}>\n Edit\n </Button>\n {canViewWaitlist ? (\n <Button\n endIcon={<ListIcon />}\n onClick={() => showModal(renderPlayerWaitlistModalContent(false))}\n sx={buttonStyle}\n >\n View Waitlist\n </Button>\n ) : null}\n </>\n ) : canSaveTable ? (\n <>\n <Button onClick={onSave} sx={buttonStyle} endIcon={<SaveIcon/>}>\n Save\n </Button>\n <Button onClick={() => onEditModeChange(false)} sx={buttonStyle}>\n Cancel\n </Button>\n <Button\n endIcon={<ListIcon />}\n onClick={() => showModal(renderPlayerWaitlistModalContent(true))}\n sx={buttonStyle}\n >\n Edit Waitlist\n </Button>\n </>\n ) : null}\n\n { isOwner && (\n <Button onClick={() => onDeleteTable?.()} sx={buttonStyle} endIcon={<DeleteIcon/>}>\n Delete Table\n </Button>\n )}\n </Grid>\n </Grid>\n )\n}\n\nconst buttonStyle = {\n marginLeft: \"3px\",\n backgroundColor:\"blue\",\n color:\"white\",\n borderRadius:\"5px\",\n};\n","\"use client\"\r\n\r\nimport React, {Dispatch, SetStateAction, useEffect} from 'react';\r\n\r\ninterface IAutoResizingTextareaProps {\r\n isInEditMode: boolean;\r\n onChange: Dispatch<SetStateAction<string>>;\r\n textareaRef: React.RefObject<HTMLTextAreaElement | null>;\r\n value: string;\r\n}\r\n\r\nconst AutoResizingTextarea: React.FC<IAutoResizingTextareaProps> = (props: IAutoResizingTextareaProps) => {\r\n const { isInEditMode, onChange, textareaRef, value } = props;\r\n\r\n useEffect(() => {\r\n if (isInEditMode && textareaRef.current) {\r\n const textarea = textareaRef.current;\r\n\r\n textarea.style.height = 'auto';\r\n textarea.style.height = `${textarea.scrollHeight}px`;\r\n }\r\n }, [isInEditMode, textareaRef, value]); // Run effect when entering edit mode or value changes\r\n\r\n return (\r\n <textarea\r\n ref={textareaRef}\r\n value={value}\r\n onChange={(e) => onChange(e.target.value)}\r\n style={{\r\n backgroundColor: '#fffbea',\r\n overflow: 'hidden',\r\n resize: 'none',\r\n width: '100%'\r\n }}\r\n />\r\n );\r\n}\r\n\r\nexport default AutoResizingTextarea;\r\n","\"use client\";\r\n\r\nimport React, { useState, useEffect } from 'react';\r\nimport { Typography } from '@mui/material';\r\n\r\nexport const NextGameCountdown = ({ nextGameTime }: { nextGameTime?: Date | string }) => {\r\n const [timeLeft, setTimeLeft] = useState<string>('');\r\n\r\n useEffect(() => {\r\n if (!nextGameTime) return;\r\n\r\n const timer = setInterval(() => {\r\n const now = new Date().getTime();\r\n const distance = new Date(nextGameTime).getTime() - now;\r\n\r\n if (distance < 0) {\r\n clearInterval(timer);\r\n setTimeLeft('Started');\r\n return;\r\n }\r\n\r\n const days = Math.floor(distance / (1000 * 60 * 60 * 24));\r\n const hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));\r\n const minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));\r\n const seconds = Math.floor((distance % (1000 * 60)) / 1000);\r\n\r\n let timeString = '';\r\n if (days > 0) timeString += `${days}d `;\r\n if (hours > 0 || days > 0) timeString += `${hours}h `;\r\n timeString += `${minutes}m ${seconds}s`;\r\n\r\n setTimeLeft(timeString);\r\n }, 1000);\r\n\r\n return () => clearInterval(timer);\r\n }, [nextGameTime]);\r\n\r\n if (!nextGameTime) return null;\r\n\r\n return (\r\n <Typography variant=\"body2\" color=\"primary\" sx={{ fontWeight: 'bold' }}>\r\n Next Game: {timeLeft}\r\n </Typography>\r\n );\r\n};\r\n","\"use client\";\r\n\r\nimport React, { useMemo, useState } from \"react\";\r\nimport Autocomplete from \"@mui/material/Autocomplete\";\r\nimport Card from \"@mui/material/Card\";\r\nimport CardContent from \"@mui/material/CardContent\";\r\nimport CardHeader from \"@mui/material/CardHeader\";\r\nimport Grid from \"@mui/material/Grid\";\r\nimport Popper, { PopperProps } from \"@mui/material/Popper\";\r\nimport TextField from \"@mui/material/TextField\";\r\nimport type { Tag } from \"@/types/tag\";\r\nimport Chip from \"@/components/shared/Chip\";\r\n\r\nexport interface TagEditorProps {\r\n title?: string;\r\n selectedTags: Tag[];\r\n possibleTags: Tag[];\r\n onToggleTag: (id: number) => void;\r\n}\r\n\r\nexport function TagEditor({\r\n title = \"Tags\",\r\n selectedTags,\r\n possibleTags,\r\n onToggleTag,\r\n}: TagEditorProps) {\r\n const [inputValue, setInputValue] = useState(\"\");\r\n const selectedIds = useMemo(() => selectedTags.map((tag) => tag.id), [selectedTags]);\r\n\r\n const options = useMemo(\r\n () => possibleTags.map((tag) => ({ value: tag.id, label: tag.label })),\r\n [possibleTags]\r\n );\r\n\r\n return (\r\n <Grid container>\r\n <Grid size={{ xs: 12 }}>\r\n <Card>\r\n <CardHeader\r\n title={title}\r\n style={{\r\n background: \"linear-gradient(135deg, rgba(25, 118, 210, 0.8), rgba(25, 118, 210, 1))\",\r\n color: \"#FFFFFF\",\r\n fontSize: \"1.5rem\",\r\n textShadow: \"0px 3px 6px rgba(0, 0, 0, 0.5)\",\r\n }}\r\n />\r\n <CardContent>\r\n <div className=\"mt-2 flex flex-wrap gap-2\">\r\n {selectedTags.map((tag) => (\r\n <Chip\r\n key={tag.id}\r\n tag={tag}\r\n removeCallback={() => onToggleTag(tag.id)}\r\n />\r\n ))}\r\n </div>\r\n <Grid container spacing={3}>\r\n <Grid sx={{ marginTop: 3, width: \"100%\" }}>\r\n <Autocomplete\r\n key={selectedIds.join(\"-\")}\r\n options={options}\r\n filterOptions={(availableOptions, state) =>\r\n availableOptions\r\n .filter(\r\n (option) =>\r\n !selectedIds.includes(option.value) &&\r\n option.label.toLowerCase().includes(state.inputValue.toLowerCase())\r\n )\r\n .slice(0, 3)\r\n }\r\n value={null}\r\n inputValue={inputValue}\r\n onInputChange={(event, newInputValue) => {\r\n if (event && event.type === \"change\") {\r\n setInputValue(newInputValue);\r\n }\r\n }}\r\n onChange={(event, newValue) => {\r\n if (newValue) {\r\n onToggleTag(newValue.value);\r\n }\r\n setInputValue(\"\");\r\n }}\r\n slots={{ popper: CustomPopper }}\r\n renderInput={(params) => <TextField {...params} label=\"Select Tags\" />}\r\n />\r\n </Grid>\r\n </Grid>\r\n </CardContent>\r\n </Card>\r\n </Grid>\r\n </Grid>\r\n );\r\n}\r\n\r\nconst CustomPopper = (props: PopperProps) => {\r\n return (\r\n <Popper\r\n {...props}\r\n modifiers={[\r\n {\r\n name: \"preventOverflow\",\r\n options: { boundary: \"viewport\" },\r\n },\r\n {\r\n name: \"offset\",\r\n options: { offset: [0, -10] },\r\n },\r\n ]}\r\n placement=\"top-start\"\r\n />\r\n );\r\n};\r\n","\"use client\";\n\nimport { JSX, useEffect, useMemo, useRef, useState } from \"react\";\nimport { Box, Card, CardContent, CardHeader, Typography } from \"@mui/material\";\nimport Grid from \"@mui/material/Grid\";\nimport AutoResizingTextarea from \"@/components/shared/AutoResizingTextarea\";\nimport { TagEditor, generateTagsDisplay } from \"@/components/shared\";\nimport { DMHighlightsCard, PlayerHighlightsCard } from \"@/components/TablePage/players/PlayerHighlightsCard\";\nimport TableActionsBar from \"@/components/TablePage/TableActionsBar\";\nimport type { Player } from \"@/types/player\";\nimport type { TableRecord } from \"@/types/tables\";\nimport type { Tag } from \"@/types/tag\";\nimport type { TablePageLayoutProps } from \"@/components/TablePage/types\";\n\nexport function TablePageLayout(props: TablePageLayoutProps) {\n const { allTags, dungeonMaster, onDeleteTable, onJoinWaitlist, onLeaveTable, onSaveDraft, players, table, tableStatus, waitlistPlayers } = props;\n const textAreaRef = useRef<HTMLTextAreaElement>(null);\n const [isTableInEditMode, setIsTableInEditMode] = useState(false);\n\n const [currentDescription, setCurrentDescription] = useState(table.description);\n const [currentDungeonMaster, setCurrentDungeonMaster] = useState(dungeonMaster);\n const [currentPlayers, setCurrentPlayers] = useState(players);\n const [currentShortDescription, setCurrentShortDescription] = useState(table.shortDescription);\n const [currentTitle, setCurrentTitle] = useState(table.title);\n const [currentWaitlistPlayers, setCurrentWaitlistPlayers] = useState(waitlistPlayers);\n const [currentTagIds, setCurrentTagIds] = useState<number[]>(table.tags ?? []);\n\n useEffect(() => {\n setCurrentDescription(table.description);\n setCurrentDungeonMaster(dungeonMaster);\n setCurrentPlayers(players);\n setCurrentShortDescription(table.shortDescription);\n setCurrentTitle(table.title);\n setCurrentWaitlistPlayers(waitlistPlayers);\n setCurrentTagIds(table.tags ?? []);\n }, [dungeonMaster, players, table, waitlistPlayers]);\n\n const currentTags = useMemo(\n () => allTags.filter((tag) => currentTagIds.includes(tag.id)),\n [allTags, currentTagIds]\n );\n\n const handleAssignToDungeonMaster = (newDungeonMaster: Player) => {\n setCurrentDungeonMaster(newDungeonMaster);\n };\n\n const handleRemovePlayerFromTable = (playerToRemove: Player): void => {\n setCurrentPlayers((prevState) => prevState.filter((player) => player.id !== playerToRemove.id));\n };\n\n const handlePromoteWaitlistPlayer = (playerIdToPromote: number) => {\n setCurrentWaitlistPlayers((prevWaitlist) => {\n const foundPlayer = prevWaitlist.find((player) => player.id === playerIdToPromote);\n if (!foundPlayer) {\n return prevWaitlist;\n }\n\n setCurrentPlayers((prevPlayers) => [...prevPlayers, foundPlayer]);\n return prevWaitlist.filter((player) => player.id !== playerIdToPromote);\n });\n };\n\n const handleToggleTag = (tagId: number) => {\n setCurrentTagIds((prevState) =>\n prevState.includes(tagId)\n ? prevState.filter((id) => id !== tagId)\n : [...prevState, tagId]\n );\n };\n\n const handleSaveTable = () => {\n const nextDraft: TableRecord = {\n ...table,\n description: currentDescription,\n dungeonMaster: String(currentDungeonMaster.id),\n players: currentPlayers.map((player) => player.id),\n shortDescription: currentShortDescription,\n tags: currentTagIds,\n title: currentTitle,\n waitlist: currentWaitlistPlayers.map((player) => player.id),\n };\n\n void onSaveDraft?.(nextDraft);\n setIsTableInEditMode(false);\n };\n\n return (\n <Card\n sx={{\n backgroundColor: isTableInEditMode ? \"lightsalmon\" : \"white\",\n borderRadius: \"5%\",\n p: 2,\n boxShadow: \"0px 8px 15px rgba(25, 118, 210, 0.3)\",\n }}\n >\n <Grid container direction=\"column\">\n <Grid\n container\n direction=\"column\"\n spacing={1}\n sx={{\n px: 2,\n py: 1.5,\n borderRadius: 2,\n background: \"linear-gradient(135deg, rgba(25,118,210,0.8), rgba(25,118,210,1))\",\n textShadow:'4px 4px 6px rgba(0, 0, 0, 0.5)'\n }}\n >\n <Box>\n {isTableInEditMode ? (\n <input\n onChange={(e) => setCurrentTitle(e.target.value)}\n style={{ backgroundColor: '#fffbea' }}\n tabIndex={0}\n type=\"text\"\n value={currentTitle}\n />\n ) : (\n <CardHeader\n title={currentTitle}\n sx={{\n p: 0,\n \"& .MuiCardHeader-title\": {\n color: \"white\",\n fontWeight: 700,\n },\n }}\n />\n )}\n </Box>\n\n {isTableInEditMode ? (\n <input\n onChange={(e) => setCurrentShortDescription(e.target.value)}\n style={{ backgroundColor: '#fffbea' }}\n tabIndex={0}\n type=\"text\"\n value={currentShortDescription}\n />\n ) : (\n <Typography sx={{ color: \"white\", opacity: 0.95 }}>\n {currentShortDescription}\n </Typography>\n )}\n\n <Grid container>\n {isTableInEditMode\n ? renderEditableTags(currentTags, allTags, handleToggleTag)\n : renderTags(currentTagIds, allTags)}\n </Grid>\n\n <TableActionsBar\n isInEditMode={isTableInEditMode}\n numPlayers={currentPlayers.length}\n onDeleteTable={onDeleteTable}\n onEditModeChange={setIsTableInEditMode}\n onJoinWaitlist={onJoinWaitlist}\n onLeaveTable={onLeaveTable}\n onPromoteWaitlistPlayer={handlePromoteWaitlistPlayer}\n onSave={handleSaveTable}\n slots={table.capacity || 0}\n tableStatus={tableStatus}\n waitlistPlayers={currentWaitlistPlayers}\n />\n </Grid>\n\n <Grid container spacing={2} sx={{ mt: 2 }}>\n <Grid size={{xs: 12, md:8}}>\n <Card sx={{ height: \"100%\" }}>\n <CardContent>\n {isTableInEditMode ? (\n <AutoResizingTextarea\n isInEditMode={isTableInEditMode}\n onChange={setCurrentDescription}\n textareaRef={textAreaRef}\n value={currentDescription}\n />\n ) : (\n <Typography sx={{ whiteSpace: \"pre-wrap\" }}>\n {currentDescription}\n </Typography>\n )}\n </CardContent>\n </Card>\n </Grid>\n\n <Grid size={{xs: 12, md:4}}>\n <DMHighlightsCard canEdit={isTableInEditMode} player={currentDungeonMaster} allTags={allTags} />\n\n <Card sx={{ height: \"100%\" }}>\n <CardHeader slotProps={{title: {variant: \"h4\"}}} title=\"Players: \"/>\n <CardContent>\n {currentPlayers.map((player) => (\n <PlayerHighlightsCard\n allTags={allTags}\n canChangeDungeonMaster={tableStatus.isOwner || tableStatus.isDM}\n canEdit={isTableInEditMode}\n handleAssignToDungeonMaster={handleAssignToDungeonMaster}\n key={player.id}\n player={player}\n removeFromTable={handleRemovePlayerFromTable}\n />\n ))}\n </CardContent>\n </Card>\n </Grid>\n </Grid>\n </Grid>\n </Card>\n );\n}\n\nconst renderTags = function (\n tags: number[] | undefined,\n allTags: Tag[] | undefined\n): JSX.Element {\n if (!tags || !allTags) {\n return <></>;\n }\n return (\n <Grid container spacing={1} sx={{ pb: 1.5 }}>\n {tags.map((tagId) => {\n const tag = allTags.find((potentialTag) => tagId === potentialTag.id);\n return tag ? generateTagsDisplay(tag) : <></>;\n })}\n </Grid>\n );\n};\n\nconst renderEditableTags = function (\n selectedTags: Tag[],\n allTags: Tag[],\n onToggleTag: (tagId: number) => void\n): JSX.Element {\n return (\n <Grid size={{ xs: 12 }} sx={{ pb: 1.5 }}>\n <TagEditor\n title=\"Table Tags\"\n possibleTags={allTags.filter((tag) => tag.appliesTo?.tables)}\n selectedTags={selectedTags}\n onToggleTag={onToggleTag}\n />\n </Grid>\n );\n};\n\nexport default TablePageLayout;\n"]}
1
+ {"version":3,"sources":["../src/components/EventPage/editMode/EventEditContext.tsx","../src/components/shared/Chip.tsx","../src/components/shared/TagComponents.tsx","../src/components/EventPage/editMode/EventBannerEdit.tsx","../src/components/EventPage/EventBasicInfo.tsx","../src/components/EventPage/editMode/EventBasicInfoEdit.tsx","../src/components/EventPage/EventBanner.tsx","../src/data/values.tsx","../src/components/TablePage/NextGameLabel.tsx","../src/components/SearchPage/Results/BaseSearchResultCard.tsx","../src/components/SearchPage/Results/PlayerResultCard.tsx","../src/components/SearchPage/Results/TableResultCard.tsx","../src/components/SearchPage/Results/EventResultCard.tsx","../src/components/SearchPage/ResultsContainer.tsx","../src/components/SearchPage/ScrollableResultsList.tsx","../src/components/SearchPage/TablesScrollableList.tsx","../src/components/EventPage/EventTablesCard.tsx","../src/components/EventPage/EventPageLayout.tsx","../src/components/PlayerPage/PlayerDetailsCard.tsx","../src/components/PlayerPage/PlayerDisplayCard.tsx","../src/components/PlayerPage/PlayerTagsCard.tsx","../src/components/PlayerPage/PlayerPromptCard.tsx","../src/components/PlayerPage/PlayerTagsEdit.tsx","../src/components/PlayerPage/PlayerPageLayout.tsx","../src/components/SearchPage/Filters/DistanceFilter.tsx","../src/components/SearchPage/Filters/ExpiredTablesFilter.tsx","../src/components/SearchPage/Filters/SortOptions.tsx","../src/components/SearchPage/Filters/TagsFilter.tsx","../src/components/SearchPage/Filters/TextSearchCard.tsx","../src/components/SearchPage/Filters/TypeFilter.tsx","../src/components/SearchPage/FiltersContainer.tsx","../src/components/SearchPage/PlayersScrollableList.tsx","../src/components/SearchPage/Results/SearchResultCard.tsx","../src/components/SearchPage/SearchPageLayout.tsx","../src/components/shared/NameGenerator.ts","../src/components/TablePage/EditComponents/TagSelector.tsx","../src/components/TablePage/EditComponents/EditTableDetailsForm.tsx","../src/components/TablePage/GameTableProvider/GameTableContext.tsx","../src/components/TablePage/ModalProvider/ModalContext.ts","../src/components/shared/AutoResizingTextarea.tsx","../src/components/shared/NextGameCountdown.tsx","../src/components/shared/TagEditor.tsx","../src/components/shared/UserAgreementModal.tsx","../src/components/TablePage/players/PlayerHighlightsCard.tsx","../src/components/TablePage/TableActionsBar.tsx","../src/components/TablePage/TablePageLayout.tsx","../src/components/TablePage/ModalProvider/ModalProvider.tsx"],"names":["createContext","useState","useEffect","useContext","jsx","Fragment","jsxs","Box","Grid","TextField","Tooltip","IconButton","ColorizeIcon","Button","EditIcon","DeleteIcon","AddIcon","CircularProgress","Dialog","DialogTitle","DialogContent","DialogActions","Card","CardContent","Typography","CancelIcon","CheckCircleIcon","FormControl","InputLabel","Select","MenuItem","useRouter","Avatar","TableRestaurantIcon","Chip","SupervisorAccountIcon","PersonIcon","LinearProgress","EventIcon","CalendarTodayIcon","LocationOnIcon","Pagination","CardHeader","Divider","CardMedia","useMemo","Autocomplete","Popper","useTheme","useMediaQuery","NoSsr","FormControlLabel","Checkbox","defaultValue","RadioGroup","Radio","React","CustomPopper","FormGroup","SearchIcon","CasinoIcon","ReactMarkdown","Link","Image","ListIcon","SaveIcon","useRef","title","CloseIcon","_a"],"mappings":"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","file":"index.cjs","sourcesContent":["\"use client\"\r\nimport React, { createContext, useContext, ReactNode, useState, useEffect } from \"react\";\r\nimport { EventEditContextValue, EventDetails } from \"@/types/event\";\r\n\r\ntype ExtendedEventEditContextValue = EventEditContextValue & {\r\n event: EventDetails | null;\r\n};\r\n\r\n/**\r\n * Default Values for stability\r\n */\r\nconst defaultValue: ExtendedEventEditContextValue = {\r\n isOwner: false,\r\n updateEvent: async () => false,\r\n updateImages: () => {},\r\n event: null,\r\n}\r\n\r\n/**\r\n * Default call (safe fallback)\r\n * Components using this without a provider will behave as non-owner.\r\n */\r\nconst EventEditContext = createContext<ExtendedEventEditContextValue>(defaultValue);\r\n\r\n/**\r\n * Provider props\r\n */\r\ntype EventEditProviderProps = {\r\n value?: Partial<EventEditContextValue>;\r\n initialEvent: EventDetails;\r\n children: ReactNode;\r\n};\r\n\r\n/**\r\n * Provider component\r\n */\r\nexport function EventEditProvider({\r\n value,\r\n initialEvent,\r\n children,\r\n }: EventEditProviderProps) {\r\n const [event, setEvent] = useState<EventDetails>(initialEvent);\r\n\r\n // Update internal state if initialEvent changes (e.g. from parent fetch)\r\n useEffect(() => {\r\n setEvent(initialEvent);\r\n }, [initialEvent]);\r\n\r\n const handleUpdateEvent = async (patch: Partial<EventDetails>) => {\r\n if (value?.updateEvent) {\r\n const result = value.updateEvent(patch);\r\n \r\n // Handle both Promise<boolean> and void/boolean return\r\n if (result instanceof Promise) {\r\n const success = await result;\r\n if (success) {\r\n setEvent(prev => ({ ...prev, ...patch }));\r\n }\r\n return success;\r\n } else {\r\n // If it's a boolean, use it. If void, assume true.\r\n const success = result === false ? false : true;\r\n if (success) {\r\n setEvent(prev => ({ ...prev, ...patch }));\r\n }\r\n return success;\r\n }\r\n }\r\n return false;\r\n };\r\n\r\n /**\r\n * automatically fill in default values if data is missing or incomplete\r\n */\r\n const mergedValue: ExtendedEventEditContextValue = {\r\n ...defaultValue,\r\n ...value,\r\n event,\r\n updateEvent: handleUpdateEvent,\r\n }\r\n\r\n return (\r\n <EventEditContext.Provider value={mergedValue}>\r\n {children}\r\n </EventEditContext.Provider>\r\n );\r\n}\r\n\r\n/**\r\n * Hook for consuming context\r\n */\r\nexport function useEventEdit(): ExtendedEventEditContextValue {\r\n const context = useContext(EventEditContext);\r\n\r\n // Optional guard (useful during development)\r\n if (!context) {\r\n throw new Error(\"useEventEdit must be used within an EventEditProvider\");\r\n }\r\n\r\n return context;\r\n}","import React from \"react\";\r\nimport {Tag} from \"@/types/tag\";\r\n\r\nexport default function Chip({ tag, removeCallback }: { tag: Tag, removeCallback?: (tagId: number) => void }) {\r\n const color = tag.color ?? \"#bfbcbb\";\r\n return (\r\n <>\r\n <span\r\n key={tag.id}\r\n className=\"inline-block text-sm px-3 py-1 rounded-full border-2 font-outlined text-white m-0.5 font-stretch-105% font-sans\"\r\n style={{\r\n borderColor: `color-mix(in srgb, ${color}, black 50%)`,\r\n background: `linear-gradient(160deg, color-mix(in srgb, ${color}, white 10%) 0%, color-mix(in srgb, ${color}, black 60%) 100%)`,\r\n textShadow: \"black 1.5px 1px 1.5px\",\r\n filter: `drop-shadow(2px 2px 1.5px color-mix(in srgb, ${color}, black 80%))`\r\n }}\r\n >\r\n {tag.label}\r\n {removeCallback && (\r\n <button\r\n type=\"button\"\r\n onClick={() => removeCallback(tag.id)}\r\n className=\"ml-2 text-white hover:text-red-700 focus:outline-none pl-0.5 pr-1 cursor-pointer hover:bg-white rounded-full\"\r\n style={{\r\n textShadow: \"black 1px 1px 1px\"\r\n }}\r\n >\r\n X\r\n </button>\r\n )}\r\n </span>\r\n </>\r\n )\r\n\r\n}","\"use client\";\r\n\r\nimport React from \"react\";\r\nimport type { Tag } from \"@/types/tag\";\r\nimport Chip from \"@/components/shared/Chip\";\r\n\r\nexport function generateTagsDisplay(tag: Tag) {\r\n return (\r\n <Chip tag={tag} key={tag.id} />\r\n )\r\n}\r\n\r\nexport function renderTagsFromIds(ids: number[] | undefined, legalTags: Tag[], options: { showEventTag?: boolean, eventTagId?: number } = {}) {\r\n if (!ids || !legalTags || legalTags.length === 0) { return ( <></>) }\r\n const { showEventTag = false, eventTagId } = options;\r\n const validTags = ids\r\n .map((id) => legalTags.find((tag) => tag.id === id))\r\n .filter((tag): tag is Tag => Boolean(tag));\r\n\r\n // Sort tags: event tag (if shown) first, then \"Organizer Run\", then \"Display Only\", then others\r\n const sortedTags = [...validTags].sort((a, b) => {\r\n // Handle event tag priority if enabled\r\n if (showEventTag && eventTagId !== undefined) {\r\n if (a.id === eventTagId && b.id === eventTagId) return 0;\r\n if (a.id === eventTagId) return -1;\r\n if (b.id === eventTagId) return 1;\r\n }\r\n\r\n const priorityOrder = [\"Organizer Run\", \"Display Only\"];\r\n const aIndex = priorityOrder.indexOf(a.label);\r\n const bIndex = priorityOrder.indexOf(b.label);\r\n\r\n if (aIndex !== -1 && bIndex !== -1) {\r\n return aIndex - bIndex;\r\n }\r\n if (aIndex !== -1) return -1;\r\n if (bIndex !== -1) return 1;\r\n return 0;\r\n });\r\n\r\n return sortedTags.map((tag) => generateTagsDisplay(tag));\r\n}\r\n","\"use client\"\r\nimport React, { useState } from \"react\";\r\nimport { useEventEdit } from \"./EventEditContext\";\r\nimport type { EventBannerEditPayload } from \"../EventBanner\";\r\nimport { \r\n Box, \r\n Button, \r\n Grid, \r\n TextField, \r\n IconButton, \r\n Tooltip, \r\n Dialog, \r\n DialogTitle, \r\n DialogContent, \r\n DialogActions,\r\n CircularProgress \r\n} from \"@mui/material\";\r\nimport DeleteIcon from \"@mui/icons-material/Delete\";\r\nimport EditIcon from \"@mui/icons-material/Edit\";\r\nimport AddIcon from \"@mui/icons-material/Add\";\r\nimport ColorizeIcon from \"@mui/icons-material/Colorize\";\r\nimport { generateTagsDisplay } from \"@/components/shared/TagComponents\";\r\n\r\ntype EventBannerEditProps = {\r\n initialValue: EventBannerEditPayload;\r\n onCancel: () => void;\r\n onSave: (payload: Partial<EventBannerEditPayload>) => Promise<void> | void;\r\n};\r\n\r\ntype LinkEditState = {\r\n index: number;\r\n text: string;\r\n url: string;\r\n} | null;\r\n\r\nexport default function EventBannerEdit({\r\n initialValue,\r\n onCancel,\r\n onSave,\r\n }: EventBannerEditProps) {\r\n const { updateImages } = useEventEdit();\r\n const [title, setTitle] = useState(initialValue.title);\r\n const [bannerColor, setBannerColor] = useState(initialValue.bannerColor || \"\");\r\n const [desktopBanner, setDesktopBanner] = useState(initialValue.bannerUrl.desktop);\r\n const [mobileBanner, setMobileBanner] = useState(initialValue.bannerUrl.mobile || \"\");\r\n const [links, setLinks] = useState(initialValue.links);\r\n const [linkToEdit, setLinkToEdit] = useState<LinkEditState>(null);\r\n const [isSaving, setIsSaving] = useState(false);\r\n\r\n const backgroundColor = bannerColor || \"linear-gradient(135deg, rgba(25,118,210,0.8), rgba(25,118,210,1))\";\r\n\r\n const handleSave = async () => {\r\n setIsSaving(true);\r\n try {\r\n const patch: Partial<EventBannerEditPayload> = {};\r\n\r\n if (title !== initialValue.title) {\r\n patch.title = title;\r\n }\r\n\r\n const currentBannerColor = bannerColor || undefined;\r\n const initialBannerColor = initialValue.bannerColor || undefined;\r\n if (currentBannerColor !== initialBannerColor) {\r\n patch.bannerColor = currentBannerColor;\r\n }\r\n\r\n const currentMobile = mobileBanner || undefined;\r\n const initialMobile = initialValue.bannerUrl.mobile || undefined;\r\n if (desktopBanner !== initialValue.bannerUrl.desktop || currentMobile !== initialMobile) {\r\n patch.bannerUrl = {\r\n desktop: desktopBanner,\r\n mobile: currentMobile,\r\n };\r\n }\r\n\r\n // Deep comparison for links\r\n if (JSON.stringify(links) !== JSON.stringify(initialValue.links)) {\r\n patch.links = links;\r\n }\r\n\r\n if (Object.keys(patch).length > 0) {\r\n await onSave(patch);\r\n } else {\r\n onCancel(); // Nothing changed\r\n }\r\n } catch (error) {\r\n console.error(\"Failed to save banner changes\", error);\r\n } finally {\r\n setIsSaving(false);\r\n }\r\n };\r\n\r\n const removeLink = (index: number) => {\r\n setLinks(links.filter((_, i) => i !== index));\r\n };\r\n\r\n const openEditLink = (index: number) => {\r\n setLinkToEdit({\r\n index,\r\n text: links[index].text,\r\n url: links[index].url\r\n });\r\n };\r\n\r\n const saveEditedLink = () => {\r\n if (linkToEdit) {\r\n const newLinks = [...links];\r\n if (linkToEdit.index === -1) {\r\n newLinks.push({ text: linkToEdit.text, url: linkToEdit.url });\r\n } else {\r\n newLinks[linkToEdit.index] = { text: linkToEdit.text, url: linkToEdit.url };\r\n }\r\n setLinks(newLinks);\r\n setLinkToEdit(null);\r\n }\r\n };\r\n\r\n const handleEyeDropper = async () => {\r\n if (!(window as any).EyeDropper) {\r\n alert(\"EyeDropper API is not supported in this browser\");\r\n return;\r\n }\r\n const eyeDropper = new (window as any).EyeDropper();\r\n try {\r\n const result = await eyeDropper.open();\r\n setBannerColor(result.sRGBHex);\r\n } catch (e) {\r\n console.log(\"EyeDropper cancelled or failed\", e);\r\n }\r\n };\r\n\r\n return (\r\n <Box sx={{ position: 'relative', width: '100%' }}>\r\n <Grid\r\n sx={{\r\n background: backgroundColor,\r\n paddingTop: \"8px\",\r\n position: 'relative',\r\n border: '2px dashed rgba(255,255,255,0.5)',\r\n borderRadius: 1\r\n }}\r\n >\r\n {/* SETTINGS OVERLAY */}\r\n <Box sx={{ \r\n position: 'absolute', \r\n top: 8, \r\n left: 8, \r\n zIndex: 10, \r\n display: 'flex', \r\n flexDirection: 'column', \r\n gap: 1,\r\n bgcolor: 'rgba(0,0,0,0.5)',\r\n p: 1,\r\n borderRadius: 1,\r\n width: '300px'\r\n }}>\r\n <TextField\r\n label=\"Title\"\r\n variant=\"outlined\"\r\n size=\"small\"\r\n value={title}\r\n onChange={(e) => setTitle(e.target.value)}\r\n sx={{ input: { color: 'white' }, label: { color: 'rgba(255,255,255,0.7)' }, '& .MuiOutlinedInput-root': { '& fieldset': { borderColor: 'rgba(255,255,255,0.3)' } } }}\r\n />\r\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>\r\n <TextField\r\n label=\"Banner Color\"\r\n variant=\"outlined\"\r\n size=\"small\"\r\n value={bannerColor}\r\n onChange={(e) => setBannerColor(e.target.value)}\r\n placeholder=\"#HEX or linear-gradient(...)\"\r\n sx={{ flex: 1, input: { color: 'white' }, label: { color: 'rgba(255,255,255,0.7)' }, '& .MuiOutlinedInput-root': { '& fieldset': { borderColor: 'rgba(255,255,255,0.3)' } } }}\r\n />\r\n <Tooltip title=\"Eye Dropper\">\r\n <IconButton \r\n size=\"small\" \r\n onClick={handleEyeDropper}\r\n sx={{ color: 'white', bgcolor: 'rgba(255,255,255,0.1)', '&:hover': { bgcolor: 'rgba(255,255,255,0.2)' } }}\r\n >\r\n <ColorizeIcon fontSize=\"small\" />\r\n </IconButton>\r\n </Tooltip>\r\n <input\r\n type=\"color\"\r\n value={bannerColor.startsWith('#') ? bannerColor : '#1976d2'}\r\n onChange={(e) => setBannerColor(e.target.value)}\r\n style={{ width: '40px', height: '40px', padding: 0, border: 'none', background: 'transparent', cursor: 'pointer' }}\r\n />\r\n </Box>\r\n <Box sx={{ display: 'flex', gap: 1 }}>\r\n <Button \r\n variant=\"contained\" \r\n size=\"small\" \r\n fullWidth \r\n onClick={updateImages}\r\n >\r\n Update Images\r\n </Button>\r\n </Box>\r\n </Box>\r\n\r\n {/* VISUAL PREVIEW */}\r\n <Box\r\n sx={{\r\n width: '100%',\r\n height: 'auto',\r\n maxHeight: '250px',\r\n overflow: 'hidden',\r\n display: 'flex',\r\n justifyContent: 'center',\r\n opacity: 0.8\r\n }}\r\n >\r\n <Box\r\n component=\"img\"\r\n src={desktopBanner}\r\n alt={title}\r\n sx={{\r\n width: '100%',\r\n height: 'auto',\r\n objectFit: 'contain',\r\n }}\r\n />\r\n </Box>\r\n\r\n <Grid\r\n display=\"flex\"\r\n justifyContent=\"center\"\r\n alignItems=\"center\"\r\n paddingTop=\"3px\"\r\n paddingBottom=\"3px\"\r\n sx={{ gap: 1.5, flexWrap: 'wrap' }}\r\n >\r\n {/* Placeholder for Stats (not editable here as per instructions) */}\r\n <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)\" }}>\r\n Stats Placeholder\r\n </Box>\r\n\r\n {generateTagsDisplay(initialValue.eventTag)}\r\n\r\n {links.map((link, index) => (\r\n <Box\r\n key={index}\r\n sx={{\r\n position: 'relative',\r\n display: 'flex',\r\n alignItems: 'center',\r\n px: 1.5,\r\n py: 0.5,\r\n color: \"#fff\",\r\n bgcolor: \"rgba(0,0,0,0.7)\",\r\n borderRadius: 2,\r\n boxShadow: \"0 8px 16px rgba(0,0,0,0.25), 0 2px 4px rgba(0,0,0,0.15)\",\r\n border: \"1px solid rgba(255,255,255,0.25)\",\r\n backdropFilter: \"blur(6px)\",\r\n fontWeight: 700,\r\n letterSpacing: 0.2,\r\n }}\r\n >\r\n {link.text}\r\n <Box sx={{ ml: 1, display: 'flex' }}>\r\n <Tooltip title=\"Edit Link\">\r\n <IconButton size=\"small\" onClick={() => openEditLink(index)} sx={{ color: 'white', p: 0.2 }}>\r\n <EditIcon fontSize=\"inherit\" />\r\n </IconButton>\r\n </Tooltip>\r\n <Tooltip title=\"Remove Link\">\r\n <IconButton size=\"small\" onClick={() => removeLink(index)} sx={{ color: 'error.light', p: 0.2 }}>\r\n <DeleteIcon fontSize=\"inherit\" />\r\n </IconButton>\r\n </Tooltip>\r\n </Box>\r\n </Box>\r\n ))}\r\n\r\n <Button\r\n variant=\"outlined\"\r\n size=\"small\"\r\n startIcon={<AddIcon />}\r\n onClick={() => setLinkToEdit({ index: -1, text: \"\", url: \"\" })}\r\n sx={{\r\n color: 'white',\r\n borderColor: 'rgba(255,255,255,0.5)',\r\n borderRadius: 2,\r\n '&:hover': { borderColor: 'white', bgcolor: 'rgba(255,255,255,0.1)' }\r\n }}\r\n >\r\n Add Link\r\n </Button>\r\n </Grid>\r\n </Grid>\r\n\r\n {/* ACTION BUTTONS */}\r\n <Box sx={{ display: 'flex', justifyContent: 'flex-end', gap: 2, mt: 2 }}>\r\n <Button onClick={onCancel} color=\"inherit\" disabled={isSaving}>Cancel</Button>\r\n <Button \r\n onClick={handleSave} \r\n variant=\"contained\" \r\n color=\"primary\" \r\n disabled={isSaving}\r\n startIcon={isSaving ? <CircularProgress size={20} color=\"inherit\" /> : null}\r\n >\r\n {isSaving ? \"Saving...\" : \"Save Changes\"}\r\n </Button>\r\n </Box>\r\n\r\n {/* LINK EDIT DIALOG */}\r\n <Dialog open={linkToEdit !== null} onClose={() => setLinkToEdit(null)}>\r\n <DialogTitle>{linkToEdit?.index === -1 ? \"Add Link\" : \"Edit Link\"}</DialogTitle>\r\n <DialogContent>\r\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 2, pt: 1, width: '400px' }}>\r\n <TextField\r\n label=\"Link Text\"\r\n fullWidth\r\n value={linkToEdit?.text || \"\"}\r\n onChange={(e) => setLinkToEdit(prev => prev ? { ...prev, text: e.target.value } : null)}\r\n />\r\n <TextField\r\n label=\"Link URL\"\r\n fullWidth\r\n value={linkToEdit?.url || \"\"}\r\n onChange={(e) => setLinkToEdit(prev => prev ? { ...prev, url: e.target.value } : null)}\r\n />\r\n </Box>\r\n </DialogContent>\r\n <DialogActions>\r\n <Button onClick={() => setLinkToEdit(null)}>Cancel</Button>\r\n <Button onClick={saveEditedLink} variant=\"contained\">Confirm</Button>\r\n </DialogActions>\r\n </Dialog>\r\n </Box>\r\n );\r\n}","\"use client\"\r\nimport React, { useState } from \"react\";\r\nimport {Card, CardContent, Typography, Button} from \"@mui/material\";\r\nimport Box from \"@mui/material/Box\";\r\nimport Grid from \"@mui/material/Grid\";\r\nimport { useEventEdit } from \"./editMode/EventEditContext\";\r\nimport EventBasicInfoEdit from \"./editMode/EventBasicInfoEdit\";\r\n\r\nexport type EventBasicInfoProps = {\r\n locationId: string,\r\n description?: string,\r\n startingDate?: Date | string,\r\n endingDate?: Date | string,\r\n timeInfo?: string,\r\n timezone?: string\r\n}\r\n\r\nexport const CANDIDATE_TIMEZONES = [\r\n \"America/New_York\",\r\n \"America/Chicago\",\r\n \"America/Denver\",\r\n \"America/Los_Angeles\",\r\n \"America/Anchorage\",\r\n \"America/Adak\",\r\n \"Pacific/Honolulu\",\r\n \"UTC\"\r\n];\r\n\r\nexport default function EventBasicInfo(props: EventBasicInfoProps) {\r\n const { isOwner, updateEvent, event } = useEventEdit();\r\n const [isEditing, setIsEditing] = useState(false);\r\n\r\n // Fallback to context if props are not provided\r\n const description = props.description ?? event?.description ?? \"\";\r\n const startingDate = props.startingDate ?? event?.startingDate;\r\n const endingDate = props.endingDate ?? event?.endingDate;\r\n const timeInfo = props.timeInfo ?? event?.date ?? \"\";\r\n const timezone = props.timezone ?? event?.timezone ?? \"UTC\";\r\n\r\n if (isEditing) {\r\n return (\r\n <EventBasicInfoEdit\r\n initialValue={{\r\n description: description,\r\n startingDate: typeof startingDate === 'string' ? startingDate : startingDate?.toISOString(),\r\n endingDate: typeof endingDate === 'string' ? endingDate : endingDate?.toISOString(),\r\n date: timeInfo,\r\n timezone: timezone\r\n }}\r\n onCancel={() => setIsEditing(false)}\r\n onSave={async (payload) => {\r\n const success = await updateEvent(payload);\r\n if (success) {\r\n setIsEditing(false);\r\n }\r\n }}\r\n />\r\n );\r\n }\r\n\r\n return (\r\n <EventBasicInfoView\r\n {...props}\r\n description={description}\r\n startingDate={startingDate}\r\n endingDate={endingDate}\r\n timeInfo={timeInfo}\r\n timezone={timezone}\r\n isOwner={isOwner}\r\n onEdit={() => setIsEditing(true)}\r\n />\r\n );\r\n}\r\n\r\ntype EventBasicInfoViewProps = {\r\n locationId: string;\r\n description: string;\r\n startingDate?: Date | string;\r\n endingDate?: Date | string;\r\n timeInfo: string;\r\n timezone: string;\r\n isOwner: boolean;\r\n onEdit: () => void;\r\n};\r\n\r\nfunction EventBasicInfoView({description, locationId, startingDate, endingDate, timeInfo, timezone, isOwner, onEdit} : EventBasicInfoViewProps) {\r\n return (\r\n <Grid sx={{ position: 'relative' }}>\r\n <Card style={{\r\n boxShadow: '0px 4px 10px rgba(0, 0, 0, 0.1)',\r\n background: 'linear-gradient(135deg, rgba(225, 225, 225, 1), rgba(250, 250, 250, 1))',\r\n }}>\r\n <CardContent>\r\n {isOwner && (\r\n <Box sx={{ display: 'flex', justifyContent: 'flex-end' }}>\r\n <Button size=\"small\" onClick={onEdit} variant=\"outlined\">Edit</Button>\r\n </Box>\r\n )}\r\n {generateTimeInfo(timeInfo, timezone || \"UTC\", startingDate, endingDate)}\r\n <Typography variant={\"h5\"} paddingTop={2}>\r\n About:\r\n </Typography>\r\n <Typography sx={{whiteSpace: 'pre-wrap'}} paddingTop={1}>\r\n {description}\r\n </Typography>\r\n {getLocation(locationId)}\r\n </CardContent>\r\n </Card>\r\n </Grid>\r\n )\r\n}\r\n\r\n\r\nconst generateTimeInfo = function (timeInfo: string, timezone: string, startingDate?: Date | string, endingDate?: Date | string) {\r\n\r\n const formatDateTime = (dateInput: Date | string) => {\r\n const d = typeof dateInput === 'string' ? new Date(dateInput) : dateInput;\r\n if (!d || isNaN(d.getTime())) return \"\";\r\n\r\n try {\r\n return new Intl.DateTimeFormat('en-US', {\r\n month: 'short',\r\n day: 'numeric',\r\n year: 'numeric',\r\n hour: 'numeric',\r\n minute: '2-digit',\r\n hour12: true,\r\n timeZone: timezone,\r\n timeZoneName: 'shortGeneric'\r\n }).format(d).replace(',', ' @');\r\n } catch (e) {\r\n // Fallback for invalid timezones\r\n return d.toUTCString();\r\n }\r\n }\r\n\r\n let rangeText: string | null = null;\r\n if (startingDate && endingDate) {\r\n rangeText = `From ${formatDateTime(startingDate)}\\nUntil ${formatDateTime(endingDate)}`;\r\n } else if (startingDate) {\r\n rangeText = `starting ${formatDateTime(startingDate)}`;\r\n } else if (endingDate) {\r\n rangeText = `until ${formatDateTime(endingDate)}`;\r\n }\r\n\r\n return (\r\n <Box sx={{ mt: 2 }}>\r\n {rangeText && (\r\n <Typography variant={\"body1\"} fontSize={\"x-large\"} fontWeight={\"bold\"} sx={{whiteSpace:\"pre-wrap\"}}>\r\n {rangeText}\r\n </Typography>\r\n )}\r\n {timeInfo && (\r\n <Box sx={{ mt: 1 }}>\r\n <Typography variant={\"h5\"}>\r\n Hours of Operation:\r\n </Typography>\r\n <Typography variant={\"body1\"} sx={{whiteSpace:\"pre-wrap\"}}>\r\n {timeInfo}\r\n </Typography>\r\n </Box>\r\n )}\r\n </Box>\r\n )\r\n}\r\n\r\n\r\n/*\r\n DUMMY FUNCTIONS -- these relate heavily to sensitive data, so the functions below are simply placeholders\r\n */\r\n\r\nconst getLocation = function(locationId: string) {\r\n return (<Box sx={{\r\n width: '100%',\r\n p: 1.5,\r\n borderRadius: 2,\r\n boxShadow: '0px 4px 10px rgba(0, 0, 0, 0.1)',\r\n background: 'linear-gradient(135deg, rgba(180, 180,180, 1), rgba(225, 225, 225, 0.8))',\r\n mt: 2\r\n }}>\r\n Location Data goes here\r\n </Box>\r\n )\r\n}","\"use client\"\r\nimport React, { useState } from \"react\";\r\nimport { \r\n Box, \r\n Button, \r\n TextField, \r\n Grid, \r\n Card, \r\n CardContent, \r\n Typography, \r\n IconButton, \r\n Tooltip, \r\n Select, \r\n MenuItem, \r\n FormControl, \r\n InputLabel,\r\n CircularProgress \r\n} from \"@mui/material\";\r\nimport CancelIcon from \"@mui/icons-material/Cancel\";\r\nimport CheckCircleIcon from \"@mui/icons-material/CheckCircle\";\r\nimport { CANDIDATE_TIMEZONES } from \"../EventBasicInfo\";\r\n\r\nexport type EventBasicInfoEditPayload = {\r\n description: string;\r\n startingDate?: string;\r\n endingDate?: string;\r\n date: string; // timeInfo\r\n timezone: string;\r\n};\r\n\r\ntype EventBasicInfoEditProps = {\r\n initialValue: EventBasicInfoEditPayload;\r\n onCancel: () => void;\r\n onSave: (payload: Partial<EventBasicInfoEditPayload>) => Promise<void> | void;\r\n};\r\n\r\nexport default function EventBasicInfoEdit({\r\n initialValue,\r\n onCancel,\r\n onSave,\r\n }: EventBasicInfoEditProps) {\r\n\r\n // Helper to get YYYY-MM-DDThh:mm wall time for a specific timezone\r\n const toWallTimeISO = (dateInput: string | undefined, timeZone: string) => {\r\n if (!dateInput) return \"\";\r\n const d = new Date(dateInput);\r\n if (isNaN(d.getTime())) return \"\";\r\n\r\n const parts = new Intl.DateTimeFormat('en-US', {\r\n year: 'numeric', month: '2-digit', day: '2-digit',\r\n hour: '2-digit', minute: '2-digit', hour12: false,\r\n timeZone: timeZone\r\n }).formatToParts(d);\r\n \r\n const f = (type: string) => parts.find(p => p.type === type)?.value;\r\n // Some environments might return 24 for hour 0 if hour12 is false, but usually 00.\r\n // Also handle the order of parts.\r\n const year = f('year');\r\n const month = f('month');\r\n const day = f('day');\r\n let hour = f('hour');\r\n if (hour === '24') hour = '00';\r\n const minute = f('minute');\r\n\r\n return `${year}-${month}-${day}T${hour}:${minute}`;\r\n };\r\n\r\n // Helper to combine wall time + timezone into UTC ISO string\r\n const toUTCISOString = (wallTime: string, timeZone: string) => {\r\n if (!wallTime) return undefined;\r\n \r\n // We need to find the offset for this wall time in the target timezone.\r\n const d = new Date(wallTime + \":00Z\"); \r\n \r\n const parts = new Intl.DateTimeFormat('en-US', {\r\n timeZone: timeZone,\r\n timeZoneName: 'longOffset'\r\n }).formatToParts(d);\r\n \r\n const offsetPart = parts.find(p => p.type === 'timeZoneName')?.value || \"GMT\";\r\n const offset = offsetPart.replace('GMT', ''); \r\n \r\n const isoWithOffset = `${wallTime}:00${offset || \"+00:00\"}`;\r\n return new Date(isoWithOffset).toISOString();\r\n };\r\n\r\n const [description, setDescription] = useState(initialValue.description);\r\n const [timezone, setTimezone] = useState(initialValue.timezone);\r\n const [startingDate, setStartingDate] = useState(toWallTimeISO(initialValue.startingDate, initialValue.timezone));\r\n const [endingDate, setEndingDate] = useState(toWallTimeISO(initialValue.endingDate, initialValue.timezone));\r\n const [timeInfo, setTimeInfo] = useState(initialValue.date);\r\n const [isSaving, setIsSaving] = useState(false);\r\n\r\n const handleSave = async () => {\r\n setIsSaving(true);\r\n try {\r\n const patch: Partial<EventBasicInfoEditPayload> = {};\r\n\r\n if (description !== initialValue.description) patch.description = description;\r\n if (timeInfo !== initialValue.date) patch.date = timeInfo;\r\n if (timezone !== initialValue.timezone) patch.timezone = timezone;\r\n\r\n if (startingDate !== toWallTimeISO(initialValue.startingDate, timezone) || timezone !== initialValue.timezone) {\r\n patch.startingDate = toUTCISOString(startingDate, timezone);\r\n }\r\n\r\n if (endingDate !== toWallTimeISO(initialValue.endingDate, timezone) || timezone !== initialValue.timezone) {\r\n patch.endingDate = toUTCISOString(endingDate, timezone);\r\n }\r\n\r\n if (Object.keys(patch).length > 0) {\r\n await onSave(patch);\r\n } else {\r\n onCancel();\r\n }\r\n } catch (error) {\r\n console.error(\"Failed to save basic info changes\", error);\r\n } finally {\r\n setIsSaving(false);\r\n }\r\n };\r\n\r\n return (\r\n <Card sx={{\r\n boxShadow: '0px 4px 10px rgba(0, 0, 0, 0.1)',\r\n background: 'linear-gradient(135deg, rgba(225, 225, 225, 1), rgba(250, 250, 250, 1))',\r\n border: '2px dashed rgba(25,118,210,0.5)',\r\n width: '100%'\r\n }}>\r\n <CardContent sx={{ position: 'relative' }}>\r\n <Box sx={{ display: 'flex', justifyContent: 'flex-end', mb: 1, gap: 1 }}>\r\n <Tooltip title=\"Cancel\">\r\n <IconButton size=\"small\" onClick={onCancel} color=\"error\" disabled={isSaving}>\r\n <CancelIcon />\r\n </IconButton>\r\n </Tooltip>\r\n <Tooltip title=\"Apply Changes\">\r\n <IconButton size=\"small\" onClick={handleSave} color=\"primary\" disabled={isSaving}>\r\n {isSaving ? <CircularProgress size={24} /> : <CheckCircleIcon />}\r\n </IconButton>\r\n </Tooltip>\r\n </Box>\r\n\r\n <Box sx={{ mt: 2 }}>\r\n <Typography variant={\"body1\"} fontSize={\"x-large\"} fontWeight={\"bold\"} sx={{ mb: 1 }}>\r\n Event Dates & Times:\r\n </Typography>\r\n <Grid container spacing={2}>\r\n <Grid size={{ xs: 12, sm: 4 }}>\r\n <TextField\r\n fullWidth\r\n label=\"Starting Date\"\r\n type=\"datetime-local\"\r\n size=\"small\"\r\n value={startingDate}\r\n onChange={(e) => setStartingDate(e.target.value)}\r\n InputLabelProps={{ shrink: true }}\r\n />\r\n </Grid>\r\n <Grid size={{ xs: 12, sm: 4 }}>\r\n <TextField\r\n fullWidth\r\n label=\"Ending Date\"\r\n type=\"datetime-local\"\r\n size=\"small\"\r\n value={endingDate}\r\n onChange={(e) => setEndingDate(e.target.value)}\r\n InputLabelProps={{ shrink: true }}\r\n />\r\n </Grid>\r\n <Grid size={{ xs: 12, sm: 4 }}>\r\n <FormControl fullWidth size=\"small\">\r\n <InputLabel>Display Timezone</InputLabel>\r\n <Select\r\n label=\"Display Timezone\"\r\n value={timezone}\r\n onChange={(e) => setTimezone(e.target.value)}\r\n >\r\n {CANDIDATE_TIMEZONES.map(tz => (\r\n <MenuItem key={tz} value={tz}>{tz}</MenuItem>\r\n ))}\r\n </Select>\r\n </FormControl>\r\n </Grid>\r\n </Grid>\r\n\r\n <Box sx={{ mt: 2 }}>\r\n <Typography variant={\"h5\"}>\r\n Hours of Operation:\r\n </Typography>\r\n <TextField\r\n fullWidth\r\n multiline\r\n variant=\"standard\"\r\n placeholder=\"e.g. Mon-Fri 9am-5pm\"\r\n value={timeInfo}\r\n onChange={(e) => setTimeInfo(e.target.value)}\r\n sx={{ mt: 1 }}\r\n />\r\n </Box>\r\n </Box>\r\n\r\n <Typography variant={\"h5\"} paddingTop={2}>\r\n About:\r\n </Typography>\r\n <TextField\r\n fullWidth\r\n multiline\r\n variant=\"standard\"\r\n value={description}\r\n onChange={(e) => setDescription(e.target.value)}\r\n sx={{\r\n paddingTop: 1,\r\n '& .MuiInputBase-root': {\r\n lineHeight: 1.5,\r\n whiteSpace: 'pre-wrap'\r\n }\r\n }}\r\n />\r\n\r\n <Box sx={{\r\n mt: 2,\r\n width: '100%',\r\n p: 1.5,\r\n borderRadius: 2,\r\n boxShadow: '0px 4px 10px rgba(0, 0, 0, 0.1)',\r\n background: 'linear-gradient(135deg, rgba(180, 180,180, 1), rgba(225, 225, 225, 0.8))',\r\n color: 'rgba(0,0,0,0.5)',\r\n border: '1px dashed rgba(0,0,0,0.2)'\r\n }}>\r\n Location Data (Not Editable)\r\n </Box>\r\n </CardContent>\r\n </Card>\r\n );\r\n}\r\n","import { useState } from \"react\";\r\nimport { useEventEdit } from \"./editMode/EventEditContext\";\r\nimport type { EventDetails } from \"../../types/event\";\r\nimport EventBannerEdit from \"./editMode/EventBannerEdit\";\r\nimport { generateTagsDisplay } from \"@/components/shared/TagComponents\";\r\nimport { Box, Button } from \"@mui/material\";\r\nimport Grid from \"@mui/material/Grid\";\r\n\r\nexport type EventBannerProps = {\r\n attendees: number;\r\n numGames: number;\r\n // These are now optional as they are taken from context if not provided\r\n bannerUrl?: EventDetails[\"bannerUrl\"];\r\n links?: EventDetails[\"links\"];\r\n title?: EventDetails[\"title\"];\r\n eventTag?: EventDetails[\"eventTag\"];\r\n bannerColor?: string;\r\n};\r\n\r\nexport type EventBannerEditPayload = {\r\n bannerUrl: EventDetails[\"bannerUrl\"];\r\n bannerColor?: EventDetails[\"bannerColor\"];\r\n links: EventDetails[\"links\"];\r\n title: EventDetails[\"title\"];\r\n eventTag: EventDetails[\"eventTag\"];\r\n};\r\n\r\nexport default function EventBanner(props: EventBannerProps) {\r\n const { isOwner, updateEvent, event } = useEventEdit();\r\n const [isEditing, setIsEditing] = useState(false);\r\n\r\n if (!event && !props.bannerUrl) return null;\r\n\r\n // Use context values if available, otherwise fallback to props\r\n const bannerUrl = props.bannerUrl || event?.bannerUrl;\r\n const links = props.links || event?.links || [];\r\n const title = props.title || event?.title || \"\";\r\n const eventTag = props.eventTag || event?.eventTag;\r\n const bannerColor = props.bannerColor || event?.bannerColor;\r\n\r\n if (!bannerUrl || !eventTag) return null;\r\n\r\n if (isEditing) {\r\n return (\r\n <EventBannerEdit\r\n initialValue={{\r\n bannerUrl,\r\n bannerColor,\r\n links,\r\n title,\r\n eventTag,\r\n }}\r\n onCancel={() => setIsEditing(false)}\r\n onSave={async (payload) => {\r\n const success = await updateEvent(payload);\r\n if (success) {\r\n setIsEditing(false);\r\n }\r\n }}\r\n />\r\n );\r\n }\r\n\r\n return (\r\n <EventBannerView\r\n {...props}\r\n bannerUrl={bannerUrl}\r\n links={links}\r\n title={title}\r\n eventTag={eventTag}\r\n bannerColor={bannerColor}\r\n isOwner={isOwner}\r\n onEdit={() => setIsEditing(true)}\r\n />\r\n );\r\n}\r\n\r\ntype EventBannerViewProps = {\r\n bannerUrl: EventDetails[\"bannerUrl\"];\r\n links: EventDetails[\"links\"];\r\n bannerColor?: string;\r\n title: string;\r\n eventTag: EventDetails[\"eventTag\"];\r\n attendees: number;\r\n numGames: number;\r\n isOwner: boolean;\r\n onEdit: () => void;\r\n};\r\n\r\nfunction EventBannerView({\r\n bannerUrl,\r\n links,\r\n bannerColor,\r\n title,\r\n eventTag,\r\n attendees,\r\n numGames,\r\n isOwner,\r\n onEdit,\r\n }: EventBannerViewProps) {\r\n const backgroundColor = bannerColor || \"linear-gradient(135deg, rgba(25,118,210,0.8), rgba(25,118,210,1))\";\r\n return (\r\n <Grid\r\n sx={{\r\n background: backgroundColor,\r\n paddingTop: \"8px\",\r\n position: 'relative'\r\n }}\r\n >\r\n <Grid>\r\n {/* BANNER */}\r\n <Box\r\n sx={{\r\n width: '100%',\r\n height: 'auto',\r\n maxHeight: '250px',\r\n overflow: 'hidden',\r\n display: 'flex',\r\n justifyContent: 'center'\r\n }}\r\n >\r\n <Box\r\n component=\"img\"\r\n src={bannerUrl.desktop}\r\n alt={title}\r\n sx={{\r\n width: '100%',\r\n height: 'auto',\r\n objectFit: 'contain',\r\n display: { xs: 'none', md: 'block' }\r\n }}\r\n />\r\n {bannerUrl.mobile && (\r\n <Box\r\n component=\"img\"\r\n src={bannerUrl.mobile}\r\n alt={title}\r\n sx={{\r\n width: '100%',\r\n height: 'auto',\r\n objectFit: 'contain',\r\n display: { xs: 'block', md: 'none' }\r\n }}\r\n />\r\n )}\r\n {!bannerUrl.mobile && (\r\n <Box\r\n component=\"img\"\r\n src={bannerUrl.desktop}\r\n alt={title}\r\n sx={{\r\n width: '100%',\r\n height: 'auto',\r\n objectFit: 'contain',\r\n display: { xs: 'block', md: 'none' }\r\n }}\r\n />\r\n )}\r\n </Box>\r\n\r\n <Grid\r\n display=\"flex\"\r\n justifyContent=\"center\"\r\n alignItems=\"center\"\r\n paddingTop=\"3px\"\r\n paddingBottom=\"3px\"\r\n sx={{ gap: 1.5, flexWrap: 'wrap' }}\r\n >\r\n <Box\r\n sx={{\r\n px: 1.5,\r\n py: 0.5,\r\n color: \"#fff\",\r\n bgcolor: \"rgba(0,0,0,0.7)\",\r\n borderRadius: 2,\r\n boxShadow: \"0 8px 16px rgba(0,0,0,0.25), 0 2px 4px rgba(0,0,0,0.15)\",\r\n border: \"1px solid rgba(255,255,255,0.25)\",\r\n backdropFilter: \"blur(6px)\",\r\n fontWeight: 700,\r\n letterSpacing: 0.2,\r\n alignItems: \"center\",\r\n justifyContent: \"center\"\r\n }}\r\n >\r\n {`${attendees} Players`}\r\n </Box>\r\n\r\n <Box\r\n sx={{\r\n px: 1.5,\r\n py: 0.5,\r\n color: \"#fff\",\r\n bgcolor: \"rgba(0,0,0,0.7)\",\r\n borderRadius: 2,\r\n boxShadow: \"0 8px 16px rgba(0,0,0,0.25), 0 2px 4px rgba(0,0,0,0.15)\",\r\n border: \"1px solid rgba(255,255,255,0.25)\",\r\n backdropFilter: \"blur(6px)\",\r\n fontWeight: 700,\r\n letterSpacing: 0.2,\r\n alignItems: \"center\",\r\n justifyContent: \"center\"\r\n }}\r\n >\r\n {`${numGames} tables`}\r\n </Box>\r\n\r\n {generateTagsDisplay(eventTag)}\r\n {links.map((link) => generateLink(link))}\r\n </Grid>\r\n </Grid>\r\n\r\n {isOwner && (\r\n <Button\r\n variant=\"contained\"\r\n onClick={onEdit}\r\n sx={{\r\n position: 'absolute',\r\n top: 16,\r\n right: 16,\r\n bgcolor: 'rgba(255, 255, 255, 0.9)',\r\n color: 'primary.main',\r\n '&:hover': {\r\n bgcolor: 'white',\r\n }\r\n }}\r\n >\r\n Edit\r\n </Button>\r\n )}\r\n </Grid>\r\n )\r\n}\r\n\r\nconst generateLink = function (link: { url: string, text: string }) {\r\n return (\r\n <Box\r\n component=\"a\"\r\n href={link.url}\r\n target=\"_blank\"\r\n rel=\"noopener noreferrer\"\r\n key={link.text}\r\n sx={{\r\n px: 1.5,\r\n py: 0.5,\r\n color: \"#fff\",\r\n bgcolor: \"rgba(0,0,0,0.7)\",\r\n borderRadius: 2,\r\n boxShadow: \"0 8px 16px rgba(0,0,0,0.25), 0 2px 4px rgba(0,0,0,0.15)\",\r\n border: \"1px solid rgba(255,255,255,0.25)\",\r\n backdropFilter: \"blur(6px)\",\r\n fontWeight: 700,\r\n letterSpacing: 0.2,\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n textDecoration: 'none',\r\n '&:hover': {\r\n bgcolor: \"rgba(255,255,255,0.1)\",\r\n }\r\n }}\r\n >\r\n {link.text}\r\n </Box>\r\n )\r\n}","export function BlurbTitles() {\r\n const blurbTitles = new Map();\r\n blurbTitles.set(1, \"What’s your most epic tabletop moment?\");\r\n blurbTitles.set(2, \"What type of character do you dream of playing?\");\r\n blurbTitles.set(3, \"What kind of story are you most excited to be part of?\");\r\n blurbTitles.set(4, \"Which tabletop world would you want to live in?\");\r\n blurbTitles.set(5, \"If you could only play one tabletop game forever, what would it be?\");\r\n blurbTitles.set(6, \"What’s a fantasy or sci-fi world you love and would want to game in?\");\r\n blurbTitles.set(7, \"Who’s the most chaotic (or hilarious) player you've ever gamed with?\");\r\n blurbTitles.set(8, \"What motivates you to join a tabletop game: adventure, laughs, or something else?\");\r\n blurbTitles.set(9, \"What’s your weirdest in-game flex?\");\r\n blurbTitles.set(10, \"Which class or archetype are you drawn to—fighter, mage, rogue, healer, or wildcard?\");\r\n blurbTitles.set(11, \"What character did you have the most fun playing?\");\r\n blurbTitles.set(12, \"What kind of player are you: Min-maxer, storyteller, or chaos incarnate?\");\r\n blurbTitles.set(13, \"Describe the best campaign twist you’ve ever experienced.\");\r\n blurbTitles.set(14, \"What’s your guilty pleasure when it comes to character archetypes?\");\r\n blurbTitles.set(15, \"Who’s your favorite villain or antagonist you’ve faced in a campaign?\");\r\n blurbTitles.set(16, \"What’s the hardest decision your character ever had to make?\");\r\n blurbTitles.set(17, \"What’s the funniest tabletop memory you’ve ever had?\");\r\n blurbTitles.set(18, \"Ever had a tabletop game go completely off the rails? What happened?\");\r\n blurbTitles.set(19, \"Introduce us to your favorite homebrew rule!\");\r\n blurbTitles.set(20, \"What’s your favorite dice-rolling ritual or superstition?\");\r\n blurbTitles.set(21, \"What’s your go-to tabletop snack during sessions?\");\r\n blurbTitles.set(22, \"What’s the most creative solution you’ve ever come up with in a game?\");\r\n blurbTitles.set(23, \"What NPC or character from a campaign would you date IRL?\");\r\n blurbTitles.set(24, \"What’s your favorite tabletop rule or mechanic?\");\r\n blurbTitles.set(25, \"What’s the most emotional tabletop moment you’ve had?\");\r\n blurbTitles.set(26, \"What kind of story twist or epic moment would make you fall in love with the game?\");\r\n blurbTitles.set(27, \"What’s the most challenging yet rewarding NPC you've ever created?\");\r\n blurbTitles.set(28, \"How do you keep players on track without railroading your game?\");\r\n blurbTitles.set(29, \"What’s the most unexpected way your players solved a problem you designed?\");\r\n blurbTitles.set(30, \"What’s your favorite resource or tool for planning campaigns?\");\r\n blurbTitles.set(31, \"What’s the funniest way your players have broken your carefully-planned encounter?\");\r\n blurbTitles.set(32, \"What’s the most memorable villain or antagonist you’ve created?\");\r\n blurbTitles.set(33, \"How do you handle player conflict in your campaigns?\");\r\n blurbTitles.set(34, \"What’s your favorite homebrew rule to spice up your campaigns?\");\r\n blurbTitles.set(35, \"Have you ever scrapped a planned session because of something your players did?\");\r\n blurbTitles.set(36, \"What’s the most creative environment or setting you’ve designed for your players?\");\r\n\r\n return blurbTitles;\r\n}\r\n\r\nexport function PrivacyValues() {\r\n const privacyValues = new Map();\r\n privacyValues.set(1, \"private\");\r\n privacyValues.set(\"private\", 1);\r\n\r\n privacyValues.set(2, \"connection\");\r\n privacyValues.set(\"connection\",2);\r\n\r\n privacyValues.set(3, \"public\");\r\n privacyValues.set(\"public\", 3);\r\n\r\n privacyValues.set(4, \"table\");\r\n privacyValues.set(\"table\", 4);\r\n\r\n return privacyValues;\r\n}\r\n\r\nexport function PlayerTagLabels(): string[] {\r\n const tagTitles: string[] = [];\r\n\r\n tagTitles.push(\"girl gamer\");\r\n tagTitles.push(\"veteran\");\r\n tagTitles.push(\"new\");\r\n tagTitles.push(\"min-maxer\");\r\n tagTitles.push(\"role-player\");\r\n tagTitles.push(\"rules lawyer\");\r\n tagTitles.push(\"storyteller\");\r\n tagTitles.push(\"chaotic\");\r\n tagTitles.push(\"planner\");\r\n tagTitles.push(\"wildcard\");\r\n tagTitles.push(\"protector\");\r\n tagTitles.push(\"rogue-like\");\r\n tagTitles.push(\"power gamer\");\r\n tagTitles.push(\"thinker\");\r\n tagTitles.push(\"narrative\");\r\n tagTitles.push(\"homebrewer\");\r\n tagTitles.push(\"dungeon master\");\r\n tagTitles.push(\"world builder\");\r\n tagTitles.push(\"solver\");\r\n tagTitles.push(\"strategist\");\r\n tagTitles.push(\"dice lover\");\r\n tagTitles.push(\"performer\");\r\n tagTitles.push(\"casual\");\r\n tagTitles.push(\"character-focused\");\r\n tagTitles.push(\"team player\");\r\n tagTitles.push(\"mechanics\");\r\n tagTitles.push(\"adventurer\");\r\n tagTitles.push(\"collector\");\r\n tagTitles.push(\"problem solver\");\r\n tagTitles.push(\"innovator\");\r\n tagTitles.push(\"lorekeeper\");\r\n tagTitles.push(\"rule bender\");\r\n tagTitles.push(\"sandboxer\");\r\n tagTitles.push(\"cartographer\");\r\n tagTitles.push(\"loyalist\");\r\n tagTitles.push(\"wrangler\");\r\n tagTitles.push(\"moment maker\");\r\n tagTitles.push(\"jinxed roller\");\r\n tagTitles.push(\"lucky roller\");\r\n tagTitles.push(\"meticulous\");\r\n tagTitles.push(\"improviser\");\r\n tagTitles.push(\"tactician\");\r\n tagTitles.push(\"butterfly\");\r\n tagTitles.push(\"beginner\");\r\n tagTitles.push(\"voice actor\");\r\n tagTitles.push(\"multi-campaign\");\r\n tagTitles.push(\"starter\");\r\n tagTitles.push(\"forever DM\");\r\n tagTitles.push(\"finisher\");\r\n tagTitles.push(\"swapper\");\r\n tagTitles.push(\"meta-gamer\");\r\n tagTitles.push(\"specialist\");\r\n\r\n return tagTitles;\r\n}\r\n\r\n\r\nexport const FantasyNouns = [\r\n // Core D&D Classes\r\n \"Fighter\", \"Rogue\", \"Wizard\", \"Cleric\", \"Paladin\", \"Barbarian\", \"Ranger\", \"Sorcerer\", \"Bard\", \"Monk\", \"Warlock\", \"Druid\", \"Artificer\",\r\n\r\n // Fantasy Occupations\r\n \"Alchemist\", \"Blacksmith\", \"Knight\", \"Mage\", \"Mercenary\", \"Archer\", \"Scribe\", \"Healer\", \"Hunter\", \"Assassin\", \"Enchanter\",\r\n \"Miner\", \"Sailor\", \"Merchant\", \"Herbalist\", \"Cartographer\", \"Tailor\", \"Innkeeper\", \"Cook\", \"Scholar\",\r\n\r\n // Archetypes\r\n \"Adventurer\", \"Champion\", \"Warlord\", \"Outlaw\", \"Pilgrim\", \"Prophet\", \"Necromancer\", \"Witch\", \"Shaman\",\r\n \"Beastmaster\", \"Acolyte\", \"Spellblade\", \"Battlemage\", \"Blademaster\", \"Warpriest\", \"Berserker\", \"Elementalist\",\r\n\r\n // Fantasy Creatures/Beings\r\n \"Dragon\", \"Elf\", \"Dwarf\", \"Orc\", \"Goblin\", \"Gnome\", \"Tiefling\", \"Genasi\", \"Halfling\", \"Lich\", \"Vampire\", \"Werewolf\",\r\n \"Demon\", \"Angel\", \"Pixie\", \"Dryad\", \"Centaur\", \"Chimera\", \"Golem\", \"Fairy\", \"Troll\", \"Minotaur\", \"Kraken\",\r\n \"Griffin\", \"Phoenix\",\r\n\r\n // Fantasy Roles/Titles\r\n \"Archmage\", \"High Priestess\", \"King\", \"Queen\", \"Duke\", \"Duchess\", \"Emperor\", \"Empress\", \"Captain\", \"Seer\", \"Oracle\",\r\n \"Warden\", \"Guardian\", \"Watchman\", \"Hero\", \"Villain\", \"Herald\", \"Scout\", \"Envoy\",\r\n\r\n // Other Fantasy-Themed Nouns\r\n \"Spellcaster\", \"Summoner\", \"Conjurer\", \"Warrior\", \"Gladiator\", \"Pathfinder\", \"Explorer\", \"Tinkerer\", \"Shadowblade\",\r\n \"Dungeoneer\", \"Archon\", \"Mystic\", \"Sage\", \"Runemaster\", \"Smith\", \"Wanderer\", \"Wayfarer\", \"Avenger\", \"Defender\", \"Keeper\"\r\n];\r\n\r\nexport const FantasyAdjectives = [\r\n // Descriptive of Power/Strength\r\n \"Mighty\", \"Powerful\", \"Fierce\", \"Tough\", \"Armored\", \"Indomitable\", \"Savage\", \"Vengeful\", \"Heroic\", \"Valiant\",\r\n\r\n // Magical Features\r\n \"Enchanted\", \"Bewitched\", \"Magical\", \"Mystical\", \"Ethereal\", \"Arcane\", \"Spellbound\", \"Supernatural\", \"Runed\",\r\n\r\n // Personality/Appearance Traits\r\n \"Noble\", \"Gallant\", \"Cunning\", \"Crafty\", \"Shadowy\", \"Elegant\", \"Wise\", \"Shrewd\", \"Merciless\", \"Serene\",\r\n \"Infernal\", \"Wicked\", \"Pious\", \"Charming\", \"Loyal\", \"Treacherous\", \"Bold\", \"Cowardly\", \"Sly\",\r\n\r\n // Environment-Themed\r\n \"Cursed\", \"Blessed\", \"Haunted\", \"Frozen\", \"Burning\", \"Fiery\", \"Icy\", \"Stormy\", \"Sunlit\", \"Moonlit\",\r\n \"Dark\", \"Luminous\", \"Glistening\", \"Ancient\", \"Shattered\", \"Sacred\", \"Forbidden\", \"Hidden\", \"Lost\",\r\n \"Verdant\", \"Barren\",\r\n\r\n // Monster/Creature Traits\r\n \"Ferocious\", \"Ravenous\", \"Menacing\", \"Grotesque\", \"Spiked\", \"Scaled\", \"Hulking\", \"Winged\", \"Fanged\", \"Horned\",\r\n \"Tentacled\", \"Shapeshifting\",\r\n\r\n // Mystical/Abstract Traits\r\n \"Immortal\", \"Mythical\", \"Omniscient\", \"Unbreakable\",\r\n \"Unfathomable\", \"Celestial\", \"Void\", \"Otherworldly\", \"Primordial\",\r\n\r\n // Precious/Gleaming Adjectives\r\n \"Golden\", \"Silver\", \"Crystalline\", \"Diamond\", \"Jeweled\", \"Sapphire\", \"Emerald\", \"Shimmering\", \"Gleaming\", \"Radiant\",\r\n\r\n // Combat-Related Traits\r\n \"Bloodstained\", \"Battleworn\", \"Unyielding\", \"Victorious\", \"Deadly\", \"Sharp\", \"Piercing\", \"Relentless\", \"Untouchable\",\r\n\r\n // Nature-Themed\r\n \"Whispering\", \"Thorned\", \"Blossoming\", \"Blooming\", \"Overgrown\", \"Howling\", \"Cracked\", \"Twisted\", \"Mossy\", \"Winding\",\r\n \"Towering\", \"Rooted\",\r\n\r\n // Emotional/Thematic Descriptors\r\n \"Free\", \"Courageous\", \"Reckless\", \"Damned\", \"Lonely\", \"Heartless\", \"Driven\", \"Hopeful\",\r\n \"Fateful\"\r\n];\r\n\r\nexport const FantasyQualifiers = [\r\n // Describing Uniqueness or Origins\r\n \"Original\", \"Prime\", \"Primal\", \"Archetypal\", \"Ancestral\", \"Legendary\", \"Foremost\",\r\n\r\n // Describing Finality or Completion\r\n \"Final\", \"Ultimate\", \"Absolute\", \"Conclusive\", \"Eternal\", \"Enduring\", \"Definitive\",\r\n\r\n // Describing Supremacy or Greatness\r\n \"Supreme\", \"Paramount\", \"Preeminent\", \"Pinnacle\", \"Peerless\", \"Unrivaled\", \"Sovereign\", \"Dominant\",\r\n\r\n // Describing Perfection or Excellence\r\n \"Flawless\", \"Perfect\", \"Divine\", \"Exalted\", \"Transcendent\", \"Matchless\", \"Incomparable\",\r\n\r\n // Describing Eternity or Timelessness\r\n \"Timeless\", \"Boundless\", \"Ageless\", \"Perpetual\", \"Infinite\", \"Everlasting\",\r\n\r\n // Describing Power or Authority\r\n \"Omnipotent\", \"Almighty\", \"Unassailable\", \"Overwhelming\", \"Irresistible\", \"Unconquerable\", \"Majestic\"\r\n];\r\n\r\nexport const generateUsername = () => {\r\n let output = \"\"\r\n\r\n output+= getRandomElement(FantasyQualifiers)\r\n output+= getRandomElement(FantasyAdjectives)\r\n output+= getRandomElement(FantasyNouns)\r\n\r\n return output;\r\n}\r\n\r\nexport const DEFAULT_PROFILE_PIC = \"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2ZXJzaW9uPSIxLjEiIHdpZHRoPSIyNTYiIGhlaWdodD0iMjU2IiB2aWV3Qm94PSIwIDAgMjU2IDI1NiIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+CjxnIHN0eWxlPSJzdHJva2U6IG5vbmU7IHN0cm9rZS13aWR0aDogMDsgc3Ryb2tlLWRhc2hhcnJheTogbm9uZTsgc3Ryb2tlLWxpbmVjYXA6IGJ1dHQ7IHN0cm9rZS1saW5lam9pbjogbWl0ZXI7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDsgZmlsbDogbm9uZTsgZmlsbC1ydWxlOiBub256ZXJvOyBvcGFjaXR5OiAxOyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS40MDY1OTM0MDY1OTM0MDE2IDEuNDA2NTkzNDA2NTkzNDAxNikgc2NhbGUoMi44MSAyLjgxKSI+Cgk8cGF0aCBkPSJNIDQ1IDg4IGMgLTExLjA0OSAwIC0yMS4xOCAtMi4wMDMgLTI5LjAyMSAtOC42MzQgQyA2LjIxMiA3MS4xMDUgMCA1OC43NjQgMCA0NSBDIDAgMjAuMTg3IDIwLjE4NyAwIDQ1IDAgYyAyNC44MTMgMCA0NSAyMC4xODcgNDUgNDUgYyAwIDEzLjc2NSAtNi4yMTIgMjYuMTA1IC0xNS45NzkgMzQuMzY2IEMgNjYuMTgxIDg1Ljk5OCA1Ni4wNDkgODggNDUgODggeiIgc3R5bGU9InN0cm9rZTogbm9uZTsgc3Ryb2tlLXdpZHRoOiAxOyBzdHJva2UtZGFzaGFycmF5OiBub25lOyBzdHJva2UtbGluZWNhcDogYnV0dDsgc3Ryb2tlLWxpbmVqb2luOiBtaXRlcjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyBmaWxsOiByZ2IoMjE0LDIxNCwyMTQpOyBmaWxsLXJ1bGU6IG5vbnplcm87IG9wYWNpdHk6IDE7IiB0cmFuc2Zvcm09IiBtYXRyaXgoMSAwIDAgMSAwIDApICIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+Cgk8cGF0aCBkPSJNIDQ1IDYwLjcxIGMgLTExLjQ3OSAwIC0yMC44MTggLTkuMzM5IC0yMC44MTggLTIwLjgxNyBjIDAgLTExLjQ3OSA5LjMzOSAtMjAuODE4IDIwLjgxOCAtMjAuODE4IGMgMTEuNDc5IDAgMjAuODE3IDkuMzM5IDIwLjgxNyAyMC44MTggQyA2NS44MTcgNTEuMzcxIDU2LjQ3OSA2MC43MSA0NSA2MC43MSB6IiBzdHlsZT0ic3Ryb2tlOiBub25lOyBzdHJva2Utd2lkdGg6IDE7IHN0cm9rZS1kYXNoYXJyYXk6IG5vbmU7IHN0cm9rZS1saW5lY2FwOiBidXR0OyBzdHJva2UtbGluZWpvaW46IG1pdGVyOyBzdHJva2UtbWl0ZXJsaW1pdDogMTA7IGZpbGw6IHJnYigxNjUsMTY0LDE2NCk7IGZpbGwtcnVsZTogbm9uemVybzsgb3BhY2l0eTogMTsiIHRyYW5zZm9ybT0iIG1hdHJpeCgxIDAgMCAxIDAgMCkgIiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KCTxwYXRoIGQ9Ik0gNDUgOTAgYyAtMTAuNjEzIDAgLTIwLjkyMiAtMy43NzMgLTI5LjAyOCAtMTAuNjI1IGMgLTAuNjQ4IC0wLjU0OCAtMC44OCAtMS40NDQgLTAuNTc5IC0yLjIzNyBDIDIwLjAzNCA2NC45MTkgMzEuOTMzIDU2LjcxIDQ1IDU2LjcxIHMgMjQuOTY2IDguMjA5IDI5LjYwNyAyMC40MjggYyAwLjMwMSAwLjc5MyAwLjA2OSAxLjY4OSAtMC41NzkgMi4yMzcgQyA2NS45MjIgODYuMjI3IDU1LjYxMyA5MCA0NSA5MCB6IiBzdHlsZT0ic3Ryb2tlOiBub25lOyBzdHJva2Utd2lkdGg6IDE7IHN0cm9rZS1kYXNoYXJyYXk6IG5vbmU7IHN0cm9rZS1saW5lY2FwOiBidXR0OyBzdHJva2UtbGluZWpvaW46IG1pdGVyOyBzdHJva2UtbWl0ZXJsaW1pdDogMTA7IGZpbGw6IHJnYigxNjUsMTY0LDE2NCk7IGZpbGwtcnVsZTogbm9uemVybzsgb3BhY2l0eTogMTsiIHRyYW5zZm9ybT0iIG1hdHJpeCgxIDAgMCAxIDAgMCkgIiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPC9nPgo8L3N2Zz4=\";\r\n\r\nexport const ProfilePictureSettings = {\r\n aspectRatio: 4/5,\r\n minWidth: 400,\r\n}\r\n\r\nconst getRandomElement = (array: string[]) => {\r\n return array[Math.floor(Math.random() * array.length)];\r\n}\r\n\r\n","import React from 'react';\r\nimport { Typography } from '@mui/material';\r\n\r\ninterface NextGameCountdownProps {\r\n nextGameTime: string | Date;\r\n}\r\n\r\nconst NextGameLabel: React.FC<NextGameCountdownProps> = ({ nextGameTime }) => {\r\n const date = typeof nextGameTime === 'string' ? new Date(nextGameTime) : nextGameTime;\r\n \r\n return (\r\n <Typography variant=\"caption\" sx={{ display: 'block', mb: 1, color: 'primary.main', fontWeight: 'bold' }}>\r\n Next Game: {date.toLocaleString()}\r\n </Typography>\r\n );\r\n};\r\n\r\nexport default NextGameLabel;\r\n","import React from 'react';\r\nimport Card from '@mui/material/Card';\r\nimport CardContent from '@mui/material/CardContent';\r\nimport Typography from '@mui/material/Typography';\r\nimport Box from '@mui/material/Box';\r\nimport { useRouter } from 'next/navigation';\r\nimport { Tag } from '@/types/tag';\r\nimport { SearchResultItem } from '@/types/search';\r\nimport NextGameLabel from \"@/components/TablePage/NextGameLabel\";\r\nimport { renderTagsFromIds } from \"@/components/shared/TagComponents\";\r\n\r\nexport interface BaseSearchResultCardProps {\r\n result: SearchResultItem;\r\n onClick?: (id: number) => void;\r\n icon?: React.ReactNode;\r\n children?: React.ReactNode;\r\n tags: Tag[];\r\n showEventTag?: boolean;\r\n eventTagId?: number;\r\n}\r\n\r\n/**\r\n * Base component for displaying search results with common functionality\r\n */\r\nconst BaseSearchResultCard: React.FC<BaseSearchResultCardProps> = ({ \r\n result,\r\n onClick,\r\n children,\r\n icon,\r\n tags,\r\n showEventTag,\r\n eventTagId\r\n}) => {\r\n const router = useRouter();\r\n\r\n const handleClick = (e: React.MouseEvent) => {\r\n // Determine the target URL\r\n const url = `/${result.type}/${result.id}`;\r\n\r\n // If modifier key is pressed, let the browser handle the navigation behavior (open in new tab)\r\n if (e.ctrlKey || e.metaKey || e.shiftKey) {\r\n e.stopPropagation();\r\n window.open(url, '_blank');\r\n return;\r\n }\r\n\r\n if (onClick) {\r\n // Use the provided onClick handler if available\r\n onClick(result.id);\r\n } else {\r\n // Default behavior: Redirect to the detail page\r\n router.push(url);\r\n }\r\n };\r\n\r\n return (\r\n <Card \r\n elevation={6}\r\n sx={{ \r\n width: '100%', \r\n cursor: 'pointer',\r\n boxShadow: '0px 8px 24px rgba(0, 0, 0, 0.15)',\r\n transition: 'box-shadow 0.3s ease-in-out',\r\n '&:hover': {\r\n boxShadow: '0px 12px 28px rgba(0, 0, 0, 0.2)'\r\n },\r\n marginBottom: 2\r\n }}\r\n onClick={(e) => handleClick(e)}\r\n >\r\n <CardContent sx={{ display: 'flex', alignItems: 'flex-start' }}>\r\n {/* Icon on the left */}\r\n {icon && (\r\n <Box sx={{ mr: 2, display: 'flex', alignItems: 'center', pt: 0.5 }}>\r\n {icon}\r\n </Box>\r\n )}\r\n\r\n {/* Content on the right */}\r\n <Box sx={{ flex: 1 }}>\r\n <Typography variant=\"h6\" sx={{ mb: 1 }}>\r\n {result.title}\r\n </Typography>\r\n {/* show Next Game Time if available */}\r\n {result.nextGameTime && (\r\n <NextGameLabel nextGameTime={result.nextGameTime}/>\r\n )}\r\n {/* Show short description above player info for tables */}\r\n {result.type === 'table' && result.shortDescription ? (\r\n <Typography variant=\"body2\" sx={{ mb: 1 }}>\r\n {result.shortDescription}\r\n </Typography>\r\n ) : null}\r\n\r\n {/* Specialized content will be inserted here */}\r\n {children}\r\n\r\n {/* Description: for tables show trimmed full description below players; otherwise show the default description */}\r\n {result.type === 'table' ? (\r\n <Typography variant=\"body1\">\r\n {(() => {\r\n const full = result.fullDescription ?? result.description ?? '';\r\n const text = full || '';\r\n return text.length > 200 ? `${text.slice(0, 200).trimEnd()}...` : text;\r\n })()}\r\n </Typography>\r\n ) : (\r\n <Typography variant=\"body1\">\r\n {result.description}\r\n </Typography>\r\n )}\r\n\r\n {result.tags && result.tags.length > 0 && (\r\n <Box sx={{ mt: 1, display: 'flex', flexWrap: 'wrap', gap: 1 }}>\r\n {renderTagsFromIds(result.tags, tags, { showEventTag, eventTagId })}\r\n </Box>\r\n )}\r\n </Box>\r\n </CardContent>\r\n </Card>\r\n );\r\n};\r\n\r\nexport default BaseSearchResultCard;","import React from 'react';\r\nimport Avatar from '@mui/material/Avatar';\r\nimport { SearchResultItem } from '@/types/search';\r\nimport { DEFAULT_PROFILE_PIC } from '@/data/values';\r\nimport BaseSearchResultCard, { BaseSearchResultCardProps } from './BaseSearchResultCard';\r\nimport { Tag } from \"@/types/tag\";\r\n\r\ninterface PlayerResultCardProps extends Omit<BaseSearchResultCardProps, 'onClick'> {\r\n result: SearchResultItem & { type: 'player' }\r\n tags: Tag[];\r\n onClick?: (id: number) => void;\r\n showEventTag?: boolean;\r\n eventTagId?: number;\r\n}\r\n\r\n/**\r\n * Component for displaying player search results\r\n * Includes an avatar image or defaults to a MUI colored circle with a letter in it\r\n */\r\nconst PlayerResultCard: React.FC<PlayerResultCardProps> = ({ \r\n result,\r\n onClick,\r\n tags,\r\n showEventTag,\r\n eventTagId\r\n}) => {\r\n // Get the first letter of the username for the avatar fallback\r\n const firstLetter = result.title.charAt(0).toUpperCase();\r\n \r\n // Generate a consistent color based on the username\r\n const getAvatarColor = (name: string) => {\r\n const colors = [\r\n '#F44336', '#E91E63', '#9C27B0', '#673AB7', \r\n '#3F51B5', '#2196F3', '#03A9F4', '#00BCD4', \r\n '#009688', '#4CAF50', '#8BC34A', '#CDDC39', \r\n '#FFEB3B', '#FFC107', '#FF9800', '#FF5722'\r\n ];\r\n \r\n // Simple hash function to get a consistent index\r\n let hash = 0;\r\n for (let i = 0; i < name.length; i++) {\r\n hash = name.charCodeAt(i) + ((hash << 5) - hash);\r\n }\r\n \r\n return colors[Math.abs(hash) % colors.length];\r\n };\r\n \r\n const avatarColor = getAvatarColor(result.title);\r\n \r\n // Create avatar for use as icon\r\n const playerIcon = (\r\n <Avatar \r\n src={result.imageUrl || DEFAULT_PROFILE_PIC}\r\n alt={result.title}\r\n sx={{ \r\n width: 40, \r\n height: 40, \r\n bgcolor: !result.imageUrl ? avatarColor : undefined\r\n }}\r\n >\r\n {!result.imageUrl && firstLetter}\r\n </Avatar>\r\n );\r\n\r\n return (\r\n <BaseSearchResultCard \r\n result={result} \r\n onClick={onClick} \r\n icon={playerIcon} \r\n tags={tags}\r\n showEventTag={showEventTag}\r\n eventTagId={eventTagId}\r\n >\r\n {/* No additional content needed after removing join date */}\r\n </BaseSearchResultCard>\r\n );\r\n};\r\n\r\nexport default PlayerResultCard;","import React from 'react';\nimport Box from '@mui/material/Box';\nimport Typography from '@mui/material/Typography';\nimport Chip from '@mui/material/Chip';\nimport LinearProgress from '@mui/material/LinearProgress';\nimport PersonIcon from '@mui/icons-material/Person';\nimport SupervisorAccountIcon from '@mui/icons-material/SupervisorAccount';\nimport TableRestaurantIcon from '@mui/icons-material/TableRestaurant';\nimport { SearchResultItem } from '@/types/search';\nimport BaseSearchResultCard, { BaseSearchResultCardProps } from './BaseSearchResultCard';\n\ninterface TableResultCardProps extends Omit<BaseSearchResultCardProps, 'onClick'> {\n result: SearchResultItem & { type: 'table' };\n onClick?: (id: number) => void;\n showEventTag?: boolean;\n eventTagId?: number;\n}\n\n/**\n * Component for displaying table search results\n * Shows active players vs. available slots and DM status\n */\nconst TableResultCard: React.FC<TableResultCardProps> = ({ \n result,\n onClick,\n tags,\n showEventTag,\n eventTagId\n}) => {\n // Use real capacity and player counts from result when available; no randomization\n const rawCapacity = result.capacity;\n const hasDefinedCapacity = typeof rawCapacity === 'number' && Number.isFinite(rawCapacity) && rawCapacity > 0;\n const capacity = hasDefinedCapacity ? rawCapacity : 0;\n const activePlayers = typeof result.numPlayers === 'number' ? result.numPlayers : 0;\n const availableSlots = Math.max(capacity - activePlayers, 0);\n const hasDM = typeof result.hasDM === 'boolean' ? result.hasDM : Boolean(result.dungeonMaster);\n\n // Calculate percentage for progress bar safely\n const occupancyPercentage = hasDefinedCapacity ? (activePlayers / capacity) * 100 : 100;\n\n // Create table icon\n const tableIcon = (\n <TableRestaurantIcon \n sx={{ \n fontSize: 40,\n color: 'primary.main'\n }}\n />\n );\n\n return (\n <BaseSearchResultCard \n result={result} \n onClick={onClick} \n icon={tableIcon} \n tags={tags}\n showEventTag={showEventTag}\n eventTagId={eventTagId}\n >\n <Box sx={{ mb: 2 }}>\n <Box sx={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', mb: 1 }}>\n <Typography variant=\"body2\">\n <strong>Players:</strong> {hasDefinedCapacity ? `${activePlayers}/${capacity}` : activePlayers}\n </Typography>\n {typeof hasDM === 'boolean' && (\n <Chip\n icon={hasDM ? <SupervisorAccountIcon /> : <PersonIcon />}\n label={hasDM ? \"DM Present\" : \"No DM\"}\n color={hasDM ? \"success\" : \"warning\"}\n size=\"small\"\n />\n )}\n </Box>\n\n <LinearProgress \n variant=\"determinate\" \n value={occupancyPercentage} \n sx={{ \n height: 10, \n borderRadius: 5,\n backgroundColor: '#e0e0e0',\n '& .MuiLinearProgress-bar': {\n backgroundColor: hasDefinedCapacity ? (availableSlots > 0 ? '#4caf50' : '#f44336') : '#2196f3'\n }\n }}\n />\n\n {hasDefinedCapacity && (\n <Typography variant=\"body2\" sx={{ mt: 0.5, textAlign: 'right' }}>\n {availableSlots > 0 \n ? `${availableSlots} slot${availableSlots !== 1 ? 's' : ''} available` \n : 'Table full'}\n </Typography>\n )}\n </Box>\n </BaseSearchResultCard>\n );\n};\n\nexport default TableResultCard;","import React from 'react';\r\nimport Box from '@mui/material/Box';\r\nimport Typography from '@mui/material/Typography';\r\nimport CalendarTodayIcon from '@mui/icons-material/CalendarToday';\r\nimport LocationOnIcon from '@mui/icons-material/LocationOn';\r\nimport EventIcon from '@mui/icons-material/Event';\r\nimport { SearchResultItem } from '@/types/search';\r\nimport BaseSearchResultCard, { BaseSearchResultCardProps } from './BaseSearchResultCard';\r\n\r\ninterface EventResultCardProps extends Omit<BaseSearchResultCardProps, 'onClick'> {\r\n result: SearchResultItem & { type: 'event' };\r\n onClick?: (id: number) => void;\r\n showEventTag?: boolean;\r\n eventTagId?: number;\r\n}\r\n\r\n/**\r\n * Component for displaying event search results\r\n * Shows event location and dates\r\n */\r\nconst EventResultCard: React.FC<EventResultCardProps> = ({ \r\n result,\r\n onClick,\r\n tags,\r\n showEventTag,\r\n eventTagId\r\n}) => {\r\n // Format the date for display\r\n const formatDate = (dateString: string) => {\r\n const options: Intl.DateTimeFormatOptions = { \r\n weekday: 'long', \r\n year: 'numeric', \r\n month: 'long', \r\n day: 'numeric' \r\n };\r\n \r\n try {\r\n const date = new Date(dateString);\r\n return date.toLocaleDateString('en-US', options);\r\n } catch (__) {\r\n return dateString; // Fallback to the original string if parsing fails\r\n }\r\n };\r\n \r\n const formattedDate = result.date ? formatDate(result.date) : 'Date TBD';\r\n const location = result.location || 'Location TBD';\r\n \r\n // Create event icon\r\n const eventIcon = (\r\n <EventIcon \r\n sx={{ \r\n fontSize: 40,\r\n color: 'primary.main'\r\n }}\r\n />\r\n );\r\n\r\n return (\r\n <BaseSearchResultCard \r\n result={result} \r\n onClick={onClick} \r\n icon={eventIcon} \r\n tags={tags}\r\n showEventTag={showEventTag}\r\n eventTagId={eventTagId}\r\n >\r\n <Box sx={{ mb: 2 }}>\r\n <Box sx={{ display: 'flex', alignItems: 'center', mb: 1 }}>\r\n <CalendarTodayIcon sx={{ mr: 1, color: 'primary.main' }} />\r\n <Typography variant=\"body2\">\r\n <strong>Date:</strong> {formattedDate}\r\n </Typography>\r\n </Box>\r\n \r\n <Box sx={{ display: 'flex', alignItems: 'center' }}>\r\n <LocationOnIcon sx={{ mr: 1, color: 'primary.main' }} />\r\n <Typography variant=\"body2\">\r\n <strong>Location:</strong> {location}\r\n </Typography>\r\n </Box>\r\n \r\n {result.organizer && (\r\n <Typography variant=\"body2\" sx={{ mt: 1 }}>\r\n <strong>Organizer:</strong> {result.organizer}\r\n </Typography>\r\n )}\r\n </Box>\r\n </BaseSearchResultCard>\r\n );\r\n};\r\n\r\nexport default EventResultCard;\r\n","import React from 'react';\nimport Box from '@mui/material/Box';\nimport Typography from '@mui/material/Typography';\nimport Pagination from '@mui/material/Pagination';\nimport { SearchResultItem, PaginationData } from '@/types/search';\nimport PlayerResultCard from './Results/PlayerResultCard';\nimport TableResultCard from './Results/TableResultCard';\nimport EventResultCard from './Results/EventResultCard';\nimport { Tag } from '@/types/tag';\n\ninterface ResultsContainerProps {\n results: SearchResultItem[];\n onResultClick?: (id: number, type: \"player\" | \"event\" | \"table\") => void;\n tags: Tag[];\n pagination?: PaginationData;\n onPacketChange?: (packet: number) => void;\n showEventTag?: boolean;\n eventTagId?: number;\n}\n\n/**\n * Container component that displays a list of search results\n */\nconst ResultsContainer: React.FC<ResultsContainerProps> = ({\n results,\n onResultClick,\n tags,\n pagination,\n onPacketChange,\n showEventTag,\n eventTagId\n}) => {\n if (!results || results.length === 0 || !results.map) {\n return (\n <Box sx={{ textAlign: 'center', py: 4 }}>\n No results found. Try adjusting your filters.\n </Box>\n );\n }\n\n const onPlayerClick = onResultClick ? (id: number) => {\n onResultClick(id, 'player');\n } : undefined;\n\n const onTableClick = onResultClick ? (id: number) => {\n onResultClick(id, 'table');\n } : undefined;\n\n const onEventClick = onResultClick ? (id: number) => {\n onResultClick(id, 'event');\n } : undefined;\n\n const handlePacketChange = (_event: React.ChangeEvent<unknown>, packet: number) => {\n onPacketChange?.(packet);\n };\n\n const startResult = pagination ? (pagination.currentPacket - 1) * pagination.packetSize + 1 : 1;\n const endResult = pagination ? Math.min(pagination.currentPacket * pagination.packetSize, pagination.totalResults) : results.length;\n\n return (\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 2 }}>\n {pagination && (\n <Box sx={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', mb: 1 }}>\n <Typography variant=\"body2\" color=\"text.secondary\">\n Showing {startResult}-{endResult} of {pagination.totalResults} results\n </Typography>\n </Box>\n )}\n\n {results.map((result) => {\n // Render the appropriate card based on result type\n switch (result.type) {\n case 'player':\n return (\n <PlayerResultCard \n key={result.id} \n result={result as SearchResultItem & { type: 'player' }} \n onClick={onPlayerClick}\n tags={tags}\n showEventTag={showEventTag}\n eventTagId={eventTagId}\n />\n );\n case 'table':\n return (\n <TableResultCard \n key={result.id} \n result={result as SearchResultItem & { type: 'table' }} \n onClick={onTableClick}\n tags={tags}\n showEventTag={showEventTag}\n eventTagId={eventTagId}\n />\n );\n case 'event':\n return (\n <EventResultCard \n key={result.id} \n result={result as SearchResultItem & { type: 'event' }} \n onClick={onEventClick}\n tags={tags}\n showEventTag={showEventTag}\n eventTagId={eventTagId}\n />\n );\n default:\n console.error(`Unknown result type: ${result.type}`);\n return null;\n }\n })}\n\n {pagination && pagination.totalPackets > 1 && (\n <Box sx={{ display: 'flex', justifyContent: 'center', mt: 4 }}>\n <Pagination \n count={pagination.totalPackets} \n page={pagination.currentPacket} \n onChange={handlePacketChange} \n color=\"primary\" \n />\n </Box>\n )}\n </Box>\n );\n};\n\nexport default ResultsContainer;","\"use client\"\nimport React from 'react';\nimport Box from '@mui/material/Box';\nimport ResultsContainer from './ResultsContainer';\nimport { SearchResultItem } from '@/types/search';\nimport { Tag } from '@/types/tag';\n\nexport interface ScrollableResultsListProps {\n results: SearchResultItem[];\n tags: Tag[];\n maxHeight?: number | string;\n onResultClick?: (id: number, type: 'player' | 'event' | 'table') => void;\n emptyText?: string;\n showEventTag?: boolean;\n eventTagId?: number;\n}\n\n/**\n * Generic scrollable list for search results. Reuses ResultsContainer and simply constrains height.\n */\nconst ScrollableResultsList: React.FC<ScrollableResultsListProps> = ({\n results,\n tags,\n maxHeight = 400,\n onResultClick,\n emptyText,\n showEventTag,\n eventTagId\n}) => {\n const hasResults = Array.isArray(results) && results.length > 0;\n\n return (\n <Box sx={{ maxHeight, overflowY: 'auto', pr: 1 }}>\n {hasResults ? (\n <ResultsContainer \n results={results} \n onResultClick={onResultClick} \n tags={tags} \n showEventTag={showEventTag}\n eventTagId={eventTagId}\n />\n ) : (\n <Box sx={{ textAlign: 'center', py: 2 }}>\n {emptyText || 'No results to display.'}\n </Box>\n )}\n </Box>\n );\n};\n\nexport default ScrollableResultsList;\n","import React from 'react';\nimport ScrollableResultsList from './ScrollableResultsList';\nimport { SearchResultItem } from '@/types/search';\nimport { Tag } from '@/types/tag';\n\nexport interface TablesScrollableListProps {\n results: SearchResultItem[];\n tags: Tag[];\n maxHeight?: number | string;\n onResultClick?: (id: number) => void;\n showEventTag?: boolean;\n eventTagId?: number;\n}\n\n/**\n * Thin wrapper to show only table results in a scrollable list.\n */\nconst TablesScrollableList: React.FC<TablesScrollableListProps> = ({\n results,\n tags,\n maxHeight,\n onResultClick,\n showEventTag,\n eventTagId\n}) => {\n const tables = (results || []).filter((r): r is SearchResultItem & { type: 'table' } => r?.type === 'table');\n\n return (\n <ScrollableResultsList\n results={tables}\n tags={tags}\n maxHeight={maxHeight}\n onResultClick={onResultClick ? (id, type) => {\n if (type === 'table') onResultClick(id);\n } : undefined}\n showEventTag={showEventTag}\n eventTagId={eventTagId}\n />\n );\n};\n\nexport default TablesScrollableList;\n","\"use client\"\nimport React from 'react';\nimport Card from '@mui/material/Card';\nimport CardContent from '@mui/material/CardContent';\nimport CardHeader from '@mui/material/CardHeader';\nimport Divider from '@mui/material/Divider';\nimport TablesScrollableList from '@/components/SearchPage/TablesScrollableList';\nimport { Tag } from '@/types/tag';\n\nexport interface EventTablesCardProps {\n tables: any[];\n tags: Tag[];\n maxHeight?: number | string;\n onTableClick?: (id: number) => void;\n showEventTag?: boolean;\n eventTagId?: number;\n}\n\n/**\n * Event page card that shows a scrollable list of tables, reusing search result cards.\n */\nconst EventTablesCard: React.FC<EventTablesCardProps> = ({\n tables,\n tags,\n maxHeight = 450,\n onTableClick,\n showEventTag,\n eventTagId,\n}) => {\n return (\n <Card elevation={6} sx={{ width: '100%', boxShadow: '0px 8px 24px rgba(0, 0, 0, 0.15)' }}>\n <CardHeader title=\"Tables\" />\n <Divider />\n <CardContent>\n <TablesScrollableList \n results={tables} \n tags={tags} \n maxHeight={maxHeight} \n onResultClick={onTableClick} \n showEventTag={showEventTag}\n eventTagId={eventTagId}\n />\n </CardContent>\n </Card>\n );\n};\n\nexport default EventTablesCard;\n","\"use client\"\r\nimport React from \"react\";\r\nimport EventBanner from \"@/components/EventPage/EventBanner\";\r\nimport Grid from \"@mui/material/Grid\";\r\nimport EventBasicInfo from \"@/components/EventPage/EventBasicInfo\";\r\nimport EventTablesCard from \"@/components/EventPage/EventTablesCard\";\r\nimport type { EventDetails } from \"@/types/event\";\r\nimport type { Tag } from \"@/types/tag\";\r\nimport { EventEditProvider } from \"@/components/EventPage/editMode/EventEditContext\";\r\n\r\nexport type EventPageProps = {\r\n mergedEvent: EventDetails;\r\n isOwner: boolean;\r\n updateEvent?: (patch: Partial<EventDetails>) => void;\r\n updateImages?: () => void;\r\n attendees: number;\r\n numGames: number;\r\n tables: any[];\r\n players: any[];\r\n allTags: Tag[];\r\n};\r\n\r\nexport default function EventPageLayout({\r\n mergedEvent,\r\n isOwner,\r\n updateEvent,\r\n updateImages,\r\n attendees,\r\n numGames,\r\n tables,\r\n allTags,\r\n }: EventPageProps) {\r\n return (\r\n <Grid container flexDirection=\"column\">\r\n {/* 3. Context wiring */}\r\n <EventEditProvider initialEvent={mergedEvent} value={{ isOwner, updateEvent, updateImages }}>\r\n <Grid>\r\n <EventBanner\r\n attendees={attendees}\r\n numGames={numGames}\r\n />\r\n </Grid>\r\n <Grid container flexDirection=\"row\" spacing={3} size={{ xs: 12, md: 12 }}>\r\n <Grid size={{ xs: 12, md: 4 }} spacing={3} padding={3}>\r\n <EventBasicInfo\r\n locationId={mergedEvent.location || \"0\"}\r\n />\r\n </Grid>\r\n <Grid size={{ xs: 12, md: 8 }} spacing={3} padding={3}>\r\n <EventTablesCard \r\n tables={tables} \r\n tags={allTags} \r\n showEventTag={true}\r\n eventTagId={mergedEvent.id}\r\n />\r\n </Grid>\r\n </Grid>\r\n <Grid />\r\n </EventEditProvider>\r\n </Grid>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport React from \"react\";\r\nimport { Card, CardContent, Typography } from \"@mui/material\";\r\n\r\nexport type PlayerDetailsProps = {\r\n preferredPronouns: string | null;\r\n age: number | null;\r\n yearsPlaying: number | null;\r\n discordUsername: string | null;\r\n preferredGames: string[] | string | null;\r\n};\r\n\r\nconst PlayerDetailsCard: React.FC<PlayerDetailsProps> = ({\r\n preferredPronouns,\r\n age,\r\n yearsPlaying,\r\n discordUsername,\r\n preferredGames,\r\n}) => {\r\n return (\r\n <Card\r\n sx={{\r\n margin: \"1rem\",\r\n background: \"linear-gradient(135deg, rgba(25, 118, 210, 0.8), rgba(25, 118, 210, 1))\", // Primary Blue Gradient\r\n boxShadow: \"0px 8px 15px rgba(25, 118, 210, 0.3)\", // Deep shadow based on the color\r\n borderRadius: \"12px\", // Rounded corners\r\n color: \"#FFFFFF\", // White as the base text color for contrast\r\n position: \"relative\",\r\n overflow: \"hidden\", // Ensures clean edges\r\n }}\r\n className=\"transition duration-300 transform hover:scale-105 hover:shadow-2xl\"\r\n >\r\n {/* Decorative Overlay */}\r\n <div\r\n className=\"absolute inset-0 bg-gradient-to-t from-white/10 to-transparent opacity-60\"\r\n aria-hidden=\"true\"\r\n ></div>\r\n\r\n <CardContent className=\"relative p-6\">\r\n {/* Title */}\r\n <Typography\r\n variant=\"h5\"\r\n className=\"font-bold uppercase text-center tracking-wide mb-4\"\r\n sx={{\r\n color: \"#FFFFFF\", // Bright white for high contrast\r\n textShadow: \"0px 4px 8px rgba(0, 0, 0, 0.5)\", // Stronger shadow for bold presence\r\n fontSize: \"1.5rem\", // Slightly larger title size\r\n }}\r\n >\r\n Player Details\r\n </Typography>\r\n\r\n {/* Details Section */}\r\n <div className=\"space-y-3\">\r\n {preferredPronouns && (\r\n <Typography\r\n variant=\"body2\"\r\n className=\"text-sm font-medium\"\r\n sx={{\r\n color: \"#FFFFFF\",\r\n textShadow: \"0px 2px 6px rgba(0, 0, 0, 0.5)\",\r\n fontWeight: \"bold\",\r\n }}\r\n >\r\n <span className=\"font-extrabold text-cyan-300\">Preferred Pronouns:</span> {preferredPronouns}\r\n </Typography>\r\n )}\r\n {age !== null && (\r\n <Typography\r\n variant=\"body2\"\r\n className=\"text-sm font-medium\"\r\n sx={{\r\n color: \"#FFFFFF\",\r\n textShadow: \"0px 2px 6px rgba(0, 0, 0, 0.5)\",\r\n fontWeight: \"bold\",\r\n }}\r\n >\r\n <span className=\"font-extrabold text-cyan-300\">Age:</span> {age}\r\n </Typography>\r\n )}\r\n {yearsPlaying !== null && (\r\n <Typography\r\n variant=\"body2\"\r\n className=\"text-sm font-medium\"\r\n sx={{\r\n color: \"#FFFFFF\",\r\n textShadow: \"0px 2px 6px rgba(0, 0, 0, 0.5)\",\r\n fontWeight: \"bold\",\r\n }}\r\n >\r\n <span className=\"font-extrabold text-cyan-300\">Years Playing:</span> {yearsPlaying}\r\n </Typography>\r\n )}\r\n {discordUsername && (\r\n <Typography\r\n variant=\"body2\"\r\n className=\"text-sm font-medium\"\r\n sx={{\r\n color: \"#FFFFFF\",\r\n textShadow: \"0px 2px 6px rgba(0, 0, 0, 0.5)\",\r\n fontWeight: \"bold\",\r\n }}\r\n >\r\n <span className=\"font-extrabold text-cyan-300\">Discord Username:</span> {discordUsername}\r\n </Typography>\r\n )}\r\n {preferredGames && (\r\n <Typography\r\n variant=\"body2\"\r\n className=\"text-sm font-medium\"\r\n sx={{\r\n color: \"#FFFFFF\",\r\n textShadow: \"0px 2px 6px rgba(0, 0, 0, 0.5)\",\r\n fontWeight: \"bold\",\r\n }}\r\n >\r\n <span className=\"font-extrabold text-cyan-300\">Preferred Games:</span>{\" \"}\r\n {Array.isArray(preferredGames) ? preferredGames.join(\", \") : preferredGames}\r\n </Typography>\r\n )}\r\n </div>\r\n\r\n {/* Footer Section */}\r\n <div className=\"mt-6 text-center\">\r\n <Typography\r\n variant=\"caption\"\r\n className=\"text-xs italic\"\r\n sx={{\r\n color: \"#BBDEFB\", // Subtle light blue for footer text\r\n textShadow: \"0px 1px 3px rgba(0, 0, 0, 0.2)\",\r\n }}\r\n >\r\n All information is player-submitted.\r\n </Typography>\r\n </div>\r\n </CardContent>\r\n </Card>\r\n );\r\n};\r\n\r\nexport default PlayerDetailsCard;\r\n\r\n","\"use client\";\r\n\r\nimport React, { useState, useEffect } from \"react\";\r\nimport { Card, CardMedia, CardContent, Typography } from \"@mui/material\";\r\nimport {DEFAULT_PROFILE_PIC, ProfilePictureSettings} from \"@/data/values\";\r\n\r\nexport type PlayerDisplayProps = {\r\n profilePicture: string | null;\r\n username: string;\r\n bio: string | null;\r\n preferredPronouns: string | null;\r\n};\r\n\r\nconst PlayerDisplayCard: React.FC<PlayerDisplayProps> = ({\r\n profilePicture,\r\n username,\r\n bio,\r\n preferredPronouns,\r\n }) => {\r\n const [imageSrc, setImageSrc] = useState<string>(DEFAULT_PROFILE_PIC);\r\n\r\n useEffect(() => {\r\n async function validateImage() {\r\n const newImage = profilePicture || DEFAULT_PROFILE_PIC;\r\n if (!profilePicture) {\r\n setImageSrc(DEFAULT_PROFILE_PIC);\r\n return;\r\n }\r\n\r\n const img = new Image();\r\n img.src = newImage;\r\n\r\n img.onload = () => {\r\n setImageSrc(newImage);\r\n };\r\n\r\n img.onerror = () => {\r\n setImageSrc(DEFAULT_PROFILE_PIC);\r\n };\r\n }\r\n\r\n validateImage();\r\n }, [profilePicture]);\r\n\r\n return (\r\n <Card\r\n sx={{\r\n margin: \"1rem\",\r\n background: \"linear-gradient(135deg, rgba(25, 118, 210, 0.8), rgba(25, 118, 210, 1))\", // Vibrant blue gradient\r\n boxShadow: \"0px 8px 15px rgba(25, 118, 210, 0.3)\", // Blue shadow to add depth\r\n borderRadius: \"12px\", // Smooth rounded corners\r\n color: \"#FFFFFF\", // White text for high contrast\r\n overflow: \"hidden\", // Clean edges\r\n }}\r\n className=\"transition duration-300 transform hover:scale-105 hover:shadow-2xl\"\r\n >\r\n {/* Image Section */}\r\n <CardMedia\r\n component=\"img\"\r\n image={imageSrc}\r\n alt={`${username}'s Profile Picture`}\r\n sx={{\r\n aspectRatio: ProfilePictureSettings.aspectRatio,\r\n height: \"auto\", // Updates to maintain aspect ratio and fill space nicely\r\n width: \"100%\",\r\n objectFit: \"cover\",\r\n }}\r\n />\r\n\r\n <CardContent className=\"relative p-6\">\r\n {/* Username */}\r\n <Typography\r\n variant=\"h5\"\r\n component=\"div\"\r\n className=\"font-bold text-lg uppercase text-center tracking-wide mb-2\"\r\n sx={{\r\n color: \"#FFFFFF\", // Pure white for username\r\n fontSize: \"1.5rem\",\r\n textShadow: \"0px 3px 6px rgba(0, 0, 0, 0.5)\", // Strong shadow for visibility\r\n }}\r\n >\r\n {username}\r\n </Typography>\r\n\r\n {/* Preferred Pronouns */}\r\n {preferredPronouns && (\r\n <Typography\r\n variant=\"body2\"\r\n className=\"text-sm font-medium\"\r\n sx={{\r\n color: \"#E3F2FD\",\r\n textShadow: \"0px 2px 4px rgba(0, 0, 0, 0.3)\", // Subtle shadow for readability\r\n fontWeight: \"bold\", // Emphasize key details\r\n marginBottom: \"1rem\",\r\n }}\r\n >\r\n {preferredPronouns}\r\n </Typography>\r\n )}\r\n\r\n {/* Bio */}\r\n {bio && (\r\n <Typography\r\n variant=\"body2\"\r\n className=\"text-sm font-light\"\r\n sx={{\r\n color: \"#E3F2FD\", // Softer muted tone for secondary text\r\n textShadow: \"0px 2px 4px rgba(0, 0, 0, 0.3)\", // Subtle shadow for readability\r\n fontStyle: \"italic\", // Distinguish bio visually\r\n }}\r\n >\r\n {bio}\r\n </Typography>\r\n )}\r\n </CardContent>\r\n </Card>\r\n );\r\n};\r\n\r\nexport default PlayerDisplayCard;\r\n\r\n\r\n\r\n\r\n\r\n\r\n","\"use client\";\r\n\r\nimport React from \"react\";\r\nimport { Card, CardContent, CardHeader } from \"@mui/material\";\r\nimport { Tag } from \"@/types/tag\";\r\nimport Chip from \"@/components/shared/Chip\";\r\n\r\nexport type PlayerTagsCardProps = {\r\n tags: Tag[];\r\n};\r\n\r\nconst PlayerTagsCard: React.FC<PlayerTagsCardProps> = ({ tags = [] }) => {\r\n return (\r\n <Card sx={{\r\n margin: \"1rem\",\r\n borderRadius: \"12px\",\r\n boxShadow: \"0px 8px 15px rgba(25, 118, 210, 0.3)\",\r\n overflow: \"hidden\"\r\n }} className=\"transition duration-300 transform hover:scale-105 hover:shadow-2xl\">\r\n <CardHeader\r\n title=\"Player Tags\"\r\n sx={{\r\n background: \"linear-gradient(135deg, rgba(25, 118, 210, 0.8), rgba(25, 118, 210, 1))\",\r\n color: \"#FFFFFF\",\r\n fontSize: \"1.5rem\",\r\n textShadow: \"0px 3px 6px rgba(0, 0, 0, 0.5)\",\r\n '& .MuiCardHeader-title': {\r\n fontWeight: \"bold\",\r\n fontSize: \"1.5rem\",\r\n textAlign: \"center\",\r\n textTransform: \"uppercase\",\r\n letterSpacing: \"0.05em\"\r\n }\r\n }}\r\n />\r\n <CardContent className=\"p-6\">\r\n <div className=\"flex flex-wrap gap-2\">\r\n {tags.map((tag) => (\r\n <Chip key={tag.id} tag={tag} />\r\n ))}\r\n </div>\r\n </CardContent>\r\n </Card>\r\n );\r\n};\r\n\r\nexport default PlayerTagsCard;","\"use client\";\r\n\r\nimport React from \"react\";\r\nimport { Card, CardContent, Typography } from \"@mui/material\";\r\n\r\nexport type PlayerPromptCardProps = {\r\n title: string | null;\r\n description: string | null;\r\n};\r\n\r\nconst PlayerPromptCard: React.FC<PlayerPromptCardProps> = ({ title, description }) => (\r\n <Card\r\n sx={{\r\n margin: \"1rem\",\r\n background: \"linear-gradient(135deg, rgba(25, 118, 210, 0.8), rgba(25, 118, 210, 1))\", // Gradient color scheme\r\n boxShadow: \"0px 8px 15px rgba(25, 118, 210, 0.3)\", // Card shadow\r\n borderRadius: \"12px\", // Rounded corners\r\n color: \"#FFFFFF\", // Text contrast with the background\r\n overflow: \"hidden\", // Keeps consistent and clean card shape\r\n }}\r\n className=\"transition duration-300 transform hover:scale-105 hover:shadow-2xl\"\r\n >\r\n <CardContent className=\"p-6\">\r\n {/* Title */}\r\n {title && (\r\n <Typography\r\n variant=\"h5\"\r\n className=\"font-bold text-lg uppercase text-center tracking-wide mb-4\"\r\n sx={{\r\n color: \"#FFFFFF\", // Bright white for high visibility\r\n textShadow: \"0px 3px 6px rgba(0, 0, 0, 0.5)\", // Strong text shadow for contrast\r\n fontSize: \"1.5rem\",\r\n }}\r\n >\r\n {title}\r\n </Typography>\r\n )}\r\n\r\n {/* Description */}\r\n {description && (\r\n <Typography\r\n variant=\"body2\"\r\n className=\"text-sm font-medium text-center\"\r\n sx={{\r\n color: \"#E3F2FD\", // Softer light blue for description\r\n textShadow: \"0px 2px 4px rgba(0, 0, 0, 0.3)\", // Subtle shadow\r\n lineHeight: 1.6,\r\n marginTop: \"1rem\",\r\n }}\r\n >\r\n {description}\r\n </Typography>\r\n )}\r\n </CardContent>\r\n </Card>\r\n);\r\n\r\nexport default PlayerPromptCard;\r\n\r\n","\"use client\";\r\n\r\nimport React, { useMemo, useState } from \"react\";\r\nimport Autocomplete from \"@mui/material/Autocomplete\";\r\nimport { Card, CardContent, CardHeader, TextField } from \"@mui/material\";\r\nimport Popper, { PopperProps } from \"@mui/material/Popper\";\r\nimport { Tag } from \"@/types/tag\";\r\nimport Chip from \"@/components/shared/Chip\";\r\n\r\nexport interface PlayerTagsEditProps {\r\n selectedTags: Tag[];\r\n possibleTags: Tag[];\r\n onToggleTag: (id: number) => void;\r\n}\r\n\r\nconst PlayerTagsEdit: React.FC<PlayerTagsEditProps> = ({\r\n selectedTags = [],\r\n possibleTags = [],\r\n onToggleTag,\r\n}) => {\r\n const [inputValue, setInputValue] = useState(\"\");\r\n const selectedIds = useMemo(() => selectedTags.map((tag) => tag.id), [selectedTags]);\r\n\r\n const options = useMemo(\r\n () => possibleTags.map((tag) => ({ value: tag.id, label: tag.label, alternate_title: tag.alternate_title })),\r\n [possibleTags]\r\n );\r\n\r\n return (\r\n <Card sx={{\r\n margin: \"1rem\",\r\n borderRadius: \"12px\",\r\n boxShadow: \"0px 8px 15px rgba(25, 118, 210, 0.3)\",\r\n overflow: \"hidden\"\r\n }}>\r\n <CardHeader \r\n title=\"Player Tags\" \r\n sx={{\r\n background: \"linear-gradient(135deg, rgba(25, 118, 210, 0.8), rgba(25, 118, 210, 1))\",\r\n color: \"#FFFFFF\",\r\n fontSize: \"1.5rem\",\r\n textShadow: \"0px 3px 6px rgba(0, 0, 0, 0.5)\",\r\n '& .MuiCardHeader-title': {\r\n fontWeight: \"bold\",\r\n fontSize: \"1.5rem\",\r\n textAlign: \"center\",\r\n textTransform: \"uppercase\",\r\n letterSpacing: \"0.05em\"\r\n }\r\n }}\r\n />\r\n <CardContent className=\"p-6\">\r\n <div className=\"flex flex-wrap gap-2 mb-4\">\r\n {selectedTags.map((tag) => (\r\n <Chip\r\n key={tag.id}\r\n tag={tag}\r\n removeCallback={() => onToggleTag(tag.id)}\r\n />\r\n ))}\r\n </div>\r\n <Autocomplete\r\n key={selectedIds.join(\"-\")}\r\n options={options}\r\n filterOptions={(availableOptions, state) => {\r\n const query = state.inputValue.toLowerCase();\r\n return availableOptions\r\n .filter(\r\n (option) =>\r\n !selectedIds.includes(option.value) &&\r\n (option.label.toLowerCase().includes(query) ||\r\n option.alternate_title?.some((title) => title.toLowerCase().includes(query)))\r\n )\r\n .slice(0, 5);\r\n }}\r\n value={null}\r\n inputValue={inputValue}\r\n onInputChange={(event, newInputValue) => {\r\n if (event && event.type === \"change\") {\r\n setInputValue(newInputValue);\r\n }\r\n }}\r\n onChange={(event, newValue) => {\r\n if (newValue) {\r\n onToggleTag(newValue.value);\r\n }\r\n setInputValue(\"\");\r\n }}\r\n slots={{ popper: CustomPopper }}\r\n renderInput={(params) => (\r\n <TextField\r\n {...params}\r\n label=\"Select Tags\"\r\n variant=\"outlined\"\r\n />\r\n )}\r\n />\r\n </CardContent>\r\n </Card>\r\n );\r\n};\r\n\r\nconst CustomPopper = (props: PopperProps) => {\r\n return (\r\n <Popper\r\n {...props}\r\n modifiers={[\r\n {\r\n name: \"preventOverflow\",\r\n options: {\r\n boundary: \"viewport\",\r\n },\r\n },\r\n {\r\n name: \"offset\",\r\n options: {\r\n offset: [0, -10],\r\n },\r\n },\r\n ]}\r\n placement=\"top-start\"\r\n />\r\n );\r\n};\r\n\r\nexport default PlayerTagsEdit;\r\n","\"use client\";\r\n\r\nimport React from \"react\";\r\nimport { Grid, Box, useMediaQuery, useTheme, NoSsr } from \"@mui/material\";\r\nimport PlayerDisplayCard, { PlayerDisplayProps } from \"./PlayerDisplayCard\";\r\nimport PlayerDetailsCard, { PlayerDetailsProps } from \"./PlayerDetailsCard\";\r\nimport PlayerTagsCard from \"./PlayerTagsCard\";\r\nimport PlayerPromptCard, { PlayerPromptCardProps } from \"./PlayerPromptCard\";\r\nimport PlayerTagsEdit from \"./PlayerTagsEdit\";\r\nimport { Tag } from \"@/types/tag\";\r\n\r\nexport type PlayerPageLayoutProps = {\r\n playerData: PlayerDisplayProps & PlayerDetailsProps;\r\n tags: Tag[];\r\n blurbs: PlayerPromptCardProps[];\r\n isOwner?: boolean;\r\n possibleTags?: Tag[];\r\n onToggleTag?: (tagId: number) => void;\r\n};\r\n\r\nexport default function PlayerPageLayout({\r\n playerData,\r\n tags = [],\r\n blurbs = [],\r\n isOwner = false,\r\n possibleTags = [],\r\n onToggleTag = () => {},\r\n}: PlayerPageLayoutProps) {\r\n const theme = useTheme();\r\n const isSmallScreen = useMediaQuery(theme.breakpoints.down(\"lg\"));\r\n\r\n const tagsElement = isOwner ? (\r\n <PlayerTagsEdit\r\n selectedTags={tags}\r\n possibleTags={possibleTags}\r\n onToggleTag={onToggleTag}\r\n />\r\n ) : (\r\n <PlayerTagsCard tags={tags} />\r\n );\r\n\r\n return (\r\n <NoSsr>\r\n <Box sx={{ padding: \"2rem\", marginRight: \"auto\", marginLeft: \"auto\" }} justifyContent=\"center\">\r\n <Grid container spacing={3} justifyContent=\"center\" sx={{ marginRight: \"auto\", marginLeft: \"auto\" }}>\r\n {/* Left Lane: PlayerDetails and Tags (only on large screens) */}\r\n {!isSmallScreen && (\r\n <Grid size={{ xs: 12, lg: 3 }}>\r\n <PlayerDetailsCard\r\n preferredPronouns={playerData.preferredPronouns}\r\n age={playerData.age}\r\n yearsPlaying={playerData.yearsPlaying}\r\n discordUsername={playerData.discordUsername}\r\n preferredGames={playerData.preferredGames}\r\n />\r\n {tagsElement}\r\n </Grid>\r\n )}\r\n\r\n {/* Right Side: All other cards */}\r\n <Grid size={{ xs: 12, lg: 6 }}>\r\n <Grid container spacing={3}>\r\n {/* PlayerDisplay Card */}\r\n <Grid size={{ xs: 12, lg: 8 }}>\r\n <PlayerDisplayCard\r\n profilePicture={playerData.profilePicture}\r\n username={playerData.username}\r\n bio={playerData.bio}\r\n preferredPronouns={playerData.preferredPronouns}\r\n />\r\n </Grid>\r\n\r\n {/* Render DetailsCard in small screens */}\r\n {isSmallScreen && (\r\n <Grid size={{ xs: 12, lg: 3 }}>\r\n <PlayerDetailsCard\r\n preferredPronouns={playerData.preferredPronouns}\r\n age={playerData.age}\r\n yearsPlaying={playerData.yearsPlaying}\r\n discordUsername={playerData.discordUsername}\r\n preferredGames={playerData.preferredGames}\r\n />\r\n </Grid>\r\n )}\r\n\r\n {/* PlayerPromptCards */}\r\n {blurbs.map((blurb, index) => (\r\n <Grid size={{ xs: 12, lg: 8 }} key={index}>\r\n <PlayerPromptCard\r\n title={blurb.title}\r\n description={blurb.description}\r\n />\r\n </Grid>\r\n ))}\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n </Box>\r\n </NoSsr>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport React from 'react';\r\nimport Typography from '@mui/material/Typography';\r\nimport FormControl from '@mui/material/FormControl';\r\nimport Select from '@mui/material/Select';\r\nimport MenuItem from '@mui/material/MenuItem';\r\nimport { DistanceOption } from '@/types/search';\r\n\r\ninterface DistanceFilterProps {\r\n distances: DistanceOption[];\r\n selectedDistance?: number;\r\n onChange: (distance: number) => void;\r\n}\r\n\r\n/**\r\n * Component for filtering search results by distance\r\n * //todo add JSDoc for this\r\n */\r\nconst DistanceFilter: React.FC<DistanceFilterProps> = ({ distances, selectedDistance, onChange }) => {\r\n return (\r\n <>\r\n <Typography variant=\"h6\" gutterBottom>\r\n Distance\r\n </Typography>\r\n <FormControl fullWidth size=\"small\">\r\n <Select\r\n value={selectedDistance !== undefined ? selectedDistance : ''}\r\n onChange={(e) => onChange(Number(e.target.value))}\r\n displayEmpty\r\n >\r\n <MenuItem value=\"\">\r\n <em>Any Distance</em>\r\n </MenuItem>\r\n {distances.map((option) => (\r\n <MenuItem key={option.value} value={option.value}>\r\n {option.display}\r\n </MenuItem>\r\n ))}\r\n </Select>\r\n </FormControl>\r\n </>\r\n );\r\n};\r\n\r\nexport default DistanceFilter;\r\n","\"use client\"\r\nimport React from 'react';\r\nimport FormControlLabel from '@mui/material/FormControlLabel';\r\nimport Checkbox from '@mui/material/Checkbox';\r\nimport Box from '@mui/material/Box';\r\n\r\ninterface ExpiredTablesFilterProps {\r\n includeExpiredTables: boolean;\r\n onChange: (include: boolean) => void;\r\n}\r\n\r\nconst ExpiredTablesFilter: React.FC<ExpiredTablesFilterProps> = ({\r\n includeExpiredTables,\r\n onChange\r\n}) => {\r\n return (\r\n <Box sx={{ mt: 2 }}>\r\n <FormControlLabel\r\n control={\r\n <Checkbox\r\n checked={includeExpiredTables}\r\n onChange={(e) => onChange(e.target.checked)}\r\n color=\"primary\"\r\n />\r\n }\r\n label=\"Show expired tables\"\r\n />\r\n </Box>\r\n );\r\n};\r\n\r\nexport default ExpiredTablesFilter;\r\n","\"use client\";\n\nimport React from 'react';\nimport Typography from '@mui/material/Typography';\nimport FormControl from '@mui/material/FormControl';\nimport RadioGroup from '@mui/material/RadioGroup';\nimport FormControlLabel from '@mui/material/FormControlLabel';\nimport Radio from '@mui/material/Radio';\n\ninterface SortOptionsProps {\n defaultValue?: string;\n onChange?: (sortOption: string) => void;\n}\n\nconst SORT_OPTIONS = [\n { id: 'relevance', label: 'Relevance' },\n { id: 'newest', label: 'Newest' },\n { id: 'popular', label: 'Most Popular' },\n];\n\nconst SortOptions: React.FC<SortOptionsProps> = ({\n defaultValue = 'relevance',\n onChange\n}) => {\n const handleSortChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n onChange?.(event.target.value);\n };\n\n return (\n <>\n <Typography variant=\"h6\" gutterBottom>\n Sort By\n </Typography>\n <FormControl>\n <RadioGroup defaultValue={defaultValue} onChange={handleSortChange}>\n {SORT_OPTIONS.map((option) => (\n <FormControlLabel\n key={option.id}\n value={option.id}\n control={<Radio />}\n label={option.label}\n />\n ))}\n </RadioGroup>\n </FormControl>\n </>\n );\n};\n\nexport default SortOptions;\n","\"use client\"\r\nimport React from 'react';\r\nimport Typography from '@mui/material/Typography';\r\nimport Box from '@mui/material/Box';\r\nimport Autocomplete from '@mui/material/Autocomplete';\r\nimport TextField from '@mui/material/TextField';\r\nimport Popper, { PopperProps } from '@mui/material/Popper';\r\nimport {Tag} from '@/types/tag';\r\nimport Divider from '@mui/material/Divider';\r\nimport Chip from \"@/components/shared/Chip\";\r\n\r\ninterface TagsFilterProps {\r\n initialSelectedTags?: {\r\n mustHave: number[];\r\n mustNotHave: number[];\r\n shouldHaveAtLeastOne: number[];\r\n };\r\n onChange?: (selectedTags: {\r\n mustHave: number[];\r\n mustNotHave: number[];\r\n shouldHaveAtLeastOne: number[];\r\n }) => void;\r\n tags: Tag[];\r\n}\r\n\r\ntype TagCategory = 'mustHave' | 'mustNotHave' | 'shouldHaveAtLeastOne';\r\n\r\n/**\r\n * Component for filtering search results by tags\r\n * Uses Autocomplete for interactive tag selection similar to PlayerTagsEdit\r\n * Provides three separate sections for tags: must haves, must not haves, and should contain at least one\r\n */\r\nconst TagsFilter: React.FC<TagsFilterProps> = ({ \r\n onChange, tags: Tags = [], initialSelectedTags\r\n}) => {\r\n const [mustHaveTags, setMustHaveTags] = React.useState<number[]>(initialSelectedTags?.mustHave || []);\r\n const [mustNotHaveTags, setMustNotHaveTags] = React.useState<number[]>(initialSelectedTags?.mustNotHave || []);\r\n const [shouldHaveAtLeastOneTags, setShouldHaveAtLeastOneTags] = React.useState<number[]>(initialSelectedTags?.shouldHaveAtLeastOne || []);\r\n\r\n // Update state when initialSelectedTags changes\r\n React.useEffect(() => {\r\n if (initialSelectedTags) {\r\n setMustHaveTags(initialSelectedTags.mustHave || []);\r\n setMustNotHaveTags(initialSelectedTags.mustNotHave || []);\r\n setShouldHaveAtLeastOneTags(initialSelectedTags.shouldHaveAtLeastOne || []);\r\n }\r\n }, [initialSelectedTags]);\r\n\r\n Tags = !!Tags ? Tags : [];\r\n \r\n const [inputValues, setInputValues] = React.useState({\r\n mustHave: '',\r\n mustNotHave: '',\r\n shouldHaveAtLeastOne: ''\r\n });\r\n\r\n // Convert tags to format needed for Autocomplete\r\n const tagOptions = React.useMemo(() => {\r\n console.log(\"available tags: \" + JSON.stringify(Tags))\r\n console.log(!Tags)\r\n return Tags?.map(tag => ({\r\n value: tag.id,\r\n label: tag.label\r\n })) ?? [];\r\n }, [Tags]);\r\n\r\n const handleTagChange = (tagId: number, category: TagCategory) => {\r\n let newTags: number[] = [];\r\n \r\n switch (category) {\r\n case 'mustHave':\r\n newTags = mustHaveTags.includes(tagId)\r\n ? mustHaveTags.filter(id => id !== tagId)\r\n : [...mustHaveTags, tagId];\r\n setMustHaveTags(newTags);\r\n break;\r\n case 'mustNotHave':\r\n newTags = mustNotHaveTags.includes(tagId)\r\n ? mustNotHaveTags.filter(id => id !== tagId)\r\n : [...mustNotHaveTags, tagId];\r\n setMustNotHaveTags(newTags);\r\n break;\r\n case 'shouldHaveAtLeastOne':\r\n newTags = shouldHaveAtLeastOneTags.includes(tagId)\r\n ? shouldHaveAtLeastOneTags.filter(id => id !== tagId)\r\n : [...shouldHaveAtLeastOneTags, tagId];\r\n setShouldHaveAtLeastOneTags(newTags);\r\n break;\r\n }\r\n \r\n if (onChange) {\r\n onChange({\r\n mustHave: category === 'mustHave' ? newTags : mustHaveTags,\r\n mustNotHave: category === 'mustNotHave' ? newTags : mustNotHaveTags,\r\n shouldHaveAtLeastOne: category === 'shouldHaveAtLeastOne' ? newTags : shouldHaveAtLeastOneTags\r\n });\r\n }\r\n };\r\n\r\n // Render selected tags as labels with remove buttons\r\n const renderSelectedTags = (selectedTags: number[], category: TagCategory) => {\r\n const tagValues: Tag[] = [];\r\n\r\n Tags?.forEach((tag) => {\r\n if (selectedTags.includes(tag.id)) {\r\n tagValues.push(tag);\r\n }\r\n });\r\n\r\n if (tagValues.length === 0) {\r\n return null;\r\n }\r\n\r\n return (\r\n <Box sx={{ display: 'flex', flexWrap: 'wrap', gap: 1, mb: 2 }}>\r\n {tagValues.map((tag) => (\r\n <Chip\r\n key={tag.id}\r\n tag={tag}\r\n removeCallback={(tagId) => handleTagChange(tagId, category)}\r\n />\r\n ))}\r\n </Box>\r\n );\r\n };\r\n\r\n // Helper function to create an Autocomplete component for a specific category\r\n const createTagSelector = (category: TagCategory, label: string) => {\r\n const selectedTags = \r\n category === 'mustHave' \r\n ? mustHaveTags \r\n : category === 'mustNotHave' \r\n ? mustNotHaveTags \r\n : shouldHaveAtLeastOneTags;\r\n \r\n return (\r\n <>\r\n <Typography variant=\"subtitle1\" gutterBottom sx={{ mt: 2 }}>\r\n {label}\r\n </Typography>\r\n \r\n {renderSelectedTags(selectedTags, category)}\r\n \r\n <Autocomplete\r\n key={`${category}-${selectedTags.join('-')}`}\r\n options={tagOptions}\r\n filterOptions={(options, state) => {\r\n // Determine which tags to exclude based on the current category\r\n const tagsToExclude = new Set<number>();\r\n \r\n // Always exclude tags already selected in the current category\r\n selectedTags.forEach(id => tagsToExclude.add(id));\r\n \r\n // Exclude tags selected in other categories\r\n if (category !== 'mustHave') {\r\n mustHaveTags.forEach(id => tagsToExclude.add(id));\r\n }\r\n if (category !== 'mustNotHave') {\r\n mustNotHaveTags.forEach(id => tagsToExclude.add(id));\r\n }\r\n if (category !== 'shouldHaveAtLeastOne') {\r\n shouldHaveAtLeastOneTags.forEach(id => tagsToExclude.add(id));\r\n }\r\n \r\n return options\r\n .filter(\r\n (option) =>\r\n // Exclude options already selected in any category\r\n !tagsToExclude.has(option.value) &&\r\n // Filter based on user input\r\n option.label.toLowerCase().includes(state.inputValue.toLowerCase())\r\n )\r\n .slice(0, 3); // Show up to 3 results\r\n }}\r\n value={null} // Clearing the selected value immediately\r\n inputValue={inputValues[category]} // Bind the input value to state\r\n onInputChange={(event, newInputValue) => {\r\n // Check if this is clearing after selection\r\n if (event && event.type === 'change') {\r\n setInputValues({\r\n ...inputValues,\r\n [category]: newInputValue\r\n });\r\n }\r\n }}\r\n onChange={(event, newValue) => {\r\n if (newValue) {\r\n handleTagChange(newValue.value, category); // Update selected tags\r\n }\r\n // Clear the text box after selection\r\n setInputValues({\r\n ...inputValues,\r\n [category]: ''\r\n });\r\n }}\r\n slots={{ popper: CustomPopper }}\r\n renderInput={(params) => <TextField {...params} label={`Select ${label}`} />}\r\n />\r\n </>\r\n );\r\n };\r\n\r\n return (\r\n <>\r\n <Typography variant=\"h6\" gutterBottom>\r\n Tags\r\n </Typography>\r\n \r\n {createTagSelector('mustHave', 'Must Have Tags')}\r\n \r\n <Divider sx={{ my: 2 }} />\r\n \r\n {createTagSelector('mustNotHave', 'Must Not Have Tags')}\r\n \r\n <Divider sx={{ my: 2 }} />\r\n \r\n {createTagSelector('shouldHaveAtLeastOne', 'Should Contain At Least One Tag')}\r\n </>\r\n );\r\n};\r\n\r\n// Custom popper for dropdown placement\r\nconst CustomPopper = (props: PopperProps) => {\r\n return (\r\n <Popper\r\n {...props}\r\n modifiers={[\r\n {\r\n name: \"preventOverflow\",\r\n options: {\r\n boundary: \"viewport\", // Prevent the Popper from going outside the viewport\r\n },\r\n },\r\n {\r\n name: \"offset\",\r\n options: {\r\n offset: [0, -10], // Set negative vertical offset (adjust value as needed)\r\n },\r\n },\r\n ]}\r\n placement=\"top-start\" // Position the dropdown above the input field\r\n />\r\n );\r\n};\r\n\r\nexport default TagsFilter;","import React, { useEffect } from 'react';\r\nimport Typography from '@mui/material/Typography';\r\nimport TextField from '@mui/material/TextField';\r\nimport FormControlLabel from '@mui/material/FormControlLabel';\r\nimport Checkbox from '@mui/material/Checkbox';\r\nimport Box from '@mui/material/Box';\r\n\r\ninterface TextSearchCardProps {\r\n onChange?: (textSearch: { query: string; titleOnly: boolean }) => void;\r\n selectedTypes: string[];\r\n initialTextSearch?: {\r\n query: string;\r\n titleOnly: boolean;\r\n };\r\n}\r\n\r\n/**\r\n * Component for searching text within tables and events\r\n * Only shown when table or event types are selected\r\n */\r\nconst TextSearchCard: React.FC<TextSearchCardProps> = ({ onChange, selectedTypes, initialTextSearch }) => {\r\n const [query, setQuery] = React.useState<string>(initialTextSearch?.query || '');\r\n const [titleOnly, setTitleOnly] = React.useState<boolean>(initialTextSearch?.titleOnly || false);\r\n\r\n // Update state when initialTextSearch changes\r\n useEffect(() => {\r\n if (initialTextSearch) {\r\n setQuery(initialTextSearch.query || '');\r\n setTitleOnly(initialTextSearch.titleOnly || false);\r\n }\r\n }, [initialTextSearch]);\r\n\r\n // Check if we should show this card (only when table or event is selected)\r\n const shouldShow = selectedTypes.includes('table') || selectedTypes.includes('event');\r\n\r\n if (!shouldShow) {\r\n return null;\r\n }\r\n\r\n const handleQueryChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n const newQuery = e.target.value;\r\n setQuery(newQuery);\r\n\r\n if (onChange) {\r\n onChange({ query: newQuery, titleOnly });\r\n }\r\n };\r\n\r\n const handleTitleOnlyChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n const newTitleOnly = e.target.checked;\r\n setTitleOnly(newTitleOnly);\r\n\r\n if (onChange) {\r\n onChange({ query, titleOnly: newTitleOnly });\r\n }\r\n };\r\n\r\n return (\r\n <>\r\n <Typography variant=\"h6\" gutterBottom>\r\n Text Search\r\n </Typography>\r\n <Box sx={{ mb: 2 }}>\r\n <TextField\r\n fullWidth\r\n label=\"Search in title and description\"\r\n variant=\"outlined\"\r\n value={query}\r\n onChange={handleQueryChange}\r\n placeholder=\"Enter search terms...\"\r\n sx={{ mb: 1 }}\r\n />\r\n <FormControlLabel\r\n control={\r\n <Checkbox \r\n checked={titleOnly}\r\n onChange={handleTitleOnlyChange}\r\n />\r\n }\r\n label=\"Search in title only\"\r\n />\r\n </Box>\r\n </>\r\n );\r\n};\r\n\r\nexport default TextSearchCard;\r\n","\"use client\";\n\nimport React, { useEffect } from 'react';\nimport Typography from '@mui/material/Typography';\nimport FormGroup from '@mui/material/FormGroup';\nimport FormControlLabel from '@mui/material/FormControlLabel';\nimport Checkbox from '@mui/material/Checkbox';\n\ninterface TypeFilterProps {\n types: { id: string; label: string }[];\n initialSelectedTypes?: string[];\n onChange?: (selectedTypes: string[]) => void;\n}\n\n/**\n * Component for filtering search results by type (player, event, table)\n */\nconst TypeFilter: React.FC<TypeFilterProps> = ({ types, initialSelectedTypes = [], onChange }) => {\n const [selectedTypes, setSelectedTypes] = React.useState<string[]>(initialSelectedTypes);\n\n // Update state when initialSelectedTypes changes\n useEffect(() => {\n setSelectedTypes(initialSelectedTypes);\n }, [initialSelectedTypes]);\n\n const handleTypeChange = (typeId: string) => {\n const newSelectedTypes = selectedTypes.includes(typeId)\n ? selectedTypes.filter(id => id !== typeId)\n : [...selectedTypes, typeId];\n\n setSelectedTypes(newSelectedTypes);\n\n if (onChange) {\n onChange(newSelectedTypes);\n }\n };\n\n return (\n <>\n <Typography variant=\"h6\" gutterBottom>\n Type\n </Typography>\n <FormGroup>\n {types.map((type) => (\n <FormControlLabel\n key={type.id}\n control={\n <Checkbox \n checked={selectedTypes.includes(type.id)}\n onChange={() => handleTypeChange(type.id)}\n />\n }\n label={type.label}\n />\n ))}\n </FormGroup>\n </>\n );\n};\n\nexport default TypeFilter;\n","\"use client\"\nimport React, { useEffect } from 'react';\nimport Box from '@mui/material/Box';\nimport Divider from '@mui/material/Divider';\nimport Button from '@mui/material/Button';\nimport SearchIcon from '@mui/icons-material/Search';\nimport TypeFilter from './Filters/TypeFilter';\nimport TagsFilter from './Filters/TagsFilter';\nimport TextSearchCard from './Filters/TextSearchCard';\nimport ExpiredTablesFilter from './Filters/ExpiredTablesFilter';\nimport DistanceFilter from './Filters/DistanceFilter';\nimport { Tag } from '@/types/tag';\nimport { DistanceOption } from '@/types/search';\n\ninterface FiltersContainerProps {\n initialSelectedTypes?: string[];\n initialSelectedTags?: {\n mustHave: number[];\n mustNotHave: number[];\n shouldHaveAtLeastOne: number[];\n };\n initialTextSearch?: {\n query: string;\n titleOnly: boolean;\n };\n includeExpiredTables?: boolean;\n distance?: number;\n distances: DistanceOption[];\n onTypeChange?: (selectedTypes: string[]) => void;\n onTagChange?: (selectedTags: {\n mustHave: number[];\n mustNotHave: number[];\n shouldHaveAtLeastOne: number[];\n }) => void;\n onTextSearchChange?: (textSearch: { query: string; titleOnly: boolean }) => void;\n onIncludeExpiredTablesChange?: (include: boolean) => void;\n onDistanceChange?: (distance: number) => void;\n onSubmit?: () => void;\n tags: Tag[];\n searchTypes: { id: string; label: string }[];\n}\n\n/**\n * Container component that combines all filter components\n */\nconst FiltersContainer: React.FC<FiltersContainerProps> = ({\n initialSelectedTypes = [],\n initialSelectedTags,\n initialTextSearch,\n includeExpiredTables = false,\n distance,\n distances,\n onTypeChange,\n onTagChange,\n onTextSearchChange,\n onIncludeExpiredTablesChange,\n onDistanceChange,\n onSubmit,\n tags,\n searchTypes\n}) => {\n // Track selected types to conditionally show TextSearchCard and ExpiredTablesFilter\n const [selectedTypes, setSelectedTypes] = React.useState<string[]>(initialSelectedTypes);\n\n // Update state when initialSelectedTypes changes\n useEffect(() => {\n setSelectedTypes(initialSelectedTypes);\n }, [initialSelectedTypes]);\n\n // Handler for type changes\n const handleTypeChange = (types: string[]) => {\n setSelectedTypes(types);\n if (onTypeChange) {\n onTypeChange(types);\n }\n };\n\n return (\n <Box component=\"form\" onSubmit={(e: React.FormEvent) => { e.preventDefault(); if (onSubmit) onSubmit(); }}>\n {/* Type Filters */}\n <TypeFilter \n types={searchTypes}\n initialSelectedTypes={initialSelectedTypes}\n onChange={handleTypeChange}\n />\n\n <Divider sx={{ my: 2 }} />\n\n {/* Distance Filter */}\n <DistanceFilter\n distances={distances}\n selectedDistance={distance}\n onChange={onDistanceChange || (() => {})}\n />\n\n <Divider sx={{ my: 2 }} />\n\n {/* Text Search - only shown when table or event is selected */}\n <TextSearchCard \n selectedTypes={selectedTypes}\n initialTextSearch={initialTextSearch}\n onChange={onTextSearchChange}\n />\n\n {/* Only show divider if TextSearchCard is visible */}\n {(selectedTypes.includes('table') || selectedTypes.includes('event')) && (\n <Divider sx={{ my: 2 }} />\n )}\n\n {/* Tags Filter */}\n <TagsFilter\n tags={tags}\n initialSelectedTags={initialSelectedTags}\n onChange={onTagChange} \n />\n\n <Divider sx={{ my: 2 }} />\n\n {/* Only show the expired tables filter when 'table' is selected */}\n {selectedTypes.includes('table') && (\n <>\n <ExpiredTablesFilter\n includeExpiredTables={includeExpiredTables}\n onChange={onIncludeExpiredTablesChange || (() => {})}\n />\n <Divider sx={{ my: 2 }} />\n </>\n )}\n\n {/* Submit Button */}\n <Box sx={{ display: 'flex', justifyContent: 'center', mt: 2 }}>\n <Button\n type=\"submit\"\n variant=\"contained\"\n color=\"primary\"\n size=\"large\"\n startIcon={<SearchIcon />}\n sx={{\n width: '100%',\n py: 1.5,\n borderRadius: 2,\n boxShadow: '0px 4px 10px rgba(0, 0, 0, 0.1)',\n background: 'linear-gradient(135deg, rgba(25, 118, 210, 0.8), rgba(25, 118, 210, 1))',\n '&:hover': {\n background: 'linear-gradient(135deg, rgba(25, 118, 210, 0.9), rgba(25, 118, 210, 1))',\n boxShadow: '0px 6px 15px rgba(0, 0, 0, 0.2)',\n }\n }}\n >\n Search\n </Button>\n </Box>\n </Box>\n );\n};\n\nexport default FiltersContainer;","\"use client\"\nimport React from 'react';\nimport ScrollableResultsList from './ScrollableResultsList';\nimport { SearchResultItem } from '@/types/search';\nimport { Tag } from '@/types/tag';\n\nexport interface PlayersScrollableListProps {\n results: SearchResultItem[];\n tags: Tag[];\n maxHeight?: number | string;\n onResultClick?: (id: number) => void;\n}\n\n/**\n * Thin wrapper to show only player results in a scrollable list.\n */\nconst PlayersScrollableList: React.FC<PlayersScrollableListProps> = ({\n results,\n tags,\n maxHeight,\n onResultClick,\n}) => {\n const players = (results || []).filter((r): r is SearchResultItem & { type: 'player' } => r?.type === 'player');\n\n return (\n <ScrollableResultsList\n results={players}\n tags={tags}\n maxHeight={maxHeight}\n onResultClick={onResultClick ? (id, type) => {\n if (type === 'player') onResultClick(id);\n } : undefined}\n />\n );\n};\n\nexport default PlayersScrollableList;\n","\"use client\";\n\nimport React from 'react';\r\nimport BaseSearchResultCard from './BaseSearchResultCard';\r\nimport { Tag } from '@/types/tag';\r\n\r\ninterface SearchResultCardProps {\r\n result: any;\r\n onClick?: (id: number) => void;\r\n tags: Tag[];\r\n}\r\n\r\n/**\r\n * @deprecated Use specialized card components (PlayerResultCard, TableResultCard, EventResultCard) instead\r\n * This component is kept for backward compatibility\r\n */\r\nconst SearchResultCard: React.FC<SearchResultCardProps> = ({ \r\n result,\r\n onClick,\r\n tags,\r\n}) => {\r\n return (\r\n <BaseSearchResultCard result={result} onClick={onClick} tags={tags}>\r\n {/* No specialized content for the generic card */}\r\n </BaseSearchResultCard>\r\n );\r\n};\r\n\r\nexport default SearchResultCard;","import React, { useState, useEffect } from 'react';\nimport Grid from '@mui/material/Grid';\nimport Card from '@mui/material/Card';\nimport CardHeader from '@mui/material/CardHeader';\nimport CardContent from '@mui/material/CardContent';\nimport Box from '@mui/material/Box';\nimport CircularProgress from '@mui/material/CircularProgress';\nimport { useMediaQuery, useTheme } from '@mui/material';\nimport FiltersContainer from './FiltersContainer';\nimport ResultsContainer from './ResultsContainer';\nimport { SearchResultItem, PaginationData, SearchCriteria, DistanceOption } from '@/types/search';\nimport { Tag } from '@/types/tag';\n\ninterface SearchPageLayoutProps {\n /**\n * Search results to display\n */\n results: SearchResultItem[];\n\n /**\n * Pagination information\n */\n pagination?: PaginationData;\n\n /**\n * Optional callback for when the packet changes\n */\n onPacketChange?: (packet: number) => void;\n\n /**\n * Optional title for the search page\n */\n title?: string;\n\n /**\n * Initial selected types for the type filter\n */\n initialSelectedTypes?: string[];\n\n /**\n * Initial selected tags for the tag filter\n */\n initialSelectedTags?: {\n mustHave: number[];\n mustNotHave: number[];\n shouldHaveAtLeastOne: number[];\n };\n\n /**\n * Initial selected distance for the distance filter\n */\n initialDistance?: number;\n\n /**\n * Array of valid distances to search\n */\n distances: DistanceOption[];\n\n /**\n * Initial text search values\n */\n initialTextSearch?: {\n query: string;\n titleOnly: boolean;\n };\n\n /**\n * Include expired tables option\n */\n includeExpiredTables?: boolean;\n\n /**\n * Optional callback for when a type filter changes\n */\n onTypeChange?: (selectedTypes: string[]) => void;\n\n /**\n * Optional callback for when tag filter changes\n */\n onTagChange?: (selectedTags: {\n mustHave: number[];\n mustNotHave: number[];\n shouldHaveAtLeastOne: number[];\n }) => void;\n\n /**\n * Optional callback for when text search changes\n */\n onTextSearchChange?: (textSearch: { query: string; titleOnly: boolean }) => void;\n\n /**\n * Optional callback for when include expired tables changes\n */\n onIncludeExpiredTablesChange?: (include: boolean) => void;\n\n /**\n * Optional callback for when distance changes\n */\n onDistanceChange?: (distance: number) => void;\n\n allTags: Tag[];\n validTags: Tag[];\n\n /**\n * Optional callback for when the search button is clicked.\n * If provided, SearchPageLayout will call this when it determines a backend search is needed.\n */\n onSubmit?: (criteria: SearchCriteria) => void;\n eventTagId?: number;\n\n /**\n * Is the search loading?\n */\n isLoading?: boolean;\n\n /**\n * Optional callback for when a result is clicked\n */\n onResultClick?: (id: number, type: \"player\" | \"event\" | \"table\") => void;\n searchTypes: { id: string; label: string }[];\n}\n\n/**\n * Layout component for the search page with responsive design\n * - Title bar at the top\n * - Two containers side by side on desktop\n * - Right container takes 9 lanes on desktop, 12 on mobile\n * - Left container takes 3 lanes on desktop, appears above results on mobile\n */\nexport default function SearchPageLayout({\n results,\n title = 'Search Results',\n initialSelectedTypes = [],\n initialSelectedTags = {\n mustHave: [],\n mustNotHave: [],\n shouldHaveAtLeastOne: []\n },\n initialTextSearch = {\n query: '',\n titleOnly: false\n },\n initialDistance,\n distances,\n onTypeChange,\n onTagChange,\n onTextSearchChange,\n onIncludeExpiredTablesChange,\n onDistanceChange,\n onSubmit,\n onResultClick,\n onPacketChange,\n pagination,\n validTags,\n allTags,\n searchTypes,\n isLoading = false,\n eventTagId\n}: SearchPageLayoutProps) {\n const theme = useTheme();\n const isMobile = useMediaQuery(theme.breakpoints.down('md'));\n\n // --- Internal Search State ---\n const [selectedTypes, setSelectedTypes] = useState<string[]>(initialSelectedTypes);\n const [selectedTags, setSelectedTags] = useState(initialSelectedTags);\n const [textSearch, setTextSearch] = useState(initialTextSearch);\n const [includeExpiredTables, setIncludeExpiredTables] = useState<boolean>(false);\n const [distance, setDistance] = useState<number | undefined>(initialDistance);\n \n // Update internal state when props change\n useEffect(() => {\n setSelectedTypes(initialSelectedTypes);\n }, [initialSelectedTypes]);\n\n useEffect(() => {\n setSelectedTags(initialSelectedTags);\n }, [initialSelectedTags]);\n\n useEffect(() => {\n setTextSearch(initialTextSearch);\n }, [initialTextSearch]);\n\n\n useEffect(() => {\n setDistance(initialDistance);\n }, [initialDistance]);\n\n // Handle filter changes and sync with props\n const handleTypeChange = (types: string[]) => {\n setSelectedTypes(types);\n if (onTypeChange) onTypeChange(types);\n };\n\n const handleTagChange = (tags: {\n mustHave: number[];\n mustNotHave: number[];\n shouldHaveAtLeastOne: number[];\n }) => {\n setSelectedTags(tags);\n if (onTagChange) onTagChange(tags);\n };\n\n const handleTextSearchChange = (ts: { query: string; titleOnly: boolean }) => {\n setTextSearch(ts);\n if (onTextSearchChange) onTextSearchChange(ts);\n };\n\n const handleIncludeExpiredTablesChange = (include: boolean) => {\n setIncludeExpiredTables(include);\n if (onIncludeExpiredTablesChange) onIncludeExpiredTablesChange(include);\n };\n\n const handleDistanceChange = (dist: number) => {\n setDistance(dist);\n if (onDistanceChange) onDistanceChange(dist);\n };\n\n const handleSubmit = () => {\n const currentCriteria: SearchCriteria = {\n selectedTypes,\n selectedTags,\n textSearch,\n includeExpiredTables,\n distance\n };\n\n if (onSubmit) {\n onSubmit(currentCriteria);\n }\n };\n\n return (\n <Box sx={{ padding: 2 }}>\n {/* Title Bar */}\n <Card sx={{ marginBottom: 2 }}>\n <CardHeader \n title={title}\n style={{\n background: \"linear-gradient(135deg, rgba(25, 118, 210, 0.8), rgba(25, 118, 210, 1))\",\n color: \"#FFFFFF\",\n fontSize: \"1.5rem\",\n textShadow: \"0px 3px 6px rgba(0, 0, 0, 0.5)\",\n }}\n />\n </Card>\n\n {/* Main Content */}\n <Grid container spacing={2}>\n {/* Filters Section - Desktop view (side by side) or Mobile view (above results) */}\n {/* For desktop: 3 columns on the left */}\n {/* For mobile: full width above results */}\n <Grid size={{ xs: 12, md: 3 }}>\n <Card sx={{ marginBottom: isMobile ? 2 : 0 }}>\n <CardHeader \n title=\"Filters\"\n style={{\n background: \"linear-gradient(135deg, rgba(25, 118, 210, 0.8), rgba(25, 118, 210, 1))\",\n color: \"#FFFFFF\",\n fontSize: \"1.5rem\",\n textShadow: \"0px 3px 6px rgba(0, 0, 0, 0.5)\",\n }}\n />\n <CardContent>\n <FiltersContainer \n initialSelectedTypes={selectedTypes}\n initialSelectedTags={selectedTags}\n initialTextSearch={textSearch}\n includeExpiredTables={includeExpiredTables}\n distance={distance}\n distances={distances}\n onTypeChange={handleTypeChange}\n onTagChange={handleTagChange}\n onTextSearchChange={handleTextSearchChange}\n onIncludeExpiredTablesChange={handleIncludeExpiredTablesChange}\n onDistanceChange={handleDistanceChange}\n onSubmit={handleSubmit}\n tags={validTags}\n searchTypes={searchTypes}\n />\n </CardContent>\n </Card>\n </Grid>\n\n {/* Results Section */}\n <Grid size={{ xs: 12, md: 9 }}>\n <Card>\n <CardHeader \n title=\"Results\"\n style={{\n background: \"linear-gradient(135deg, rgba(25, 118, 210, 0.8), rgba(25, 118, 210, 1))\",\n color: \"#FFFFFF\",\n fontSize: \"1.5rem\",\n textShadow: \"0px 3px 6px rgba(0, 0, 0, 0.5)\",\n }}\n />\n <CardContent>\n {/* Results content */}\n {isLoading ? (\n <Box sx={{ display: 'flex', justifyContent: 'center', py: 8 }}>\n <CircularProgress size={60} thickness={4} />\n </Box>\n ) : (\n <ResultsContainer \n results={results}\n pagination={pagination}\n onPacketChange={onPacketChange}\n onResultClick={onResultClick}\n tags={allTags}\n showEventTag={true}\n eventTagId={eventTagId}\n />\n )}\n </CardContent>\n </Card>\n </Grid>\n </Grid>\n </Box>\n );\n}","\r\nexport const getRandomTitle = () => {\r\n const randomPrefix = titlePrefixes[Math.random() * titlePrefixes.length | 0];\r\n const randomMiddle = tileMiddle[Math.random() * tileMiddle.length | 0];\r\n const randomSuffix = titleSuffixes[Math.random() * titleSuffixes.length | 0];\r\n return `${randomPrefix} ${randomMiddle} ${randomSuffix}`;\r\n}\r\n\r\nexport const getRandomTagline = () => taglines[Math.random() * taglines.length | 0];\r\n\r\n\r\nconst titlePrefixes = [\r\n \"The Knights of The\",\r\n \"The Fellowship of The\",\r\n \"The Order of The\",\r\n \"The Infamous\",\r\n \"The Legendary\",\r\n \"The Dubious\",\r\n \"The Sworn Guardians of The\",\r\n \"The Ancient Guild of The\",\r\n \"The Unstoppable\",\r\n \"The Misfit\",\r\n \"The Chaotic\",\r\n \"The Brave\",\r\n \"The Forgotten\",\r\n \"The Wandering\",\r\n \"The Noble Council of The\",\r\n \"The Dread Pirates of The\",\r\n \"The Honorable Society of The\",\r\n \"The Cursed\",\r\n \"The Unlikely Heroes of The\",\r\n \"The Elders of The\",\r\n \"The Seekers of The\",\r\n \"The Champions of The\",\r\n \"The Heralds of The\",\r\n \"The Disciples of The\",\r\n \"The Ragtag Band of The\",\r\n \"The Cult of The\",\r\n];\r\n\r\nconst tileMiddle = [\r\n \"Round\",\r\n \"Kitchen\",\r\n \"Deepest\",\r\n \"Sorcery\",\r\n \"Munchkin\",\r\n \"Shenanigan\",\r\n \"Secret\",\r\n \"Dungeon\",\r\n \"Fireside\",\r\n \"Tabletop\",\r\n \"Midnight\",\r\n \"Tavern\",\r\n \"Goblin\",\r\n \"Dragon\",\r\n \"Critical\",\r\n \"Natural Twenty\",\r\n \"Counterspell\",\r\n \"Nat One\",\r\n \"Cardboard\",\r\n \"Dice Tower\",\r\n \"Campaign\",\r\n \"Lore\",\r\n \"Awkward\",\r\n \"Unhinged\",\r\n \"Chaotic Neutral\",\r\n \"Homebrew\",\r\n \"Side Quest\",\r\n];\r\n\r\nconst titleSuffixes = [\r\n \"Table\",\r\n \"Dungeon\",\r\n \"Cave\",\r\n \"Crew\",\r\n \"Team\",\r\n \"League\",\r\n \"Horde\",\r\n \"Party\",\r\n \"Conclave\",\r\n \"Collective\",\r\n \"Alliance\",\r\n \"Syndicate\",\r\n \"Guild\",\r\n \"Cabal\",\r\n \"Council\",\r\n \"Expedition\",\r\n \"Enclave\",\r\n \"Consortium\",\r\n \"Troupe\",\r\n \"Vanguard\",\r\n \"Cohort\",\r\n \"Brotherhood\",\r\n \"Sisterhood\",\r\n \"Pantheon\",\r\n \"Assembly\",\r\n \"Coven\",\r\n];\r\n\r\nconst taglines = [\r\n \"Everyone is welcome!\",\r\n \"Looking for serious players.\",\r\n \"Get in nerds, we're gaming!\",\r\n \"If you aren't there, you're square.\",\r\n \"It will be legendary!\",\r\n \"Beginners welcome — we were all level 1 once.\",\r\n \"No experience necessary. Snacks encouraged.\",\r\n \"Roleplayers, board gamers, and chaos gremlins welcome.\",\r\n \"We don't metagame. Much.\",\r\n \"All alignments accepted. True Neutral gets the snacks.\",\r\n \"Where every session is a one-shot... until it isn't.\",\r\n \"Homebrew rules may apply.\",\r\n \"Warning: may contain excessive lore.\",\r\n \"Critical failures celebrated as much as critical hits.\",\r\n \"No powergamers. Okay, maybe one powergamer.\",\r\n \"We finish campaigns. (Eventually.)\",\r\n \"Veteran players seeking worthy companions.\",\r\n \"Casuals only — we're here for the vibes.\",\r\n \"Serious about fun, not about rules.\",\r\n \"Min-maxers need not apply.\",\r\n \"For those who read the rulebook... and those who definitely didn't.\",\r\n \"Roll for initiative. Arrive on time.\",\r\n \"Side quests are the main quest here.\",\r\n \"Chaotic good energy required.\",\r\n \"If you bring snacks, you can name the first NPC.\",\r\n \"We read the rulebook so you don't have to.\",\r\n \"Wargamers only — no take-backs, no mercy.\",\r\n \"Everyone welcome. Meeple provided.\",\r\n \"We always play the longest game on the shelf.\",\r\n \"Worker placement. Resource management. Existential dread.\",\r\n \"No phones at the table! We're here for the game.\",\r\n \"Someone always flips the table. Metaphorically. Usually.\",\r\n \"We have a designated rules lawyer. It's fine.\",\r\n \"Cooperative games only — we can't handle another Monopoly incident.\",\r\n \"Teaching time is half the fun!\",\r\n];\r\n","import React, {useMemo, useState} from \"react\";\r\nimport TextField from \"@mui/material/TextField\";\r\nimport Grid from \"@mui/material/Grid\";\r\nimport Autocomplete from \"@mui/material/Autocomplete\";\r\nimport Chip from \"../../shared/Chip\";\r\nimport {Tag} from \"@/types/tag\";\r\n\r\nexport function TagSelector({initialTagIDs, allTags, onTagChange}: {\r\n initialTagIDs: number[];\r\n allTags: Tag[];\r\n onTagChange: (tagIDs: number[]) => void;\r\n}) {\r\n const [tagList, updateTagList] = useState(initialTagIDs);\r\n const [inputValue, setInputValue] = useState(\"\");\r\n\r\n const toggleTag = (id: number) => tagList.find(t => t === id) ? removeTag(id) : addTag(id);\r\n const addTag = (id: number) => {\r\n const newList = [...tagList, id];\r\n updateTagList(newList);\r\n onTagChange(newList);\r\n };\r\n const removeTag = (id: number) => {\r\n const newList = tagList.filter(t => t !== id);\r\n updateTagList(newList);\r\n onTagChange(newList);\r\n }\r\n const selectedTags = useMemo(() => allTags.filter(tag => tagList.includes(tag.id)), [allTags, tagList]);\r\n const options = useMemo(\r\n () => allTags.map((tag) => ({ value: tag.id, label: tag.label })),\r\n [allTags]\r\n );\r\n\r\n return (\r\n <>\r\n <div className=\"flex flex-wrap gap-2\">\r\n {selectedTags.map((tag) => (\r\n <Chip\r\n key={tag.id}\r\n tag={tag}\r\n removeCallback={() => toggleTag(tag.id)}\r\n />\r\n ))}\r\n </div>\r\n <Grid container spacing={3}>\r\n <Grid sx={{ marginTop: 3, width: \"100%\", minWidth: \"550px\" }}>\r\n <Autocomplete\r\n key={tagList.join(\"-\")}\r\n options={options}\r\n filterOptions={(availableOptions, state) =>\r\n availableOptions\r\n .filter(\r\n (option) =>\r\n !tagList.includes(option.value) &&\r\n option.label.toLowerCase().includes(state.inputValue.toLowerCase())\r\n )\r\n }\r\n value={null}\r\n inputValue={inputValue}\r\n onInputChange={(event, newInputValue) => {\r\n if (event && event.type === \"change\") {\r\n setInputValue(newInputValue);\r\n }\r\n }}\r\n onChange={(event, newValue) => {\r\n if (newValue) {\r\n toggleTag(newValue.value);\r\n }\r\n setInputValue(\"\");\r\n }}\r\n renderInput={(params) => <TextField {...params} label=\"Select Tags\" />}\r\n />\r\n </Grid>\r\n </Grid>\r\n </>\r\n );\r\n}\r\n","import React, {useState} from \"react\";\r\nimport {Box, Tooltip} from \"@mui/material\";\r\nimport TextField from \"@mui/material/TextField\";\r\nimport CasinoIcon from \"@mui/icons-material/Casino\";\r\nimport {getRandomTagline, getRandomTitle} from \"@/components/shared/NameGenerator\";\r\nimport {Tag} from \"@/types/tag\";\r\nimport {TagSelector} from \"./TagSelector\";\r\n\r\nexport function EditTableDetailsForm({initialTitle, initialSubtitle, onTitleChange, onSubtitleChange, allowEditingTitles, initialTagIDs, allTags, onTagChange}: {\r\n initialTitle: string;\r\n initialSubtitle: string;\r\n onTitleChange: (title: string) => void;\r\n onSubtitleChange: (subtitle: string) => void;\r\n allowEditingTitles?: boolean;\r\n onTagChange: (tagIDs: number[]) => void;\r\n initialTagIDs: number[],\r\n allTags: Tag[],\r\n}) {\r\n const [title, setTitle] = useState(initialTitle);\r\n const [subtitle, setSubtitle] = useState(initialSubtitle);\r\n const handleTitleChange = (newTitle: string) => {\r\n setTitle(newTitle);\r\n onTitleChange(newTitle);\r\n };\r\n\r\n const handleSubtitleChange = (newSubtitle: string) => {\r\n setSubtitle(newSubtitle);\r\n onSubtitleChange(newSubtitle);\r\n };\r\n\r\n return (\r\n <>\r\n {(allowEditingTitles && <Box className={\"flex flex-col gap-4 mb-8\"}>\r\n <Box className={\"inline-flex\"}>\r\n <TextField\r\n sx={{minWidth: \"400px\"}}\r\n label=\"Title\"\r\n onChange={(e) => handleTitleChange(e.target.value)}\r\n variant=\"filled\"\r\n value={title}\r\n />\r\n <Tooltip title=\"Randomize\">\r\n <CasinoIcon sx={{cursor: \"pointer\", alignSelf: \"center\", ml: 1}}\r\n onClick={() => handleTitleChange(getRandomTitle())}/>\r\n </Tooltip>\r\n </Box>\r\n <Box className={\"inline-flex min-w-96\"}>\r\n <TextField\r\n sx={{minWidth: \"400px\"}}\r\n label=\"Short Description or Tagline\"\r\n onChange={(e) => handleSubtitleChange(e.target.value)}\r\n variant=\"filled\"\r\n value={subtitle}\r\n />\r\n <Tooltip title=\"Randomize\">\r\n <CasinoIcon sx={{cursor: \"pointer\", alignSelf: \"center\", ml: 1}}\r\n onClick={() => handleSubtitleChange(getRandomTagline())}/>\r\n </Tooltip>\r\n </Box>\r\n </Box>)}\r\n\r\n <TagSelector initialTagIDs={initialTagIDs} allTags={allTags} onTagChange={onTagChange} />\r\n </>\r\n );\r\n}","\"use client\"\nimport React from \"react\";\nimport type { TableFormat } from \"@/types/table\";\n\ninterface IGameTableContextType {\n table: TableFormat;\n setTable: React.Dispatch<React.SetStateAction<TableFormat | null>>;\n}\n\ninterface IGameTableProviderProps {\n children: React.ReactNode;\n}\n\nconst GameTableContext = React.createContext<IGameTableContextType | undefined>(undefined);\n\nexport function GameTableProvider(props: IGameTableProviderProps) {\n return <>{props.children}</>;\n}\n\nexport function useGameTableContext(): IGameTableContextType {\n const context = React.useContext(GameTableContext);\n\n if (context) {\n return context;\n }\n\n throw new Error('useGameTableContext is deprecated in the package build. Pass table data through props instead.');\n}\n","\"use client\"\r\nimport { createContext, ReactNode, useContext } from \"react\";\r\n\r\nexport type ModalOptions = {\r\n acceptText?: string;\r\n onAccept?: () => void;\r\n onCancel?: () => void;\r\n}\r\n\r\ntype ModalContextType = {\r\n showModal: (content: ReactNode, title: string, options?: ModalOptions) => void;\r\n hideModal: () => void;\r\n}\r\n\r\nexport const ModalContext = createContext<ModalContextType>({\r\n showModal: () => {},\r\n hideModal: () => {},\r\n});\r\n\r\nexport const useModal = () => useContext(ModalContext);","\"use client\"\r\n\r\nimport React, {Dispatch, SetStateAction, useEffect} from 'react';\r\n\r\ninterface IAutoResizingTextareaProps {\r\n isInEditMode: boolean;\r\n onChange: Dispatch<SetStateAction<string>>;\r\n textareaRef: React.RefObject<HTMLTextAreaElement | null>;\r\n value: string;\r\n}\r\n\r\nconst AutoResizingTextarea: React.FC<IAutoResizingTextareaProps> = (props: IAutoResizingTextareaProps) => {\r\n const { isInEditMode, onChange, textareaRef, value } = props;\r\n\r\n useEffect(() => {\r\n if (isInEditMode && textareaRef.current) {\r\n const textarea = textareaRef.current;\r\n\r\n textarea.style.height = 'auto';\r\n textarea.style.height = `${textarea.scrollHeight}px`;\r\n }\r\n }, [isInEditMode, textareaRef, value]); // Run effect when entering edit mode or value changes\r\n\r\n return (\r\n <textarea\r\n ref={textareaRef}\r\n value={value}\r\n onChange={(e) => onChange(e.target.value)}\r\n style={{\r\n backgroundColor: '#fffbea',\r\n overflow: 'hidden',\r\n resize: 'none',\r\n width: '100%'\r\n }}\r\n />\r\n );\r\n}\r\n\r\nexport default AutoResizingTextarea;\r\n","\"use client\";\r\n\r\nimport React, { useState, useEffect } from 'react';\r\nimport { Typography } from '@mui/material';\r\n\r\nexport const NextGameCountdown = ({ nextGameTime }: { nextGameTime?: Date | string }) => {\r\n const [timeLeft, setTimeLeft] = useState<string>('');\r\n\r\n useEffect(() => {\r\n if (!nextGameTime) return;\r\n\r\n const timer = setInterval(() => {\r\n const now = new Date().getTime();\r\n const distance = new Date(nextGameTime).getTime() - now;\r\n\r\n if (distance < 0) {\r\n clearInterval(timer);\r\n setTimeLeft('Started');\r\n return;\r\n }\r\n\r\n const days = Math.floor(distance / (1000 * 60 * 60 * 24));\r\n const hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));\r\n const minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));\r\n const seconds = Math.floor((distance % (1000 * 60)) / 1000);\r\n\r\n let timeString = '';\r\n if (days > 0) timeString += `${days}d `;\r\n if (hours > 0 || days > 0) timeString += `${hours}h `;\r\n timeString += `${minutes}m ${seconds}s`;\r\n\r\n setTimeLeft(timeString);\r\n }, 1000);\r\n\r\n return () => clearInterval(timer);\r\n }, [nextGameTime]);\r\n\r\n if (!nextGameTime) return null;\r\n\r\n return (\r\n <Typography variant=\"body2\" color=\"primary\" sx={{ fontWeight: 'bold' }}>\r\n Next Game: {timeLeft}\r\n </Typography>\r\n );\r\n};\r\n","\"use client\";\r\n\r\nimport React, { useMemo } from \"react\";\r\nimport Card from \"@mui/material/Card\";\r\nimport CardContent from \"@mui/material/CardContent\";\r\nimport CardHeader from \"@mui/material/CardHeader\";\r\nimport Grid from \"@mui/material/Grid\";\r\nimport type { Tag } from \"@/types/tag\";\r\nimport {TagSelector} from \"@/components/TablePage/EditComponents/TagSelector\";\r\n\r\nexport interface TagEditorProps {\r\n title?: string;\r\n selectedTags: Tag[];\r\n possibleTags: Tag[];\r\n onToggleTag: (id: number) => void;\r\n}\r\n\r\nexport function TagEditor({\r\n title,\r\n selectedTags,\r\n possibleTags,\r\n onToggleTag,\r\n}: TagEditorProps) {\r\n const selectedIds = useMemo(() => selectedTags.map((tag) => tag.id), [selectedTags]);\r\n\r\n const onTagChange = (newSelectedIds: number[]) => {\r\n const addedTags = newSelectedIds.filter((id) => !selectedIds.includes(id));\r\n const removedTags = selectedIds.filter((id) => !newSelectedIds.includes(id));\r\n\r\n addedTags.forEach((id) => onToggleTag(id));\r\n removedTags.forEach((id) => onToggleTag(id));\r\n }\r\n\r\n return (\r\n <Grid container>\r\n <Grid size={{ xs: 12 }}>\r\n <Card>\r\n {title ? (<CardHeader\r\n title={title}\r\n style={{\r\n background: \"linear-gradient(135deg, rgba(25, 118, 210, 0.8), rgba(25, 118, 210, 1))\",\r\n color: \"#FFFFFF\",\r\n fontSize: \"1.5rem\",\r\n textShadow: \"0px 3px 6px rgba(0, 0, 0, 0.5)\",\r\n }}\r\n />) : \"\"}\r\n <CardContent>\r\n <TagSelector initialTagIDs={selectedIds} allTags={possibleTags} onTagChange={onTagChange} />\r\n </CardContent>\r\n </Card>\r\n </Grid>\r\n </Grid>\r\n );\r\n}\r\n","\"use client\";\r\n\r\nimport React, { useState } from \"react\";\r\nimport {\r\n Dialog,\r\n DialogTitle,\r\n DialogContent,\r\n DialogActions,\r\n Button,\r\n Checkbox,\r\n FormControlLabel,\r\n Link,\r\n Typography,\r\n Box,\r\n} from \"@mui/material\";\r\nimport ReactMarkdown from \"react-markdown\";\r\n\r\nexport type AgreementRequirement = {\r\n statement: string;\r\n link?: string;\r\n linkText?: string;\r\n required: boolean;\r\n};\r\n\r\nexport type UserAgreementModalProps = {\r\n open: boolean;\r\n onClose?: () => void;\r\n markdownContent: string;\r\n requirements: AgreementRequirement[];\r\n onAccept: () => void;\r\n title?: string;\r\n forceAgreement?: boolean;\r\n};\r\n\r\nconst UserAgreementModal: React.FC<UserAgreementModalProps> = ({\r\n open,\r\n onClose,\r\n markdownContent,\r\n requirements,\r\n onAccept,\r\n title = \"User Agreement\",\r\n forceAgreement = false,\r\n}) => {\r\n const [checkedState, setCheckedState] = useState<boolean[]>(\r\n new Array(requirements.length).fill(false)\r\n );\r\n\r\n const handleCheckboxChange = (index: number) => {\r\n const updatedCheckedState = checkedState.map((item, i) =>\r\n i === index ? !item : item\r\n );\r\n setCheckedState(updatedCheckedState);\r\n };\r\n\r\n const isAllRequiredChecked = requirements.every((req, index) => {\r\n if (req.required) {\r\n return checkedState[index];\r\n }\r\n return true;\r\n });\r\n\r\n const handleAccept = () => {\r\n if (isAllRequiredChecked) {\r\n onAccept();\r\n }\r\n };\r\n\r\n const handleClose = (event: {}, reason: \"backdropClick\" | \"escapeKeyDown\") => {\r\n if (forceAgreement) return;\r\n if (onClose) onClose();\r\n };\r\n\r\n return (\r\n <Dialog\r\n open={open}\r\n onClose={handleClose}\r\n maxWidth=\"md\"\r\n fullWidth\r\n disableEscapeKeyDown={forceAgreement}\r\n >\r\n <DialogTitle>{title}</DialogTitle>\r\n <DialogContent dividers>\r\n <Box sx={{ mb: 3 }}>\r\n <ReactMarkdown\r\n components={{\r\n h1: ({ node, ...props }) => <Typography variant=\"h4\" gutterBottom {...props} />,\r\n h2: ({ node, ...props }) => <Typography variant=\"h5\" gutterBottom {...props} />,\r\n h3: ({ node, ...props }) => <Typography variant=\"h6\" gutterBottom {...props} />,\r\n h4: ({ node, ...props }) => <Typography variant=\"subtitle1\" gutterBottom {...props} />,\r\n h5: ({ node, ...props }) => <Typography variant=\"subtitle2\" gutterBottom {...props} />,\r\n h6: ({ node, ...props }) => <Typography variant=\"caption\" gutterBottom {...props} />,\r\n p: ({ node, ...props }) => <Typography variant=\"body1\" gutterBottom {...props} />,\r\n li: ({ node, ...props }) => <Box component=\"li\" sx={{ mb: 1, ml: 2 }} {...props} />,\r\n ul: ({ node, ...props }) => <Box component=\"ul\" sx={{ mb: 2 }} {...props} />,\r\n ol: ({ node, ...props }) => <Box component=\"ol\" sx={{ mb: 2 }} {...props} />,\r\n a: ({ node, ...props }) => <Link {...props} target=\"_blank\" rel=\"noopener\" />,\r\n }}\r\n >\r\n {markdownContent}\r\n </ReactMarkdown>\r\n </Box>\r\n <Box sx={{ display: \"flex\", flexDirection: \"column\", gap: 1 }}>\r\n {requirements.map((req, index) => (\r\n <Box key={index} sx={{ display: \"flex\", alignItems: \"flex-start\" }}>\r\n <FormControlLabel\r\n control={\r\n <Checkbox\r\n checked={checkedState[index]}\r\n onChange={() => handleCheckboxChange(index)}\r\n />\r\n }\r\n label={\r\n <Typography variant=\"body2\">\r\n {req.statement}\r\n {req.link && req.linkText && (\r\n <>\r\n {\" \"}\r\n <Link href={req.link} target=\"_blank\" rel=\"noopener\">\r\n {req.linkText}\r\n </Link>\r\n </>\r\n )}\r\n {req.required && (\r\n <Typography\r\n component=\"span\"\r\n color=\"error\"\r\n sx={{ ml: 0.5 }}\r\n >\r\n *\r\n </Typography>\r\n )}\r\n </Typography>\r\n }\r\n />\r\n </Box>\r\n ))}\r\n </Box>\r\n </DialogContent>\r\n <DialogActions>\r\n {!forceAgreement && (\r\n <Button onClick={onClose} color=\"inherit\">\r\n Cancel\r\n </Button>\r\n )}\r\n <Button\r\n onClick={handleAccept}\r\n variant=\"contained\"\r\n disabled={!isAllRequiredChecked}\r\n fullWidth={forceAgreement}\r\n >\r\n Accept\r\n </Button>\r\n </DialogActions>\r\n </Dialog>\r\n );\r\n};\r\n\r\nexport default UserAgreementModal;\r\n","\"use client\";\r\n\r\nimport Image from \"next/image\";\r\nimport Button from \"@mui/material/Button\";\r\nimport {Card, CardContent, CardHeader, Typography} from \"@mui/material\";\r\nimport Grid from \"@mui/material/Grid\";\r\nimport {renderTagsFromIds} from \"@/components/shared/TagComponents\";\r\nimport type { Player } from \"@/types/player\";\r\nimport type { Tag } from \"@/types/tag\";\r\nimport { DEFAULT_PROFILE_PIC } from \"@/data/values\";\r\n\r\nexport type PlayerHighlightsCardProps = {\r\n addToTable?: (player: Player) => void;\r\n allTags: Tag[];\r\n canChangeDungeonMaster: boolean;\r\n canEdit: boolean;\r\n handleAssignToDungeonMaster: (player: Player) => void;\r\n isWaitList?: boolean;\r\n player: Player;\r\n removeFromTable: (player: Player) => void;\r\n}\r\n\r\nexport const PlayerHighlightsCard = function(props: PlayerHighlightsCardProps) {\r\n const {\r\n allTags,\r\n canChangeDungeonMaster,\r\n canEdit,\r\n handleAssignToDungeonMaster,\r\n isWaitList,\r\n player,\r\n removeFromTable\r\n } = props;\r\n\r\n return (\r\n <Card elevation={3} sx={{ backgroundColor: canEdit ? \"#fffbea\" : \"#f5f9fa\", marginBottom:\"6px\" }}>\r\n <CardContent>\r\n <Grid container spacing={2} direction=\"column\">\r\n <Grid container direction=\"row\">\r\n <Grid>\r\n <Image alt={player.username + \"'s profile pic\"} height={64} src={player.miniPic || DEFAULT_PROFILE_PIC} width={64} />\r\n </Grid>\r\n <Grid>\r\n <Typography variant=\"h5\">{player.username}</Typography>\r\n </Grid>\r\n </Grid>\r\n <Grid>{renderTagsFromIds(player.tags, allTags)}</Grid>\r\n </Grid>\r\n {canEdit && (\r\n <Grid>\r\n <Button onClick={() => removeFromTable(player)}>\r\n { isWaitList ? <p>Deny Player</p> : <p>Remove Player</p> }\r\n </Button>\r\n {canChangeDungeonMaster && (\r\n <Button onClick={() => {\r\n handleAssignToDungeonMaster(player);\r\n removeFromTable(player);\r\n }}>\r\n <p>Assign to DungeonMaster</p>\r\n </Button>\r\n )}\r\n </Grid>\r\n )}\r\n </CardContent>\r\n </Card>\r\n )\r\n}\r\n\r\nexport const DMHighlightsCard = function({canEdit, player, allTags}:{canEdit: boolean, player: Player, allTags:Tag[]}) {\r\n return (\r\n <Card elevation={3} sx={{ backgroundColor: \"#f5f9fa\", marginBottom:\"6px\" }}>\r\n <CardHeader slotProps={{title: { variant: \"h4\"}}} title=\"Game Master\"/>\r\n <CardContent sx={{ backgroundColor: canEdit ? '#fffbea' : 'inherit' }}>\r\n <Grid container spacing={2} direction=\"column\">\r\n <Grid>\r\n <Typography variant=\"h5\">{player.username}</Typography>\r\n </Grid>\r\n <Grid container direction=\"row\">\r\n <Grid>\r\n <Image alt={player.username + \"'s profile pic\"} height={120} src={player.imageUrl || DEFAULT_PROFILE_PIC} width={256} />\r\n </Grid>\r\n <Grid>{renderTagsFromIds(player.tags, allTags)}</Grid>\r\n <Typography>{player.description}</Typography>\r\n </Grid>\r\n </Grid>\r\n </CardContent>\r\n </Card>\r\n )\r\n}\r\n","\"use client\";\r\n\r\nimport type { ReactNode } from \"react\";\r\nimport Image from \"next/image\";\r\nimport Button from \"@mui/material/Button\";\r\nimport DialogActions from \"@mui/material/DialogActions\";\r\nimport { Grid, Typography } from \"@mui/material\";\r\nimport DeleteIcon from \"@mui/icons-material/Delete\";\r\nimport EditIcon from \"@mui/icons-material/Edit\";\r\nimport ListIcon from \"@mui/icons-material/List\";\r\nimport SaveIcon from \"@mui/icons-material/Save\";\r\nimport { useModal } from \"@/components/TablePage/ModalProvider/ModalContext\";\r\nimport type { Player } from \"@/types/player\";\r\nimport type { TableStatus } from \"@/components/TablePage/types\";\r\nimport { DEFAULT_PROFILE_PIC } from \"@/data/values\";\r\n\r\nexport interface TableActionProps {\r\n isInEditMode: boolean;\r\n numPlayers: number;\r\n onDeleteTable?: () => void | Promise<void>;\r\n onEditModeChange: (nextValue: boolean) => void;\r\n onJoinWaitlist?: () => void | Promise<void>;\r\n onLeaveTable?: () => void | Promise<void>;\r\n onPromoteWaitlistPlayer?: (playerId: number) => void;\r\n onSave: () => void;\r\n slots: number;\r\n tableStatus: TableStatus;\r\n waitlistPlayers: Player[];\r\n}\r\n\r\nexport default function TableActionsBar(props: TableActionProps) {\r\n const { hideModal, showModal } = useModal();\r\n const {\r\n isInEditMode,\r\n numPlayers,\r\n onDeleteTable,\r\n onEditModeChange,\r\n onJoinWaitlist,\r\n onLeaveTable,\r\n onPromoteWaitlistPlayer,\r\n onSave,\r\n slots,\r\n tableStatus,\r\n waitlistPlayers,\r\n } = props;\r\n const {isOwner, isPlayer, isDM, onWaitlist} = tableStatus;\r\n\r\n const canEditTable = isOwner && !isInEditMode;\r\n const canSaveTable = isOwner && isInEditMode;\r\n const canViewWaitlist = isOwner || isDM || waitlistPlayers.length > 0;\r\n\r\n const renderPlayerWaitlistModalContent = (canMovePlayersToTable?: boolean): ReactNode => {\r\n if (waitlistPlayers.length === 0) {\r\n return <p>Waitlist is empty!</p>;\r\n }\r\n\r\n return (\r\n <>\r\n <ul className=\"gap-8 px-6\">\r\n {waitlistPlayers.map((player) => (\r\n <li\r\n className={`${canMovePlayersToTable ? 'bg-amber-100 cursor-pointer' : 'bg-gray-200'} mb-8 flex flex-row flex-start space-between items-center gap-3 p-2 rounded`}\r\n key={player.id}\r\n onClick={() => canMovePlayersToTable ? onPromoteWaitlistPlayer?.(player.id) : undefined}\r\n tabIndex={0}\r\n >\r\n <Image\r\n alt={player.username + \"'s profile pic\"}\r\n height={64}\r\n src={player.miniPic || DEFAULT_PROFILE_PIC}\r\n width={64}\r\n />\r\n <div>{player.username}</div>\r\n </li>\r\n ))}\r\n </ul>\r\n <DialogActions>\r\n <Button onClick={() => hideModal()}>Close</Button>\r\n </DialogActions>\r\n </>\r\n )\r\n }\r\n\r\n return (\r\n <Grid container direction=\"column\" spacing={1}>\r\n <Grid container direction=\"row\">\r\n <Typography color=\"white\" sx={{ textShadow:'4px 4px 6px rgba(0, 0, 0, 0.5)' }}>\r\n Players: {numPlayers} / {slots}\r\n </Typography>\r\n </Grid>\r\n\r\n <Grid container direction=\"row\">\r\n {!isOwner && !isPlayer && !isDM && !onWaitlist && (\r\n <Button onClick={() => onJoinWaitlist?.()} sx={buttonStyle}>\r\n Join Waitlist\r\n </Button>\r\n )}\r\n\r\n {!isOwner && (isPlayer || onWaitlist) && (\r\n <Button onClick={() => onLeaveTable?.()} sx={buttonStyle}>\r\n {onWaitlist ? \"Leave Waitlist\" : \"Leave Table\"}\r\n </Button>\r\n )}\r\n\r\n { canEditTable ? (\r\n <>\r\n <Button onClick={() => onEditModeChange(true)} sx={buttonStyle} endIcon={<EditIcon/>}>\r\n Edit\r\n </Button>\r\n {canViewWaitlist ? (\r\n <Button\r\n endIcon={<ListIcon />}\r\n onClick={() => showModal(renderPlayerWaitlistModalContent(false), \"Waitlist Players:\")}\r\n sx={buttonStyle}\r\n >\r\n View Waitlist\r\n </Button>\r\n ) : null}\r\n </>\r\n ) : canSaveTable ? (\r\n <>\r\n <Button onClick={onSave} sx={buttonStyle} endIcon={<SaveIcon/>}>\r\n Save\r\n </Button>\r\n <Button onClick={() => onEditModeChange(false)} sx={buttonStyle}>\r\n Cancel\r\n </Button>\r\n <Button\r\n endIcon={<ListIcon />}\r\n onClick={() => showModal(renderPlayerWaitlistModalContent(true), \"Waitlist Players:\")}\r\n sx={buttonStyle}\r\n >\r\n Edit Waitlist\r\n </Button>\r\n </>\r\n ) : null}\r\n\r\n { isOwner && (\r\n <Button\r\n onClick={() => showModal(\r\n <Typography>Are you sure you want to delete this table? This action cannot be undone.</Typography>,\r\n \"Delete Table\",\r\n { acceptText: \"Delete\", onAccept: () => onDeleteTable?.() }\r\n )}\r\n sx={buttonStyle}\r\n endIcon={<DeleteIcon/>}\r\n >\r\n Delete Table\r\n </Button>\r\n )}\r\n </Grid>\r\n </Grid>\r\n )\r\n}\r\n\r\nconst buttonStyle = {\r\n marginLeft: \"3px\",\r\n backgroundColor:\"blue\",\r\n color:\"white\",\r\n borderRadius:\"5px\",\r\n};\r\n","\"use client\";\r\n\r\nimport React, {JSX, useEffect, useMemo, useRef, useState} from \"react\";\r\nimport {Box, Button, Card, CardContent, CardHeader, Typography} from \"@mui/material\";\r\nimport Grid from \"@mui/material/Grid\";\r\nimport AutoResizingTextarea from \"@/components/shared/AutoResizingTextarea\";\r\nimport {generateTagsDisplay, TagEditor} from \"@/components/shared\";\r\nimport {DMHighlightsCard, PlayerHighlightsCard} from \"@/components/TablePage/players/PlayerHighlightsCard\";\r\nimport TableActionsBar from \"@/components/TablePage/TableActionsBar\";\r\nimport type {Player} from \"@/types/player\";\r\nimport type {TableRecord} from \"@/types/tables\";\r\nimport type {Tag} from \"@/types/tag\";\r\nimport { renderTagsFromIds } from \"@/components/shared/TagComponents\";\r\nimport type {TablePageLayoutProps} from \"@/components/TablePage/types\";\r\nimport {useModal} from \"@/components\";\r\nimport EditIcon from '@mui/icons-material/Edit';\r\nimport {EditTableDetailsForm} from \"@/components/TablePage/EditComponents/EditTableDetailsForm\";\r\nimport Chip from \"../shared/Chip\";\r\n\r\nexport function TablePageLayout(props: TablePageLayoutProps) {\r\n const { hideModal, showModal } = useModal();\r\n\r\n const { allTags, dungeonMaster, onDeleteTable, onJoinWaitlist, onLeaveTable, onSaveDraft, players, table, tableStatus, waitlistPlayers, startWithEditTitle, eventTagId } = props;\r\n const canEdit = tableStatus.isOwner;\r\n const textAreaRef = useRef<HTMLTextAreaElement>(null);\r\n const [isTableInEditMode, setIsTableInEditMode] = useState(false);\r\n\r\n const [currentTitle, setCurrentTitle] = useState(table.title);\r\n const [currentSubtitle, setCurrentSubtitle] = useState(table.shortDescription);\r\n const [currentDescription, setCurrentDescription] = useState(table.description);\r\n\r\n const [currentDungeonMaster, setCurrentDungeonMaster] = useState(dungeonMaster);\r\n const [currentPlayers, setCurrentPlayers] = useState(players);\r\n const [currentWaitlistPlayers, setCurrentWaitlistPlayers] = useState(waitlistPlayers);\r\n const [currentTagIds, setCurrentTagIds] = useState<number[]>(table.tags ?? []);\r\n\r\n const pendingEdits = useRef({ title: currentTitle, subtitle: currentSubtitle, tags: currentTagIds });\r\n\r\n const handleSaveTable = (tableData: Partial<TableRecord> = {}) => {\r\n const nextDraft: TableRecord = {\r\n ...table,\r\n description: currentDescription,\r\n dungeonMaster: String(currentDungeonMaster.id),\r\n players: currentPlayers.map((player) => player.id),\r\n shortDescription: currentSubtitle,\r\n tags: currentTagIds,\r\n title: currentTitle,\r\n waitlist: currentWaitlistPlayers.map((player) => player.id),\r\n ...tableData,\r\n };\r\n\r\n void onSaveDraft?.(nextDraft);\r\n setIsTableInEditMode(false);\r\n };\r\n\r\n /*\r\n * This is a simple profanity filter that replaces any instance of common slurs with the word \"dudes\". It's not meant to be comprehensive,\r\n * just to catch some of the more common and egregious cases. The regex is case-insensitive and looks for whole words only.\r\n */\r\n const clean = (text: string) => text.replaceAll(\r\n /\\b(n[i1!]g+(er|a|e)s?|f[a@]g|f[a@]g+[o0]ts?|k[i1!]k[e3]s?|ch[i1!]nks?|w[e3]tb[a@]cks?|r[a@]gh[e3][a@]ds?|t[o0]w[e3]lh[e3][a@]ds?|r[e3]t[a@]rd(ed|s)?|c[o0][o0]ns?|tr[a@]nn(y|i[e3]s?)|g[o0][o0]ks?)\\b/gi,\r\n \"dudes\");\r\n\r\n const editTableDetails = () => {\r\n if (!canEdit) { return }\r\n pendingEdits.current = { title: currentTitle, subtitle: currentSubtitle, tags: currentTagIds\r\n };\r\n\r\n const editContent = (\r\n <EditTableDetailsForm\r\n initialTitle={currentTitle}\r\n initialSubtitle={currentSubtitle}\r\n onTitleChange={t => pendingEdits.current.title = t}\r\n onSubtitleChange={s => pendingEdits.current.subtitle = s}\r\n onTagChange={t => pendingEdits.current.tags = t}\r\n initialTagIDs={currentTagIds}\r\n allTags={allTags.filter(t => t.appliesTo.tables)}\r\n allowEditingTitles={true}\r\n />\r\n );\r\n\r\n showModal(editContent, \"Edit Table Details\", {\r\n acceptText: \"Save\",\r\n onAccept: () => {\r\n setCurrentTitle(clean(pendingEdits.current.title));\r\n setCurrentSubtitle(clean(pendingEdits.current.subtitle));\r\n setCurrentTagIds(pendingEdits.current.tags);\r\n handleSaveTable({\r\n title: clean(pendingEdits.current.title),\r\n shortDescription: clean(pendingEdits.current.subtitle),\r\n tags: pendingEdits.current.tags,\r\n });\r\n }\r\n });\r\n }\r\n\r\n useEffect(() => {\r\n if(startWithEditTitle) {\r\n editTableDetails();\r\n }\r\n });\r\n\r\n const currentTags = useMemo(\r\n () => allTags.filter((tag) => currentTagIds.includes(tag.id)),\r\n [allTags, currentTagIds]\r\n );\r\n\r\n const handleAssignToDungeonMaster = (newDungeonMaster: Player) => {\r\n setCurrentDungeonMaster(newDungeonMaster);\r\n };\r\n\r\n const handleRemovePlayerFromTable = (playerToRemove: Player): void => {\r\n setCurrentPlayers((prevState) => prevState.filter((player) => player.id !== playerToRemove.id));\r\n };\r\n\r\n const handlePromoteWaitlistPlayer = (playerIdToPromote: number) => {\r\n setCurrentWaitlistPlayers((prevWaitlist) => {\r\n const foundPlayer = prevWaitlist.find((player) => player.id === playerIdToPromote);\r\n if (!foundPlayer) {\r\n return prevWaitlist;\r\n }\r\n\r\n setCurrentPlayers((prevPlayers) => [...prevPlayers, foundPlayer]);\r\n return prevWaitlist.filter((player) => player.id !== playerIdToPromote);\r\n });\r\n };\r\n\r\n const handleToggleTag = (tagId: number) => {\r\n setCurrentTagIds((prevState) =>\r\n prevState.includes(tagId)\r\n ? prevState.filter((id) => id !== tagId)\r\n : [...prevState, tagId]\r\n );\r\n };\r\n\r\n return (\r\n <Card\r\n sx={{\r\n backgroundColor: isTableInEditMode ? \"lightsalmon\" : \"white\",\r\n p: 2,\r\n boxShadow: \"0px 8px 15px rgba(25, 118, 210, 0.3)\",\r\n }}\r\n >\r\n <Grid container direction=\"column\">\r\n <Grid\r\n container\r\n direction=\"column\"\r\n spacing={1}\r\n sx={{\r\n px: 2,\r\n py: 1.5,\r\n borderRadius: 2,\r\n background: \"linear-gradient(135deg, rgba(25,118,210,0.8), rgba(25,118,210,1))\",\r\n textShadow:'4px 4px 6px rgba(0, 0, 0, 0.5)'\r\n }}\r\n >\r\n <Box>\r\n <Box\r\n className={`flex items-center gap-1 ${canEdit ? \"cursor-pointer\" : \"\"}`}\r\n sx={{\"&:hover .edit-icon\": { opacity: 1 } }}\r\n onClick={editTableDetails}\r\n >\r\n <CardHeader\r\n title={currentTitle}\r\n sx={{\r\n p: 0,\r\n \"& .MuiCardHeader-title\": {\r\n color: \"white\",\r\n fontWeight: 700,\r\n },\r\n }}\r\n />\r\n {canEdit ? (<EditIcon className=\"edit-icon text-white\" sx={{ opacity: 0, transition: \"opacity 0.2s\" }} />) : \"\"}\r\n </Box>\r\n </Box>\r\n <Box\r\n className={`flex items-center gap-1 ${canEdit ? \"cursor-pointer\" : \"\"}`}\r\n sx={{\"&:hover .edit-icon\": { opacity: 1 } }}\r\n onClick={editTableDetails}\r\n >\r\n <Typography\r\n sx={{ color: \"white\", opacity: 0.95 }}\r\n >\r\n {currentSubtitle}\r\n </Typography>\r\n {canEdit ? (<EditIcon className=\"edit-icon text-white\" sx={{ opacity: 0, transition: \"opacity 0.2s\", fontSize: \"medium\" }} />) : \"\"}\r\n </Box>\r\n\r\n <Grid container onClick={editTableDetails} className={`${canEdit ? \"cursor-pointer\" : \"\"}`}>\r\n {renderTags(currentTagIds, allTags, canEdit, table.eventTagId || eventTagId)}\r\n </Grid>\r\n\r\n <TableActionsBar\r\n isInEditMode={isTableInEditMode}\r\n numPlayers={currentPlayers.length}\r\n onDeleteTable={onDeleteTable}\r\n onEditModeChange={setIsTableInEditMode}\r\n onJoinWaitlist={onJoinWaitlist}\r\n onLeaveTable={onLeaveTable}\r\n onPromoteWaitlistPlayer={handlePromoteWaitlistPlayer}\r\n onSave={handleSaveTable}\r\n slots={table.capacity || 0}\r\n tableStatus={tableStatus}\r\n waitlistPlayers={currentWaitlistPlayers}\r\n />\r\n </Grid>\r\n\r\n <Grid container spacing={2} sx={{ mt: 2 }}>\r\n <Grid size={{xs: 12, md:8}}>\r\n <Card sx={{ height: \"100%\" }}>\r\n <CardContent>\r\n {isTableInEditMode ? (\r\n <AutoResizingTextarea\r\n isInEditMode={isTableInEditMode}\r\n onChange={setCurrentDescription}\r\n textareaRef={textAreaRef}\r\n value={currentDescription}\r\n />\r\n ) : (\r\n <Typography sx={{ whiteSpace: \"pre-wrap\" }}>\r\n {currentDescription}\r\n </Typography>\r\n )}\r\n </CardContent>\r\n </Card>\r\n </Grid>\r\n\r\n <Grid size={{xs: 12, md:4}}>\r\n <DMHighlightsCard canEdit={isTableInEditMode} player={currentDungeonMaster} allTags={allTags} />\r\n\r\n <Card sx={{ height: \"100%\" }}>\r\n <CardHeader slotProps={{title: {variant: \"h4\"}}} title=\"Players: \"/>\r\n <CardContent>\r\n {currentPlayers.map((player) => (\r\n <PlayerHighlightsCard\r\n allTags={allTags}\r\n canChangeDungeonMaster={tableStatus.isOwner || tableStatus.isDM}\r\n canEdit={isTableInEditMode}\r\n handleAssignToDungeonMaster={handleAssignToDungeonMaster}\r\n key={player.id}\r\n player={player}\r\n removeFromTable={handleRemovePlayerFromTable}\r\n />\r\n ))}\r\n </CardContent>\r\n </Card>\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n </Card>\r\n );\r\n}\r\n\r\nconst renderTags = function (\r\n tags: number[] | undefined,\r\n allTags: Tag[] | undefined,\r\n canEdit: boolean,\r\n eventTagId?: number\r\n): JSX.Element {\r\n if (!tags || !allTags) {\r\n return <></>;\r\n }\r\n return (\r\n <Grid container spacing={1} sx={{ pb: 1.5 }}>\r\n {renderTagsFromIds(tags, allTags, { showEventTag: true, eventTagId })}\r\n {(canEdit ? <Button variant={\"text\"}\r\n className=\"inline-block text-sm px-3 py-1font-outlined m-0.5 font-stretch-105% font-sans\"\r\n sx={{\r\n color: \"white\",\r\n textShadow: \"black 1.5px 1px 1.5px\",\r\n '&:hover': {\r\n background: '#889'\r\n }\r\n }}>Edit Tags...</Button>\r\n : \"\")}\r\n </Grid>\r\n );\r\n};\r\n\r\nexport default TablePageLayout;\r\n\r\n","\"use client\";\r\n\r\nimport React, { ReactNode, useState } from \"react\";\r\nimport Dialog from \"@mui/material/Dialog\";\r\nimport DialogContent from \"@mui/material/DialogContent\";\r\nimport DialogActions from \"@mui/material/DialogActions\";\r\nimport Button from \"@mui/material/Button\";\r\nimport IconButton from \"@mui/material/IconButton\";\r\nimport CloseIcon from \"@mui/icons-material/Close\";\r\nimport { ModalContext, ModalOptions } from '@/components';\r\nimport {Box} from \"@mui/material\";\r\nimport DialogTitle from \"@mui/material/DialogTitle\";\r\n\r\ntype ModalProviderProps = {\r\n children: ReactNode;\r\n}\r\n\r\nexport const ModalProvider = ({ children }: ModalProviderProps) => {\r\n const [modalContent, setModalContent] = useState<null | ReactNode>(null);\r\n const [displayModal, setDisplayModal] = useState(false);\r\n const [title, setTitle] = useState(\"\");\r\n const [options, setOptions] = useState<ModalOptions>({});\r\n\r\n const showModal = (content: ReactNode, title: string, opts?: ModalOptions) => {\r\n setModalContent(content);\r\n setTitle(title);\r\n setOptions(opts ?? {});\r\n setDisplayModal(true);\r\n }\r\n const hideModal = () => {\r\n setDisplayModal(false);\r\n };\r\n\r\n return (\r\n <ModalContext.Provider value={{ showModal, hideModal }}>\r\n {children}\r\n <Dialog open={displayModal} onClose={hideModal} sx={{height: \"85%\"}}>\r\n <Box>\r\n <DialogTitle sx={{marginRight: '20px', minWidth: '400px'}}>{title}</DialogTitle>\r\n <IconButton\r\n aria-label=\"close\"\r\n onClick={hideModal}\r\n sx={{ position: 'absolute', right: 8, top: 8 }}\r\n >\r\n <CloseIcon />\r\n </IconButton>\r\n </Box>\r\n <DialogContent sx={{paddingTop: 0}}>\r\n {modalContent}\r\n </DialogContent>\r\n {(options.acceptText || options.onAccept) && (\r\n <DialogActions>\r\n <Button variant=\"contained\" onClick={() => { hideModal(); options.onAccept?.(); }}>\r\n {options.acceptText ?? \"OK\"}\r\n </Button>\r\n <Button onClick={() => { hideModal(); options.onCancel?.(); }}>Cancel</Button>\r\n </DialogActions>\r\n )}\r\n </Dialog>\r\n </ModalContext.Provider>\r\n );\r\n}\r\n\r\nexport default ModalProvider;"]}