@mbpockets/shared-ui 0.1.21 → 0.2.5

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 +122 -65
  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 +122 -65
  14. package/dist/EventPage/index.mjs.map +1 -1
  15. package/dist/EventPage.cjs +122 -65
  16. package/dist/EventPage.cjs.map +1 -1
  17. package/dist/EventPage.d.cts +4 -4
  18. package/dist/EventPage.d.ts +4 -4
  19. package/dist/EventPage.mjs +122 -65
  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 +87 -49
  50. package/dist/SearchPage/Results/index.cjs.map +1 -1
  51. package/dist/SearchPage/Results/index.mjs +87 -49
  52. package/dist/SearchPage/Results/index.mjs.map +1 -1
  53. package/dist/SearchPage/Results.cjs +87 -49
  54. package/dist/SearchPage/Results.cjs.map +1 -1
  55. package/dist/SearchPage/Results.d.cts +10 -3
  56. package/dist/SearchPage/Results.d.ts +10 -3
  57. package/dist/SearchPage/Results.mjs +87 -49
  58. package/dist/SearchPage/Results.mjs.map +1 -1
  59. package/dist/SearchPage/index.cjs +208 -101
  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 +204 -100
  64. package/dist/SearchPage/index.mjs.map +1 -1
  65. package/dist/SearchPage.cjs +208 -101
  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 +204 -100
  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 +890 -426
  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 +871 -423
  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/TablePage/NextGameLabel.tsx","../../../src/components/shared/Chip.tsx","../../../src/components/shared/TagComponents.tsx","../../../src/components/SearchPage/Results/BaseSearchResultCard.tsx","../../../src/components/SearchPage/Results/EventResultCard.tsx","../../../src/components/SearchPage/Results/PlayerResultCard.tsx","../../../src/components/SearchPage/Results/SearchResultCard.tsx","../../../src/components/SearchPage/Results/TableResultCard.tsx"],"names":["jsxs","Typography","jsx","Fragment","Card","CardContent","Box","EventIcon","CalendarTodayIcon","LocationOnIcon","Avatar","TableRestaurantIcon","Chip","SupervisorAccountIcon","PersonIcon","LinearProgress"],"mappings":"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","file":"index.cjs","sourcesContent":["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 {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","import React from 'react';\nimport Card from '@mui/material/Card';\nimport CardContent from '@mui/material/CardContent';\nimport Typography from '@mui/material/Typography';\nimport Box from '@mui/material/Box';\nimport { Tag } from '@/types/tag';\nimport { SearchResultItem } from '@/types/search';\nimport NextGameLabel from \"@/components/TablePage/NextGameLabel\";\nimport { renderTagsFromIds } from \"@/components/shared/TagComponents\";\n\nexport interface BaseSearchResultCardProps {\n result: SearchResultItem;\n onClick?: (id: number) => void;\n icon?: React.ReactNode;\n children?: React.ReactNode;\n tags: Tag[];\n}\n\n/**\n * Base component for displaying search results with common functionality\n */\nconst BaseSearchResultCard: React.FC<BaseSearchResultCardProps> = ({ \n result,\n onClick,\n children,\n icon,\n tags\n}) => {\n const handleClick = (e: React.MouseEvent) => {\n if (onClick) {\n // If modifier key is pressed, let the browser handle the navigation behavior\n if (e.ctrlKey || e.metaKey || e.shiftKey) {\n // Prevent the default onClick behavior\n e.stopPropagation();\n\n // Get the URL that would be navigated to\n const url = `/${result.type}/${result.id}`;\n\n // Open in new tab/window based on the modifier key\n window.open(url, '_blank');\n } else {\n // Normal click - use the provided onClick handler\n onClick(result.id);\n }\n }\n };\n\n return (\n <Card \n elevation={6}\n sx={{ \n width: '100%', \n cursor: onClick ? 'pointer' : 'default',\n boxShadow: '0px 8px 24px rgba(0, 0, 0, 0.15)',\n transition: 'box-shadow 0.3s ease-in-out',\n '&:hover': {\n boxShadow: '0px 12px 28px rgba(0, 0, 0, 0.2)'\n },\n marginBottom: 2\n }}\n onClick={(e) => handleClick(e)}\n >\n <CardContent sx={{ display: 'flex', alignItems: 'flex-start' }}>\n {/* Icon on the left */}\n {icon && (\n <Box sx={{ mr: 2, display: 'flex', alignItems: 'center', pt: 0.5 }}>\n {icon}\n </Box>\n )}\n\n {/* Content on the right */}\n <Box sx={{ flex: 1 }}>\n <Typography variant=\"h6\" sx={{ mb: 1 }}>\n {result.title}\n </Typography>\n {/* show Next Game Time if available */}\n {result.nextGameTime && (\n <NextGameLabel nextGameTime={result.nextGameTime}/>\n )}\n {/* Show short description above player info for tables */}\n {result.type === 'table' && result.shortDescription ? (\n <Typography variant=\"body2\" sx={{ mb: 1 }}>\n {result.shortDescription}\n </Typography>\n ) : null}\n\n {/* Specialized content will be inserted here */}\n {children}\n\n {/* Description: for tables show trimmed full description below players; otherwise show default description */}\n {result.type === 'table' ? (\n <Typography variant=\"body1\">\n {(() => {\n const full = result.fullDescription ?? result.description ?? '';\n if (typeof full !== 'string') return '';\n const text = full || '';\n return text.length > 200 ? `${text.slice(0, 200).trimEnd()}...` : text;\n })()}\n </Typography>\n ) : (\n <Typography variant=\"body1\">\n {result.description}\n </Typography>\n )}\n\n {result.tags && result.tags.length > 0 && (\n <Box sx={{ mt: 1, display: 'flex', flexWrap: 'wrap', gap: 1 }}>\n {renderTagsFromIds(result.tags, tags)}\n </Box>\n )}\n </Box>\n </CardContent>\n </Card>\n );\n};\n\nexport default BaseSearchResultCard;","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';\nimport { Tag } from \"@/types/tag\";\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 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;","\"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 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';\nimport { Tag } from '@/types/tag';\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;"]}
