@mbpockets/shared-ui 0.2.0 → 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.
- package/dist/EventPage/editMode/index.cjs.map +1 -1
- package/dist/EventPage/editMode/index.d.cts +1 -1
- package/dist/EventPage/editMode/index.d.ts +1 -1
- package/dist/EventPage/editMode/index.mjs.map +1 -1
- package/dist/EventPage/editMode.cjs.map +1 -1
- package/dist/EventPage/editMode.d.cts +1 -1
- package/dist/EventPage/editMode.d.ts +1 -1
- package/dist/EventPage/editMode.mjs.map +1 -1
- package/dist/EventPage/index.cjs +121 -63
- package/dist/EventPage/index.cjs.map +1 -1
- package/dist/EventPage/index.d.cts +1 -1
- package/dist/EventPage/index.d.ts +1 -1
- package/dist/EventPage/index.mjs +121 -63
- package/dist/EventPage/index.mjs.map +1 -1
- package/dist/EventPage.cjs +121 -63
- package/dist/EventPage.cjs.map +1 -1
- package/dist/EventPage.d.cts +4 -4
- package/dist/EventPage.d.ts +4 -4
- package/dist/EventPage.mjs +121 -63
- package/dist/EventPage.mjs.map +1 -1
- package/dist/PlayerPage/index.cjs +12 -8
- package/dist/PlayerPage/index.cjs.map +1 -1
- package/dist/PlayerPage/index.mjs +12 -8
- package/dist/PlayerPage/index.mjs.map +1 -1
- package/dist/PlayerPage.cjs +12 -8
- package/dist/PlayerPage.cjs.map +1 -1
- package/dist/PlayerPage.mjs +12 -8
- package/dist/PlayerPage.mjs.map +1 -1
- package/dist/ProfilePage/index.cjs +12 -8
- package/dist/ProfilePage/index.cjs.map +1 -1
- package/dist/ProfilePage/index.mjs +12 -8
- package/dist/ProfilePage/index.mjs.map +1 -1
- package/dist/ProfilePage.cjs +12 -8
- package/dist/ProfilePage.cjs.map +1 -1
- package/dist/ProfilePage.mjs +12 -8
- package/dist/ProfilePage.mjs.map +1 -1
- package/dist/SearchPage/Filters/index.cjs +38 -18
- package/dist/SearchPage/Filters/index.cjs.map +1 -1
- package/dist/SearchPage/Filters/index.d.cts +2 -1
- package/dist/SearchPage/Filters/index.d.ts +2 -1
- package/dist/SearchPage/Filters/index.mjs +34 -17
- package/dist/SearchPage/Filters/index.mjs.map +1 -1
- package/dist/SearchPage/Filters.cjs +38 -18
- package/dist/SearchPage/Filters.cjs.map +1 -1
- package/dist/SearchPage/Filters.d.cts +13 -1
- package/dist/SearchPage/Filters.d.ts +13 -1
- package/dist/SearchPage/Filters.mjs +34 -17
- package/dist/SearchPage/Filters.mjs.map +1 -1
- package/dist/SearchPage/Results/index.cjs +87 -48
- package/dist/SearchPage/Results/index.cjs.map +1 -1
- package/dist/SearchPage/Results/index.mjs +87 -48
- package/dist/SearchPage/Results/index.mjs.map +1 -1
- package/dist/SearchPage/Results.cjs +87 -48
- package/dist/SearchPage/Results.cjs.map +1 -1
- package/dist/SearchPage/Results.d.cts +10 -3
- package/dist/SearchPage/Results.d.ts +10 -3
- package/dist/SearchPage/Results.mjs +87 -48
- package/dist/SearchPage/Results.mjs.map +1 -1
- package/dist/SearchPage/index.cjs +207 -99
- package/dist/SearchPage/index.cjs.map +1 -1
- package/dist/SearchPage/index.d.cts +2 -2
- package/dist/SearchPage/index.d.ts +2 -2
- package/dist/SearchPage/index.mjs +203 -98
- package/dist/SearchPage/index.mjs.map +1 -1
- package/dist/SearchPage.cjs +207 -99
- package/dist/SearchPage.cjs.map +1 -1
- package/dist/SearchPage.d.cts +25 -3
- package/dist/SearchPage.d.ts +25 -3
- package/dist/SearchPage.mjs +203 -98
- package/dist/SearchPage.mjs.map +1 -1
- package/dist/TablePage/EditComponents/index.cjs +296 -0
- package/dist/TablePage/EditComponents/index.cjs.map +1 -0
- package/dist/TablePage/EditComponents/index.d.cts +3 -0
- package/dist/TablePage/EditComponents/index.d.ts +3 -0
- package/dist/TablePage/EditComponents/index.mjs +286 -0
- package/dist/TablePage/EditComponents/index.mjs.map +1 -0
- package/dist/TablePage/EditComponents.cjs +296 -0
- package/dist/TablePage/EditComponents.cjs.map +1 -0
- package/dist/TablePage/EditComponents.d.cts +21 -0
- package/dist/TablePage/EditComponents.d.ts +21 -0
- package/dist/TablePage/EditComponents.mjs +286 -0
- package/dist/TablePage/EditComponents.mjs.map +1 -0
- package/dist/TablePage/ModalProvider/index.cjs +59 -58
- package/dist/TablePage/ModalProvider/index.cjs.map +1 -1
- package/dist/TablePage/ModalProvider/index.d.cts +1 -1
- package/dist/TablePage/ModalProvider/index.d.ts +1 -1
- package/dist/TablePage/ModalProvider/index.mjs +50 -59
- package/dist/TablePage/ModalProvider/index.mjs.map +1 -1
- package/dist/TablePage/ModalProvider.cjs +59 -58
- package/dist/TablePage/ModalProvider.cjs.map +1 -1
- package/dist/TablePage/ModalProvider.d.cts +7 -2
- package/dist/TablePage/ModalProvider.d.ts +7 -2
- package/dist/TablePage/ModalProvider.mjs +50 -59
- package/dist/TablePage/ModalProvider.mjs.map +1 -1
- package/dist/TablePage/index.cjs +555 -331
- package/dist/TablePage/index.cjs.map +1 -1
- package/dist/TablePage/index.d.cts +3 -2
- package/dist/TablePage/index.d.ts +3 -2
- package/dist/TablePage/index.mjs +539 -320
- package/dist/TablePage/index.mjs.map +1 -1
- package/dist/TablePage/players/index.cjs +24 -4
- package/dist/TablePage/players/index.cjs.map +1 -1
- package/dist/TablePage/players/index.mjs +24 -4
- package/dist/TablePage/players/index.mjs.map +1 -1
- package/dist/TablePage/players.cjs +24 -4
- package/dist/TablePage/players.cjs.map +1 -1
- package/dist/TablePage/players.mjs +24 -4
- package/dist/TablePage/players.mjs.map +1 -1
- package/dist/TablePage.cjs +555 -331
- package/dist/TablePage.cjs.map +1 -1
- package/dist/TablePage.d.cts +4 -1
- package/dist/TablePage.d.ts +4 -1
- package/dist/TablePage.mjs +539 -320
- package/dist/TablePage.mjs.map +1 -1
- package/dist/{index-D7WHhl3Q.d.ts → index-B23RQop0.d.ts} +12 -12
- package/dist/{index-DC0kK3aC.d.cts → index-Csj8S4A4.d.cts} +12 -12
- package/dist/index.cjs +889 -424
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +5 -4
- package/dist/index.d.ts +5 -4
- package/dist/index.mjs +870 -421
- package/dist/index.mjs.map +1 -1
- package/dist/mocks/{EventDB.cjs → EventDetails.cjs} +203 -3
- package/dist/mocks/EventDetails.cjs.map +1 -0
- package/dist/mocks/EventDetails.d.cts +6 -0
- package/dist/mocks/EventDetails.d.ts +6 -0
- package/dist/mocks/{EventDB.mjs → EventDetails.mjs} +203 -3
- package/dist/mocks/EventDetails.mjs.map +1 -0
- package/dist/mocks/Tables.cjs +1 -1
- package/dist/mocks/Tables.cjs.map +1 -1
- package/dist/mocks/Tables.mjs +1 -1
- package/dist/mocks/Tables.mjs.map +1 -1
- package/dist/mocks/Tags.cjs +200 -0
- package/dist/mocks/Tags.cjs.map +1 -1
- package/dist/mocks/Tags.mjs +200 -0
- package/dist/mocks/Tags.mjs.map +1 -1
- package/dist/mocks/index.cjs +202 -2
- package/dist/mocks/index.cjs.map +1 -1
- package/dist/mocks/index.d.cts +1 -1
- package/dist/mocks/index.d.ts +1 -1
- package/dist/mocks/index.mjs +202 -2
- package/dist/mocks/index.mjs.map +1 -1
- package/dist/mocks.cjs +202 -2
- package/dist/mocks.cjs.map +1 -1
- package/dist/mocks.d.cts +1 -1
- package/dist/mocks.d.ts +1 -1
- package/dist/mocks.mjs +202 -2
- package/dist/mocks.mjs.map +1 -1
- package/dist/shared/index.cjs +327 -64
- package/dist/shared/index.cjs.map +1 -1
- package/dist/shared/index.d.cts +1 -1
- package/dist/shared/index.d.ts +1 -1
- package/dist/shared/index.mjs +324 -64
- package/dist/shared/index.mjs.map +1 -1
- package/dist/shared.cjs +327 -64
- package/dist/shared.cjs.map +1 -1
- package/dist/shared.d.cts +25 -2
- package/dist/shared.d.ts +25 -2
- package/dist/shared.mjs +324 -64
- package/dist/shared.mjs.map +1 -1
- package/dist/types/event.d.cts +2 -3
- package/dist/types/event.d.ts +2 -3
- package/dist/types/index.d.cts +2 -2
- package/dist/types/index.d.ts +2 -2
- package/dist/types/search.d.cts +7 -1
- package/dist/types/search.d.ts +7 -1
- package/dist/types/tables.d.cts +1 -0
- package/dist/types/tables.d.ts +1 -0
- package/dist/types.d.cts +2 -2
- package/dist/types.d.ts +2 -2
- package/package.json +9 -2
- package/dist/TablePage/ModalProvider/index.css +0 -49
- package/dist/TablePage/ModalProvider/index.css.map +0 -1
- package/dist/TablePage/ModalProvider.css +0 -49
- package/dist/TablePage/ModalProvider.css.map +0 -1
- package/dist/TablePage/index.css +0 -49
- package/dist/TablePage/index.css.map +0 -1
- package/dist/TablePage.css +0 -49
- package/dist/TablePage.css.map +0 -1
- package/dist/index.css +0 -49
- package/dist/index.css.map +0 -1
- package/dist/mocks/EventDB.cjs.map +0 -1
- package/dist/mocks/EventDB.d.cts +0 -6
- package/dist/mocks/EventDB.d.ts +0 -6
- package/dist/mocks/EventDB.mjs.map +0 -1
- package/dist/shared/Modal/index.cjs +0 -64
- package/dist/shared/Modal/index.cjs.map +0 -1
- package/dist/shared/Modal/index.css +0 -49
- package/dist/shared/Modal/index.css.map +0 -1
- package/dist/shared/Modal/index.d.cts +0 -2
- package/dist/shared/Modal/index.d.ts +0 -2
- package/dist/shared/Modal/index.mjs +0 -62
- package/dist/shared/Modal/index.mjs.map +0 -1
- package/dist/shared/Modal.cjs +0 -64
- package/dist/shared/Modal.cjs.map +0 -1
- package/dist/shared/Modal.css +0 -49
- package/dist/shared/Modal.css.map +0 -1
- package/dist/shared/Modal.d.cts +0 -9
- package/dist/shared/Modal.d.ts +0 -9
- package/dist/shared/Modal.mjs +0 -62
- package/dist/shared/Modal.mjs.map +0 -1
- package/dist/shared/index.css +0 -49
- package/dist/shared/index.css.map +0 -1
- package/dist/shared.css +0 -49
- package/dist/shared.css.map +0 -1
package/dist/ProfilePage.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/PlayerPage/PlayerDetailsCard.tsx","../src/data/values.tsx","../src/components/PlayerPage/PlayerDisplayCard.tsx","../src/components/shared/Chip.tsx","../src/components/PlayerPage/PlayerTagsCard.tsx","../src/components/PlayerPage/PlayerPromptCard.tsx","../src/components/PlayerPage/PlayerTagsEdit.tsx","../src/components/PlayerPage/PlayerPageLayout.tsx"],"names":["jsxs","Card","jsx","CardContent","Typography","useState","CardHeader"],"mappings":"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","file":"ProfilePage.mjs","sourcesContent":["\"use client\";\r\n\r\nimport React from \"react\";\r\nimport { Card, CardContent, Typography } from \"@mui/material\";\r\n\r\nexport type PlayerDetailsProps = {\r\n preferredPronouns: string | null;\r\n age: number | null;\r\n yearsPlaying: number | null;\r\n discordUsername: string | null;\r\n preferredGames: string[] | string | null;\r\n};\r\n\r\nconst PlayerDetailsCard: React.FC<PlayerDetailsProps> = ({\r\n preferredPronouns,\r\n age,\r\n yearsPlaying,\r\n discordUsername,\r\n preferredGames,\r\n}) => {\r\n return (\r\n <Card\r\n sx={{\r\n margin: \"1rem\",\r\n background: \"linear-gradient(135deg, rgba(25, 118, 210, 0.8), rgba(25, 118, 210, 1))\", // Primary Blue Gradient\r\n boxShadow: \"0px 8px 15px rgba(25, 118, 210, 0.3)\", // Deep shadow based on the color\r\n borderRadius: \"12px\", // Rounded corners\r\n color: \"#FFFFFF\", // White as the base text color for contrast\r\n position: \"relative\",\r\n overflow: \"hidden\", // Ensures clean edges\r\n }}\r\n className=\"transition duration-300 transform hover:scale-105 hover:shadow-2xl\"\r\n >\r\n {/* Decorative Overlay */}\r\n <div\r\n className=\"absolute inset-0 bg-gradient-to-t from-white/10 to-transparent opacity-60\"\r\n aria-hidden=\"true\"\r\n ></div>\r\n\r\n <CardContent className=\"relative p-6\">\r\n {/* Title */}\r\n <Typography\r\n variant=\"h5\"\r\n className=\"font-bold uppercase text-center tracking-wide mb-4\"\r\n sx={{\r\n color: \"#FFFFFF\", // Bright white for high contrast\r\n textShadow: \"0px 4px 8px rgba(0, 0, 0, 0.5)\", // Stronger shadow for bold presence\r\n fontSize: \"1.5rem\", // Slightly larger title size\r\n }}\r\n >\r\n Player Details\r\n </Typography>\r\n\r\n {/* Details Section */}\r\n <div className=\"space-y-3\">\r\n {preferredPronouns && (\r\n <Typography\r\n variant=\"body2\"\r\n className=\"text-sm font-medium\"\r\n sx={{\r\n color: \"#FFFFFF\",\r\n textShadow: \"0px 2px 6px rgba(0, 0, 0, 0.5)\",\r\n fontWeight: \"bold\",\r\n }}\r\n >\r\n <span className=\"font-extrabold text-cyan-300\">Preferred Pronouns:</span> {preferredPronouns}\r\n </Typography>\r\n )}\r\n {age !== null && (\r\n <Typography\r\n variant=\"body2\"\r\n className=\"text-sm font-medium\"\r\n sx={{\r\n color: \"#FFFFFF\",\r\n textShadow: \"0px 2px 6px rgba(0, 0, 0, 0.5)\",\r\n fontWeight: \"bold\",\r\n }}\r\n >\r\n <span className=\"font-extrabold text-cyan-300\">Age:</span> {age}\r\n </Typography>\r\n )}\r\n {yearsPlaying !== null && (\r\n <Typography\r\n variant=\"body2\"\r\n className=\"text-sm font-medium\"\r\n sx={{\r\n color: \"#FFFFFF\",\r\n textShadow: \"0px 2px 6px rgba(0, 0, 0, 0.5)\",\r\n fontWeight: \"bold\",\r\n }}\r\n >\r\n <span className=\"font-extrabold text-cyan-300\">Years Playing:</span> {yearsPlaying}\r\n </Typography>\r\n )}\r\n {discordUsername && (\r\n <Typography\r\n variant=\"body2\"\r\n className=\"text-sm font-medium\"\r\n sx={{\r\n color: \"#FFFFFF\",\r\n textShadow: \"0px 2px 6px rgba(0, 0, 0, 0.5)\",\r\n fontWeight: \"bold\",\r\n }}\r\n >\r\n <span className=\"font-extrabold text-cyan-300\">Discord Username:</span> {discordUsername}\r\n </Typography>\r\n )}\r\n {preferredGames && (\r\n <Typography\r\n variant=\"body2\"\r\n className=\"text-sm font-medium\"\r\n sx={{\r\n color: \"#FFFFFF\",\r\n textShadow: \"0px 2px 6px rgba(0, 0, 0, 0.5)\",\r\n fontWeight: \"bold\",\r\n }}\r\n >\r\n <span className=\"font-extrabold text-cyan-300\">Preferred Games:</span>{\" \"}\r\n {Array.isArray(preferredGames) ? preferredGames.join(\", \") : preferredGames}\r\n </Typography>\r\n )}\r\n </div>\r\n\r\n {/* Footer Section */}\r\n <div className=\"mt-6 text-center\">\r\n <Typography\r\n variant=\"caption\"\r\n className=\"text-xs italic\"\r\n sx={{\r\n color: \"#BBDEFB\", // Subtle light blue for footer text\r\n textShadow: \"0px 1px 3px rgba(0, 0, 0, 0.2)\",\r\n }}\r\n >\r\n All information is player-submitted.\r\n </Typography>\r\n </div>\r\n </CardContent>\r\n </Card>\r\n );\r\n};\r\n\r\nexport default PlayerDetailsCard;\r\n\r\n","export function BlurbTitles() {\r\n const blurbTitles = new Map();\r\n blurbTitles.set(1, \"What’s your most epic tabletop moment?\");\r\n blurbTitles.set(2, \"What type of character do you dream of playing?\");\r\n blurbTitles.set(3, \"What kind of story are you most excited to be part of?\");\r\n blurbTitles.set(4, \"Which tabletop world would you want to live in?\");\r\n blurbTitles.set(5, \"If you could only play one tabletop game forever, what would it be?\");\r\n blurbTitles.set(6, \"What’s a fantasy or sci-fi world you love and would want to game in?\");\r\n blurbTitles.set(7, \"Who’s the most chaotic (or hilarious) player you've ever gamed with?\");\r\n blurbTitles.set(8, \"What motivates you to join a tabletop game: adventure, laughs, or something else?\");\r\n blurbTitles.set(9, \"What’s your weirdest in-game flex?\");\r\n blurbTitles.set(10, \"Which class or archetype are you drawn to—fighter, mage, rogue, healer, or wildcard?\");\r\n blurbTitles.set(11, \"What character did you have the most fun playing?\");\r\n blurbTitles.set(12, \"What kind of player are you: Min-maxer, storyteller, or chaos incarnate?\");\r\n blurbTitles.set(13, \"Describe the best campaign twist you’ve ever experienced.\");\r\n blurbTitles.set(14, \"What’s your guilty pleasure when it comes to character archetypes?\");\r\n blurbTitles.set(15, \"Who’s your favorite villain or antagonist you’ve faced in a campaign?\");\r\n blurbTitles.set(16, \"What’s the hardest decision your character ever had to make?\");\r\n blurbTitles.set(17, \"What’s the funniest tabletop memory you’ve ever had?\");\r\n blurbTitles.set(18, \"Ever had a tabletop game go completely off the rails? What happened?\");\r\n blurbTitles.set(19, \"Introduce us to your favorite homebrew rule!\");\r\n blurbTitles.set(20, \"What’s your favorite dice-rolling ritual or superstition?\");\r\n blurbTitles.set(21, \"What’s your go-to tabletop snack during sessions?\");\r\n blurbTitles.set(22, \"What’s the most creative solution you’ve ever come up with in a game?\");\r\n blurbTitles.set(23, \"What NPC or character from a campaign would you date IRL?\");\r\n blurbTitles.set(24, \"What’s your favorite tabletop rule or mechanic?\");\r\n blurbTitles.set(25, \"What’s the most emotional tabletop moment you’ve had?\");\r\n blurbTitles.set(26, \"What kind of story twist or epic moment would make you fall in love with the game?\");\r\n blurbTitles.set(27, \"What’s the most challenging yet rewarding NPC you've ever created?\");\r\n blurbTitles.set(28, \"How do you keep players on track without railroading your game?\");\r\n blurbTitles.set(29, \"What’s the most unexpected way your players solved a problem you designed?\");\r\n blurbTitles.set(30, \"What’s your favorite resource or tool for planning campaigns?\");\r\n blurbTitles.set(31, \"What’s the funniest way your players have broken your carefully-planned encounter?\");\r\n blurbTitles.set(32, \"What’s the most memorable villain or antagonist you’ve created?\");\r\n blurbTitles.set(33, \"How do you handle player conflict in your campaigns?\");\r\n blurbTitles.set(34, \"What’s your favorite homebrew rule to spice up your campaigns?\");\r\n blurbTitles.set(35, \"Have you ever scrapped a planned session because of something your players did?\");\r\n blurbTitles.set(36, \"What’s the most creative environment or setting you’ve designed for your players?\");\r\n\r\n return blurbTitles;\r\n}\r\n\r\nexport function PrivacyValues() {\r\n const privacyValues = new Map();\r\n privacyValues.set(1, \"private\");\r\n privacyValues.set(\"private\", 1);\r\n\r\n privacyValues.set(2, \"connection\");\r\n privacyValues.set(\"connection\",2);\r\n\r\n privacyValues.set(3, \"public\");\r\n privacyValues.set(\"public\", 3);\r\n\r\n privacyValues.set(4, \"table\");\r\n privacyValues.set(\"table\", 4);\r\n\r\n return privacyValues;\r\n}\r\n\r\nexport function PlayerTagLabels(): string[] {\r\n const tagTitles: string[] = [];\r\n\r\n tagTitles.push(\"girl gamer\");\r\n tagTitles.push(\"veteran\");\r\n tagTitles.push(\"new\");\r\n tagTitles.push(\"min-maxer\");\r\n tagTitles.push(\"role-player\");\r\n tagTitles.push(\"rules lawyer\");\r\n tagTitles.push(\"storyteller\");\r\n tagTitles.push(\"chaotic\");\r\n tagTitles.push(\"planner\");\r\n tagTitles.push(\"wildcard\");\r\n tagTitles.push(\"protector\");\r\n tagTitles.push(\"rogue-like\");\r\n tagTitles.push(\"power gamer\");\r\n tagTitles.push(\"thinker\");\r\n tagTitles.push(\"narrative\");\r\n tagTitles.push(\"homebrewer\");\r\n tagTitles.push(\"dungeon master\");\r\n tagTitles.push(\"world builder\");\r\n tagTitles.push(\"solver\");\r\n tagTitles.push(\"strategist\");\r\n tagTitles.push(\"dice lover\");\r\n tagTitles.push(\"performer\");\r\n tagTitles.push(\"casual\");\r\n tagTitles.push(\"character-focused\");\r\n tagTitles.push(\"team player\");\r\n tagTitles.push(\"mechanics\");\r\n tagTitles.push(\"adventurer\");\r\n tagTitles.push(\"collector\");\r\n tagTitles.push(\"problem solver\");\r\n tagTitles.push(\"innovator\");\r\n tagTitles.push(\"lorekeeper\");\r\n tagTitles.push(\"rule bender\");\r\n tagTitles.push(\"sandboxer\");\r\n tagTitles.push(\"cartographer\");\r\n tagTitles.push(\"loyalist\");\r\n tagTitles.push(\"wrangler\");\r\n tagTitles.push(\"moment maker\");\r\n tagTitles.push(\"jinxed roller\");\r\n tagTitles.push(\"lucky roller\");\r\n tagTitles.push(\"meticulous\");\r\n tagTitles.push(\"improviser\");\r\n tagTitles.push(\"tactician\");\r\n tagTitles.push(\"butterfly\");\r\n tagTitles.push(\"beginner\");\r\n tagTitles.push(\"voice actor\");\r\n tagTitles.push(\"multi-campaign\");\r\n tagTitles.push(\"starter\");\r\n tagTitles.push(\"forever DM\");\r\n tagTitles.push(\"finisher\");\r\n tagTitles.push(\"swapper\");\r\n tagTitles.push(\"meta-gamer\");\r\n tagTitles.push(\"specialist\");\r\n\r\n return tagTitles;\r\n}\r\n\r\n\r\nexport const FantasyNouns = [\r\n // Core D&D Classes\r\n \"Fighter\", \"Rogue\", \"Wizard\", \"Cleric\", \"Paladin\", \"Barbarian\", \"Ranger\", \"Sorcerer\", \"Bard\", \"Monk\", \"Warlock\", \"Druid\", \"Artificer\",\r\n\r\n // Fantasy Occupations\r\n \"Alchemist\", \"Blacksmith\", \"Knight\", \"Mage\", \"Mercenary\", \"Archer\", \"Scribe\", \"Healer\", \"Hunter\", \"Assassin\", \"Enchanter\",\r\n \"Miner\", \"Sailor\", \"Merchant\", \"Herbalist\", \"Cartographer\", \"Tailor\", \"Innkeeper\", \"Cook\", \"Scholar\",\r\n\r\n // Archetypes\r\n \"Adventurer\", \"Champion\", \"Warlord\", \"Outlaw\", \"Pilgrim\", \"Prophet\", \"Necromancer\", \"Witch\", \"Shaman\",\r\n \"Beastmaster\", \"Acolyte\", \"Spellblade\", \"Battlemage\", \"Blademaster\", \"Warpriest\", \"Berserker\", \"Elementalist\",\r\n\r\n // Fantasy Creatures/Beings\r\n \"Dragon\", \"Elf\", \"Dwarf\", \"Orc\", \"Goblin\", \"Gnome\", \"Tiefling\", \"Genasi\", \"Halfling\", \"Lich\", \"Vampire\", \"Werewolf\",\r\n \"Demon\", \"Angel\", \"Pixie\", \"Dryad\", \"Centaur\", \"Chimera\", \"Golem\", \"Fairy\", \"Troll\", \"Minotaur\", \"Kraken\",\r\n \"Griffin\", \"Phoenix\",\r\n\r\n // Fantasy Roles/Titles\r\n \"Archmage\", \"High Priestess\", \"King\", \"Queen\", \"Duke\", \"Duchess\", \"Emperor\", \"Empress\", \"Captain\", \"Seer\", \"Oracle\",\r\n \"Warden\", \"Guardian\", \"Watchman\", \"Hero\", \"Villain\", \"Herald\", \"Scout\", \"Envoy\",\r\n\r\n // Other Fantasy-Themed Nouns\r\n \"Spellcaster\", \"Summoner\", \"Conjurer\", \"Warrior\", \"Gladiator\", \"Pathfinder\", \"Explorer\", \"Tinkerer\", \"Shadowblade\",\r\n \"Dungeoneer\", \"Archon\", \"Mystic\", \"Sage\", \"Runemaster\", \"Smith\", \"Wanderer\", \"Wayfarer\", \"Avenger\", \"Defender\", \"Keeper\"\r\n];\r\n\r\nexport const FantasyAdjectives = [\r\n // Descriptive of Power/Strength\r\n \"Mighty\", \"Powerful\", \"Fierce\", \"Tough\", \"Armored\", \"Indomitable\", \"Savage\", \"Vengeful\", \"Heroic\", \"Valiant\",\r\n\r\n // Magical Features\r\n \"Enchanted\", \"Bewitched\", \"Magical\", \"Mystical\", \"Ethereal\", \"Arcane\", \"Spellbound\", \"Supernatural\", \"Runed\",\r\n\r\n // Personality/Appearance Traits\r\n \"Noble\", \"Gallant\", \"Cunning\", \"Crafty\", \"Shadowy\", \"Elegant\", \"Wise\", \"Shrewd\", \"Merciless\", \"Serene\",\r\n \"Infernal\", \"Wicked\", \"Pious\", \"Charming\", \"Loyal\", \"Treacherous\", \"Bold\", \"Cowardly\", \"Sly\",\r\n\r\n // Environment-Themed\r\n \"Cursed\", \"Blessed\", \"Haunted\", \"Frozen\", \"Burning\", \"Fiery\", \"Icy\", \"Stormy\", \"Sunlit\", \"Moonlit\",\r\n \"Dark\", \"Luminous\", \"Glistening\", \"Ancient\", \"Shattered\", \"Sacred\", \"Forbidden\", \"Hidden\", \"Lost\",\r\n \"Verdant\", \"Barren\",\r\n\r\n // Monster/Creature Traits\r\n \"Ferocious\", \"Ravenous\", \"Menacing\", \"Grotesque\", \"Spiked\", \"Scaled\", \"Hulking\", \"Winged\", \"Fanged\", \"Horned\",\r\n \"Tentacled\", \"Shapeshifting\",\r\n\r\n // Mystical/Abstract Traits\r\n \"Immortal\", \"Mythical\", \"Omniscient\", \"Unbreakable\",\r\n \"Unfathomable\", \"Celestial\", \"Void\", \"Otherworldly\", \"Primordial\",\r\n\r\n // Precious/Gleaming Adjectives\r\n \"Golden\", \"Silver\", \"Crystalline\", \"Diamond\", \"Jeweled\", \"Sapphire\", \"Emerald\", \"Shimmering\", \"Gleaming\", \"Radiant\",\r\n\r\n // Combat-Related Traits\r\n \"Bloodstained\", \"Battleworn\", \"Unyielding\", \"Victorious\", \"Deadly\", \"Sharp\", \"Piercing\", \"Relentless\", \"Untouchable\",\r\n\r\n // Nature-Themed\r\n \"Whispering\", \"Thorned\", \"Blossoming\", \"Blooming\", \"Overgrown\", \"Howling\", \"Cracked\", \"Twisted\", \"Mossy\", \"Winding\",\r\n \"Towering\", \"Rooted\",\r\n\r\n // Emotional/Thematic Descriptors\r\n \"Free\", \"Courageous\", \"Reckless\", \"Damned\", \"Lonely\", \"Heartless\", \"Driven\", \"Hopeful\",\r\n \"Fateful\"\r\n];\r\n\r\nexport const FantasyQualifiers = [\r\n // Describing Uniqueness or Origins\r\n \"Original\", \"Prime\", \"Primal\", \"Archetypal\", \"Ancestral\", \"Legendary\", \"Foremost\",\r\n\r\n // Describing Finality or Completion\r\n \"Final\", \"Ultimate\", \"Absolute\", \"Conclusive\", \"Eternal\", \"Enduring\", \"Definitive\",\r\n\r\n // Describing Supremacy or Greatness\r\n \"Supreme\", \"Paramount\", \"Preeminent\", \"Pinnacle\", \"Peerless\", \"Unrivaled\", \"Sovereign\", \"Dominant\",\r\n\r\n // Describing Perfection or Excellence\r\n \"Flawless\", \"Perfect\", \"Divine\", \"Exalted\", \"Transcendent\", \"Matchless\", \"Incomparable\",\r\n\r\n // Describing Eternity or Timelessness\r\n \"Timeless\", \"Boundless\", \"Ageless\", \"Perpetual\", \"Infinite\", \"Everlasting\",\r\n\r\n // Describing Power or Authority\r\n \"Omnipotent\", \"Almighty\", \"Unassailable\", \"Overwhelming\", \"Irresistible\", \"Unconquerable\", \"Majestic\"\r\n];\r\n\r\nexport const generateUsername = () => {\r\n let output = \"\"\r\n\r\n output+= getRandomElement(FantasyQualifiers)\r\n output+= getRandomElement(FantasyAdjectives)\r\n output+= getRandomElement(FantasyNouns)\r\n\r\n return output;\r\n}\r\n\r\nexport const ProfilePictureSettings = {\r\n aspectRatio: 4/5,\r\n minWidth: 400,\r\n}\r\n\r\nconst getRandomElement = (array: string[]) => {\r\n return array[Math.floor(Math.random() * array.length)];\r\n}\r\n\r\n","\"use client\";\r\n\r\nimport React, { useState, useEffect } from \"react\";\r\nimport { Card, CardMedia, CardContent, Typography } from \"@mui/material\";\r\nimport { ProfilePictureSettings } from \"@/data/values\";\r\n\r\nexport type PlayerDisplayProps = {\r\n profilePicture: string | null;\r\n username: string;\r\n bio: string | null;\r\n preferredPronouns: string | null;\r\n};\r\n\r\nconst PlayerDisplayCard: React.FC<PlayerDisplayProps> = ({ profilePicture, username, bio, preferredPronouns }) => {\r\n const defaultImg = \"/man-walking-silhouette-clipart.jpg\";\r\n const [imageSrc, setImageSrc] = useState<string>(defaultImg);\r\n const { aspectRatio } = ProfilePictureSettings;\r\n\r\n useEffect(() => {\r\n async function validateImage() {\r\n const newImage = profilePicture || defaultImg;\r\n if (!profilePicture) {\r\n setImageSrc(defaultImg);\r\n return;\r\n }\r\n\r\n const img = new Image();\r\n img.src = newImage;\r\n\r\n img.onload = () => {\r\n setImageSrc(newImage);\r\n };\r\n\r\n img.onerror = () => {\r\n setImageSrc(defaultImg);\r\n };\r\n }\r\n\r\n validateImage();\r\n }, [profilePicture]);\r\n\r\n return (\r\n <Card\r\n sx={{\r\n margin: \"1rem\",\r\n background: \"linear-gradient(135deg, rgba(25, 118, 210, 0.8), rgba(25, 118, 210, 1))\", // Vibrant blue gradient\r\n boxShadow: \"0px 8px 15px rgba(25, 118, 210, 0.3)\", // Blue shadow to add depth\r\n borderRadius: \"12px\", // Smooth rounded corners\r\n color: \"#FFFFFF\", // White text for high contrast\r\n overflow: \"hidden\", // Clean edges\r\n }}\r\n className=\"transition duration-300 transform hover:scale-105 hover:shadow-2xl\"\r\n >\r\n {/* Image Section */}\r\n <CardMedia\r\n component=\"img\"\r\n image={imageSrc}\r\n alt={`${username}'s Profile Picture`}\r\n sx={{\r\n aspectRatio: aspectRatio,\r\n height: \"auto\", // Updates to maintain aspect ratio and fill space nicely\r\n width: \"100%\",\r\n objectFit: \"cover\",\r\n }}\r\n />\r\n\r\n <CardContent className=\"relative p-6\">\r\n {/* Username */}\r\n <Typography\r\n variant=\"h5\"\r\n component=\"div\"\r\n className=\"font-bold text-lg uppercase text-center tracking-wide mb-2\"\r\n sx={{\r\n color: \"#FFFFFF\", // Pure white for username\r\n fontSize: \"1.5rem\",\r\n textShadow: \"0px 3px 6px rgba(0, 0, 0, 0.5)\", // Strong shadow for visibility\r\n }}\r\n >\r\n {username}\r\n </Typography>\r\n\r\n {/* Preferred Pronouns */}\r\n {preferredPronouns && (\r\n <Typography\r\n variant=\"body2\"\r\n className=\"text-sm font-medium\"\r\n sx={{\r\n color: \"#E3F2FD\",\r\n textShadow: \"0px 2px 4px rgba(0, 0, 0, 0.3)\", // Subtle shadow for readability\r\n fontWeight: \"bold\", // Emphasize key details\r\n marginBottom: \"1rem\",\r\n }}\r\n >\r\n {preferredPronouns}\r\n </Typography>\r\n )}\r\n\r\n {/* Bio */}\r\n {bio && (\r\n <Typography\r\n variant=\"body2\"\r\n className=\"text-sm font-light\"\r\n sx={{\r\n color: \"#E3F2FD\", // Softer muted tone for secondary text\r\n textShadow: \"0px 2px 4px rgba(0, 0, 0, 0.3)\", // Subtle shadow for readability\r\n fontStyle: \"italic\", // Distinguish bio visually\r\n }}\r\n >\r\n {bio}\r\n </Typography>\r\n )}\r\n </CardContent>\r\n </Card>\r\n );\r\n};\r\n\r\nexport default PlayerDisplayCard;\r\n\r\n\r\n\r\n\r\n\r\n\r\n","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 { Card, CardContent, CardHeader } from \"@mui/material\";\r\nimport { Tag } from \"@/types/tag\";\r\nimport Chip from \"@/components/shared/Chip\";\r\n\r\nexport type PlayerTagsCardProps = {\r\n tags: Tag[];\r\n};\r\n\r\nconst PlayerTagsCard: React.FC<PlayerTagsCardProps> = ({ tags = [] }) => {\r\n return (\r\n <Card sx={{\r\n margin: \"1rem\",\r\n borderRadius: \"12px\",\r\n boxShadow: \"0px 8px 15px rgba(25, 118, 210, 0.3)\",\r\n overflow: \"hidden\"\r\n }} className=\"transition duration-300 transform hover:scale-105 hover:shadow-2xl\">\r\n <CardHeader\r\n title=\"Player Tags\"\r\n sx={{\r\n background: \"linear-gradient(135deg, rgba(25, 118, 210, 0.8), rgba(25, 118, 210, 1))\",\r\n color: \"#FFFFFF\",\r\n fontSize: \"1.5rem\",\r\n textShadow: \"0px 3px 6px rgba(0, 0, 0, 0.5)\",\r\n '& .MuiCardHeader-title': {\r\n fontWeight: \"bold\",\r\n fontSize: \"1.5rem\",\r\n textAlign: \"center\",\r\n textTransform: \"uppercase\",\r\n letterSpacing: \"0.05em\"\r\n }\r\n }}\r\n />\r\n <CardContent className=\"p-6\">\r\n <div className=\"flex flex-wrap gap-2\">\r\n {tags.map((tag) => (\r\n <Chip key={tag.id} tag={tag} />\r\n ))}\r\n </div>\r\n </CardContent>\r\n </Card>\r\n );\r\n};\r\n\r\nexport default PlayerTagsCard;","\"use client\";\r\n\r\nimport React from \"react\";\r\nimport { Card, CardContent, Typography } from \"@mui/material\";\r\n\r\nexport type PlayerPromptCardProps = {\r\n title: string | null;\r\n description: string | null;\r\n};\r\n\r\nconst PlayerPromptCard: React.FC<PlayerPromptCardProps> = ({ title, description }) => (\r\n <Card\r\n sx={{\r\n margin: \"1rem\",\r\n background: \"linear-gradient(135deg, rgba(25, 118, 210, 0.8), rgba(25, 118, 210, 1))\", // Gradient color scheme\r\n boxShadow: \"0px 8px 15px rgba(25, 118, 210, 0.3)\", // Card shadow\r\n borderRadius: \"12px\", // Rounded corners\r\n color: \"#FFFFFF\", // Text contrast with the background\r\n overflow: \"hidden\", // Keeps consistent and clean card shape\r\n }}\r\n className=\"transition duration-300 transform hover:scale-105 hover:shadow-2xl\"\r\n >\r\n <CardContent className=\"p-6\">\r\n {/* Title */}\r\n {title && (\r\n <Typography\r\n variant=\"h5\"\r\n className=\"font-bold text-lg uppercase text-center tracking-wide mb-4\"\r\n sx={{\r\n color: \"#FFFFFF\", // Bright white for high visibility\r\n textShadow: \"0px 3px 6px rgba(0, 0, 0, 0.5)\", // Strong text shadow for contrast\r\n fontSize: \"1.5rem\",\r\n }}\r\n >\r\n {title}\r\n </Typography>\r\n )}\r\n\r\n {/* Description */}\r\n {description && (\r\n <Typography\r\n variant=\"body2\"\r\n className=\"text-sm font-medium text-center\"\r\n sx={{\r\n color: \"#E3F2FD\", // Softer light blue for description\r\n textShadow: \"0px 2px 4px rgba(0, 0, 0, 0.3)\", // Subtle shadow\r\n lineHeight: 1.6,\r\n marginTop: \"1rem\",\r\n }}\r\n >\r\n {description}\r\n </Typography>\r\n )}\r\n </CardContent>\r\n </Card>\r\n);\r\n\r\nexport default PlayerPromptCard;\r\n\r\n","\"use client\";\r\n\r\nimport React, { useMemo, useState } from \"react\";\r\nimport Autocomplete from \"@mui/material/Autocomplete\";\r\nimport { Card, CardContent, CardHeader, TextField } from \"@mui/material\";\r\nimport Popper, { PopperProps } from \"@mui/material/Popper\";\r\nimport { Tag } from \"@/types/tag\";\r\nimport Chip from \"@/components/shared/Chip\";\r\n\r\nexport interface PlayerTagsEditProps {\r\n selectedTags: Tag[];\r\n possibleTags: Tag[];\r\n onToggleTag: (id: number) => void;\r\n}\r\n\r\nconst PlayerTagsEdit: React.FC<PlayerTagsEditProps> = ({\r\n selectedTags = [],\r\n possibleTags = [],\r\n onToggleTag,\r\n}) => {\r\n const [inputValue, setInputValue] = useState(\"\");\r\n const selectedIds = useMemo(() => selectedTags.map((tag) => tag.id), [selectedTags]);\r\n\r\n const options = useMemo(\r\n () => possibleTags.map((tag) => ({ value: tag.id, label: tag.label, alternate_title: tag.alternate_title })),\r\n [possibleTags]\r\n );\r\n\r\n return (\r\n <Card sx={{\r\n margin: \"1rem\",\r\n borderRadius: \"12px\",\r\n boxShadow: \"0px 8px 15px rgba(25, 118, 210, 0.3)\",\r\n overflow: \"hidden\"\r\n }}>\r\n <CardHeader \r\n title=\"Player Tags\" \r\n sx={{\r\n background: \"linear-gradient(135deg, rgba(25, 118, 210, 0.8), rgba(25, 118, 210, 1))\",\r\n color: \"#FFFFFF\",\r\n fontSize: \"1.5rem\",\r\n textShadow: \"0px 3px 6px rgba(0, 0, 0, 0.5)\",\r\n '& .MuiCardHeader-title': {\r\n fontWeight: \"bold\",\r\n fontSize: \"1.5rem\",\r\n textAlign: \"center\",\r\n textTransform: \"uppercase\",\r\n letterSpacing: \"0.05em\"\r\n }\r\n }}\r\n />\r\n <CardContent className=\"p-6\">\r\n <div className=\"flex flex-wrap gap-2 mb-4\">\r\n {selectedTags.map((tag) => (\r\n <Chip\r\n key={tag.id}\r\n tag={tag}\r\n removeCallback={() => onToggleTag(tag.id)}\r\n />\r\n ))}\r\n </div>\r\n <Autocomplete\r\n key={selectedIds.join(\"-\")}\r\n options={options}\r\n filterOptions={(availableOptions, state) => {\r\n const query = state.inputValue.toLowerCase();\r\n return availableOptions\r\n .filter(\r\n (option) =>\r\n !selectedIds.includes(option.value) &&\r\n (option.label.toLowerCase().includes(query) ||\r\n option.alternate_title?.some((title) => title.toLowerCase().includes(query)))\r\n )\r\n .slice(0, 5);\r\n }}\r\n value={null}\r\n inputValue={inputValue}\r\n onInputChange={(event, newInputValue) => {\r\n if (event && event.type === \"change\") {\r\n setInputValue(newInputValue);\r\n }\r\n }}\r\n onChange={(event, newValue) => {\r\n if (newValue) {\r\n onToggleTag(newValue.value);\r\n }\r\n setInputValue(\"\");\r\n }}\r\n slots={{ popper: CustomPopper }}\r\n renderInput={(params) => (\r\n <TextField\r\n {...params}\r\n label=\"Select Tags\"\r\n variant=\"outlined\"\r\n />\r\n )}\r\n />\r\n </CardContent>\r\n </Card>\r\n );\r\n};\r\n\r\nconst CustomPopper = (props: PopperProps) => {\r\n return (\r\n <Popper\r\n {...props}\r\n modifiers={[\r\n {\r\n name: \"preventOverflow\",\r\n options: {\r\n boundary: \"viewport\",\r\n },\r\n },\r\n {\r\n name: \"offset\",\r\n options: {\r\n offset: [0, -10],\r\n },\r\n },\r\n ]}\r\n placement=\"top-start\"\r\n />\r\n );\r\n};\r\n\r\nexport default PlayerTagsEdit;\r\n","\"use client\";\r\n\r\nimport React from \"react\";\r\nimport { Grid, Box, useMediaQuery, useTheme, NoSsr } from \"@mui/material\";\r\nimport PlayerDisplayCard, { PlayerDisplayProps } from \"./PlayerDisplayCard\";\r\nimport PlayerDetailsCard, { PlayerDetailsProps } from \"./PlayerDetailsCard\";\r\nimport PlayerTagsCard from \"./PlayerTagsCard\";\r\nimport PlayerPromptCard, { PlayerPromptCardProps } from \"./PlayerPromptCard\";\r\nimport PlayerTagsEdit from \"./PlayerTagsEdit\";\r\nimport { Tag } from \"@/types/tag\";\r\n\r\nexport type PlayerPageLayoutProps = {\r\n playerData: PlayerDisplayProps & PlayerDetailsProps;\r\n tags: Tag[];\r\n blurbs: PlayerPromptCardProps[];\r\n isOwner?: boolean;\r\n possibleTags?: Tag[];\r\n onToggleTag?: (tagId: number) => void;\r\n};\r\n\r\nexport default function PlayerPageLayout({\r\n playerData,\r\n tags = [],\r\n blurbs = [],\r\n isOwner = false,\r\n possibleTags = [],\r\n onToggleTag = () => {},\r\n}: PlayerPageLayoutProps) {\r\n const theme = useTheme();\r\n const isSmallScreen = useMediaQuery(theme.breakpoints.down(\"lg\"));\r\n\r\n const tagsElement = isOwner ? (\r\n <PlayerTagsEdit\r\n selectedTags={tags}\r\n possibleTags={possibleTags}\r\n onToggleTag={onToggleTag}\r\n />\r\n ) : (\r\n <PlayerTagsCard tags={tags} />\r\n );\r\n\r\n return (\r\n <NoSsr>\r\n <Box sx={{ padding: \"2rem\", marginRight: \"auto\", marginLeft: \"auto\" }} justifyContent=\"center\">\r\n <Grid container spacing={3} justifyContent=\"center\" sx={{ marginRight: \"auto\", marginLeft: \"auto\" }}>\r\n {/* Left Lane: PlayerDetails and Tags (only on large screens) */}\r\n {!isSmallScreen && (\r\n <Grid size={{ xs: 12, lg: 3 }}>\r\n <PlayerDetailsCard\r\n preferredPronouns={playerData.preferredPronouns}\r\n age={playerData.age}\r\n yearsPlaying={playerData.yearsPlaying}\r\n discordUsername={playerData.discordUsername}\r\n preferredGames={playerData.preferredGames}\r\n />\r\n {tagsElement}\r\n </Grid>\r\n )}\r\n\r\n {/* Right Side: All other cards */}\r\n <Grid size={{ xs: 12, lg: 6 }}>\r\n <Grid container spacing={3}>\r\n {/* PlayerDisplay Card */}\r\n <Grid size={{ xs: 12, lg: 8 }}>\r\n <PlayerDisplayCard\r\n profilePicture={playerData.profilePicture}\r\n username={playerData.username}\r\n bio={playerData.bio}\r\n preferredPronouns={playerData.preferredPronouns}\r\n />\r\n </Grid>\r\n\r\n {/* Render DetailsCard in small screens */}\r\n {isSmallScreen && (\r\n <Grid size={{ xs: 12, lg: 3 }}>\r\n <PlayerDetailsCard\r\n preferredPronouns={playerData.preferredPronouns}\r\n age={playerData.age}\r\n yearsPlaying={playerData.yearsPlaying}\r\n discordUsername={playerData.discordUsername}\r\n preferredGames={playerData.preferredGames}\r\n />\r\n </Grid>\r\n )}\r\n\r\n {/* PlayerPromptCards */}\r\n {blurbs.map((blurb, index) => (\r\n <Grid size={{ xs: 12, lg: 8 }} key={index}>\r\n <PlayerPromptCard\r\n title={blurb.title}\r\n description={blurb.description}\r\n />\r\n </Grid>\r\n ))}\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n </Box>\r\n </NoSsr>\r\n );\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/PlayerPage/PlayerDetailsCard.tsx","../src/data/values.tsx","../src/components/PlayerPage/PlayerDisplayCard.tsx","../src/components/shared/Chip.tsx","../src/components/PlayerPage/PlayerTagsCard.tsx","../src/components/PlayerPage/PlayerPromptCard.tsx","../src/components/PlayerPage/PlayerTagsEdit.tsx","../src/components/PlayerPage/PlayerPageLayout.tsx"],"names":["jsxs","Card","jsx","CardContent","Typography","useState","CardHeader"],"mappings":"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","file":"ProfilePage.mjs","sourcesContent":["\"use client\";\r\n\r\nimport React from \"react\";\r\nimport { Card, CardContent, Typography } from \"@mui/material\";\r\n\r\nexport type PlayerDetailsProps = {\r\n preferredPronouns: string | null;\r\n age: number | null;\r\n yearsPlaying: number | null;\r\n discordUsername: string | null;\r\n preferredGames: string[] | string | null;\r\n};\r\n\r\nconst PlayerDetailsCard: React.FC<PlayerDetailsProps> = ({\r\n preferredPronouns,\r\n age,\r\n yearsPlaying,\r\n discordUsername,\r\n preferredGames,\r\n}) => {\r\n return (\r\n <Card\r\n sx={{\r\n margin: \"1rem\",\r\n background: \"linear-gradient(135deg, rgba(25, 118, 210, 0.8), rgba(25, 118, 210, 1))\", // Primary Blue Gradient\r\n boxShadow: \"0px 8px 15px rgba(25, 118, 210, 0.3)\", // Deep shadow based on the color\r\n borderRadius: \"12px\", // Rounded corners\r\n color: \"#FFFFFF\", // White as the base text color for contrast\r\n position: \"relative\",\r\n overflow: \"hidden\", // Ensures clean edges\r\n }}\r\n className=\"transition duration-300 transform hover:scale-105 hover:shadow-2xl\"\r\n >\r\n {/* Decorative Overlay */}\r\n <div\r\n className=\"absolute inset-0 bg-gradient-to-t from-white/10 to-transparent opacity-60\"\r\n aria-hidden=\"true\"\r\n ></div>\r\n\r\n <CardContent className=\"relative p-6\">\r\n {/* Title */}\r\n <Typography\r\n variant=\"h5\"\r\n className=\"font-bold uppercase text-center tracking-wide mb-4\"\r\n sx={{\r\n color: \"#FFFFFF\", // Bright white for high contrast\r\n textShadow: \"0px 4px 8px rgba(0, 0, 0, 0.5)\", // Stronger shadow for bold presence\r\n fontSize: \"1.5rem\", // Slightly larger title size\r\n }}\r\n >\r\n Player Details\r\n </Typography>\r\n\r\n {/* Details Section */}\r\n <div className=\"space-y-3\">\r\n {preferredPronouns && (\r\n <Typography\r\n variant=\"body2\"\r\n className=\"text-sm font-medium\"\r\n sx={{\r\n color: \"#FFFFFF\",\r\n textShadow: \"0px 2px 6px rgba(0, 0, 0, 0.5)\",\r\n fontWeight: \"bold\",\r\n }}\r\n >\r\n <span className=\"font-extrabold text-cyan-300\">Preferred Pronouns:</span> {preferredPronouns}\r\n </Typography>\r\n )}\r\n {age !== null && (\r\n <Typography\r\n variant=\"body2\"\r\n className=\"text-sm font-medium\"\r\n sx={{\r\n color: \"#FFFFFF\",\r\n textShadow: \"0px 2px 6px rgba(0, 0, 0, 0.5)\",\r\n fontWeight: \"bold\",\r\n }}\r\n >\r\n <span className=\"font-extrabold text-cyan-300\">Age:</span> {age}\r\n </Typography>\r\n )}\r\n {yearsPlaying !== null && (\r\n <Typography\r\n variant=\"body2\"\r\n className=\"text-sm font-medium\"\r\n sx={{\r\n color: \"#FFFFFF\",\r\n textShadow: \"0px 2px 6px rgba(0, 0, 0, 0.5)\",\r\n fontWeight: \"bold\",\r\n }}\r\n >\r\n <span className=\"font-extrabold text-cyan-300\">Years Playing:</span> {yearsPlaying}\r\n </Typography>\r\n )}\r\n {discordUsername && (\r\n <Typography\r\n variant=\"body2\"\r\n className=\"text-sm font-medium\"\r\n sx={{\r\n color: \"#FFFFFF\",\r\n textShadow: \"0px 2px 6px rgba(0, 0, 0, 0.5)\",\r\n fontWeight: \"bold\",\r\n }}\r\n >\r\n <span className=\"font-extrabold text-cyan-300\">Discord Username:</span> {discordUsername}\r\n </Typography>\r\n )}\r\n {preferredGames && (\r\n <Typography\r\n variant=\"body2\"\r\n className=\"text-sm font-medium\"\r\n sx={{\r\n color: \"#FFFFFF\",\r\n textShadow: \"0px 2px 6px rgba(0, 0, 0, 0.5)\",\r\n fontWeight: \"bold\",\r\n }}\r\n >\r\n <span className=\"font-extrabold text-cyan-300\">Preferred Games:</span>{\" \"}\r\n {Array.isArray(preferredGames) ? preferredGames.join(\", \") : preferredGames}\r\n </Typography>\r\n )}\r\n </div>\r\n\r\n {/* Footer Section */}\r\n <div className=\"mt-6 text-center\">\r\n <Typography\r\n variant=\"caption\"\r\n className=\"text-xs italic\"\r\n sx={{\r\n color: \"#BBDEFB\", // Subtle light blue for footer text\r\n textShadow: \"0px 1px 3px rgba(0, 0, 0, 0.2)\",\r\n }}\r\n >\r\n All information is player-submitted.\r\n </Typography>\r\n </div>\r\n </CardContent>\r\n </Card>\r\n );\r\n};\r\n\r\nexport default PlayerDetailsCard;\r\n\r\n","export function BlurbTitles() {\r\n const blurbTitles = new Map();\r\n blurbTitles.set(1, \"What’s your most epic tabletop moment?\");\r\n blurbTitles.set(2, \"What type of character do you dream of playing?\");\r\n blurbTitles.set(3, \"What kind of story are you most excited to be part of?\");\r\n blurbTitles.set(4, \"Which tabletop world would you want to live in?\");\r\n blurbTitles.set(5, \"If you could only play one tabletop game forever, what would it be?\");\r\n blurbTitles.set(6, \"What’s a fantasy or sci-fi world you love and would want to game in?\");\r\n blurbTitles.set(7, \"Who’s the most chaotic (or hilarious) player you've ever gamed with?\");\r\n blurbTitles.set(8, \"What motivates you to join a tabletop game: adventure, laughs, or something else?\");\r\n blurbTitles.set(9, \"What’s your weirdest in-game flex?\");\r\n blurbTitles.set(10, \"Which class or archetype are you drawn to—fighter, mage, rogue, healer, or wildcard?\");\r\n blurbTitles.set(11, \"What character did you have the most fun playing?\");\r\n blurbTitles.set(12, \"What kind of player are you: Min-maxer, storyteller, or chaos incarnate?\");\r\n blurbTitles.set(13, \"Describe the best campaign twist you’ve ever experienced.\");\r\n blurbTitles.set(14, \"What’s your guilty pleasure when it comes to character archetypes?\");\r\n blurbTitles.set(15, \"Who’s your favorite villain or antagonist you’ve faced in a campaign?\");\r\n blurbTitles.set(16, \"What’s the hardest decision your character ever had to make?\");\r\n blurbTitles.set(17, \"What’s the funniest tabletop memory you’ve ever had?\");\r\n blurbTitles.set(18, \"Ever had a tabletop game go completely off the rails? What happened?\");\r\n blurbTitles.set(19, \"Introduce us to your favorite homebrew rule!\");\r\n blurbTitles.set(20, \"What’s your favorite dice-rolling ritual or superstition?\");\r\n blurbTitles.set(21, \"What’s your go-to tabletop snack during sessions?\");\r\n blurbTitles.set(22, \"What’s the most creative solution you’ve ever come up with in a game?\");\r\n blurbTitles.set(23, \"What NPC or character from a campaign would you date IRL?\");\r\n blurbTitles.set(24, \"What’s your favorite tabletop rule or mechanic?\");\r\n blurbTitles.set(25, \"What’s the most emotional tabletop moment you’ve had?\");\r\n blurbTitles.set(26, \"What kind of story twist or epic moment would make you fall in love with the game?\");\r\n blurbTitles.set(27, \"What’s the most challenging yet rewarding NPC you've ever created?\");\r\n blurbTitles.set(28, \"How do you keep players on track without railroading your game?\");\r\n blurbTitles.set(29, \"What’s the most unexpected way your players solved a problem you designed?\");\r\n blurbTitles.set(30, \"What’s your favorite resource or tool for planning campaigns?\");\r\n blurbTitles.set(31, \"What’s the funniest way your players have broken your carefully-planned encounter?\");\r\n blurbTitles.set(32, \"What’s the most memorable villain or antagonist you’ve created?\");\r\n blurbTitles.set(33, \"How do you handle player conflict in your campaigns?\");\r\n blurbTitles.set(34, \"What’s your favorite homebrew rule to spice up your campaigns?\");\r\n blurbTitles.set(35, \"Have you ever scrapped a planned session because of something your players did?\");\r\n blurbTitles.set(36, \"What’s the most creative environment or setting you’ve designed for your players?\");\r\n\r\n return blurbTitles;\r\n}\r\n\r\nexport function PrivacyValues() {\r\n const privacyValues = new Map();\r\n privacyValues.set(1, \"private\");\r\n privacyValues.set(\"private\", 1);\r\n\r\n privacyValues.set(2, \"connection\");\r\n privacyValues.set(\"connection\",2);\r\n\r\n privacyValues.set(3, \"public\");\r\n privacyValues.set(\"public\", 3);\r\n\r\n privacyValues.set(4, \"table\");\r\n privacyValues.set(\"table\", 4);\r\n\r\n return privacyValues;\r\n}\r\n\r\nexport function PlayerTagLabels(): string[] {\r\n const tagTitles: string[] = [];\r\n\r\n tagTitles.push(\"girl gamer\");\r\n tagTitles.push(\"veteran\");\r\n tagTitles.push(\"new\");\r\n tagTitles.push(\"min-maxer\");\r\n tagTitles.push(\"role-player\");\r\n tagTitles.push(\"rules lawyer\");\r\n tagTitles.push(\"storyteller\");\r\n tagTitles.push(\"chaotic\");\r\n tagTitles.push(\"planner\");\r\n tagTitles.push(\"wildcard\");\r\n tagTitles.push(\"protector\");\r\n tagTitles.push(\"rogue-like\");\r\n tagTitles.push(\"power gamer\");\r\n tagTitles.push(\"thinker\");\r\n tagTitles.push(\"narrative\");\r\n tagTitles.push(\"homebrewer\");\r\n tagTitles.push(\"dungeon master\");\r\n tagTitles.push(\"world builder\");\r\n tagTitles.push(\"solver\");\r\n tagTitles.push(\"strategist\");\r\n tagTitles.push(\"dice lover\");\r\n tagTitles.push(\"performer\");\r\n tagTitles.push(\"casual\");\r\n tagTitles.push(\"character-focused\");\r\n tagTitles.push(\"team player\");\r\n tagTitles.push(\"mechanics\");\r\n tagTitles.push(\"adventurer\");\r\n tagTitles.push(\"collector\");\r\n tagTitles.push(\"problem solver\");\r\n tagTitles.push(\"innovator\");\r\n tagTitles.push(\"lorekeeper\");\r\n tagTitles.push(\"rule bender\");\r\n tagTitles.push(\"sandboxer\");\r\n tagTitles.push(\"cartographer\");\r\n tagTitles.push(\"loyalist\");\r\n tagTitles.push(\"wrangler\");\r\n tagTitles.push(\"moment maker\");\r\n tagTitles.push(\"jinxed roller\");\r\n tagTitles.push(\"lucky roller\");\r\n tagTitles.push(\"meticulous\");\r\n tagTitles.push(\"improviser\");\r\n tagTitles.push(\"tactician\");\r\n tagTitles.push(\"butterfly\");\r\n tagTitles.push(\"beginner\");\r\n tagTitles.push(\"voice actor\");\r\n tagTitles.push(\"multi-campaign\");\r\n tagTitles.push(\"starter\");\r\n tagTitles.push(\"forever DM\");\r\n tagTitles.push(\"finisher\");\r\n tagTitles.push(\"swapper\");\r\n tagTitles.push(\"meta-gamer\");\r\n tagTitles.push(\"specialist\");\r\n\r\n return tagTitles;\r\n}\r\n\r\n\r\nexport const FantasyNouns = [\r\n // Core D&D Classes\r\n \"Fighter\", \"Rogue\", \"Wizard\", \"Cleric\", \"Paladin\", \"Barbarian\", \"Ranger\", \"Sorcerer\", \"Bard\", \"Monk\", \"Warlock\", \"Druid\", \"Artificer\",\r\n\r\n // Fantasy Occupations\r\n \"Alchemist\", \"Blacksmith\", \"Knight\", \"Mage\", \"Mercenary\", \"Archer\", \"Scribe\", \"Healer\", \"Hunter\", \"Assassin\", \"Enchanter\",\r\n \"Miner\", \"Sailor\", \"Merchant\", \"Herbalist\", \"Cartographer\", \"Tailor\", \"Innkeeper\", \"Cook\", \"Scholar\",\r\n\r\n // Archetypes\r\n \"Adventurer\", \"Champion\", \"Warlord\", \"Outlaw\", \"Pilgrim\", \"Prophet\", \"Necromancer\", \"Witch\", \"Shaman\",\r\n \"Beastmaster\", \"Acolyte\", \"Spellblade\", \"Battlemage\", \"Blademaster\", \"Warpriest\", \"Berserker\", \"Elementalist\",\r\n\r\n // Fantasy Creatures/Beings\r\n \"Dragon\", \"Elf\", \"Dwarf\", \"Orc\", \"Goblin\", \"Gnome\", \"Tiefling\", \"Genasi\", \"Halfling\", \"Lich\", \"Vampire\", \"Werewolf\",\r\n \"Demon\", \"Angel\", \"Pixie\", \"Dryad\", \"Centaur\", \"Chimera\", \"Golem\", \"Fairy\", \"Troll\", \"Minotaur\", \"Kraken\",\r\n \"Griffin\", \"Phoenix\",\r\n\r\n // Fantasy Roles/Titles\r\n \"Archmage\", \"High Priestess\", \"King\", \"Queen\", \"Duke\", \"Duchess\", \"Emperor\", \"Empress\", \"Captain\", \"Seer\", \"Oracle\",\r\n \"Warden\", \"Guardian\", \"Watchman\", \"Hero\", \"Villain\", \"Herald\", \"Scout\", \"Envoy\",\r\n\r\n // Other Fantasy-Themed Nouns\r\n \"Spellcaster\", \"Summoner\", \"Conjurer\", \"Warrior\", \"Gladiator\", \"Pathfinder\", \"Explorer\", \"Tinkerer\", \"Shadowblade\",\r\n \"Dungeoneer\", \"Archon\", \"Mystic\", \"Sage\", \"Runemaster\", \"Smith\", \"Wanderer\", \"Wayfarer\", \"Avenger\", \"Defender\", \"Keeper\"\r\n];\r\n\r\nexport const FantasyAdjectives = [\r\n // Descriptive of Power/Strength\r\n \"Mighty\", \"Powerful\", \"Fierce\", \"Tough\", \"Armored\", \"Indomitable\", \"Savage\", \"Vengeful\", \"Heroic\", \"Valiant\",\r\n\r\n // Magical Features\r\n \"Enchanted\", \"Bewitched\", \"Magical\", \"Mystical\", \"Ethereal\", \"Arcane\", \"Spellbound\", \"Supernatural\", \"Runed\",\r\n\r\n // Personality/Appearance Traits\r\n \"Noble\", \"Gallant\", \"Cunning\", \"Crafty\", \"Shadowy\", \"Elegant\", \"Wise\", \"Shrewd\", \"Merciless\", \"Serene\",\r\n \"Infernal\", \"Wicked\", \"Pious\", \"Charming\", \"Loyal\", \"Treacherous\", \"Bold\", \"Cowardly\", \"Sly\",\r\n\r\n // Environment-Themed\r\n \"Cursed\", \"Blessed\", \"Haunted\", \"Frozen\", \"Burning\", \"Fiery\", \"Icy\", \"Stormy\", \"Sunlit\", \"Moonlit\",\r\n \"Dark\", \"Luminous\", \"Glistening\", \"Ancient\", \"Shattered\", \"Sacred\", \"Forbidden\", \"Hidden\", \"Lost\",\r\n \"Verdant\", \"Barren\",\r\n\r\n // Monster/Creature Traits\r\n \"Ferocious\", \"Ravenous\", \"Menacing\", \"Grotesque\", \"Spiked\", \"Scaled\", \"Hulking\", \"Winged\", \"Fanged\", \"Horned\",\r\n \"Tentacled\", \"Shapeshifting\",\r\n\r\n // Mystical/Abstract Traits\r\n \"Immortal\", \"Mythical\", \"Omniscient\", \"Unbreakable\",\r\n \"Unfathomable\", \"Celestial\", \"Void\", \"Otherworldly\", \"Primordial\",\r\n\r\n // Precious/Gleaming Adjectives\r\n \"Golden\", \"Silver\", \"Crystalline\", \"Diamond\", \"Jeweled\", \"Sapphire\", \"Emerald\", \"Shimmering\", \"Gleaming\", \"Radiant\",\r\n\r\n // Combat-Related Traits\r\n \"Bloodstained\", \"Battleworn\", \"Unyielding\", \"Victorious\", \"Deadly\", \"Sharp\", \"Piercing\", \"Relentless\", \"Untouchable\",\r\n\r\n // Nature-Themed\r\n \"Whispering\", \"Thorned\", \"Blossoming\", \"Blooming\", \"Overgrown\", \"Howling\", \"Cracked\", \"Twisted\", \"Mossy\", \"Winding\",\r\n \"Towering\", \"Rooted\",\r\n\r\n // Emotional/Thematic Descriptors\r\n \"Free\", \"Courageous\", \"Reckless\", \"Damned\", \"Lonely\", \"Heartless\", \"Driven\", \"Hopeful\",\r\n \"Fateful\"\r\n];\r\n\r\nexport const FantasyQualifiers = [\r\n // Describing Uniqueness or Origins\r\n \"Original\", \"Prime\", \"Primal\", \"Archetypal\", \"Ancestral\", \"Legendary\", \"Foremost\",\r\n\r\n // Describing Finality or Completion\r\n \"Final\", \"Ultimate\", \"Absolute\", \"Conclusive\", \"Eternal\", \"Enduring\", \"Definitive\",\r\n\r\n // Describing Supremacy or Greatness\r\n \"Supreme\", \"Paramount\", \"Preeminent\", \"Pinnacle\", \"Peerless\", \"Unrivaled\", \"Sovereign\", \"Dominant\",\r\n\r\n // Describing Perfection or Excellence\r\n \"Flawless\", \"Perfect\", \"Divine\", \"Exalted\", \"Transcendent\", \"Matchless\", \"Incomparable\",\r\n\r\n // Describing Eternity or Timelessness\r\n \"Timeless\", \"Boundless\", \"Ageless\", \"Perpetual\", \"Infinite\", \"Everlasting\",\r\n\r\n // Describing Power or Authority\r\n \"Omnipotent\", \"Almighty\", \"Unassailable\", \"Overwhelming\", \"Irresistible\", \"Unconquerable\", \"Majestic\"\r\n];\r\n\r\nexport const generateUsername = () => {\r\n let output = \"\"\r\n\r\n output+= getRandomElement(FantasyQualifiers)\r\n output+= getRandomElement(FantasyAdjectives)\r\n output+= getRandomElement(FantasyNouns)\r\n\r\n return output;\r\n}\r\n\r\nexport const 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","\"use client\";\r\n\r\nimport React, { useState, useEffect } from \"react\";\r\nimport { Card, CardMedia, CardContent, Typography } from \"@mui/material\";\r\nimport {DEFAULT_PROFILE_PIC, ProfilePictureSettings} from \"@/data/values\";\r\n\r\nexport type PlayerDisplayProps = {\r\n profilePicture: string | null;\r\n username: string;\r\n bio: string | null;\r\n preferredPronouns: string | null;\r\n};\r\n\r\nconst PlayerDisplayCard: React.FC<PlayerDisplayProps> = ({\r\n profilePicture,\r\n username,\r\n bio,\r\n preferredPronouns,\r\n }) => {\r\n const [imageSrc, setImageSrc] = useState<string>(DEFAULT_PROFILE_PIC);\r\n\r\n useEffect(() => {\r\n async function validateImage() {\r\n const newImage = profilePicture || DEFAULT_PROFILE_PIC;\r\n if (!profilePicture) {\r\n setImageSrc(DEFAULT_PROFILE_PIC);\r\n return;\r\n }\r\n\r\n const img = new Image();\r\n img.src = newImage;\r\n\r\n img.onload = () => {\r\n setImageSrc(newImage);\r\n };\r\n\r\n img.onerror = () => {\r\n setImageSrc(DEFAULT_PROFILE_PIC);\r\n };\r\n }\r\n\r\n validateImage();\r\n }, [profilePicture]);\r\n\r\n return (\r\n <Card\r\n sx={{\r\n margin: \"1rem\",\r\n background: \"linear-gradient(135deg, rgba(25, 118, 210, 0.8), rgba(25, 118, 210, 1))\", // Vibrant blue gradient\r\n boxShadow: \"0px 8px 15px rgba(25, 118, 210, 0.3)\", // Blue shadow to add depth\r\n borderRadius: \"12px\", // Smooth rounded corners\r\n color: \"#FFFFFF\", // White text for high contrast\r\n overflow: \"hidden\", // Clean edges\r\n }}\r\n className=\"transition duration-300 transform hover:scale-105 hover:shadow-2xl\"\r\n >\r\n {/* Image Section */}\r\n <CardMedia\r\n component=\"img\"\r\n image={imageSrc}\r\n alt={`${username}'s Profile Picture`}\r\n sx={{\r\n aspectRatio: ProfilePictureSettings.aspectRatio,\r\n height: \"auto\", // Updates to maintain aspect ratio and fill space nicely\r\n width: \"100%\",\r\n objectFit: \"cover\",\r\n }}\r\n />\r\n\r\n <CardContent className=\"relative p-6\">\r\n {/* Username */}\r\n <Typography\r\n variant=\"h5\"\r\n component=\"div\"\r\n className=\"font-bold text-lg uppercase text-center tracking-wide mb-2\"\r\n sx={{\r\n color: \"#FFFFFF\", // Pure white for username\r\n fontSize: \"1.5rem\",\r\n textShadow: \"0px 3px 6px rgba(0, 0, 0, 0.5)\", // Strong shadow for visibility\r\n }}\r\n >\r\n {username}\r\n </Typography>\r\n\r\n {/* Preferred Pronouns */}\r\n {preferredPronouns && (\r\n <Typography\r\n variant=\"body2\"\r\n className=\"text-sm font-medium\"\r\n sx={{\r\n color: \"#E3F2FD\",\r\n textShadow: \"0px 2px 4px rgba(0, 0, 0, 0.3)\", // Subtle shadow for readability\r\n fontWeight: \"bold\", // Emphasize key details\r\n marginBottom: \"1rem\",\r\n }}\r\n >\r\n {preferredPronouns}\r\n </Typography>\r\n )}\r\n\r\n {/* Bio */}\r\n {bio && (\r\n <Typography\r\n variant=\"body2\"\r\n className=\"text-sm font-light\"\r\n sx={{\r\n color: \"#E3F2FD\", // Softer muted tone for secondary text\r\n textShadow: \"0px 2px 4px rgba(0, 0, 0, 0.3)\", // Subtle shadow for readability\r\n fontStyle: \"italic\", // Distinguish bio visually\r\n }}\r\n >\r\n {bio}\r\n </Typography>\r\n )}\r\n </CardContent>\r\n </Card>\r\n );\r\n};\r\n\r\nexport default PlayerDisplayCard;\r\n\r\n\r\n\r\n\r\n\r\n\r\n","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 { Card, CardContent, CardHeader } from \"@mui/material\";\r\nimport { Tag } from \"@/types/tag\";\r\nimport Chip from \"@/components/shared/Chip\";\r\n\r\nexport type PlayerTagsCardProps = {\r\n tags: Tag[];\r\n};\r\n\r\nconst PlayerTagsCard: React.FC<PlayerTagsCardProps> = ({ tags = [] }) => {\r\n return (\r\n <Card sx={{\r\n margin: \"1rem\",\r\n borderRadius: \"12px\",\r\n boxShadow: \"0px 8px 15px rgba(25, 118, 210, 0.3)\",\r\n overflow: \"hidden\"\r\n }} className=\"transition duration-300 transform hover:scale-105 hover:shadow-2xl\">\r\n <CardHeader\r\n title=\"Player Tags\"\r\n sx={{\r\n background: \"linear-gradient(135deg, rgba(25, 118, 210, 0.8), rgba(25, 118, 210, 1))\",\r\n color: \"#FFFFFF\",\r\n fontSize: \"1.5rem\",\r\n textShadow: \"0px 3px 6px rgba(0, 0, 0, 0.5)\",\r\n '& .MuiCardHeader-title': {\r\n fontWeight: \"bold\",\r\n fontSize: \"1.5rem\",\r\n textAlign: \"center\",\r\n textTransform: \"uppercase\",\r\n letterSpacing: \"0.05em\"\r\n }\r\n }}\r\n />\r\n <CardContent className=\"p-6\">\r\n <div className=\"flex flex-wrap gap-2\">\r\n {tags.map((tag) => (\r\n <Chip key={tag.id} tag={tag} />\r\n ))}\r\n </div>\r\n </CardContent>\r\n </Card>\r\n );\r\n};\r\n\r\nexport default PlayerTagsCard;","\"use client\";\r\n\r\nimport React from \"react\";\r\nimport { Card, CardContent, Typography } from \"@mui/material\";\r\n\r\nexport type PlayerPromptCardProps = {\r\n title: string | null;\r\n description: string | null;\r\n};\r\n\r\nconst PlayerPromptCard: React.FC<PlayerPromptCardProps> = ({ title, description }) => (\r\n <Card\r\n sx={{\r\n margin: \"1rem\",\r\n background: \"linear-gradient(135deg, rgba(25, 118, 210, 0.8), rgba(25, 118, 210, 1))\", // Gradient color scheme\r\n boxShadow: \"0px 8px 15px rgba(25, 118, 210, 0.3)\", // Card shadow\r\n borderRadius: \"12px\", // Rounded corners\r\n color: \"#FFFFFF\", // Text contrast with the background\r\n overflow: \"hidden\", // Keeps consistent and clean card shape\r\n }}\r\n className=\"transition duration-300 transform hover:scale-105 hover:shadow-2xl\"\r\n >\r\n <CardContent className=\"p-6\">\r\n {/* Title */}\r\n {title && (\r\n <Typography\r\n variant=\"h5\"\r\n className=\"font-bold text-lg uppercase text-center tracking-wide mb-4\"\r\n sx={{\r\n color: \"#FFFFFF\", // Bright white for high visibility\r\n textShadow: \"0px 3px 6px rgba(0, 0, 0, 0.5)\", // Strong text shadow for contrast\r\n fontSize: \"1.5rem\",\r\n }}\r\n >\r\n {title}\r\n </Typography>\r\n )}\r\n\r\n {/* Description */}\r\n {description && (\r\n <Typography\r\n variant=\"body2\"\r\n className=\"text-sm font-medium text-center\"\r\n sx={{\r\n color: \"#E3F2FD\", // Softer light blue for description\r\n textShadow: \"0px 2px 4px rgba(0, 0, 0, 0.3)\", // Subtle shadow\r\n lineHeight: 1.6,\r\n marginTop: \"1rem\",\r\n }}\r\n >\r\n {description}\r\n </Typography>\r\n )}\r\n </CardContent>\r\n </Card>\r\n);\r\n\r\nexport default PlayerPromptCard;\r\n\r\n","\"use client\";\r\n\r\nimport React, { useMemo, useState } from \"react\";\r\nimport Autocomplete from \"@mui/material/Autocomplete\";\r\nimport { Card, CardContent, CardHeader, TextField } from \"@mui/material\";\r\nimport Popper, { PopperProps } from \"@mui/material/Popper\";\r\nimport { Tag } from \"@/types/tag\";\r\nimport Chip from \"@/components/shared/Chip\";\r\n\r\nexport interface PlayerTagsEditProps {\r\n selectedTags: Tag[];\r\n possibleTags: Tag[];\r\n onToggleTag: (id: number) => void;\r\n}\r\n\r\nconst PlayerTagsEdit: React.FC<PlayerTagsEditProps> = ({\r\n selectedTags = [],\r\n possibleTags = [],\r\n onToggleTag,\r\n}) => {\r\n const [inputValue, setInputValue] = useState(\"\");\r\n const selectedIds = useMemo(() => selectedTags.map((tag) => tag.id), [selectedTags]);\r\n\r\n const options = useMemo(\r\n () => possibleTags.map((tag) => ({ value: tag.id, label: tag.label, alternate_title: tag.alternate_title })),\r\n [possibleTags]\r\n );\r\n\r\n return (\r\n <Card sx={{\r\n margin: \"1rem\",\r\n borderRadius: \"12px\",\r\n boxShadow: \"0px 8px 15px rgba(25, 118, 210, 0.3)\",\r\n overflow: \"hidden\"\r\n }}>\r\n <CardHeader \r\n title=\"Player Tags\" \r\n sx={{\r\n background: \"linear-gradient(135deg, rgba(25, 118, 210, 0.8), rgba(25, 118, 210, 1))\",\r\n color: \"#FFFFFF\",\r\n fontSize: \"1.5rem\",\r\n textShadow: \"0px 3px 6px rgba(0, 0, 0, 0.5)\",\r\n '& .MuiCardHeader-title': {\r\n fontWeight: \"bold\",\r\n fontSize: \"1.5rem\",\r\n textAlign: \"center\",\r\n textTransform: \"uppercase\",\r\n letterSpacing: \"0.05em\"\r\n }\r\n }}\r\n />\r\n <CardContent className=\"p-6\">\r\n <div className=\"flex flex-wrap gap-2 mb-4\">\r\n {selectedTags.map((tag) => (\r\n <Chip\r\n key={tag.id}\r\n tag={tag}\r\n removeCallback={() => onToggleTag(tag.id)}\r\n />\r\n ))}\r\n </div>\r\n <Autocomplete\r\n key={selectedIds.join(\"-\")}\r\n options={options}\r\n filterOptions={(availableOptions, state) => {\r\n const query = state.inputValue.toLowerCase();\r\n return availableOptions\r\n .filter(\r\n (option) =>\r\n !selectedIds.includes(option.value) &&\r\n (option.label.toLowerCase().includes(query) ||\r\n option.alternate_title?.some((title) => title.toLowerCase().includes(query)))\r\n )\r\n .slice(0, 5);\r\n }}\r\n value={null}\r\n inputValue={inputValue}\r\n onInputChange={(event, newInputValue) => {\r\n if (event && event.type === \"change\") {\r\n setInputValue(newInputValue);\r\n }\r\n }}\r\n onChange={(event, newValue) => {\r\n if (newValue) {\r\n onToggleTag(newValue.value);\r\n }\r\n setInputValue(\"\");\r\n }}\r\n slots={{ popper: CustomPopper }}\r\n renderInput={(params) => (\r\n <TextField\r\n {...params}\r\n label=\"Select Tags\"\r\n variant=\"outlined\"\r\n />\r\n )}\r\n />\r\n </CardContent>\r\n </Card>\r\n );\r\n};\r\n\r\nconst CustomPopper = (props: PopperProps) => {\r\n return (\r\n <Popper\r\n {...props}\r\n modifiers={[\r\n {\r\n name: \"preventOverflow\",\r\n options: {\r\n boundary: \"viewport\",\r\n },\r\n },\r\n {\r\n name: \"offset\",\r\n options: {\r\n offset: [0, -10],\r\n },\r\n },\r\n ]}\r\n placement=\"top-start\"\r\n />\r\n );\r\n};\r\n\r\nexport default PlayerTagsEdit;\r\n","\"use client\";\r\n\r\nimport React from \"react\";\r\nimport { Grid, Box, useMediaQuery, useTheme, NoSsr } from \"@mui/material\";\r\nimport PlayerDisplayCard, { PlayerDisplayProps } from \"./PlayerDisplayCard\";\r\nimport PlayerDetailsCard, { PlayerDetailsProps } from \"./PlayerDetailsCard\";\r\nimport PlayerTagsCard from \"./PlayerTagsCard\";\r\nimport PlayerPromptCard, { PlayerPromptCardProps } from \"./PlayerPromptCard\";\r\nimport PlayerTagsEdit from \"./PlayerTagsEdit\";\r\nimport { Tag } from \"@/types/tag\";\r\n\r\nexport type PlayerPageLayoutProps = {\r\n playerData: PlayerDisplayProps & PlayerDetailsProps;\r\n tags: Tag[];\r\n blurbs: PlayerPromptCardProps[];\r\n isOwner?: boolean;\r\n possibleTags?: Tag[];\r\n onToggleTag?: (tagId: number) => void;\r\n};\r\n\r\nexport default function PlayerPageLayout({\r\n playerData,\r\n tags = [],\r\n blurbs = [],\r\n isOwner = false,\r\n possibleTags = [],\r\n onToggleTag = () => {},\r\n}: PlayerPageLayoutProps) {\r\n const theme = useTheme();\r\n const isSmallScreen = useMediaQuery(theme.breakpoints.down(\"lg\"));\r\n\r\n const tagsElement = isOwner ? (\r\n <PlayerTagsEdit\r\n selectedTags={tags}\r\n possibleTags={possibleTags}\r\n onToggleTag={onToggleTag}\r\n />\r\n ) : (\r\n <PlayerTagsCard tags={tags} />\r\n );\r\n\r\n return (\r\n <NoSsr>\r\n <Box sx={{ padding: \"2rem\", marginRight: \"auto\", marginLeft: \"auto\" }} justifyContent=\"center\">\r\n <Grid container spacing={3} justifyContent=\"center\" sx={{ marginRight: \"auto\", marginLeft: \"auto\" }}>\r\n {/* Left Lane: PlayerDetails and Tags (only on large screens) */}\r\n {!isSmallScreen && (\r\n <Grid size={{ xs: 12, lg: 3 }}>\r\n <PlayerDetailsCard\r\n preferredPronouns={playerData.preferredPronouns}\r\n age={playerData.age}\r\n yearsPlaying={playerData.yearsPlaying}\r\n discordUsername={playerData.discordUsername}\r\n preferredGames={playerData.preferredGames}\r\n />\r\n {tagsElement}\r\n </Grid>\r\n )}\r\n\r\n {/* Right Side: All other cards */}\r\n <Grid size={{ xs: 12, lg: 6 }}>\r\n <Grid container spacing={3}>\r\n {/* PlayerDisplay Card */}\r\n <Grid size={{ xs: 12, lg: 8 }}>\r\n <PlayerDisplayCard\r\n profilePicture={playerData.profilePicture}\r\n username={playerData.username}\r\n bio={playerData.bio}\r\n preferredPronouns={playerData.preferredPronouns}\r\n />\r\n </Grid>\r\n\r\n {/* Render DetailsCard in small screens */}\r\n {isSmallScreen && (\r\n <Grid size={{ xs: 12, lg: 3 }}>\r\n <PlayerDetailsCard\r\n preferredPronouns={playerData.preferredPronouns}\r\n age={playerData.age}\r\n yearsPlaying={playerData.yearsPlaying}\r\n discordUsername={playerData.discordUsername}\r\n preferredGames={playerData.preferredGames}\r\n />\r\n </Grid>\r\n )}\r\n\r\n {/* PlayerPromptCards */}\r\n {blurbs.map((blurb, index) => (\r\n <Grid size={{ xs: 12, lg: 8 }} key={index}>\r\n <PlayerPromptCard\r\n title={blurb.title}\r\n description={blurb.description}\r\n />\r\n </Grid>\r\n ))}\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n </Box>\r\n </NoSsr>\r\n );\r\n}\r\n"]}
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
+
var Typography3 = require('@mui/material/Typography');
|
|
5
|
+
var FormControl = require('@mui/material/FormControl');
|
|
6
|
+
var Select = require('@mui/material/Select');
|
|
7
|
+
var MenuItem = require('@mui/material/MenuItem');
|
|
8
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
4
9
|
var FormControlLabel = require('@mui/material/FormControlLabel');
|
|
5
10
|
var Checkbox = require('@mui/material/Checkbox');
|
|
6
11
|
var Box = require('@mui/material/Box');
|
|
7
|
-
var jsxRuntime = require('react/jsx-runtime');
|
|
8
|
-
var Typography2 = require('@mui/material/Typography');
|
|
9
|
-
var FormControl = require('@mui/material/FormControl');
|
|
10
12
|
var RadioGroup = require('@mui/material/RadioGroup');
|
|
11
13
|
var Radio = require('@mui/material/Radio');
|
|
12
14
|
var React = require('react');
|
|
@@ -18,11 +20,13 @@ var FormGroup = require('@mui/material/FormGroup');
|
|
|
18
20
|
|
|
19
21
|
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
20
22
|
|
|
23
|
+
var Typography3__default = /*#__PURE__*/_interopDefault(Typography3);
|
|
24
|
+
var FormControl__default = /*#__PURE__*/_interopDefault(FormControl);
|
|
25
|
+
var Select__default = /*#__PURE__*/_interopDefault(Select);
|
|
26
|
+
var MenuItem__default = /*#__PURE__*/_interopDefault(MenuItem);
|
|
21
27
|
var FormControlLabel__default = /*#__PURE__*/_interopDefault(FormControlLabel);
|
|
22
28
|
var Checkbox__default = /*#__PURE__*/_interopDefault(Checkbox);
|
|
23
29
|
var Box__default = /*#__PURE__*/_interopDefault(Box);
|
|
24
|
-
var Typography2__default = /*#__PURE__*/_interopDefault(Typography2);
|
|
25
|
-
var FormControl__default = /*#__PURE__*/_interopDefault(FormControl);
|
|
26
30
|
var RadioGroup__default = /*#__PURE__*/_interopDefault(RadioGroup);
|
|
27
31
|
var Radio__default = /*#__PURE__*/_interopDefault(Radio);
|
|
28
32
|
var React__default = /*#__PURE__*/_interopDefault(React);
|
|
@@ -32,6 +36,24 @@ var Popper__default = /*#__PURE__*/_interopDefault(Popper);
|
|
|
32
36
|
var Divider__default = /*#__PURE__*/_interopDefault(Divider);
|
|
33
37
|
var FormGroup__default = /*#__PURE__*/_interopDefault(FormGroup);
|
|
34
38
|
|
|
39
|
+
var DistanceFilter = ({ distances, selectedDistance, onChange }) => {
|
|
40
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
41
|
+
/* @__PURE__ */ jsxRuntime.jsx(Typography3__default.default, { variant: "h6", gutterBottom: true, children: "Distance" }),
|
|
42
|
+
/* @__PURE__ */ jsxRuntime.jsx(FormControl__default.default, { fullWidth: true, size: "small", children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
43
|
+
Select__default.default,
|
|
44
|
+
{
|
|
45
|
+
value: selectedDistance !== void 0 ? selectedDistance : "",
|
|
46
|
+
onChange: (e) => onChange(Number(e.target.value)),
|
|
47
|
+
displayEmpty: true,
|
|
48
|
+
children: [
|
|
49
|
+
/* @__PURE__ */ jsxRuntime.jsx(MenuItem__default.default, { value: "", children: /* @__PURE__ */ jsxRuntime.jsx("em", { children: "Any Distance" }) }),
|
|
50
|
+
distances.map((option) => /* @__PURE__ */ jsxRuntime.jsx(MenuItem__default.default, { value: option.value, children: option.display }, option.value))
|
|
51
|
+
]
|
|
52
|
+
}
|
|
53
|
+
) })
|
|
54
|
+
] });
|
|
55
|
+
};
|
|
56
|
+
var DistanceFilter_default = DistanceFilter;
|
|
35
57
|
var ExpiredTablesFilter = ({
|
|
36
58
|
includeExpiredTables,
|
|
37
59
|
onChange
|
|
@@ -65,7 +87,7 @@ var SortOptions = ({
|
|
|
65
87
|
onChange == null ? void 0 : onChange(event.target.value);
|
|
66
88
|
};
|
|
67
89
|
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
68
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
90
|
+
/* @__PURE__ */ jsxRuntime.jsx(Typography3__default.default, { variant: "h6", gutterBottom: true, children: "Sort By" }),
|
|
69
91
|
/* @__PURE__ */ jsxRuntime.jsx(FormControl__default.default, { children: /* @__PURE__ */ jsxRuntime.jsx(RadioGroup__default.default, { defaultValue, onChange: handleSortChange, children: SORT_OPTIONS.map((option) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
70
92
|
FormControlLabel__default.default,
|
|
71
93
|
{
|
|
@@ -132,13 +154,13 @@ var TagsFilter = ({
|
|
|
132
154
|
shouldHaveAtLeastOne: ""
|
|
133
155
|
});
|
|
134
156
|
const tagOptions = React__default.default.useMemo(() => {
|
|
157
|
+
var _a;
|
|
135
158
|
console.log("available tags: " + JSON.stringify(Tags));
|
|
136
159
|
console.log(!Tags);
|
|
137
|
-
|
|
138
|
-
return Tags.map((tag) => ({
|
|
160
|
+
return (_a = Tags == null ? void 0 : Tags.map((tag) => ({
|
|
139
161
|
value: tag.id,
|
|
140
162
|
label: tag.label
|
|
141
|
-
}));
|
|
163
|
+
}))) != null ? _a : [];
|
|
142
164
|
}, [Tags]);
|
|
143
165
|
const handleTagChange = (tagId, category) => {
|
|
144
166
|
let newTags = [];
|
|
@@ -166,8 +188,7 @@ var TagsFilter = ({
|
|
|
166
188
|
};
|
|
167
189
|
const renderSelectedTags = (selectedTags, category) => {
|
|
168
190
|
const tagValues = [];
|
|
169
|
-
|
|
170
|
-
Tags.forEach((tag) => {
|
|
191
|
+
Tags == null ? void 0 : Tags.forEach((tag) => {
|
|
171
192
|
if (selectedTags.includes(tag.id)) {
|
|
172
193
|
tagValues.push(tag);
|
|
173
194
|
}
|
|
@@ -187,7 +208,7 @@ var TagsFilter = ({
|
|
|
187
208
|
const createTagSelector = (category, label) => {
|
|
188
209
|
const selectedTags = category === "mustHave" ? mustHaveTags : category === "mustNotHave" ? mustNotHaveTags : shouldHaveAtLeastOneTags;
|
|
189
210
|
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
190
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
211
|
+
/* @__PURE__ */ jsxRuntime.jsx(Typography3__default.default, { variant: "subtitle1", gutterBottom: true, sx: { mt: 2 }, children: label }),
|
|
191
212
|
renderSelectedTags(selectedTags, category),
|
|
192
213
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
193
214
|
Autocomplete__default.default,
|
|
@@ -240,7 +261,7 @@ var TagsFilter = ({
|
|
|
240
261
|
] });
|
|
241
262
|
};
|
|
242
263
|
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
243
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
264
|
+
/* @__PURE__ */ jsxRuntime.jsx(Typography3__default.default, { variant: "h6", gutterBottom: true, children: "Tags" }),
|
|
244
265
|
createTagSelector("mustHave", "Must Have Tags"),
|
|
245
266
|
/* @__PURE__ */ jsxRuntime.jsx(Divider__default.default, { sx: { my: 2 } }),
|
|
246
267
|
createTagSelector("mustNotHave", "Must Not Have Tags"),
|
|
@@ -302,7 +323,7 @@ var TextSearchCard = ({ onChange, selectedTypes, initialTextSearch }) => {
|
|
|
302
323
|
}
|
|
303
324
|
};
|
|
304
325
|
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
305
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
326
|
+
/* @__PURE__ */ jsxRuntime.jsx(Typography3__default.default, { variant: "h6", gutterBottom: true, children: "Text Search" }),
|
|
306
327
|
/* @__PURE__ */ jsxRuntime.jsxs(Box__default.default, { sx: { mb: 2 }, children: [
|
|
307
328
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
308
329
|
TextField__default.default,
|
|
@@ -346,7 +367,7 @@ var TypeFilter = ({ types, initialSelectedTypes = [], onChange }) => {
|
|
|
346
367
|
}
|
|
347
368
|
};
|
|
348
369
|
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
349
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
370
|
+
/* @__PURE__ */ jsxRuntime.jsx(Typography3__default.default, { variant: "h6", gutterBottom: true, children: "Type" }),
|
|
350
371
|
/* @__PURE__ */ jsxRuntime.jsx(FormGroup__default.default, { children: types.map((type) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
351
372
|
FormControlLabel__default.default,
|
|
352
373
|
{
|
|
@@ -354,9 +375,7 @@ var TypeFilter = ({ types, initialSelectedTypes = [], onChange }) => {
|
|
|
354
375
|
Checkbox__default.default,
|
|
355
376
|
{
|
|
356
377
|
checked: selectedTypes.includes(type.id),
|
|
357
|
-
onChange: () => handleTypeChange(type.id)
|
|
358
|
-
disabled: type.id === "event",
|
|
359
|
-
title: type.id === "event" ? "Coming soon! Currently only player and table search are supported." : ""
|
|
378
|
+
onChange: () => handleTypeChange(type.id)
|
|
360
379
|
}
|
|
361
380
|
),
|
|
362
381
|
label: type.label
|
|
@@ -367,6 +386,7 @@ var TypeFilter = ({ types, initialSelectedTypes = [], onChange }) => {
|
|
|
367
386
|
};
|
|
368
387
|
var TypeFilter_default = TypeFilter;
|
|
369
388
|
|
|
389
|
+
exports.DistanceFilter = DistanceFilter_default;
|
|
370
390
|
exports.ExpiredTablesFilter = ExpiredTablesFilter_default;
|
|
371
391
|
exports.SortOptions = SortOptions_default;
|
|
372
392
|
exports.TagsFilter = TagsFilter_default;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/SearchPage/Filters/ExpiredTablesFilter.tsx","../../../src/components/SearchPage/Filters/SortOptions.tsx","../../../src/components/shared/Chip.tsx","../../../src/components/SearchPage/Filters/TagsFilter.tsx","../../../src/components/SearchPage/Filters/TextSearchCard.tsx","../../../src/components/SearchPage/Filters/TypeFilter.tsx"],"names":["Box","jsx","FormControlLabel","Checkbox","jsxs","Fragment","Typography","FormControl","RadioGroup","Radio","React","Autocomplete","TextField","Divider","Popper","useEffect","FormGroup"],"mappings":"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","file":"index.cjs","sourcesContent":["\"use client\"\r\nimport React from 'react';\r\nimport FormControlLabel from '@mui/material/FormControlLabel';\r\nimport Checkbox from '@mui/material/Checkbox';\r\nimport Box from '@mui/material/Box';\r\n\r\ninterface ExpiredTablesFilterProps {\r\n includeExpiredTables: boolean;\r\n onChange: (include: boolean) => void;\r\n}\r\n\r\nconst ExpiredTablesFilter: React.FC<ExpiredTablesFilterProps> = ({\r\n includeExpiredTables,\r\n onChange\r\n}) => {\r\n return (\r\n <Box sx={{ mt: 2 }}>\r\n <FormControlLabel\r\n control={\r\n <Checkbox\r\n checked={includeExpiredTables}\r\n onChange={(e) => onChange(e.target.checked)}\r\n color=\"primary\"\r\n />\r\n }\r\n label=\"Show expired tables\"\r\n />\r\n </Box>\r\n );\r\n};\r\n\r\nexport default ExpiredTablesFilter;\r\n","\"use client\";\n\nimport React from 'react';\nimport Typography from '@mui/material/Typography';\nimport FormControl from '@mui/material/FormControl';\nimport RadioGroup from '@mui/material/RadioGroup';\nimport FormControlLabel from '@mui/material/FormControlLabel';\nimport Radio from '@mui/material/Radio';\n\ninterface SortOptionsProps {\n defaultValue?: string;\n onChange?: (sortOption: string) => void;\n}\n\nconst SORT_OPTIONS = [\n { id: 'relevance', label: 'Relevance' },\n { id: 'newest', label: 'Newest' },\n { id: 'popular', label: 'Most Popular' },\n];\n\nconst SortOptions: React.FC<SortOptionsProps> = ({\n defaultValue = 'relevance',\n onChange\n}) => {\n const handleSortChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n onChange?.(event.target.value);\n };\n\n return (\n <>\n <Typography variant=\"h6\" gutterBottom>\n Sort By\n </Typography>\n <FormControl>\n <RadioGroup defaultValue={defaultValue} onChange={handleSortChange}>\n {SORT_OPTIONS.map((option) => (\n <FormControlLabel\n key={option.id}\n value={option.id}\n control={<Radio />}\n label={option.label}\n />\n ))}\n </RadioGroup>\n </FormControl>\n </>\n );\n};\n\nexport default SortOptions;\n","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\nimport React from 'react';\r\nimport Typography from '@mui/material/Typography';\r\nimport Box from '@mui/material/Box';\r\nimport Autocomplete from '@mui/material/Autocomplete';\r\nimport TextField from '@mui/material/TextField';\r\nimport Popper, { PopperProps } from '@mui/material/Popper';\r\nimport {Tag} from '@/types/tag';\r\nimport Divider from '@mui/material/Divider';\r\nimport Chip from \"@/components/shared/Chip\";\r\n\r\ninterface TagsFilterProps {\r\n initialSelectedTags?: {\r\n mustHave: number[];\r\n mustNotHave: number[];\r\n shouldHaveAtLeastOne: number[];\r\n };\r\n onChange?: (selectedTags: {\r\n mustHave: number[];\r\n mustNotHave: number[];\r\n shouldHaveAtLeastOne: number[];\r\n }) => void;\r\n tags: Tag[];\r\n}\r\n\r\ntype TagCategory = 'mustHave' | 'mustNotHave' | 'shouldHaveAtLeastOne';\r\n\r\n/**\r\n * Component for filtering search results by tags\r\n * Uses Autocomplete for interactive tag selection similar to PlayerTagsEdit\r\n * Provides three separate sections for tags: must haves, must not haves, and should contain at least one\r\n */\r\nconst TagsFilter: React.FC<TagsFilterProps> = ({ \r\n onChange, tags: Tags = [], initialSelectedTags\r\n}) => {\r\n const [mustHaveTags, setMustHaveTags] = React.useState<number[]>(initialSelectedTags?.mustHave || []);\r\n const [mustNotHaveTags, setMustNotHaveTags] = React.useState<number[]>(initialSelectedTags?.mustNotHave || []);\r\n const [shouldHaveAtLeastOneTags, setShouldHaveAtLeastOneTags] = React.useState<number[]>(initialSelectedTags?.shouldHaveAtLeastOne || []);\r\n \r\n // Update state when initialSelectedTags changes\r\n React.useEffect(() => {\r\n if (initialSelectedTags) {\r\n setMustHaveTags(initialSelectedTags.mustHave || []);\r\n setMustNotHaveTags(initialSelectedTags.mustNotHave || []);\r\n setShouldHaveAtLeastOneTags(initialSelectedTags.shouldHaveAtLeastOne || []);\r\n }\r\n }, [initialSelectedTags]);\r\n\r\n Tags = !!Tags ? Tags : [];\r\n \r\n const [inputValues, setInputValues] = React.useState({\r\n mustHave: '',\r\n mustNotHave: '',\r\n shouldHaveAtLeastOne: ''\r\n });\r\n\r\n // Convert tags to format needed for Autocomplete\r\n const tagOptions = React.useMemo(() => {\r\n console.log(\"available tags: \" + JSON.stringify(Tags))\r\n console.log(!Tags)\r\n if (!Tags || Tags.length === 0 || !Tags.map) return [];\r\n return Tags.map(tag => ({\r\n value: tag.id,\r\n label: tag.label\r\n }));\r\n }, [Tags]);\r\n\r\n const handleTagChange = (tagId: number, category: TagCategory) => {\r\n let newTags: number[] = [];\r\n \r\n switch (category) {\r\n case 'mustHave':\r\n newTags = mustHaveTags.includes(tagId)\r\n ? mustHaveTags.filter(id => id !== tagId)\r\n : [...mustHaveTags, tagId];\r\n setMustHaveTags(newTags);\r\n break;\r\n case 'mustNotHave':\r\n newTags = mustNotHaveTags.includes(tagId)\r\n ? mustNotHaveTags.filter(id => id !== tagId)\r\n : [...mustNotHaveTags, tagId];\r\n setMustNotHaveTags(newTags);\r\n break;\r\n case 'shouldHaveAtLeastOne':\r\n newTags = shouldHaveAtLeastOneTags.includes(tagId)\r\n ? shouldHaveAtLeastOneTags.filter(id => id !== tagId)\r\n : [...shouldHaveAtLeastOneTags, tagId];\r\n setShouldHaveAtLeastOneTags(newTags);\r\n break;\r\n }\r\n \r\n if (onChange) {\r\n onChange({\r\n mustHave: category === 'mustHave' ? newTags : mustHaveTags,\r\n mustNotHave: category === 'mustNotHave' ? newTags : mustNotHaveTags,\r\n shouldHaveAtLeastOne: category === 'shouldHaveAtLeastOne' ? newTags : shouldHaveAtLeastOneTags\r\n });\r\n }\r\n };\r\n\r\n // Render selected tags as labels with remove buttons\r\n const renderSelectedTags = (selectedTags: number[], category: TagCategory) => {\r\n const tagValues: Tag[] = [];\r\n\r\n if (!Tags || Tags.length === 0 || !Tags.map) return null;\r\n Tags.forEach((tag) => {\r\n if (selectedTags.includes(tag.id)) {\r\n tagValues.push(tag);\r\n }\r\n });\r\n\r\n if (tagValues.length === 0) {\r\n return null;\r\n }\r\n\r\n return (\r\n <Box sx={{ display: 'flex', flexWrap: 'wrap', gap: 1, mb: 2 }}>\r\n {tagValues.map((tag) => (\r\n <Chip\r\n key={tag.id}\r\n tag={tag}\r\n removeCallback={(tagId) => handleTagChange(tagId, category)}\r\n />\r\n ))}\r\n </Box>\r\n );\r\n };\r\n\r\n // Helper function to create an Autocomplete component for a specific category\r\n const createTagSelector = (category: TagCategory, label: string) => {\r\n const selectedTags = \r\n category === 'mustHave' \r\n ? mustHaveTags \r\n : category === 'mustNotHave' \r\n ? mustNotHaveTags \r\n : shouldHaveAtLeastOneTags;\r\n \r\n return (\r\n <>\r\n <Typography variant=\"subtitle1\" gutterBottom sx={{ mt: 2 }}>\r\n {label}\r\n </Typography>\r\n \r\n {renderSelectedTags(selectedTags, category)}\r\n \r\n <Autocomplete\r\n key={`${category}-${selectedTags.join('-')}`}\r\n options={tagOptions}\r\n filterOptions={(options, state) => {\r\n // Determine which tags to exclude based on the current category\r\n const tagsToExclude = new Set<number>();\r\n \r\n // Always exclude tags already selected in the current category\r\n selectedTags.forEach(id => tagsToExclude.add(id));\r\n \r\n // Exclude tags selected in other categories\r\n if (category !== 'mustHave') {\r\n mustHaveTags.forEach(id => tagsToExclude.add(id));\r\n }\r\n if (category !== 'mustNotHave') {\r\n mustNotHaveTags.forEach(id => tagsToExclude.add(id));\r\n }\r\n if (category !== 'shouldHaveAtLeastOne') {\r\n shouldHaveAtLeastOneTags.forEach(id => tagsToExclude.add(id));\r\n }\r\n \r\n return options\r\n .filter(\r\n (option) =>\r\n // Exclude options already selected in any category\r\n !tagsToExclude.has(option.value) &&\r\n // Filter based on user input\r\n option.label.toLowerCase().includes(state.inputValue.toLowerCase())\r\n )\r\n .slice(0, 3); // Show up to 3 results\r\n }}\r\n value={null} // Clearing the selected value immediately\r\n inputValue={inputValues[category]} // Bind the input value to state\r\n onInputChange={(event, newInputValue) => {\r\n // Check if this is clearing after selection\r\n if (event && event.type === 'change') {\r\n setInputValues({\r\n ...inputValues,\r\n [category]: newInputValue\r\n });\r\n }\r\n }}\r\n onChange={(event, newValue) => {\r\n if (newValue) {\r\n handleTagChange(newValue.value, category); // Update selected tags\r\n }\r\n // Clear the text box after selection\r\n setInputValues({\r\n ...inputValues,\r\n [category]: ''\r\n });\r\n }}\r\n slots={{ popper: CustomPopper }}\r\n renderInput={(params) => <TextField {...params} label={`Select ${label}`} />}\r\n />\r\n </>\r\n );\r\n };\r\n\r\n return (\r\n <>\r\n <Typography variant=\"h6\" gutterBottom>\r\n Tags\r\n </Typography>\r\n \r\n {createTagSelector('mustHave', 'Must Have Tags')}\r\n \r\n <Divider sx={{ my: 2 }} />\r\n \r\n {createTagSelector('mustNotHave', 'Must Not Have Tags')}\r\n \r\n <Divider sx={{ my: 2 }} />\r\n \r\n {createTagSelector('shouldHaveAtLeastOne', 'Should Contain At Least One Tag')}\r\n </>\r\n );\r\n};\r\n\r\n// Custom popper for dropdown placement\r\nconst CustomPopper = (props: PopperProps) => {\r\n return (\r\n <Popper\r\n {...props}\r\n modifiers={[\r\n {\r\n name: \"preventOverflow\",\r\n options: {\r\n boundary: \"viewport\", // Prevent the Popper from going outside the viewport\r\n },\r\n },\r\n {\r\n name: \"offset\",\r\n options: {\r\n offset: [0, -10], // Set negative vertical offset (adjust value as needed)\r\n },\r\n },\r\n ]}\r\n placement=\"top-start\" // Position the dropdown above the input field\r\n />\r\n );\r\n};\r\n\r\nexport default TagsFilter;","import React, { useEffect } from 'react';\r\nimport Typography from '@mui/material/Typography';\r\nimport TextField from '@mui/material/TextField';\r\nimport FormControlLabel from '@mui/material/FormControlLabel';\r\nimport Checkbox from '@mui/material/Checkbox';\r\nimport Box from '@mui/material/Box';\r\n\r\ninterface TextSearchCardProps {\r\n onChange?: (textSearch: { query: string; titleOnly: boolean }) => void;\r\n selectedTypes: string[];\r\n initialTextSearch?: {\r\n query: string;\r\n titleOnly: boolean;\r\n };\r\n}\r\n\r\n/**\r\n * Component for searching text within tables and events\r\n * Only shown when table or event types are selected\r\n */\r\nconst TextSearchCard: React.FC<TextSearchCardProps> = ({ onChange, selectedTypes, initialTextSearch }) => {\r\n const [query, setQuery] = React.useState<string>(initialTextSearch?.query || '');\r\n const [titleOnly, setTitleOnly] = React.useState<boolean>(initialTextSearch?.titleOnly || false);\r\n\r\n // Update state when initialTextSearch changes\r\n useEffect(() => {\r\n if (initialTextSearch) {\r\n setQuery(initialTextSearch.query || '');\r\n setTitleOnly(initialTextSearch.titleOnly || false);\r\n }\r\n }, [initialTextSearch]);\r\n\r\n // Check if we should show this card (only when table or event is selected)\r\n const shouldShow = selectedTypes.includes('table') || selectedTypes.includes('event');\r\n\r\n if (!shouldShow) {\r\n return null;\r\n }\r\n\r\n const handleQueryChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n const newQuery = e.target.value;\r\n setQuery(newQuery);\r\n\r\n if (onChange) {\r\n onChange({ query: newQuery, titleOnly });\r\n }\r\n };\r\n\r\n const handleTitleOnlyChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n const newTitleOnly = e.target.checked;\r\n setTitleOnly(newTitleOnly);\r\n\r\n if (onChange) {\r\n onChange({ query, titleOnly: newTitleOnly });\r\n }\r\n };\r\n\r\n return (\r\n <>\r\n <Typography variant=\"h6\" gutterBottom>\r\n Text Search\r\n </Typography>\r\n <Box sx={{ mb: 2 }}>\r\n <TextField\r\n fullWidth\r\n label=\"Search in title and description\"\r\n variant=\"outlined\"\r\n value={query}\r\n onChange={handleQueryChange}\r\n placeholder=\"Enter search terms...\"\r\n sx={{ mb: 1 }}\r\n />\r\n <FormControlLabel\r\n control={\r\n <Checkbox \r\n checked={titleOnly}\r\n onChange={handleTitleOnlyChange}\r\n />\r\n }\r\n label=\"Search in title only\"\r\n />\r\n </Box>\r\n </>\r\n );\r\n};\r\n\r\nexport default TextSearchCard;\r\n","\"use client\";\n\nimport React, { useEffect } from 'react';\nimport Typography from '@mui/material/Typography';\nimport FormGroup from '@mui/material/FormGroup';\nimport FormControlLabel from '@mui/material/FormControlLabel';\nimport Checkbox from '@mui/material/Checkbox';\n\ninterface TypeFilterProps {\n types: { id: string; label: string }[];\n initialSelectedTypes?: string[];\n onChange?: (selectedTypes: string[]) => void;\n}\n\n/**\n * Component for filtering search results by type (player, event, table)\n */\nconst TypeFilter: React.FC<TypeFilterProps> = ({ types, initialSelectedTypes = [], onChange }) => {\n const [selectedTypes, setSelectedTypes] = React.useState<string[]>(initialSelectedTypes);\n\n // Update state when initialSelectedTypes changes\n useEffect(() => {\n setSelectedTypes(initialSelectedTypes);\n }, [initialSelectedTypes]);\n\n const handleTypeChange = (typeId: string) => {\n const newSelectedTypes = selectedTypes.includes(typeId)\n ? selectedTypes.filter(id => id !== typeId)\n : [...selectedTypes, typeId];\n\n setSelectedTypes(newSelectedTypes);\n\n if (onChange) {\n onChange(newSelectedTypes);\n }\n };\n\n return (\n <>\n <Typography variant=\"h6\" gutterBottom>\n Type\n </Typography>\n <FormGroup>\n {types.map((type) => (\n <FormControlLabel\n key={type.id}\n control={\n <Checkbox \n checked={selectedTypes.includes(type.id)}\n onChange={() => handleTypeChange(type.id)}\n disabled={type.id === 'event'}\n title={type.id === 'event' ? 'Coming soon! Currently only player and table search are supported.' : ''}\n />\n }\n label={type.label}\n />\n ))}\n </FormGroup>\n </>\n );\n};\n\nexport default TypeFilter;\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../src/components/SearchPage/Filters/DistanceFilter.tsx","../../../src/components/SearchPage/Filters/ExpiredTablesFilter.tsx","../../../src/components/SearchPage/Filters/SortOptions.tsx","../../../src/components/shared/Chip.tsx","../../../src/components/SearchPage/Filters/TagsFilter.tsx","../../../src/components/SearchPage/Filters/TextSearchCard.tsx","../../../src/components/SearchPage/Filters/TypeFilter.tsx"],"names":["jsxs","Fragment","jsx","Typography","FormControl","Select","MenuItem","Box","FormControlLabel","Checkbox","RadioGroup","Radio","React","Autocomplete","TextField","Divider","Popper","useEffect","FormGroup"],"mappings":"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","file":"index.cjs","sourcesContent":["\"use client\";\r\n\r\nimport React from 'react';\r\nimport Typography from '@mui/material/Typography';\r\nimport FormControl from '@mui/material/FormControl';\r\nimport Select from '@mui/material/Select';\r\nimport MenuItem from '@mui/material/MenuItem';\r\nimport { DistanceOption } from '@/types/search';\r\n\r\ninterface DistanceFilterProps {\r\n distances: DistanceOption[];\r\n selectedDistance?: number;\r\n onChange: (distance: number) => void;\r\n}\r\n\r\n/**\r\n * Component for filtering search results by distance\r\n * //todo add JSDoc for this\r\n */\r\nconst DistanceFilter: React.FC<DistanceFilterProps> = ({ distances, selectedDistance, onChange }) => {\r\n return (\r\n <>\r\n <Typography variant=\"h6\" gutterBottom>\r\n Distance\r\n </Typography>\r\n <FormControl fullWidth size=\"small\">\r\n <Select\r\n value={selectedDistance !== undefined ? selectedDistance : ''}\r\n onChange={(e) => onChange(Number(e.target.value))}\r\n displayEmpty\r\n >\r\n <MenuItem value=\"\">\r\n <em>Any Distance</em>\r\n </MenuItem>\r\n {distances.map((option) => (\r\n <MenuItem key={option.value} value={option.value}>\r\n {option.display}\r\n </MenuItem>\r\n ))}\r\n </Select>\r\n </FormControl>\r\n </>\r\n );\r\n};\r\n\r\nexport default DistanceFilter;\r\n","\"use client\"\r\nimport React from 'react';\r\nimport FormControlLabel from '@mui/material/FormControlLabel';\r\nimport Checkbox from '@mui/material/Checkbox';\r\nimport Box from '@mui/material/Box';\r\n\r\ninterface ExpiredTablesFilterProps {\r\n includeExpiredTables: boolean;\r\n onChange: (include: boolean) => void;\r\n}\r\n\r\nconst ExpiredTablesFilter: React.FC<ExpiredTablesFilterProps> = ({\r\n includeExpiredTables,\r\n onChange\r\n}) => {\r\n return (\r\n <Box sx={{ mt: 2 }}>\r\n <FormControlLabel\r\n control={\r\n <Checkbox\r\n checked={includeExpiredTables}\r\n onChange={(e) => onChange(e.target.checked)}\r\n color=\"primary\"\r\n />\r\n }\r\n label=\"Show expired tables\"\r\n />\r\n </Box>\r\n );\r\n};\r\n\r\nexport default ExpiredTablesFilter;\r\n","\"use client\";\n\nimport React from 'react';\nimport Typography from '@mui/material/Typography';\nimport FormControl from '@mui/material/FormControl';\nimport RadioGroup from '@mui/material/RadioGroup';\nimport FormControlLabel from '@mui/material/FormControlLabel';\nimport Radio from '@mui/material/Radio';\n\ninterface SortOptionsProps {\n defaultValue?: string;\n onChange?: (sortOption: string) => void;\n}\n\nconst SORT_OPTIONS = [\n { id: 'relevance', label: 'Relevance' },\n { id: 'newest', label: 'Newest' },\n { id: 'popular', label: 'Most Popular' },\n];\n\nconst SortOptions: React.FC<SortOptionsProps> = ({\n defaultValue = 'relevance',\n onChange\n}) => {\n const handleSortChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n onChange?.(event.target.value);\n };\n\n return (\n <>\n <Typography variant=\"h6\" gutterBottom>\n Sort By\n </Typography>\n <FormControl>\n <RadioGroup defaultValue={defaultValue} onChange={handleSortChange}>\n {SORT_OPTIONS.map((option) => (\n <FormControlLabel\n key={option.id}\n value={option.id}\n control={<Radio />}\n label={option.label}\n />\n ))}\n </RadioGroup>\n </FormControl>\n </>\n );\n};\n\nexport default SortOptions;\n","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\nimport React from 'react';\r\nimport Typography from '@mui/material/Typography';\r\nimport Box from '@mui/material/Box';\r\nimport Autocomplete from '@mui/material/Autocomplete';\r\nimport TextField from '@mui/material/TextField';\r\nimport Popper, { PopperProps } from '@mui/material/Popper';\r\nimport {Tag} from '@/types/tag';\r\nimport Divider from '@mui/material/Divider';\r\nimport Chip from \"@/components/shared/Chip\";\r\n\r\ninterface TagsFilterProps {\r\n initialSelectedTags?: {\r\n mustHave: number[];\r\n mustNotHave: number[];\r\n shouldHaveAtLeastOne: number[];\r\n };\r\n onChange?: (selectedTags: {\r\n mustHave: number[];\r\n mustNotHave: number[];\r\n shouldHaveAtLeastOne: number[];\r\n }) => void;\r\n tags: Tag[];\r\n}\r\n\r\ntype TagCategory = 'mustHave' | 'mustNotHave' | 'shouldHaveAtLeastOne';\r\n\r\n/**\r\n * Component for filtering search results by tags\r\n * Uses Autocomplete for interactive tag selection similar to PlayerTagsEdit\r\n * Provides three separate sections for tags: must haves, must not haves, and should contain at least one\r\n */\r\nconst TagsFilter: React.FC<TagsFilterProps> = ({ \r\n onChange, tags: Tags = [], initialSelectedTags\r\n}) => {\r\n const [mustHaveTags, setMustHaveTags] = React.useState<number[]>(initialSelectedTags?.mustHave || []);\r\n const [mustNotHaveTags, setMustNotHaveTags] = React.useState<number[]>(initialSelectedTags?.mustNotHave || []);\r\n const [shouldHaveAtLeastOneTags, setShouldHaveAtLeastOneTags] = React.useState<number[]>(initialSelectedTags?.shouldHaveAtLeastOne || []);\r\n\r\n // Update state when initialSelectedTags changes\r\n React.useEffect(() => {\r\n if (initialSelectedTags) {\r\n setMustHaveTags(initialSelectedTags.mustHave || []);\r\n setMustNotHaveTags(initialSelectedTags.mustNotHave || []);\r\n setShouldHaveAtLeastOneTags(initialSelectedTags.shouldHaveAtLeastOne || []);\r\n }\r\n }, [initialSelectedTags]);\r\n\r\n Tags = !!Tags ? Tags : [];\r\n \r\n const [inputValues, setInputValues] = React.useState({\r\n mustHave: '',\r\n mustNotHave: '',\r\n shouldHaveAtLeastOne: ''\r\n });\r\n\r\n // Convert tags to format needed for Autocomplete\r\n const tagOptions = React.useMemo(() => {\r\n console.log(\"available tags: \" + JSON.stringify(Tags))\r\n console.log(!Tags)\r\n return Tags?.map(tag => ({\r\n value: tag.id,\r\n label: tag.label\r\n })) ?? [];\r\n }, [Tags]);\r\n\r\n const handleTagChange = (tagId: number, category: TagCategory) => {\r\n let newTags: number[] = [];\r\n \r\n switch (category) {\r\n case 'mustHave':\r\n newTags = mustHaveTags.includes(tagId)\r\n ? mustHaveTags.filter(id => id !== tagId)\r\n : [...mustHaveTags, tagId];\r\n setMustHaveTags(newTags);\r\n break;\r\n case 'mustNotHave':\r\n newTags = mustNotHaveTags.includes(tagId)\r\n ? mustNotHaveTags.filter(id => id !== tagId)\r\n : [...mustNotHaveTags, tagId];\r\n setMustNotHaveTags(newTags);\r\n break;\r\n case 'shouldHaveAtLeastOne':\r\n newTags = shouldHaveAtLeastOneTags.includes(tagId)\r\n ? shouldHaveAtLeastOneTags.filter(id => id !== tagId)\r\n : [...shouldHaveAtLeastOneTags, tagId];\r\n setShouldHaveAtLeastOneTags(newTags);\r\n break;\r\n }\r\n \r\n if (onChange) {\r\n onChange({\r\n mustHave: category === 'mustHave' ? newTags : mustHaveTags,\r\n mustNotHave: category === 'mustNotHave' ? newTags : mustNotHaveTags,\r\n shouldHaveAtLeastOne: category === 'shouldHaveAtLeastOne' ? newTags : shouldHaveAtLeastOneTags\r\n });\r\n }\r\n };\r\n\r\n // Render selected tags as labels with remove buttons\r\n const renderSelectedTags = (selectedTags: number[], category: TagCategory) => {\r\n const tagValues: Tag[] = [];\r\n\r\n Tags?.forEach((tag) => {\r\n if (selectedTags.includes(tag.id)) {\r\n tagValues.push(tag);\r\n }\r\n });\r\n\r\n if (tagValues.length === 0) {\r\n return null;\r\n }\r\n\r\n return (\r\n <Box sx={{ display: 'flex', flexWrap: 'wrap', gap: 1, mb: 2 }}>\r\n {tagValues.map((tag) => (\r\n <Chip\r\n key={tag.id}\r\n tag={tag}\r\n removeCallback={(tagId) => handleTagChange(tagId, category)}\r\n />\r\n ))}\r\n </Box>\r\n );\r\n };\r\n\r\n // Helper function to create an Autocomplete component for a specific category\r\n const createTagSelector = (category: TagCategory, label: string) => {\r\n const selectedTags = \r\n category === 'mustHave' \r\n ? mustHaveTags \r\n : category === 'mustNotHave' \r\n ? mustNotHaveTags \r\n : shouldHaveAtLeastOneTags;\r\n \r\n return (\r\n <>\r\n <Typography variant=\"subtitle1\" gutterBottom sx={{ mt: 2 }}>\r\n {label}\r\n </Typography>\r\n \r\n {renderSelectedTags(selectedTags, category)}\r\n \r\n <Autocomplete\r\n key={`${category}-${selectedTags.join('-')}`}\r\n options={tagOptions}\r\n filterOptions={(options, state) => {\r\n // Determine which tags to exclude based on the current category\r\n const tagsToExclude = new Set<number>();\r\n \r\n // Always exclude tags already selected in the current category\r\n selectedTags.forEach(id => tagsToExclude.add(id));\r\n \r\n // Exclude tags selected in other categories\r\n if (category !== 'mustHave') {\r\n mustHaveTags.forEach(id => tagsToExclude.add(id));\r\n }\r\n if (category !== 'mustNotHave') {\r\n mustNotHaveTags.forEach(id => tagsToExclude.add(id));\r\n }\r\n if (category !== 'shouldHaveAtLeastOne') {\r\n shouldHaveAtLeastOneTags.forEach(id => tagsToExclude.add(id));\r\n }\r\n \r\n return options\r\n .filter(\r\n (option) =>\r\n // Exclude options already selected in any category\r\n !tagsToExclude.has(option.value) &&\r\n // Filter based on user input\r\n option.label.toLowerCase().includes(state.inputValue.toLowerCase())\r\n )\r\n .slice(0, 3); // Show up to 3 results\r\n }}\r\n value={null} // Clearing the selected value immediately\r\n inputValue={inputValues[category]} // Bind the input value to state\r\n onInputChange={(event, newInputValue) => {\r\n // Check if this is clearing after selection\r\n if (event && event.type === 'change') {\r\n setInputValues({\r\n ...inputValues,\r\n [category]: newInputValue\r\n });\r\n }\r\n }}\r\n onChange={(event, newValue) => {\r\n if (newValue) {\r\n handleTagChange(newValue.value, category); // Update selected tags\r\n }\r\n // Clear the text box after selection\r\n setInputValues({\r\n ...inputValues,\r\n [category]: ''\r\n });\r\n }}\r\n slots={{ popper: CustomPopper }}\r\n renderInput={(params) => <TextField {...params} label={`Select ${label}`} />}\r\n />\r\n </>\r\n );\r\n };\r\n\r\n return (\r\n <>\r\n <Typography variant=\"h6\" gutterBottom>\r\n Tags\r\n </Typography>\r\n \r\n {createTagSelector('mustHave', 'Must Have Tags')}\r\n \r\n <Divider sx={{ my: 2 }} />\r\n \r\n {createTagSelector('mustNotHave', 'Must Not Have Tags')}\r\n \r\n <Divider sx={{ my: 2 }} />\r\n \r\n {createTagSelector('shouldHaveAtLeastOne', 'Should Contain At Least One Tag')}\r\n </>\r\n );\r\n};\r\n\r\n// Custom popper for dropdown placement\r\nconst CustomPopper = (props: PopperProps) => {\r\n return (\r\n <Popper\r\n {...props}\r\n modifiers={[\r\n {\r\n name: \"preventOverflow\",\r\n options: {\r\n boundary: \"viewport\", // Prevent the Popper from going outside the viewport\r\n },\r\n },\r\n {\r\n name: \"offset\",\r\n options: {\r\n offset: [0, -10], // Set negative vertical offset (adjust value as needed)\r\n },\r\n },\r\n ]}\r\n placement=\"top-start\" // Position the dropdown above the input field\r\n />\r\n );\r\n};\r\n\r\nexport default TagsFilter;","import React, { useEffect } from 'react';\r\nimport Typography from '@mui/material/Typography';\r\nimport TextField from '@mui/material/TextField';\r\nimport FormControlLabel from '@mui/material/FormControlLabel';\r\nimport Checkbox from '@mui/material/Checkbox';\r\nimport Box from '@mui/material/Box';\r\n\r\ninterface TextSearchCardProps {\r\n onChange?: (textSearch: { query: string; titleOnly: boolean }) => void;\r\n selectedTypes: string[];\r\n initialTextSearch?: {\r\n query: string;\r\n titleOnly: boolean;\r\n };\r\n}\r\n\r\n/**\r\n * Component for searching text within tables and events\r\n * Only shown when table or event types are selected\r\n */\r\nconst TextSearchCard: React.FC<TextSearchCardProps> = ({ onChange, selectedTypes, initialTextSearch }) => {\r\n const [query, setQuery] = React.useState<string>(initialTextSearch?.query || '');\r\n const [titleOnly, setTitleOnly] = React.useState<boolean>(initialTextSearch?.titleOnly || false);\r\n\r\n // Update state when initialTextSearch changes\r\n useEffect(() => {\r\n if (initialTextSearch) {\r\n setQuery(initialTextSearch.query || '');\r\n setTitleOnly(initialTextSearch.titleOnly || false);\r\n }\r\n }, [initialTextSearch]);\r\n\r\n // Check if we should show this card (only when table or event is selected)\r\n const shouldShow = selectedTypes.includes('table') || selectedTypes.includes('event');\r\n\r\n if (!shouldShow) {\r\n return null;\r\n }\r\n\r\n const handleQueryChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n const newQuery = e.target.value;\r\n setQuery(newQuery);\r\n\r\n if (onChange) {\r\n onChange({ query: newQuery, titleOnly });\r\n }\r\n };\r\n\r\n const handleTitleOnlyChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n const newTitleOnly = e.target.checked;\r\n setTitleOnly(newTitleOnly);\r\n\r\n if (onChange) {\r\n onChange({ query, titleOnly: newTitleOnly });\r\n }\r\n };\r\n\r\n return (\r\n <>\r\n <Typography variant=\"h6\" gutterBottom>\r\n Text Search\r\n </Typography>\r\n <Box sx={{ mb: 2 }}>\r\n <TextField\r\n fullWidth\r\n label=\"Search in title and description\"\r\n variant=\"outlined\"\r\n value={query}\r\n onChange={handleQueryChange}\r\n placeholder=\"Enter search terms...\"\r\n sx={{ mb: 1 }}\r\n />\r\n <FormControlLabel\r\n control={\r\n <Checkbox \r\n checked={titleOnly}\r\n onChange={handleTitleOnlyChange}\r\n />\r\n }\r\n label=\"Search in title only\"\r\n />\r\n </Box>\r\n </>\r\n );\r\n};\r\n\r\nexport default TextSearchCard;\r\n","\"use client\";\n\nimport React, { useEffect } from 'react';\nimport Typography from '@mui/material/Typography';\nimport FormGroup from '@mui/material/FormGroup';\nimport FormControlLabel from '@mui/material/FormControlLabel';\nimport Checkbox from '@mui/material/Checkbox';\n\ninterface TypeFilterProps {\n types: { id: string; label: string }[];\n initialSelectedTypes?: string[];\n onChange?: (selectedTypes: string[]) => void;\n}\n\n/**\n * Component for filtering search results by type (player, event, table)\n */\nconst TypeFilter: React.FC<TypeFilterProps> = ({ types, initialSelectedTypes = [], onChange }) => {\n const [selectedTypes, setSelectedTypes] = React.useState<string[]>(initialSelectedTypes);\n\n // Update state when initialSelectedTypes changes\n useEffect(() => {\n setSelectedTypes(initialSelectedTypes);\n }, [initialSelectedTypes]);\n\n const handleTypeChange = (typeId: string) => {\n const newSelectedTypes = selectedTypes.includes(typeId)\n ? selectedTypes.filter(id => id !== typeId)\n : [...selectedTypes, typeId];\n\n setSelectedTypes(newSelectedTypes);\n\n if (onChange) {\n onChange(newSelectedTypes);\n }\n };\n\n return (\n <>\n <Typography variant=\"h6\" gutterBottom>\n Type\n </Typography>\n <FormGroup>\n {types.map((type) => (\n <FormControlLabel\n key={type.id}\n control={\n <Checkbox \n checked={selectedTypes.includes(type.id)}\n onChange={() => handleTypeChange(type.id)}\n />\n }\n label={type.label}\n />\n ))}\n </FormGroup>\n </>\n );\n};\n\nexport default TypeFilter;\n"]}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
-
export { ExpiredTablesFilter, SortOptions, TagsFilter, TextSearchCard, TypeFilter } from '../Filters';
|
|
1
|
+
export { DistanceFilter, ExpiredTablesFilter, SortOptions, TagsFilter, TextSearchCard, TypeFilter } from '../Filters';
|
|
2
2
|
import 'react';
|
|
3
|
+
import '../../types/search.cjs';
|
|
3
4
|
import '../../types/tag.cjs';
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
-
export { ExpiredTablesFilter, SortOptions, TagsFilter, TextSearchCard, TypeFilter } from '../Filters';
|
|
1
|
+
export { DistanceFilter, ExpiredTablesFilter, SortOptions, TagsFilter, TextSearchCard, TypeFilter } from '../Filters';
|
|
2
2
|
import 'react';
|
|
3
|
+
import '../../types/search.js';
|
|
3
4
|
import '../../types/tag.js';
|