@mbpockets/shared-ui 0.1.21 → 0.2.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 +122 -65
- 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 +122 -65
- package/dist/EventPage/index.mjs.map +1 -1
- package/dist/EventPage.cjs +122 -65
- package/dist/EventPage.cjs.map +1 -1
- package/dist/EventPage.d.cts +4 -4
- package/dist/EventPage.d.ts +4 -4
- package/dist/EventPage.mjs +122 -65
- package/dist/EventPage.mjs.map +1 -1
- package/dist/PlayerPage/index.cjs +12 -8
- package/dist/PlayerPage/index.cjs.map +1 -1
- package/dist/PlayerPage/index.mjs +12 -8
- package/dist/PlayerPage/index.mjs.map +1 -1
- package/dist/PlayerPage.cjs +12 -8
- package/dist/PlayerPage.cjs.map +1 -1
- package/dist/PlayerPage.mjs +12 -8
- package/dist/PlayerPage.mjs.map +1 -1
- package/dist/ProfilePage/index.cjs +12 -8
- package/dist/ProfilePage/index.cjs.map +1 -1
- package/dist/ProfilePage/index.mjs +12 -8
- package/dist/ProfilePage/index.mjs.map +1 -1
- package/dist/ProfilePage.cjs +12 -8
- package/dist/ProfilePage.cjs.map +1 -1
- package/dist/ProfilePage.mjs +12 -8
- package/dist/ProfilePage.mjs.map +1 -1
- package/dist/SearchPage/Filters/index.cjs +38 -18
- package/dist/SearchPage/Filters/index.cjs.map +1 -1
- package/dist/SearchPage/Filters/index.d.cts +2 -1
- package/dist/SearchPage/Filters/index.d.ts +2 -1
- package/dist/SearchPage/Filters/index.mjs +34 -17
- package/dist/SearchPage/Filters/index.mjs.map +1 -1
- package/dist/SearchPage/Filters.cjs +38 -18
- package/dist/SearchPage/Filters.cjs.map +1 -1
- package/dist/SearchPage/Filters.d.cts +13 -1
- package/dist/SearchPage/Filters.d.ts +13 -1
- package/dist/SearchPage/Filters.mjs +34 -17
- package/dist/SearchPage/Filters.mjs.map +1 -1
- package/dist/SearchPage/Results/index.cjs +87 -49
- package/dist/SearchPage/Results/index.cjs.map +1 -1
- package/dist/SearchPage/Results/index.mjs +87 -49
- package/dist/SearchPage/Results/index.mjs.map +1 -1
- package/dist/SearchPage/Results.cjs +87 -49
- package/dist/SearchPage/Results.cjs.map +1 -1
- package/dist/SearchPage/Results.d.cts +10 -3
- package/dist/SearchPage/Results.d.ts +10 -3
- package/dist/SearchPage/Results.mjs +87 -49
- package/dist/SearchPage/Results.mjs.map +1 -1
- package/dist/SearchPage/index.cjs +208 -101
- 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 +204 -100
- package/dist/SearchPage/index.mjs.map +1 -1
- package/dist/SearchPage.cjs +208 -101
- 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 +204 -100
- 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 +890 -426
- 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 +871 -423
- 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/index.cjs
CHANGED
|
@@ -5,13 +5,13 @@ var React7 = require('react');
|
|
|
5
5
|
var jsxRuntime = require('react/jsx-runtime');
|
|
6
6
|
var material = require('@mui/material');
|
|
7
7
|
var DeleteIcon = require('@mui/icons-material/Delete');
|
|
8
|
-
var
|
|
8
|
+
var EditIcon3 = require('@mui/icons-material/Edit');
|
|
9
9
|
var AddIcon = require('@mui/icons-material/Add');
|
|
10
10
|
var ColorizeIcon = require('@mui/icons-material/Colorize');
|
|
11
11
|
var CancelIcon = require('@mui/icons-material/Cancel');
|
|
12
12
|
var CheckCircleIcon = require('@mui/icons-material/CheckCircle');
|
|
13
13
|
var Box2 = require('@mui/material/Box');
|
|
14
|
-
var
|
|
14
|
+
var Grid10 = require('@mui/material/Grid');
|
|
15
15
|
var Card10 = require('@mui/material/Card');
|
|
16
16
|
var CardContent10 = require('@mui/material/CardContent');
|
|
17
17
|
var CardHeader4 = require('@mui/material/CardHeader');
|
|
@@ -19,6 +19,7 @@ var Divider3 = require('@mui/material/Divider');
|
|
|
19
19
|
var Typography4 = require('@mui/material/Typography');
|
|
20
20
|
var Pagination = require('@mui/material/Pagination');
|
|
21
21
|
var Avatar = require('@mui/material/Avatar');
|
|
22
|
+
var navigation = require('next/navigation');
|
|
22
23
|
var Chip2 = require('@mui/material/Chip');
|
|
23
24
|
var LinearProgress = require('@mui/material/LinearProgress');
|
|
24
25
|
var PersonIcon = require('@mui/icons-material/Person');
|
|
@@ -29,31 +30,41 @@ var LocationOnIcon = require('@mui/icons-material/LocationOn');
|
|
|
29
30
|
var EventIcon = require('@mui/icons-material/Event');
|
|
30
31
|
var Autocomplete = require('@mui/material/Autocomplete');
|
|
31
32
|
var Popper = require('@mui/material/Popper');
|
|
33
|
+
var FormControl2 = require('@mui/material/FormControl');
|
|
34
|
+
var Select2 = require('@mui/material/Select');
|
|
35
|
+
var MenuItem2 = require('@mui/material/MenuItem');
|
|
32
36
|
var FormControlLabel = require('@mui/material/FormControlLabel');
|
|
33
37
|
var Checkbox = require('@mui/material/Checkbox');
|
|
34
|
-
var FormControl2 = require('@mui/material/FormControl');
|
|
35
38
|
var RadioGroup = require('@mui/material/RadioGroup');
|
|
36
39
|
var Radio = require('@mui/material/Radio');
|
|
37
|
-
var
|
|
40
|
+
var TextField7 = require('@mui/material/TextField');
|
|
38
41
|
var FormGroup = require('@mui/material/FormGroup');
|
|
39
|
-
var
|
|
42
|
+
var Button8 = require('@mui/material/Button');
|
|
40
43
|
var SearchIcon = require('@mui/icons-material/Search');
|
|
41
44
|
var CircularProgress3 = require('@mui/material/CircularProgress');
|
|
45
|
+
var CasinoIcon = require('@mui/icons-material/Casino');
|
|
46
|
+
var Dialog3 = require('@mui/material/Dialog');
|
|
47
|
+
var DialogContent3 = require('@mui/material/DialogContent');
|
|
48
|
+
var DialogActions3 = require('@mui/material/DialogActions');
|
|
49
|
+
var IconButton3 = require('@mui/material/IconButton');
|
|
50
|
+
var CloseIcon = require('@mui/icons-material/Close');
|
|
51
|
+
var ReactMarkdown = require('react-markdown');
|
|
42
52
|
var Image2 = require('next/image');
|
|
43
53
|
var ListIcon = require('@mui/icons-material/List');
|
|
44
54
|
var SaveIcon = require('@mui/icons-material/Save');
|
|
55
|
+
var DialogTitle3 = require('@mui/material/DialogTitle');
|
|
45
56
|
|
|
46
57
|
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
47
58
|
|
|
48
59
|
var React7__default = /*#__PURE__*/_interopDefault(React7);
|
|
49
60
|
var DeleteIcon__default = /*#__PURE__*/_interopDefault(DeleteIcon);
|
|
50
|
-
var
|
|
61
|
+
var EditIcon3__default = /*#__PURE__*/_interopDefault(EditIcon3);
|
|
51
62
|
var AddIcon__default = /*#__PURE__*/_interopDefault(AddIcon);
|
|
52
63
|
var ColorizeIcon__default = /*#__PURE__*/_interopDefault(ColorizeIcon);
|
|
53
64
|
var CancelIcon__default = /*#__PURE__*/_interopDefault(CancelIcon);
|
|
54
65
|
var CheckCircleIcon__default = /*#__PURE__*/_interopDefault(CheckCircleIcon);
|
|
55
66
|
var Box2__default = /*#__PURE__*/_interopDefault(Box2);
|
|
56
|
-
var
|
|
67
|
+
var Grid10__default = /*#__PURE__*/_interopDefault(Grid10);
|
|
57
68
|
var Card10__default = /*#__PURE__*/_interopDefault(Card10);
|
|
58
69
|
var CardContent10__default = /*#__PURE__*/_interopDefault(CardContent10);
|
|
59
70
|
var CardHeader4__default = /*#__PURE__*/_interopDefault(CardHeader4);
|
|
@@ -71,19 +82,29 @@ var LocationOnIcon__default = /*#__PURE__*/_interopDefault(LocationOnIcon);
|
|
|
71
82
|
var EventIcon__default = /*#__PURE__*/_interopDefault(EventIcon);
|
|
72
83
|
var Autocomplete__default = /*#__PURE__*/_interopDefault(Autocomplete);
|
|
73
84
|
var Popper__default = /*#__PURE__*/_interopDefault(Popper);
|
|
85
|
+
var FormControl2__default = /*#__PURE__*/_interopDefault(FormControl2);
|
|
86
|
+
var Select2__default = /*#__PURE__*/_interopDefault(Select2);
|
|
87
|
+
var MenuItem2__default = /*#__PURE__*/_interopDefault(MenuItem2);
|
|
74
88
|
var FormControlLabel__default = /*#__PURE__*/_interopDefault(FormControlLabel);
|
|
75
89
|
var Checkbox__default = /*#__PURE__*/_interopDefault(Checkbox);
|
|
76
|
-
var FormControl2__default = /*#__PURE__*/_interopDefault(FormControl2);
|
|
77
90
|
var RadioGroup__default = /*#__PURE__*/_interopDefault(RadioGroup);
|
|
78
91
|
var Radio__default = /*#__PURE__*/_interopDefault(Radio);
|
|
79
|
-
var
|
|
92
|
+
var TextField7__default = /*#__PURE__*/_interopDefault(TextField7);
|
|
80
93
|
var FormGroup__default = /*#__PURE__*/_interopDefault(FormGroup);
|
|
81
|
-
var
|
|
94
|
+
var Button8__default = /*#__PURE__*/_interopDefault(Button8);
|
|
82
95
|
var SearchIcon__default = /*#__PURE__*/_interopDefault(SearchIcon);
|
|
83
96
|
var CircularProgress3__default = /*#__PURE__*/_interopDefault(CircularProgress3);
|
|
97
|
+
var CasinoIcon__default = /*#__PURE__*/_interopDefault(CasinoIcon);
|
|
98
|
+
var Dialog3__default = /*#__PURE__*/_interopDefault(Dialog3);
|
|
99
|
+
var DialogContent3__default = /*#__PURE__*/_interopDefault(DialogContent3);
|
|
100
|
+
var DialogActions3__default = /*#__PURE__*/_interopDefault(DialogActions3);
|
|
101
|
+
var IconButton3__default = /*#__PURE__*/_interopDefault(IconButton3);
|
|
102
|
+
var CloseIcon__default = /*#__PURE__*/_interopDefault(CloseIcon);
|
|
103
|
+
var ReactMarkdown__default = /*#__PURE__*/_interopDefault(ReactMarkdown);
|
|
84
104
|
var Image2__default = /*#__PURE__*/_interopDefault(Image2);
|
|
85
105
|
var ListIcon__default = /*#__PURE__*/_interopDefault(ListIcon);
|
|
86
106
|
var SaveIcon__default = /*#__PURE__*/_interopDefault(SaveIcon);
|
|
107
|
+
var DialogTitle3__default = /*#__PURE__*/_interopDefault(DialogTitle3);
|
|
87
108
|
|
|
88
109
|
// src/components/EventPage/editMode/EventBannerEdit.tsx
|
|
89
110
|
var defaultValue = {
|
|
@@ -172,12 +193,29 @@ function Chip({ tag, removeCallback }) {
|
|
|
172
193
|
function generateTagsDisplay(tag) {
|
|
173
194
|
return /* @__PURE__ */ jsxRuntime.jsx(Chip, { tag }, tag.id);
|
|
174
195
|
}
|
|
175
|
-
function renderTagsFromIds(ids, legalTags) {
|
|
196
|
+
function renderTagsFromIds(ids, legalTags, options = {}) {
|
|
176
197
|
if (!ids || !legalTags || legalTags.length === 0) {
|
|
177
198
|
return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, {});
|
|
178
199
|
}
|
|
200
|
+
const { showEventTag = false, eventTagId } = options;
|
|
179
201
|
const validTags = ids.map((id) => legalTags.find((tag) => tag.id === id)).filter((tag) => Boolean(tag));
|
|
180
|
-
|
|
202
|
+
const sortedTags = [...validTags].sort((a, b) => {
|
|
203
|
+
if (showEventTag && eventTagId !== void 0) {
|
|
204
|
+
if (a.id === eventTagId && b.id === eventTagId) return 0;
|
|
205
|
+
if (a.id === eventTagId) return -1;
|
|
206
|
+
if (b.id === eventTagId) return 1;
|
|
207
|
+
}
|
|
208
|
+
const priorityOrder = ["Organizer Run", "Display Only"];
|
|
209
|
+
const aIndex = priorityOrder.indexOf(a.label);
|
|
210
|
+
const bIndex = priorityOrder.indexOf(b.label);
|
|
211
|
+
if (aIndex !== -1 && bIndex !== -1) {
|
|
212
|
+
return aIndex - bIndex;
|
|
213
|
+
}
|
|
214
|
+
if (aIndex !== -1) return -1;
|
|
215
|
+
if (bIndex !== -1) return 1;
|
|
216
|
+
return 0;
|
|
217
|
+
});
|
|
218
|
+
return sortedTags.map((tag) => generateTagsDisplay(tag));
|
|
181
219
|
}
|
|
182
220
|
function EventBannerEdit({
|
|
183
221
|
initialValue,
|
|
@@ -401,7 +439,7 @@ function EventBannerEdit({
|
|
|
401
439
|
children: [
|
|
402
440
|
link.text,
|
|
403
441
|
/* @__PURE__ */ jsxRuntime.jsxs(material.Box, { sx: { ml: 1, display: "flex" }, children: [
|
|
404
|
-
/* @__PURE__ */ jsxRuntime.jsx(material.Tooltip, { title: "Edit Link", children: /* @__PURE__ */ jsxRuntime.jsx(material.IconButton, { size: "small", onClick: () => openEditLink(index), sx: { color: "white", p: 0.2 }, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
442
|
+
/* @__PURE__ */ jsxRuntime.jsx(material.Tooltip, { title: "Edit Link", children: /* @__PURE__ */ jsxRuntime.jsx(material.IconButton, { size: "small", onClick: () => openEditLink(index), sx: { color: "white", p: 0.2 }, children: /* @__PURE__ */ jsxRuntime.jsx(EditIcon3__default.default, { fontSize: "inherit" }) }) }),
|
|
405
443
|
/* @__PURE__ */ jsxRuntime.jsx(material.Tooltip, { title: "Remove Link", children: /* @__PURE__ */ jsxRuntime.jsx(material.IconButton, { size: "small", onClick: () => removeLink(index), sx: { color: "error.light", p: 0.2 }, children: /* @__PURE__ */ jsxRuntime.jsx(DeleteIcon__default.default, { fontSize: "inherit" }) }) })
|
|
406
444
|
] })
|
|
407
445
|
]
|
|
@@ -528,7 +566,7 @@ function EventBasicInfo(props) {
|
|
|
528
566
|
);
|
|
529
567
|
}
|
|
530
568
|
function EventBasicInfoView({ description, locationId, startingDate, endingDate, timeInfo, timezone, isOwner, onEdit }) {
|
|
531
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
569
|
+
return /* @__PURE__ */ jsxRuntime.jsx(Grid10__default.default, { sx: { position: "relative" }, children: /* @__PURE__ */ jsxRuntime.jsx(material.Card, { style: {
|
|
532
570
|
boxShadow: "0px 4px 10px rgba(0, 0, 0, 0.1)",
|
|
533
571
|
background: "linear-gradient(135deg, rgba(225, 225, 225, 1), rgba(250, 250, 250, 1))"
|
|
534
572
|
}, children: /* @__PURE__ */ jsxRuntime.jsxs(material.CardContent, { children: [
|
|
@@ -812,7 +850,7 @@ function EventBannerView({
|
|
|
812
850
|
}) {
|
|
813
851
|
const backgroundColor = bannerColor || "linear-gradient(135deg, rgba(25,118,210,0.8), rgba(25,118,210,1))";
|
|
814
852
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
815
|
-
|
|
853
|
+
Grid10__default.default,
|
|
816
854
|
{
|
|
817
855
|
sx: {
|
|
818
856
|
background: backgroundColor,
|
|
@@ -820,7 +858,7 @@ function EventBannerView({
|
|
|
820
858
|
position: "relative"
|
|
821
859
|
},
|
|
822
860
|
children: [
|
|
823
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
861
|
+
/* @__PURE__ */ jsxRuntime.jsxs(Grid10__default.default, { children: [
|
|
824
862
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
825
863
|
material.Box,
|
|
826
864
|
{
|
|
@@ -879,7 +917,7 @@ function EventBannerView({
|
|
|
879
917
|
}
|
|
880
918
|
),
|
|
881
919
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
882
|
-
|
|
920
|
+
Grid10__default.default,
|
|
883
921
|
{
|
|
884
922
|
display: "flex",
|
|
885
923
|
justifyContent: "center",
|
|
@@ -987,6 +1025,11 @@ var generateLink = function(link) {
|
|
|
987
1025
|
link.text
|
|
988
1026
|
);
|
|
989
1027
|
};
|
|
1028
|
+
|
|
1029
|
+
// src/data/values.tsx
|
|
1030
|
+
var DEFAULT_PROFILE_PIC = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2ZXJzaW9uPSIxLjEiIHdpZHRoPSIyNTYiIGhlaWdodD0iMjU2IiB2aWV3Qm94PSIwIDAgMjU2IDI1NiIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+CjxnIHN0eWxlPSJzdHJva2U6IG5vbmU7IHN0cm9rZS13aWR0aDogMDsgc3Ryb2tlLWRhc2hhcnJheTogbm9uZTsgc3Ryb2tlLWxpbmVjYXA6IGJ1dHQ7IHN0cm9rZS1saW5lam9pbjogbWl0ZXI7IHN0cm9rZS1taXRlcmxpbWl0OiAxMDsgZmlsbDogbm9uZTsgZmlsbC1ydWxlOiBub256ZXJvOyBvcGFjaXR5OiAxOyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS40MDY1OTM0MDY1OTM0MDE2IDEuNDA2NTkzNDA2NTkzNDAxNikgc2NhbGUoMi44MSAyLjgxKSI+Cgk8cGF0aCBkPSJNIDQ1IDg4IGMgLTExLjA0OSAwIC0yMS4xOCAtMi4wMDMgLTI5LjAyMSAtOC42MzQgQyA2LjIxMiA3MS4xMDUgMCA1OC43NjQgMCA0NSBDIDAgMjAuMTg3IDIwLjE4NyAwIDQ1IDAgYyAyNC44MTMgMCA0NSAyMC4xODcgNDUgNDUgYyAwIDEzLjc2NSAtNi4yMTIgMjYuMTA1IC0xNS45NzkgMzQuMzY2IEMgNjYuMTgxIDg1Ljk5OCA1Ni4wNDkgODggNDUgODggeiIgc3R5bGU9InN0cm9rZTogbm9uZTsgc3Ryb2tlLXdpZHRoOiAxOyBzdHJva2UtZGFzaGFycmF5OiBub25lOyBzdHJva2UtbGluZWNhcDogYnV0dDsgc3Ryb2tlLWxpbmVqb2luOiBtaXRlcjsgc3Ryb2tlLW1pdGVybGltaXQ6IDEwOyBmaWxsOiByZ2IoMjE0LDIxNCwyMTQpOyBmaWxsLXJ1bGU6IG5vbnplcm87IG9wYWNpdHk6IDE7IiB0cmFuc2Zvcm09IiBtYXRyaXgoMSAwIDAgMSAwIDApICIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+Cgk8cGF0aCBkPSJNIDQ1IDYwLjcxIGMgLTExLjQ3OSAwIC0yMC44MTggLTkuMzM5IC0yMC44MTggLTIwLjgxNyBjIDAgLTExLjQ3OSA5LjMzOSAtMjAuODE4IDIwLjgxOCAtMjAuODE4IGMgMTEuNDc5IDAgMjAuODE3IDkuMzM5IDIwLjgxNyAyMC44MTggQyA2NS44MTcgNTEuMzcxIDU2LjQ3OSA2MC43MSA0NSA2MC43MSB6IiBzdHlsZT0ic3Ryb2tlOiBub25lOyBzdHJva2Utd2lkdGg6IDE7IHN0cm9rZS1kYXNoYXJyYXk6IG5vbmU7IHN0cm9rZS1saW5lY2FwOiBidXR0OyBzdHJva2UtbGluZWpvaW46IG1pdGVyOyBzdHJva2UtbWl0ZXJsaW1pdDogMTA7IGZpbGw6IHJnYigxNjUsMTY0LDE2NCk7IGZpbGwtcnVsZTogbm9uemVybzsgb3BhY2l0eTogMTsiIHRyYW5zZm9ybT0iIG1hdHJpeCgxIDAgMCAxIDAgMCkgIiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KCTxwYXRoIGQ9Ik0gNDUgOTAgYyAtMTAuNjEzIDAgLTIwLjkyMiAtMy43NzMgLTI5LjAyOCAtMTAuNjI1IGMgLTAuNjQ4IC0wLjU0OCAtMC44OCAtMS40NDQgLTAuNTc5IC0yLjIzNyBDIDIwLjAzNCA2NC45MTkgMzEuOTMzIDU2LjcxIDQ1IDU2LjcxIHMgMjQuOTY2IDguMjA5IDI5LjYwNyAyMC40MjggYyAwLjMwMSAwLjc5MyAwLjA2OSAxLjY4OSAtMC41NzkgMi4yMzcgQyA2NS45MjIgODYuMjI3IDU1LjYxMyA5MCA0NSA5MCB6IiBzdHlsZT0ic3Ryb2tlOiBub25lOyBzdHJva2Utd2lkdGg6IDE7IHN0cm9rZS1kYXNoYXJyYXk6IG5vbmU7IHN0cm9rZS1saW5lY2FwOiBidXR0OyBzdHJva2UtbGluZWpvaW46IG1pdGVyOyBzdHJva2UtbWl0ZXJsaW1pdDogMTA7IGZpbGw6IHJnYigxNjUsMTY0LDE2NCk7IGZpbGwtcnVsZTogbm9uemVybzsgb3BhY2l0eTogMTsiIHRyYW5zZm9ybT0iIG1hdHJpeCgxIDAgMCAxIDAgMCkgIiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPC9nPgo8L3N2Zz4=";
|
|
1031
|
+
var ProfilePictureSettings = {
|
|
1032
|
+
aspectRatio: 4 / 5};
|
|
990
1033
|
var NextGameLabel = ({ nextGameTime }) => {
|
|
991
1034
|
const date = typeof nextGameTime === "string" ? new Date(nextGameTime) : nextGameTime;
|
|
992
1035
|
return /* @__PURE__ */ jsxRuntime.jsxs(material.Typography, { variant: "caption", sx: { display: "block", mb: 1, color: "primary.main", fontWeight: "bold" }, children: [
|
|
@@ -1000,17 +1043,22 @@ var BaseSearchResultCard = ({
|
|
|
1000
1043
|
onClick,
|
|
1001
1044
|
children,
|
|
1002
1045
|
icon,
|
|
1003
|
-
tags
|
|
1046
|
+
tags,
|
|
1047
|
+
showEventTag,
|
|
1048
|
+
eventTagId
|
|
1004
1049
|
}) => {
|
|
1050
|
+
const router = navigation.useRouter();
|
|
1005
1051
|
const handleClick = (e) => {
|
|
1052
|
+
const url = `/${result.type}/${result.id}`;
|
|
1053
|
+
if (e.ctrlKey || e.metaKey || e.shiftKey) {
|
|
1054
|
+
e.stopPropagation();
|
|
1055
|
+
window.open(url, "_blank");
|
|
1056
|
+
return;
|
|
1057
|
+
}
|
|
1006
1058
|
if (onClick) {
|
|
1007
|
-
|
|
1008
|
-
|
|
1009
|
-
|
|
1010
|
-
window.open(url, "_blank");
|
|
1011
|
-
} else {
|
|
1012
|
-
onClick(result.id);
|
|
1013
|
-
}
|
|
1059
|
+
onClick(result.id);
|
|
1060
|
+
} else {
|
|
1061
|
+
router.push(url);
|
|
1014
1062
|
}
|
|
1015
1063
|
};
|
|
1016
1064
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -1019,7 +1067,7 @@ var BaseSearchResultCard = ({
|
|
|
1019
1067
|
elevation: 6,
|
|
1020
1068
|
sx: {
|
|
1021
1069
|
width: "100%",
|
|
1022
|
-
cursor:
|
|
1070
|
+
cursor: "pointer",
|
|
1023
1071
|
boxShadow: "0px 8px 24px rgba(0, 0, 0, 0.15)",
|
|
1024
1072
|
transition: "box-shadow 0.3s ease-in-out",
|
|
1025
1073
|
"&:hover": {
|
|
@@ -1038,11 +1086,10 @@ var BaseSearchResultCard = ({
|
|
|
1038
1086
|
result.type === "table" ? /* @__PURE__ */ jsxRuntime.jsx(Typography4__default.default, { variant: "body1", children: (() => {
|
|
1039
1087
|
var _a, _b;
|
|
1040
1088
|
const full = (_b = (_a = result.fullDescription) != null ? _a : result.description) != null ? _b : "";
|
|
1041
|
-
if (typeof full !== "string") return "";
|
|
1042
1089
|
const text = full || "";
|
|
1043
1090
|
return text.length > 200 ? `${text.slice(0, 200).trimEnd()}...` : text;
|
|
1044
1091
|
})() }) : /* @__PURE__ */ jsxRuntime.jsx(Typography4__default.default, { variant: "body1", children: result.description }),
|
|
1045
|
-
result.tags && result.tags.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(Box2__default.default, { sx: { mt: 1, display: "flex", flexWrap: "wrap", gap: 1 }, children: renderTagsFromIds(result.tags, tags) })
|
|
1092
|
+
result.tags && result.tags.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(Box2__default.default, { sx: { mt: 1, display: "flex", flexWrap: "wrap", gap: 1 }, children: renderTagsFromIds(result.tags, tags, { showEventTag, eventTagId }) })
|
|
1046
1093
|
] })
|
|
1047
1094
|
] })
|
|
1048
1095
|
}
|
|
@@ -1084,7 +1131,7 @@ var PlayerResultCard = ({
|
|
|
1084
1131
|
const playerIcon = /* @__PURE__ */ jsxRuntime.jsx(
|
|
1085
1132
|
Avatar__default.default,
|
|
1086
1133
|
{
|
|
1087
|
-
src: result.imageUrl,
|
|
1134
|
+
src: result.imageUrl || DEFAULT_PROFILE_PIC,
|
|
1088
1135
|
alt: result.title,
|
|
1089
1136
|
sx: {
|
|
1090
1137
|
width: 40,
|
|
@@ -1100,7 +1147,9 @@ var PlayerResultCard_default = PlayerResultCard;
|
|
|
1100
1147
|
var TableResultCard = ({
|
|
1101
1148
|
result,
|
|
1102
1149
|
onClick,
|
|
1103
|
-
tags
|
|
1150
|
+
tags,
|
|
1151
|
+
showEventTag,
|
|
1152
|
+
eventTagId
|
|
1104
1153
|
}) => {
|
|
1105
1154
|
const rawCapacity = result.capacity;
|
|
1106
1155
|
const hasDefinedCapacity = typeof rawCapacity === "number" && Number.isFinite(rawCapacity) && rawCapacity > 0;
|
|
@@ -1118,40 +1167,51 @@ var TableResultCard = ({
|
|
|
1118
1167
|
}
|
|
1119
1168
|
}
|
|
1120
1169
|
);
|
|
1121
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
1122
|
-
|
|
1123
|
-
|
|
1124
|
-
|
|
1125
|
-
|
|
1126
|
-
|
|
1127
|
-
|
|
1128
|
-
|
|
1129
|
-
|
|
1130
|
-
|
|
1131
|
-
|
|
1132
|
-
|
|
1133
|
-
|
|
1134
|
-
|
|
1135
|
-
|
|
1136
|
-
|
|
1137
|
-
|
|
1138
|
-
|
|
1139
|
-
|
|
1140
|
-
|
|
1141
|
-
|
|
1142
|
-
|
|
1143
|
-
|
|
1144
|
-
|
|
1145
|
-
|
|
1146
|
-
|
|
1147
|
-
|
|
1148
|
-
|
|
1170
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
1171
|
+
BaseSearchResultCard_default,
|
|
1172
|
+
{
|
|
1173
|
+
result,
|
|
1174
|
+
onClick,
|
|
1175
|
+
icon: tableIcon,
|
|
1176
|
+
tags,
|
|
1177
|
+
showEventTag,
|
|
1178
|
+
eventTagId,
|
|
1179
|
+
children: /* @__PURE__ */ jsxRuntime.jsxs(Box2__default.default, { sx: { mb: 2 }, children: [
|
|
1180
|
+
/* @__PURE__ */ jsxRuntime.jsxs(Box2__default.default, { sx: { display: "flex", justifyContent: "space-between", alignItems: "center", mb: 1 }, children: [
|
|
1181
|
+
/* @__PURE__ */ jsxRuntime.jsxs(Typography4__default.default, { variant: "body2", children: [
|
|
1182
|
+
/* @__PURE__ */ jsxRuntime.jsx("strong", { children: "Players:" }),
|
|
1183
|
+
" ",
|
|
1184
|
+
hasDefinedCapacity ? `${activePlayers}/${capacity}` : activePlayers
|
|
1185
|
+
] }),
|
|
1186
|
+
typeof hasDM === "boolean" && /* @__PURE__ */ jsxRuntime.jsx(
|
|
1187
|
+
Chip2__default.default,
|
|
1188
|
+
{
|
|
1189
|
+
icon: hasDM ? /* @__PURE__ */ jsxRuntime.jsx(SupervisorAccountIcon__default.default, {}) : /* @__PURE__ */ jsxRuntime.jsx(PersonIcon__default.default, {}),
|
|
1190
|
+
label: hasDM ? "DM Present" : "No DM",
|
|
1191
|
+
color: hasDM ? "success" : "warning",
|
|
1192
|
+
size: "small"
|
|
1193
|
+
}
|
|
1194
|
+
)
|
|
1195
|
+
] }),
|
|
1196
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1197
|
+
LinearProgress__default.default,
|
|
1198
|
+
{
|
|
1199
|
+
variant: "determinate",
|
|
1200
|
+
value: occupancyPercentage,
|
|
1201
|
+
sx: {
|
|
1202
|
+
height: 10,
|
|
1203
|
+
borderRadius: 5,
|
|
1204
|
+
backgroundColor: "#e0e0e0",
|
|
1205
|
+
"& .MuiLinearProgress-bar": {
|
|
1206
|
+
backgroundColor: hasDefinedCapacity ? availableSlots > 0 ? "#4caf50" : "#f44336" : "#2196f3"
|
|
1207
|
+
}
|
|
1208
|
+
}
|
|
1149
1209
|
}
|
|
1150
|
-
|
|
1151
|
-
|
|
1152
|
-
|
|
1153
|
-
|
|
1154
|
-
|
|
1210
|
+
),
|
|
1211
|
+
hasDefinedCapacity && /* @__PURE__ */ jsxRuntime.jsx(Typography4__default.default, { variant: "body2", sx: { mt: 0.5, textAlign: "right" }, children: availableSlots > 0 ? `${availableSlots} slot${availableSlots !== 1 ? "s" : ""} available` : "Table full" })
|
|
1212
|
+
] })
|
|
1213
|
+
}
|
|
1214
|
+
);
|
|
1155
1215
|
};
|
|
1156
1216
|
var TableResultCard_default = TableResultCard;
|
|
1157
1217
|
var EventResultCard = ({
|
|
@@ -1169,7 +1229,7 @@ var EventResultCard = ({
|
|
|
1169
1229
|
try {
|
|
1170
1230
|
const date = new Date(dateString);
|
|
1171
1231
|
return date.toLocaleDateString("en-US", options);
|
|
1172
|
-
} catch (
|
|
1232
|
+
} catch (__) {
|
|
1173
1233
|
return dateString;
|
|
1174
1234
|
}
|
|
1175
1235
|
};
|
|
@@ -1214,20 +1274,22 @@ var ResultsContainer = ({
|
|
|
1214
1274
|
onResultClick,
|
|
1215
1275
|
tags,
|
|
1216
1276
|
pagination,
|
|
1217
|
-
onPacketChange
|
|
1277
|
+
onPacketChange,
|
|
1278
|
+
showEventTag,
|
|
1279
|
+
eventTagId
|
|
1218
1280
|
}) => {
|
|
1219
1281
|
if (!results || results.length === 0 || !results.map) {
|
|
1220
1282
|
return /* @__PURE__ */ jsxRuntime.jsx(Box2__default.default, { sx: { textAlign: "center", py: 4 }, children: "No results found. Try adjusting your filters." });
|
|
1221
1283
|
}
|
|
1222
|
-
const onPlayerClick = (id) => {
|
|
1223
|
-
onResultClick
|
|
1224
|
-
};
|
|
1225
|
-
const onTableClick = (id) => {
|
|
1226
|
-
onResultClick
|
|
1227
|
-
};
|
|
1228
|
-
const onEventClick = (id) => {
|
|
1229
|
-
onResultClick
|
|
1230
|
-
};
|
|
1284
|
+
const onPlayerClick = onResultClick ? (id) => {
|
|
1285
|
+
onResultClick(id, "player");
|
|
1286
|
+
} : void 0;
|
|
1287
|
+
const onTableClick = onResultClick ? (id) => {
|
|
1288
|
+
onResultClick(id, "table");
|
|
1289
|
+
} : void 0;
|
|
1290
|
+
const onEventClick = onResultClick ? (id) => {
|
|
1291
|
+
onResultClick(id, "event");
|
|
1292
|
+
} : void 0;
|
|
1231
1293
|
const handlePacketChange = (_event, packet) => {
|
|
1232
1294
|
onPacketChange == null ? void 0 : onPacketChange(packet);
|
|
1233
1295
|
};
|
|
@@ -1243,7 +1305,7 @@ var ResultsContainer = ({
|
|
|
1243
1305
|
pagination.totalResults,
|
|
1244
1306
|
" results"
|
|
1245
1307
|
] }) }),
|
|
1246
|
-
results.map((result
|
|
1308
|
+
results.map((result) => {
|
|
1247
1309
|
switch (result.type) {
|
|
1248
1310
|
case "player":
|
|
1249
1311
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -1261,7 +1323,9 @@ var ResultsContainer = ({
|
|
|
1261
1323
|
{
|
|
1262
1324
|
result,
|
|
1263
1325
|
onClick: onTableClick,
|
|
1264
|
-
tags
|
|
1326
|
+
tags,
|
|
1327
|
+
showEventTag,
|
|
1328
|
+
eventTagId
|
|
1265
1329
|
},
|
|
1266
1330
|
result.id
|
|
1267
1331
|
);
|
|
@@ -1297,17 +1361,30 @@ var ScrollableResultsList = ({
|
|
|
1297
1361
|
tags,
|
|
1298
1362
|
maxHeight = 400,
|
|
1299
1363
|
onResultClick,
|
|
1300
|
-
emptyText
|
|
1364
|
+
emptyText,
|
|
1365
|
+
showEventTag,
|
|
1366
|
+
eventTagId
|
|
1301
1367
|
}) => {
|
|
1302
1368
|
const hasResults = Array.isArray(results) && results.length > 0;
|
|
1303
|
-
return /* @__PURE__ */ jsxRuntime.jsx(Box2__default.default, { sx: { maxHeight, overflowY: "auto", pr: 1 }, children: hasResults ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
1369
|
+
return /* @__PURE__ */ jsxRuntime.jsx(Box2__default.default, { sx: { maxHeight, overflowY: "auto", pr: 1 }, children: hasResults ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
1370
|
+
ResultsContainer_default,
|
|
1371
|
+
{
|
|
1372
|
+
results,
|
|
1373
|
+
onResultClick,
|
|
1374
|
+
tags,
|
|
1375
|
+
showEventTag,
|
|
1376
|
+
eventTagId
|
|
1377
|
+
}
|
|
1378
|
+
) : /* @__PURE__ */ jsxRuntime.jsx(Box2__default.default, { sx: { textAlign: "center", py: 2 }, children: emptyText || "No results to display." }) });
|
|
1304
1379
|
};
|
|
1305
1380
|
var ScrollableResultsList_default = ScrollableResultsList;
|
|
1306
1381
|
var TablesScrollableList = ({
|
|
1307
1382
|
results,
|
|
1308
1383
|
tags,
|
|
1309
1384
|
maxHeight,
|
|
1310
|
-
onResultClick
|
|
1385
|
+
onResultClick,
|
|
1386
|
+
showEventTag,
|
|
1387
|
+
eventTagId
|
|
1311
1388
|
}) => {
|
|
1312
1389
|
const tables = (results || []).filter((r) => (r == null ? void 0 : r.type) === "table");
|
|
1313
1390
|
const handleClick = (id) => onResultClick == null ? void 0 : onResultClick(id);
|
|
@@ -1319,7 +1396,9 @@ var TablesScrollableList = ({
|
|
|
1319
1396
|
maxHeight,
|
|
1320
1397
|
onResultClick: (id, type) => {
|
|
1321
1398
|
if (type === "table") handleClick(id);
|
|
1322
|
-
}
|
|
1399
|
+
},
|
|
1400
|
+
showEventTag,
|
|
1401
|
+
eventTagId
|
|
1323
1402
|
}
|
|
1324
1403
|
);
|
|
1325
1404
|
};
|
|
@@ -1347,24 +1426,24 @@ function EventPageLayout({
|
|
|
1347
1426
|
tables,
|
|
1348
1427
|
allTags
|
|
1349
1428
|
}) {
|
|
1350
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
1351
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1429
|
+
return /* @__PURE__ */ jsxRuntime.jsx(Grid10__default.default, { container: true, flexDirection: "column", children: /* @__PURE__ */ jsxRuntime.jsxs(EventEditProvider, { initialEvent: mergedEvent, value: { isOwner, updateEvent, updateImages }, children: [
|
|
1430
|
+
/* @__PURE__ */ jsxRuntime.jsx(Grid10__default.default, { children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1352
1431
|
EventBanner,
|
|
1353
1432
|
{
|
|
1354
1433
|
attendees,
|
|
1355
1434
|
numGames
|
|
1356
1435
|
}
|
|
1357
1436
|
) }),
|
|
1358
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
1359
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1437
|
+
/* @__PURE__ */ jsxRuntime.jsxs(Grid10__default.default, { container: true, flexDirection: "row", spacing: 3, size: { xs: 12, md: 12 }, children: [
|
|
1438
|
+
/* @__PURE__ */ jsxRuntime.jsx(Grid10__default.default, { size: { xs: 12, md: 4 }, spacing: 3, padding: 3, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1360
1439
|
EventBasicInfo,
|
|
1361
1440
|
{
|
|
1362
1441
|
locationId: mergedEvent.location || "0"
|
|
1363
1442
|
}
|
|
1364
1443
|
) }),
|
|
1365
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1444
|
+
/* @__PURE__ */ jsxRuntime.jsx(Grid10__default.default, { size: { xs: 12, md: 8 }, spacing: 3, padding: 3, children: /* @__PURE__ */ jsxRuntime.jsx(EventTablesCard_default, { tables, tags: allTags }) })
|
|
1366
1445
|
] }),
|
|
1367
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1446
|
+
/* @__PURE__ */ jsxRuntime.jsx(Grid10__default.default, {})
|
|
1368
1447
|
] }) });
|
|
1369
1448
|
}
|
|
1370
1449
|
var PlayerDetailsCard = ({
|
|
@@ -1523,19 +1602,18 @@ var PlayerDetailsCard = ({
|
|
|
1523
1602
|
);
|
|
1524
1603
|
};
|
|
1525
1604
|
var PlayerDetailsCard_default = PlayerDetailsCard;
|
|
1526
|
-
|
|
1527
|
-
|
|
1528
|
-
|
|
1529
|
-
|
|
1530
|
-
|
|
1531
|
-
|
|
1532
|
-
const [imageSrc, setImageSrc] = React7.useState(
|
|
1533
|
-
const { aspectRatio } = ProfilePictureSettings;
|
|
1605
|
+
var PlayerDisplayCard = ({
|
|
1606
|
+
profilePicture,
|
|
1607
|
+
username,
|
|
1608
|
+
bio,
|
|
1609
|
+
preferredPronouns
|
|
1610
|
+
}) => {
|
|
1611
|
+
const [imageSrc, setImageSrc] = React7.useState(DEFAULT_PROFILE_PIC);
|
|
1534
1612
|
React7.useEffect(() => {
|
|
1535
1613
|
async function validateImage() {
|
|
1536
|
-
const newImage = profilePicture ||
|
|
1614
|
+
const newImage = profilePicture || DEFAULT_PROFILE_PIC;
|
|
1537
1615
|
if (!profilePicture) {
|
|
1538
|
-
setImageSrc(
|
|
1616
|
+
setImageSrc(DEFAULT_PROFILE_PIC);
|
|
1539
1617
|
return;
|
|
1540
1618
|
}
|
|
1541
1619
|
const img = new Image();
|
|
@@ -1544,7 +1622,7 @@ var PlayerDisplayCard = ({ profilePicture, username, bio, preferredPronouns }) =
|
|
|
1544
1622
|
setImageSrc(newImage);
|
|
1545
1623
|
};
|
|
1546
1624
|
img.onerror = () => {
|
|
1547
|
-
setImageSrc(
|
|
1625
|
+
setImageSrc(DEFAULT_PROFILE_PIC);
|
|
1548
1626
|
};
|
|
1549
1627
|
}
|
|
1550
1628
|
validateImage();
|
|
@@ -1574,7 +1652,7 @@ var PlayerDisplayCard = ({ profilePicture, username, bio, preferredPronouns }) =
|
|
|
1574
1652
|
image: imageSrc,
|
|
1575
1653
|
alt: `${username}'s Profile Picture`,
|
|
1576
1654
|
sx: {
|
|
1577
|
-
aspectRatio,
|
|
1655
|
+
aspectRatio: ProfilePictureSettings.aspectRatio,
|
|
1578
1656
|
height: "auto",
|
|
1579
1657
|
// Updates to maintain aspect ratio and fill space nicely
|
|
1580
1658
|
width: "100%",
|
|
@@ -1893,6 +1971,24 @@ function PlayerPageLayout({
|
|
|
1893
1971
|
] }) })
|
|
1894
1972
|
] }) }) });
|
|
1895
1973
|
}
|
|
1974
|
+
var DistanceFilter = ({ distances, selectedDistance, onChange }) => {
|
|
1975
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
1976
|
+
/* @__PURE__ */ jsxRuntime.jsx(Typography4__default.default, { variant: "h6", gutterBottom: true, children: "Distance" }),
|
|
1977
|
+
/* @__PURE__ */ jsxRuntime.jsx(FormControl2__default.default, { fullWidth: true, size: "small", children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
1978
|
+
Select2__default.default,
|
|
1979
|
+
{
|
|
1980
|
+
value: selectedDistance !== void 0 ? selectedDistance : "",
|
|
1981
|
+
onChange: (e) => onChange(Number(e.target.value)),
|
|
1982
|
+
displayEmpty: true,
|
|
1983
|
+
children: [
|
|
1984
|
+
/* @__PURE__ */ jsxRuntime.jsx(MenuItem2__default.default, { value: "", children: /* @__PURE__ */ jsxRuntime.jsx("em", { children: "Any Distance" }) }),
|
|
1985
|
+
distances.map((option) => /* @__PURE__ */ jsxRuntime.jsx(MenuItem2__default.default, { value: option.value, children: option.display }, option.value))
|
|
1986
|
+
]
|
|
1987
|
+
}
|
|
1988
|
+
) })
|
|
1989
|
+
] });
|
|
1990
|
+
};
|
|
1991
|
+
var DistanceFilter_default = DistanceFilter;
|
|
1896
1992
|
var ExpiredTablesFilter = ({
|
|
1897
1993
|
includeExpiredTables,
|
|
1898
1994
|
onChange
|
|
@@ -1961,13 +2057,13 @@ var TagsFilter = ({
|
|
|
1961
2057
|
shouldHaveAtLeastOne: ""
|
|
1962
2058
|
});
|
|
1963
2059
|
const tagOptions = React7__default.default.useMemo(() => {
|
|
2060
|
+
var _a;
|
|
1964
2061
|
console.log("available tags: " + JSON.stringify(Tags));
|
|
1965
2062
|
console.log(!Tags);
|
|
1966
|
-
|
|
1967
|
-
return Tags.map((tag) => ({
|
|
2063
|
+
return (_a = Tags == null ? void 0 : Tags.map((tag) => ({
|
|
1968
2064
|
value: tag.id,
|
|
1969
2065
|
label: tag.label
|
|
1970
|
-
}));
|
|
2066
|
+
}))) != null ? _a : [];
|
|
1971
2067
|
}, [Tags]);
|
|
1972
2068
|
const handleTagChange = (tagId, category) => {
|
|
1973
2069
|
let newTags = [];
|
|
@@ -1995,8 +2091,7 @@ var TagsFilter = ({
|
|
|
1995
2091
|
};
|
|
1996
2092
|
const renderSelectedTags = (selectedTags, category) => {
|
|
1997
2093
|
const tagValues = [];
|
|
1998
|
-
|
|
1999
|
-
Tags.forEach((tag) => {
|
|
2094
|
+
Tags == null ? void 0 : Tags.forEach((tag) => {
|
|
2000
2095
|
if (selectedTags.includes(tag.id)) {
|
|
2001
2096
|
tagValues.push(tag);
|
|
2002
2097
|
}
|
|
@@ -2062,7 +2157,7 @@ var TagsFilter = ({
|
|
|
2062
2157
|
});
|
|
2063
2158
|
},
|
|
2064
2159
|
slots: { popper: CustomPopper2 },
|
|
2065
|
-
renderInput: (params) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
2160
|
+
renderInput: (params) => /* @__PURE__ */ jsxRuntime.jsx(TextField7__default.default, { ...params, label: `Select ${label}` })
|
|
2066
2161
|
},
|
|
2067
2162
|
`${category}-${selectedTags.join("-")}`
|
|
2068
2163
|
)
|
|
@@ -2134,7 +2229,7 @@ var TextSearchCard = ({ onChange, selectedTypes, initialTextSearch }) => {
|
|
|
2134
2229
|
/* @__PURE__ */ jsxRuntime.jsx(Typography4__default.default, { variant: "h6", gutterBottom: true, children: "Text Search" }),
|
|
2135
2230
|
/* @__PURE__ */ jsxRuntime.jsxs(Box2__default.default, { sx: { mb: 2 }, children: [
|
|
2136
2231
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2137
|
-
|
|
2232
|
+
TextField7__default.default,
|
|
2138
2233
|
{
|
|
2139
2234
|
fullWidth: true,
|
|
2140
2235
|
label: "Search in title and description",
|
|
@@ -2183,9 +2278,7 @@ var TypeFilter = ({ types, initialSelectedTypes = [], onChange }) => {
|
|
|
2183
2278
|
Checkbox__default.default,
|
|
2184
2279
|
{
|
|
2185
2280
|
checked: selectedTypes.includes(type.id),
|
|
2186
|
-
onChange: () => handleTypeChange(type.id)
|
|
2187
|
-
disabled: type.id === "event",
|
|
2188
|
-
title: type.id === "event" ? "Coming soon! Currently only player and table search are supported." : ""
|
|
2281
|
+
onChange: () => handleTypeChange(type.id)
|
|
2189
2282
|
}
|
|
2190
2283
|
),
|
|
2191
2284
|
label: type.label
|
|
@@ -2200,10 +2293,13 @@ var FiltersContainer = ({
|
|
|
2200
2293
|
initialSelectedTags,
|
|
2201
2294
|
initialTextSearch,
|
|
2202
2295
|
includeExpiredTables = false,
|
|
2296
|
+
distance,
|
|
2297
|
+
distances,
|
|
2203
2298
|
onTypeChange,
|
|
2204
2299
|
onTagChange,
|
|
2205
2300
|
onTextSearchChange,
|
|
2206
2301
|
onIncludeExpiredTablesChange,
|
|
2302
|
+
onDistanceChange,
|
|
2207
2303
|
onSubmit,
|
|
2208
2304
|
tags,
|
|
2209
2305
|
searchTypes
|
|
@@ -2218,7 +2314,10 @@ var FiltersContainer = ({
|
|
|
2218
2314
|
onTypeChange(types);
|
|
2219
2315
|
}
|
|
2220
2316
|
};
|
|
2221
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(Box2__default.default, {
|
|
2317
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(Box2__default.default, { component: "form", onSubmit: (e) => {
|
|
2318
|
+
e.preventDefault();
|
|
2319
|
+
if (onSubmit) onSubmit();
|
|
2320
|
+
}, children: [
|
|
2222
2321
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2223
2322
|
TypeFilter_default,
|
|
2224
2323
|
{
|
|
@@ -2228,6 +2327,16 @@ var FiltersContainer = ({
|
|
|
2228
2327
|
}
|
|
2229
2328
|
),
|
|
2230
2329
|
/* @__PURE__ */ jsxRuntime.jsx(Divider3__default.default, { sx: { my: 2 } }),
|
|
2330
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2331
|
+
DistanceFilter_default,
|
|
2332
|
+
{
|
|
2333
|
+
distances,
|
|
2334
|
+
selectedDistance: distance,
|
|
2335
|
+
onChange: onDistanceChange || (() => {
|
|
2336
|
+
})
|
|
2337
|
+
}
|
|
2338
|
+
),
|
|
2339
|
+
/* @__PURE__ */ jsxRuntime.jsx(Divider3__default.default, { sx: { my: 2 } }),
|
|
2231
2340
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2232
2341
|
TextSearchCard_default,
|
|
2233
2342
|
{
|
|
@@ -2258,13 +2367,13 @@ var FiltersContainer = ({
|
|
|
2258
2367
|
/* @__PURE__ */ jsxRuntime.jsx(Divider3__default.default, { sx: { my: 2 } })
|
|
2259
2368
|
] }),
|
|
2260
2369
|
/* @__PURE__ */ jsxRuntime.jsx(Box2__default.default, { sx: { display: "flex", justifyContent: "center", mt: 2 }, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
2261
|
-
|
|
2370
|
+
Button8__default.default,
|
|
2262
2371
|
{
|
|
2372
|
+
type: "submit",
|
|
2263
2373
|
variant: "contained",
|
|
2264
2374
|
color: "primary",
|
|
2265
2375
|
size: "large",
|
|
2266
2376
|
startIcon: /* @__PURE__ */ jsxRuntime.jsx(SearchIcon__default.default, {}),
|
|
2267
|
-
onClick: onSubmit,
|
|
2268
2377
|
sx: {
|
|
2269
2378
|
width: "100%",
|
|
2270
2379
|
py: 1.5,
|
|
@@ -2324,11 +2433,13 @@ function SearchPageLayout({
|
|
|
2324
2433
|
query: "",
|
|
2325
2434
|
titleOnly: false
|
|
2326
2435
|
},
|
|
2327
|
-
|
|
2436
|
+
initialDistance,
|
|
2437
|
+
distances,
|
|
2328
2438
|
onTypeChange,
|
|
2329
2439
|
onTagChange,
|
|
2330
2440
|
onTextSearchChange,
|
|
2331
2441
|
onIncludeExpiredTablesChange,
|
|
2442
|
+
onDistanceChange,
|
|
2332
2443
|
onSubmit,
|
|
2333
2444
|
onResultClick,
|
|
2334
2445
|
onPacketChange,
|
|
@@ -2336,14 +2447,16 @@ function SearchPageLayout({
|
|
|
2336
2447
|
validTags,
|
|
2337
2448
|
allTags,
|
|
2338
2449
|
searchTypes,
|
|
2339
|
-
isLoading = false
|
|
2450
|
+
isLoading = false,
|
|
2451
|
+
eventTagId
|
|
2340
2452
|
}) {
|
|
2341
2453
|
const theme = material.useTheme();
|
|
2342
2454
|
const isMobile = material.useMediaQuery(theme.breakpoints.down("md"));
|
|
2343
2455
|
const [selectedTypes, setSelectedTypes] = React7.useState(initialSelectedTypes);
|
|
2344
2456
|
const [selectedTags, setSelectedTags] = React7.useState(initialSelectedTags);
|
|
2345
2457
|
const [textSearch, setTextSearch] = React7.useState(initialTextSearch);
|
|
2346
|
-
const [includeExpiredTables, setIncludeExpiredTables] = React7.useState(
|
|
2458
|
+
const [includeExpiredTables, setIncludeExpiredTables] = React7.useState(false);
|
|
2459
|
+
const [distance, setDistance] = React7.useState(initialDistance);
|
|
2347
2460
|
React7.useEffect(() => {
|
|
2348
2461
|
setSelectedTypes(initialSelectedTypes);
|
|
2349
2462
|
}, [initialSelectedTypes]);
|
|
@@ -2354,8 +2467,8 @@ function SearchPageLayout({
|
|
|
2354
2467
|
setTextSearch(initialTextSearch);
|
|
2355
2468
|
}, [initialTextSearch]);
|
|
2356
2469
|
React7.useEffect(() => {
|
|
2357
|
-
|
|
2358
|
-
}, [
|
|
2470
|
+
setDistance(initialDistance);
|
|
2471
|
+
}, [initialDistance]);
|
|
2359
2472
|
const handleTypeChange = (types) => {
|
|
2360
2473
|
setSelectedTypes(types);
|
|
2361
2474
|
if (onTypeChange) onTypeChange(types);
|
|
@@ -2372,12 +2485,17 @@ function SearchPageLayout({
|
|
|
2372
2485
|
setIncludeExpiredTables(include);
|
|
2373
2486
|
if (onIncludeExpiredTablesChange) onIncludeExpiredTablesChange(include);
|
|
2374
2487
|
};
|
|
2488
|
+
const handleDistanceChange = (dist) => {
|
|
2489
|
+
setDistance(dist);
|
|
2490
|
+
if (onDistanceChange) onDistanceChange(dist);
|
|
2491
|
+
};
|
|
2375
2492
|
const handleSubmit = () => {
|
|
2376
2493
|
const currentCriteria = {
|
|
2377
2494
|
selectedTypes,
|
|
2378
2495
|
selectedTags,
|
|
2379
2496
|
textSearch,
|
|
2380
|
-
includeExpiredTables
|
|
2497
|
+
includeExpiredTables,
|
|
2498
|
+
distance
|
|
2381
2499
|
};
|
|
2382
2500
|
if (onSubmit) {
|
|
2383
2501
|
onSubmit(currentCriteria);
|
|
@@ -2396,8 +2514,8 @@ function SearchPageLayout({
|
|
|
2396
2514
|
}
|
|
2397
2515
|
}
|
|
2398
2516
|
) }),
|
|
2399
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
2400
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2517
|
+
/* @__PURE__ */ jsxRuntime.jsxs(Grid10__default.default, { container: true, spacing: 2, children: [
|
|
2518
|
+
/* @__PURE__ */ jsxRuntime.jsx(Grid10__default.default, { size: { xs: 12, md: 3 }, children: /* @__PURE__ */ jsxRuntime.jsxs(Card10__default.default, { sx: { marginBottom: isMobile ? 2 : 0 }, children: [
|
|
2401
2519
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2402
2520
|
CardHeader4__default.default,
|
|
2403
2521
|
{
|
|
@@ -2417,17 +2535,20 @@ function SearchPageLayout({
|
|
|
2417
2535
|
initialSelectedTags: selectedTags,
|
|
2418
2536
|
initialTextSearch: textSearch,
|
|
2419
2537
|
includeExpiredTables,
|
|
2538
|
+
distance,
|
|
2539
|
+
distances,
|
|
2420
2540
|
onTypeChange: handleTypeChange,
|
|
2421
2541
|
onTagChange: handleTagChange,
|
|
2422
2542
|
onTextSearchChange: handleTextSearchChange,
|
|
2423
2543
|
onIncludeExpiredTablesChange: handleIncludeExpiredTablesChange,
|
|
2544
|
+
onDistanceChange: handleDistanceChange,
|
|
2424
2545
|
onSubmit: handleSubmit,
|
|
2425
2546
|
tags: validTags,
|
|
2426
2547
|
searchTypes
|
|
2427
2548
|
}
|
|
2428
2549
|
) })
|
|
2429
2550
|
] }) }),
|
|
2430
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2551
|
+
/* @__PURE__ */ jsxRuntime.jsx(Grid10__default.default, { size: { xs: 12, md: 9 }, children: /* @__PURE__ */ jsxRuntime.jsxs(Card10__default.default, { children: [
|
|
2431
2552
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2432
2553
|
CardHeader4__default.default,
|
|
2433
2554
|
{
|
|
@@ -2447,13 +2568,255 @@ function SearchPageLayout({
|
|
|
2447
2568
|
pagination,
|
|
2448
2569
|
onPacketChange,
|
|
2449
2570
|
onResultClick,
|
|
2450
|
-
tags: allTags
|
|
2571
|
+
tags: allTags,
|
|
2572
|
+
showEventTag: true,
|
|
2573
|
+
eventTagId
|
|
2451
2574
|
}
|
|
2452
2575
|
) })
|
|
2453
2576
|
] }) })
|
|
2454
2577
|
] })
|
|
2455
2578
|
] });
|
|
2456
2579
|
}
|
|
2580
|
+
|
|
2581
|
+
// src/components/shared/NameGenerator.ts
|
|
2582
|
+
var getRandomTitle = () => {
|
|
2583
|
+
const randomPrefix = titlePrefixes[Math.random() * titlePrefixes.length | 0];
|
|
2584
|
+
const randomMiddle = tileMiddle[Math.random() * tileMiddle.length | 0];
|
|
2585
|
+
const randomSuffix = titleSuffixes[Math.random() * titleSuffixes.length | 0];
|
|
2586
|
+
return `${randomPrefix} ${randomMiddle} ${randomSuffix}`;
|
|
2587
|
+
};
|
|
2588
|
+
var getRandomTagline = () => taglines[Math.random() * taglines.length | 0];
|
|
2589
|
+
var titlePrefixes = [
|
|
2590
|
+
"The Knights of The",
|
|
2591
|
+
"The Fellowship of The",
|
|
2592
|
+
"The Order of The",
|
|
2593
|
+
"The Infamous",
|
|
2594
|
+
"The Legendary",
|
|
2595
|
+
"The Dubious",
|
|
2596
|
+
"The Sworn Guardians of The",
|
|
2597
|
+
"The Ancient Guild of The",
|
|
2598
|
+
"The Unstoppable",
|
|
2599
|
+
"The Misfit",
|
|
2600
|
+
"The Chaotic",
|
|
2601
|
+
"The Brave",
|
|
2602
|
+
"The Forgotten",
|
|
2603
|
+
"The Wandering",
|
|
2604
|
+
"The Noble Council of The",
|
|
2605
|
+
"The Dread Pirates of The",
|
|
2606
|
+
"The Honorable Society of The",
|
|
2607
|
+
"The Cursed",
|
|
2608
|
+
"The Unlikely Heroes of The",
|
|
2609
|
+
"The Elders of The",
|
|
2610
|
+
"The Seekers of The",
|
|
2611
|
+
"The Champions of The",
|
|
2612
|
+
"The Heralds of The",
|
|
2613
|
+
"The Disciples of The",
|
|
2614
|
+
"The Ragtag Band of The",
|
|
2615
|
+
"The Cult of The"
|
|
2616
|
+
];
|
|
2617
|
+
var tileMiddle = [
|
|
2618
|
+
"Round",
|
|
2619
|
+
"Kitchen",
|
|
2620
|
+
"Deepest",
|
|
2621
|
+
"Sorcery",
|
|
2622
|
+
"Munchkin",
|
|
2623
|
+
"Shenanigan",
|
|
2624
|
+
"Secret",
|
|
2625
|
+
"Dungeon",
|
|
2626
|
+
"Fireside",
|
|
2627
|
+
"Tabletop",
|
|
2628
|
+
"Midnight",
|
|
2629
|
+
"Tavern",
|
|
2630
|
+
"Goblin",
|
|
2631
|
+
"Dragon",
|
|
2632
|
+
"Critical",
|
|
2633
|
+
"Natural Twenty",
|
|
2634
|
+
"Counterspell",
|
|
2635
|
+
"Nat One",
|
|
2636
|
+
"Cardboard",
|
|
2637
|
+
"Dice Tower",
|
|
2638
|
+
"Campaign",
|
|
2639
|
+
"Lore",
|
|
2640
|
+
"Awkward",
|
|
2641
|
+
"Unhinged",
|
|
2642
|
+
"Chaotic Neutral",
|
|
2643
|
+
"Homebrew",
|
|
2644
|
+
"Side Quest"
|
|
2645
|
+
];
|
|
2646
|
+
var titleSuffixes = [
|
|
2647
|
+
"Table",
|
|
2648
|
+
"Dungeon",
|
|
2649
|
+
"Cave",
|
|
2650
|
+
"Crew",
|
|
2651
|
+
"Team",
|
|
2652
|
+
"League",
|
|
2653
|
+
"Horde",
|
|
2654
|
+
"Party",
|
|
2655
|
+
"Conclave",
|
|
2656
|
+
"Collective",
|
|
2657
|
+
"Alliance",
|
|
2658
|
+
"Syndicate",
|
|
2659
|
+
"Guild",
|
|
2660
|
+
"Cabal",
|
|
2661
|
+
"Council",
|
|
2662
|
+
"Expedition",
|
|
2663
|
+
"Enclave",
|
|
2664
|
+
"Consortium",
|
|
2665
|
+
"Troupe",
|
|
2666
|
+
"Vanguard",
|
|
2667
|
+
"Cohort",
|
|
2668
|
+
"Brotherhood",
|
|
2669
|
+
"Sisterhood",
|
|
2670
|
+
"Pantheon",
|
|
2671
|
+
"Assembly",
|
|
2672
|
+
"Coven"
|
|
2673
|
+
];
|
|
2674
|
+
var taglines = [
|
|
2675
|
+
"Everyone is welcome!",
|
|
2676
|
+
"Looking for serious players.",
|
|
2677
|
+
"Get in nerds, we're gaming!",
|
|
2678
|
+
"If you aren't there, you're square.",
|
|
2679
|
+
"It will be legendary!",
|
|
2680
|
+
"Beginners welcome \u2014 we were all level 1 once.",
|
|
2681
|
+
"No experience necessary. Snacks encouraged.",
|
|
2682
|
+
"Roleplayers, board gamers, and chaos gremlins welcome.",
|
|
2683
|
+
"We don't metagame. Much.",
|
|
2684
|
+
"All alignments accepted. True Neutral gets the snacks.",
|
|
2685
|
+
"Where every session is a one-shot... until it isn't.",
|
|
2686
|
+
"Homebrew rules may apply.",
|
|
2687
|
+
"Warning: may contain excessive lore.",
|
|
2688
|
+
"Critical failures celebrated as much as critical hits.",
|
|
2689
|
+
"No powergamers. Okay, maybe one powergamer.",
|
|
2690
|
+
"We finish campaigns. (Eventually.)",
|
|
2691
|
+
"Veteran players seeking worthy companions.",
|
|
2692
|
+
"Casuals only \u2014 we're here for the vibes.",
|
|
2693
|
+
"Serious about fun, not about rules.",
|
|
2694
|
+
"Min-maxers need not apply.",
|
|
2695
|
+
"For those who read the rulebook... and those who definitely didn't.",
|
|
2696
|
+
"Roll for initiative. Arrive on time.",
|
|
2697
|
+
"Side quests are the main quest here.",
|
|
2698
|
+
"Chaotic good energy required.",
|
|
2699
|
+
"If you bring snacks, you can name the first NPC.",
|
|
2700
|
+
"We read the rulebook so you don't have to.",
|
|
2701
|
+
"Wargamers only \u2014 no take-backs, no mercy.",
|
|
2702
|
+
"Everyone welcome. Meeple provided.",
|
|
2703
|
+
"We always play the longest game on the shelf.",
|
|
2704
|
+
"Worker placement. Resource management. Existential dread.",
|
|
2705
|
+
"No phones at the table! We're here for the game.",
|
|
2706
|
+
"Someone always flips the table. Metaphorically. Usually.",
|
|
2707
|
+
"We have a designated rules lawyer. It's fine.",
|
|
2708
|
+
"Cooperative games only \u2014 we can't handle another Monopoly incident.",
|
|
2709
|
+
"Teaching time is half the fun!"
|
|
2710
|
+
];
|
|
2711
|
+
function TagSelector({ initialTagIDs, allTags, onTagChange }) {
|
|
2712
|
+
const [tagList, updateTagList] = React7.useState(initialTagIDs);
|
|
2713
|
+
const [inputValue, setInputValue] = React7.useState("");
|
|
2714
|
+
const toggleTag = (id) => tagList.find((t) => t === id) ? removeTag(id) : addTag(id);
|
|
2715
|
+
const addTag = (id) => {
|
|
2716
|
+
const newList = [...tagList, id];
|
|
2717
|
+
updateTagList(newList);
|
|
2718
|
+
onTagChange(newList);
|
|
2719
|
+
};
|
|
2720
|
+
const removeTag = (id) => {
|
|
2721
|
+
const newList = tagList.filter((t) => t !== id);
|
|
2722
|
+
updateTagList(newList);
|
|
2723
|
+
onTagChange(newList);
|
|
2724
|
+
};
|
|
2725
|
+
const selectedTags = React7.useMemo(() => allTags.filter((tag) => tagList.includes(tag.id)), [allTags, tagList]);
|
|
2726
|
+
const options = React7.useMemo(
|
|
2727
|
+
() => allTags.map((tag) => ({ value: tag.id, label: tag.label })),
|
|
2728
|
+
[allTags]
|
|
2729
|
+
);
|
|
2730
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
2731
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-wrap gap-2", children: selectedTags.map((tag) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
2732
|
+
Chip,
|
|
2733
|
+
{
|
|
2734
|
+
tag,
|
|
2735
|
+
removeCallback: () => toggleTag(tag.id)
|
|
2736
|
+
},
|
|
2737
|
+
tag.id
|
|
2738
|
+
)) }),
|
|
2739
|
+
/* @__PURE__ */ jsxRuntime.jsx(Grid10__default.default, { container: true, spacing: 3, children: /* @__PURE__ */ jsxRuntime.jsx(Grid10__default.default, { sx: { marginTop: 3, width: "100%", minWidth: "550px" }, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
2740
|
+
Autocomplete__default.default,
|
|
2741
|
+
{
|
|
2742
|
+
options,
|
|
2743
|
+
filterOptions: (availableOptions, state) => availableOptions.filter(
|
|
2744
|
+
(option) => !tagList.includes(option.value) && option.label.toLowerCase().includes(state.inputValue.toLowerCase())
|
|
2745
|
+
),
|
|
2746
|
+
value: null,
|
|
2747
|
+
inputValue,
|
|
2748
|
+
onInputChange: (event, newInputValue) => {
|
|
2749
|
+
if (event && event.type === "change") {
|
|
2750
|
+
setInputValue(newInputValue);
|
|
2751
|
+
}
|
|
2752
|
+
},
|
|
2753
|
+
onChange: (event, newValue) => {
|
|
2754
|
+
if (newValue) {
|
|
2755
|
+
toggleTag(newValue.value);
|
|
2756
|
+
}
|
|
2757
|
+
setInputValue("");
|
|
2758
|
+
},
|
|
2759
|
+
renderInput: (params) => /* @__PURE__ */ jsxRuntime.jsx(TextField7__default.default, { ...params, label: "Select Tags" })
|
|
2760
|
+
},
|
|
2761
|
+
tagList.join("-")
|
|
2762
|
+
) }) })
|
|
2763
|
+
] });
|
|
2764
|
+
}
|
|
2765
|
+
function EditTableDetailsForm({ initialTitle, initialSubtitle, onTitleChange, onSubtitleChange, allowEditingTitles, initialTagIDs, allTags, onTagChange }) {
|
|
2766
|
+
const [title, setTitle] = React7.useState(initialTitle);
|
|
2767
|
+
const [subtitle, setSubtitle] = React7.useState(initialSubtitle);
|
|
2768
|
+
const handleTitleChange = (newTitle) => {
|
|
2769
|
+
setTitle(newTitle);
|
|
2770
|
+
onTitleChange(newTitle);
|
|
2771
|
+
};
|
|
2772
|
+
const handleSubtitleChange = (newSubtitle) => {
|
|
2773
|
+
setSubtitle(newSubtitle);
|
|
2774
|
+
onSubtitleChange(newSubtitle);
|
|
2775
|
+
};
|
|
2776
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
2777
|
+
allowEditingTitles && /* @__PURE__ */ jsxRuntime.jsxs(material.Box, { className: "flex flex-col gap-4 mb-8", children: [
|
|
2778
|
+
/* @__PURE__ */ jsxRuntime.jsxs(material.Box, { className: "inline-flex", children: [
|
|
2779
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2780
|
+
TextField7__default.default,
|
|
2781
|
+
{
|
|
2782
|
+
sx: { minWidth: "400px" },
|
|
2783
|
+
label: "Title",
|
|
2784
|
+
onChange: (e) => handleTitleChange(e.target.value),
|
|
2785
|
+
variant: "filled",
|
|
2786
|
+
value: title
|
|
2787
|
+
}
|
|
2788
|
+
),
|
|
2789
|
+
/* @__PURE__ */ jsxRuntime.jsx(material.Tooltip, { title: "Randomize", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
2790
|
+
CasinoIcon__default.default,
|
|
2791
|
+
{
|
|
2792
|
+
sx: { cursor: "pointer", alignSelf: "center", ml: 1 },
|
|
2793
|
+
onClick: () => handleTitleChange(getRandomTitle())
|
|
2794
|
+
}
|
|
2795
|
+
) })
|
|
2796
|
+
] }),
|
|
2797
|
+
/* @__PURE__ */ jsxRuntime.jsxs(material.Box, { className: "inline-flex min-w-96", children: [
|
|
2798
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2799
|
+
TextField7__default.default,
|
|
2800
|
+
{
|
|
2801
|
+
sx: { minWidth: "400px" },
|
|
2802
|
+
label: "Short Description or Tagline",
|
|
2803
|
+
onChange: (e) => handleSubtitleChange(e.target.value),
|
|
2804
|
+
variant: "filled",
|
|
2805
|
+
value: subtitle
|
|
2806
|
+
}
|
|
2807
|
+
),
|
|
2808
|
+
/* @__PURE__ */ jsxRuntime.jsx(material.Tooltip, { title: "Randomize", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
2809
|
+
CasinoIcon__default.default,
|
|
2810
|
+
{
|
|
2811
|
+
sx: { cursor: "pointer", alignSelf: "center", ml: 1 },
|
|
2812
|
+
onClick: () => handleSubtitleChange(getRandomTagline())
|
|
2813
|
+
}
|
|
2814
|
+
) })
|
|
2815
|
+
] })
|
|
2816
|
+
] }),
|
|
2817
|
+
/* @__PURE__ */ jsxRuntime.jsx(TagSelector, { initialTagIDs, allTags, onTagChange })
|
|
2818
|
+
] });
|
|
2819
|
+
}
|
|
2457
2820
|
var GameTableContext = React7__default.default.createContext(void 0);
|
|
2458
2821
|
function GameTableProvider(props) {
|
|
2459
2822
|
return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: props.children });
|
|
@@ -2466,76 +2829,206 @@ function useGameTableContext() {
|
|
|
2466
2829
|
throw new Error("useGameTableContext is deprecated in the package build. Pass table data through props instead.");
|
|
2467
2830
|
}
|
|
2468
2831
|
var ModalContext = React7.createContext({
|
|
2469
|
-
showModal: (
|
|
2832
|
+
showModal: () => {
|
|
2470
2833
|
},
|
|
2471
2834
|
hideModal: () => {
|
|
2472
2835
|
}
|
|
2473
2836
|
});
|
|
2474
2837
|
var useModal = () => React7.useContext(ModalContext);
|
|
2475
|
-
var
|
|
2476
|
-
const
|
|
2477
|
-
const previouslyFocusedElement = React7.useRef(null);
|
|
2838
|
+
var AutoResizingTextarea = (props) => {
|
|
2839
|
+
const { isInEditMode, onChange, textareaRef, value } = props;
|
|
2478
2840
|
React7.useEffect(() => {
|
|
2479
|
-
|
|
2480
|
-
|
|
2481
|
-
|
|
2482
|
-
|
|
2841
|
+
if (isInEditMode && textareaRef.current) {
|
|
2842
|
+
const textarea = textareaRef.current;
|
|
2843
|
+
textarea.style.height = "auto";
|
|
2844
|
+
textarea.style.height = `${textarea.scrollHeight}px`;
|
|
2483
2845
|
}
|
|
2484
|
-
|
|
2485
|
-
|
|
2486
|
-
|
|
2487
|
-
|
|
2488
|
-
|
|
2489
|
-
|
|
2490
|
-
|
|
2491
|
-
|
|
2492
|
-
|
|
2493
|
-
|
|
2494
|
-
|
|
2495
|
-
|
|
2496
|
-
'button, [tabindex]:not([tabindex="-1"])'
|
|
2497
|
-
);
|
|
2498
|
-
if (!focusableElements || focusableElements.length === 0) return;
|
|
2499
|
-
const first = focusableElements[0];
|
|
2500
|
-
const last = focusableElements[focusableElements.length - 1];
|
|
2501
|
-
if (e.shiftKey) {
|
|
2502
|
-
if (document.activeElement === first) {
|
|
2503
|
-
e.preventDefault();
|
|
2504
|
-
last.focus();
|
|
2846
|
+
}, [isInEditMode, textareaRef, value]);
|
|
2847
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
2848
|
+
"textarea",
|
|
2849
|
+
{
|
|
2850
|
+
ref: textareaRef,
|
|
2851
|
+
value,
|
|
2852
|
+
onChange: (e) => onChange(e.target.value),
|
|
2853
|
+
style: {
|
|
2854
|
+
backgroundColor: "#fffbea",
|
|
2855
|
+
overflow: "hidden",
|
|
2856
|
+
resize: "none",
|
|
2857
|
+
width: "100%"
|
|
2505
2858
|
}
|
|
2506
|
-
}
|
|
2507
|
-
|
|
2508
|
-
|
|
2509
|
-
|
|
2859
|
+
}
|
|
2860
|
+
);
|
|
2861
|
+
};
|
|
2862
|
+
var AutoResizingTextarea_default = AutoResizingTextarea;
|
|
2863
|
+
var NextGameCountdown = ({ nextGameTime }) => {
|
|
2864
|
+
const [timeLeft, setTimeLeft] = React7.useState("");
|
|
2865
|
+
React7.useEffect(() => {
|
|
2866
|
+
if (!nextGameTime) return;
|
|
2867
|
+
const timer = setInterval(() => {
|
|
2868
|
+
const now = (/* @__PURE__ */ new Date()).getTime();
|
|
2869
|
+
const distance = new Date(nextGameTime).getTime() - now;
|
|
2870
|
+
if (distance < 0) {
|
|
2871
|
+
clearInterval(timer);
|
|
2872
|
+
setTimeLeft("Started");
|
|
2873
|
+
return;
|
|
2874
|
+
}
|
|
2875
|
+
const days = Math.floor(distance / (1e3 * 60 * 60 * 24));
|
|
2876
|
+
const hours = Math.floor(distance % (1e3 * 60 * 60 * 24) / (1e3 * 60 * 60));
|
|
2877
|
+
const minutes = Math.floor(distance % (1e3 * 60 * 60) / (1e3 * 60));
|
|
2878
|
+
const seconds = Math.floor(distance % (1e3 * 60) / 1e3);
|
|
2879
|
+
let timeString = "";
|
|
2880
|
+
if (days > 0) timeString += `${days}d `;
|
|
2881
|
+
if (hours > 0 || days > 0) timeString += `${hours}h `;
|
|
2882
|
+
timeString += `${minutes}m ${seconds}s`;
|
|
2883
|
+
setTimeLeft(timeString);
|
|
2884
|
+
}, 1e3);
|
|
2885
|
+
return () => clearInterval(timer);
|
|
2886
|
+
}, [nextGameTime]);
|
|
2887
|
+
if (!nextGameTime) return null;
|
|
2888
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(material.Typography, { variant: "body2", color: "primary", sx: { fontWeight: "bold" }, children: [
|
|
2889
|
+
"Next Game: ",
|
|
2890
|
+
timeLeft
|
|
2891
|
+
] });
|
|
2892
|
+
};
|
|
2893
|
+
function TagEditor({
|
|
2894
|
+
title,
|
|
2895
|
+
selectedTags,
|
|
2896
|
+
possibleTags,
|
|
2897
|
+
onToggleTag
|
|
2898
|
+
}) {
|
|
2899
|
+
const selectedIds = React7.useMemo(() => selectedTags.map((tag) => tag.id), [selectedTags]);
|
|
2900
|
+
const onTagChange = (newSelectedIds) => {
|
|
2901
|
+
const addedTags = newSelectedIds.filter((id) => !selectedIds.includes(id));
|
|
2902
|
+
const removedTags = selectedIds.filter((id) => !newSelectedIds.includes(id));
|
|
2903
|
+
addedTags.forEach((id) => onToggleTag(id));
|
|
2904
|
+
removedTags.forEach((id) => onToggleTag(id));
|
|
2905
|
+
};
|
|
2906
|
+
return /* @__PURE__ */ jsxRuntime.jsx(Grid10__default.default, { container: true, children: /* @__PURE__ */ jsxRuntime.jsx(Grid10__default.default, { size: { xs: 12 }, children: /* @__PURE__ */ jsxRuntime.jsxs(Card10__default.default, { children: [
|
|
2907
|
+
title ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
2908
|
+
CardHeader4__default.default,
|
|
2909
|
+
{
|
|
2910
|
+
title,
|
|
2911
|
+
style: {
|
|
2912
|
+
background: "linear-gradient(135deg, rgba(25, 118, 210, 0.8), rgba(25, 118, 210, 1))",
|
|
2913
|
+
color: "#FFFFFF",
|
|
2914
|
+
fontSize: "1.5rem",
|
|
2915
|
+
textShadow: "0px 3px 6px rgba(0, 0, 0, 0.5)"
|
|
2916
|
+
}
|
|
2510
2917
|
}
|
|
2918
|
+
) : "",
|
|
2919
|
+
/* @__PURE__ */ jsxRuntime.jsx(CardContent10__default.default, { children: /* @__PURE__ */ jsxRuntime.jsx(TagSelector, { initialTagIDs: selectedIds, allTags: possibleTags, onTagChange }) })
|
|
2920
|
+
] }) }) });
|
|
2921
|
+
}
|
|
2922
|
+
var UserAgreementModal = ({
|
|
2923
|
+
open,
|
|
2924
|
+
onClose,
|
|
2925
|
+
markdownContent,
|
|
2926
|
+
requirements,
|
|
2927
|
+
onAccept,
|
|
2928
|
+
title = "User Agreement",
|
|
2929
|
+
forceAgreement = false
|
|
2930
|
+
}) => {
|
|
2931
|
+
const [checkedState, setCheckedState] = React7.useState(
|
|
2932
|
+
new Array(requirements.length).fill(false)
|
|
2933
|
+
);
|
|
2934
|
+
const handleCheckboxChange = (index) => {
|
|
2935
|
+
const updatedCheckedState = checkedState.map(
|
|
2936
|
+
(item, i) => i === index ? !item : item
|
|
2937
|
+
);
|
|
2938
|
+
setCheckedState(updatedCheckedState);
|
|
2939
|
+
};
|
|
2940
|
+
const isAllRequiredChecked = requirements.every((req, index) => {
|
|
2941
|
+
if (req.required) {
|
|
2942
|
+
return checkedState[index];
|
|
2943
|
+
}
|
|
2944
|
+
return true;
|
|
2945
|
+
});
|
|
2946
|
+
const handleAccept = () => {
|
|
2947
|
+
if (isAllRequiredChecked) {
|
|
2948
|
+
onAccept();
|
|
2511
2949
|
}
|
|
2512
2950
|
};
|
|
2513
|
-
|
|
2514
|
-
|
|
2951
|
+
const handleClose = (event, reason) => {
|
|
2952
|
+
if (forceAgreement) return;
|
|
2953
|
+
if (onClose) onClose();
|
|
2954
|
+
};
|
|
2955
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
2956
|
+
material.Dialog,
|
|
2515
2957
|
{
|
|
2516
|
-
|
|
2517
|
-
|
|
2518
|
-
|
|
2519
|
-
|
|
2520
|
-
|
|
2521
|
-
children:
|
|
2522
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2523
|
-
/* @__PURE__ */ jsxRuntime.
|
|
2524
|
-
|
|
2958
|
+
open,
|
|
2959
|
+
onClose: handleClose,
|
|
2960
|
+
maxWidth: "md",
|
|
2961
|
+
fullWidth: true,
|
|
2962
|
+
disableEscapeKeyDown: forceAgreement,
|
|
2963
|
+
children: [
|
|
2964
|
+
/* @__PURE__ */ jsxRuntime.jsx(material.DialogTitle, { children: title }),
|
|
2965
|
+
/* @__PURE__ */ jsxRuntime.jsxs(material.DialogContent, { dividers: true, children: [
|
|
2966
|
+
/* @__PURE__ */ jsxRuntime.jsx(material.Box, { sx: { mb: 3 }, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
2967
|
+
ReactMarkdown__default.default,
|
|
2968
|
+
{
|
|
2969
|
+
components: {
|
|
2970
|
+
h1: ({ node, ...props }) => /* @__PURE__ */ jsxRuntime.jsx(material.Typography, { variant: "h4", gutterBottom: true, ...props }),
|
|
2971
|
+
h2: ({ node, ...props }) => /* @__PURE__ */ jsxRuntime.jsx(material.Typography, { variant: "h5", gutterBottom: true, ...props }),
|
|
2972
|
+
h3: ({ node, ...props }) => /* @__PURE__ */ jsxRuntime.jsx(material.Typography, { variant: "h6", gutterBottom: true, ...props }),
|
|
2973
|
+
h4: ({ node, ...props }) => /* @__PURE__ */ jsxRuntime.jsx(material.Typography, { variant: "subtitle1", gutterBottom: true, ...props }),
|
|
2974
|
+
h5: ({ node, ...props }) => /* @__PURE__ */ jsxRuntime.jsx(material.Typography, { variant: "subtitle2", gutterBottom: true, ...props }),
|
|
2975
|
+
h6: ({ node, ...props }) => /* @__PURE__ */ jsxRuntime.jsx(material.Typography, { variant: "caption", gutterBottom: true, ...props }),
|
|
2976
|
+
p: ({ node, ...props }) => /* @__PURE__ */ jsxRuntime.jsx(material.Typography, { variant: "body1", gutterBottom: true, ...props }),
|
|
2977
|
+
li: ({ node, ...props }) => /* @__PURE__ */ jsxRuntime.jsx(material.Box, { component: "li", sx: { mb: 1, ml: 2 }, ...props }),
|
|
2978
|
+
ul: ({ node, ...props }) => /* @__PURE__ */ jsxRuntime.jsx(material.Box, { component: "ul", sx: { mb: 2 }, ...props }),
|
|
2979
|
+
ol: ({ node, ...props }) => /* @__PURE__ */ jsxRuntime.jsx(material.Box, { component: "ol", sx: { mb: 2 }, ...props }),
|
|
2980
|
+
a: ({ node, ...props }) => /* @__PURE__ */ jsxRuntime.jsx(material.Link, { ...props, target: "_blank", rel: "noopener" })
|
|
2981
|
+
},
|
|
2982
|
+
children: markdownContent
|
|
2983
|
+
}
|
|
2984
|
+
) }),
|
|
2985
|
+
/* @__PURE__ */ jsxRuntime.jsx(material.Box, { sx: { display: "flex", flexDirection: "column", gap: 1 }, children: requirements.map((req, index) => /* @__PURE__ */ jsxRuntime.jsx(material.Box, { sx: { display: "flex", alignItems: "flex-start" }, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
2986
|
+
material.FormControlLabel,
|
|
2987
|
+
{
|
|
2988
|
+
control: /* @__PURE__ */ jsxRuntime.jsx(
|
|
2989
|
+
material.Checkbox,
|
|
2990
|
+
{
|
|
2991
|
+
checked: checkedState[index],
|
|
2992
|
+
onChange: () => handleCheckboxChange(index)
|
|
2993
|
+
}
|
|
2994
|
+
),
|
|
2995
|
+
label: /* @__PURE__ */ jsxRuntime.jsxs(material.Typography, { variant: "body2", children: [
|
|
2996
|
+
req.statement,
|
|
2997
|
+
req.link && req.linkText && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
2998
|
+
" ",
|
|
2999
|
+
/* @__PURE__ */ jsxRuntime.jsx(material.Link, { href: req.link, target: "_blank", rel: "noopener", children: req.linkText })
|
|
3000
|
+
] }),
|
|
3001
|
+
req.required && /* @__PURE__ */ jsxRuntime.jsx(
|
|
3002
|
+
material.Typography,
|
|
3003
|
+
{
|
|
3004
|
+
component: "span",
|
|
3005
|
+
color: "error",
|
|
3006
|
+
sx: { ml: 0.5 },
|
|
3007
|
+
children: "*"
|
|
3008
|
+
}
|
|
3009
|
+
)
|
|
3010
|
+
] })
|
|
3011
|
+
}
|
|
3012
|
+
) }, index)) })
|
|
3013
|
+
] }),
|
|
3014
|
+
/* @__PURE__ */ jsxRuntime.jsxs(material.DialogActions, { children: [
|
|
3015
|
+
!forceAgreement && /* @__PURE__ */ jsxRuntime.jsx(material.Button, { onClick: onClose, color: "inherit", children: "Cancel" }),
|
|
3016
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3017
|
+
material.Button,
|
|
3018
|
+
{
|
|
3019
|
+
onClick: handleAccept,
|
|
3020
|
+
variant: "contained",
|
|
3021
|
+
disabled: !isAllRequiredChecked,
|
|
3022
|
+
fullWidth: forceAgreement,
|
|
3023
|
+
children: "Accept"
|
|
3024
|
+
}
|
|
3025
|
+
)
|
|
3026
|
+
] })
|
|
3027
|
+
]
|
|
2525
3028
|
}
|
|
2526
3029
|
);
|
|
2527
3030
|
};
|
|
2528
|
-
var
|
|
2529
|
-
var ModalProvider = ({ children }) => {
|
|
2530
|
-
const [modalContent, setModalContent] = React7.useState(null);
|
|
2531
|
-
const showModal = (content) => setModalContent(content);
|
|
2532
|
-
const hideModal = () => setModalContent(null);
|
|
2533
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(ModalContext.Provider, { value: { showModal, hideModal }, children: [
|
|
2534
|
-
children,
|
|
2535
|
-
modalContent && /* @__PURE__ */ jsxRuntime.jsx(Modal_default, { onClose: hideModal, children: modalContent })
|
|
2536
|
-
] });
|
|
2537
|
-
};
|
|
2538
|
-
var ModalProvider_default = ModalProvider;
|
|
3031
|
+
var UserAgreementModal_default = UserAgreementModal;
|
|
2539
3032
|
var PlayerHighlightsCard = function(props) {
|
|
2540
3033
|
const {
|
|
2541
3034
|
allTags,
|
|
@@ -2547,16 +3040,16 @@ var PlayerHighlightsCard = function(props) {
|
|
|
2547
3040
|
removeFromTable
|
|
2548
3041
|
} = props;
|
|
2549
3042
|
return /* @__PURE__ */ jsxRuntime.jsx(material.Card, { elevation: 3, sx: { backgroundColor: canEdit ? "#fffbea" : "#f5f9fa", marginBottom: "6px" }, children: /* @__PURE__ */ jsxRuntime.jsxs(material.CardContent, { children: [
|
|
2550
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
2551
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
2552
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2553
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3043
|
+
/* @__PURE__ */ jsxRuntime.jsxs(Grid10__default.default, { container: true, spacing: 2, direction: "column", children: [
|
|
3044
|
+
/* @__PURE__ */ jsxRuntime.jsxs(Grid10__default.default, { container: true, direction: "row", children: [
|
|
3045
|
+
/* @__PURE__ */ jsxRuntime.jsx(Grid10__default.default, { children: /* @__PURE__ */ jsxRuntime.jsx(Image2__default.default, { alt: player.username + "'s profile pic", height: 64, src: player.miniPic || DEFAULT_PROFILE_PIC, width: 64 }) }),
|
|
3046
|
+
/* @__PURE__ */ jsxRuntime.jsx(Grid10__default.default, { children: /* @__PURE__ */ jsxRuntime.jsx(material.Typography, { variant: "h5", children: player.username }) })
|
|
2554
3047
|
] }),
|
|
2555
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3048
|
+
/* @__PURE__ */ jsxRuntime.jsx(Grid10__default.default, { children: renderTagsFromIds(player.tags, allTags) })
|
|
2556
3049
|
] }),
|
|
2557
|
-
canEdit && /* @__PURE__ */ jsxRuntime.jsxs(
|
|
2558
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2559
|
-
canChangeDungeonMaster && /* @__PURE__ */ jsxRuntime.jsx(
|
|
3050
|
+
canEdit && /* @__PURE__ */ jsxRuntime.jsxs(Grid10__default.default, { children: [
|
|
3051
|
+
/* @__PURE__ */ jsxRuntime.jsx(Button8__default.default, { onClick: () => removeFromTable(player), children: isWaitList ? /* @__PURE__ */ jsxRuntime.jsx("p", { children: "Deny Player" }) : /* @__PURE__ */ jsxRuntime.jsx("p", { children: "Remove Player" }) }),
|
|
3052
|
+
canChangeDungeonMaster && /* @__PURE__ */ jsxRuntime.jsx(Button8__default.default, { onClick: () => {
|
|
2560
3053
|
handleAssignToDungeonMaster(player);
|
|
2561
3054
|
removeFromTable(player);
|
|
2562
3055
|
}, children: /* @__PURE__ */ jsxRuntime.jsx("p", { children: "Assign to DungeonMaster" }) })
|
|
@@ -2566,11 +3059,11 @@ var PlayerHighlightsCard = function(props) {
|
|
|
2566
3059
|
var DMHighlightsCard = function({ canEdit, player, allTags }) {
|
|
2567
3060
|
return /* @__PURE__ */ jsxRuntime.jsxs(material.Card, { elevation: 3, sx: { backgroundColor: "#f5f9fa", marginBottom: "6px" }, children: [
|
|
2568
3061
|
/* @__PURE__ */ jsxRuntime.jsx(material.CardHeader, { slotProps: { title: { variant: "h4" } }, title: "Game Master" }),
|
|
2569
|
-
/* @__PURE__ */ jsxRuntime.jsx(material.CardContent, { sx: { backgroundColor: canEdit ? "#fffbea" : "inherit" }, children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
2570
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2571
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
2572
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2573
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3062
|
+
/* @__PURE__ */ jsxRuntime.jsx(material.CardContent, { sx: { backgroundColor: canEdit ? "#fffbea" : "inherit" }, children: /* @__PURE__ */ jsxRuntime.jsxs(Grid10__default.default, { container: true, spacing: 2, direction: "column", children: [
|
|
3063
|
+
/* @__PURE__ */ jsxRuntime.jsx(Grid10__default.default, { children: /* @__PURE__ */ jsxRuntime.jsx(material.Typography, { variant: "h5", children: player.username }) }),
|
|
3064
|
+
/* @__PURE__ */ jsxRuntime.jsxs(Grid10__default.default, { container: true, direction: "row", children: [
|
|
3065
|
+
/* @__PURE__ */ jsxRuntime.jsx(Grid10__default.default, { children: /* @__PURE__ */ jsxRuntime.jsx(Image2__default.default, { alt: player.username + "'s profile pic", height: 120, src: player.imageUrl || DEFAULT_PROFILE_PIC, width: 256 }) }),
|
|
3066
|
+
/* @__PURE__ */ jsxRuntime.jsx(Grid10__default.default, { children: renderTagsFromIds(player.tags, allTags) }),
|
|
2574
3067
|
/* @__PURE__ */ jsxRuntime.jsx(material.Typography, { children: player.description })
|
|
2575
3068
|
] })
|
|
2576
3069
|
] }) })
|
|
@@ -2599,12 +3092,11 @@ function TableActionsBar(props) {
|
|
|
2599
3092
|
if (waitlistPlayers.length === 0) {
|
|
2600
3093
|
return /* @__PURE__ */ jsxRuntime.jsx("p", { children: "Waitlist is empty!" });
|
|
2601
3094
|
}
|
|
2602
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
2603
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2604
|
-
/* @__PURE__ */ jsxRuntime.jsx("ul", { className: "gap-8", children: waitlistPlayers.map((player) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
3095
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
3096
|
+
/* @__PURE__ */ jsxRuntime.jsx("ul", { className: "gap-8 px-6", children: waitlistPlayers.map((player) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
2605
3097
|
"li",
|
|
2606
3098
|
{
|
|
2607
|
-
className: `${canMovePlayersToTable ? "bg-amber-100 cursor-pointer" : "bg-gray-200"} mb-8 flex flex-row flex-start space-between
|
|
3099
|
+
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`,
|
|
2608
3100
|
onClick: () => canMovePlayersToTable ? onPromoteWaitlistPlayer == null ? void 0 : onPromoteWaitlistPlayer(player.id) : void 0,
|
|
2609
3101
|
tabIndex: 0,
|
|
2610
3102
|
children: [
|
|
@@ -2613,7 +3105,7 @@ function TableActionsBar(props) {
|
|
|
2613
3105
|
{
|
|
2614
3106
|
alt: player.username + "'s profile pic",
|
|
2615
3107
|
height: 64,
|
|
2616
|
-
src: player.miniPic ||
|
|
3108
|
+
src: player.miniPic || DEFAULT_PROFILE_PIC,
|
|
2617
3109
|
width: 64
|
|
2618
3110
|
}
|
|
2619
3111
|
),
|
|
@@ -2622,7 +3114,7 @@ function TableActionsBar(props) {
|
|
|
2622
3114
|
},
|
|
2623
3115
|
player.id
|
|
2624
3116
|
)) }),
|
|
2625
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3117
|
+
/* @__PURE__ */ jsxRuntime.jsx(DialogActions3__default.default, { children: /* @__PURE__ */ jsxRuntime.jsx(Button8__default.default, { onClick: () => hideModal(), children: "Close" }) })
|
|
2626
3118
|
] });
|
|
2627
3119
|
};
|
|
2628
3120
|
return /* @__PURE__ */ jsxRuntime.jsxs(material.Grid, { container: true, direction: "column", spacing: 1, children: [
|
|
@@ -2633,33 +3125,45 @@ function TableActionsBar(props) {
|
|
|
2633
3125
|
slots
|
|
2634
3126
|
] }) }),
|
|
2635
3127
|
/* @__PURE__ */ jsxRuntime.jsxs(material.Grid, { container: true, direction: "row", children: [
|
|
2636
|
-
!isOwner && !isPlayer && !isDM && !onWaitlist && /* @__PURE__ */ jsxRuntime.jsx(
|
|
2637
|
-
!isOwner && (isPlayer || onWaitlist) && /* @__PURE__ */ jsxRuntime.jsx(
|
|
3128
|
+
!isOwner && !isPlayer && !isDM && !onWaitlist && /* @__PURE__ */ jsxRuntime.jsx(Button8__default.default, { onClick: () => onJoinWaitlist == null ? void 0 : onJoinWaitlist(), sx: buttonStyle, children: "Join Waitlist" }),
|
|
3129
|
+
!isOwner && (isPlayer || onWaitlist) && /* @__PURE__ */ jsxRuntime.jsx(Button8__default.default, { onClick: () => onLeaveTable == null ? void 0 : onLeaveTable(), sx: buttonStyle, children: onWaitlist ? "Leave Waitlist" : "Leave Table" }),
|
|
2638
3130
|
canEditTable ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
2639
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3131
|
+
/* @__PURE__ */ jsxRuntime.jsx(Button8__default.default, { onClick: () => onEditModeChange(true), sx: buttonStyle, endIcon: /* @__PURE__ */ jsxRuntime.jsx(EditIcon3__default.default, {}), children: "Edit" }),
|
|
2640
3132
|
canViewWaitlist ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
2641
|
-
|
|
3133
|
+
Button8__default.default,
|
|
2642
3134
|
{
|
|
2643
3135
|
endIcon: /* @__PURE__ */ jsxRuntime.jsx(ListIcon__default.default, {}),
|
|
2644
|
-
onClick: () => showModal(renderPlayerWaitlistModalContent(false)),
|
|
3136
|
+
onClick: () => showModal(renderPlayerWaitlistModalContent(false), "Waitlist Players:"),
|
|
2645
3137
|
sx: buttonStyle,
|
|
2646
3138
|
children: "View Waitlist"
|
|
2647
3139
|
}
|
|
2648
3140
|
) : null
|
|
2649
3141
|
] }) : canSaveTable ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
2650
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2651
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3142
|
+
/* @__PURE__ */ jsxRuntime.jsx(Button8__default.default, { onClick: onSave, sx: buttonStyle, endIcon: /* @__PURE__ */ jsxRuntime.jsx(SaveIcon__default.default, {}), children: "Save" }),
|
|
3143
|
+
/* @__PURE__ */ jsxRuntime.jsx(Button8__default.default, { onClick: () => onEditModeChange(false), sx: buttonStyle, children: "Cancel" }),
|
|
2652
3144
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2653
|
-
|
|
3145
|
+
Button8__default.default,
|
|
2654
3146
|
{
|
|
2655
3147
|
endIcon: /* @__PURE__ */ jsxRuntime.jsx(ListIcon__default.default, {}),
|
|
2656
|
-
onClick: () => showModal(renderPlayerWaitlistModalContent(true)),
|
|
3148
|
+
onClick: () => showModal(renderPlayerWaitlistModalContent(true), "Waitlist Players:"),
|
|
2657
3149
|
sx: buttonStyle,
|
|
2658
3150
|
children: "Edit Waitlist"
|
|
2659
3151
|
}
|
|
2660
3152
|
)
|
|
2661
3153
|
] }) : null,
|
|
2662
|
-
isOwner && /* @__PURE__ */ jsxRuntime.jsx(
|
|
3154
|
+
isOwner && /* @__PURE__ */ jsxRuntime.jsx(
|
|
3155
|
+
Button8__default.default,
|
|
3156
|
+
{
|
|
3157
|
+
onClick: () => showModal(
|
|
3158
|
+
/* @__PURE__ */ jsxRuntime.jsx(material.Typography, { children: "Are you sure you want to delete this table? This action cannot be undone." }),
|
|
3159
|
+
"Delete Table",
|
|
3160
|
+
{ acceptText: "Delete", onAccept: () => onDeleteTable == null ? void 0 : onDeleteTable() }
|
|
3161
|
+
),
|
|
3162
|
+
sx: buttonStyle,
|
|
3163
|
+
endIcon: /* @__PURE__ */ jsxRuntime.jsx(DeleteIcon__default.default, {}),
|
|
3164
|
+
children: "Delete Table"
|
|
3165
|
+
}
|
|
3166
|
+
)
|
|
2663
3167
|
] })
|
|
2664
3168
|
] });
|
|
2665
3169
|
}
|
|
@@ -2669,165 +3173,82 @@ var buttonStyle = {
|
|
|
2669
3173
|
color: "white",
|
|
2670
3174
|
borderRadius: "5px"
|
|
2671
3175
|
};
|
|
2672
|
-
var AutoResizingTextarea = (props) => {
|
|
2673
|
-
const { isInEditMode, onChange, textareaRef, value } = props;
|
|
2674
|
-
React7.useEffect(() => {
|
|
2675
|
-
if (isInEditMode && textareaRef.current) {
|
|
2676
|
-
const textarea = textareaRef.current;
|
|
2677
|
-
textarea.style.height = "auto";
|
|
2678
|
-
textarea.style.height = `${textarea.scrollHeight}px`;
|
|
2679
|
-
}
|
|
2680
|
-
}, [isInEditMode, textareaRef, value]);
|
|
2681
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
2682
|
-
"textarea",
|
|
2683
|
-
{
|
|
2684
|
-
ref: textareaRef,
|
|
2685
|
-
value,
|
|
2686
|
-
onChange: (e) => onChange(e.target.value),
|
|
2687
|
-
style: {
|
|
2688
|
-
backgroundColor: "#fffbea",
|
|
2689
|
-
overflow: "hidden",
|
|
2690
|
-
resize: "none",
|
|
2691
|
-
width: "100%"
|
|
2692
|
-
}
|
|
2693
|
-
}
|
|
2694
|
-
);
|
|
2695
|
-
};
|
|
2696
|
-
var AutoResizingTextarea_default = AutoResizingTextarea;
|
|
2697
|
-
var NextGameCountdown = ({ nextGameTime }) => {
|
|
2698
|
-
const [timeLeft, setTimeLeft] = React7.useState("");
|
|
2699
|
-
React7.useEffect(() => {
|
|
2700
|
-
if (!nextGameTime) return;
|
|
2701
|
-
const timer = setInterval(() => {
|
|
2702
|
-
const now = (/* @__PURE__ */ new Date()).getTime();
|
|
2703
|
-
const distance = new Date(nextGameTime).getTime() - now;
|
|
2704
|
-
if (distance < 0) {
|
|
2705
|
-
clearInterval(timer);
|
|
2706
|
-
setTimeLeft("Started");
|
|
2707
|
-
return;
|
|
2708
|
-
}
|
|
2709
|
-
const days = Math.floor(distance / (1e3 * 60 * 60 * 24));
|
|
2710
|
-
const hours = Math.floor(distance % (1e3 * 60 * 60 * 24) / (1e3 * 60 * 60));
|
|
2711
|
-
const minutes = Math.floor(distance % (1e3 * 60 * 60) / (1e3 * 60));
|
|
2712
|
-
const seconds = Math.floor(distance % (1e3 * 60) / 1e3);
|
|
2713
|
-
let timeString = "";
|
|
2714
|
-
if (days > 0) timeString += `${days}d `;
|
|
2715
|
-
if (hours > 0 || days > 0) timeString += `${hours}h `;
|
|
2716
|
-
timeString += `${minutes}m ${seconds}s`;
|
|
2717
|
-
setTimeLeft(timeString);
|
|
2718
|
-
}, 1e3);
|
|
2719
|
-
return () => clearInterval(timer);
|
|
2720
|
-
}, [nextGameTime]);
|
|
2721
|
-
if (!nextGameTime) return null;
|
|
2722
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(material.Typography, { variant: "body2", color: "primary", sx: { fontWeight: "bold" }, children: [
|
|
2723
|
-
"Next Game: ",
|
|
2724
|
-
timeLeft
|
|
2725
|
-
] });
|
|
2726
|
-
};
|
|
2727
|
-
function TagEditor({
|
|
2728
|
-
title = "Tags",
|
|
2729
|
-
selectedTags,
|
|
2730
|
-
possibleTags,
|
|
2731
|
-
onToggleTag
|
|
2732
|
-
}) {
|
|
2733
|
-
const [inputValue, setInputValue] = React7.useState("");
|
|
2734
|
-
const selectedIds = React7.useMemo(() => selectedTags.map((tag) => tag.id), [selectedTags]);
|
|
2735
|
-
const options = React7.useMemo(
|
|
2736
|
-
() => possibleTags.map((tag) => ({ value: tag.id, label: tag.label })),
|
|
2737
|
-
[possibleTags]
|
|
2738
|
-
);
|
|
2739
|
-
return /* @__PURE__ */ jsxRuntime.jsx(Grid8__default.default, { container: true, children: /* @__PURE__ */ jsxRuntime.jsx(Grid8__default.default, { size: { xs: 12 }, children: /* @__PURE__ */ jsxRuntime.jsxs(Card10__default.default, { children: [
|
|
2740
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2741
|
-
CardHeader4__default.default,
|
|
2742
|
-
{
|
|
2743
|
-
title,
|
|
2744
|
-
style: {
|
|
2745
|
-
background: "linear-gradient(135deg, rgba(25, 118, 210, 0.8), rgba(25, 118, 210, 1))",
|
|
2746
|
-
color: "#FFFFFF",
|
|
2747
|
-
fontSize: "1.5rem",
|
|
2748
|
-
textShadow: "0px 3px 6px rgba(0, 0, 0, 0.5)"
|
|
2749
|
-
}
|
|
2750
|
-
}
|
|
2751
|
-
),
|
|
2752
|
-
/* @__PURE__ */ jsxRuntime.jsxs(CardContent10__default.default, { children: [
|
|
2753
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-2 flex flex-wrap gap-2", children: selectedTags.map((tag) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
2754
|
-
Chip,
|
|
2755
|
-
{
|
|
2756
|
-
tag,
|
|
2757
|
-
removeCallback: () => onToggleTag(tag.id)
|
|
2758
|
-
},
|
|
2759
|
-
tag.id
|
|
2760
|
-
)) }),
|
|
2761
|
-
/* @__PURE__ */ jsxRuntime.jsx(Grid8__default.default, { container: true, spacing: 3, children: /* @__PURE__ */ jsxRuntime.jsx(Grid8__default.default, { sx: { marginTop: 3, width: "100%" }, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
2762
|
-
Autocomplete__default.default,
|
|
2763
|
-
{
|
|
2764
|
-
options,
|
|
2765
|
-
filterOptions: (availableOptions, state) => availableOptions.filter(
|
|
2766
|
-
(option) => !selectedIds.includes(option.value) && option.label.toLowerCase().includes(state.inputValue.toLowerCase())
|
|
2767
|
-
).slice(0, 3),
|
|
2768
|
-
value: null,
|
|
2769
|
-
inputValue,
|
|
2770
|
-
onInputChange: (event, newInputValue) => {
|
|
2771
|
-
if (event && event.type === "change") {
|
|
2772
|
-
setInputValue(newInputValue);
|
|
2773
|
-
}
|
|
2774
|
-
},
|
|
2775
|
-
onChange: (event, newValue) => {
|
|
2776
|
-
if (newValue) {
|
|
2777
|
-
onToggleTag(newValue.value);
|
|
2778
|
-
}
|
|
2779
|
-
setInputValue("");
|
|
2780
|
-
},
|
|
2781
|
-
slots: { popper: CustomPopper3 },
|
|
2782
|
-
renderInput: (params) => /* @__PURE__ */ jsxRuntime.jsx(TextField4__default.default, { ...params, label: "Select Tags" })
|
|
2783
|
-
},
|
|
2784
|
-
selectedIds.join("-")
|
|
2785
|
-
) }) })
|
|
2786
|
-
] })
|
|
2787
|
-
] }) }) });
|
|
2788
|
-
}
|
|
2789
|
-
var CustomPopper3 = (props) => {
|
|
2790
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
2791
|
-
Popper__default.default,
|
|
2792
|
-
{
|
|
2793
|
-
...props,
|
|
2794
|
-
modifiers: [
|
|
2795
|
-
{
|
|
2796
|
-
name: "preventOverflow",
|
|
2797
|
-
options: { boundary: "viewport" }
|
|
2798
|
-
},
|
|
2799
|
-
{
|
|
2800
|
-
name: "offset",
|
|
2801
|
-
options: { offset: [0, -10] }
|
|
2802
|
-
}
|
|
2803
|
-
],
|
|
2804
|
-
placement: "top-start"
|
|
2805
|
-
}
|
|
2806
|
-
);
|
|
2807
|
-
};
|
|
2808
3176
|
function TablePageLayout(props) {
|
|
2809
3177
|
var _a;
|
|
2810
|
-
const {
|
|
3178
|
+
const { hideModal, showModal } = useModal();
|
|
3179
|
+
const { allTags, dungeonMaster, onDeleteTable, onJoinWaitlist, onLeaveTable, onSaveDraft, players, table, tableStatus, waitlistPlayers, startWithEditTitle, eventTagId } = props;
|
|
3180
|
+
const canEdit = tableStatus.isOwner;
|
|
2811
3181
|
const textAreaRef = React7.useRef(null);
|
|
2812
3182
|
const [isTableInEditMode, setIsTableInEditMode] = React7.useState(false);
|
|
3183
|
+
const [currentTitle, setCurrentTitle] = React7.useState(table.title);
|
|
3184
|
+
const [currentSubtitle, setCurrentSubtitle] = React7.useState(table.shortDescription);
|
|
2813
3185
|
const [currentDescription, setCurrentDescription] = React7.useState(table.description);
|
|
2814
3186
|
const [currentDungeonMaster, setCurrentDungeonMaster] = React7.useState(dungeonMaster);
|
|
2815
3187
|
const [currentPlayers, setCurrentPlayers] = React7.useState(players);
|
|
2816
|
-
const [currentShortDescription, setCurrentShortDescription] = React7.useState(table.shortDescription);
|
|
2817
|
-
const [currentTitle, setCurrentTitle] = React7.useState(table.title);
|
|
2818
3188
|
const [currentWaitlistPlayers, setCurrentWaitlistPlayers] = React7.useState(waitlistPlayers);
|
|
2819
3189
|
const [currentTagIds, setCurrentTagIds] = React7.useState((_a = table.tags) != null ? _a : []);
|
|
3190
|
+
const pendingEdits = React7.useRef({ title: currentTitle, subtitle: currentSubtitle, tags: currentTagIds });
|
|
3191
|
+
const handleSaveTable = (tableData = {}) => {
|
|
3192
|
+
const nextDraft = {
|
|
3193
|
+
...table,
|
|
3194
|
+
description: currentDescription,
|
|
3195
|
+
dungeonMaster: String(currentDungeonMaster.id),
|
|
3196
|
+
players: currentPlayers.map((player) => player.id),
|
|
3197
|
+
shortDescription: currentSubtitle,
|
|
3198
|
+
tags: currentTagIds,
|
|
3199
|
+
title: currentTitle,
|
|
3200
|
+
waitlist: currentWaitlistPlayers.map((player) => player.id),
|
|
3201
|
+
...tableData
|
|
3202
|
+
};
|
|
3203
|
+
void (onSaveDraft == null ? void 0 : onSaveDraft(nextDraft));
|
|
3204
|
+
setIsTableInEditMode(false);
|
|
3205
|
+
};
|
|
3206
|
+
const clean = (text) => text.replaceAll(
|
|
3207
|
+
/\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,
|
|
3208
|
+
"dudes"
|
|
3209
|
+
);
|
|
3210
|
+
const editTableDetails = () => {
|
|
3211
|
+
if (!canEdit) {
|
|
3212
|
+
return;
|
|
3213
|
+
}
|
|
3214
|
+
pendingEdits.current = {
|
|
3215
|
+
title: currentTitle,
|
|
3216
|
+
subtitle: currentSubtitle,
|
|
3217
|
+
tags: currentTagIds
|
|
3218
|
+
};
|
|
3219
|
+
const editContent = /* @__PURE__ */ jsxRuntime.jsx(
|
|
3220
|
+
EditTableDetailsForm,
|
|
3221
|
+
{
|
|
3222
|
+
initialTitle: currentTitle,
|
|
3223
|
+
initialSubtitle: currentSubtitle,
|
|
3224
|
+
onTitleChange: (t) => pendingEdits.current.title = t,
|
|
3225
|
+
onSubtitleChange: (s) => pendingEdits.current.subtitle = s,
|
|
3226
|
+
onTagChange: (t) => pendingEdits.current.tags = t,
|
|
3227
|
+
initialTagIDs: currentTagIds,
|
|
3228
|
+
allTags: allTags.filter((t) => t.appliesTo.tables),
|
|
3229
|
+
allowEditingTitles: true
|
|
3230
|
+
}
|
|
3231
|
+
);
|
|
3232
|
+
showModal(editContent, "Edit Table Details", {
|
|
3233
|
+
acceptText: "Save",
|
|
3234
|
+
onAccept: () => {
|
|
3235
|
+
setCurrentTitle(clean(pendingEdits.current.title));
|
|
3236
|
+
setCurrentSubtitle(clean(pendingEdits.current.subtitle));
|
|
3237
|
+
setCurrentTagIds(pendingEdits.current.tags);
|
|
3238
|
+
handleSaveTable({
|
|
3239
|
+
title: clean(pendingEdits.current.title),
|
|
3240
|
+
shortDescription: clean(pendingEdits.current.subtitle),
|
|
3241
|
+
tags: pendingEdits.current.tags
|
|
3242
|
+
});
|
|
3243
|
+
}
|
|
3244
|
+
});
|
|
3245
|
+
};
|
|
2820
3246
|
React7.useEffect(() => {
|
|
2821
|
-
|
|
2822
|
-
|
|
2823
|
-
|
|
2824
|
-
|
|
2825
|
-
|
|
2826
|
-
setCurrentTitle(table.title);
|
|
2827
|
-
setCurrentWaitlistPlayers(waitlistPlayers);
|
|
2828
|
-
setCurrentTagIds((_a2 = table.tags) != null ? _a2 : []);
|
|
2829
|
-
}, [dungeonMaster, players, table, waitlistPlayers]);
|
|
2830
|
-
const currentTags = React7.useMemo(
|
|
3247
|
+
if (startWithEditTitle) {
|
|
3248
|
+
editTableDetails();
|
|
3249
|
+
}
|
|
3250
|
+
});
|
|
3251
|
+
React7.useMemo(
|
|
2831
3252
|
() => allTags.filter((tag) => currentTagIds.includes(tag.id)),
|
|
2832
3253
|
[allTags, currentTagIds]
|
|
2833
3254
|
);
|
|
@@ -2847,37 +3268,17 @@ function TablePageLayout(props) {
|
|
|
2847
3268
|
return prevWaitlist.filter((player) => player.id !== playerIdToPromote);
|
|
2848
3269
|
});
|
|
2849
3270
|
};
|
|
2850
|
-
const handleToggleTag = (tagId) => {
|
|
2851
|
-
setCurrentTagIds(
|
|
2852
|
-
(prevState) => prevState.includes(tagId) ? prevState.filter((id) => id !== tagId) : [...prevState, tagId]
|
|
2853
|
-
);
|
|
2854
|
-
};
|
|
2855
|
-
const handleSaveTable = () => {
|
|
2856
|
-
const nextDraft = {
|
|
2857
|
-
...table,
|
|
2858
|
-
description: currentDescription,
|
|
2859
|
-
dungeonMaster: String(currentDungeonMaster.id),
|
|
2860
|
-
players: currentPlayers.map((player) => player.id),
|
|
2861
|
-
shortDescription: currentShortDescription,
|
|
2862
|
-
tags: currentTagIds,
|
|
2863
|
-
title: currentTitle,
|
|
2864
|
-
waitlist: currentWaitlistPlayers.map((player) => player.id)
|
|
2865
|
-
};
|
|
2866
|
-
void (onSaveDraft == null ? void 0 : onSaveDraft(nextDraft));
|
|
2867
|
-
setIsTableInEditMode(false);
|
|
2868
|
-
};
|
|
2869
3271
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
2870
3272
|
material.Card,
|
|
2871
3273
|
{
|
|
2872
3274
|
sx: {
|
|
2873
3275
|
backgroundColor: isTableInEditMode ? "lightsalmon" : "white",
|
|
2874
|
-
borderRadius: "5%",
|
|
2875
3276
|
p: 2,
|
|
2876
3277
|
boxShadow: "0px 8px 15px rgba(25, 118, 210, 0.3)"
|
|
2877
3278
|
},
|
|
2878
|
-
children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
3279
|
+
children: /* @__PURE__ */ jsxRuntime.jsxs(Grid10__default.default, { container: true, direction: "column", children: [
|
|
2879
3280
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
2880
|
-
|
|
3281
|
+
Grid10__default.default,
|
|
2881
3282
|
{
|
|
2882
3283
|
container: true,
|
|
2883
3284
|
direction: "column",
|
|
@@ -2890,39 +3291,49 @@ function TablePageLayout(props) {
|
|
|
2890
3291
|
textShadow: "4px 4px 6px rgba(0, 0, 0, 0.5)"
|
|
2891
3292
|
},
|
|
2892
3293
|
children: [
|
|
2893
|
-
/* @__PURE__ */ jsxRuntime.jsx(material.Box, { children:
|
|
2894
|
-
|
|
2895
|
-
{
|
|
2896
|
-
onChange: (e) => setCurrentTitle(e.target.value),
|
|
2897
|
-
style: { backgroundColor: "#fffbea" },
|
|
2898
|
-
tabIndex: 0,
|
|
2899
|
-
type: "text",
|
|
2900
|
-
value: currentTitle
|
|
2901
|
-
}
|
|
2902
|
-
) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
2903
|
-
material.CardHeader,
|
|
3294
|
+
/* @__PURE__ */ jsxRuntime.jsx(material.Box, { children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
3295
|
+
material.Box,
|
|
2904
3296
|
{
|
|
2905
|
-
|
|
2906
|
-
sx: {
|
|
2907
|
-
|
|
2908
|
-
|
|
2909
|
-
|
|
2910
|
-
|
|
2911
|
-
|
|
2912
|
-
|
|
3297
|
+
className: `flex items-center gap-1 ${canEdit ? "cursor-pointer" : ""}`,
|
|
3298
|
+
sx: { "&:hover .edit-icon": { opacity: 1 } },
|
|
3299
|
+
onClick: editTableDetails,
|
|
3300
|
+
children: [
|
|
3301
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3302
|
+
material.CardHeader,
|
|
3303
|
+
{
|
|
3304
|
+
title: currentTitle,
|
|
3305
|
+
sx: {
|
|
3306
|
+
p: 0,
|
|
3307
|
+
"& .MuiCardHeader-title": {
|
|
3308
|
+
color: "white",
|
|
3309
|
+
fontWeight: 700
|
|
3310
|
+
}
|
|
3311
|
+
}
|
|
3312
|
+
}
|
|
3313
|
+
),
|
|
3314
|
+
canEdit ? /* @__PURE__ */ jsxRuntime.jsx(EditIcon3__default.default, { className: "edit-icon text-white", sx: { opacity: 0, transition: "opacity 0.2s" } }) : ""
|
|
3315
|
+
]
|
|
2913
3316
|
}
|
|
2914
3317
|
) }),
|
|
2915
|
-
|
|
2916
|
-
|
|
3318
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
3319
|
+
material.Box,
|
|
2917
3320
|
{
|
|
2918
|
-
|
|
2919
|
-
|
|
2920
|
-
|
|
2921
|
-
|
|
2922
|
-
|
|
3321
|
+
className: `flex items-center gap-1 ${canEdit ? "cursor-pointer" : ""}`,
|
|
3322
|
+
sx: { "&:hover .edit-icon": { opacity: 1 } },
|
|
3323
|
+
onClick: editTableDetails,
|
|
3324
|
+
children: [
|
|
3325
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3326
|
+
material.Typography,
|
|
3327
|
+
{
|
|
3328
|
+
sx: { color: "white", opacity: 0.95 },
|
|
3329
|
+
children: currentSubtitle
|
|
3330
|
+
}
|
|
3331
|
+
),
|
|
3332
|
+
canEdit ? /* @__PURE__ */ jsxRuntime.jsx(EditIcon3__default.default, { className: "edit-icon text-white", sx: { opacity: 0, transition: "opacity 0.2s", fontSize: "medium" } }) : ""
|
|
3333
|
+
]
|
|
2923
3334
|
}
|
|
2924
|
-
)
|
|
2925
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3335
|
+
),
|
|
3336
|
+
/* @__PURE__ */ jsxRuntime.jsx(Grid10__default.default, { container: true, onClick: editTableDetails, className: `${canEdit ? "cursor-pointer" : ""}`, children: renderTags(currentTagIds, allTags, canEdit, table.eventTagId || eventTagId) }),
|
|
2926
3337
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2927
3338
|
TableActionsBar,
|
|
2928
3339
|
{
|
|
@@ -2942,8 +3353,8 @@ function TablePageLayout(props) {
|
|
|
2942
3353
|
]
|
|
2943
3354
|
}
|
|
2944
3355
|
),
|
|
2945
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
2946
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3356
|
+
/* @__PURE__ */ jsxRuntime.jsxs(Grid10__default.default, { container: true, spacing: 2, sx: { mt: 2 }, children: [
|
|
3357
|
+
/* @__PURE__ */ jsxRuntime.jsx(Grid10__default.default, { size: { xs: 12, md: 8 }, children: /* @__PURE__ */ jsxRuntime.jsx(material.Card, { sx: { height: "100%" }, children: /* @__PURE__ */ jsxRuntime.jsx(material.CardContent, { children: isTableInEditMode ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
2947
3358
|
AutoResizingTextarea_default,
|
|
2948
3359
|
{
|
|
2949
3360
|
isInEditMode: isTableInEditMode,
|
|
@@ -2952,7 +3363,7 @@ function TablePageLayout(props) {
|
|
|
2952
3363
|
value: currentDescription
|
|
2953
3364
|
}
|
|
2954
3365
|
) : /* @__PURE__ */ jsxRuntime.jsx(material.Typography, { sx: { whiteSpace: "pre-wrap" }, children: currentDescription }) }) }) }),
|
|
2955
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
3366
|
+
/* @__PURE__ */ jsxRuntime.jsxs(Grid10__default.default, { size: { xs: 12, md: 4 }, children: [
|
|
2956
3367
|
/* @__PURE__ */ jsxRuntime.jsx(DMHighlightsCard, { canEdit: isTableInEditMode, player: currentDungeonMaster, allTags }),
|
|
2957
3368
|
/* @__PURE__ */ jsxRuntime.jsxs(material.Card, { sx: { height: "100%" }, children: [
|
|
2958
3369
|
/* @__PURE__ */ jsxRuntime.jsx(material.CardHeader, { slotProps: { title: { variant: "h4" } }, title: "Players: " }),
|
|
@@ -2975,36 +3386,85 @@ function TablePageLayout(props) {
|
|
|
2975
3386
|
}
|
|
2976
3387
|
);
|
|
2977
3388
|
}
|
|
2978
|
-
var renderTags = function(tags, allTags) {
|
|
3389
|
+
var renderTags = function(tags, allTags, canEdit, eventTagId) {
|
|
2979
3390
|
if (!tags || !allTags) {
|
|
2980
3391
|
return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, {});
|
|
2981
3392
|
}
|
|
2982
|
-
return /* @__PURE__ */ jsxRuntime.
|
|
2983
|
-
|
|
2984
|
-
|
|
2985
|
-
|
|
2986
|
-
|
|
2987
|
-
|
|
2988
|
-
|
|
2989
|
-
|
|
2990
|
-
|
|
2991
|
-
|
|
2992
|
-
|
|
2993
|
-
|
|
2994
|
-
|
|
2995
|
-
|
|
2996
|
-
|
|
2997
|
-
|
|
2998
|
-
|
|
2999
|
-
|
|
3393
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(Grid10__default.default, { container: true, spacing: 1, sx: { pb: 1.5 }, children: [
|
|
3394
|
+
renderTagsFromIds(tags, allTags, { showEventTag: true, eventTagId }),
|
|
3395
|
+
canEdit ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
3396
|
+
material.Button,
|
|
3397
|
+
{
|
|
3398
|
+
variant: "text",
|
|
3399
|
+
className: "inline-block text-sm px-3 py-1font-outlined m-0.5 font-stretch-105% font-sans",
|
|
3400
|
+
sx: {
|
|
3401
|
+
color: "white",
|
|
3402
|
+
textShadow: "black 1.5px 1px 1.5px",
|
|
3403
|
+
"&:hover": {
|
|
3404
|
+
background: "#889"
|
|
3405
|
+
}
|
|
3406
|
+
},
|
|
3407
|
+
children: "Edit Tags..."
|
|
3408
|
+
}
|
|
3409
|
+
) : ""
|
|
3410
|
+
] });
|
|
3000
3411
|
};
|
|
3001
3412
|
var TablePageLayout_default = TablePageLayout;
|
|
3413
|
+
var ModalProvider = ({ children }) => {
|
|
3414
|
+
var _a;
|
|
3415
|
+
const [modalContent, setModalContent] = React7.useState(null);
|
|
3416
|
+
const [displayModal, setDisplayModal] = React7.useState(false);
|
|
3417
|
+
const [title, setTitle] = React7.useState("");
|
|
3418
|
+
const [options, setOptions] = React7.useState({});
|
|
3419
|
+
const showModal = (content, title2, opts) => {
|
|
3420
|
+
setModalContent(content);
|
|
3421
|
+
setTitle(title2);
|
|
3422
|
+
setOptions(opts != null ? opts : {});
|
|
3423
|
+
setDisplayModal(true);
|
|
3424
|
+
};
|
|
3425
|
+
const hideModal = () => {
|
|
3426
|
+
setDisplayModal(false);
|
|
3427
|
+
};
|
|
3428
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(ModalContext.Provider, { value: { showModal, hideModal }, children: [
|
|
3429
|
+
children,
|
|
3430
|
+
/* @__PURE__ */ jsxRuntime.jsxs(Dialog3__default.default, { open: displayModal, onClose: hideModal, sx: { height: "85%" }, children: [
|
|
3431
|
+
/* @__PURE__ */ jsxRuntime.jsxs(material.Box, { children: [
|
|
3432
|
+
/* @__PURE__ */ jsxRuntime.jsx(DialogTitle3__default.default, { sx: { marginRight: "20px", minWidth: "400px" }, children: title }),
|
|
3433
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3434
|
+
IconButton3__default.default,
|
|
3435
|
+
{
|
|
3436
|
+
"aria-label": "close",
|
|
3437
|
+
onClick: hideModal,
|
|
3438
|
+
sx: { position: "absolute", right: 8, top: 8 },
|
|
3439
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(CloseIcon__default.default, {})
|
|
3440
|
+
}
|
|
3441
|
+
)
|
|
3442
|
+
] }),
|
|
3443
|
+
/* @__PURE__ */ jsxRuntime.jsx(DialogContent3__default.default, { sx: { paddingTop: 0 }, children: modalContent }),
|
|
3444
|
+
(options.acceptText || options.onAccept) && /* @__PURE__ */ jsxRuntime.jsxs(DialogActions3__default.default, { children: [
|
|
3445
|
+
/* @__PURE__ */ jsxRuntime.jsx(Button8__default.default, { variant: "contained", onClick: () => {
|
|
3446
|
+
var _a2;
|
|
3447
|
+
hideModal();
|
|
3448
|
+
(_a2 = options.onAccept) == null ? void 0 : _a2.call(options);
|
|
3449
|
+
}, children: (_a = options.acceptText) != null ? _a : "OK" }),
|
|
3450
|
+
/* @__PURE__ */ jsxRuntime.jsx(Button8__default.default, { onClick: () => {
|
|
3451
|
+
var _a2;
|
|
3452
|
+
hideModal();
|
|
3453
|
+
(_a2 = options.onCancel) == null ? void 0 : _a2.call(options);
|
|
3454
|
+
}, children: "Cancel" })
|
|
3455
|
+
] })
|
|
3456
|
+
] })
|
|
3457
|
+
] });
|
|
3458
|
+
};
|
|
3459
|
+
var ModalProvider_default = ModalProvider;
|
|
3002
3460
|
|
|
3003
3461
|
exports.AutoResizingTextarea = AutoResizingTextarea_default;
|
|
3004
3462
|
exports.BaseSearchResultCard = BaseSearchResultCard_default;
|
|
3005
3463
|
exports.CANDIDATE_TIMEZONES = CANDIDATE_TIMEZONES;
|
|
3006
3464
|
exports.Chip = Chip;
|
|
3007
3465
|
exports.DMHighlightsCard = DMHighlightsCard;
|
|
3466
|
+
exports.DistanceFilter = DistanceFilter_default;
|
|
3467
|
+
exports.EditTableDetailsForm = EditTableDetailsForm;
|
|
3008
3468
|
exports.EventBanner = EventBanner;
|
|
3009
3469
|
exports.EventBannerEdit = EventBannerEdit;
|
|
3010
3470
|
exports.EventBasicInfo = EventBasicInfo;
|
|
@@ -3039,10 +3499,14 @@ exports.TablePageLayout = TablePageLayout_default;
|
|
|
3039
3499
|
exports.TableResultCard = TableResultCard_default;
|
|
3040
3500
|
exports.TablesScrollableList = TablesScrollableList_default;
|
|
3041
3501
|
exports.TagEditor = TagEditor;
|
|
3502
|
+
exports.TagSelector = TagSelector;
|
|
3042
3503
|
exports.TagsFilter = TagsFilter_default;
|
|
3043
3504
|
exports.TextSearchCard = TextSearchCard_default;
|
|
3044
3505
|
exports.TypeFilter = TypeFilter_default;
|
|
3506
|
+
exports.UserAgreementModal = UserAgreementModal_default;
|
|
3045
3507
|
exports.generateTagsDisplay = generateTagsDisplay;
|
|
3508
|
+
exports.getRandomTagline = getRandomTagline;
|
|
3509
|
+
exports.getRandomTitle = getRandomTitle;
|
|
3046
3510
|
exports.renderTagsFromIds = renderTagsFromIds;
|
|
3047
3511
|
exports.useEventEdit = useEventEdit;
|
|
3048
3512
|
exports.useGameTableContext = useGameTableContext;
|