1
+ {"version":3,"sources":["../../../src/components/TablePage/NextGameLabel.tsx","../../../src/components/shared/Chip.tsx","../../../src/components/shared/TagComponents.tsx","../../../src/components/SearchPage/Results/BaseSearchResultCard.tsx","../../../src/components/SearchPage/Results/EventResultCard.tsx","../../../src/data/values.tsx","../../../src/components/SearchPage/Results/PlayerResultCard.tsx","../../../src/components/SearchPage/Results/SearchResultCard.tsx","../../../src/components/SearchPage/Results/TableResultCard.tsx"],"names":["jsxs","Typography","jsx","Fragment","useRouter","Card","CardContent","Box","EventIcon","CalendarTodayIcon","LocationOnIcon","Avatar","TableRestaurantIcon","Chip","SupervisorAccountIcon","PersonIcon","LinearProgress"],"mappings":"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","file":"index.cjs","sourcesContent":["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 {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","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 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}\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}) => {\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 result={result} onClick={onClick} icon={eventIcon} tags={tags}>\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","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 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}\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}) => {\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 result={result} onClick={onClick} icon={playerIcon} tags={tags}>\r\n {/* No additional content needed after removing join date */}\r\n </BaseSearchResultCard>\r\n );\r\n};\r\n\r\nexport default PlayerResultCard;","\"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 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;"]}
@@ -3,6 +3,7 @@ import Card from '@mui/material/Card';
3
3
  import CardContent from '@mui/material/CardContent';
4
4
  import Typography2 from '@mui/material/Typography';
5
5
  import Box from '@mui/material/Box';
6
+ import { useRouter } from 'next/navigation';
6
7
  import { Typography } from '@mui/material';
7
8
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
8
9
  import CalendarTodayIcon from '@mui/icons-material/CalendarToday';
