@mbpockets/shared-ui 0.1.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +681 -0
- package/README.md +85 -0
- package/dist/EventPage/editMode/index.cjs +573 -0
- package/dist/EventPage/editMode/index.cjs.map +1 -0
- package/dist/EventPage/editMode/index.d.cts +5 -0
- package/dist/EventPage/editMode/index.d.ts +5 -0
- package/dist/EventPage/editMode/index.mjs +559 -0
- package/dist/EventPage/editMode/index.mjs.map +1 -0
- package/dist/EventPage/editMode.cjs +573 -0
- package/dist/EventPage/editMode.cjs.map +1 -0
- package/dist/EventPage/editMode.d.cts +5 -0
- package/dist/EventPage/editMode.d.ts +5 -0
- package/dist/EventPage/editMode.mjs +559 -0
- package/dist/EventPage/editMode.mjs.map +1 -0
- package/dist/EventPage/index.cjs +1245 -0
- package/dist/EventPage/index.cjs.map +1 -0
- package/dist/EventPage/index.d.cts +6 -0
- package/dist/EventPage/index.d.ts +6 -0
- package/dist/EventPage/index.mjs +1215 -0
- package/dist/EventPage/index.mjs.map +1 -0
- package/dist/EventPage.cjs +1245 -0
- package/dist/EventPage.cjs.map +1 -0
- package/dist/EventPage.d.cts +42 -0
- package/dist/EventPage.d.ts +42 -0
- package/dist/EventPage.mjs +1215 -0
- package/dist/EventPage.mjs.map +1 -0
- package/dist/PlayerPage/index.cjs +370 -0
- package/dist/PlayerPage/index.cjs.map +1 -0
- package/dist/PlayerPage/index.d.cts +4 -0
- package/dist/PlayerPage/index.d.ts +4 -0
- package/dist/PlayerPage/index.mjs +358 -0
- package/dist/PlayerPage/index.mjs.map +1 -0
- package/dist/PlayerPage.cjs +370 -0
- package/dist/PlayerPage.cjs.map +1 -0
- package/dist/PlayerPage.d.cts +32 -0
- package/dist/PlayerPage.d.ts +32 -0
- package/dist/PlayerPage.mjs +358 -0
- package/dist/PlayerPage.mjs.map +1 -0
- package/dist/ProfilePage/index.cjs +136 -0
- package/dist/ProfilePage/index.cjs.map +1 -0
- package/dist/ProfilePage/index.d.cts +3 -0
- package/dist/ProfilePage/index.d.ts +3 -0
- package/dist/ProfilePage/index.mjs +124 -0
- package/dist/ProfilePage/index.mjs.map +1 -0
- package/dist/ProfilePage.cjs +136 -0
- package/dist/ProfilePage.cjs.map +1 -0
- package/dist/ProfilePage.d.cts +10 -0
- package/dist/ProfilePage.d.ts +10 -0
- package/dist/ProfilePage.mjs +124 -0
- package/dist/ProfilePage.mjs.map +1 -0
- package/dist/SearchPage/Filters/index.cjs +270 -0
- package/dist/SearchPage/Filters/index.cjs.map +1 -0
- package/dist/SearchPage/Filters/index.d.cts +4 -0
- package/dist/SearchPage/Filters/index.d.ts +4 -0
- package/dist/SearchPage/Filters/index.mjs +250 -0
- package/dist/SearchPage/Filters/index.mjs.map +1 -0
- package/dist/SearchPage/Filters.cjs +270 -0
- package/dist/SearchPage/Filters.cjs.map +1 -0
- package/dist/SearchPage/Filters.d.cts +31 -0
- package/dist/SearchPage/Filters.d.ts +31 -0
- package/dist/SearchPage/Filters.mjs +250 -0
- package/dist/SearchPage/Filters.mjs.map +1 -0
- package/dist/SearchPage/Results/index.cjs +226 -0
- package/dist/SearchPage/Results/index.cjs.map +1 -0
- package/dist/SearchPage/Results/index.d.cts +4 -0
- package/dist/SearchPage/Results/index.d.ts +4 -0
- package/dist/SearchPage/Results/index.mjs +212 -0
- package/dist/SearchPage/Results/index.mjs.map +1 -0
- package/dist/SearchPage/Results.cjs +226 -0
- package/dist/SearchPage/Results.cjs.map +1 -0
- package/dist/SearchPage/Results.d.cts +53 -0
- package/dist/SearchPage/Results.d.ts +53 -0
- package/dist/SearchPage/Results.mjs +212 -0
- package/dist/SearchPage/Results.mjs.map +1 -0
- package/dist/SearchPage/index.cjs +737 -0
- package/dist/SearchPage/index.cjs.map +1 -0
- package/dist/SearchPage/index.d.cts +7 -0
- package/dist/SearchPage/index.d.ts +7 -0
- package/dist/SearchPage/index.mjs +695 -0
- package/dist/SearchPage/index.mjs.map +1 -0
- package/dist/SearchPage.cjs +737 -0
- package/dist/SearchPage.cjs.map +1 -0
- package/dist/SearchPage.d.cts +110 -0
- package/dist/SearchPage.d.ts +110 -0
- package/dist/SearchPage.mjs +695 -0
- package/dist/SearchPage.mjs.map +1 -0
- package/dist/TablePage/GameTableProvider/index.cjs +26 -0
- package/dist/TablePage/GameTableProvider/index.cjs.map +1 -0
- package/dist/TablePage/GameTableProvider/index.d.cts +4 -0
- package/dist/TablePage/GameTableProvider/index.d.ts +4 -0
- package/dist/TablePage/GameTableProvider/index.mjs +19 -0
- package/dist/TablePage/GameTableProvider/index.mjs.map +1 -0
- package/dist/TablePage/GameTableProvider.cjs +26 -0
- package/dist/TablePage/GameTableProvider.cjs.map +1 -0
- package/dist/TablePage/GameTableProvider.d.cts +15 -0
- package/dist/TablePage/GameTableProvider.d.ts +15 -0
- package/dist/TablePage/GameTableProvider.mjs +19 -0
- package/dist/TablePage/GameTableProvider.mjs.map +1 -0
- package/dist/TablePage/ModalProvider/index.cjs +83 -0
- package/dist/TablePage/ModalProvider/index.cjs.map +1 -0
- package/dist/TablePage/ModalProvider/index.css +49 -0
- package/dist/TablePage/ModalProvider/index.css.map +1 -0
- package/dist/TablePage/ModalProvider/index.d.cts +3 -0
- package/dist/TablePage/ModalProvider/index.d.ts +3 -0
- package/dist/TablePage/ModalProvider/index.mjs +79 -0
- package/dist/TablePage/ModalProvider/index.mjs.map +1 -0
- package/dist/TablePage/ModalProvider.cjs +83 -0
- package/dist/TablePage/ModalProvider.cjs.map +1 -0
- package/dist/TablePage/ModalProvider.css +49 -0
- package/dist/TablePage/ModalProvider.css.map +1 -0
- package/dist/TablePage/ModalProvider.d.cts +17 -0
- package/dist/TablePage/ModalProvider.d.ts +17 -0
- package/dist/TablePage/ModalProvider.mjs +79 -0
- package/dist/TablePage/ModalProvider.mjs.map +1 -0
- package/dist/TablePage/index.cjs +606 -0
- package/dist/TablePage/index.cjs.map +1 -0
- package/dist/TablePage/index.css +49 -0
- package/dist/TablePage/index.css.map +1 -0
- package/dist/TablePage/index.d.cts +10 -0
- package/dist/TablePage/index.d.ts +10 -0
- package/dist/TablePage/index.mjs +579 -0
- package/dist/TablePage/index.mjs.map +1 -0
- package/dist/TablePage/players/index.cjs +85 -0
- package/dist/TablePage/players/index.cjs.map +1 -0
- package/dist/TablePage/players/index.d.cts +4 -0
- package/dist/TablePage/players/index.d.ts +4 -0
- package/dist/TablePage/players/index.mjs +76 -0
- package/dist/TablePage/players/index.mjs.map +1 -0
- package/dist/TablePage/players.cjs +85 -0
- package/dist/TablePage/players.cjs.map +1 -0
- package/dist/TablePage/players.d.cts +22 -0
- package/dist/TablePage/players.d.ts +22 -0
- package/dist/TablePage/players.mjs +76 -0
- package/dist/TablePage/players.mjs.map +1 -0
- package/dist/TablePage.cjs +606 -0
- package/dist/TablePage.cjs.map +1 -0
- package/dist/TablePage.css +49 -0
- package/dist/TablePage.css.map +1 -0
- package/dist/TablePage.d.cts +54 -0
- package/dist/TablePage.d.ts +54 -0
- package/dist/TablePage.mjs +579 -0
- package/dist/TablePage.mjs.map +1 -0
- package/dist/common/Modal/index.cjs +64 -0
- package/dist/common/Modal/index.cjs.map +1 -0
- package/dist/common/Modal/index.css +49 -0
- package/dist/common/Modal/index.css.map +1 -0
- package/dist/common/Modal/index.d.cts +2 -0
- package/dist/common/Modal/index.d.ts +2 -0
- package/dist/common/Modal/index.mjs +62 -0
- package/dist/common/Modal/index.mjs.map +1 -0
- package/dist/common/Modal.cjs +64 -0
- package/dist/common/Modal.cjs.map +1 -0
- package/dist/common/Modal.css +49 -0
- package/dist/common/Modal.css.map +1 -0
- package/dist/common/Modal.d.cts +9 -0
- package/dist/common/Modal.d.ts +9 -0
- package/dist/common/Modal.mjs +62 -0
- package/dist/common/Modal.mjs.map +1 -0
- package/dist/common/index.cjs +210 -0
- package/dist/common/index.cjs.map +1 -0
- package/dist/common/index.css +49 -0
- package/dist/common/index.css.map +1 -0
- package/dist/common/index.d.cts +4 -0
- package/dist/common/index.d.ts +4 -0
- package/dist/common/index.mjs +194 -0
- package/dist/common/index.mjs.map +1 -0
- package/dist/common.cjs +210 -0
- package/dist/common.cjs.map +1 -0
- package/dist/common.css +49 -0
- package/dist/common.css.map +1 -0
- package/dist/common.d.cts +28 -0
- package/dist/common.d.ts +28 -0
- package/dist/common.mjs +194 -0
- package/dist/common.mjs.map +1 -0
- package/dist/index-D7WHhl3Q.d.ts +64 -0
- package/dist/index-DC0kK3aC.d.cts +64 -0
- package/dist/index.cjs +2608 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.css +49 -0
- package/dist/index.css.map +1 -0
- package/dist/index.d.cts +20 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.mjs +2529 -0
- package/dist/index.mjs.map +1 -0
- package/dist/mocks/EventDB.cjs +171 -0
- package/dist/mocks/EventDB.cjs.map +1 -0
- package/dist/mocks/EventDB.d.cts +6 -0
- package/dist/mocks/EventDB.d.ts +6 -0
- package/dist/mocks/EventDB.mjs +169 -0
- package/dist/mocks/EventDB.mjs.map +1 -0
- package/dist/mocks/Events.cjs +59 -0
- package/dist/mocks/Events.cjs.map +1 -0
- package/dist/mocks/Events.d.cts +13 -0
- package/dist/mocks/Events.d.ts +13 -0
- package/dist/mocks/Events.mjs +57 -0
- package/dist/mocks/Events.mjs.map +1 -0
- package/dist/mocks/Players.cjs +75 -0
- package/dist/mocks/Players.cjs.map +1 -0
- package/dist/mocks/Players.d.cts +15 -0
- package/dist/mocks/Players.d.ts +15 -0
- package/dist/mocks/Players.mjs +73 -0
- package/dist/mocks/Players.mjs.map +1 -0
- package/dist/mocks/SearchResults.cjs +143 -0
- package/dist/mocks/SearchResults.cjs.map +1 -0
- package/dist/mocks/SearchResults.d.cts +30 -0
- package/dist/mocks/SearchResults.d.ts +30 -0
- package/dist/mocks/SearchResults.mjs +137 -0
- package/dist/mocks/SearchResults.mjs.map +1 -0
- package/dist/mocks/Tables.cjs +133 -0
- package/dist/mocks/Tables.cjs.map +1 -0
- package/dist/mocks/Tables.d.cts +38 -0
- package/dist/mocks/Tables.d.ts +38 -0
- package/dist/mocks/Tables.mjs +131 -0
- package/dist/mocks/Tables.mjs.map +1 -0
- package/dist/mocks/Tags.cjs +142 -0
- package/dist/mocks/Tags.cjs.map +1 -0
- package/dist/mocks/Tags.d.cts +5 -0
- package/dist/mocks/Tags.d.ts +5 -0
- package/dist/mocks/Tags.mjs +140 -0
- package/dist/mocks/Tags.mjs.map +1 -0
- package/dist/mocks/index.cjs +566 -0
- package/dist/mocks/index.cjs.map +1 -0
- package/dist/mocks/index.d.cts +8 -0
- package/dist/mocks/index.d.ts +8 -0
- package/dist/mocks/index.mjs +555 -0
- package/dist/mocks/index.mjs.map +1 -0
- package/dist/mocks.cjs +566 -0
- package/dist/mocks.cjs.map +1 -0
- package/dist/mocks.d.cts +8 -0
- package/dist/mocks.d.ts +8 -0
- package/dist/mocks.mjs +555 -0
- package/dist/mocks.mjs.map +1 -0
- package/dist/types/event.cjs +4 -0
- package/dist/types/event.cjs.map +1 -0
- package/dist/types/event.d.cts +37 -0
- package/dist/types/event.d.ts +37 -0
- package/dist/types/event.mjs +3 -0
- package/dist/types/event.mjs.map +1 -0
- package/dist/types/index.cjs +4 -0
- package/dist/types/index.cjs.map +1 -0
- package/dist/types/index.d.cts +6 -0
- package/dist/types/index.d.ts +6 -0
- package/dist/types/index.mjs +3 -0
- package/dist/types/index.mjs.map +1 -0
- package/dist/types/player.cjs +4 -0
- package/dist/types/player.cjs.map +1 -0
- package/dist/types/player.d.cts +20 -0
- package/dist/types/player.d.ts +20 -0
- package/dist/types/player.mjs +3 -0
- package/dist/types/player.mjs.map +1 -0
- package/dist/types/search.cjs +4 -0
- package/dist/types/search.cjs.map +1 -0
- package/dist/types/search.d.cts +20 -0
- package/dist/types/search.d.ts +20 -0
- package/dist/types/search.mjs +3 -0
- package/dist/types/search.mjs.map +1 -0
- package/dist/types/table.cjs +4 -0
- package/dist/types/table.cjs.map +1 -0
- package/dist/types/table.d.cts +21 -0
- package/dist/types/table.d.ts +21 -0
- package/dist/types/table.mjs +3 -0
- package/dist/types/table.mjs.map +1 -0
- package/dist/types/tables.cjs +4 -0
- package/dist/types/tables.cjs.map +1 -0
- package/dist/types/tables.d.cts +21 -0
- package/dist/types/tables.d.ts +21 -0
- package/dist/types/tables.mjs +3 -0
- package/dist/types/tables.mjs.map +1 -0
- package/dist/types/tag.cjs +4 -0
- package/dist/types/tag.cjs.map +1 -0
- package/dist/types/tag.d.cts +14 -0
- package/dist/types/tag.d.ts +14 -0
- package/dist/types/tag.mjs +3 -0
- package/dist/types/tag.mjs.map +1 -0
- package/dist/types.cjs +4 -0
- package/dist/types.cjs.map +1 -0
- package/dist/types.d.cts +6 -0
- package/dist/types.d.ts +6 -0
- package/dist/types.mjs +3 -0
- package/dist/types.mjs.map +1 -0
- package/package.json +117 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/EventPage/editMode/EventEditContext.tsx","../src/components/shared/TagComponents.tsx","../src/components/EventPage/editMode/EventBannerEdit.tsx","../src/components/EventPage/EventBasicInfo.tsx","../src/components/EventPage/editMode/EventBasicInfoEdit.tsx","../src/components/EventPage/EventBanner.tsx","../src/components/SearchPage/Results/BaseSearchResultCard.tsx","../src/components/SearchPage/Results/PlayerResultCard.tsx","../src/components/SearchPage/Results/TableResultCard.tsx","../src/components/SearchPage/Results/EventResultCard.tsx","../src/components/SearchPage/ResultsContainer.tsx","../src/components/SearchPage/ScrollableResultsList.tsx","../src/components/SearchPage/TablesScrollableList.tsx","../src/components/EventPage/EventTablesCard.tsx","../src/components/EventPage/EventPageLayout.tsx"],"names":["jsx","useState","Grid","jsxs","Box","Button","Card","CardContent","Tooltip","IconButton","CircularProgress","Typography","TextField","Fragment"],"mappings":"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","file":"EventPage.mjs","sourcesContent":["\"use client\"\r\nimport React, { createContext, useContext, ReactNode, useState, useEffect } from \"react\";\r\nimport { EventEditContextValue, EventDB } from \"@/types/event\";\r\n\r\ntype ExtendedEventEditContextValue = EventEditContextValue & {\r\n event: EventDB | null;\r\n};\r\n\r\n/**\r\n * Default Values for stability\r\n */\r\nconst defaultValue: ExtendedEventEditContextValue = {\r\n isOwner: false,\r\n updateEvent: async () => false,\r\n updateImages: () => {},\r\n event: null,\r\n}\r\n\r\n/**\r\n * Default call (safe fallback)\r\n * Components using this without a provider will behave as non-owner.\r\n */\r\nconst EventEditContext = createContext<ExtendedEventEditContextValue>(defaultValue);\r\n\r\n/**\r\n * Provider props\r\n */\r\ntype EventEditProviderProps = {\r\n value?: Partial<EventEditContextValue>;\r\n initialEvent: EventDB;\r\n children: ReactNode;\r\n};\r\n\r\n/**\r\n * Provider component\r\n */\r\nexport function EventEditProvider({\r\n value,\r\n initialEvent,\r\n children,\r\n }: EventEditProviderProps) {\r\n const [event, setEvent] = useState<EventDB>(initialEvent);\r\n\r\n // Update internal state if initialEvent changes (e.g. from parent fetch)\r\n useEffect(() => {\r\n setEvent(initialEvent);\r\n }, [initialEvent]);\r\n\r\n const handleUpdateEvent = async (patch: Partial<EventDB>) => {\r\n if (value?.updateEvent) {\r\n const result = value.updateEvent(patch);\r\n \r\n // Handle both Promise<boolean> and void/boolean return\r\n if (result instanceof Promise) {\r\n const success = await result;\r\n if (success) {\r\n setEvent(prev => ({ ...prev, ...patch }));\r\n }\r\n return success;\r\n } else {\r\n // If it's a boolean, use it. If void, assume true.\r\n const success = result === false ? false : true;\r\n if (success) {\r\n setEvent(prev => ({ ...prev, ...patch }));\r\n }\r\n return success;\r\n }\r\n }\r\n return false;\r\n };\r\n\r\n /**\r\n * automatically fill in default values if data is missing or incomplete\r\n */\r\n const mergedValue: ExtendedEventEditContextValue = {\r\n ...defaultValue,\r\n ...value,\r\n event,\r\n updateEvent: handleUpdateEvent,\r\n }\r\n\r\n return (\r\n <EventEditContext.Provider value={mergedValue}>\r\n {children}\r\n </EventEditContext.Provider>\r\n );\r\n}\r\n\r\n/**\r\n * Hook for consuming context\r\n */\r\nexport function useEventEdit(): ExtendedEventEditContextValue {\r\n const context = useContext(EventEditContext);\r\n\r\n // Optional guard (useful during development)\r\n if (!context) {\r\n throw new Error(\"useEventEdit must be used within an EventEditProvider\");\r\n }\r\n\r\n return context;\r\n}","\"use client\";\n\nimport React from \"react\";\nimport type { Tag } from \"@/types/tag\";\n\nexport function generateTagsDisplay(tag: Tag) {\n return (\n <span\n key={tag.id}\n className=\"inline-block text-sm px-3 py-1 rounded-full outline-black outline-2 font-outlined\"\n style={{\n marginTop:\"6px\",\n marginRight: \"6px\",\n marginBottom: \"6px\",\n background: tag.color || '#bfbcbb',\n color: \"white\",\n textShadow: \"black 0.2em 0.2em 0.4em\"\n }}\n >\n {tag.label}\n </span>\n )\n}\n\nexport function renderTagsFromIds(ids: number[] | undefined, legalTags: Tag[]) {\n if (!ids || !legalTags || legalTags.length === 0) { return ( <></>) }\n const validTags = ids\n .map((id) => legalTags.find((tag) => tag.id === id))\n .filter((tag): tag is Tag => Boolean(tag));\n\n return validTags.map((tag) => generateTagsDisplay(tag));\n}\n","\"use client\"\r\nimport React, { useState } from \"react\";\r\nimport { useEventEdit } from \"./EventEditContext\";\r\nimport type { EventBannerEditPayload } from \"../EventBanner\";\r\nimport { \r\n Box, \r\n Button, \r\n Grid, \r\n TextField, \r\n IconButton, \r\n Tooltip, \r\n Dialog, \r\n DialogTitle, \r\n DialogContent, \r\n DialogActions,\r\n CircularProgress \r\n} from \"@mui/material\";\r\nimport DeleteIcon from \"@mui/icons-material/Delete\";\r\nimport EditIcon from \"@mui/icons-material/Edit\";\r\nimport AddIcon from \"@mui/icons-material/Add\";\r\nimport ColorizeIcon from \"@mui/icons-material/Colorize\";\r\nimport { generateTagsDisplay } from \"@/components/shared/TagComponents\";\r\n\r\ntype EventBannerEditProps = {\r\n initialValue: EventBannerEditPayload;\r\n onCancel: () => void;\r\n onSave: (payload: Partial<EventBannerEditPayload>) => Promise<void> | void;\r\n};\r\n\r\ntype LinkEditState = {\r\n index: number;\r\n text: string;\r\n url: string;\r\n} | null;\r\n\r\nexport default function EventBannerEdit({\r\n initialValue,\r\n onCancel,\r\n onSave,\r\n }: EventBannerEditProps) {\r\n const { updateImages } = useEventEdit();\r\n const [title, setTitle] = useState(initialValue.title);\r\n const [bannerColor, setBannerColor] = useState(initialValue.bannerColor || \"\");\r\n const [desktopBanner, setDesktopBanner] = useState(initialValue.bannerUrl.desktop);\r\n const [mobileBanner, setMobileBanner] = useState(initialValue.bannerUrl.mobile || \"\");\r\n const [links, setLinks] = useState(initialValue.links);\r\n const [linkToEdit, setLinkToEdit] = useState<LinkEditState>(null);\r\n const [isSaving, setIsSaving] = useState(false);\r\n\r\n const backgroundColor = bannerColor || \"linear-gradient(135deg, rgba(25,118,210,0.8), rgba(25,118,210,1))\";\r\n\r\n const handleSave = async () => {\r\n setIsSaving(true);\r\n try {\r\n const patch: Partial<EventBannerEditPayload> = {};\r\n\r\n if (title !== initialValue.title) {\r\n patch.title = title;\r\n }\r\n\r\n const currentBannerColor = bannerColor || undefined;\r\n const initialBannerColor = initialValue.bannerColor || undefined;\r\n if (currentBannerColor !== initialBannerColor) {\r\n patch.bannerColor = currentBannerColor;\r\n }\r\n\r\n const currentMobile = mobileBanner || undefined;\r\n const initialMobile = initialValue.bannerUrl.mobile || undefined;\r\n if (desktopBanner !== initialValue.bannerUrl.desktop || currentMobile !== initialMobile) {\r\n patch.bannerUrl = {\r\n desktop: desktopBanner,\r\n mobile: currentMobile,\r\n };\r\n }\r\n\r\n // Deep comparison for links\r\n if (JSON.stringify(links) !== JSON.stringify(initialValue.links)) {\r\n patch.links = links;\r\n }\r\n\r\n if (Object.keys(patch).length > 0) {\r\n await onSave(patch);\r\n } else {\r\n onCancel(); // Nothing changed\r\n }\r\n } catch (error) {\r\n console.error(\"Failed to save banner changes\", error);\r\n } finally {\r\n setIsSaving(false);\r\n }\r\n };\r\n\r\n const removeLink = (index: number) => {\r\n setLinks(links.filter((_, i) => i !== index));\r\n };\r\n\r\n const openEditLink = (index: number) => {\r\n setLinkToEdit({\r\n index,\r\n text: links[index].text,\r\n url: links[index].url\r\n });\r\n };\r\n\r\n const saveEditedLink = () => {\r\n if (linkToEdit) {\r\n const newLinks = [...links];\r\n if (linkToEdit.index === -1) {\r\n newLinks.push({ text: linkToEdit.text, url: linkToEdit.url });\r\n } else {\r\n newLinks[linkToEdit.index] = { text: linkToEdit.text, url: linkToEdit.url };\r\n }\r\n setLinks(newLinks);\r\n setLinkToEdit(null);\r\n }\r\n };\r\n\r\n const handleEyeDropper = async () => {\r\n if (!(window as any).EyeDropper) {\r\n alert(\"EyeDropper API is not supported in this browser\");\r\n return;\r\n }\r\n const eyeDropper = new (window as any).EyeDropper();\r\n try {\r\n const result = await eyeDropper.open();\r\n setBannerColor(result.sRGBHex);\r\n } catch (e) {\r\n console.log(\"EyeDropper cancelled or failed\", e);\r\n }\r\n };\r\n\r\n return (\r\n <Box sx={{ position: 'relative', width: '100%' }}>\r\n <Grid\r\n sx={{\r\n background: backgroundColor,\r\n paddingTop: \"8px\",\r\n position: 'relative',\r\n border: '2px dashed rgba(255,255,255,0.5)',\r\n borderRadius: 1\r\n }}\r\n >\r\n {/* SETTINGS OVERLAY */}\r\n <Box sx={{ \r\n position: 'absolute', \r\n top: 8, \r\n left: 8, \r\n zIndex: 10, \r\n display: 'flex', \r\n flexDirection: 'column', \r\n gap: 1,\r\n bgcolor: 'rgba(0,0,0,0.5)',\r\n p: 1,\r\n borderRadius: 1,\r\n width: '300px'\r\n }}>\r\n <TextField\r\n label=\"Title\"\r\n variant=\"outlined\"\r\n size=\"small\"\r\n value={title}\r\n onChange={(e) => setTitle(e.target.value)}\r\n sx={{ input: { color: 'white' }, label: { color: 'rgba(255,255,255,0.7)' }, '& .MuiOutlinedInput-root': { '& fieldset': { borderColor: 'rgba(255,255,255,0.3)' } } }}\r\n />\r\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>\r\n <TextField\r\n label=\"Banner Color\"\r\n variant=\"outlined\"\r\n size=\"small\"\r\n value={bannerColor}\r\n onChange={(e) => setBannerColor(e.target.value)}\r\n placeholder=\"#HEX or linear-gradient(...)\"\r\n sx={{ flex: 1, input: { color: 'white' }, label: { color: 'rgba(255,255,255,0.7)' }, '& .MuiOutlinedInput-root': { '& fieldset': { borderColor: 'rgba(255,255,255,0.3)' } } }}\r\n />\r\n <Tooltip title=\"Eye Dropper\">\r\n <IconButton \r\n size=\"small\" \r\n onClick={handleEyeDropper}\r\n sx={{ color: 'white', bgcolor: 'rgba(255,255,255,0.1)', '&:hover': { bgcolor: 'rgba(255,255,255,0.2)' } }}\r\n >\r\n <ColorizeIcon fontSize=\"small\" />\r\n </IconButton>\r\n </Tooltip>\r\n <input\r\n type=\"color\"\r\n value={bannerColor.startsWith('#') ? bannerColor : '#1976d2'}\r\n onChange={(e) => setBannerColor(e.target.value)}\r\n style={{ width: '40px', height: '40px', padding: 0, border: 'none', background: 'transparent', cursor: 'pointer' }}\r\n />\r\n </Box>\r\n <Box sx={{ display: 'flex', gap: 1 }}>\r\n <Button \r\n variant=\"contained\" \r\n size=\"small\" \r\n fullWidth \r\n onClick={updateImages}\r\n >\r\n Update Images\r\n </Button>\r\n </Box>\r\n </Box>\r\n\r\n {/* VISUAL PREVIEW */}\r\n <Box\r\n sx={{\r\n width: '100%',\r\n height: 'auto',\r\n maxHeight: '250px',\r\n overflow: 'hidden',\r\n display: 'flex',\r\n justifyContent: 'center',\r\n opacity: 0.8\r\n }}\r\n >\r\n <Box\r\n component=\"img\"\r\n src={desktopBanner}\r\n alt={title}\r\n sx={{\r\n width: '100%',\r\n height: 'auto',\r\n objectFit: 'contain',\r\n }}\r\n />\r\n </Box>\r\n\r\n <Grid\r\n display=\"flex\"\r\n justifyContent=\"center\"\r\n alignItems=\"center\"\r\n paddingTop=\"3px\"\r\n paddingBottom=\"3px\"\r\n sx={{ gap: 1.5, flexWrap: 'wrap' }}\r\n >\r\n {/* Placeholder for Stats (not editable here as per instructions) */}\r\n <Box sx={{ px: 1.5, py: 0.5, color: \"rgba(255,255,255,0.5)\", bgcolor: \"rgba(0,0,0,0.4)\", borderRadius: 2, border: \"1px dashed rgba(255,255,255,0.2)\" }}>\r\n Stats Placeholder\r\n </Box>\r\n\r\n {generateTagsDisplay(initialValue.eventTag)}\r\n\r\n {links.map((link, index) => (\r\n <Box\r\n key={index}\r\n sx={{\r\n position: 'relative',\r\n display: 'flex',\r\n alignItems: 'center',\r\n px: 1.5,\r\n py: 0.5,\r\n color: \"#fff\",\r\n bgcolor: \"rgba(0,0,0,0.7)\",\r\n borderRadius: 2,\r\n boxShadow: \"0 8px 16px rgba(0,0,0,0.25), 0 2px 4px rgba(0,0,0,0.15)\",\r\n border: \"1px solid rgba(255,255,255,0.25)\",\r\n backdropFilter: \"blur(6px)\",\r\n fontWeight: 700,\r\n letterSpacing: 0.2,\r\n }}\r\n >\r\n {link.text}\r\n <Box sx={{ ml: 1, display: 'flex' }}>\r\n <Tooltip title=\"Edit Link\">\r\n <IconButton size=\"small\" onClick={() => openEditLink(index)} sx={{ color: 'white', p: 0.2 }}>\r\n <EditIcon fontSize=\"inherit\" />\r\n </IconButton>\r\n </Tooltip>\r\n <Tooltip title=\"Remove Link\">\r\n <IconButton size=\"small\" onClick={() => removeLink(index)} sx={{ color: 'error.light', p: 0.2 }}>\r\n <DeleteIcon fontSize=\"inherit\" />\r\n </IconButton>\r\n </Tooltip>\r\n </Box>\r\n </Box>\r\n ))}\r\n\r\n <Button\r\n variant=\"outlined\"\r\n size=\"small\"\r\n startIcon={<AddIcon />}\r\n onClick={() => setLinkToEdit({ index: -1, text: \"\", url: \"\" })}\r\n sx={{\r\n color: 'white',\r\n borderColor: 'rgba(255,255,255,0.5)',\r\n borderRadius: 2,\r\n '&:hover': { borderColor: 'white', bgcolor: 'rgba(255,255,255,0.1)' }\r\n }}\r\n >\r\n Add Link\r\n </Button>\r\n </Grid>\r\n </Grid>\r\n\r\n {/* ACTION BUTTONS */}\r\n <Box sx={{ display: 'flex', justifyContent: 'flex-end', gap: 2, mt: 2 }}>\r\n <Button onClick={onCancel} color=\"inherit\" disabled={isSaving}>Cancel</Button>\r\n <Button \r\n onClick={handleSave} \r\n variant=\"contained\" \r\n color=\"primary\" \r\n disabled={isSaving}\r\n startIcon={isSaving ? <CircularProgress size={20} color=\"inherit\" /> : null}\r\n >\r\n {isSaving ? \"Saving...\" : \"Save Changes\"}\r\n </Button>\r\n </Box>\r\n\r\n {/* LINK EDIT DIALOG */}\r\n <Dialog open={linkToEdit !== null} onClose={() => setLinkToEdit(null)}>\r\n <DialogTitle>{linkToEdit?.index === -1 ? \"Add Link\" : \"Edit Link\"}</DialogTitle>\r\n <DialogContent>\r\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 2, pt: 1, width: '400px' }}>\r\n <TextField\r\n label=\"Link Text\"\r\n fullWidth\r\n value={linkToEdit?.text || \"\"}\r\n onChange={(e) => setLinkToEdit(prev => prev ? { ...prev, text: e.target.value } : null)}\r\n />\r\n <TextField\r\n label=\"Link URL\"\r\n fullWidth\r\n value={linkToEdit?.url || \"\"}\r\n onChange={(e) => setLinkToEdit(prev => prev ? { ...prev, url: e.target.value } : null)}\r\n />\r\n </Box>\r\n </DialogContent>\r\n <DialogActions>\r\n <Button onClick={() => setLinkToEdit(null)}>Cancel</Button>\r\n <Button onClick={saveEditedLink} variant=\"contained\">Confirm</Button>\r\n </DialogActions>\r\n </Dialog>\r\n </Box>\r\n );\r\n}","\"use client\"\r\nimport React, { useState } from \"react\";\r\nimport {Card, CardContent, Typography, Button} from \"@mui/material\";\r\nimport Box from \"@mui/material/Box\";\r\nimport Grid from \"@mui/material/Grid\";\r\nimport { useEventEdit } from \"./editMode/EventEditContext\";\r\nimport EventBasicInfoEdit from \"./editMode/EventBasicInfoEdit\";\r\n\r\nexport type EventBasicInfoProps = {\r\n locationId: string,\r\n description?: string,\r\n startingDate?: Date | string,\r\n endingDate?: Date | string,\r\n timeInfo?: string,\r\n timezone?: string\r\n}\r\n\r\nexport const CANDIDATE_TIMEZONES = [\r\n \"America/New_York\",\r\n \"America/Chicago\",\r\n \"America/Denver\",\r\n \"America/Los_Angeles\",\r\n \"America/Anchorage\",\r\n \"America/Adak\",\r\n \"Pacific/Honolulu\",\r\n \"UTC\"\r\n];\r\n\r\nexport default function EventBasicInfo(props: EventBasicInfoProps) {\r\n const { isOwner, updateEvent, event } = useEventEdit();\r\n const [isEditing, setIsEditing] = useState(false);\r\n\r\n // Fallback to context if props are not provided\r\n const description = props.description ?? event?.description ?? \"\";\r\n const startingDate = props.startingDate ?? event?.startingDate;\r\n const endingDate = props.endingDate ?? event?.endingDate;\r\n const timeInfo = props.timeInfo ?? event?.date ?? \"\";\r\n const timezone = props.timezone ?? event?.timezone ?? \"UTC\";\r\n\r\n if (isEditing) {\r\n return (\r\n <EventBasicInfoEdit\r\n initialValue={{\r\n description: description,\r\n startingDate: typeof startingDate === 'string' ? startingDate : startingDate?.toISOString(),\r\n endingDate: typeof endingDate === 'string' ? endingDate : endingDate?.toISOString(),\r\n date: timeInfo,\r\n timezone: timezone\r\n }}\r\n onCancel={() => setIsEditing(false)}\r\n onSave={async (payload) => {\r\n const success = await updateEvent(payload);\r\n if (success) {\r\n setIsEditing(false);\r\n }\r\n }}\r\n />\r\n );\r\n }\r\n\r\n return (\r\n <EventBasicInfoView\r\n {...props}\r\n description={description}\r\n startingDate={startingDate}\r\n endingDate={endingDate}\r\n timeInfo={timeInfo}\r\n timezone={timezone}\r\n isOwner={isOwner}\r\n onEdit={() => setIsEditing(true)}\r\n />\r\n );\r\n}\r\n\r\ntype EventBasicInfoViewProps = {\r\n locationId: string;\r\n description: string;\r\n startingDate?: Date | string;\r\n endingDate?: Date | string;\r\n timeInfo: string;\r\n timezone: string;\r\n isOwner: boolean;\r\n onEdit: () => void;\r\n};\r\n\r\nfunction EventBasicInfoView({description, locationId, startingDate, endingDate, timeInfo, timezone, isOwner, onEdit} : EventBasicInfoViewProps) {\r\n return (\r\n <Grid sx={{ position: 'relative' }}>\r\n <Card style={{\r\n boxShadow: '0px 4px 10px rgba(0, 0, 0, 0.1)',\r\n background: 'linear-gradient(135deg, rgba(225, 225, 225, 1), rgba(250, 250, 250, 1))',\r\n }}>\r\n <CardContent>\r\n {isOwner && (\r\n <Box sx={{ display: 'flex', justifyContent: 'flex-end' }}>\r\n <Button size=\"small\" onClick={onEdit} variant=\"outlined\">Edit</Button>\r\n </Box>\r\n )}\r\n {generateTimeInfo(timeInfo, timezone || \"UTC\", startingDate, endingDate)}\r\n <Typography variant={\"h5\"} paddingTop={2}>\r\n About:\r\n </Typography>\r\n <Typography sx={{whiteSpace: 'pre-wrap'}} paddingTop={1}>\r\n {description}\r\n </Typography>\r\n {getLocation(locationId)}\r\n </CardContent>\r\n </Card>\r\n </Grid>\r\n )\r\n}\r\n\r\n\r\nconst generateTimeInfo = function (timeInfo: string, timezone: string, startingDate?: Date | string, endingDate?: Date | string) {\r\n\r\n const formatDateTime = (dateInput: Date | string) => {\r\n const d = typeof dateInput === 'string' ? new Date(dateInput) : dateInput;\r\n if (!d || isNaN(d.getTime())) return \"\";\r\n\r\n try {\r\n return new Intl.DateTimeFormat('en-US', {\r\n month: 'short',\r\n day: 'numeric',\r\n year: 'numeric',\r\n hour: 'numeric',\r\n minute: '2-digit',\r\n hour12: true,\r\n timeZone: timezone,\r\n timeZoneName: 'shortGeneric'\r\n }).format(d).replace(',', ' @');\r\n } catch (e) {\r\n // Fallback for invalid timezones\r\n return d.toUTCString();\r\n }\r\n }\r\n\r\n let rangeText: string | null = null;\r\n if (startingDate && endingDate) {\r\n rangeText = `From ${formatDateTime(startingDate)}\\nUntil ${formatDateTime(endingDate)}`;\r\n } else if (startingDate) {\r\n rangeText = `starting ${formatDateTime(startingDate)}`;\r\n } else if (endingDate) {\r\n rangeText = `until ${formatDateTime(endingDate)}`;\r\n }\r\n\r\n return (\r\n <Box sx={{ mt: 2 }}>\r\n {rangeText && (\r\n <Typography variant={\"body1\"} fontSize={\"x-large\"} fontWeight={\"bold\"} sx={{whiteSpace:\"pre-wrap\"}}>\r\n {rangeText}\r\n </Typography>\r\n )}\r\n {timeInfo && (\r\n <Box sx={{ mt: 1 }}>\r\n <Typography variant={\"h5\"}>\r\n Hours of Operation:\r\n </Typography>\r\n <Typography variant={\"body1\"} sx={{whiteSpace:\"pre-wrap\"}}>\r\n {timeInfo}\r\n </Typography>\r\n </Box>\r\n )}\r\n </Box>\r\n )\r\n}\r\n\r\n\r\n/*\r\n DUMMY FUNCTIONS -- these relate heavily to sensitive data, so the functions below are simply placeholders\r\n */\r\n\r\nconst getLocation = function(locationId: string) {\r\n return (<Box sx={{\r\n width: '100%',\r\n p: 1.5,\r\n borderRadius: 2,\r\n boxShadow: '0px 4px 10px rgba(0, 0, 0, 0.1)',\r\n background: 'linear-gradient(135deg, rgba(180, 180,180, 1), rgba(225, 225, 225, 0.8))',\r\n mt: 2\r\n }}>\r\n Location Data goes here\r\n </Box>\r\n )\r\n}","\"use client\"\r\nimport React, { useState } from \"react\";\r\nimport { \r\n Box, \r\n Button, \r\n TextField, \r\n Grid, \r\n Card, \r\n CardContent, \r\n Typography, \r\n IconButton, \r\n Tooltip, \r\n Select, \r\n MenuItem, \r\n FormControl, \r\n InputLabel,\r\n CircularProgress \r\n} from \"@mui/material\";\r\nimport CancelIcon from \"@mui/icons-material/Cancel\";\r\nimport CheckCircleIcon from \"@mui/icons-material/CheckCircle\";\r\nimport { CANDIDATE_TIMEZONES } from \"../EventBasicInfo\";\r\n\r\nexport type EventBasicInfoEditPayload = {\r\n description: string;\r\n startingDate?: string;\r\n endingDate?: string;\r\n date: string; // timeInfo\r\n timezone: string;\r\n};\r\n\r\ntype EventBasicInfoEditProps = {\r\n initialValue: EventBasicInfoEditPayload;\r\n onCancel: () => void;\r\n onSave: (payload: Partial<EventBasicInfoEditPayload>) => Promise<void> | void;\r\n};\r\n\r\nexport default function EventBasicInfoEdit({\r\n initialValue,\r\n onCancel,\r\n onSave,\r\n }: EventBasicInfoEditProps) {\r\n\r\n // Helper to get YYYY-MM-DDThh:mm wall time for a specific timezone\r\n const toWallTimeISO = (dateInput: string | undefined, timeZone: string) => {\r\n if (!dateInput) return \"\";\r\n const d = new Date(dateInput);\r\n if (isNaN(d.getTime())) return \"\";\r\n\r\n const parts = new Intl.DateTimeFormat('en-US', {\r\n year: 'numeric', month: '2-digit', day: '2-digit',\r\n hour: '2-digit', minute: '2-digit', hour12: false,\r\n timeZone: timeZone\r\n }).formatToParts(d);\r\n \r\n const f = (type: string) => parts.find(p => p.type === type)?.value;\r\n // Some environments might return 24 for hour 0 if hour12 is false, but usually 00.\r\n // Also handle the order of parts.\r\n const year = f('year');\r\n const month = f('month');\r\n const day = f('day');\r\n let hour = f('hour');\r\n if (hour === '24') hour = '00';\r\n const minute = f('minute');\r\n\r\n return `${year}-${month}-${day}T${hour}:${minute}`;\r\n };\r\n\r\n // Helper to combine wall time + timezone into UTC ISO string\r\n const toUTCISOString = (wallTime: string, timeZone: string) => {\r\n if (!wallTime) return undefined;\r\n \r\n // We need to find the offset for this wall time in the target timezone.\r\n const d = new Date(wallTime + \":00Z\"); \r\n \r\n const parts = new Intl.DateTimeFormat('en-US', {\r\n timeZone: timeZone,\r\n timeZoneName: 'longOffset'\r\n }).formatToParts(d);\r\n \r\n const offsetPart = parts.find(p => p.type === 'timeZoneName')?.value || \"GMT\";\r\n const offset = offsetPart.replace('GMT', ''); \r\n \r\n const isoWithOffset = `${wallTime}:00${offset || \"+00:00\"}`;\r\n return new Date(isoWithOffset).toISOString();\r\n };\r\n\r\n const [description, setDescription] = useState(initialValue.description);\r\n const [timezone, setTimezone] = useState(initialValue.timezone);\r\n const [startingDate, setStartingDate] = useState(toWallTimeISO(initialValue.startingDate, initialValue.timezone));\r\n const [endingDate, setEndingDate] = useState(toWallTimeISO(initialValue.endingDate, initialValue.timezone));\r\n const [timeInfo, setTimeInfo] = useState(initialValue.date);\r\n const [isSaving, setIsSaving] = useState(false);\r\n\r\n const handleSave = async () => {\r\n setIsSaving(true);\r\n try {\r\n const patch: Partial<EventBasicInfoEditPayload> = {};\r\n\r\n if (description !== initialValue.description) patch.description = description;\r\n if (timeInfo !== initialValue.date) patch.date = timeInfo;\r\n if (timezone !== initialValue.timezone) patch.timezone = timezone;\r\n\r\n if (startingDate !== toWallTimeISO(initialValue.startingDate, timezone) || timezone !== initialValue.timezone) {\r\n patch.startingDate = toUTCISOString(startingDate, timezone);\r\n }\r\n\r\n if (endingDate !== toWallTimeISO(initialValue.endingDate, timezone) || timezone !== initialValue.timezone) {\r\n patch.endingDate = toUTCISOString(endingDate, timezone);\r\n }\r\n\r\n if (Object.keys(patch).length > 0) {\r\n await onSave(patch);\r\n } else {\r\n onCancel();\r\n }\r\n } catch (error) {\r\n console.error(\"Failed to save basic info changes\", error);\r\n } finally {\r\n setIsSaving(false);\r\n }\r\n };\r\n\r\n return (\r\n <Card sx={{\r\n boxShadow: '0px 4px 10px rgba(0, 0, 0, 0.1)',\r\n background: 'linear-gradient(135deg, rgba(225, 225, 225, 1), rgba(250, 250, 250, 1))',\r\n border: '2px dashed rgba(25,118,210,0.5)',\r\n width: '100%'\r\n }}>\r\n <CardContent sx={{ position: 'relative' }}>\r\n <Box sx={{ display: 'flex', justifyContent: 'flex-end', mb: 1, gap: 1 }}>\r\n <Tooltip title=\"Cancel\">\r\n <IconButton size=\"small\" onClick={onCancel} color=\"error\" disabled={isSaving}>\r\n <CancelIcon />\r\n </IconButton>\r\n </Tooltip>\r\n <Tooltip title=\"Apply Changes\">\r\n <IconButton size=\"small\" onClick={handleSave} color=\"primary\" disabled={isSaving}>\r\n {isSaving ? <CircularProgress size={24} /> : <CheckCircleIcon />}\r\n </IconButton>\r\n </Tooltip>\r\n </Box>\r\n\r\n <Box sx={{ mt: 2 }}>\r\n <Typography variant={\"body1\"} fontSize={\"x-large\"} fontWeight={\"bold\"} sx={{ mb: 1 }}>\r\n Event Dates & Times:\r\n </Typography>\r\n <Grid container spacing={2}>\r\n <Grid size={{ xs: 12, sm: 4 }}>\r\n <TextField\r\n fullWidth\r\n label=\"Starting Date\"\r\n type=\"datetime-local\"\r\n size=\"small\"\r\n value={startingDate}\r\n onChange={(e) => setStartingDate(e.target.value)}\r\n InputLabelProps={{ shrink: true }}\r\n />\r\n </Grid>\r\n <Grid size={{ xs: 12, sm: 4 }}>\r\n <TextField\r\n fullWidth\r\n label=\"Ending Date\"\r\n type=\"datetime-local\"\r\n size=\"small\"\r\n value={endingDate}\r\n onChange={(e) => setEndingDate(e.target.value)}\r\n InputLabelProps={{ shrink: true }}\r\n />\r\n </Grid>\r\n <Grid size={{ xs: 12, sm: 4 }}>\r\n <FormControl fullWidth size=\"small\">\r\n <InputLabel>Display Timezone</InputLabel>\r\n <Select\r\n label=\"Display Timezone\"\r\n value={timezone}\r\n onChange={(e) => setTimezone(e.target.value)}\r\n >\r\n {CANDIDATE_TIMEZONES.map(tz => (\r\n <MenuItem key={tz} value={tz}>{tz}</MenuItem>\r\n ))}\r\n </Select>\r\n </FormControl>\r\n </Grid>\r\n </Grid>\r\n\r\n <Box sx={{ mt: 2 }}>\r\n <Typography variant={\"h5\"}>\r\n Hours of Operation:\r\n </Typography>\r\n <TextField\r\n fullWidth\r\n multiline\r\n variant=\"standard\"\r\n placeholder=\"e.g. Mon-Fri 9am-5pm\"\r\n value={timeInfo}\r\n onChange={(e) => setTimeInfo(e.target.value)}\r\n sx={{ mt: 1 }}\r\n />\r\n </Box>\r\n </Box>\r\n\r\n <Typography variant={\"h5\"} paddingTop={2}>\r\n About:\r\n </Typography>\r\n <TextField\r\n fullWidth\r\n multiline\r\n variant=\"standard\"\r\n value={description}\r\n onChange={(e) => setDescription(e.target.value)}\r\n sx={{\r\n paddingTop: 1,\r\n '& .MuiInputBase-root': {\r\n lineHeight: 1.5,\r\n whiteSpace: 'pre-wrap'\r\n }\r\n }}\r\n />\r\n\r\n <Box sx={{\r\n mt: 2,\r\n width: '100%',\r\n p: 1.5,\r\n borderRadius: 2,\r\n boxShadow: '0px 4px 10px rgba(0, 0, 0, 0.1)',\r\n background: 'linear-gradient(135deg, rgba(180, 180,180, 1), rgba(225, 225, 225, 0.8))',\r\n color: 'rgba(0,0,0,0.5)',\r\n border: '1px dashed rgba(0,0,0,0.2)'\r\n }}>\r\n Location Data (Not Editable)\r\n </Box>\r\n </CardContent>\r\n </Card>\r\n );\r\n}\r\n","import { useState } from \"react\";\nimport { useEventEdit } from \"./editMode/EventEditContext\";\nimport type { EventDB } from \"../../types/event\";\nimport EventBannerEdit from \"./editMode/EventBannerEdit\";\nimport { generateTagsDisplay } from \"@/components/shared/TagComponents\";\nimport { Box, Button } from \"@mui/material\";\nimport Grid from \"@mui/material/Grid\";\n\nexport type EventBannerProps = {\n attendees: number;\n numGames: number;\n // These are now optional as they are taken from context if not provided\n bannerUrl?: EventDB[\"bannerUrl\"];\n links?: EventDB[\"links\"];\n title?: EventDB[\"title\"];\n eventTag?: EventDB[\"eventTag\"];\n bannerColor?: string;\n};\n\nexport type EventBannerEditPayload = {\n bannerUrl: EventDB[\"bannerUrl\"];\n bannerColor?: EventDB[\"bannerColor\"];\n links: EventDB[\"links\"];\n title: EventDB[\"title\"];\n eventTag: EventDB[\"eventTag\"];\n};\n\nexport default function EventBanner(props: EventBannerProps) {\n const { isOwner, updateEvent, event } = useEventEdit();\n const [isEditing, setIsEditing] = useState(false);\n\n if (!event && !props.bannerUrl) return null;\n\n // Use context values if available, otherwise fallback to props\n const bannerUrl = props.bannerUrl || event?.bannerUrl;\n const links = props.links || event?.links || [];\n const title = props.title || event?.title || \"\";\n const eventTag = props.eventTag || event?.eventTag;\n const bannerColor = props.bannerColor || event?.bannerColor;\n\n if (!bannerUrl || !eventTag) return null;\n\n if (isEditing) {\n return (\n <EventBannerEdit\n initialValue={{\n bannerUrl,\n bannerColor,\n links,\n title,\n eventTag,\n }}\n onCancel={() => setIsEditing(false)}\n onSave={async (payload) => {\n const success = await updateEvent(payload);\n if (success) {\n setIsEditing(false);\n }\n }}\n />\n );\n }\n\n return (\n <EventBannerView\n {...props}\n bannerUrl={bannerUrl}\n links={links}\n title={title}\n eventTag={eventTag}\n bannerColor={bannerColor}\n isOwner={isOwner}\n onEdit={() => setIsEditing(true)}\n />\n );\n}\n\ntype EventBannerViewProps = {\n bannerUrl: EventDB[\"bannerUrl\"];\n links: EventDB[\"links\"];\n bannerColor?: string;\n title: string;\n eventTag: EventDB[\"eventTag\"];\n attendees: number;\n numGames: number;\n isOwner: boolean;\n onEdit: () => void;\n};\n\nfunction EventBannerView({\n bannerUrl,\n links,\n bannerColor,\n title,\n eventTag,\n attendees,\n numGames,\n isOwner,\n onEdit,\n }: EventBannerViewProps) {\n const backgroundColor = bannerColor || \"linear-gradient(135deg, rgba(25,118,210,0.8), rgba(25,118,210,1))\";\n return (\n <Grid\n sx={{\n background: backgroundColor,\n paddingTop: \"8px\",\n position: 'relative'\n }}\n >\n <Grid>\n {/* BANNER */}\n <Box\n sx={{\n width: '100%',\n height: 'auto',\n maxHeight: '250px',\n overflow: 'hidden',\n display: 'flex',\n justifyContent: 'center'\n }}\n >\n <Box\n component=\"img\"\n src={bannerUrl.desktop}\n alt={title}\n sx={{\n width: '100%',\n height: 'auto',\n objectFit: 'contain',\n display: { xs: 'none', md: 'block' }\n }}\n />\n {bannerUrl.mobile && (\n <Box\n component=\"img\"\n src={bannerUrl.mobile}\n alt={title}\n sx={{\n width: '100%',\n height: 'auto',\n objectFit: 'contain',\n display: { xs: 'block', md: 'none' }\n }}\n />\n )}\n {!bannerUrl.mobile && (\n <Box\n component=\"img\"\n src={bannerUrl.desktop}\n alt={title}\n sx={{\n width: '100%',\n height: 'auto',\n objectFit: 'contain',\n display: { xs: 'block', md: 'none' }\n }}\n />\n )}\n </Box>\n\n <Grid\n display=\"flex\"\n justifyContent=\"center\"\n alignItems=\"center\"\n paddingTop=\"3px\"\n paddingBottom=\"3px\"\n sx={{ gap: 1.5, flexWrap: 'wrap' }}\n >\n <Box\n sx={{\n px: 1.5,\n py: 0.5,\n color: \"#fff\",\n bgcolor: \"rgba(0,0,0,0.7)\",\n borderRadius: 2,\n boxShadow: \"0 8px 16px rgba(0,0,0,0.25), 0 2px 4px rgba(0,0,0,0.15)\",\n border: \"1px solid rgba(255,255,255,0.25)\",\n backdropFilter: \"blur(6px)\",\n fontWeight: 700,\n letterSpacing: 0.2,\n alignItems: \"center\",\n justifyContent: \"center\"\n }}\n >\n {`${attendees} Players`}\n </Box>\n\n <Box\n sx={{\n px: 1.5,\n py: 0.5,\n color: \"#fff\",\n bgcolor: \"rgba(0,0,0,0.7)\",\n borderRadius: 2,\n boxShadow: \"0 8px 16px rgba(0,0,0,0.25), 0 2px 4px rgba(0,0,0,0.15)\",\n border: \"1px solid rgba(255,255,255,0.25)\",\n backdropFilter: \"blur(6px)\",\n fontWeight: 700,\n letterSpacing: 0.2,\n alignItems: \"center\",\n justifyContent: \"center\"\n }}\n >\n {`${numGames} tables`}\n </Box>\n\n {generateTagsDisplay(eventTag)}\n {links.map((link) => generateLink(link))}\n </Grid>\n </Grid>\n\n {isOwner && (\n <Button\n variant=\"contained\"\n onClick={onEdit}\n sx={{\n position: 'absolute',\n top: 16,\n right: 16,\n bgcolor: 'rgba(255, 255, 255, 0.9)',\n color: 'primary.main',\n '&:hover': {\n bgcolor: 'white',\n }\n }}\n >\n Edit\n </Button>\n )}\n </Grid>\n )\n}\n\nconst generateLink = function (link: { url: string, text: string }) {\n return (\n <Box\n component=\"a\"\n href={link.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n key={link.text}\n sx={{\n px: 1.5,\n py: 0.5,\n color: \"#fff\",\n bgcolor: \"rgba(0,0,0,0.7)\",\n borderRadius: 2,\n boxShadow: \"0 8px 16px rgba(0,0,0,0.25), 0 2px 4px rgba(0,0,0,0.15)\",\n border: \"1px solid rgba(255,255,255,0.25)\",\n backdropFilter: \"blur(6px)\",\n fontWeight: 700,\n letterSpacing: 0.2,\n alignItems: \"center\",\n justifyContent: \"center\",\n textDecoration: 'none',\n '&:hover': {\n bgcolor: \"rgba(255,255,255,0.1)\",\n }\n }}\n >\n {link.text}\n </Box>\n )\n}","\"use client\"\nimport React from 'react';\nimport { Card, CardContent, Typography, Box } from '@mui/material';\nimport { Tag } from '@/types/tag';\nimport { SearchResultItem } from '@/types/search';\nimport { generateTagsDisplay } from \"@/components/shared/TagComponents\";\n\nexport interface BaseSearchResultCardProps {\n result: SearchResultItem;\n onClick?: (id: number) => void;\n icon?: React.ReactNode;\n children?: React.ReactNode;\n tags: Tag[];\n}\n\n/**\n * Base component for displaying search results with common functionality\n */\nexport const BaseSearchResultCard: React.FC<BaseSearchResultCardProps> = ({ \n result,\n onClick,\n children,\n icon,\n tags\n}) => {\n const handleClick = () => {\n if (onClick) {\n onClick(result.id);\n }\n };\n\n return (\n <Card \n elevation={6}\n sx={{ \n width: '100%', \n cursor: onClick ? 'pointer' : 'default',\n boxShadow: '0px 8px 24px rgba(0, 0, 0, 0.15)',\n transition: 'box-shadow 0.3s ease-in-out',\n '&:hover': {\n boxShadow: '0px 12px 28px rgba(0, 0, 0, 0.2)'\n },\n marginBottom: 2\n }}\n onClick={handleClick}\n >\n <CardContent sx={{ display: 'flex', alignItems: 'flex-start' }}>\n {/* Icon on the left */}\n {icon && (\n <Box sx={{ mr: 2, display: 'flex', alignItems: 'center', pt: 0.5 }}>\n {icon}\n </Box>\n )}\n \n {/* Content on the right */}\n <Box sx={{ flex: 1 }}>\n <Typography variant=\"h6\" sx={{ mb: 1 }}>\n {result.title}\n </Typography>\n \n {/* Specialized content will be inserted here */}\n {children}\n \n <Typography variant=\"body1\">\n {result.description}\n </Typography>\n \n {result.tags && result.tags.length > 0 && (\n <Box sx={{ mt: 1 }}>\n <Box sx={{\n display: 'block',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'clip',\n pl: 0.5 // Add some padding to prevent clipping of the leftmost tag\n }}>\n {(() => {\n const MAX_VISIBLE = 5; // heuristic: show up to 5 tags on one line\n const tagObjs = result.tags\n .map((tagId) => tags.find((t) => t.id === tagId))\n .filter((t): t is Tag => Boolean(t));\n const visible = tagObjs.slice(0, MAX_VISIBLE);\n const hiddenCount = Math.max(tagObjs.length - visible.length, 0);\n return (\n <>\n {visible.map((tag) => generateTagsDisplay(tag))}\n {hiddenCount > 0 && (\n <span\n className=\"inline-block text-sm px-3 py-1 rounded-full outline-black outline-2 font-outlined\"\n style={{\n marginTop: '6px',\n marginRight: '6px',\n marginBottom: '6px',\n background: '#9e9e9e',\n color: 'white',\n textShadow: 'black 0.2em 0.2em 0.4em'\n }}\n >\n +{hiddenCount} more\n </span>\n )}\n </>\n );\n })()}\n </Box>\n </Box>\n )}\n </Box>\n </CardContent>\n </Card>\n );\n};\n\nexport default BaseSearchResultCard;","\"use client\"\nimport React from 'react';\nimport Avatar from '@mui/material/Avatar';\nimport BaseSearchResultCard from './BaseSearchResultCard';\nimport { Tag } from \"@/types/tag\";\nimport { SearchResultItem } from '@/types/search';\n\ninterface PlayerResultCardProps {\n result: SearchResultItem;\n onClick?: (id: number) => void;\n tags: Tag[];\n}\n\n/**\n * Component for displaying player search results\n * Displays player avatars with consistent color hashing/fallbacks\n */\nconst PlayerResultCard: React.FC<PlayerResultCardProps> = ({ \n result,\n onClick,\n tags\n}) => {\n // Get the first letter of the username for the avatar fallback\n const firstLetter = result.title.charAt(0).toUpperCase();\n \n // Generate a consistent color based on the username\n const getAvatarColor = (name: string) => {\n const colors = [\n '#F44336', '#E91E63', '#9C27B0', '#673AB7', \n '#3F51B5', '#2196F3', '#03A9F4', '#00BCD4', \n '#009688', '#4CAF50', '#8BC34A', '#CDDC39', \n '#FFEB3B', '#FFC107', '#FF9800', '#FF5722'\n ];\n \n let hash = 0;\n for (let i = 0; i < name.length; i++) {\n hash = name.charCodeAt(i) + ((hash << 5) - hash);\n }\n \n return colors[Math.abs(hash) % colors.length];\n };\n \n const avatarColor = getAvatarColor(result.title);\n \n const playerIcon = (\n <Avatar \n src={result.imageUrl} \n alt={result.title}\n sx={{ \n width: 40, \n height: 40, \n bgcolor: !result.imageUrl ? avatarColor : undefined\n }}\n >\n {!result.imageUrl && firstLetter}\n </Avatar>\n );\n\n return (\n <BaseSearchResultCard result={result} onClick={onClick} icon={playerIcon} tags={tags}>\n {/* No additional content needed */}\n </BaseSearchResultCard>\n );\n};\n\nexport default PlayerResultCard;","\"use client\"\nimport React from 'react';\nimport { BaseSearchResultCard } from './BaseSearchResultCard';\nimport { Box, Typography, LinearProgress, Chip } from '@mui/material';\nimport CasinoIcon from '@mui/icons-material/Casino';\nimport { Tag } from '@/types/tag';\nimport { SearchResultItem } from '@/types/search';\n\ninterface TableResultCardProps {\n result: SearchResultItem;\n tags: Tag[];\n onClick?: (id: number) => void;\n}\n\nexport const TableResultCard: React.FC<TableResultCardProps> = ({ result, tags, onClick }) => {\n const capacity = result.capacity || 1;\n const numPlayers = result.numPlayers || 0;\n const occupancy = (numPlayers / capacity) * 100;\n \n return (\n <BaseSearchResultCard result={result} tags={tags} onClick={onClick} icon={<CasinoIcon color=\"primary\" />}>\n <Box sx={{ mb: 1 }}>\n <Box sx={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', mb: 0.5 }}>\n <Typography variant=\"body2\" color=\"text.secondary\">\n Players: {numPlayers} / {capacity}\n </Typography>\n {result.dungeonMaster ? (\n <Chip label=\"DM Present\" size=\"small\" color=\"success\" variant=\"outlined\" />\n ) : (\n <Chip label=\"No DM\" size=\"small\" color=\"warning\" variant=\"outlined\" />\n )}\n </Box>\n <LinearProgress variant=\"determinate\" value={occupancy} sx={{ height: 8, borderRadius: 4 }} />\n </Box>\n </BaseSearchResultCard>\n );\n};\n\nexport default TableResultCard;","\"use client\"\nimport React from 'react';\nimport { Box, Typography } from '@mui/material';\nimport CalendarTodayIcon from '@mui/icons-material/CalendarToday';\nimport LocationOnIcon from '@mui/icons-material/LocationOn';\nimport EventIcon from '@mui/icons-material/Event';\nimport BaseSearchResultCard from './BaseSearchResultCard';\nimport { Tag } from '@/types/tag';\nimport { SearchResultItem } from '@/types/search';\n\ninterface EventResultCardProps {\n result: SearchResultItem;\n onClick?: (id: number) => void;\n tags: Tag[];\n}\n\nconst EventResultCard: React.FC<EventResultCardProps> = ({\n result,\n onClick,\n tags,\n}) => {\n const formatDate = (dateString: string) => {\n const options: Intl.DateTimeFormatOptions = {\n weekday: 'long',\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n };\n\n try {\n const date = new Date(dateString);\n return date.toLocaleDateString('en-US', options);\n } catch {\n return dateString;\n }\n };\n\n const formattedDate = result.date ? formatDate(result.date) : 'Date TBD';\n const location = result.location || 'Location TBD';\n\n return (\n <BaseSearchResultCard result={result} onClick={onClick} icon={<EventIcon color=\"primary\" />} tags={tags}>\n <Box sx={{ mb: 1 }}>\n <Box sx={{ display: 'flex', alignItems: 'center', mb: 0.5 }}>\n <CalendarTodayIcon sx={{ mr: 1, fontSize: 'small', color: 'text.secondary' }} />\n <Typography variant=\"body2\" color=\"text.secondary\">\n {formattedDate}\n </Typography>\n </Box>\n <Box sx={{ display: 'flex', alignItems: 'center', mb: 1 }}>\n <LocationOnIcon sx={{ mr: 1, fontSize: 'small', color: 'text.secondary' }} />\n <Typography variant=\"body2\" color=\"text.secondary\">\n {location}\n </Typography>\n </Box>\n </Box>\n </BaseSearchResultCard>\n );\n};\n\nexport default EventResultCard;\n","\"use client\"\nimport React from 'react';\nimport Box from '@mui/material/Box';\nimport { SearchResultItem } from '@/types/search';\nimport PlayerResultCard from './Results/PlayerResultCard';\nimport TableResultCard from './Results/TableResultCard';\nimport EventResultCard from './Results/EventResultCard';\nimport { Tag } from '@/types/tag';\n\ninterface ResultsContainerProps {\n results: SearchResultItem[];\n onResultClick?: (id: number, type: \"player\" | \"event\" | \"table\") => void;\n tags: Tag[]\n}\n\n/**\n * Container component that displays a list of search results\n */\nconst ResultsContainer: React.FC<ResultsContainerProps> = ({\n results,\n onResultClick,\n tags\n}) => {\n if (results.length === 0 || !results.map) {\n return (\n <Box sx={{ textAlign: 'center', py: 4 }}>\n No results found. Try adjusting your filters.\n </Box>\n );\n }\n\n const onPlayerClick = (id: number) => {\n onResultClick?.(id, 'player');\n }\n\n const onTableClick = (id: number) => {\n onResultClick?.(id, 'table');\n }\n\n const onEventClick = (id: number) => {\n onResultClick?.(id, 'event');\n }\n\n return (\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 2 }}>\n {results.map((result) => {\n // Render the appropriate card based on result type\n switch (result.type) {\n case 'player':\n return (\n <PlayerResultCard \n key={result.id} \n result={result as SearchResultItem & { type: 'player' }} \n onClick={onPlayerClick}\n tags={tags}\n />\n );\n case 'table':\n return (\n <TableResultCard \n key={result.id} \n result={result as SearchResultItem & { type: 'table' }} \n onClick={onTableClick}\n tags={tags}\n />\n );\n case 'event':\n return (\n <EventResultCard \n key={result.id} \n result={result as SearchResultItem & { type: 'event' }} \n onClick={onEventClick}\n tags={tags}\n />\n );\n default:\n // This should never happen with proper typing\n console.error(`Unknown result type: ${result.type}`);\n return null;\n }\n })}\n </Box>\n );\n};\n\nexport default ResultsContainer;","\"use client\"\nimport React from 'react';\nimport Box from '@mui/material/Box';\nimport ResultsContainer from './ResultsContainer';\nimport { SearchResultItem } from '@/types/search';\nimport { Tag } from '@/types/tag';\n\nexport interface ScrollableResultsListProps {\n results: SearchResultItem[];\n tags: Tag[];\n maxHeight?: number | string;\n onResultClick?: (id: number, type: 'player' | 'event' | 'table') => void;\n emptyText?: string;\n}\n\n/**\n * Generic scrollable list for search results. Reuses ResultsContainer and simply constrains height.\n */\nconst ScrollableResultsList: React.FC<ScrollableResultsListProps> = ({\n results,\n tags,\n maxHeight = 400,\n onResultClick,\n emptyText,\n}) => {\n const hasResults = Array.isArray(results) && results.length > 0;\n\n return (\n <Box sx={{ maxHeight, overflowY: 'auto', pr: 1 }}>\n {hasResults ? (\n <ResultsContainer results={results} onResultClick={onResultClick} tags={tags} />\n ) : (\n <Box sx={{ textAlign: 'center', py: 2 }}>\n {emptyText || 'No results to display.'}\n </Box>\n )}\n </Box>\n );\n};\n\nexport default ScrollableResultsList;\n","\"use client\"\nimport React from 'react';\nimport ScrollableResultsList from './ScrollableResultsList';\nimport { SearchResultItem } from '@/types/search';\nimport { Tag } from '@/types/tag';\n\nexport interface TablesScrollableListProps {\n results: SearchResultItem[];\n tags: Tag[];\n maxHeight?: number | string;\n onResultClick?: (id: number) => void;\n sortBy?: 'none' | 'availability';\n}\n\n/**\n * Thin wrapper to show only table results in a scrollable list.\n * Updated to sort by most available slots first.\n */\nconst TablesScrollableList: React.FC<TablesScrollableListProps> = ({\n results,\n tags,\n maxHeight,\n onResultClick,\n sortBy = 'availability',\n}) => {\n const tables = (results || []).filter((r): r is SearchResultItem & { type: 'table' } => r?.type === 'table');\n\n // Compute available slots using only the result item; default to safe values when missing\n const getAvailableSlots = (r: SearchResultItem & { type: 'table' }) => {\n const capacity = typeof (r as any).capacity === 'number' ? (r as any).capacity : 0;\n const playersCount = typeof (r as any).numPlayers === 'number' ? (r as any).numPlayers : 0;\n return Math.max(capacity - playersCount, 0);\n };\n\n const sortedTables = sortBy === 'availability'\n ? [...tables].sort((a, b) => getAvailableSlots(b) - getAvailableSlots(a))\n : tables;\n\n const handleClick = (id: number) => onResultClick?.(id);\n\n return (\n <ScrollableResultsList\n results={sortedTables}\n tags={tags}\n maxHeight={maxHeight}\n onResultClick={(id, type) => {\n if (type === 'table') handleClick(id);\n }}\n />\n );\n};\n\nexport default TablesScrollableList;\n","\"use client\"\nimport React from 'react';\nimport Card from '@mui/material/Card';\nimport CardContent from '@mui/material/CardContent';\nimport CardHeader from '@mui/material/CardHeader';\nimport Divider from '@mui/material/Divider';\nimport TablesScrollableList from '@/components/SearchPage/TablesScrollableList';\nimport { Tag } from '@/types/tag';\n\nexport interface EventTablesCardProps {\n tables: any[];\n tags: Tag[];\n maxHeight?: number | string;\n onTableClick?: (id: number) => void;\n}\n\n/**\n * Event page card that shows a scrollable list of tables, reusing search result cards.\n */\nconst EventTablesCard: React.FC<EventTablesCardProps> = ({\n tables,\n tags,\n maxHeight = 450,\n onTableClick,\n}) => {\n return (\n <Card elevation={6} sx={{ width: '100%', boxShadow: '0px 8px 24px rgba(0, 0, 0, 0.15)' }}>\n <CardHeader title=\"Tables\" />\n <Divider />\n <CardContent>\n <TablesScrollableList results={tables} tags={tags} maxHeight={maxHeight} onResultClick={onTableClick} sortBy={\"availability\"} />\n </CardContent>\n </Card>\n );\n};\n\nexport default EventTablesCard;\n","\"use client\"\nimport React from \"react\";\nimport EventBanner from \"@/components/EventPage/EventBanner\";\nimport Grid from \"@mui/material/Grid\";\nimport EventBasicInfo from \"@/components/EventPage/EventBasicInfo\";\nimport EventTablesCard from \"@/components/EventPage/EventTablesCard\";\nimport type { EventDB, EventEditContextValue } from \"@/types/event\";\nimport type { Tag } from \"@/types/tag\";\nimport { EventEditProvider } from \"@/components/EventPage/editMode/EventEditContext\";\n\nexport type EventPageProps = {\n mergedEvent: EventDB;\n isOwner: boolean;\n updateEvent?: (patch: Partial<EventDB>) => void;\n updateImages?: () => void;\n attendees: number;\n numGames: number;\n tables: any[];\n players: any[];\n allTags: Tag[];\n};\n\nexport default function EventPageLayout({\n mergedEvent,\n isOwner,\n updateEvent,\n updateImages,\n attendees,\n numGames,\n tables,\n allTags,\n }: EventPageProps) {\n return (\n <Grid container flexDirection=\"column\">\n {/* 3. Context wiring */}\n <EventEditProvider initialEvent={mergedEvent} value={{ isOwner, updateEvent, updateImages }}>\n <Grid>\n <EventBanner\n attendees={attendees}\n numGames={numGames}\n />\n </Grid>\n <Grid container flexDirection=\"row\" spacing={3} size={{ xs: 12, md: 12 }}>\n <Grid size={{ xs: 12, md: 4 }} spacing={3} padding={3}>\n <EventBasicInfo\n locationId={mergedEvent.location || \"0\"}\n />\n </Grid>\n <Grid size={{ xs: 12, md: 8 }} spacing={3} padding={3}>\n <EventTablesCard tables={tables} tags={allTags} />\n </Grid>\n </Grid>\n <Grid />\n </EventEditProvider>\n </Grid>\n );\n}\n"]}
|
|
@@ -0,0 +1,370 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
var material = require('@mui/material');
|
|
5
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
6
|
+
var react = require('react');
|
|
7
|
+
var Grid = require('@mui/material/Grid');
|
|
8
|
+
var Card4 = require('@mui/material/Card');
|
|
9
|
+
var CardHeader = require('@mui/material/CardHeader');
|
|
10
|
+
var CardContent4 = require('@mui/material/CardContent');
|
|
11
|
+
|
|
12
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
13
|
+
|
|
14
|
+
var Grid__default = /*#__PURE__*/_interopDefault(Grid);
|
|
15
|
+
var Card4__default = /*#__PURE__*/_interopDefault(Card4);
|
|
16
|
+
var CardHeader__default = /*#__PURE__*/_interopDefault(CardHeader);
|
|
17
|
+
var CardContent4__default = /*#__PURE__*/_interopDefault(CardContent4);
|
|
18
|
+
|
|
19
|
+
// src/components/PlayerPage/PlayerDetailsCard.tsx
|
|
20
|
+
var PlayerDetails = ({
|
|
21
|
+
age,
|
|
22
|
+
yearsPlaying,
|
|
23
|
+
discordUsername,
|
|
24
|
+
preferredGames
|
|
25
|
+
}) => {
|
|
26
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
27
|
+
material.Card,
|
|
28
|
+
{
|
|
29
|
+
sx: {
|
|
30
|
+
margin: "1rem",
|
|
31
|
+
background: "linear-gradient(135deg, rgba(25, 118, 210, 0.8), rgba(25, 118, 210, 1))",
|
|
32
|
+
// Primary Blue Gradient
|
|
33
|
+
boxShadow: "0px 8px 15px rgba(25, 118, 210, 0.3)",
|
|
34
|
+
// Deep shadow based on the color
|
|
35
|
+
borderRadius: "12px",
|
|
36
|
+
// Rounded corners
|
|
37
|
+
color: "#FFFFFF",
|
|
38
|
+
// White as the base text color for contrast
|
|
39
|
+
position: "relative",
|
|
40
|
+
overflow: "hidden"
|
|
41
|
+
// Ensures clean edges
|
|
42
|
+
},
|
|
43
|
+
className: "transition duration-300 transform hover:scale-105 hover:shadow-2xl",
|
|
44
|
+
children: [
|
|
45
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
46
|
+
"div",
|
|
47
|
+
{
|
|
48
|
+
className: "absolute inset-0 bg-gradient-to-t from-white/10 to-transparent opacity-60",
|
|
49
|
+
"aria-hidden": "true"
|
|
50
|
+
}
|
|
51
|
+
),
|
|
52
|
+
/* @__PURE__ */ jsxRuntime.jsxs(material.CardContent, { className: "relative p-6", children: [
|
|
53
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
54
|
+
material.Typography,
|
|
55
|
+
{
|
|
56
|
+
variant: "h5",
|
|
57
|
+
className: "font-bold uppercase text-center tracking-wide mb-4",
|
|
58
|
+
sx: {
|
|
59
|
+
color: "#FFFFFF",
|
|
60
|
+
// Bright white for high contrast
|
|
61
|
+
textShadow: "0px 4px 8px rgba(0, 0, 0, 0.5)",
|
|
62
|
+
// Stronger shadow for bold presence
|
|
63
|
+
fontSize: "1.5rem"
|
|
64
|
+
// Slightly larger title size
|
|
65
|
+
},
|
|
66
|
+
children: "Player Details"
|
|
67
|
+
}
|
|
68
|
+
),
|
|
69
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-3", children: [
|
|
70
|
+
age !== null && /* @__PURE__ */ jsxRuntime.jsxs(
|
|
71
|
+
material.Typography,
|
|
72
|
+
{
|
|
73
|
+
variant: "body2",
|
|
74
|
+
className: "text-sm font-medium",
|
|
75
|
+
sx: {
|
|
76
|
+
color: "#FFFFFF",
|
|
77
|
+
textShadow: "0px 2px 6px rgba(0, 0, 0, 0.5)",
|
|
78
|
+
fontWeight: "bold"
|
|
79
|
+
},
|
|
80
|
+
children: [
|
|
81
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-extrabold text-cyan-300", children: "Age:" }),
|
|
82
|
+
" ",
|
|
83
|
+
age
|
|
84
|
+
]
|
|
85
|
+
}
|
|
86
|
+
),
|
|
87
|
+
yearsPlaying !== null && /* @__PURE__ */ jsxRuntime.jsxs(
|
|
88
|
+
material.Typography,
|
|
89
|
+
{
|
|
90
|
+
variant: "body2",
|
|
91
|
+
className: "text-sm font-medium",
|
|
92
|
+
sx: {
|
|
93
|
+
color: "#FFFFFF",
|
|
94
|
+
textShadow: "0px 2px 6px rgba(0, 0, 0, 0.5)",
|
|
95
|
+
fontWeight: "bold"
|
|
96
|
+
},
|
|
97
|
+
children: [
|
|
98
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-extrabold text-cyan-300", children: "Years Playing:" }),
|
|
99
|
+
" ",
|
|
100
|
+
yearsPlaying
|
|
101
|
+
]
|
|
102
|
+
}
|
|
103
|
+
),
|
|
104
|
+
discordUsername && /* @__PURE__ */ jsxRuntime.jsxs(
|
|
105
|
+
material.Typography,
|
|
106
|
+
{
|
|
107
|
+
variant: "body2",
|
|
108
|
+
className: "text-sm font-medium",
|
|
109
|
+
sx: {
|
|
110
|
+
color: "#FFFFFF",
|
|
111
|
+
textShadow: "0px 2px 6px rgba(0, 0, 0, 0.5)",
|
|
112
|
+
fontWeight: "bold"
|
|
113
|
+
},
|
|
114
|
+
children: [
|
|
115
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-extrabold text-cyan-300", children: "Discord Username:" }),
|
|
116
|
+
" ",
|
|
117
|
+
discordUsername
|
|
118
|
+
]
|
|
119
|
+
}
|
|
120
|
+
),
|
|
121
|
+
preferredGames && preferredGames.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs(
|
|
122
|
+
material.Typography,
|
|
123
|
+
{
|
|
124
|
+
variant: "body2",
|
|
125
|
+
className: "text-sm font-medium",
|
|
126
|
+
sx: {
|
|
127
|
+
color: "#FFFFFF",
|
|
128
|
+
textShadow: "0px 2px 6px rgba(0, 0, 0, 0.5)",
|
|
129
|
+
fontWeight: "bold"
|
|
130
|
+
},
|
|
131
|
+
children: [
|
|
132
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-extrabold text-cyan-300", children: "Preferred Games:" }),
|
|
133
|
+
" ",
|
|
134
|
+
preferredGames.join(", ")
|
|
135
|
+
]
|
|
136
|
+
}
|
|
137
|
+
)
|
|
138
|
+
] }),
|
|
139
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-6 text-center", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
140
|
+
material.Typography,
|
|
141
|
+
{
|
|
142
|
+
variant: "caption",
|
|
143
|
+
className: "text-xs italic",
|
|
144
|
+
sx: {
|
|
145
|
+
color: "#BBDEFB",
|
|
146
|
+
// Subtle light blue for footer text
|
|
147
|
+
textShadow: "0px 1px 3px rgba(0, 0, 0, 0.2)"
|
|
148
|
+
},
|
|
149
|
+
children: "All information is player-submitted."
|
|
150
|
+
}
|
|
151
|
+
) })
|
|
152
|
+
] })
|
|
153
|
+
]
|
|
154
|
+
}
|
|
155
|
+
);
|
|
156
|
+
};
|
|
157
|
+
var PlayerDetailsCard_default = PlayerDetails;
|
|
158
|
+
|
|
159
|
+
// src/data/values.tsx
|
|
160
|
+
var ProfilePictureSettings = {
|
|
161
|
+
aspectRatio: 4 / 5};
|
|
162
|
+
var { aspectRatio } = ProfilePictureSettings;
|
|
163
|
+
var PlayerDisplayCard = ({
|
|
164
|
+
profilePicture,
|
|
165
|
+
username,
|
|
166
|
+
bio,
|
|
167
|
+
preferredPronouns
|
|
168
|
+
}) => {
|
|
169
|
+
const [imageSrc, setImageSrc] = react.useState("/man-walking-silhouette-clipart.jpg");
|
|
170
|
+
react.useEffect(() => {
|
|
171
|
+
async function validateImage() {
|
|
172
|
+
const newImage = profilePicture || "/man-walking-silhouette-clipart.jpg";
|
|
173
|
+
if (!profilePicture) {
|
|
174
|
+
setImageSrc("/man-walking-silhouette-clipart.jpg");
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
const img = new Image();
|
|
178
|
+
img.src = newImage;
|
|
179
|
+
img.onload = () => {
|
|
180
|
+
setImageSrc(newImage);
|
|
181
|
+
};
|
|
182
|
+
img.onerror = () => {
|
|
183
|
+
setImageSrc("/man-walking-silhouette-clipart.jpg");
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
validateImage();
|
|
187
|
+
}, [profilePicture]);
|
|
188
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
189
|
+
material.Card,
|
|
190
|
+
{
|
|
191
|
+
sx: {
|
|
192
|
+
margin: "1rem",
|
|
193
|
+
background: "linear-gradient(135deg, rgba(25, 118, 210, 0.8), rgba(25, 118, 210, 1))",
|
|
194
|
+
// Vibrant blue gradient
|
|
195
|
+
boxShadow: "0px 8px 15px rgba(25, 118, 210, 0.3)",
|
|
196
|
+
// Blue shadow to add depth
|
|
197
|
+
borderRadius: "12px",
|
|
198
|
+
// Smooth rounded corners
|
|
199
|
+
color: "#FFFFFF",
|
|
200
|
+
// White text for high contrast
|
|
201
|
+
overflow: "hidden"
|
|
202
|
+
// Clean edges
|
|
203
|
+
},
|
|
204
|
+
className: "transition duration-300 transform hover:scale-105 hover:shadow-2xl",
|
|
205
|
+
children: [
|
|
206
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
207
|
+
material.CardMedia,
|
|
208
|
+
{
|
|
209
|
+
component: "img",
|
|
210
|
+
image: imageSrc,
|
|
211
|
+
alt: `${username}'s Profile Picture`,
|
|
212
|
+
sx: {
|
|
213
|
+
aspectRatio,
|
|
214
|
+
height: "auto",
|
|
215
|
+
// Updates to maintain aspect ratio and fill space nicely
|
|
216
|
+
width: "100%",
|
|
217
|
+
objectFit: "scale-down"
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
),
|
|
221
|
+
/* @__PURE__ */ jsxRuntime.jsxs(material.CardContent, { className: "relative p-6", children: [
|
|
222
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
223
|
+
material.Typography,
|
|
224
|
+
{
|
|
225
|
+
variant: "h5",
|
|
226
|
+
component: "div",
|
|
227
|
+
className: "font-bold text-lg uppercase text-center tracking-wide mb-2",
|
|
228
|
+
sx: {
|
|
229
|
+
color: "#FFFFFF",
|
|
230
|
+
// Pure white for username
|
|
231
|
+
fontSize: "1.5rem",
|
|
232
|
+
textShadow: "0px 3px 6px rgba(0, 0, 0, 0.5)"
|
|
233
|
+
// Strong shadow for visibility
|
|
234
|
+
},
|
|
235
|
+
children: username
|
|
236
|
+
}
|
|
237
|
+
),
|
|
238
|
+
preferredPronouns && /* @__PURE__ */ jsxRuntime.jsx(
|
|
239
|
+
material.Typography,
|
|
240
|
+
{
|
|
241
|
+
variant: "body2",
|
|
242
|
+
className: "text-sm font-medium",
|
|
243
|
+
sx: {
|
|
244
|
+
color: "#E3F2FD",
|
|
245
|
+
textShadow: "0px 2px 4px rgba(0, 0, 0, 0.3)",
|
|
246
|
+
// Subtle shadow for readability
|
|
247
|
+
fontWeight: "bold",
|
|
248
|
+
// Emphasize key details
|
|
249
|
+
marginBottom: "1rem"
|
|
250
|
+
},
|
|
251
|
+
children: preferredPronouns
|
|
252
|
+
}
|
|
253
|
+
),
|
|
254
|
+
bio && /* @__PURE__ */ jsxRuntime.jsx(
|
|
255
|
+
material.Typography,
|
|
256
|
+
{
|
|
257
|
+
variant: "body2",
|
|
258
|
+
className: "text-sm font-light",
|
|
259
|
+
sx: {
|
|
260
|
+
color: "#E3F2FD",
|
|
261
|
+
// Softer muted tone for secondary text
|
|
262
|
+
textShadow: "0px 2px 4px rgba(0, 0, 0, 0.3)",
|
|
263
|
+
// Subtle shadow for readability
|
|
264
|
+
fontStyle: "italic"
|
|
265
|
+
// Distinguish bio visually
|
|
266
|
+
},
|
|
267
|
+
children: bio
|
|
268
|
+
}
|
|
269
|
+
)
|
|
270
|
+
] })
|
|
271
|
+
]
|
|
272
|
+
}
|
|
273
|
+
);
|
|
274
|
+
};
|
|
275
|
+
var PlayerDisplayCard_default = PlayerDisplayCard;
|
|
276
|
+
var PlayerPromptCard = ({ title, description }) => {
|
|
277
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
278
|
+
material.Card,
|
|
279
|
+
{
|
|
280
|
+
sx: {
|
|
281
|
+
margin: "1rem",
|
|
282
|
+
background: "linear-gradient(135deg, rgba(25, 118, 210, 0.8), rgba(25, 118, 210, 1))",
|
|
283
|
+
// Gradient color scheme
|
|
284
|
+
boxShadow: "0px 8px 15px rgba(25, 118, 210, 0.3)",
|
|
285
|
+
// Card shadow
|
|
286
|
+
borderRadius: "12px",
|
|
287
|
+
// Rounded corners
|
|
288
|
+
color: "#FFFFFF",
|
|
289
|
+
// Text contrast with the background
|
|
290
|
+
overflow: "hidden"
|
|
291
|
+
// Keeps consistent and clean card shape
|
|
292
|
+
},
|
|
293
|
+
className: "transition duration-300 transform hover:scale-105 hover:shadow-2xl",
|
|
294
|
+
children: /* @__PURE__ */ jsxRuntime.jsxs(material.CardContent, { className: "p-6", children: [
|
|
295
|
+
title && /* @__PURE__ */ jsxRuntime.jsx(
|
|
296
|
+
material.Typography,
|
|
297
|
+
{
|
|
298
|
+
variant: "h5",
|
|
299
|
+
className: "font-bold text-lg uppercase text-center tracking-wide mb-4",
|
|
300
|
+
sx: {
|
|
301
|
+
color: "#FFFFFF",
|
|
302
|
+
// Bright white for high visibility
|
|
303
|
+
textShadow: "0px 3px 6px rgba(0, 0, 0, 0.5)",
|
|
304
|
+
// Strong text shadow for contrast
|
|
305
|
+
fontSize: "1.5rem"
|
|
306
|
+
},
|
|
307
|
+
children: title
|
|
308
|
+
}
|
|
309
|
+
),
|
|
310
|
+
description && /* @__PURE__ */ jsxRuntime.jsx(
|
|
311
|
+
material.Typography,
|
|
312
|
+
{
|
|
313
|
+
variant: "body2",
|
|
314
|
+
className: "text-sm font-medium text-center",
|
|
315
|
+
sx: {
|
|
316
|
+
color: "#E3F2FD",
|
|
317
|
+
// Softer light blue for description
|
|
318
|
+
textShadow: "0px 2px 4px rgba(0, 0, 0, 0.3)",
|
|
319
|
+
// Subtle shadow
|
|
320
|
+
lineHeight: 1.6,
|
|
321
|
+
marginTop: "1rem"
|
|
322
|
+
},
|
|
323
|
+
children: description
|
|
324
|
+
}
|
|
325
|
+
)
|
|
326
|
+
] })
|
|
327
|
+
}
|
|
328
|
+
);
|
|
329
|
+
};
|
|
330
|
+
var PlayerPromptCard_default = PlayerPromptCard;
|
|
331
|
+
function PlayerTagsCard(props) {
|
|
332
|
+
return /* @__PURE__ */ jsxRuntime.jsx(Grid__default.default, { container: true, children: /* @__PURE__ */ jsxRuntime.jsx(Grid__default.default, { size: { xs: 12, md: 3 }, children: /* @__PURE__ */ jsxRuntime.jsxs(Card4__default.default, { children: [
|
|
333
|
+
/* @__PURE__ */ jsxRuntime.jsx(CardHeader__default.default, { title: "Player Tags", style: {
|
|
334
|
+
background: "linear-gradient(135deg, rgba(25, 118, 210, 0.8), rgba(25, 118, 210, 1))",
|
|
335
|
+
color: "#FFFFFF",
|
|
336
|
+
// Pure white for username
|
|
337
|
+
fontSize: "1.5rem",
|
|
338
|
+
textShadow: "0px 3px 6px rgba(0, 0, 0, 0.5)"
|
|
339
|
+
// Strong shadow for visibility
|
|
340
|
+
} }),
|
|
341
|
+
/* @__PURE__ */ jsxRuntime.jsx(CardContent4__default.default, { children: renderLabels(props.PlayerTags) })
|
|
342
|
+
] }) }) });
|
|
343
|
+
}
|
|
344
|
+
var renderLabels = (tags) => {
|
|
345
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-2 flex flex-wrap gap-2", children: tags.map((tag) => generateLabel(tag)) });
|
|
346
|
+
};
|
|
347
|
+
var generateLabel = (tag) => {
|
|
348
|
+
let color = "#bfbcbb";
|
|
349
|
+
if (tag.color) color = tag.color;
|
|
350
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
351
|
+
"span",
|
|
352
|
+
{
|
|
353
|
+
className: "inline-block text-sm px-3 py-1 rounded-full outline-black outline-2 font-outlined",
|
|
354
|
+
style: {
|
|
355
|
+
background: color,
|
|
356
|
+
color: "white",
|
|
357
|
+
textShadow: "black 0.2em 0.2em 0.4em"
|
|
358
|
+
},
|
|
359
|
+
children: tag.label
|
|
360
|
+
},
|
|
361
|
+
tag.id
|
|
362
|
+
);
|
|
363
|
+
};
|
|
364
|
+
|
|
365
|
+
exports.PlayerDetailsCard = PlayerDetailsCard_default;
|
|
366
|
+
exports.PlayerDisplayCard = PlayerDisplayCard_default;
|
|
367
|
+
exports.PlayerPromptCard = PlayerPromptCard_default;
|
|
368
|
+
exports.PlayerTagsCard = PlayerTagsCard;
|
|
369
|
+
//# sourceMappingURL=index.cjs.map
|
|
370
|
+
//# sourceMappingURL=index.cjs.map
|