@mbpockets/shared-ui 0.2.0 → 0.2.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/EventPage/editMode/index.cjs.map +1 -1
- package/dist/EventPage/editMode/index.d.cts +1 -1
- package/dist/EventPage/editMode/index.d.ts +1 -1
- package/dist/EventPage/editMode/index.mjs.map +1 -1
- package/dist/EventPage/editMode.cjs.map +1 -1
- package/dist/EventPage/editMode.d.cts +1 -1
- package/dist/EventPage/editMode.d.ts +1 -1
- package/dist/EventPage/editMode.mjs.map +1 -1
- package/dist/EventPage/index.cjs +121 -63
- package/dist/EventPage/index.cjs.map +1 -1
- package/dist/EventPage/index.d.cts +1 -1
- package/dist/EventPage/index.d.ts +1 -1
- package/dist/EventPage/index.mjs +121 -63
- package/dist/EventPage/index.mjs.map +1 -1
- package/dist/EventPage.cjs +121 -63
- package/dist/EventPage.cjs.map +1 -1
- package/dist/EventPage.d.cts +4 -4
- package/dist/EventPage.d.ts +4 -4
- package/dist/EventPage.mjs +121 -63
- package/dist/EventPage.mjs.map +1 -1
- package/dist/PlayerPage/index.cjs +12 -8
- package/dist/PlayerPage/index.cjs.map +1 -1
- package/dist/PlayerPage/index.mjs +12 -8
- package/dist/PlayerPage/index.mjs.map +1 -1
- package/dist/PlayerPage.cjs +12 -8
- package/dist/PlayerPage.cjs.map +1 -1
- package/dist/PlayerPage.mjs +12 -8
- package/dist/PlayerPage.mjs.map +1 -1
- package/dist/ProfilePage/index.cjs +12 -8
- package/dist/ProfilePage/index.cjs.map +1 -1
- package/dist/ProfilePage/index.mjs +12 -8
- package/dist/ProfilePage/index.mjs.map +1 -1
- package/dist/ProfilePage.cjs +12 -8
- package/dist/ProfilePage.cjs.map +1 -1
- package/dist/ProfilePage.mjs +12 -8
- package/dist/ProfilePage.mjs.map +1 -1
- package/dist/SearchPage/Filters/index.cjs +38 -18
- package/dist/SearchPage/Filters/index.cjs.map +1 -1
- package/dist/SearchPage/Filters/index.d.cts +2 -1
- package/dist/SearchPage/Filters/index.d.ts +2 -1
- package/dist/SearchPage/Filters/index.mjs +34 -17
- package/dist/SearchPage/Filters/index.mjs.map +1 -1
- package/dist/SearchPage/Filters.cjs +38 -18
- package/dist/SearchPage/Filters.cjs.map +1 -1
- package/dist/SearchPage/Filters.d.cts +13 -1
- package/dist/SearchPage/Filters.d.ts +13 -1
- package/dist/SearchPage/Filters.mjs +34 -17
- package/dist/SearchPage/Filters.mjs.map +1 -1
- package/dist/SearchPage/Results/index.cjs +87 -48
- package/dist/SearchPage/Results/index.cjs.map +1 -1
- package/dist/SearchPage/Results/index.mjs +87 -48
- package/dist/SearchPage/Results/index.mjs.map +1 -1
- package/dist/SearchPage/Results.cjs +87 -48
- package/dist/SearchPage/Results.cjs.map +1 -1
- package/dist/SearchPage/Results.d.cts +10 -3
- package/dist/SearchPage/Results.d.ts +10 -3
- package/dist/SearchPage/Results.mjs +87 -48
- package/dist/SearchPage/Results.mjs.map +1 -1
- package/dist/SearchPage/index.cjs +207 -99
- package/dist/SearchPage/index.cjs.map +1 -1
- package/dist/SearchPage/index.d.cts +2 -2
- package/dist/SearchPage/index.d.ts +2 -2
- package/dist/SearchPage/index.mjs +203 -98
- package/dist/SearchPage/index.mjs.map +1 -1
- package/dist/SearchPage.cjs +207 -99
- package/dist/SearchPage.cjs.map +1 -1
- package/dist/SearchPage.d.cts +25 -3
- package/dist/SearchPage.d.ts +25 -3
- package/dist/SearchPage.mjs +203 -98
- package/dist/SearchPage.mjs.map +1 -1
- package/dist/TablePage/EditComponents/index.cjs +296 -0
- package/dist/TablePage/EditComponents/index.cjs.map +1 -0
- package/dist/TablePage/EditComponents/index.d.cts +3 -0
- package/dist/TablePage/EditComponents/index.d.ts +3 -0
- package/dist/TablePage/EditComponents/index.mjs +286 -0
- package/dist/TablePage/EditComponents/index.mjs.map +1 -0
- package/dist/TablePage/EditComponents.cjs +296 -0
- package/dist/TablePage/EditComponents.cjs.map +1 -0
- package/dist/TablePage/EditComponents.d.cts +21 -0
- package/dist/TablePage/EditComponents.d.ts +21 -0
- package/dist/TablePage/EditComponents.mjs +286 -0
- package/dist/TablePage/EditComponents.mjs.map +1 -0
- package/dist/TablePage/ModalProvider/index.cjs +59 -58
- package/dist/TablePage/ModalProvider/index.cjs.map +1 -1
- package/dist/TablePage/ModalProvider/index.d.cts +1 -1
- package/dist/TablePage/ModalProvider/index.d.ts +1 -1
- package/dist/TablePage/ModalProvider/index.mjs +50 -59
- package/dist/TablePage/ModalProvider/index.mjs.map +1 -1
- package/dist/TablePage/ModalProvider.cjs +59 -58
- package/dist/TablePage/ModalProvider.cjs.map +1 -1
- package/dist/TablePage/ModalProvider.d.cts +7 -2
- package/dist/TablePage/ModalProvider.d.ts +7 -2
- package/dist/TablePage/ModalProvider.mjs +50 -59
- package/dist/TablePage/ModalProvider.mjs.map +1 -1
- package/dist/TablePage/index.cjs +555 -331
- package/dist/TablePage/index.cjs.map +1 -1
- package/dist/TablePage/index.d.cts +3 -2
- package/dist/TablePage/index.d.ts +3 -2
- package/dist/TablePage/index.mjs +539 -320
- package/dist/TablePage/index.mjs.map +1 -1
- package/dist/TablePage/players/index.cjs +24 -4
- package/dist/TablePage/players/index.cjs.map +1 -1
- package/dist/TablePage/players/index.mjs +24 -4
- package/dist/TablePage/players/index.mjs.map +1 -1
- package/dist/TablePage/players.cjs +24 -4
- package/dist/TablePage/players.cjs.map +1 -1
- package/dist/TablePage/players.mjs +24 -4
- package/dist/TablePage/players.mjs.map +1 -1
- package/dist/TablePage.cjs +555 -331
- package/dist/TablePage.cjs.map +1 -1
- package/dist/TablePage.d.cts +4 -1
- package/dist/TablePage.d.ts +4 -1
- package/dist/TablePage.mjs +539 -320
- package/dist/TablePage.mjs.map +1 -1
- package/dist/{index-D7WHhl3Q.d.ts → index-B23RQop0.d.ts} +12 -12
- package/dist/{index-DC0kK3aC.d.cts → index-Csj8S4A4.d.cts} +12 -12
- package/dist/index.cjs +889 -424
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +5 -4
- package/dist/index.d.ts +5 -4
- package/dist/index.mjs +870 -421
- package/dist/index.mjs.map +1 -1
- package/dist/mocks/{EventDB.cjs → EventDetails.cjs} +203 -3
- package/dist/mocks/EventDetails.cjs.map +1 -0
- package/dist/mocks/EventDetails.d.cts +6 -0
- package/dist/mocks/EventDetails.d.ts +6 -0
- package/dist/mocks/{EventDB.mjs → EventDetails.mjs} +203 -3
- package/dist/mocks/EventDetails.mjs.map +1 -0
- package/dist/mocks/Tables.cjs +1 -1
- package/dist/mocks/Tables.cjs.map +1 -1
- package/dist/mocks/Tables.mjs +1 -1
- package/dist/mocks/Tables.mjs.map +1 -1
- package/dist/mocks/Tags.cjs +200 -0
- package/dist/mocks/Tags.cjs.map +1 -1
- package/dist/mocks/Tags.mjs +200 -0
- package/dist/mocks/Tags.mjs.map +1 -1
- package/dist/mocks/index.cjs +202 -2
- package/dist/mocks/index.cjs.map +1 -1
- package/dist/mocks/index.d.cts +1 -1
- package/dist/mocks/index.d.ts +1 -1
- package/dist/mocks/index.mjs +202 -2
- package/dist/mocks/index.mjs.map +1 -1
- package/dist/mocks.cjs +202 -2
- package/dist/mocks.cjs.map +1 -1
- package/dist/mocks.d.cts +1 -1
- package/dist/mocks.d.ts +1 -1
- package/dist/mocks.mjs +202 -2
- package/dist/mocks.mjs.map +1 -1
- package/dist/shared/index.cjs +327 -64
- package/dist/shared/index.cjs.map +1 -1
- package/dist/shared/index.d.cts +1 -1
- package/dist/shared/index.d.ts +1 -1
- package/dist/shared/index.mjs +324 -64
- package/dist/shared/index.mjs.map +1 -1
- package/dist/shared.cjs +327 -64
- package/dist/shared.cjs.map +1 -1
- package/dist/shared.d.cts +25 -2
- package/dist/shared.d.ts +25 -2
- package/dist/shared.mjs +324 -64
- package/dist/shared.mjs.map +1 -1
- package/dist/types/event.d.cts +2 -3
- package/dist/types/event.d.ts +2 -3
- package/dist/types/index.d.cts +2 -2
- package/dist/types/index.d.ts +2 -2
- package/dist/types/search.d.cts +7 -1
- package/dist/types/search.d.ts +7 -1
- package/dist/types/tables.d.cts +1 -0
- package/dist/types/tables.d.ts +1 -0
- package/dist/types.d.cts +2 -2
- package/dist/types.d.ts +2 -2
- package/package.json +9 -2
- package/dist/TablePage/ModalProvider/index.css +0 -49
- package/dist/TablePage/ModalProvider/index.css.map +0 -1
- package/dist/TablePage/ModalProvider.css +0 -49
- package/dist/TablePage/ModalProvider.css.map +0 -1
- package/dist/TablePage/index.css +0 -49
- package/dist/TablePage/index.css.map +0 -1
- package/dist/TablePage.css +0 -49
- package/dist/TablePage.css.map +0 -1
- package/dist/index.css +0 -49
- package/dist/index.css.map +0 -1
- package/dist/mocks/EventDB.cjs.map +0 -1
- package/dist/mocks/EventDB.d.cts +0 -6
- package/dist/mocks/EventDB.d.ts +0 -6
- package/dist/mocks/EventDB.mjs.map +0 -1
- package/dist/shared/Modal/index.cjs +0 -64
- package/dist/shared/Modal/index.cjs.map +0 -1
- package/dist/shared/Modal/index.css +0 -49
- package/dist/shared/Modal/index.css.map +0 -1
- package/dist/shared/Modal/index.d.cts +0 -2
- package/dist/shared/Modal/index.d.ts +0 -2
- package/dist/shared/Modal/index.mjs +0 -62
- package/dist/shared/Modal/index.mjs.map +0 -1
- package/dist/shared/Modal.cjs +0 -64
- package/dist/shared/Modal.cjs.map +0 -1
- package/dist/shared/Modal.css +0 -49
- package/dist/shared/Modal.css.map +0 -1
- package/dist/shared/Modal.d.cts +0 -9
- package/dist/shared/Modal.d.ts +0 -9
- package/dist/shared/Modal.mjs +0 -62
- package/dist/shared/Modal.mjs.map +0 -1
- package/dist/shared/index.css +0 -49
- package/dist/shared/index.css.map +0 -1
- package/dist/shared.css +0 -49
- package/dist/shared.css.map +0 -1
package/dist/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": {
|
|
@@ -1041,7 +1089,7 @@ var BaseSearchResultCard = ({
|
|
|
1041
1089
|
const text = full || "";
|
|
1042
1090
|
return text.length > 200 ? `${text.slice(0, 200).trimEnd()}...` : text;
|
|
1043
1091
|
})() }) : /* @__PURE__ */ jsxRuntime.jsx(Typography4__default.default, { variant: "body1", children: result.description }),
|
|
1044
|
-
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 }) })
|
|
1045
1093
|
] })
|
|
1046
1094
|
] })
|
|
1047
1095
|
}
|
|
@@ -1083,7 +1131,7 @@ var PlayerResultCard = ({
|
|
|
1083
1131
|
const playerIcon = /* @__PURE__ */ jsxRuntime.jsx(
|
|
1084
1132
|
Avatar__default.default,
|
|
1085
1133
|
{
|
|
1086
|
-
src: result.imageUrl,
|
|
1134
|
+
src: result.imageUrl || DEFAULT_PROFILE_PIC,
|
|
1087
1135
|
alt: result.title,
|
|
1088
1136
|
sx: {
|
|
1089
1137
|
width: 40,
|
|
@@ -1099,7 +1147,9 @@ var PlayerResultCard_default = PlayerResultCard;
|
|
|
1099
1147
|
var TableResultCard = ({
|
|
1100
1148
|
result,
|
|
1101
1149
|
onClick,
|
|
1102
|
-
tags
|
|
1150
|
+
tags,
|
|
1151
|
+
showEventTag,
|
|
1152
|
+
eventTagId
|
|
1103
1153
|
}) => {
|
|
1104
1154
|
const rawCapacity = result.capacity;
|
|
1105
1155
|
const hasDefinedCapacity = typeof rawCapacity === "number" && Number.isFinite(rawCapacity) && rawCapacity > 0;
|
|
@@ -1117,40 +1167,51 @@ var TableResultCard = ({
|
|
|
1117
1167
|
}
|
|
1118
1168
|
}
|
|
1119
1169
|
);
|
|
1120
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
1121
|
-
|
|
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
|
-
|
|
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
|
+
}
|
|
1148
1209
|
}
|
|
1149
|
-
|
|
1150
|
-
|
|
1151
|
-
|
|
1152
|
-
|
|
1153
|
-
|
|
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
|
+
);
|
|
1154
1215
|
};
|
|
1155
1216
|
var TableResultCard_default = TableResultCard;
|
|
1156
1217
|
var EventResultCard = ({
|
|
@@ -1168,7 +1229,7 @@ var EventResultCard = ({
|
|
|
1168
1229
|
try {
|
|
1169
1230
|
const date = new Date(dateString);
|
|
1170
1231
|
return date.toLocaleDateString("en-US", options);
|
|
1171
|
-
} catch (
|
|
1232
|
+
} catch (__) {
|
|
1172
1233
|
return dateString;
|
|
1173
1234
|
}
|
|
1174
1235
|
};
|
|
@@ -1213,20 +1274,22 @@ var ResultsContainer = ({
|
|
|
1213
1274
|
onResultClick,
|
|
1214
1275
|
tags,
|
|
1215
1276
|
pagination,
|
|
1216
|
-
onPacketChange
|
|
1277
|
+
onPacketChange,
|
|
1278
|
+
showEventTag,
|
|
1279
|
+
eventTagId
|
|
1217
1280
|
}) => {
|
|
1218
1281
|
if (!results || results.length === 0 || !results.map) {
|
|
1219
1282
|
return /* @__PURE__ */ jsxRuntime.jsx(Box2__default.default, { sx: { textAlign: "center", py: 4 }, children: "No results found. Try adjusting your filters." });
|
|
1220
1283
|
}
|
|
1221
|
-
const onPlayerClick = (id) => {
|
|
1222
|
-
onResultClick
|
|
1223
|
-
};
|
|
1224
|
-
const onTableClick = (id) => {
|
|
1225
|
-
onResultClick
|
|
1226
|
-
};
|
|
1227
|
-
const onEventClick = (id) => {
|
|
1228
|
-
onResultClick
|
|
1229
|
-
};
|
|
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;
|
|
1230
1293
|
const handlePacketChange = (_event, packet) => {
|
|
1231
1294
|
onPacketChange == null ? void 0 : onPacketChange(packet);
|
|
1232
1295
|
};
|
|
@@ -1260,7 +1323,9 @@ var ResultsContainer = ({
|
|
|
1260
1323
|
{
|
|
1261
1324
|
result,
|
|
1262
1325
|
onClick: onTableClick,
|
|
1263
|
-
tags
|
|
1326
|
+
tags,
|
|
1327
|
+
showEventTag,
|
|
1328
|
+
eventTagId
|
|
1264
1329
|
},
|
|
1265
1330
|
result.id
|
|
1266
1331
|
);
|
|
@@ -1296,17 +1361,30 @@ var ScrollableResultsList = ({
|
|
|
1296
1361
|
tags,
|
|
1297
1362
|
maxHeight = 400,
|
|
1298
1363
|
onResultClick,
|
|
1299
|
-
emptyText
|
|
1364
|
+
emptyText,
|
|
1365
|
+
showEventTag,
|
|
1366
|
+
eventTagId
|
|
1300
1367
|
}) => {
|
|
1301
1368
|
const hasResults = Array.isArray(results) && results.length > 0;
|
|
1302
|
-
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." }) });
|
|
1303
1379
|
};
|
|
1304
1380
|
var ScrollableResultsList_default = ScrollableResultsList;
|
|
1305
1381
|
var TablesScrollableList = ({
|
|
1306
1382
|
results,
|
|
1307
1383
|
tags,
|
|
1308
1384
|
maxHeight,
|
|
1309
|
-
onResultClick
|
|
1385
|
+
onResultClick,
|
|
1386
|
+
showEventTag,
|
|
1387
|
+
eventTagId
|
|
1310
1388
|
}) => {
|
|
1311
1389
|
const tables = (results || []).filter((r) => (r == null ? void 0 : r.type) === "table");
|
|
1312
1390
|
const handleClick = (id) => onResultClick == null ? void 0 : onResultClick(id);
|
|
@@ -1318,7 +1396,9 @@ var TablesScrollableList = ({
|
|
|
1318
1396
|
maxHeight,
|
|
1319
1397
|
onResultClick: (id, type) => {
|
|
1320
1398
|
if (type === "table") handleClick(id);
|
|
1321
|
-
}
|
|
1399
|
+
},
|
|
1400
|
+
showEventTag,
|
|
1401
|
+
eventTagId
|
|
1322
1402
|
}
|
|
1323
1403
|
);
|
|
1324
1404
|
};
|
|
@@ -1346,24 +1426,24 @@ function EventPageLayout({
|
|
|
1346
1426
|
tables,
|
|
1347
1427
|
allTags
|
|
1348
1428
|
}) {
|
|
1349
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
1350
|
-
/* @__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(
|
|
1351
1431
|
EventBanner,
|
|
1352
1432
|
{
|
|
1353
1433
|
attendees,
|
|
1354
1434
|
numGames
|
|
1355
1435
|
}
|
|
1356
1436
|
) }),
|
|
1357
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
1358
|
-
/* @__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(
|
|
1359
1439
|
EventBasicInfo,
|
|
1360
1440
|
{
|
|
1361
1441
|
locationId: mergedEvent.location || "0"
|
|
1362
1442
|
}
|
|
1363
1443
|
) }),
|
|
1364
|
-
/* @__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 }) })
|
|
1365
1445
|
] }),
|
|
1366
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1446
|
+
/* @__PURE__ */ jsxRuntime.jsx(Grid10__default.default, {})
|
|
1367
1447
|
] }) });
|
|
1368
1448
|
}
|
|
1369
1449
|
var PlayerDetailsCard = ({
|
|
@@ -1522,19 +1602,18 @@ var PlayerDetailsCard = ({
|
|
|
1522
1602
|
);
|
|
1523
1603
|
};
|
|
1524
1604
|
var PlayerDetailsCard_default = PlayerDetailsCard;
|
|
1525
|
-
|
|
1526
|
-
|
|
1527
|
-
|
|
1528
|
-
|
|
1529
|
-
|
|
1530
|
-
|
|
1531
|
-
const [imageSrc, setImageSrc] = React7.useState(
|
|
1532
|
-
const { aspectRatio } = ProfilePictureSettings;
|
|
1605
|
+
var PlayerDisplayCard = ({
|
|
1606
|
+
profilePicture,
|
|
1607
|
+
username,
|
|
1608
|
+
bio,
|
|
1609
|
+
preferredPronouns
|
|
1610
|
+
}) => {
|
|
1611
|
+
const [imageSrc, setImageSrc] = React7.useState(DEFAULT_PROFILE_PIC);
|
|
1533
1612
|
React7.useEffect(() => {
|
|
1534
1613
|
async function validateImage() {
|
|
1535
|
-
const newImage = profilePicture ||
|
|
1614
|
+
const newImage = profilePicture || DEFAULT_PROFILE_PIC;
|
|
1536
1615
|
if (!profilePicture) {
|
|
1537
|
-
setImageSrc(
|
|
1616
|
+
setImageSrc(DEFAULT_PROFILE_PIC);
|
|
1538
1617
|
return;
|
|
1539
1618
|
}
|
|
1540
1619
|
const img = new Image();
|
|
@@ -1543,7 +1622,7 @@ var PlayerDisplayCard = ({ profilePicture, username, bio, preferredPronouns }) =
|
|
|
1543
1622
|
setImageSrc(newImage);
|
|
1544
1623
|
};
|
|
1545
1624
|
img.onerror = () => {
|
|
1546
|
-
setImageSrc(
|
|
1625
|
+
setImageSrc(DEFAULT_PROFILE_PIC);
|
|
1547
1626
|
};
|
|
1548
1627
|
}
|
|
1549
1628
|
validateImage();
|
|
@@ -1573,7 +1652,7 @@ var PlayerDisplayCard = ({ profilePicture, username, bio, preferredPronouns }) =
|
|
|
1573
1652
|
image: imageSrc,
|
|
1574
1653
|
alt: `${username}'s Profile Picture`,
|
|
1575
1654
|
sx: {
|
|
1576
|
-
aspectRatio,
|
|
1655
|
+
aspectRatio: ProfilePictureSettings.aspectRatio,
|
|
1577
1656
|
height: "auto",
|
|
1578
1657
|
// Updates to maintain aspect ratio and fill space nicely
|
|
1579
1658
|
width: "100%",
|
|
@@ -1892,6 +1971,24 @@ function PlayerPageLayout({
|
|
|
1892
1971
|
] }) })
|
|
1893
1972
|
] }) }) });
|
|
1894
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;
|
|
1895
1992
|
var ExpiredTablesFilter = ({
|
|
1896
1993
|
includeExpiredTables,
|
|
1897
1994
|
onChange
|
|
@@ -1960,13 +2057,13 @@ var TagsFilter = ({
|
|
|
1960
2057
|
shouldHaveAtLeastOne: ""
|
|
1961
2058
|
});
|
|
1962
2059
|
const tagOptions = React7__default.default.useMemo(() => {
|
|
2060
|
+
var _a;
|
|
1963
2061
|
console.log("available tags: " + JSON.stringify(Tags));
|
|
1964
2062
|
console.log(!Tags);
|
|
1965
|
-
|
|
1966
|
-
return Tags.map((tag) => ({
|
|
2063
|
+
return (_a = Tags == null ? void 0 : Tags.map((tag) => ({
|
|
1967
2064
|
value: tag.id,
|
|
1968
2065
|
label: tag.label
|
|
1969
|
-
}));
|
|
2066
|
+
}))) != null ? _a : [];
|
|
1970
2067
|
}, [Tags]);
|
|
1971
2068
|
const handleTagChange = (tagId, category) => {
|
|
1972
2069
|
let newTags = [];
|
|
@@ -1994,8 +2091,7 @@ var TagsFilter = ({
|
|
|
1994
2091
|
};
|
|
1995
2092
|
const renderSelectedTags = (selectedTags, category) => {
|
|
1996
2093
|
const tagValues = [];
|
|
1997
|
-
|
|
1998
|
-
Tags.forEach((tag) => {
|
|
2094
|
+
Tags == null ? void 0 : Tags.forEach((tag) => {
|
|
1999
2095
|
if (selectedTags.includes(tag.id)) {
|
|
2000
2096
|
tagValues.push(tag);
|
|
2001
2097
|
}
|
|
@@ -2061,7 +2157,7 @@ var TagsFilter = ({
|
|
|
2061
2157
|
});
|
|
2062
2158
|
},
|
|
2063
2159
|
slots: { popper: CustomPopper2 },
|
|
2064
|
-
renderInput: (params) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
2160
|
+
renderInput: (params) => /* @__PURE__ */ jsxRuntime.jsx(TextField7__default.default, { ...params, label: `Select ${label}` })
|
|
2065
2161
|
},
|
|
2066
2162
|
`${category}-${selectedTags.join("-")}`
|
|
2067
2163
|
)
|
|
@@ -2133,7 +2229,7 @@ var TextSearchCard = ({ onChange, selectedTypes, initialTextSearch }) => {
|
|
|
2133
2229
|
/* @__PURE__ */ jsxRuntime.jsx(Typography4__default.default, { variant: "h6", gutterBottom: true, children: "Text Search" }),
|
|
2134
2230
|
/* @__PURE__ */ jsxRuntime.jsxs(Box2__default.default, { sx: { mb: 2 }, children: [
|
|
2135
2231
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2136
|
-
|
|
2232
|
+
TextField7__default.default,
|
|
2137
2233
|
{
|
|
2138
2234
|
fullWidth: true,
|
|
2139
2235
|
label: "Search in title and description",
|
|
@@ -2182,9 +2278,7 @@ var TypeFilter = ({ types, initialSelectedTypes = [], onChange }) => {
|
|
|
2182
2278
|
Checkbox__default.default,
|
|
2183
2279
|
{
|
|
2184
2280
|
checked: selectedTypes.includes(type.id),
|
|
2185
|
-
onChange: () => handleTypeChange(type.id)
|
|
2186
|
-
disabled: type.id === "event",
|
|
2187
|
-
title: type.id === "event" ? "Coming soon! Currently only player and table search are supported." : ""
|
|
2281
|
+
onChange: () => handleTypeChange(type.id)
|
|
2188
2282
|
}
|
|
2189
2283
|
),
|
|
2190
2284
|
label: type.label
|
|
@@ -2199,10 +2293,13 @@ var FiltersContainer = ({
|
|
|
2199
2293
|
initialSelectedTags,
|
|
2200
2294
|
initialTextSearch,
|
|
2201
2295
|
includeExpiredTables = false,
|
|
2296
|
+
distance,
|
|
2297
|
+
distances,
|
|
2202
2298
|
onTypeChange,
|
|
2203
2299
|
onTagChange,
|
|
2204
2300
|
onTextSearchChange,
|
|
2205
2301
|
onIncludeExpiredTablesChange,
|
|
2302
|
+
onDistanceChange,
|
|
2206
2303
|
onSubmit,
|
|
2207
2304
|
tags,
|
|
2208
2305
|
searchTypes
|
|
@@ -2217,7 +2314,10 @@ var FiltersContainer = ({
|
|
|
2217
2314
|
onTypeChange(types);
|
|
2218
2315
|
}
|
|
2219
2316
|
};
|
|
2220
|
-
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: [
|
|
2221
2321
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2222
2322
|
TypeFilter_default,
|
|
2223
2323
|
{
|
|
@@ -2227,6 +2327,16 @@ var FiltersContainer = ({
|
|
|
2227
2327
|
}
|
|
2228
2328
|
),
|
|
2229
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 } }),
|
|
2230
2340
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2231
2341
|
TextSearchCard_default,
|
|
2232
2342
|
{
|
|
@@ -2257,13 +2367,13 @@ var FiltersContainer = ({
|
|
|
2257
2367
|
/* @__PURE__ */ jsxRuntime.jsx(Divider3__default.default, { sx: { my: 2 } })
|
|
2258
2368
|
] }),
|
|
2259
2369
|
/* @__PURE__ */ jsxRuntime.jsx(Box2__default.default, { sx: { display: "flex", justifyContent: "center", mt: 2 }, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
2260
|
-
|
|
2370
|
+
Button8__default.default,
|
|
2261
2371
|
{
|
|
2372
|
+
type: "submit",
|
|
2262
2373
|
variant: "contained",
|
|
2263
2374
|
color: "primary",
|
|
2264
2375
|
size: "large",
|
|
2265
2376
|
startIcon: /* @__PURE__ */ jsxRuntime.jsx(SearchIcon__default.default, {}),
|
|
2266
|
-
onClick: onSubmit,
|
|
2267
2377
|
sx: {
|
|
2268
2378
|
width: "100%",
|
|
2269
2379
|
py: 1.5,
|
|
@@ -2323,11 +2433,13 @@ function SearchPageLayout({
|
|
|
2323
2433
|
query: "",
|
|
2324
2434
|
titleOnly: false
|
|
2325
2435
|
},
|
|
2326
|
-
|
|
2436
|
+
initialDistance,
|
|
2437
|
+
distances,
|
|
2327
2438
|
onTypeChange,
|
|
2328
2439
|
onTagChange,
|
|
2329
2440
|
onTextSearchChange,
|
|
2330
2441
|
onIncludeExpiredTablesChange,
|
|
2442
|
+
onDistanceChange,
|
|
2331
2443
|
onSubmit,
|
|
2332
2444
|
onResultClick,
|
|
2333
2445
|
onPacketChange,
|
|
@@ -2335,14 +2447,16 @@ function SearchPageLayout({
|
|
|
2335
2447
|
validTags,
|
|
2336
2448
|
allTags,
|
|
2337
2449
|
searchTypes,
|
|
2338
|
-
isLoading = false
|
|
2450
|
+
isLoading = false,
|
|
2451
|
+
eventTagId
|
|
2339
2452
|
}) {
|
|
2340
2453
|
const theme = material.useTheme();
|
|
2341
2454
|
const isMobile = material.useMediaQuery(theme.breakpoints.down("md"));
|
|
2342
2455
|
const [selectedTypes, setSelectedTypes] = React7.useState(initialSelectedTypes);
|
|
2343
2456
|
const [selectedTags, setSelectedTags] = React7.useState(initialSelectedTags);
|
|
2344
2457
|
const [textSearch, setTextSearch] = React7.useState(initialTextSearch);
|
|
2345
|
-
const [includeExpiredTables, setIncludeExpiredTables] = React7.useState(
|
|
2458
|
+
const [includeExpiredTables, setIncludeExpiredTables] = React7.useState(false);
|
|
2459
|
+
const [distance, setDistance] = React7.useState(initialDistance);
|
|
2346
2460
|
React7.useEffect(() => {
|
|
2347
2461
|
setSelectedTypes(initialSelectedTypes);
|
|
2348
2462
|
}, [initialSelectedTypes]);
|
|
@@ -2353,8 +2467,8 @@ function SearchPageLayout({
|
|
|
2353
2467
|
setTextSearch(initialTextSearch);
|
|
2354
2468
|
}, [initialTextSearch]);
|
|
2355
2469
|
React7.useEffect(() => {
|
|
2356
|
-
|
|
2357
|
-
}, [
|
|
2470
|
+
setDistance(initialDistance);
|
|
2471
|
+
}, [initialDistance]);
|
|
2358
2472
|
const handleTypeChange = (types) => {
|
|
2359
2473
|
setSelectedTypes(types);
|
|
2360
2474
|
if (onTypeChange) onTypeChange(types);
|
|
@@ -2371,12 +2485,17 @@ function SearchPageLayout({
|
|
|
2371
2485
|
setIncludeExpiredTables(include);
|
|
2372
2486
|
if (onIncludeExpiredTablesChange) onIncludeExpiredTablesChange(include);
|
|
2373
2487
|
};
|
|
2488
|
+
const handleDistanceChange = (dist) => {
|
|
2489
|
+
setDistance(dist);
|
|
2490
|
+
if (onDistanceChange) onDistanceChange(dist);
|
|
2491
|
+
};
|
|
2374
2492
|
const handleSubmit = () => {
|
|
2375
2493
|
const currentCriteria = {
|
|
2376
2494
|
selectedTypes,
|
|
2377
2495
|
selectedTags,
|
|
2378
2496
|
textSearch,
|
|
2379
|
-
includeExpiredTables
|
|
2497
|
+
includeExpiredTables,
|
|
2498
|
+
distance
|
|
2380
2499
|
};
|
|
2381
2500
|
if (onSubmit) {
|
|
2382
2501
|
onSubmit(currentCriteria);
|
|
@@ -2395,8 +2514,8 @@ function SearchPageLayout({
|
|
|
2395
2514
|
}
|
|
2396
2515
|
}
|
|
2397
2516
|
) }),
|
|
2398
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
2399
|
-
/* @__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: [
|
|
2400
2519
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2401
2520
|
CardHeader4__default.default,
|
|
2402
2521
|
{
|
|
@@ -2416,17 +2535,20 @@ function SearchPageLayout({
|
|
|
2416
2535
|
initialSelectedTags: selectedTags,
|
|
2417
2536
|
initialTextSearch: textSearch,
|
|
2418
2537
|
includeExpiredTables,
|
|
2538
|
+
distance,
|
|
2539
|
+
distances,
|
|
2419
2540
|
onTypeChange: handleTypeChange,
|
|
2420
2541
|
onTagChange: handleTagChange,
|
|
2421
2542
|
onTextSearchChange: handleTextSearchChange,
|
|
2422
2543
|
onIncludeExpiredTablesChange: handleIncludeExpiredTablesChange,
|
|
2544
|
+
onDistanceChange: handleDistanceChange,
|
|
2423
2545
|
onSubmit: handleSubmit,
|
|
2424
2546
|
tags: validTags,
|
|
2425
2547
|
searchTypes
|
|
2426
2548
|
}
|
|
2427
2549
|
) })
|
|
2428
2550
|
] }) }),
|
|
2429
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2551
|
+
/* @__PURE__ */ jsxRuntime.jsx(Grid10__default.default, { size: { xs: 12, md: 9 }, children: /* @__PURE__ */ jsxRuntime.jsxs(Card10__default.default, { children: [
|
|
2430
2552
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2431
2553
|
CardHeader4__default.default,
|
|
2432
2554
|
{
|
|
@@ -2446,13 +2568,255 @@ function SearchPageLayout({
|
|
|
2446
2568
|
pagination,
|
|
2447
2569
|
onPacketChange,
|
|
2448
2570
|
onResultClick,
|
|
2449
|
-
tags: allTags
|
|
2571
|
+
tags: allTags,
|
|
2572
|
+
showEventTag: true,
|
|
2573
|
+
eventTagId
|
|
2450
2574
|
}
|
|
2451
2575
|
) })
|
|
2452
2576
|
] }) })
|
|
2453
2577
|
] })
|
|
2454
2578
|
] });
|
|
2455
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
|
+
}
|
|
2456
2820
|
var GameTableContext = React7__default.default.createContext(void 0);
|
|
2457
2821
|
function GameTableProvider(props) {
|
|
2458
2822
|
return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: props.children });
|
|
@@ -2465,76 +2829,206 @@ function useGameTableContext() {
|
|
|
2465
2829
|
throw new Error("useGameTableContext is deprecated in the package build. Pass table data through props instead.");
|
|
2466
2830
|
}
|
|
2467
2831
|
var ModalContext = React7.createContext({
|
|
2468
|
-
showModal: (
|
|
2832
|
+
showModal: () => {
|
|
2469
2833
|
},
|
|
2470
2834
|
hideModal: () => {
|
|
2471
2835
|
}
|
|
2472
2836
|
});
|
|
2473
2837
|
var useModal = () => React7.useContext(ModalContext);
|
|
2474
|
-
var
|
|
2475
|
-
const
|
|
2476
|
-
const previouslyFocusedElement = React7.useRef(null);
|
|
2838
|
+
var AutoResizingTextarea = (props) => {
|
|
2839
|
+
const { isInEditMode, onChange, textareaRef, value } = props;
|
|
2477
2840
|
React7.useEffect(() => {
|
|
2478
|
-
|
|
2479
|
-
|
|
2480
|
-
|
|
2481
|
-
|
|
2841
|
+
if (isInEditMode && textareaRef.current) {
|
|
2842
|
+
const textarea = textareaRef.current;
|
|
2843
|
+
textarea.style.height = "auto";
|
|
2844
|
+
textarea.style.height = `${textarea.scrollHeight}px`;
|
|
2482
2845
|
}
|
|
2483
|
-
|
|
2484
|
-
|
|
2485
|
-
|
|
2486
|
-
|
|
2487
|
-
|
|
2488
|
-
|
|
2489
|
-
|
|
2490
|
-
|
|
2491
|
-
|
|
2492
|
-
|
|
2493
|
-
|
|
2494
|
-
|
|
2495
|
-
'button, [tabindex]:not([tabindex="-1"])'
|
|
2496
|
-
);
|
|
2497
|
-
if (!focusableElements || focusableElements.length === 0) return;
|
|
2498
|
-
const first = focusableElements[0];
|
|
2499
|
-
const last = focusableElements[focusableElements.length - 1];
|
|
2500
|
-
if (e.shiftKey) {
|
|
2501
|
-
if (document.activeElement === first) {
|
|
2502
|
-
e.preventDefault();
|
|
2503
|
-
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%"
|
|
2504
2858
|
}
|
|
2505
|
-
}
|
|
2506
|
-
|
|
2507
|
-
|
|
2508
|
-
|
|
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
|
+
}
|
|
2509
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();
|
|
2510
2949
|
}
|
|
2511
2950
|
};
|
|
2512
|
-
|
|
2513
|
-
|
|
2951
|
+
const handleClose = (event, reason) => {
|
|
2952
|
+
if (forceAgreement) return;
|
|
2953
|
+
if (onClose) onClose();
|
|
2954
|
+
};
|
|
2955
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
2956
|
+
material.Dialog,
|
|
2514
2957
|
{
|
|
2515
|
-
|
|
2516
|
-
|
|
2517
|
-
|
|
2518
|
-
|
|
2519
|
-
|
|
2520
|
-
children:
|
|
2521
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2522
|
-
/* @__PURE__ */ jsxRuntime.
|
|
2523
|
-
|
|
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
|
+
]
|
|
2524
3028
|
}
|
|
2525
3029
|
);
|
|
2526
3030
|
};
|
|
2527
|
-
var
|
|
2528
|
-
var ModalProvider = ({ children }) => {
|
|
2529
|
-
const [modalContent, setModalContent] = React7.useState(null);
|
|
2530
|
-
const showModal = (content) => setModalContent(content);
|
|
2531
|
-
const hideModal = () => setModalContent(null);
|
|
2532
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(ModalContext.Provider, { value: { showModal, hideModal }, children: [
|
|
2533
|
-
children,
|
|
2534
|
-
modalContent && /* @__PURE__ */ jsxRuntime.jsx(Modal_default, { onClose: hideModal, children: modalContent })
|
|
2535
|
-
] });
|
|
2536
|
-
};
|
|
2537
|
-
var ModalProvider_default = ModalProvider;
|
|
3031
|
+
var UserAgreementModal_default = UserAgreementModal;
|
|
2538
3032
|
var PlayerHighlightsCard = function(props) {
|
|
2539
3033
|
const {
|
|
2540
3034
|
allTags,
|
|
@@ -2546,16 +3040,16 @@ var PlayerHighlightsCard = function(props) {
|
|
|
2546
3040
|
removeFromTable
|
|
2547
3041
|
} = props;
|
|
2548
3042
|
return /* @__PURE__ */ jsxRuntime.jsx(material.Card, { elevation: 3, sx: { backgroundColor: canEdit ? "#fffbea" : "#f5f9fa", marginBottom: "6px" }, children: /* @__PURE__ */ jsxRuntime.jsxs(material.CardContent, { children: [
|
|
2549
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
2550
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
2551
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2552
|
-
/* @__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 }) })
|
|
2553
3047
|
] }),
|
|
2554
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3048
|
+
/* @__PURE__ */ jsxRuntime.jsx(Grid10__default.default, { children: renderTagsFromIds(player.tags, allTags) })
|
|
2555
3049
|
] }),
|
|
2556
|
-
canEdit && /* @__PURE__ */ jsxRuntime.jsxs(
|
|
2557
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2558
|
-
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: () => {
|
|
2559
3053
|
handleAssignToDungeonMaster(player);
|
|
2560
3054
|
removeFromTable(player);
|
|
2561
3055
|
}, children: /* @__PURE__ */ jsxRuntime.jsx("p", { children: "Assign to DungeonMaster" }) })
|
|
@@ -2565,11 +3059,11 @@ var PlayerHighlightsCard = function(props) {
|
|
|
2565
3059
|
var DMHighlightsCard = function({ canEdit, player, allTags }) {
|
|
2566
3060
|
return /* @__PURE__ */ jsxRuntime.jsxs(material.Card, { elevation: 3, sx: { backgroundColor: "#f5f9fa", marginBottom: "6px" }, children: [
|
|
2567
3061
|
/* @__PURE__ */ jsxRuntime.jsx(material.CardHeader, { slotProps: { title: { variant: "h4" } }, title: "Game Master" }),
|
|
2568
|
-
/* @__PURE__ */ jsxRuntime.jsx(material.CardContent, { sx: { backgroundColor: canEdit ? "#fffbea" : "inherit" }, children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
2569
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2570
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
2571
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2572
|
-
/* @__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) }),
|
|
2573
3067
|
/* @__PURE__ */ jsxRuntime.jsx(material.Typography, { children: player.description })
|
|
2574
3068
|
] })
|
|
2575
3069
|
] }) })
|
|
@@ -2598,12 +3092,11 @@ function TableActionsBar(props) {
|
|
|
2598
3092
|
if (waitlistPlayers.length === 0) {
|
|
2599
3093
|
return /* @__PURE__ */ jsxRuntime.jsx("p", { children: "Waitlist is empty!" });
|
|
2600
3094
|
}
|
|
2601
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
2602
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2603
|
-
/* @__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(
|
|
2604
3097
|
"li",
|
|
2605
3098
|
{
|
|
2606
|
-
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`,
|
|
2607
3100
|
onClick: () => canMovePlayersToTable ? onPromoteWaitlistPlayer == null ? void 0 : onPromoteWaitlistPlayer(player.id) : void 0,
|
|
2608
3101
|
tabIndex: 0,
|
|
2609
3102
|
children: [
|
|
@@ -2612,7 +3105,7 @@ function TableActionsBar(props) {
|
|
|
2612
3105
|
{
|
|
2613
3106
|
alt: player.username + "'s profile pic",
|
|
2614
3107
|
height: 64,
|
|
2615
|
-
src: player.miniPic ||
|
|
3108
|
+
src: player.miniPic || DEFAULT_PROFILE_PIC,
|
|
2616
3109
|
width: 64
|
|
2617
3110
|
}
|
|
2618
3111
|
),
|
|
@@ -2621,7 +3114,7 @@ function TableActionsBar(props) {
|
|
|
2621
3114
|
},
|
|
2622
3115
|
player.id
|
|
2623
3116
|
)) }),
|
|
2624
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3117
|
+
/* @__PURE__ */ jsxRuntime.jsx(DialogActions3__default.default, { children: /* @__PURE__ */ jsxRuntime.jsx(Button8__default.default, { onClick: () => hideModal(), children: "Close" }) })
|
|
2625
3118
|
] });
|
|
2626
3119
|
};
|
|
2627
3120
|
return /* @__PURE__ */ jsxRuntime.jsxs(material.Grid, { container: true, direction: "column", spacing: 1, children: [
|
|
@@ -2632,33 +3125,45 @@ function TableActionsBar(props) {
|
|
|
2632
3125
|
slots
|
|
2633
3126
|
] }) }),
|
|
2634
3127
|
/* @__PURE__ */ jsxRuntime.jsxs(material.Grid, { container: true, direction: "row", children: [
|
|
2635
|
-
!isOwner && !isPlayer && !isDM && !onWaitlist && /* @__PURE__ */ jsxRuntime.jsx(
|
|
2636
|
-
!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" }),
|
|
2637
3130
|
canEditTable ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
2638
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3131
|
+
/* @__PURE__ */ jsxRuntime.jsx(Button8__default.default, { onClick: () => onEditModeChange(true), sx: buttonStyle, endIcon: /* @__PURE__ */ jsxRuntime.jsx(EditIcon3__default.default, {}), children: "Edit" }),
|
|
2639
3132
|
canViewWaitlist ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
2640
|
-
|
|
3133
|
+
Button8__default.default,
|
|
2641
3134
|
{
|
|
2642
3135
|
endIcon: /* @__PURE__ */ jsxRuntime.jsx(ListIcon__default.default, {}),
|
|
2643
|
-
onClick: () => showModal(renderPlayerWaitlistModalContent(false)),
|
|
3136
|
+
onClick: () => showModal(renderPlayerWaitlistModalContent(false), "Waitlist Players:"),
|
|
2644
3137
|
sx: buttonStyle,
|
|
2645
3138
|
children: "View Waitlist"
|
|
2646
3139
|
}
|
|
2647
3140
|
) : null
|
|
2648
3141
|
] }) : canSaveTable ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
2649
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2650
|
-
/* @__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" }),
|
|
2651
3144
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2652
|
-
|
|
3145
|
+
Button8__default.default,
|
|
2653
3146
|
{
|
|
2654
3147
|
endIcon: /* @__PURE__ */ jsxRuntime.jsx(ListIcon__default.default, {}),
|
|
2655
|
-
onClick: () => showModal(renderPlayerWaitlistModalContent(true)),
|
|
3148
|
+
onClick: () => showModal(renderPlayerWaitlistModalContent(true), "Waitlist Players:"),
|
|
2656
3149
|
sx: buttonStyle,
|
|
2657
3150
|
children: "Edit Waitlist"
|
|
2658
3151
|
}
|
|
2659
3152
|
)
|
|
2660
3153
|
] }) : null,
|
|
2661
|
-
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
|
+
)
|
|
2662
3167
|
] })
|
|
2663
3168
|
] });
|
|
2664
3169
|
}
|
|
@@ -2668,165 +3173,82 @@ var buttonStyle = {
|
|
|
2668
3173
|
color: "white",
|
|
2669
3174
|
borderRadius: "5px"
|
|
2670
3175
|
};
|
|
2671
|
-
var AutoResizingTextarea = (props) => {
|
|
2672
|
-
const { isInEditMode, onChange, textareaRef, value } = props;
|
|
2673
|
-
React7.useEffect(() => {
|
|
2674
|
-
if (isInEditMode && textareaRef.current) {
|
|
2675
|
-
const textarea = textareaRef.current;
|
|
2676
|
-
textarea.style.height = "auto";
|
|
2677
|
-
textarea.style.height = `${textarea.scrollHeight}px`;
|
|
2678
|
-
}
|
|
2679
|
-
}, [isInEditMode, textareaRef, value]);
|
|
2680
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
2681
|
-
"textarea",
|
|
2682
|
-
{
|
|
2683
|
-
ref: textareaRef,
|
|
2684
|
-
value,
|
|
2685
|
-
onChange: (e) => onChange(e.target.value),
|
|
2686
|
-
style: {
|
|
2687
|
-
backgroundColor: "#fffbea",
|
|
2688
|
-
overflow: "hidden",
|
|
2689
|
-
resize: "none",
|
|
2690
|
-
width: "100%"
|
|
2691
|
-
}
|
|
2692
|
-
}
|
|
2693
|
-
);
|
|
2694
|
-
};
|
|
2695
|
-
var AutoResizingTextarea_default = AutoResizingTextarea;
|
|
2696
|
-
var NextGameCountdown = ({ nextGameTime }) => {
|
|
2697
|
-
const [timeLeft, setTimeLeft] = React7.useState("");
|
|
2698
|
-
React7.useEffect(() => {
|
|
2699
|
-
if (!nextGameTime) return;
|
|
2700
|
-
const timer = setInterval(() => {
|
|
2701
|
-
const now = (/* @__PURE__ */ new Date()).getTime();
|
|
2702
|
-
const distance = new Date(nextGameTime).getTime() - now;
|
|
2703
|
-
if (distance < 0) {
|
|
2704
|
-
clearInterval(timer);
|
|
2705
|
-
setTimeLeft("Started");
|
|
2706
|
-
return;
|
|
2707
|
-
}
|
|
2708
|
-
const days = Math.floor(distance / (1e3 * 60 * 60 * 24));
|
|
2709
|
-
const hours = Math.floor(distance % (1e3 * 60 * 60 * 24) / (1e3 * 60 * 60));
|
|
2710
|
-
const minutes = Math.floor(distance % (1e3 * 60 * 60) / (1e3 * 60));
|
|
2711
|
-
const seconds = Math.floor(distance % (1e3 * 60) / 1e3);
|
|
2712
|
-
let timeString = "";
|
|
2713
|
-
if (days > 0) timeString += `${days}d `;
|
|
2714
|
-
if (hours > 0 || days > 0) timeString += `${hours}h `;
|
|
2715
|
-
timeString += `${minutes}m ${seconds}s`;
|
|
2716
|
-
setTimeLeft(timeString);
|
|
2717
|
-
}, 1e3);
|
|
2718
|
-
return () => clearInterval(timer);
|
|
2719
|
-
}, [nextGameTime]);
|
|
2720
|
-
if (!nextGameTime) return null;
|
|
2721
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(material.Typography, { variant: "body2", color: "primary", sx: { fontWeight: "bold" }, children: [
|
|
2722
|
-
"Next Game: ",
|
|
2723
|
-
timeLeft
|
|
2724
|
-
] });
|
|
2725
|
-
};
|
|
2726
|
-
function TagEditor({
|
|
2727
|
-
title = "Tags",
|
|
2728
|
-
selectedTags,
|
|
2729
|
-
possibleTags,
|
|
2730
|
-
onToggleTag
|
|
2731
|
-
}) {
|
|
2732
|
-
const [inputValue, setInputValue] = React7.useState("");
|
|
2733
|
-
const selectedIds = React7.useMemo(() => selectedTags.map((tag) => tag.id), [selectedTags]);
|
|
2734
|
-
const options = React7.useMemo(
|
|
2735
|
-
() => possibleTags.map((tag) => ({ value: tag.id, label: tag.label })),
|
|
2736
|
-
[possibleTags]
|
|
2737
|
-
);
|
|
2738
|
-
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: [
|
|
2739
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2740
|
-
CardHeader4__default.default,
|
|
2741
|
-
{
|
|
2742
|
-
title,
|
|
2743
|
-
style: {
|
|
2744
|
-
background: "linear-gradient(135deg, rgba(25, 118, 210, 0.8), rgba(25, 118, 210, 1))",
|
|
2745
|
-
color: "#FFFFFF",
|
|
2746
|
-
fontSize: "1.5rem",
|
|
2747
|
-
textShadow: "0px 3px 6px rgba(0, 0, 0, 0.5)"
|
|
2748
|
-
}
|
|
2749
|
-
}
|
|
2750
|
-
),
|
|
2751
|
-
/* @__PURE__ */ jsxRuntime.jsxs(CardContent10__default.default, { children: [
|
|
2752
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-2 flex flex-wrap gap-2", children: selectedTags.map((tag) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
2753
|
-
Chip,
|
|
2754
|
-
{
|
|
2755
|
-
tag,
|
|
2756
|
-
removeCallback: () => onToggleTag(tag.id)
|
|
2757
|
-
},
|
|
2758
|
-
tag.id
|
|
2759
|
-
)) }),
|
|
2760
|
-
/* @__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(
|
|
2761
|
-
Autocomplete__default.default,
|
|
2762
|
-
{
|
|
2763
|
-
options,
|
|
2764
|
-
filterOptions: (availableOptions, state) => availableOptions.filter(
|
|
2765
|
-
(option) => !selectedIds.includes(option.value) && option.label.toLowerCase().includes(state.inputValue.toLowerCase())
|
|
2766
|
-
).slice(0, 3),
|
|
2767
|
-
value: null,
|
|
2768
|
-
inputValue,
|
|
2769
|
-
onInputChange: (event, newInputValue) => {
|
|
2770
|
-
if (event && event.type === "change") {
|
|
2771
|
-
setInputValue(newInputValue);
|
|
2772
|
-
}
|
|
2773
|
-
},
|
|
2774
|
-
onChange: (event, newValue) => {
|
|
2775
|
-
if (newValue) {
|
|
2776
|
-
onToggleTag(newValue.value);
|
|
2777
|
-
}
|
|
2778
|
-
setInputValue("");
|
|
2779
|
-
},
|
|
2780
|
-
slots: { popper: CustomPopper3 },
|
|
2781
|
-
renderInput: (params) => /* @__PURE__ */ jsxRuntime.jsx(TextField4__default.default, { ...params, label: "Select Tags" })
|
|
2782
|
-
},
|
|
2783
|
-
selectedIds.join("-")
|
|
2784
|
-
) }) })
|
|
2785
|
-
] })
|
|
2786
|
-
] }) }) });
|
|
2787
|
-
}
|
|
2788
|
-
var CustomPopper3 = (props) => {
|
|
2789
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
2790
|
-
Popper__default.default,
|
|
2791
|
-
{
|
|
2792
|
-
...props,
|
|
2793
|
-
modifiers: [
|
|
2794
|
-
{
|
|
2795
|
-
name: "preventOverflow",
|
|
2796
|
-
options: { boundary: "viewport" }
|
|
2797
|
-
},
|
|
2798
|
-
{
|
|
2799
|
-
name: "offset",
|
|
2800
|
-
options: { offset: [0, -10] }
|
|
2801
|
-
}
|
|
2802
|
-
],
|
|
2803
|
-
placement: "top-start"
|
|
2804
|
-
}
|
|
2805
|
-
);
|
|
2806
|
-
};
|
|
2807
3176
|
function TablePageLayout(props) {
|
|
2808
3177
|
var _a;
|
|
2809
|
-
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;
|
|
2810
3181
|
const textAreaRef = React7.useRef(null);
|
|
2811
3182
|
const [isTableInEditMode, setIsTableInEditMode] = React7.useState(false);
|
|
3183
|
+
const [currentTitle, setCurrentTitle] = React7.useState(table.title);
|
|
3184
|
+
const [currentSubtitle, setCurrentSubtitle] = React7.useState(table.shortDescription);
|
|
2812
3185
|
const [currentDescription, setCurrentDescription] = React7.useState(table.description);
|
|
2813
3186
|
const [currentDungeonMaster, setCurrentDungeonMaster] = React7.useState(dungeonMaster);
|
|
2814
3187
|
const [currentPlayers, setCurrentPlayers] = React7.useState(players);
|
|
2815
|
-
const [currentShortDescription, setCurrentShortDescription] = React7.useState(table.shortDescription);
|
|
2816
|
-
const [currentTitle, setCurrentTitle] = React7.useState(table.title);
|
|
2817
3188
|
const [currentWaitlistPlayers, setCurrentWaitlistPlayers] = React7.useState(waitlistPlayers);
|
|
2818
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
|
+
};
|
|
2819
3246
|
React7.useEffect(() => {
|
|
2820
|
-
|
|
2821
|
-
|
|
2822
|
-
|
|
2823
|
-
|
|
2824
|
-
|
|
2825
|
-
setCurrentTitle(table.title);
|
|
2826
|
-
setCurrentWaitlistPlayers(waitlistPlayers);
|
|
2827
|
-
setCurrentTagIds((_a2 = table.tags) != null ? _a2 : []);
|
|
2828
|
-
}, [dungeonMaster, players, table, waitlistPlayers]);
|
|
2829
|
-
const currentTags = React7.useMemo(
|
|
3247
|
+
if (startWithEditTitle) {
|
|
3248
|
+
editTableDetails();
|
|
3249
|
+
}
|
|
3250
|
+
});
|
|
3251
|
+
React7.useMemo(
|
|
2830
3252
|
() => allTags.filter((tag) => currentTagIds.includes(tag.id)),
|
|
2831
3253
|
[allTags, currentTagIds]
|
|
2832
3254
|
);
|
|
@@ -2846,37 +3268,17 @@ function TablePageLayout(props) {
|
|
|
2846
3268
|
return prevWaitlist.filter((player) => player.id !== playerIdToPromote);
|
|
2847
3269
|
});
|
|
2848
3270
|
};
|
|
2849
|
-
const handleToggleTag = (tagId) => {
|
|
2850
|
-
setCurrentTagIds(
|
|
2851
|
-
(prevState) => prevState.includes(tagId) ? prevState.filter((id) => id !== tagId) : [...prevState, tagId]
|
|
2852
|
-
);
|
|
2853
|
-
};
|
|
2854
|
-
const handleSaveTable = () => {
|
|
2855
|
-
const nextDraft = {
|
|
2856
|
-
...table,
|
|
2857
|
-
description: currentDescription,
|
|
2858
|
-
dungeonMaster: String(currentDungeonMaster.id),
|
|
2859
|
-
players: currentPlayers.map((player) => player.id),
|
|
2860
|
-
shortDescription: currentShortDescription,
|
|
2861
|
-
tags: currentTagIds,
|
|
2862
|
-
title: currentTitle,
|
|
2863
|
-
waitlist: currentWaitlistPlayers.map((player) => player.id)
|
|
2864
|
-
};
|
|
2865
|
-
void (onSaveDraft == null ? void 0 : onSaveDraft(nextDraft));
|
|
2866
|
-
setIsTableInEditMode(false);
|
|
2867
|
-
};
|
|
2868
3271
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
2869
3272
|
material.Card,
|
|
2870
3273
|
{
|
|
2871
3274
|
sx: {
|
|
2872
3275
|
backgroundColor: isTableInEditMode ? "lightsalmon" : "white",
|
|
2873
|
-
borderRadius: "5%",
|
|
2874
3276
|
p: 2,
|
|
2875
3277
|
boxShadow: "0px 8px 15px rgba(25, 118, 210, 0.3)"
|
|
2876
3278
|
},
|
|
2877
|
-
children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
3279
|
+
children: /* @__PURE__ */ jsxRuntime.jsxs(Grid10__default.default, { container: true, direction: "column", children: [
|
|
2878
3280
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
2879
|
-
|
|
3281
|
+
Grid10__default.default,
|
|
2880
3282
|
{
|
|
2881
3283
|
container: true,
|
|
2882
3284
|
direction: "column",
|
|
@@ -2889,39 +3291,49 @@ function TablePageLayout(props) {
|
|
|
2889
3291
|
textShadow: "4px 4px 6px rgba(0, 0, 0, 0.5)"
|
|
2890
3292
|
},
|
|
2891
3293
|
children: [
|
|
2892
|
-
/* @__PURE__ */ jsxRuntime.jsx(material.Box, { children:
|
|
2893
|
-
|
|
2894
|
-
{
|
|
2895
|
-
onChange: (e) => setCurrentTitle(e.target.value),
|
|
2896
|
-
style: { backgroundColor: "#fffbea" },
|
|
2897
|
-
tabIndex: 0,
|
|
2898
|
-
type: "text",
|
|
2899
|
-
value: currentTitle
|
|
2900
|
-
}
|
|
2901
|
-
) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
2902
|
-
material.CardHeader,
|
|
3294
|
+
/* @__PURE__ */ jsxRuntime.jsx(material.Box, { children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
3295
|
+
material.Box,
|
|
2903
3296
|
{
|
|
2904
|
-
|
|
2905
|
-
sx: {
|
|
2906
|
-
|
|
2907
|
-
|
|
2908
|
-
|
|
2909
|
-
|
|
2910
|
-
|
|
2911
|
-
|
|
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
|
+
]
|
|
2912
3316
|
}
|
|
2913
3317
|
) }),
|
|
2914
|
-
|
|
2915
|
-
|
|
3318
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
3319
|
+
material.Box,
|
|
2916
3320
|
{
|
|
2917
|
-
|
|
2918
|
-
|
|
2919
|
-
|
|
2920
|
-
|
|
2921
|
-
|
|
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
|
+
]
|
|
2922
3334
|
}
|
|
2923
|
-
)
|
|
2924
|
-
/* @__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) }),
|
|
2925
3337
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2926
3338
|
TableActionsBar,
|
|
2927
3339
|
{
|
|
@@ -2941,8 +3353,8 @@ function TablePageLayout(props) {
|
|
|
2941
3353
|
]
|
|
2942
3354
|
}
|
|
2943
3355
|
),
|
|
2944
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
2945
|
-
/* @__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(
|
|
2946
3358
|
AutoResizingTextarea_default,
|
|
2947
3359
|
{
|
|
2948
3360
|
isInEditMode: isTableInEditMode,
|
|
@@ -2951,7 +3363,7 @@ function TablePageLayout(props) {
|
|
|
2951
3363
|
value: currentDescription
|
|
2952
3364
|
}
|
|
2953
3365
|
) : /* @__PURE__ */ jsxRuntime.jsx(material.Typography, { sx: { whiteSpace: "pre-wrap" }, children: currentDescription }) }) }) }),
|
|
2954
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
3366
|
+
/* @__PURE__ */ jsxRuntime.jsxs(Grid10__default.default, { size: { xs: 12, md: 4 }, children: [
|
|
2955
3367
|
/* @__PURE__ */ jsxRuntime.jsx(DMHighlightsCard, { canEdit: isTableInEditMode, player: currentDungeonMaster, allTags }),
|
|
2956
3368
|
/* @__PURE__ */ jsxRuntime.jsxs(material.Card, { sx: { height: "100%" }, children: [
|
|
2957
3369
|
/* @__PURE__ */ jsxRuntime.jsx(material.CardHeader, { slotProps: { title: { variant: "h4" } }, title: "Players: " }),
|
|
@@ -2974,36 +3386,85 @@ function TablePageLayout(props) {
|
|
|
2974
3386
|
}
|
|
2975
3387
|
);
|
|
2976
3388
|
}
|
|
2977
|
-
var renderTags = function(tags, allTags) {
|
|
3389
|
+
var renderTags = function(tags, allTags, canEdit, eventTagId) {
|
|
2978
3390
|
if (!tags || !allTags) {
|
|
2979
3391
|
return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, {});
|
|
2980
3392
|
}
|
|
2981
|
-
return /* @__PURE__ */ jsxRuntime.
|
|
2982
|
-
|
|
2983
|
-
|
|
2984
|
-
|
|
2985
|
-
|
|
2986
|
-
|
|
2987
|
-
|
|
2988
|
-
|
|
2989
|
-
|
|
2990
|
-
|
|
2991
|
-
|
|
2992
|
-
|
|
2993
|
-
|
|
2994
|
-
|
|
2995
|
-
|
|
2996
|
-
|
|
2997
|
-
|
|
2998
|
-
|
|
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
|
+
] });
|
|
2999
3411
|
};
|
|
3000
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;
|
|
3001
3460
|
|
|
3002
3461
|
exports.AutoResizingTextarea = AutoResizingTextarea_default;
|
|
3003
3462
|
exports.BaseSearchResultCard = BaseSearchResultCard_default;
|
|
3004
3463
|
exports.CANDIDATE_TIMEZONES = CANDIDATE_TIMEZONES;
|
|
3005
3464
|
exports.Chip = Chip;
|
|
3006
3465
|
exports.DMHighlightsCard = DMHighlightsCard;
|
|
3466
|
+
exports.DistanceFilter = DistanceFilter_default;
|
|
3467
|
+
exports.EditTableDetailsForm = EditTableDetailsForm;
|
|
3007
3468
|
exports.EventBanner = EventBanner;
|
|
3008
3469
|
exports.EventBannerEdit = EventBannerEdit;
|
|
3009
3470
|
exports.EventBasicInfo = EventBasicInfo;
|
|
@@ -3038,10 +3499,14 @@ exports.TablePageLayout = TablePageLayout_default;
|
|
|
3038
3499
|
exports.TableResultCard = TableResultCard_default;
|
|
3039
3500
|
exports.TablesScrollableList = TablesScrollableList_default;
|
|
3040
3501
|
exports.TagEditor = TagEditor;
|
|
3502
|
+
exports.TagSelector = TagSelector;
|
|
3041
3503
|
exports.TagsFilter = TagsFilter_default;
|
|
3042
3504
|
exports.TextSearchCard = TextSearchCard_default;
|
|
3043
3505
|
exports.TypeFilter = TypeFilter_default;
|
|
3506
|
+
exports.UserAgreementModal = UserAgreementModal_default;
|
|
3044
3507
|
exports.generateTagsDisplay = generateTagsDisplay;
|
|
3508
|
+
exports.getRandomTagline = getRandomTagline;
|
|
3509
|
+
exports.getRandomTitle = getRandomTitle;
|
|
3045
3510
|
exports.renderTagsFromIds = renderTagsFromIds;
|
|
3046
3511
|
exports.useEventEdit = useEventEdit;
|
|
3047
3512
|
exports.useGameTableContext = useGameTableContext;
|