@@ -58,29 +59,51 @@ function Chip({ tag, removeCallback }) {
58
59
  function generateTagsDisplay(tag) {
59
60
  return /* @__PURE__ */ jsx(Chip, { tag }, tag.id);
60
61
  }
61
- function renderTagsFromIds(ids, legalTags) {
62
+ function renderTagsFromIds(ids, legalTags, options = {}) {
62
63
  if (!ids || !legalTags || legalTags.length === 0) {
63
64
  return /* @__PURE__ */ jsx(Fragment, {});
64
65
  }
66
+ const { showEventTag = false, eventTagId } = options;
65
67
  const validTags = ids.map((id) => legalTags.find((tag) => tag.id === id)).filter((tag) => Boolean(tag));
66
- return validTags.map((tag) => generateTagsDisplay(tag));
68
+ const sortedTags = [...validTags].sort((a, b) => {
69
+ if (showEventTag && eventTagId !== void 0) {
70
+ if (a.id === eventTagId && b.id === eventTagId) return 0;
71
+ if (a.id === eventTagId) return -1;
72
+ if (b.id === eventTagId) return 1;
73
+ }
74
+ const priorityOrder = ["Organizer Run", "Display Only"];
75
+ const aIndex = priorityOrder.indexOf(a.label);
76
+ const bIndex = priorityOrder.indexOf(b.label);
77
+ if (aIndex !== -1 && bIndex !== -1) {
78
+ return aIndex - bIndex;
79
+ }
80
+ if (aIndex !== -1) return -1;
81
+ if (bIndex !== -1) return 1;
82
+ return 0;
83
+ });
84
+ return sortedTags.map((tag) => generateTagsDisplay(tag));
67
85
  }
68
86
  var BaseSearchResultCard = ({
69
87
  result,
70
88
  onClick,
71
89
  children,
72
90
  icon,
73
- tags
91
+ tags,
92
+ showEventTag,
93
+ eventTagId
74
94
  }) => {
95
+ const router = useRouter();
75
96
  const handleClick = (e) => {
97
+ const url = `/${result.type}/${result.id}`;
98
+ if (e.ctrlKey || e.metaKey || e.shiftKey) {
99
+ e.stopPropagation();
100
+ window.open(url, "_blank");
101
+ return;
102
+ }
76
103
  if (onClick) {
77
- if (e.ctrlKey || e.metaKey || e.shiftKey) {
78
- e.stopPropagation();
79
- const url = `/${result.type}/${result.id}`;
80
- window.open(url, "_blank");
81
- } else {
82
- onClick(result.id);
83
- }
104
+ onClick(result.id);
105
+ } else {
106
+ router.push(url);
84
107
  }
85
108
  };
86
109
  return /* @__PURE__ */ jsx(
@@ -89,7 +112,7 @@ var BaseSearchResultCard = ({
89
112
  elevation: 6,
90
113
  sx: {
91
114
  width: "100%",
92
- cursor: onClick ? "pointer" : "default",
115
+ cursor: "pointer",
93
116
  boxShadow: "0px 8px 24px rgba(0, 0, 0, 0.15)",
94
117
  transition: "box-shadow 0.3s ease-in-out",
95
118
  "&:hover": {
@@ -108,11 +131,10 @@ var BaseSearchResultCard = ({
108
131
  result.type === "table" ? /* @__PURE__ */ jsx(Typography2, { variant: "body1", children: (() => {
109
132
  var _a, _b;
110
133
  const full = (_b = (_a = result.fullDescription) != null ? _a : result.description) != null ? _b : "";
111
- if (typeof full !== "string") return "";
112
134
  const text = full || "";
113
135
  return text.length > 200 ? `${text.slice(0, 200).trimEnd()}...` : text;
114
136
  })() }) : /* @__PURE__ */ jsx(Typography2, { variant: "body1", children: result.description }),
115
- result.tags && result.tags.length > 0 && /* @__PURE__ */ jsx(Box, { sx: { mt: 1, display: "flex", flexWrap: "wrap", gap: 1 }, children: renderTagsFromIds(result.tags, tags) })
137
+ result.tags && result.tags.length > 0 && /* @__PURE__ */ jsx(Box, { sx: { mt: 1, display: "flex", flexWrap: "wrap", gap: 1 }, children: renderTagsFromIds(result.tags, tags, { showEventTag, eventTagId }) })
116
138
  ] })
117
139
  ] })
118
140
  }
@@ -134,7 +156,7 @@ var EventResultCard = ({
134
156
  try {
135
157
  const date = new Date(dateString);
136
158
  return date.toLocaleDateString("en-US", options);
137
- } catch (error) {
159
+ } catch (__) {
138
160
  return dateString;
139
161
  }
140
162
  };
@@ -174,6 +196,9 @@ var EventResultCard = ({
174
196
  ] }) });
175
197
  };
