@mbpockets/shared-ui 0.2.0 → 0.2.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 +202 -96
- 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 +202 -96
- package/dist/EventPage/index.mjs.map +1 -1
- package/dist/EventPage.cjs +202 -96
- package/dist/EventPage.cjs.map +1 -1
- package/dist/EventPage.d.cts +6 -4
- package/dist/EventPage.d.ts +6 -4
- package/dist/EventPage.mjs +202 -96
- 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 +137 -73
- package/dist/SearchPage/Results/index.cjs.map +1 -1
- package/dist/SearchPage/Results/index.mjs +137 -73
- package/dist/SearchPage/Results/index.mjs.map +1 -1
- package/dist/SearchPage/Results.cjs +137 -73
- package/dist/SearchPage/Results.cjs.map +1 -1
- package/dist/SearchPage/Results.d.cts +14 -3
- package/dist/SearchPage/Results.d.ts +14 -3
- package/dist/SearchPage/Results.mjs +137 -73
- package/dist/SearchPage/Results.mjs.map +1 -1
- package/dist/SearchPage/index.cjs +265 -130
- 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 +261 -129
- package/dist/SearchPage/index.mjs.map +1 -1
- package/dist/SearchPage.cjs +265 -130
- 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 +261 -129
- 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 +972 -460
- 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 +953 -457
- 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/TablePage/index.mjs
CHANGED
|
@@ -1,112 +1,156 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import
|
|
3
|
-
import {
|
|
4
|
-
import
|
|
5
|
-
import
|
|
2
|
+
import React3, { createContext, useState, useMemo, useContext, useRef, useEffect } from 'react';
|
|
3
|
+
import { Box, Tooltip, Typography, Card, CardContent, CardHeader, Grid, Button } from '@mui/material';
|
|
4
|
+
import TextField2 from '@mui/material/TextField';
|
|
5
|
+
import CasinoIcon from '@mui/icons-material/Casino';
|
|
6
|
+
import Grid2 from '@mui/material/Grid';
|
|
7
|
+
import Autocomplete from '@mui/material/Autocomplete';
|
|
8
|
+
import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
|
|
9
|
+
import Dialog from '@mui/material/Dialog';
|
|
10
|
+
import DialogContent from '@mui/material/DialogContent';
|
|
11
|
+
import DialogActions from '@mui/material/DialogActions';
|
|
6
12
|
import Button2 from '@mui/material/Button';
|
|
7
|
-
import
|
|
8
|
-
import
|
|
13
|
+
import IconButton from '@mui/material/IconButton';
|
|
14
|
+
import CloseIcon from '@mui/icons-material/Close';
|
|
15
|
+
import Image from 'next/image';
|
|
9
16
|
import DeleteIcon from '@mui/icons-material/Delete';
|
|
10
|
-
import
|
|
17
|
+
import EditIcon2 from '@mui/icons-material/Edit';
|
|
11
18
|
import ListIcon from '@mui/icons-material/List';
|
|
12
19
|
import SaveIcon from '@mui/icons-material/Save';
|
|
13
|
-
import
|
|
14
|
-
import Card2 from '@mui/material/Card';
|
|
15
|
-
import CardContent2 from '@mui/material/CardContent';
|
|
16
|
-
import Popper from '@mui/material/Popper';
|
|
17
|
-
import TextField from '@mui/material/TextField';
|
|
20
|
+
import DialogTitle from '@mui/material/DialogTitle';
|
|
18
21
|
|
|
19
|
-
// src/components/TablePage/
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
const
|
|
26
|
-
|
|
27
|
-
return context;
|
|
28
|
-
}
|
|
29
|
-
throw new Error("useGameTableContext is deprecated in the package build. Pass table data through props instead.");
|
|
30
|
-
}
|
|
31
|
-
var ModalContext = createContext({
|
|
32
|
-
showModal: (content) => {
|
|
33
|
-
},
|
|
34
|
-
hideModal: () => {
|
|
35
|
-
}
|
|
36
|
-
});
|
|
37
|
-
var useModal = () => useContext(ModalContext);
|
|
38
|
-
var Modal = ({ onClose, children }) => {
|
|
39
|
-
const modalRef = useRef(null);
|
|
40
|
-
const previouslyFocusedElement = useRef(null);
|
|
41
|
-
useEffect(() => {
|
|
42
|
-
var _a;
|
|
43
|
-
if (children) {
|
|
44
|
-
previouslyFocusedElement.current = document.activeElement;
|
|
45
|
-
(_a = modalRef.current) == null ? void 0 : _a.focus();
|
|
46
|
-
}
|
|
47
|
-
return () => {
|
|
48
|
-
var _a2;
|
|
49
|
-
(_a2 = previouslyFocusedElement.current) == null ? void 0 : _a2.focus();
|
|
50
|
-
};
|
|
51
|
-
}, [children]);
|
|
52
|
-
const handleOnClose = () => {
|
|
53
|
-
onClose();
|
|
54
|
-
};
|
|
55
|
-
const handleKeyDown = (e) => {
|
|
56
|
-
var _a;
|
|
57
|
-
if (e.key !== "Tab") return;
|
|
58
|
-
const focusableElements = (_a = modalRef.current) == null ? void 0 : _a.querySelectorAll(
|
|
59
|
-
'button, [tabindex]:not([tabindex="-1"])'
|
|
60
|
-
);
|
|
61
|
-
if (!focusableElements || focusableElements.length === 0) return;
|
|
62
|
-
const first = focusableElements[0];
|
|
63
|
-
const last = focusableElements[focusableElements.length - 1];
|
|
64
|
-
if (e.shiftKey) {
|
|
65
|
-
if (document.activeElement === first) {
|
|
66
|
-
e.preventDefault();
|
|
67
|
-
last.focus();
|
|
68
|
-
}
|
|
69
|
-
} else {
|
|
70
|
-
if (document.activeElement === last) {
|
|
71
|
-
e.preventDefault();
|
|
72
|
-
first.focus();
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
};
|
|
76
|
-
return /* @__PURE__ */ jsx(
|
|
77
|
-
"div",
|
|
78
|
-
{
|
|
79
|
-
className: "modal-overlay",
|
|
80
|
-
onKeyDown: handleKeyDown,
|
|
81
|
-
ref: modalRef,
|
|
82
|
-
role: "dialog",
|
|
83
|
-
tabIndex: -1,
|
|
84
|
-
children: /* @__PURE__ */ jsxs("div", { className: "modal-container", children: [
|
|
85
|
-
/* @__PURE__ */ jsx("div", { className: "modal-control-strip", children: /* @__PURE__ */ jsx("button", { onClick: handleOnClose, children: "X" }) }),
|
|
86
|
-
/* @__PURE__ */ jsx("div", { className: "modal-content", children })
|
|
87
|
-
] })
|
|
88
|
-
}
|
|
89
|
-
);
|
|
90
|
-
};
|
|
91
|
-
var Modal_default = Modal;
|
|
92
|
-
var ModalProvider = ({ children }) => {
|
|
93
|
-
const [modalContent, setModalContent] = useState(null);
|
|
94
|
-
const showModal = (content) => setModalContent(content);
|
|
95
|
-
const hideModal = () => setModalContent(null);
|
|
96
|
-
return /* @__PURE__ */ jsxs(ModalContext.Provider, { value: { showModal, hideModal }, children: [
|
|
97
|
-
children,
|
|
98
|
-
modalContent && /* @__PURE__ */ jsx(Modal_default, { onClose: hideModal, children: modalContent })
|
|
99
|
-
] });
|
|
100
|
-
};
|
|
101
|
-
var ModalProvider_default = ModalProvider;
|
|
102
|
-
var NextGameLabel = ({ nextGameTime }) => {
|
|
103
|
-
const date = typeof nextGameTime === "string" ? new Date(nextGameTime) : nextGameTime;
|
|
104
|
-
return /* @__PURE__ */ jsxs(Typography, { variant: "caption", sx: { display: "block", mb: 1, color: "primary.main", fontWeight: "bold" }, children: [
|
|
105
|
-
"Next Game: ",
|
|
106
|
-
date.toLocaleString()
|
|
107
|
-
] });
|
|
22
|
+
// src/components/TablePage/EditComponents/EditTableDetailsForm.tsx
|
|
23
|
+
|
|
24
|
+
// src/components/shared/NameGenerator.ts
|
|
25
|
+
var getRandomTitle = () => {
|
|
26
|
+
const randomPrefix = titlePrefixes[Math.random() * titlePrefixes.length | 0];
|
|
27
|
+
const randomMiddle = tileMiddle[Math.random() * tileMiddle.length | 0];
|
|
28
|
+
const randomSuffix = titleSuffixes[Math.random() * titleSuffixes.length | 0];
|
|
29
|
+
return `${randomPrefix} ${randomMiddle} ${randomSuffix}`;
|
|
108
30
|
};
|
|
109
|
-
var
|
|
31
|
+
var getRandomTagline = () => taglines[Math.random() * taglines.length | 0];
|
|
32
|
+
var titlePrefixes = [
|
|
33
|
+
"The Knights of The",
|
|
34
|
+
"The Fellowship of The",
|
|
35
|
+
"The Order of The",
|
|
36
|
+
"The Infamous",
|
|
37
|
+
"The Legendary",
|
|
38
|
+
"The Dubious",
|
|
39
|
+
"The Sworn Guardians of The",
|
|
40
|
+
"The Ancient Guild of The",
|
|
41
|
+
"The Unstoppable",
|
|
42
|
+
"The Misfit",
|
|
43
|
+
"The Chaotic",
|
|
44
|
+
"The Brave",
|
|
45
|
+
"The Forgotten",
|
|
46
|
+
"The Wandering",
|
|
47
|
+
"The Noble Council of The",
|
|
48
|
+
"The Dread Pirates of The",
|
|
49
|
+
"The Honorable Society of The",
|
|
50
|
+
"The Cursed",
|
|
51
|
+
"The Unlikely Heroes of The",
|
|
52
|
+
"The Elders of The",
|
|
53
|
+
"The Seekers of The",
|
|
54
|
+
"The Champions of The",
|
|
55
|
+
"The Heralds of The",
|
|
56
|
+
"The Disciples of The",
|
|
57
|
+
"The Ragtag Band of The",
|
|
58
|
+
"The Cult of The"
|
|
59
|
+
];
|
|
60
|
+
var tileMiddle = [
|
|
61
|
+
"Round",
|
|
62
|
+
"Kitchen",
|
|
63
|
+
"Deepest",
|
|
64
|
+
"Sorcery",
|
|
65
|
+
"Munchkin",
|
|
66
|
+
"Shenanigan",
|
|
67
|
+
"Secret",
|
|
68
|
+
"Dungeon",
|
|
69
|
+
"Fireside",
|
|
70
|
+
"Tabletop",
|
|
71
|
+
"Midnight",
|
|
72
|
+
"Tavern",
|
|
73
|
+
"Goblin",
|
|
74
|
+
"Dragon",
|
|
75
|
+
"Critical",
|
|
76
|
+
"Natural Twenty",
|
|
77
|
+
"Counterspell",
|
|
78
|
+
"Nat One",
|
|
79
|
+
"Cardboard",
|
|
80
|
+
"Dice Tower",
|
|
81
|
+
"Campaign",
|
|
82
|
+
"Lore",
|
|
83
|
+
"Awkward",
|
|
84
|
+
"Unhinged",
|
|
85
|
+
"Chaotic Neutral",
|
|
86
|
+
"Homebrew",
|
|
87
|
+
"Side Quest"
|
|
88
|
+
];
|
|
89
|
+
var titleSuffixes = [
|
|
90
|
+
"Table",
|
|
91
|
+
"Dungeon",
|
|
92
|
+
"Cave",
|
|
93
|
+
"Crew",
|
|
94
|
+
"Team",
|
|
95
|
+
"League",
|
|
96
|
+
"Horde",
|
|
97
|
+
"Party",
|
|
98
|
+
"Conclave",
|
|
99
|
+
"Collective",
|
|
100
|
+
"Alliance",
|
|
101
|
+
"Syndicate",
|
|
102
|
+
"Guild",
|
|
103
|
+
"Cabal",
|
|
104
|
+
"Council",
|
|
105
|
+
"Expedition",
|
|
106
|
+
"Enclave",
|
|
107
|
+
"Consortium",
|
|
108
|
+
"Troupe",
|
|
109
|
+
"Vanguard",
|
|
110
|
+
"Cohort",
|
|
111
|
+
"Brotherhood",
|
|
112
|
+
"Sisterhood",
|
|
113
|
+
"Pantheon",
|
|
114
|
+
"Assembly",
|
|
115
|
+
"Coven"
|
|
116
|
+
];
|
|
117
|
+
var taglines = [
|
|
118
|
+
"Everyone is welcome!",
|
|
119
|
+
"Looking for serious players.",
|
|
120
|
+
"Get in nerds, we're gaming!",
|
|
121
|
+
"If you aren't there, you're square.",
|
|
122
|
+
"It will be legendary!",
|
|
123
|
+
"Beginners welcome \u2014 we were all level 1 once.",
|
|
124
|
+
"No experience necessary. Snacks encouraged.",
|
|
125
|
+
"Roleplayers, board gamers, and chaos gremlins welcome.",
|
|
126
|
+
"We don't metagame. Much.",
|
|
127
|
+
"All alignments accepted. True Neutral gets the snacks.",
|
|
128
|
+
"Where every session is a one-shot... until it isn't.",
|
|
129
|
+
"Homebrew rules may apply.",
|
|
130
|
+
"Warning: may contain excessive lore.",
|
|
131
|
+
"Critical failures celebrated as much as critical hits.",
|
|
132
|
+
"No powergamers. Okay, maybe one powergamer.",
|
|
133
|
+
"We finish campaigns. (Eventually.)",
|
|
134
|
+
"Veteran players seeking worthy companions.",
|
|
135
|
+
"Casuals only \u2014 we're here for the vibes.",
|
|
136
|
+
"Serious about fun, not about rules.",
|
|
137
|
+
"Min-maxers need not apply.",
|
|
138
|
+
"For those who read the rulebook... and those who definitely didn't.",
|
|
139
|
+
"Roll for initiative. Arrive on time.",
|
|
140
|
+
"Side quests are the main quest here.",
|
|
141
|
+
"Chaotic good energy required.",
|
|
142
|
+
"If you bring snacks, you can name the first NPC.",
|
|
143
|
+
"We read the rulebook so you don't have to.",
|
|
144
|
+
"Wargamers only \u2014 no take-backs, no mercy.",
|
|
145
|
+
"Everyone welcome. Meeple provided.",
|
|
146
|
+
"We always play the longest game on the shelf.",
|
|
147
|
+
"Worker placement. Resource management. Existential dread.",
|
|
148
|
+
"No phones at the table! We're here for the game.",
|
|
149
|
+
"Someone always flips the table. Metaphorically. Usually.",
|
|
150
|
+
"We have a designated rules lawyer. It's fine.",
|
|
151
|
+
"Cooperative games only \u2014 we can't handle another Monopoly incident.",
|
|
152
|
+
"Teaching time is half the fun!"
|
|
153
|
+
];
|
|
110
154
|
function Chip({ tag, removeCallback }) {
|
|
111
155
|
var _a;
|
|
112
156
|
const color = (_a = tag.color) != null ? _a : "#bfbcbb";
|
|
@@ -139,16 +183,196 @@ function Chip({ tag, removeCallback }) {
|
|
|
139
183
|
tag.id
|
|
140
184
|
) });
|
|
141
185
|
}
|
|
186
|
+
function TagSelector({ initialTagIDs, allTags, onTagChange }) {
|
|
187
|
+
const [tagList, updateTagList] = useState(initialTagIDs);
|
|
188
|
+
const [inputValue, setInputValue] = useState("");
|
|
189
|
+
const toggleTag = (id) => tagList.find((t) => t === id) ? removeTag(id) : addTag(id);
|
|
190
|
+
const addTag = (id) => {
|
|
191
|
+
const newList = [...tagList, id];
|
|
192
|
+
updateTagList(newList);
|
|
193
|
+
onTagChange(newList);
|
|
194
|
+
};
|
|
195
|
+
const removeTag = (id) => {
|
|
196
|
+
const newList = tagList.filter((t) => t !== id);
|
|
197
|
+
updateTagList(newList);
|
|
198
|
+
onTagChange(newList);
|
|
199
|
+
};
|
|
200
|
+
const selectedTags = useMemo(() => allTags.filter((tag) => tagList.includes(tag.id)), [allTags, tagList]);
|
|
201
|
+
const options = useMemo(
|
|
202
|
+
() => allTags.map((tag) => ({ value: tag.id, label: tag.label })),
|
|
203
|
+
[allTags]
|
|
204
|
+
);
|
|
205
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
206
|
+
/* @__PURE__ */ jsx("div", { className: "flex flex-wrap gap-2", children: selectedTags.map((tag) => /* @__PURE__ */ jsx(
|
|
207
|
+
Chip,
|
|
208
|
+
{
|
|
209
|
+
tag,
|
|
210
|
+
removeCallback: () => toggleTag(tag.id)
|
|
211
|
+
},
|
|
212
|
+
tag.id
|
|
213
|
+
)) }),
|
|
214
|
+
/* @__PURE__ */ jsx(Grid2, { container: true, spacing: 3, children: /* @__PURE__ */ jsx(Grid2, { sx: { marginTop: 3, width: "100%", minWidth: "550px" }, children: /* @__PURE__ */ jsx(
|
|
215
|
+
Autocomplete,
|
|
216
|
+
{
|
|
217
|
+
options,
|
|
218
|
+
filterOptions: (availableOptions, state) => availableOptions.filter(
|
|
219
|
+
(option) => !tagList.includes(option.value) && option.label.toLowerCase().includes(state.inputValue.toLowerCase())
|
|
220
|
+
),
|
|
221
|
+
value: null,
|
|
222
|
+
inputValue,
|
|
223
|
+
onInputChange: (event, newInputValue) => {
|
|
224
|
+
if (event && event.type === "change") {
|
|
225
|
+
setInputValue(newInputValue);
|
|
226
|
+
}
|
|
227
|
+
},
|
|
228
|
+
onChange: (event, newValue) => {
|
|
229
|
+
if (newValue) {
|
|
230
|
+
toggleTag(newValue.value);
|
|
231
|
+
}
|
|
232
|
+
setInputValue("");
|
|
233
|
+
},
|
|
234
|
+
renderInput: (params) => /* @__PURE__ */ jsx(TextField2, { ...params, label: "Select Tags" })
|
|
235
|
+
},
|
|
236
|
+
tagList.join("-")
|
|
237
|
+
) }) })
|
|
238
|
+
] });
|
|
239
|
+
}
|
|
240
|
+
function EditTableDetailsForm({ initialTitle, initialSubtitle, onTitleChange, onSubtitleChange, allowEditingTitles, initialTagIDs, allTags, onTagChange }) {
|
|
241
|
+
const [title, setTitle] = useState(initialTitle);
|
|
242
|
+
const [subtitle, setSubtitle] = useState(initialSubtitle);
|
|
243
|
+
const handleTitleChange = (newTitle) => {
|
|
244
|
+
setTitle(newTitle);
|
|
245
|
+
onTitleChange(newTitle);
|
|
246
|
+
};
|
|
247
|
+
const handleSubtitleChange = (newSubtitle) => {
|
|
248
|
+
setSubtitle(newSubtitle);
|
|
249
|
+
onSubtitleChange(newSubtitle);
|
|
250
|
+
};
|
|
251
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
252
|
+
allowEditingTitles && /* @__PURE__ */ jsxs(Box, { className: "flex flex-col gap-4 mb-8", children: [
|
|
253
|
+
/* @__PURE__ */ jsxs(Box, { className: "inline-flex", children: [
|
|
254
|
+
/* @__PURE__ */ jsx(
|
|
255
|
+
TextField2,
|
|
256
|
+
{
|
|
257
|
+
sx: { minWidth: "400px" },
|
|
258
|
+
label: "Title",
|
|
259
|
+
onChange: (e) => handleTitleChange(e.target.value),
|
|
260
|
+
variant: "filled",
|
|
261
|
+
value: title
|
|
262
|
+
}
|
|
263
|
+
),
|
|
264
|
+
/* @__PURE__ */ jsx(Tooltip, { title: "Randomize", children: /* @__PURE__ */ jsx(
|
|
265
|
+
CasinoIcon,
|
|
266
|
+
{
|
|
267
|
+
sx: { cursor: "pointer", alignSelf: "center", ml: 1 },
|
|
268
|
+
onClick: () => handleTitleChange(getRandomTitle())
|
|
269
|
+
}
|
|
270
|
+
) })
|
|
271
|
+
] }),
|
|
272
|
+
/* @__PURE__ */ jsxs(Box, { className: "inline-flex min-w-96", children: [
|
|
273
|
+
/* @__PURE__ */ jsx(
|
|
274
|
+
TextField2,
|
|
275
|
+
{
|
|
276
|
+
sx: { minWidth: "400px" },
|
|
277
|
+
label: "Short Description or Tagline",
|
|
278
|
+
onChange: (e) => handleSubtitleChange(e.target.value),
|
|
279
|
+
variant: "filled",
|
|
280
|
+
value: subtitle
|
|
281
|
+
}
|
|
282
|
+
),
|
|
283
|
+
/* @__PURE__ */ jsx(Tooltip, { title: "Randomize", children: /* @__PURE__ */ jsx(
|
|
284
|
+
CasinoIcon,
|
|
285
|
+
{
|
|
286
|
+
sx: { cursor: "pointer", alignSelf: "center", ml: 1 },
|
|
287
|
+
onClick: () => handleSubtitleChange(getRandomTagline())
|
|
288
|
+
}
|
|
289
|
+
) })
|
|
290
|
+
] })
|
|
291
|
+
] }),
|
|
292
|
+
/* @__PURE__ */ jsx(TagSelector, { initialTagIDs, allTags, onTagChange })
|
|
293
|
+
] });
|
|
294
|
+
}
|
|
295
|
+
var GameTableContext = React3.createContext(void 0);
|
|
296
|
+
function GameTableProvider(props) {
|
|
297
|
+
return /* @__PURE__ */ jsx(Fragment, { children: props.children });
|
|
298
|
+
}
|
|
299
|
+
function useGameTableContext() {
|
|
300
|
+
const context = React3.useContext(GameTableContext);
|
|
301
|
+
if (context) {
|
|
302
|
+
return context;
|
|
303
|
+
}
|
|
304
|
+
throw new Error("useGameTableContext is deprecated in the package build. Pass table data through props instead.");
|
|
305
|
+
}
|
|
306
|
+
var ModalContext = createContext({
|
|
307
|
+
showModal: () => {
|
|
308
|
+
},
|
|
309
|
+
hideModal: () => {
|
|
310
|
+
}
|
|
311
|
+
});
|
|
312
|
+
var useModal = () => useContext(ModalContext);
|
|
142
313
|
function generateTagsDisplay(tag) {
|
|
143
314
|
return /* @__PURE__ */ jsx(Chip, { tag }, tag.id);
|
|
144
315
|
}
|
|
145
|
-
function renderTagsFromIds(ids, legalTags) {
|
|
316
|
+
function renderTagsFromIds(ids, legalTags, options = {}) {
|
|
146
317
|
if (!ids || !legalTags || legalTags.length === 0) {
|
|
147
318
|
return /* @__PURE__ */ jsx(Fragment, {});
|
|
148
319
|
}
|
|
320
|
+
const { showEventTag = false, eventTagId } = options;
|
|
149
321
|
const validTags = ids.map((id) => legalTags.find((tag) => tag.id === id)).filter((tag) => Boolean(tag));
|
|
150
|
-
|
|
322
|
+
const sortedTags = [...validTags].sort((a, b) => {
|
|
323
|
+
if (showEventTag && eventTagId !== void 0) {
|
|
324
|
+
if (a.id === eventTagId && b.id === eventTagId) return 0;
|
|
325
|
+
if (a.id === eventTagId) return -1;
|
|
326
|
+
if (b.id === eventTagId) return 1;
|
|
327
|
+
}
|
|
328
|
+
const priorityOrder = ["Organizer Run", "Display Only"];
|
|
329
|
+
const aIndex = priorityOrder.indexOf(a.label);
|
|
330
|
+
const bIndex = priorityOrder.indexOf(b.label);
|
|
331
|
+
if (aIndex !== -1 && bIndex !== -1) {
|
|
332
|
+
return aIndex - bIndex;
|
|
333
|
+
}
|
|
334
|
+
if (aIndex !== -1) return -1;
|
|
335
|
+
if (bIndex !== -1) return 1;
|
|
336
|
+
return 0;
|
|
337
|
+
});
|
|
338
|
+
return sortedTags.map((tag) => generateTagsDisplay(tag));
|
|
151
339
|
}
|
|
340
|
+
|
|
341
|
+
// src/data/values.tsx
|
|
342
|
+
var DEFAULT_PROFILE_PIC = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2ZXJzaW9uPSIxLjEiIHdpZHRoPSIyNTYiIGhlaWdodD0iMjU2IiB2aWV3Qm94PSIwIDAgMjU2IDI1NiIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+CjxnIHN0eWxlPSJzdHJva2U6IG5vbmU7IHN0cm9rZS13aWR0aDogMDsgc3Ryb2tlLWRhc2hhcnJheTogbm9uZTsgc3Ryb2tlLWxpbmVjYXA6IGJ1dHQ7IHN0cm9rZS1saW5lam9pbjogbWl0ZXI7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDsgZmlsbDogbm9uZTsgZmlsbC1ydWxlOiBub256ZXJvOyBvcGFjaXR5OiAxOyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS40MDY1OTM0MDY1OTM0MDE2IDEuNDA2NTkzNDA2NTkzNDAxNikgc2NhbGUoMi44MSAyLjgxKSI+Cgk8cGF0aCBkPSJNIDQ1IDg4IGMgLTExLjA0OSAwIC0yMS4xOCAtMi4wMDMgLTI5LjAyMSAtOC42MzQgQyA2LjIxMiA3MS4xMDUgMCA1OC43NjQgMCA0NSBDIDAgMjAuMTg3IDIwLjE4NyAwIDQ1IDAgYyAyNC44MTMgMCA0NSAyMC4xODcgNDUgNDUgYyAwIDEzLjc2NSAtNi4yMTIgMjYuMTA1IC0xNS45NzkgMzQuMzY2IEMgNjYuMTgxIDg1Ljk5OCA1Ni4wNDkgODggNDUgODggeiIgc3R5bGU9InN0cm9rZTogbm9uZTsgc3Ryb2tlLXdpZHRoOiAxOyBzdHJva2UtZGFzaGFycmF5OiBub25lOyBzdHJva2UtbGluZWNhcDogYnV0dDsgc3Ryb2tlLWxpbmVqb2luOiBtaXRlcjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyBmaWxsOiByZ2IoMjE0LDIxNCwyMTQpOyBmaWxsLXJ1bGU6IG5vbnplcm87IG9wYWNpdHk6IDE7IiB0cmFuc2Zvcm09IiBtYXRyaXgoMSAwIDAgMSAwIDApICIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+Cgk8cGF0aCBkPSJNIDQ1IDYwLjcxIGMgLTExLjQ3OSAwIC0yMC44MTggLTkuMzM5IC0yMC44MTggLTIwLjgxNyBjIDAgLTExLjQ3OSA5LjMzOSAtMjAuODE4IDIwLjgxOCAtMjAuODE4IGMgMTEuNDc5IDAgMjAuODE3IDkuMzM5IDIwLjgxNyAyMC44MTggQyA2NS44MTcgNTEuMzcxIDU2LjQ3OSA2MC43MSA0NSA2MC43MSB6IiBzdHlsZT0ic3Ryb2tlOiBub25lOyBzdHJva2Utd2lkdGg6IDE7IHN0cm9rZS1kYXNoYXJyYXk6IG5vbmU7IHN0cm9rZS1saW5lY2FwOiBidXR0OyBzdHJva2UtbGluZWpvaW46IG1pdGVyOyBzdHJva2UtbWl0ZXJsaW1pdDogMTA7IGZpbGw6IHJnYigxNjUsMTY0LDE2NCk7IGZpbGwtcnVsZTogbm9uemVybzsgb3BhY2l0eTogMTsiIHRyYW5zZm9ybT0iIG1hdHJpeCgxIDAgMCAxIDAgMCkgIiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KCTxwYXRoIGQ9Ik0gNDUgOTAgYyAtMTAuNjEzIDAgLTIwLjkyMiAtMy43NzMgLTI5LjAyOCAtMTAuNjI1IGMgLTAuNjQ4IC0wLjU0OCAtMC44OCAtMS40NDQgLTAuNTc5IC0yLjIzNyBDIDIwLjAzNCA2NC45MTkgMzEuOTMzIDU2LjcxIDQ1IDU2LjcxIHMgMjQuOTY2IDguMjA5IDI5LjYwNyAyMC40MjggYyAwLjMwMSAwLjc5MyAwLjA2OSAxLjY4OSAtMC41NzkgMi4yMzcgQyA2NS45MjIgODYuMjI3IDU1LjYxMyA5MCA0NSA5MCB6IiBzdHlsZT0ic3Ryb2tlOiBub25lOyBzdHJva2Utd2lkdGg6IDE7IHN0cm9rZS1kYXNoYXJyYXk6IG5vbmU7IHN0cm9rZS1saW5lY2FwOiBidXR0OyBzdHJva2UtbGluZWpvaW46IG1pdGVyOyBzdHJva2UtbWl0ZXJsaW1pdDogMTA7IGZpbGw6IHJnYigxNjUsMTY0LDE2NCk7IGZpbGwtcnVsZTogbm9uemVybzsgb3BhY2l0eTogMTsiIHRyYW5zZm9ybT0iIG1hdHJpeCgxIDAgMCAxIDAgMCkgIiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPC9nPgo8L3N2Zz4=";
|
|
343
|
+
var NextGameLabel = ({ nextGameTime }) => {
|
|
344
|
+
const date = typeof nextGameTime === "string" ? new Date(nextGameTime) : nextGameTime;
|
|
345
|
+
return /* @__PURE__ */ jsxs(Typography, { variant: "caption", sx: { display: "block", mb: 1, color: "primary.main", fontWeight: "bold" }, children: [
|
|
346
|
+
"Next Game: ",
|
|
347
|
+
date.toLocaleString()
|
|
348
|
+
] });
|
|
349
|
+
};
|
|
350
|
+
var NextGameLabel_default = NextGameLabel;
|
|
351
|
+
var AutoResizingTextarea = (props) => {
|
|
352
|
+
const { isInEditMode, onChange, textareaRef, value } = props;
|
|
353
|
+
useEffect(() => {
|
|
354
|
+
if (isInEditMode && textareaRef.current) {
|
|
355
|
+
const textarea = textareaRef.current;
|
|
356
|
+
textarea.style.height = "auto";
|
|
357
|
+
textarea.style.height = `${textarea.scrollHeight}px`;
|
|
358
|
+
}
|
|
359
|
+
}, [isInEditMode, textareaRef, value]);
|
|
360
|
+
return /* @__PURE__ */ jsx(
|
|
361
|
+
"textarea",
|
|
362
|
+
{
|
|
363
|
+
ref: textareaRef,
|
|
364
|
+
value,
|
|
365
|
+
onChange: (e) => onChange(e.target.value),
|
|
366
|
+
style: {
|
|
367
|
+
backgroundColor: "#fffbea",
|
|
368
|
+
overflow: "hidden",
|
|
369
|
+
resize: "none",
|
|
370
|
+
width: "100%"
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
);
|
|
374
|
+
};
|
|
375
|
+
var AutoResizingTextarea_default = AutoResizingTextarea;
|
|
152
376
|
var PlayerHighlightsCard = function(props) {
|
|
153
377
|
const {
|
|
154
378
|
allTags,
|
|
@@ -160,14 +384,14 @@ var PlayerHighlightsCard = function(props) {
|
|
|
160
384
|
removeFromTable
|
|
161
385
|
} = props;
|
|
162
386
|
return /* @__PURE__ */ jsx(Card, { elevation: 3, sx: { backgroundColor: canEdit ? "#fffbea" : "#f5f9fa", marginBottom: "6px" }, children: /* @__PURE__ */ jsxs(CardContent, { children: [
|
|
163
|
-
/* @__PURE__ */ jsxs(
|
|
164
|
-
/* @__PURE__ */ jsxs(
|
|
165
|
-
/* @__PURE__ */ jsx(
|
|
166
|
-
/* @__PURE__ */ jsx(
|
|
387
|
+
/* @__PURE__ */ jsxs(Grid2, { container: true, spacing: 2, direction: "column", children: [
|
|
388
|
+
/* @__PURE__ */ jsxs(Grid2, { container: true, direction: "row", children: [
|
|
389
|
+
/* @__PURE__ */ jsx(Grid2, { children: /* @__PURE__ */ jsx(Image, { alt: player.username + "'s profile pic", height: 64, src: player.miniPic || DEFAULT_PROFILE_PIC, width: 64 }) }),
|
|
390
|
+
/* @__PURE__ */ jsx(Grid2, { children: /* @__PURE__ */ jsx(Typography, { variant: "h5", children: player.username }) })
|
|
167
391
|
] }),
|
|
168
|
-
/* @__PURE__ */ jsx(
|
|
392
|
+
/* @__PURE__ */ jsx(Grid2, { children: renderTagsFromIds(player.tags, allTags) })
|
|
169
393
|
] }),
|
|
170
|
-
canEdit && /* @__PURE__ */ jsxs(
|
|
394
|
+
canEdit && /* @__PURE__ */ jsxs(Grid2, { children: [
|
|
171
395
|
/* @__PURE__ */ jsx(Button2, { onClick: () => removeFromTable(player), children: isWaitList ? /* @__PURE__ */ jsx("p", { children: "Deny Player" }) : /* @__PURE__ */ jsx("p", { children: "Remove Player" }) }),
|
|
172
396
|
canChangeDungeonMaster && /* @__PURE__ */ jsx(Button2, { onClick: () => {
|
|
173
397
|
handleAssignToDungeonMaster(player);
|
|
@@ -179,11 +403,11 @@ var PlayerHighlightsCard = function(props) {
|
|
|
179
403
|
var DMHighlightsCard = function({ canEdit, player, allTags }) {
|
|
180
404
|
return /* @__PURE__ */ jsxs(Card, { elevation: 3, sx: { backgroundColor: "#f5f9fa", marginBottom: "6px" }, children: [
|
|
181
405
|
/* @__PURE__ */ jsx(CardHeader, { slotProps: { title: { variant: "h4" } }, title: "Game Master" }),
|
|
182
|
-
/* @__PURE__ */ jsx(CardContent, { sx: { backgroundColor: canEdit ? "#fffbea" : "inherit" }, children: /* @__PURE__ */ jsxs(
|
|
183
|
-
/* @__PURE__ */ jsx(
|
|
184
|
-
/* @__PURE__ */ jsxs(
|
|
185
|
-
/* @__PURE__ */ jsx(
|
|
186
|
-
/* @__PURE__ */ jsx(
|
|
406
|
+
/* @__PURE__ */ jsx(CardContent, { sx: { backgroundColor: canEdit ? "#fffbea" : "inherit" }, children: /* @__PURE__ */ jsxs(Grid2, { container: true, spacing: 2, direction: "column", children: [
|
|
407
|
+
/* @__PURE__ */ jsx(Grid2, { children: /* @__PURE__ */ jsx(Typography, { variant: "h5", children: player.username }) }),
|
|
408
|
+
/* @__PURE__ */ jsxs(Grid2, { container: true, direction: "row", children: [
|
|
409
|
+
/* @__PURE__ */ jsx(Grid2, { children: /* @__PURE__ */ jsx(Image, { alt: player.username + "'s profile pic", height: 120, src: player.imageUrl || DEFAULT_PROFILE_PIC, width: 256 }) }),
|
|
410
|
+
/* @__PURE__ */ jsx(Grid2, { children: renderTagsFromIds(player.tags, allTags) }),
|
|
187
411
|
/* @__PURE__ */ jsx(Typography, { children: player.description })
|
|
188
412
|
] })
|
|
189
413
|
] }) })
|
|
@@ -212,12 +436,11 @@ function TableActionsBar(props) {
|
|
|
212
436
|
if (waitlistPlayers.length === 0) {
|
|
213
437
|
return /* @__PURE__ */ jsx("p", { children: "Waitlist is empty!" });
|
|
214
438
|
}
|
|
215
|
-
return /* @__PURE__ */ jsxs(
|
|
216
|
-
/* @__PURE__ */ jsx(
|
|
217
|
-
/* @__PURE__ */ jsx("ul", { className: "gap-8", children: waitlistPlayers.map((player) => /* @__PURE__ */ jsxs(
|
|
439
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
440
|
+
/* @__PURE__ */ jsx("ul", { className: "gap-8 px-6", children: waitlistPlayers.map((player) => /* @__PURE__ */ jsxs(
|
|
218
441
|
"li",
|
|
219
442
|
{
|
|
220
|
-
className: `${canMovePlayersToTable ? "bg-amber-100 cursor-pointer" : "bg-gray-200"} mb-8 flex flex-row flex-start space-between
|
|
443
|
+
className: `${canMovePlayersToTable ? "bg-amber-100 cursor-pointer" : "bg-gray-200"} mb-8 flex flex-row flex-start space-between items-center gap-3 p-2 rounded`,
|
|
221
444
|
onClick: () => canMovePlayersToTable ? onPromoteWaitlistPlayer == null ? void 0 : onPromoteWaitlistPlayer(player.id) : void 0,
|
|
222
445
|
tabIndex: 0,
|
|
223
446
|
children: [
|
|
@@ -226,7 +449,7 @@ function TableActionsBar(props) {
|
|
|
226
449
|
{
|
|
227
450
|
alt: player.username + "'s profile pic",
|
|
228
451
|
height: 64,
|
|
229
|
-
src: player.miniPic ||
|
|
452
|
+
src: player.miniPic || DEFAULT_PROFILE_PIC,
|
|
230
453
|
width: 64
|
|
231
454
|
}
|
|
232
455
|
),
|
|
@@ -235,26 +458,26 @@ function TableActionsBar(props) {
|
|
|
235
458
|
},
|
|
236
459
|
player.id
|
|
237
460
|
)) }),
|
|
238
|
-
/* @__PURE__ */ jsx(
|
|
461
|
+
/* @__PURE__ */ jsx(DialogActions, { children: /* @__PURE__ */ jsx(Button2, { onClick: () => hideModal(), children: "Close" }) })
|
|
239
462
|
] });
|
|
240
463
|
};
|
|
241
|
-
return /* @__PURE__ */ jsxs(Grid
|
|
242
|
-
/* @__PURE__ */ jsx(Grid
|
|
464
|
+
return /* @__PURE__ */ jsxs(Grid, { container: true, direction: "column", spacing: 1, children: [
|
|
465
|
+
/* @__PURE__ */ jsx(Grid, { container: true, direction: "row", children: /* @__PURE__ */ jsxs(Typography, { color: "white", sx: { textShadow: "4px 4px 6px rgba(0, 0, 0, 0.5)" }, children: [
|
|
243
466
|
"Players: ",
|
|
244
467
|
numPlayers,
|
|
245
468
|
" / ",
|
|
246
469
|
slots
|
|
247
470
|
] }) }),
|
|
248
|
-
/* @__PURE__ */ jsxs(Grid
|
|
471
|
+
/* @__PURE__ */ jsxs(Grid, { container: true, direction: "row", children: [
|
|
249
472
|
!isOwner && !isPlayer && !isDM && !onWaitlist && /* @__PURE__ */ jsx(Button2, { onClick: () => onJoinWaitlist == null ? void 0 : onJoinWaitlist(), sx: buttonStyle, children: "Join Waitlist" }),
|
|
250
473
|
!isOwner && (isPlayer || onWaitlist) && /* @__PURE__ */ jsx(Button2, { onClick: () => onLeaveTable == null ? void 0 : onLeaveTable(), sx: buttonStyle, children: onWaitlist ? "Leave Waitlist" : "Leave Table" }),
|
|
251
474
|
canEditTable ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
252
|
-
/* @__PURE__ */ jsx(Button2, { onClick: () => onEditModeChange(true), sx: buttonStyle, endIcon: /* @__PURE__ */ jsx(
|
|
475
|
+
/* @__PURE__ */ jsx(Button2, { onClick: () => onEditModeChange(true), sx: buttonStyle, endIcon: /* @__PURE__ */ jsx(EditIcon2, {}), children: "Edit" }),
|
|
253
476
|
canViewWaitlist ? /* @__PURE__ */ jsx(
|
|
254
477
|
Button2,
|
|
255
478
|
{
|
|
256
479
|
endIcon: /* @__PURE__ */ jsx(ListIcon, {}),
|
|
257
|
-
onClick: () => showModal(renderPlayerWaitlistModalContent(false)),
|
|
480
|
+
onClick: () => showModal(renderPlayerWaitlistModalContent(false), "Waitlist Players:"),
|
|
258
481
|
sx: buttonStyle,
|
|
259
482
|
children: "View Waitlist"
|
|
260
483
|
}
|
|
@@ -266,13 +489,25 @@ function TableActionsBar(props) {
|
|
|
266
489
|
Button2,
|
|
267
490
|
{
|
|
268
491
|
endIcon: /* @__PURE__ */ jsx(ListIcon, {}),
|
|
269
|
-
onClick: () => showModal(renderPlayerWaitlistModalContent(true)),
|
|
492
|
+
onClick: () => showModal(renderPlayerWaitlistModalContent(true), "Waitlist Players:"),
|
|
270
493
|
sx: buttonStyle,
|
|
271
494
|
children: "Edit Waitlist"
|
|
272
495
|
}
|
|
273
496
|
)
|
|
274
497
|
] }) : null,
|
|
275
|
-
isOwner && /* @__PURE__ */ jsx(
|
|
498
|
+
isOwner && /* @__PURE__ */ jsx(
|
|
499
|
+
Button2,
|
|
500
|
+
{
|
|
501
|
+
onClick: () => showModal(
|
|
502
|
+
/* @__PURE__ */ jsx(Typography, { children: "Are you sure you want to delete this table? This action cannot be undone." }),
|
|
503
|
+
"Delete Table",
|
|
504
|
+
{ acceptText: "Delete", onAccept: () => onDeleteTable == null ? void 0 : onDeleteTable() }
|
|
505
|
+
),
|
|
506
|
+
sx: buttonStyle,
|
|
507
|
+
endIcon: /* @__PURE__ */ jsx(DeleteIcon, {}),
|
|
508
|
+
children: "Delete Table"
|
|
509
|
+
}
|
|
510
|
+
)
|
|
276
511
|
] })
|
|
277
512
|
] });
|
|
278
513
|
}
|
|
@@ -282,135 +517,82 @@ var buttonStyle = {
|
|
|
282
517
|
color: "white",
|
|
283
518
|
borderRadius: "5px"
|
|
284
519
|
};
|
|
285
|
-
var AutoResizingTextarea = (props) => {
|
|
286
|
-
const { isInEditMode, onChange, textareaRef, value } = props;
|
|
287
|
-
useEffect(() => {
|
|
288
|
-
if (isInEditMode && textareaRef.current) {
|
|
289
|
-
const textarea = textareaRef.current;
|
|
290
|
-
textarea.style.height = "auto";
|
|
291
|
-
textarea.style.height = `${textarea.scrollHeight}px`;
|
|
292
|
-
}
|
|
293
|
-
}, [isInEditMode, textareaRef, value]);
|
|
294
|
-
return /* @__PURE__ */ jsx(
|
|
295
|
-
"textarea",
|
|
296
|
-
{
|
|
297
|
-
ref: textareaRef,
|
|
298
|
-
value,
|
|
299
|
-
onChange: (e) => onChange(e.target.value),
|
|
300
|
-
style: {
|
|
301
|
-
backgroundColor: "#fffbea",
|
|
302
|
-
overflow: "hidden",
|
|
303
|
-
resize: "none",
|
|
304
|
-
width: "100%"
|
|
305
|
-
}
|
|
306
|
-
}
|
|
307
|
-
);
|
|
308
|
-
};
|
|
309
|
-
var AutoResizingTextarea_default = AutoResizingTextarea;
|
|
310
|
-
function TagEditor({
|
|
311
|
-
title = "Tags",
|
|
312
|
-
selectedTags,
|
|
313
|
-
possibleTags,
|
|
314
|
-
onToggleTag
|
|
315
|
-
}) {
|
|
316
|
-
const [inputValue, setInputValue] = useState("");
|
|
317
|
-
const selectedIds = useMemo(() => selectedTags.map((tag) => tag.id), [selectedTags]);
|
|
318
|
-
const options = useMemo(
|
|
319
|
-
() => possibleTags.map((tag) => ({ value: tag.id, label: tag.label })),
|
|
320
|
-
[possibleTags]
|
|
321
|
-
);
|
|
322
|
-
return /* @__PURE__ */ jsx(Grid, { container: true, children: /* @__PURE__ */ jsx(Grid, { size: { xs: 12 }, children: /* @__PURE__ */ jsxs(Card2, { children: [
|
|
323
|
-
/* @__PURE__ */ jsx(
|
|
324
|
-
CardHeader2,
|
|
325
|
-
{
|
|
326
|
-
title,
|
|
327
|
-
style: {
|
|
328
|
-
background: "linear-gradient(135deg, rgba(25, 118, 210, 0.8), rgba(25, 118, 210, 1))",
|
|
329
|
-
color: "#FFFFFF",
|
|
330
|
-
fontSize: "1.5rem",
|
|
331
|
-
textShadow: "0px 3px 6px rgba(0, 0, 0, 0.5)"
|
|
332
|
-
}
|
|
333
|
-
}
|
|
334
|
-
),
|
|
335
|
-
/* @__PURE__ */ jsxs(CardContent2, { children: [
|
|
336
|
-
/* @__PURE__ */ jsx("div", { className: "mt-2 flex flex-wrap gap-2", children: selectedTags.map((tag) => /* @__PURE__ */ jsx(
|
|
337
|
-
Chip,
|
|
338
|
-
{
|
|
339
|
-
tag,
|
|
340
|
-
removeCallback: () => onToggleTag(tag.id)
|
|
341
|
-
},
|
|
342
|
-
tag.id
|
|
343
|
-
)) }),
|
|
344
|
-
/* @__PURE__ */ jsx(Grid, { container: true, spacing: 3, children: /* @__PURE__ */ jsx(Grid, { sx: { marginTop: 3, width: "100%" }, children: /* @__PURE__ */ jsx(
|
|
345
|
-
Autocomplete,
|
|
346
|
-
{
|
|
347
|
-
options,
|
|
348
|
-
filterOptions: (availableOptions, state) => availableOptions.filter(
|
|
349
|
-
(option) => !selectedIds.includes(option.value) && option.label.toLowerCase().includes(state.inputValue.toLowerCase())
|
|
350
|
-
).slice(0, 3),
|
|
351
|
-
value: null,
|
|
352
|
-
inputValue,
|
|
353
|
-
onInputChange: (event, newInputValue) => {
|
|
354
|
-
if (event && event.type === "change") {
|
|
355
|
-
setInputValue(newInputValue);
|
|
356
|
-
}
|
|
357
|
-
},
|
|
358
|
-
onChange: (event, newValue) => {
|
|
359
|
-
if (newValue) {
|
|
360
|
-
onToggleTag(newValue.value);
|
|
361
|
-
}
|
|
362
|
-
setInputValue("");
|
|
363
|
-
},
|
|
364
|
-
slots: { popper: CustomPopper },
|
|
365
|
-
renderInput: (params) => /* @__PURE__ */ jsx(TextField, { ...params, label: "Select Tags" })
|
|
366
|
-
},
|
|
367
|
-
selectedIds.join("-")
|
|
368
|
-
) }) })
|
|
369
|
-
] })
|
|
370
|
-
] }) }) });
|
|
371
|
-
}
|
|
372
|
-
var CustomPopper = (props) => {
|
|
373
|
-
return /* @__PURE__ */ jsx(
|
|
374
|
-
Popper,
|
|
375
|
-
{
|
|
376
|
-
...props,
|
|
377
|
-
modifiers: [
|
|
378
|
-
{
|
|
379
|
-
name: "preventOverflow",
|
|
380
|
-
options: { boundary: "viewport" }
|
|
381
|
-
},
|
|
382
|
-
{
|
|
383
|
-
name: "offset",
|
|
384
|
-
options: { offset: [0, -10] }
|
|
385
|
-
}
|
|
386
|
-
],
|
|
387
|
-
placement: "top-start"
|
|
388
|
-
}
|
|
389
|
-
);
|
|
390
|
-
};
|
|
391
520
|
function TablePageLayout(props) {
|
|
392
521
|
var _a;
|
|
393
|
-
const {
|
|
522
|
+
const { hideModal, showModal } = useModal();
|
|
523
|
+
const { allTags, dungeonMaster, onDeleteTable, onJoinWaitlist, onLeaveTable, onSaveDraft, players, table, tableStatus, waitlistPlayers, startWithEditTitle, eventTagId } = props;
|
|
524
|
+
const canEdit = tableStatus.isOwner;
|
|
394
525
|
const textAreaRef = useRef(null);
|
|
395
526
|
const [isTableInEditMode, setIsTableInEditMode] = useState(false);
|
|
527
|
+
const [currentTitle, setCurrentTitle] = useState(table.title);
|
|
528
|
+
const [currentSubtitle, setCurrentSubtitle] = useState(table.shortDescription);
|
|
396
529
|
const [currentDescription, setCurrentDescription] = useState(table.description);
|
|
397
530
|
const [currentDungeonMaster, setCurrentDungeonMaster] = useState(dungeonMaster);
|
|
398
531
|
const [currentPlayers, setCurrentPlayers] = useState(players);
|
|
399
|
-
const [currentShortDescription, setCurrentShortDescription] = useState(table.shortDescription);
|
|
400
|
-
const [currentTitle, setCurrentTitle] = useState(table.title);
|
|
401
532
|
const [currentWaitlistPlayers, setCurrentWaitlistPlayers] = useState(waitlistPlayers);
|
|
402
533
|
const [currentTagIds, setCurrentTagIds] = useState((_a = table.tags) != null ? _a : []);
|
|
534
|
+
const pendingEdits = useRef({ title: currentTitle, subtitle: currentSubtitle, tags: currentTagIds });
|
|
535
|
+
const handleSaveTable = (tableData = {}) => {
|
|
536
|
+
const nextDraft = {
|
|
537
|
+
...table,
|
|
538
|
+
description: currentDescription,
|
|
539
|
+
dungeonMaster: String(currentDungeonMaster.id),
|
|
540
|
+
players: currentPlayers.map((player) => player.id),
|
|
541
|
+
shortDescription: currentSubtitle,
|
|
542
|
+
tags: currentTagIds,
|
|
543
|
+
title: currentTitle,
|
|
544
|
+
waitlist: currentWaitlistPlayers.map((player) => player.id),
|
|
545
|
+
...tableData
|
|
546
|
+
};
|
|
547
|
+
void (onSaveDraft == null ? void 0 : onSaveDraft(nextDraft));
|
|
548
|
+
setIsTableInEditMode(false);
|
|
549
|
+
};
|
|
550
|
+
const clean = (text) => text.replaceAll(
|
|
551
|
+
/\b(n[i1!]g+(er|a|e)s?|f[a@]g|f[a@]g+[o0]ts?|k[i1!]k[e3]s?|ch[i1!]nks?|w[e3]tb[a@]cks?|r[a@]gh[e3][a@]ds?|t[o0]w[e3]lh[e3][a@]ds?|r[e3]t[a@]rd(ed|s)?|c[o0][o0]ns?|tr[a@]nn(y|i[e3]s?)|g[o0][o0]ks?)\b/gi,
|
|
552
|
+
"dudes"
|
|
553
|
+
);
|
|
554
|
+
const editTableDetails = () => {
|
|
555
|
+
if (!canEdit) {
|
|
556
|
+
return;
|
|
557
|
+
}
|
|
558
|
+
pendingEdits.current = {
|
|
559
|
+
title: currentTitle,
|
|
560
|
+
subtitle: currentSubtitle,
|
|
561
|
+
tags: currentTagIds
|
|
562
|
+
};
|
|
563
|
+
const editContent = /* @__PURE__ */ jsx(
|
|
564
|
+
EditTableDetailsForm,
|
|
565
|
+
{
|
|
566
|
+
initialTitle: currentTitle,
|
|
567
|
+
initialSubtitle: currentSubtitle,
|
|
568
|
+
onTitleChange: (t) => pendingEdits.current.title = t,
|
|
569
|
+
onSubtitleChange: (s) => pendingEdits.current.subtitle = s,
|
|
570
|
+
onTagChange: (t) => pendingEdits.current.tags = t,
|
|
571
|
+
initialTagIDs: currentTagIds,
|
|
572
|
+
allTags: allTags.filter((t) => t.appliesTo.tables),
|
|
573
|
+
allowEditingTitles: true
|
|
574
|
+
}
|
|
575
|
+
);
|
|
576
|
+
showModal(editContent, "Edit Table Details", {
|
|
577
|
+
acceptText: "Save",
|
|
578
|
+
onAccept: () => {
|
|
579
|
+
setCurrentTitle(clean(pendingEdits.current.title));
|
|
580
|
+
setCurrentSubtitle(clean(pendingEdits.current.subtitle));
|
|
581
|
+
setCurrentTagIds(pendingEdits.current.tags);
|
|
582
|
+
handleSaveTable({
|
|
583
|
+
title: clean(pendingEdits.current.title),
|
|
584
|
+
shortDescription: clean(pendingEdits.current.subtitle),
|
|
585
|
+
tags: pendingEdits.current.tags
|
|
586
|
+
});
|
|
587
|
+
}
|
|
588
|
+
});
|
|
589
|
+
};
|
|
403
590
|
useEffect(() => {
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
setCurrentTitle(table.title);
|
|
410
|
-
setCurrentWaitlistPlayers(waitlistPlayers);
|
|
411
|
-
setCurrentTagIds((_a2 = table.tags) != null ? _a2 : []);
|
|
412
|
-
}, [dungeonMaster, players, table, waitlistPlayers]);
|
|
413
|
-
const currentTags = useMemo(
|
|
591
|
+
if (startWithEditTitle) {
|
|
592
|
+
editTableDetails();
|
|
593
|
+
}
|
|
594
|
+
});
|
|
595
|
+
useMemo(
|
|
414
596
|
() => allTags.filter((tag) => currentTagIds.includes(tag.id)),
|
|
415
597
|
[allTags, currentTagIds]
|
|
416
598
|
);
|
|
@@ -430,37 +612,17 @@ function TablePageLayout(props) {
|
|
|
430
612
|
return prevWaitlist.filter((player) => player.id !== playerIdToPromote);
|
|
431
613
|
});
|
|
432
614
|
};
|
|
433
|
-
const handleToggleTag = (tagId) => {
|
|
434
|
-
setCurrentTagIds(
|
|
435
|
-
(prevState) => prevState.includes(tagId) ? prevState.filter((id) => id !== tagId) : [...prevState, tagId]
|
|
436
|
-
);
|
|
437
|
-
};
|
|
438
|
-
const handleSaveTable = () => {
|
|
439
|
-
const nextDraft = {
|
|
440
|
-
...table,
|
|
441
|
-
description: currentDescription,
|
|
442
|
-
dungeonMaster: String(currentDungeonMaster.id),
|
|
443
|
-
players: currentPlayers.map((player) => player.id),
|
|
444
|
-
shortDescription: currentShortDescription,
|
|
445
|
-
tags: currentTagIds,
|
|
446
|
-
title: currentTitle,
|
|
447
|
-
waitlist: currentWaitlistPlayers.map((player) => player.id)
|
|
448
|
-
};
|
|
449
|
-
void (onSaveDraft == null ? void 0 : onSaveDraft(nextDraft));
|
|
450
|
-
setIsTableInEditMode(false);
|
|
451
|
-
};
|
|
452
615
|
return /* @__PURE__ */ jsx(
|
|
453
616
|
Card,
|
|
454
617
|
{
|
|
455
618
|
sx: {
|
|
456
619
|
backgroundColor: isTableInEditMode ? "lightsalmon" : "white",
|
|
457
|
-
borderRadius: "5%",
|
|
458
620
|
p: 2,
|
|
459
621
|
boxShadow: "0px 8px 15px rgba(25, 118, 210, 0.3)"
|
|
460
622
|
},
|
|
461
|
-
children: /* @__PURE__ */ jsxs(
|
|
623
|
+
children: /* @__PURE__ */ jsxs(Grid2, { container: true, direction: "column", children: [
|
|
462
624
|
/* @__PURE__ */ jsxs(
|
|
463
|
-
|
|
625
|
+
Grid2,
|
|
464
626
|
{
|
|
465
627
|
container: true,
|
|
466
628
|
direction: "column",
|
|
@@ -473,39 +635,49 @@ function TablePageLayout(props) {
|
|
|
473
635
|
textShadow: "4px 4px 6px rgba(0, 0, 0, 0.5)"
|
|
474
636
|
},
|
|
475
637
|
children: [
|
|
476
|
-
/* @__PURE__ */ jsx(Box, { children:
|
|
477
|
-
|
|
478
|
-
{
|
|
479
|
-
onChange: (e) => setCurrentTitle(e.target.value),
|
|
480
|
-
style: { backgroundColor: "#fffbea" },
|
|
481
|
-
tabIndex: 0,
|
|
482
|
-
type: "text",
|
|
483
|
-
value: currentTitle
|
|
484
|
-
}
|
|
485
|
-
) : /* @__PURE__ */ jsx(
|
|
486
|
-
CardHeader,
|
|
638
|
+
/* @__PURE__ */ jsx(Box, { children: /* @__PURE__ */ jsxs(
|
|
639
|
+
Box,
|
|
487
640
|
{
|
|
488
|
-
|
|
489
|
-
sx: {
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
641
|
+
className: `flex items-center gap-1 ${canEdit ? "cursor-pointer" : ""}`,
|
|
642
|
+
sx: { "&:hover .edit-icon": { opacity: 1 } },
|
|
643
|
+
onClick: editTableDetails,
|
|
644
|
+
children: [
|
|
645
|
+
/* @__PURE__ */ jsx(
|
|
646
|
+
CardHeader,
|
|
647
|
+
{
|
|
648
|
+
title: currentTitle,
|
|
649
|
+
sx: {
|
|
650
|
+
p: 0,
|
|
651
|
+
"& .MuiCardHeader-title": {
|
|
652
|
+
color: "white",
|
|
653
|
+
fontWeight: 700
|
|
654
|
+
}
|
|
655
|
+
}
|
|
656
|
+
}
|
|
657
|
+
),
|
|
658
|
+
canEdit ? /* @__PURE__ */ jsx(EditIcon2, { className: "edit-icon text-white", sx: { opacity: 0, transition: "opacity 0.2s" } }) : ""
|
|
659
|
+
]
|
|
496
660
|
}
|
|
497
661
|
) }),
|
|
498
|
-
|
|
499
|
-
|
|
662
|
+
/* @__PURE__ */ jsxs(
|
|
663
|
+
Box,
|
|
500
664
|
{
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
665
|
+
className: `flex items-center gap-1 ${canEdit ? "cursor-pointer" : ""}`,
|
|
666
|
+
sx: { "&:hover .edit-icon": { opacity: 1 } },
|
|
667
|
+
onClick: editTableDetails,
|
|
668
|
+
children: [
|
|
669
|
+
/* @__PURE__ */ jsx(
|
|
670
|
+
Typography,
|
|
671
|
+
{
|
|
672
|
+
sx: { color: "white", opacity: 0.95 },
|
|
673
|
+
children: currentSubtitle
|
|
674
|
+
}
|
|
675
|
+
),
|
|
676
|
+
canEdit ? /* @__PURE__ */ jsx(EditIcon2, { className: "edit-icon text-white", sx: { opacity: 0, transition: "opacity 0.2s", fontSize: "medium" } }) : ""
|
|
677
|
+
]
|
|
506
678
|
}
|
|
507
|
-
)
|
|
508
|
-
/* @__PURE__ */ jsx(
|
|
679
|
+
),
|
|
680
|
+
/* @__PURE__ */ jsx(Grid2, { container: true, onClick: editTableDetails, className: `${canEdit ? "cursor-pointer" : ""}`, children: renderTags(currentTagIds, allTags, canEdit, table.eventTagId || eventTagId) }),
|
|
509
681
|
/* @__PURE__ */ jsx(
|
|
510
682
|
TableActionsBar,
|
|
511
683
|
{
|
|
@@ -525,8 +697,8 @@ function TablePageLayout(props) {
|
|
|
525
697
|
]
|
|
526
698
|
}
|
|
527
699
|
),
|
|
528
|
-
/* @__PURE__ */ jsxs(
|
|
529
|
-
/* @__PURE__ */ jsx(
|
|
700
|
+
/* @__PURE__ */ jsxs(Grid2, { container: true, spacing: 2, sx: { mt: 2 }, children: [
|
|
701
|
+
/* @__PURE__ */ jsx(Grid2, { size: { xs: 12, md: 8 }, children: /* @__PURE__ */ jsx(Card, { sx: { height: "100%" }, children: /* @__PURE__ */ jsx(CardContent, { children: isTableInEditMode ? /* @__PURE__ */ jsx(
|
|
530
702
|
AutoResizingTextarea_default,
|
|
531
703
|
{
|
|
532
704
|
isInEditMode: isTableInEditMode,
|
|
@@ -535,7 +707,7 @@ function TablePageLayout(props) {
|
|
|
535
707
|
value: currentDescription
|
|
536
708
|
}
|
|
537
709
|
) : /* @__PURE__ */ jsx(Typography, { sx: { whiteSpace: "pre-wrap" }, children: currentDescription }) }) }) }),
|
|
538
|
-
/* @__PURE__ */ jsxs(
|
|
710
|
+
/* @__PURE__ */ jsxs(Grid2, { size: { xs: 12, md: 4 }, children: [
|
|
539
711
|
/* @__PURE__ */ jsx(DMHighlightsCard, { canEdit: isTableInEditMode, player: currentDungeonMaster, allTags }),
|
|
540
712
|
/* @__PURE__ */ jsxs(Card, { sx: { height: "100%" }, children: [
|
|
541
713
|
/* @__PURE__ */ jsx(CardHeader, { slotProps: { title: { variant: "h4" } }, title: "Players: " }),
|
|
@@ -558,31 +730,78 @@ function TablePageLayout(props) {
|
|
|
558
730
|
}
|
|
559
731
|
);
|
|
560
732
|
}
|
|
561
|
-
var renderTags = function(tags, allTags) {
|
|
733
|
+
var renderTags = function(tags, allTags, canEdit, eventTagId) {
|
|
562
734
|
if (!tags || !allTags) {
|
|
563
735
|
return /* @__PURE__ */ jsx(Fragment, {});
|
|
564
736
|
}
|
|
565
|
-
return /* @__PURE__ */
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
737
|
+
return /* @__PURE__ */ jsxs(Grid2, { container: true, spacing: 1, sx: { pb: 1.5 }, children: [
|
|
738
|
+
renderTagsFromIds(tags, allTags, { showEventTag: true, eventTagId }),
|
|
739
|
+
canEdit ? /* @__PURE__ */ jsx(
|
|
740
|
+
Button,
|
|
741
|
+
{
|
|
742
|
+
variant: "text",
|
|
743
|
+
className: "inline-block text-sm px-3 py-1font-outlined m-0.5 font-stretch-105% font-sans",
|
|
744
|
+
sx: {
|
|
745
|
+
color: "white",
|
|
746
|
+
textShadow: "black 1.5px 1px 1.5px",
|
|
747
|
+
"&:hover": {
|
|
748
|
+
background: "#889"
|
|
749
|
+
}
|
|
750
|
+
},
|
|
751
|
+
children: "Edit Tags..."
|
|
752
|
+
}
|
|
753
|
+
) : ""
|
|
754
|
+
] });
|
|
583
755
|
};
|
|
584
756
|
var TablePageLayout_default = TablePageLayout;
|
|
757
|
+
var ModalProvider = ({ children }) => {
|
|
758
|
+
var _a;
|
|
759
|
+
const [modalContent, setModalContent] = useState(null);
|
|
760
|
+
const [displayModal, setDisplayModal] = useState(false);
|
|
761
|
+
const [title, setTitle] = useState("");
|
|
762
|
+
const [options, setOptions] = useState({});
|
|
763
|
+
const showModal = (content, title2, opts) => {
|
|
764
|
+
setModalContent(content);
|
|
765
|
+
setTitle(title2);
|
|
766
|
+
setOptions(opts != null ? opts : {});
|
|
767
|
+
setDisplayModal(true);
|
|
768
|
+
};
|
|
769
|
+
const hideModal = () => {
|
|
770
|
+
setDisplayModal(false);
|
|
771
|
+
};
|
|
772
|
+
return /* @__PURE__ */ jsxs(ModalContext.Provider, { value: { showModal, hideModal }, children: [
|
|
773
|
+
children,
|
|
774
|
+
/* @__PURE__ */ jsxs(Dialog, { open: displayModal, onClose: hideModal, sx: { height: "85%" }, children: [
|
|
775
|
+
/* @__PURE__ */ jsxs(Box, { children: [
|
|
776
|
+
/* @__PURE__ */ jsx(DialogTitle, { sx: { marginRight: "20px", minWidth: "400px" }, children: title }),
|
|
777
|
+
/* @__PURE__ */ jsx(
|
|
778
|
+
IconButton,
|
|
779
|
+
{
|
|
780
|
+
"aria-label": "close",
|
|
781
|
+
onClick: hideModal,
|
|
782
|
+
sx: { position: "absolute", right: 8, top: 8 },
|
|
783
|
+
children: /* @__PURE__ */ jsx(CloseIcon, {})
|
|
784
|
+
}
|
|
785
|
+
)
|
|
786
|
+
] }),
|
|
787
|
+
/* @__PURE__ */ jsx(DialogContent, { sx: { paddingTop: 0 }, children: modalContent }),
|
|
788
|
+
(options.acceptText || options.onAccept) && /* @__PURE__ */ jsxs(DialogActions, { children: [
|
|
789
|
+
/* @__PURE__ */ jsx(Button2, { variant: "contained", onClick: () => {
|
|
790
|
+
var _a2;
|
|
791
|
+
hideModal();
|
|
792
|
+
(_a2 = options.onAccept) == null ? void 0 : _a2.call(options);
|
|
793
|
+
}, children: (_a = options.acceptText) != null ? _a : "OK" }),
|
|
794
|
+
/* @__PURE__ */ jsx(Button2, { onClick: () => {
|
|
795
|
+
var _a2;
|
|
796
|
+
hideModal();
|
|
797
|
+
(_a2 = options.onCancel) == null ? void 0 : _a2.call(options);
|
|
798
|
+
}, children: "Cancel" })
|
|
799
|
+
] })
|
|
800
|
+
] })
|
|
801
|
+
] });
|
|
802
|
+
};
|
|
803
|
+
var ModalProvider_default = ModalProvider;
|
|
585
804
|
|
|
586
|
-
export { DMHighlightsCard, GameTableProvider, ModalContext, ModalProvider_default as ModalProvider, NextGameLabel_default as NextGameLabel, PlayerHighlightsCard, TableActionsBar, TablePageLayout_default as TablePageLayout, useGameTableContext, useModal };
|
|
805
|
+
export { DMHighlightsCard, EditTableDetailsForm, GameTableProvider, ModalContext, ModalProvider_default as ModalProvider, NextGameLabel_default as NextGameLabel, PlayerHighlightsCard, TableActionsBar, TablePageLayout_default as TablePageLayout, TagSelector, useGameTableContext, useModal };
|
|
587
806
|
//# sourceMappingURL=index.mjs.map
|
|
588
807
|
//# sourceMappingURL=index.mjs.map
|