176
198
  var EventResultCard_default = EventResultCard;
199
+
200
+ // src/data/values.tsx
201
+ var DEFAULT_PROFILE_PIC = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2ZXJzaW9uPSIxLjEiIHdpZHRoPSIyNTYiIGhlaWdodD0iMjU2IiB2aWV3Qm94PSIwIDAgMjU2IDI1NiIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+CjxnIHN0eWxlPSJzdHJva2U6IG5vbmU7IHN0cm9rZS13aWR0aDogMDsgc3Ryb2tlLWRhc2hhcnJheTogbm9uZTsgc3Ryb2tlLWxpbmVjYXA6IGJ1dHQ7IHN0cm9rZS1saW5lam9pbjogbWl0ZXI7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDsgZmlsbDogbm9uZTsgZmlsbC1ydWxlOiBub256ZXJvOyBvcGFjaXR5OiAxOyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS40MDY1OTM0MDY1OTM0MDE2IDEuNDA2NTkzNDA2NTkzNDAxNikgc2NhbGUoMi44MSAyLjgxKSI+Cgk8cGF0aCBkPSJNIDQ1IDg4IGMgLTExLjA0OSAwIC0yMS4xOCAtMi4wMDMgLTI5LjAyMSAtOC42MzQgQyA2LjIxMiA3MS4xMDUgMCA1OC43NjQgMCA0NSBDIDAgMjAuMTg3IDIwLjE4NyAwIDQ1IDAgYyAyNC44MTMgMCA0NSAyMC4xODcgNDUgNDUgYyAwIDEzLjc2NSAtNi4yMTIgMjYuMTA1IC0xNS45NzkgMzQuMzY2IEMgNjYuMTgxIDg1Ljk5OCA1Ni4wNDkgODggNDUgODggeiIgc3R5bGU9InN0cm9rZTogbm9uZTsgc3Ryb2tlLXdpZHRoOiAxOyBzdHJva2UtZGFzaGFycmF5OiBub25lOyBzdHJva2UtbGluZWNhcDogYnV0dDsgc3Ryb2tlLWxpbmVqb2luOiBtaXRlcjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyBmaWxsOiByZ2IoMjE0LDIxNCwyMTQpOyBmaWxsLXJ1bGU6IG5vbnplcm87IG9wYWNpdHk6IDE7IiB0cmFuc2Zvcm09IiBtYXRyaXgoMSAwIDAgMSAwIDApICIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+Cgk8cGF0aCBkPSJNIDQ1IDYwLjcxIGMgLTExLjQ3OSAwIC0yMC44MTggLTkuMzM5IC0yMC44MTggLTIwLjgxNyBjIDAgLTExLjQ3OSA5LjMzOSAtMjAuODE4IDIwLjgxOCAtMjAuODE4IGMgMTEuNDc5IDAgMjAuODE3IDkuMzM5IDIwLjgxNyAyMC44MTggQyA2NS44MTcgNTEuMzcxIDU2LjQ3OSA2MC43MSA0NSA2MC43MSB6IiBzdHlsZT0ic3Ryb2tlOiBub25lOyBzdHJva2Utd2lkdGg6IDE7IHN0cm9rZS1kYXNoYXJyYXk6IG5vbmU7IHN0cm9rZS1saW5lY2FwOiBidXR0OyBzdHJva2UtbGluZWpvaW46IG1pdGVyOyBzdHJva2UtbWl0ZXJsaW1pdDogMTA7IGZpbGw6IHJnYigxNjUsMTY0LDE2NCk7IGZpbGwtcnVsZTogbm9uemVybzsgb3BhY2l0eTogMTsiIHRyYW5zZm9ybT0iIG1hdHJpeCgxIDAgMCAxIDAgMCkgIiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KCTxwYXRoIGQ9Ik0gNDUgOTAgYyAtMTAuNjEzIDAgLTIwLjkyMiAtMy43NzMgLTI5LjAyOCAtMTAuNjI1IGMgLTAuNjQ4IC0wLjU0OCAtMC44OCAtMS40NDQgLTAuNTc5IC0yLjIzNyBDIDIwLjAzNCA2NC45MTkgMzEuOTMzIDU2LjcxIDQ1IDU2LjcxIHMgMjQuOTY2IDguMjA5IDI5LjYwNyAyMC40MjggYyAwLjMwMSAwLjc5MyAwLjA2OSAxLjY4OSAtMC41NzkgMi4yMzcgQyA2NS45MjIgODYuMjI3IDU1LjYxMyA5MCA0NSA5MCB6IiBzdHlsZT0ic3Ryb2tlOiBub25lOyBzdHJva2Utd2lkdGg6IDE7IHN0cm9rZS1kYXNoYXJyYXk6IG5vbmU7IHN0cm9rZS1saW5lY2FwOiBidXR0OyBzdHJva2UtbGluZWpvaW46IG1pdGVyOyBzdHJva2UtbWl0ZXJsaW1pdDogMTA7IGZpbGw6IHJnYigxNjUsMTY0LDE2NCk7IGZpbGwtcnVsZTogbm9uemVybzsgb3BhY2l0eTogMTsiIHRyYW5zZm9ybT0iIG1hdHJpeCgxIDAgMCAxIDAgMCkgIiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPC9nPgo8L3N2Zz4=";
177
202
  var PlayerResultCard = ({
178
203
  result,
179
204
  onClick,
@@ -209,7 +234,7 @@ var PlayerResultCard = ({
209
234
  const playerIcon = /* @__PURE__ */ jsx(
210
235
  Avatar,
211
236
  {
212
- src: result.imageUrl,
237
+ src: result.imageUrl || DEFAULT_PROFILE_PIC,
213
238
  alt: result.title,
214
239
  sx: {
215
240
  width: 40,
@@ -233,7 +258,9 @@ var SearchResultCard_default = SearchResultCard;
233
258
  var TableResultCard = ({
234
259
  result,
235
260
  onClick,
236
- tags
261
+ tags,
262
+ showEventTag,
263
+ eventTagId
237
264
  }) => {
238
265
  const rawCapacity = result.capacity;
239
266
  const hasDefinedCapacity = typeof rawCapacity === "number" && Number.isFinite(rawCapacity) && rawCapacity > 0;
@@ -251,40 +278,51 @@ var TableResultCard = ({
251
278
  }
252
279
  }
253
280
  );
254
- return /* @__PURE__ */ jsx(BaseSearchResultCard_default, { result, onClick, icon: tableIcon, tags, children: /* @__PURE__ */ jsxs(Box, { sx: { mb: 2 }, children: [
255
- /* @__PURE__ */ jsxs(Box, { sx: { display: "flex", justifyContent: "space-between", alignItems: "center", mb: 1 }, children: [
256
- /* @__PURE__ */ jsxs(Typography2, { variant: "body2", children: [
257
- /* @__PURE__ */ jsx("strong", { children: "Players:" }),
258
- " ",
259
- hasDefinedCapacity ? `${activePlayers}/${capacity}` : activePlayers
260
- ] }),
261
- typeof hasDM === "boolean" && /* @__PURE__ */ jsx(
262
- Chip2,
263
- {
264
- icon: hasDM ? /* @__PURE__ */ jsx(SupervisorAccountIcon, {}) : /* @__PURE__ */ jsx(PersonIcon, {}),
265
- label: hasDM ? "DM Present" : "No DM",
266
- color: hasDM ? "success" : "warning",
267
- size: "small"
268
- }
269
- )
270
- ] }),
271
- /* @__PURE__ */ jsx(
272
- LinearProgress,
273
- {
274
- variant: "determinate",
275
- value: occupancyPercentage,
276
- sx: {
277
- height: 10,
278
- borderRadius: 5,
279
- backgroundColor: "#e0e0e0",
280
- "& .MuiLinearProgress-bar": {
281
- backgroundColor: hasDefinedCapacity ? availableSlots > 0 ? "#4caf50" : "#f44336" : "#2196f3"
281
+ return /* @__PURE__ */ jsx(
282
+ BaseSearchResultCard_default,
283
+ {
284
+ result,
285
+ onClick,
286
+ icon: tableIcon,
287
+ tags,
288
+ showEventTag,
289
+ eventTagId,
290
+ children: /* @__PURE__ */ jsxs(Box, { sx: { mb: 2 }, children: [
291
+ /* @__PURE__ */ jsxs(Box, { sx: { display: "flex", justifyContent: "space-between", alignItems: "center", mb: 1 }, children: [
292
+ /* @__PURE__ */ jsxs(Typography2, { variant: "body2", children: [
293
+ /* @__PURE__ */ jsx("strong", { children: "Players:" }),
294
+ " ",
295
+ hasDefinedCapacity ? `${activePlayers}/${capacity}` : activePlayers
296
+ ] }),
297
+ typeof hasDM === "boolean" && /* @__PURE__ */ jsx(
298
+ Chip2,
299
+ {
300
+ icon: hasDM ? /* @__PURE__ */ jsx(SupervisorAccountIcon, {}) : /* @__PURE__ */ jsx(PersonIcon, {}),
301
+ label: hasDM ? "DM Present" : "No DM",
302
+ color: hasDM ? "success" : "warning",
303
+ size: "small"
304
+ }
305
+ )
306
+ ] }),
307
+ /* @__PURE__ */ jsx(
308
+ LinearProgress,
309
+ {
310
+ variant: "determinate",
311
+ value: occupancyPercentage,
312
+ sx: {
313
+ height: 10,
314
+ borderRadius: 5,
315
+ backgroundColor: "#e0e0e0",
316
+ "& .MuiLinearProgress-bar": {
317
+ backgroundColor: hasDefinedCapacity ? availableSlots > 0 ? "#4caf50" : "#f44336" : "#2196f3"
318
+ }
319
+ }
282
320
  }
283
- }
284
- }
285
- ),
286
- hasDefinedCapacity && /* @__PURE__ */ jsx(Typography2, { variant: "body2", sx: { mt: 0.5, textAlign: "right" }, children: availableSlots > 0 ? `${availableSlots} slot${availableSlots !== 1 ? "s" : ""} available` : "Table full" })
287
- ] }) });
321
+ ),
322
+ hasDefinedCapacity && /* @__PURE__ */ jsx(Typography2, { variant: "body2", sx: { mt: 0.5, textAlign: "right" }, children: availableSlots > 0 ? `${availableSlots} slot${availableSlots !== 1 ? "s" : ""} available` : "Table full" })
323
+ ] })
324
+ }
325
+ );
288
326
  };
289
327
  var TableResultCard_default = TableResultCard;
290
328
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/TablePage/NextGameLabel.tsx","../../../src/components/shared/Chip.tsx","../../../src/components/shared/TagComponents.tsx","../../../src/components/SearchPage/Results/BaseSearchResultCard.tsx","../../../src/components/SearchPage/Results/EventResultCard.tsx","../../../src/components/SearchPage/Results/PlayerResultCard.tsx","../../../src/components/SearchPage/Results/SearchResultCard.tsx","../../../src/components/SearchPage/Results/TableResultCard.tsx"],"names":["jsxs","jsx","Fragment","Typography","Box","Chip"],"mappings":"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","file":"index.mjs","sourcesContent":["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 {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","import React from 'react';\nimport Card from '@mui/material/Card';\nimport CardContent from '@mui/material/CardContent';\nimport Typography from '@mui/material/Typography';\nimport Box from '@mui/material/Box';\nimport { Tag } from '@/types/tag';\nimport { SearchResultItem } from '@/types/search';\nimport NextGameLabel from \"@/components/TablePage/NextGameLabel\";\nimport { renderTagsFromIds } from \"@/components/shared/TagComponents\";\n\nexport interface BaseSearchResultCardProps {\n result: SearchResultItem;\n onClick?: (id: number) => void;\n icon?: React.ReactNode;\n children?: React.ReactNode;\n tags: Tag[];\n}\n\n/**\n * Base component for displaying search results with common functionality\n */\nconst BaseSearchResultCard: React.FC<BaseSearchResultCardProps> = ({ \n result,\n onClick,\n children,\n icon,\n tags\n}) => {\n const handleClick = (e: React.MouseEvent) => {\n if (onClick) {\n // If modifier key is pressed, let the browser handle the navigation behavior\n if (e.ctrlKey || e.metaKey || e.shiftKey) {\n // Prevent the default onClick behavior\n e.stopPropagation();\n\n // Get the URL that would be navigated to\n const url = `/${result.type}/${result.id}`;\n\n // Open in new tab/window based on the modifier key\n window.open(url, '_blank');\n } else {\n // Normal click - use the provided onClick handler\n onClick(result.id);\n }\n }\n };\n\n return (\n <Card \n elevation={6}\n sx={{ \n width: '100%', \n cursor: onClick ? 'pointer' : 'default',\n boxShadow: '0px 8px 24px rgba(0, 0, 0, 0.15)',\n transition: 'box-shadow 0.3s ease-in-out',\n '&:hover': {\n boxShadow: '0px 12px 28px rgba(0, 0, 0, 0.2)'\n },\n marginBottom: 2\n }}\n onClick={(e) => handleClick(e)}\n >\n <CardContent sx={{ display: 'flex', alignItems: 'flex-start' }}>\n {/* Icon on the left */}\n {icon && (\n <Box sx={{ mr: 2, display: 'flex', alignItems: 'center', pt: 0.5 }}>\n {icon}\n </Box>\n )}\n\n {/* Content on the right */}\n <Box sx={{ flex: 1 }}>\n <Typography variant=\"h6\" sx={{ mb: 1 }}>\n {result.title}\n </Typography>\n {/* show Next Game Time if available */}\n {result.nextGameTime && (\n <NextGameLabel nextGameTime={result.nextGameTime}/>\n )}\n {/* Show short description above player info for tables */}\n {result.type === 'table' && result.shortDescription ? (\n <Typography variant=\"body2\" sx={{ mb: 1 }}>\n {result.shortDescription}\n </Typography>\n ) : null}\n\n {/* Specialized content will be inserted here */}\n {children}\n\n {/* Description: for tables show trimmed full description below players; otherwise show default description */}\n {result.type === 'table' ? (\n <Typography variant=\"body1\">\n {(() => {\n const full = result.fullDescription ?? result.description ?? '';\n if (typeof full !== 'string') return '';\n const text = full || '';\n return text.length > 200 ? `${text.slice(0, 200).trimEnd()}...` : text;\n })()}\n </Typography>\n ) : (\n <Typography variant=\"body1\">\n {result.description}\n </Typography>\n )}\n\n {result.tags && result.tags.length > 0 && (\n <Box sx={{ mt: 1, display: 'flex', flexWrap: 'wrap', gap: 1 }}>\n {renderTagsFromIds(result.tags, tags)}\n </Box>\n )}\n </Box>\n </CardContent>\n </Card>\n );\n};\n\nexport default BaseSearchResultCard;","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';\nimport { Tag } from \"@/types/tag\";\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 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;","\"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 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';\nimport { Tag } from '@/types/tag';\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;"]}
1
+ {"version":3,"sources":["../../../src/components/TablePage/NextGameLabel.tsx","../../../src/components/shared/Chip.tsx","../../../src/components/shared/TagComponents.tsx","../../../src/components/SearchPage/Results/BaseSearchResultCard.tsx","../../../src/components/SearchPage/Results/EventResultCard.tsx","../../../src/data/values.tsx","../../../src/components/SearchPage/Results/PlayerResultCard.tsx","../../../src/components/SearchPage/Results/SearchResultCard.tsx","../../../src/components/SearchPage/Results/TableResultCard.tsx"],"names":["jsxs","jsx","Fragment","Typography","Box","Chip"],"mappings":"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","file":"index.mjs","sourcesContent":["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 {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","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 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}\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}) => {\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 result={result} onClick={onClick} icon={eventIcon} tags={tags}>\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","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 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}\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}) => {\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 result={result} onClick={onClick} icon={playerIcon} tags={tags}>\r\n {/* No additional content needed after removing join date */}\r\n </BaseSearchResultCard>\r\n );\r\n};\r\n\r\nexport default PlayerResultCard;","\"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 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;"]}