@mbpockets/shared-ui 0.1.19 → 0.1.21

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.
Files changed (141) hide show
  1. package/dist/EventPage/index.cjs +209 -121
  2. package/dist/EventPage/index.cjs.map +1 -1
  3. package/dist/EventPage/index.mjs +201 -119
  4. package/dist/EventPage/index.mjs.map +1 -1
  5. package/dist/EventPage.cjs +209 -121
  6. package/dist/EventPage.cjs.map +1 -1
  7. package/dist/EventPage.mjs +201 -119
  8. package/dist/EventPage.mjs.map +1 -1
  9. package/dist/PlayerPage/index.cjs +289 -92
  10. package/dist/PlayerPage/index.cjs.map +1 -1
  11. package/dist/PlayerPage/index.d.cts +1 -1
  12. package/dist/PlayerPage/index.d.ts +1 -1
  13. package/dist/PlayerPage/index.mjs +287 -90
  14. package/dist/PlayerPage/index.mjs.map +1 -1
  15. package/dist/PlayerPage.cjs +289 -92
  16. package/dist/PlayerPage.cjs.map +1 -1
  17. package/dist/PlayerPage.d.cts +24 -6
  18. package/dist/PlayerPage.d.ts +24 -6
  19. package/dist/PlayerPage.mjs +287 -90
  20. package/dist/PlayerPage.mjs.map +1 -1
  21. package/dist/ProfilePage/index.cjs +474 -44
  22. package/dist/ProfilePage/index.cjs.map +1 -1
  23. package/dist/ProfilePage/index.d.cts +2 -1
  24. package/dist/ProfilePage/index.d.ts +2 -1
  25. package/dist/ProfilePage/index.mjs +469 -39
  26. package/dist/ProfilePage/index.mjs.map +1 -1
  27. package/dist/ProfilePage.cjs +474 -44
  28. package/dist/ProfilePage.cjs.map +1 -1
  29. package/dist/ProfilePage.d.cts +4 -10
  30. package/dist/ProfilePage.d.ts +4 -10
  31. package/dist/ProfilePage.mjs +469 -39
  32. package/dist/ProfilePage.mjs.map +1 -1
  33. package/dist/SearchPage/Filters/index.cjs +149 -43
  34. package/dist/SearchPage/Filters/index.cjs.map +1 -1
  35. package/dist/SearchPage/Filters/index.d.cts +1 -2
  36. package/dist/SearchPage/Filters/index.d.ts +1 -2
  37. package/dist/SearchPage/Filters/index.mjs +146 -42
  38. package/dist/SearchPage/Filters/index.mjs.map +1 -1
  39. package/dist/SearchPage/Filters.cjs +149 -43
  40. package/dist/SearchPage/Filters.cjs.map +1 -1
  41. package/dist/SearchPage/Filters.d.cts +38 -3
  42. package/dist/SearchPage/Filters.d.ts +38 -3
  43. package/dist/SearchPage/Filters.mjs +146 -42
  44. package/dist/SearchPage/Filters.mjs.map +1 -1
  45. package/dist/SearchPage/Results/index.cjs +139 -67
  46. package/dist/SearchPage/Results/index.cjs.map +1 -1
  47. package/dist/SearchPage/Results/index.mjs +127 -63
  48. package/dist/SearchPage/Results/index.mjs.map +1 -1
  49. package/dist/SearchPage/Results.cjs +139 -67
  50. package/dist/SearchPage/Results.cjs.map +1 -1
  51. package/dist/SearchPage/Results.d.cts +21 -12
  52. package/dist/SearchPage/Results.d.ts +21 -12
  53. package/dist/SearchPage/Results.mjs +127 -63
  54. package/dist/SearchPage/Results.mjs.map +1 -1
  55. package/dist/SearchPage/index.cjs +496 -221
  56. package/dist/SearchPage/index.cjs.map +1 -1
  57. package/dist/SearchPage/index.d.cts +1 -1
  58. package/dist/SearchPage/index.d.ts +1 -1
  59. package/dist/SearchPage/index.mjs +483 -216
  60. package/dist/SearchPage/index.mjs.map +1 -1
  61. package/dist/SearchPage.cjs +496 -221
  62. package/dist/SearchPage.cjs.map +1 -1
  63. package/dist/SearchPage.d.cts +78 -7
  64. package/dist/SearchPage.d.ts +78 -7
  65. package/dist/SearchPage.mjs +483 -216
  66. package/dist/SearchPage.mjs.map +1 -1
  67. package/dist/TablePage/index.cjs +10 -1
  68. package/dist/TablePage/index.cjs.map +1 -1
  69. package/dist/TablePage/index.d.cts +2 -2
  70. package/dist/TablePage/index.d.ts +2 -2
  71. package/dist/TablePage/index.mjs +10 -2
  72. package/dist/TablePage/index.mjs.map +1 -1
  73. package/dist/TablePage.cjs +10 -1
  74. package/dist/TablePage.cjs.map +1 -1
  75. package/dist/TablePage.d.cts +7 -2
  76. package/dist/TablePage.d.ts +7 -2
  77. package/dist/TablePage.mjs +10 -2
  78. package/dist/TablePage.mjs.map +1 -1
  79. package/dist/index.cjs +789 -331
  80. package/dist/index.cjs.map +1 -1
  81. package/dist/index.d.cts +4 -5
  82. package/dist/index.d.ts +4 -5
  83. package/dist/index.mjs +772 -324
  84. package/dist/index.mjs.map +1 -1
  85. package/dist/mocks/SearchResults.cjs +22 -15
  86. package/dist/mocks/SearchResults.cjs.map +1 -1
  87. package/dist/mocks/SearchResults.d.cts +3 -15
  88. package/dist/mocks/SearchResults.d.ts +3 -15
  89. package/dist/mocks/SearchResults.mjs +22 -15
  90. package/dist/mocks/SearchResults.mjs.map +1 -1
  91. package/dist/mocks/index.cjs +22 -15
  92. package/dist/mocks/index.cjs.map +1 -1
  93. package/dist/mocks/index.d.cts +2 -1
  94. package/dist/mocks/index.d.ts +2 -1
  95. package/dist/mocks/index.mjs +22 -15
  96. package/dist/mocks/index.mjs.map +1 -1
  97. package/dist/mocks.cjs +22 -15
  98. package/dist/mocks.cjs.map +1 -1
  99. package/dist/mocks.d.cts +2 -1
  100. package/dist/mocks.d.ts +2 -1
  101. package/dist/mocks.mjs +22 -15
  102. package/dist/mocks.mjs.map +1 -1
  103. package/dist/{common → shared}/index.cjs.map +1 -1
  104. package/dist/{common → shared}/index.d.cts +1 -1
  105. package/dist/{common → shared}/index.d.ts +1 -1
  106. package/dist/{common → shared}/index.mjs.map +1 -1
  107. package/dist/{common.cjs → shared.cjs} +2 -2
  108. package/dist/{common.cjs.map → shared.cjs.map} +1 -1
  109. package/dist/{common.css → shared.css} +1 -1
  110. package/dist/{common.mjs → shared.mjs} +2 -2
  111. package/dist/{common.mjs.map → shared.mjs.map} +1 -1
  112. package/dist/types/index.d.cts +1 -1
  113. package/dist/types/index.d.ts +1 -1
  114. package/dist/types/search.d.cts +23 -1
  115. package/dist/types/search.d.ts +23 -1
  116. package/dist/types.d.cts +1 -1
  117. package/dist/types.d.ts +1 -1
  118. package/package.json +1 -1
  119. /package/dist/{common → shared}/Modal/index.cjs +0 -0
  120. /package/dist/{common → shared}/Modal/index.cjs.map +0 -0
  121. /package/dist/{common → shared}/Modal/index.css +0 -0
  122. /package/dist/{common → shared}/Modal/index.css.map +0 -0
  123. /package/dist/{common → shared}/Modal/index.d.cts +0 -0
  124. /package/dist/{common → shared}/Modal/index.d.ts +0 -0
  125. /package/dist/{common → shared}/Modal/index.mjs +0 -0
  126. /package/dist/{common → shared}/Modal/index.mjs.map +0 -0
  127. /package/dist/{common → shared}/Modal.cjs +0 -0
  128. /package/dist/{common → shared}/Modal.cjs.map +0 -0
  129. /package/dist/{common → shared}/Modal.css +0 -0
  130. /package/dist/{common → shared}/Modal.css.map +0 -0
  131. /package/dist/{common → shared}/Modal.d.cts +0 -0
  132. /package/dist/{common → shared}/Modal.d.ts +0 -0
  133. /package/dist/{common → shared}/Modal.mjs +0 -0
  134. /package/dist/{common → shared}/Modal.mjs.map +0 -0
  135. /package/dist/{common → shared}/index.cjs +0 -0
  136. /package/dist/{common → shared}/index.css +0 -0
  137. /package/dist/{common → shared}/index.css.map +0 -0
  138. /package/dist/{common → shared}/index.mjs +0 -0
  139. /package/dist/{common.css.map → shared.css.map} +0 -0
  140. /package/dist/{common.d.cts → shared.d.cts} +0 -0
  141. /package/dist/{common.d.ts → shared.d.ts} +0 -0
package/dist/index.mjs CHANGED
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import React7, { createContext, useState, useEffect, useContext, useMemo, useRef } from 'react';
3
3
  import { jsx, Fragment, jsxs } from 'react/jsx-runtime';
4
- import { Box, Grid, TextField, Tooltip, IconButton, Button, CircularProgress, Dialog, DialogTitle, DialogContent, DialogActions, Card, CardContent, Typography, FormControl, InputLabel, Select, MenuItem, Chip as Chip$1, LinearProgress, CardMedia, useTheme, useMediaQuery, CardHeader } from '@mui/material';
4
+ import { Box, Grid, TextField, Tooltip, IconButton, Button, CircularProgress, Dialog, DialogTitle, DialogContent, DialogActions, Card, CardContent, Typography, FormControl, InputLabel, Select, MenuItem, CardMedia, CardHeader, useTheme, useMediaQuery, NoSsr } from '@mui/material';
5
5
  import DeleteIcon from '@mui/icons-material/Delete';
6
6
  import EditIcon from '@mui/icons-material/Edit';
7
7
  import AddIcon from '@mui/icons-material/Add';
@@ -9,28 +9,34 @@ import ColorizeIcon from '@mui/icons-material/Colorize';
9
9
  import CancelIcon from '@mui/icons-material/Cancel';
10
10
  import CheckCircleIcon from '@mui/icons-material/CheckCircle';
11
11
  import Box2 from '@mui/material/Box';
12
- import Grid9 from '@mui/material/Grid';
12
+ import Grid8 from '@mui/material/Grid';
13
13
  import Card10 from '@mui/material/Card';
14
14
  import CardContent10 from '@mui/material/CardContent';
15
15
  import CardHeader4 from '@mui/material/CardHeader';
16
- import Divider2 from '@mui/material/Divider';
16
+ import Divider3 from '@mui/material/Divider';
17
+ import Typography4 from '@mui/material/Typography';
18
+ import Pagination from '@mui/material/Pagination';
17
19
  import Avatar from '@mui/material/Avatar';
18
- import CasinoIcon from '@mui/icons-material/Casino';
20
+ import Chip2 from '@mui/material/Chip';
21
+ import LinearProgress from '@mui/material/LinearProgress';
22
+ import PersonIcon from '@mui/icons-material/Person';
23
+ import SupervisorAccountIcon from '@mui/icons-material/SupervisorAccount';
24
+ import TableRestaurantIcon from '@mui/icons-material/TableRestaurant';
19
25
  import CalendarTodayIcon from '@mui/icons-material/CalendarToday';
20
26
  import LocationOnIcon from '@mui/icons-material/LocationOn';
21
27
  import EventIcon from '@mui/icons-material/Event';
22
28
  import Autocomplete from '@mui/material/Autocomplete';
23
29
  import Popper from '@mui/material/Popper';
24
- import TextField3 from '@mui/material/TextField';
25
- import Typography10 from '@mui/material/Typography';
30
+ import FormControlLabel from '@mui/material/FormControlLabel';
31
+ import Checkbox from '@mui/material/Checkbox';
26
32
  import FormControl2 from '@mui/material/FormControl';
27
33
  import RadioGroup from '@mui/material/RadioGroup';
28
- import FormControlLabel from '@mui/material/FormControlLabel';
29
34
  import Radio from '@mui/material/Radio';
35
+ import TextField4 from '@mui/material/TextField';
30
36
  import FormGroup from '@mui/material/FormGroup';
31
- import Checkbox from '@mui/material/Checkbox';
32
37
  import Button7 from '@mui/material/Button';
33
38
  import SearchIcon from '@mui/icons-material/Search';
39
+ import CircularProgress3 from '@mui/material/CircularProgress';
34
40
  import Image2 from 'next/image';
35
41
  import ListIcon from '@mui/icons-material/List';
36
42
  import SaveIcon from '@mui/icons-material/Save';
@@ -478,7 +484,7 @@ function EventBasicInfo(props) {
478
484
  );
479
485
  }
480
486
  function EventBasicInfoView({ description, locationId, startingDate, endingDate, timeInfo, timezone, isOwner, onEdit }) {
481
- return /* @__PURE__ */ jsx(Grid9, { sx: { position: "relative" }, children: /* @__PURE__ */ jsx(Card, { style: {
487
+ return /* @__PURE__ */ jsx(Grid8, { sx: { position: "relative" }, children: /* @__PURE__ */ jsx(Card, { style: {
482
488
  boxShadow: "0px 4px 10px rgba(0, 0, 0, 0.1)",
483
489
  background: "linear-gradient(135deg, rgba(225, 225, 225, 1), rgba(250, 250, 250, 1))"
484
490
  }, children: /* @__PURE__ */ jsxs(CardContent, { children: [
@@ -762,7 +768,7 @@ function EventBannerView({
762
768
  }) {
763
769
  const backgroundColor = bannerColor || "linear-gradient(135deg, rgba(25,118,210,0.8), rgba(25,118,210,1))";
764
770
  return /* @__PURE__ */ jsxs(
765
- Grid9,
771
+ Grid8,
766
772
  {
767
773
  sx: {
768
774
  background: backgroundColor,
@@ -770,7 +776,7 @@ function EventBannerView({
770
776
  position: "relative"
771
777
  },
772
778
  children: [
773
- /* @__PURE__ */ jsxs(Grid9, { children: [
779
+ /* @__PURE__ */ jsxs(Grid8, { children: [
774
780
  /* @__PURE__ */ jsxs(
775
781
  Box,
776
782
  {
@@ -829,7 +835,7 @@ function EventBannerView({
829
835
  }
830
836
  ),
831
837
  /* @__PURE__ */ jsxs(
832
- Grid9,
838
+ Grid8,
833
839
  {
834
840
  display: "flex",
835
841
  justifyContent: "center",
@@ -937,6 +943,14 @@ var generateLink = function(link) {
937
943
  link.text
938
944
  );
939
945
  };
946
+ var NextGameLabel = ({ nextGameTime }) => {
947
+ const date = typeof nextGameTime === "string" ? new Date(nextGameTime) : nextGameTime;
948
+ return /* @__PURE__ */ jsxs(Typography, { variant: "caption", sx: { display: "block", mb: 1, color: "primary.main", fontWeight: "bold" }, children: [
949
+ "Next Game: ",
950
+ date.toLocaleString()
951
+ ] });
952
+ };
953
+ var NextGameLabel_default = NextGameLabel;
940
954
  var BaseSearchResultCard = ({
941
955
  result,
942
956
  onClick,
@@ -944,13 +958,19 @@ var BaseSearchResultCard = ({
944
958
  icon,
945
959
  tags
946
960
  }) => {
947
- const handleClick = () => {
961
+ const handleClick = (e) => {
948
962
  if (onClick) {
949
- onClick(result.id);
963
+ if (e.ctrlKey || e.metaKey || e.shiftKey) {
964
+ e.stopPropagation();
965
+ const url = `/${result.type}/${result.id}`;
966
+ window.open(url, "_blank");
967
+ } else {
968
+ onClick(result.id);
969
+ }
950
970
  }
951
971
  };
952
972
  return /* @__PURE__ */ jsx(
953
- Card,
973
+ Card10,
954
974
  {
955
975
  elevation: 6,
956
976
  sx: {
@@ -963,48 +983,22 @@ var BaseSearchResultCard = ({
963
983
  },
964
984
  marginBottom: 2
965
985
  },
966
- onClick: handleClick,
967
- children: /* @__PURE__ */ jsxs(CardContent, { sx: { display: "flex", alignItems: "flex-start" }, children: [
968
- icon && /* @__PURE__ */ jsx(Box, { sx: { mr: 2, display: "flex", alignItems: "center", pt: 0.5 }, children: icon }),
969
- /* @__PURE__ */ jsxs(Box, { sx: { flex: 1 }, children: [
970
- /* @__PURE__ */ jsx(Typography, { variant: "h6", sx: { mb: 1 }, children: result.title }),
986
+ onClick: (e) => handleClick(e),
987
+ children: /* @__PURE__ */ jsxs(CardContent10, { sx: { display: "flex", alignItems: "flex-start" }, children: [
988
+ icon && /* @__PURE__ */ jsx(Box2, { sx: { mr: 2, display: "flex", alignItems: "center", pt: 0.5 }, children: icon }),
989
+ /* @__PURE__ */ jsxs(Box2, { sx: { flex: 1 }, children: [
990
+ /* @__PURE__ */ jsx(Typography4, { variant: "h6", sx: { mb: 1 }, children: result.title }),
991
+ result.nextGameTime && /* @__PURE__ */ jsx(NextGameLabel_default, { nextGameTime: result.nextGameTime }),
992
+ result.type === "table" && result.shortDescription ? /* @__PURE__ */ jsx(Typography4, { variant: "body2", sx: { mb: 1 }, children: result.shortDescription }) : null,
971
993
  children,
972
- /* @__PURE__ */ jsx(Typography, { variant: "body1", children: result.description }),
973
- result.tags && result.tags.length > 0 && /* @__PURE__ */ jsx(Box, { sx: { mt: 1 }, children: /* @__PURE__ */ jsx(Box, { sx: {
974
- display: "block",
975
- whiteSpace: "nowrap",
976
- overflow: "hidden",
977
- textOverflow: "clip",
978
- pl: 0.5
979
- // Add some padding to prevent clipping of the leftmost tag
980
- }, children: (() => {
981
- const MAX_VISIBLE = 5;
982
- const tagObjs = result.tags.map((tagId) => tags.find((t) => t.id === tagId)).filter((t) => Boolean(t));
983
- const visible = tagObjs.slice(0, MAX_VISIBLE);
984
- const hiddenCount = Math.max(tagObjs.length - visible.length, 0);
985
- return /* @__PURE__ */ jsxs(Fragment, { children: [
986
- visible.map((tag) => generateTagsDisplay(tag)),
987
- hiddenCount > 0 && /* @__PURE__ */ jsxs(
988
- "span",
989
- {
990
- className: "inline-block text-sm px-3 py-1 rounded-full outline-black outline-2 font-outlined",
991
- style: {
992
- marginTop: "6px",
993
- marginRight: "6px",
994
- marginBottom: "6px",
995
- background: "#9e9e9e",
996
- color: "white",
997
- textShadow: "black 0.2em 0.2em 0.4em"
998
- },
999
- children: [
1000
- "+",
1001
- hiddenCount,
1002
- " more"
1003
- ]
1004
- }
1005
- )
1006
- ] });
1007
- })() }) })
994
+ result.type === "table" ? /* @__PURE__ */ jsx(Typography4, { variant: "body1", children: (() => {
995
+ var _a, _b;
996
+ const full = (_b = (_a = result.fullDescription) != null ? _a : result.description) != null ? _b : "";
997
+ if (typeof full !== "string") return "";
998
+ const text = full || "";
999
+ return text.length > 200 ? `${text.slice(0, 200).trimEnd()}...` : text;
1000
+ })() }) : /* @__PURE__ */ jsx(Typography4, { variant: "body1", children: result.description }),
1001
+ result.tags && result.tags.length > 0 && /* @__PURE__ */ jsx(Box2, { sx: { mt: 1, display: "flex", flexWrap: "wrap", gap: 1 }, children: renderTagsFromIds(result.tags, tags) })
1008
1002
  ] })
1009
1003
  ] })
1010
1004
  }
@@ -1059,21 +1053,60 @@ var PlayerResultCard = ({
1059
1053
  return /* @__PURE__ */ jsx(BaseSearchResultCard_default, { result, onClick, icon: playerIcon, tags });
1060
1054
  };
1061
1055
  var PlayerResultCard_default = PlayerResultCard;
1062
- var TableResultCard = ({ result, tags, onClick }) => {
1063
- const capacity = result.capacity || 1;
1064
- const numPlayers = result.numPlayers || 0;
1065
- const occupancy = numPlayers / capacity * 100;
1066
- return /* @__PURE__ */ jsx(BaseSearchResultCard, { result, tags, onClick, icon: /* @__PURE__ */ jsx(CasinoIcon, { color: "primary" }), children: /* @__PURE__ */ jsxs(Box, { sx: { mb: 1 }, children: [
1067
- /* @__PURE__ */ jsxs(Box, { sx: { display: "flex", justifyContent: "space-between", alignItems: "center", mb: 0.5 }, children: [
1068
- /* @__PURE__ */ jsxs(Typography, { variant: "body2", color: "text.secondary", children: [
1069
- "Players: ",
1070
- numPlayers,
1071
- " / ",
1072
- capacity
1056
+ var TableResultCard = ({
1057
+ result,
1058
+ onClick,
1059
+ tags
1060
+ }) => {
1061
+ const rawCapacity = result.capacity;
1062
+ const hasDefinedCapacity = typeof rawCapacity === "number" && Number.isFinite(rawCapacity) && rawCapacity > 0;
1063
+ const capacity = hasDefinedCapacity ? rawCapacity : 0;
1064
+ const activePlayers = typeof result.numPlayers === "number" ? result.numPlayers : 0;
1065
+ const availableSlots = Math.max(capacity - activePlayers, 0);
1066
+ const hasDM = typeof result.hasDM === "boolean" ? result.hasDM : Boolean(result.dungeonMaster);
1067
+ const occupancyPercentage = hasDefinedCapacity ? activePlayers / capacity * 100 : 100;
1068
+ const tableIcon = /* @__PURE__ */ jsx(
1069
+ TableRestaurantIcon,
1070
+ {
1071
+ sx: {
1072
+ fontSize: 40,
1073
+ color: "primary.main"
1074
+ }
1075
+ }
1076
+ );
1077
+ return /* @__PURE__ */ jsx(BaseSearchResultCard_default, { result, onClick, icon: tableIcon, tags, children: /* @__PURE__ */ jsxs(Box2, { sx: { mb: 2 }, children: [
1078
+ /* @__PURE__ */ jsxs(Box2, { sx: { display: "flex", justifyContent: "space-between", alignItems: "center", mb: 1 }, children: [
1079
+ /* @__PURE__ */ jsxs(Typography4, { variant: "body2", children: [
1080
+ /* @__PURE__ */ jsx("strong", { children: "Players:" }),
1081
+ " ",
1082
+ hasDefinedCapacity ? `${activePlayers}/${capacity}` : activePlayers
1073
1083
  ] }),
1074
- result.dungeonMaster ? /* @__PURE__ */ jsx(Chip$1, { label: "DM Present", size: "small", color: "success", variant: "outlined" }) : /* @__PURE__ */ jsx(Chip$1, { label: "No DM", size: "small", color: "warning", variant: "outlined" })
1084
+ typeof hasDM === "boolean" && /* @__PURE__ */ jsx(
1085
+ Chip2,
1086
+ {
1087
+ icon: hasDM ? /* @__PURE__ */ jsx(SupervisorAccountIcon, {}) : /* @__PURE__ */ jsx(PersonIcon, {}),
1088
+ label: hasDM ? "DM Present" : "No DM",
1089
+ color: hasDM ? "success" : "warning",
1090
+ size: "small"
1091
+ }
1092
+ )
1075
1093
  ] }),
1076
- /* @__PURE__ */ jsx(LinearProgress, { variant: "determinate", value: occupancy, sx: { height: 8, borderRadius: 4 } })
1094
+ /* @__PURE__ */ jsx(
1095
+ LinearProgress,
1096
+ {
1097
+ variant: "determinate",
1098
+ value: occupancyPercentage,
1099
+ sx: {
1100
+ height: 10,
1101
+ borderRadius: 5,
1102
+ backgroundColor: "#e0e0e0",
1103
+ "& .MuiLinearProgress-bar": {
1104
+ backgroundColor: hasDefinedCapacity ? availableSlots > 0 ? "#4caf50" : "#f44336" : "#2196f3"
1105
+ }
1106
+ }
1107
+ }
1108
+ ),
1109
+ hasDefinedCapacity && /* @__PURE__ */ jsx(Typography4, { variant: "body2", sx: { mt: 0.5, textAlign: "right" }, children: availableSlots > 0 ? `${availableSlots} slot${availableSlots !== 1 ? "s" : ""} available` : "Table full" })
1077
1110
  ] }) });
1078
1111
  };
1079
1112
  var TableResultCard_default = TableResultCard;
@@ -1092,20 +1125,42 @@ var EventResultCard = ({
1092
1125
  try {
1093
1126
  const date = new Date(dateString);
1094
1127
  return date.toLocaleDateString("en-US", options);
1095
- } catch {
1128
+ } catch (error) {
1096
1129
  return dateString;
1097
1130
  }
1098
1131
  };
1099
1132
  const formattedDate = result.date ? formatDate(result.date) : "Date TBD";
1100
1133
  const location = result.location || "Location TBD";
1101
- return /* @__PURE__ */ jsx(BaseSearchResultCard_default, { result, onClick, icon: /* @__PURE__ */ jsx(EventIcon, { color: "primary" }), tags, children: /* @__PURE__ */ jsxs(Box, { sx: { mb: 1 }, children: [
1102
- /* @__PURE__ */ jsxs(Box, { sx: { display: "flex", alignItems: "center", mb: 0.5 }, children: [
1103
- /* @__PURE__ */ jsx(CalendarTodayIcon, { sx: { mr: 1, fontSize: "small", color: "text.secondary" } }),
1104
- /* @__PURE__ */ jsx(Typography, { variant: "body2", color: "text.secondary", children: formattedDate })
1134
+ const eventIcon = /* @__PURE__ */ jsx(
1135
+ EventIcon,
1136
+ {
1137
+ sx: {
1138
+ fontSize: 40,
1139
+ color: "primary.main"
1140
+ }
1141
+ }
1142
+ );
1143
+ return /* @__PURE__ */ jsx(BaseSearchResultCard_default, { result, onClick, icon: eventIcon, tags, children: /* @__PURE__ */ jsxs(Box2, { sx: { mb: 2 }, children: [
1144
+ /* @__PURE__ */ jsxs(Box2, { sx: { display: "flex", alignItems: "center", mb: 1 }, children: [
1145
+ /* @__PURE__ */ jsx(CalendarTodayIcon, { sx: { mr: 1, color: "primary.main" } }),
1146
+ /* @__PURE__ */ jsxs(Typography4, { variant: "body2", children: [
1147
+ /* @__PURE__ */ jsx("strong", { children: "Date:" }),
1148
+ " ",
1149
+ formattedDate
1150
+ ] })
1151
+ ] }),
1152
+ /* @__PURE__ */ jsxs(Box2, { sx: { display: "flex", alignItems: "center" }, children: [
1153
+ /* @__PURE__ */ jsx(LocationOnIcon, { sx: { mr: 1, color: "primary.main" } }),
1154
+ /* @__PURE__ */ jsxs(Typography4, { variant: "body2", children: [
1155
+ /* @__PURE__ */ jsx("strong", { children: "Location:" }),
1156
+ " ",
1157
+ location
1158
+ ] })
1105
1159
  ] }),
1106
- /* @__PURE__ */ jsxs(Box, { sx: { display: "flex", alignItems: "center", mb: 1 }, children: [
1107
- /* @__PURE__ */ jsx(LocationOnIcon, { sx: { mr: 1, fontSize: "small", color: "text.secondary" } }),
1108
- /* @__PURE__ */ jsx(Typography, { variant: "body2", color: "text.secondary", children: location })
1160
+ result.organizer && /* @__PURE__ */ jsxs(Typography4, { variant: "body2", sx: { mt: 1 }, children: [
1161
+ /* @__PURE__ */ jsx("strong", { children: "Organizer:" }),
1162
+ " ",
1163
+ result.organizer
1109
1164
  ] })
1110
1165
  ] }) });
1111
1166
  };
@@ -1113,9 +1168,11 @@ var EventResultCard_default = EventResultCard;
1113
1168
  var ResultsContainer = ({
1114
1169
  results,
1115
1170
  onResultClick,
1116
- tags
1171
+ tags,
1172
+ pagination,
1173
+ onPacketChange
1117
1174
  }) => {
1118
- if (results.length === 0 || !results.map) {
1175
+ if (!results || results.length === 0 || !results.map) {
1119
1176
  return /* @__PURE__ */ jsx(Box2, { sx: { textAlign: "center", py: 4 }, children: "No results found. Try adjusting your filters." });
1120
1177
  }
1121
1178
  const onPlayerClick = (id) => {
@@ -1127,43 +1184,68 @@ var ResultsContainer = ({
1127
1184
  const onEventClick = (id) => {
1128
1185
  onResultClick == null ? void 0 : onResultClick(id, "event");
1129
1186
  };
1130
- return /* @__PURE__ */ jsx(Box2, { sx: { display: "flex", flexDirection: "column", gap: 2 }, children: results.map((result) => {
1131
- switch (result.type) {
1132
- case "player":
1133
- return /* @__PURE__ */ jsx(
1134
- PlayerResultCard_default,
1135
- {
1136
- result,
1137
- onClick: onPlayerClick,
1138
- tags
1139
- },
1140
- result.id
1141
- );
1142
- case "table":
1143
- return /* @__PURE__ */ jsx(
1144
- TableResultCard_default,
1145
- {
1146
- result,
1147
- onClick: onTableClick,
1148
- tags
1149
- },
1150
- result.id
1151
- );
1152
- case "event":
1153
- return /* @__PURE__ */ jsx(
1154
- EventResultCard_default,
1155
- {
1156
- result,
1157
- onClick: onEventClick,
1158
- tags
1159
- },
1160
- result.id
1161
- );
1162
- default:
1163
- console.error(`Unknown result type: ${result.type}`);
1164
- return null;
1165
- }
1166
- }) });
1187
+ const handlePacketChange = (_event, packet) => {
1188
+ onPacketChange == null ? void 0 : onPacketChange(packet);
1189
+ };
1190
+ const startResult = pagination ? (pagination.currentPacket - 1) * pagination.packetSize + 1 : 1;
1191
+ const endResult = pagination ? Math.min(pagination.currentPacket * pagination.packetSize, pagination.totalResults) : results.length;
1192
+ return /* @__PURE__ */ jsxs(Box2, { sx: { display: "flex", flexDirection: "column", gap: 2 }, children: [
1193
+ pagination && /* @__PURE__ */ jsx(Box2, { sx: { display: "flex", justifyContent: "space-between", alignItems: "center", mb: 1 }, children: /* @__PURE__ */ jsxs(Typography4, { variant: "body2", color: "text.secondary", children: [
1194
+ "Showing ",
1195
+ startResult,
1196
+ "-",
1197
+ endResult,
1198
+ " of ",
1199
+ pagination.totalResults,
1200
+ " results"
1201
+ ] }) }),
1202
+ results.map((result, index) => {
1203
+ switch (result.type) {
1204
+ case "player":
1205
+ return /* @__PURE__ */ jsx(
1206
+ PlayerResultCard_default,
1207
+ {
1208
+ result,
1209
+ onClick: onPlayerClick,
1210
+ tags
1211
+ },
1212
+ result.id
1213
+ );
1214
+ case "table":
1215
+ return /* @__PURE__ */ jsx(
1216
+ TableResultCard_default,
1217
+ {
1218
+ result,
1219
+ onClick: onTableClick,
1220
+ tags
1221
+ },
1222
+ result.id
1223
+ );
1224
+ case "event":
1225
+ return /* @__PURE__ */ jsx(
1226
+ EventResultCard_default,
1227
+ {
1228
+ result,
1229
+ onClick: onEventClick,
1230
+ tags
1231
+ },
1232
+ result.id
1233
+ );
1234
+ default:
1235
+ console.error(`Unknown result type: ${result.type}`);
1236
+ return null;
1237
+ }
1238
+ }),
1239
+ pagination && pagination.totalPackets > 1 && /* @__PURE__ */ jsx(Box2, { sx: { display: "flex", justifyContent: "center", mt: 4 }, children: /* @__PURE__ */ jsx(
1240
+ Pagination,
1241
+ {
1242
+ count: pagination.totalPackets,
1243
+ page: pagination.currentPacket,
1244
+ onChange: handlePacketChange,
1245
+ color: "primary"
1246
+ }
1247
+ ) })
1248
+ ] });
1167
1249
  };
1168
1250
  var ResultsContainer_default = ResultsContainer;
1169
1251
  var ScrollableResultsList = ({
@@ -1181,21 +1263,14 @@ var TablesScrollableList = ({
1181
1263
  results,
1182
1264
  tags,
1183
1265
  maxHeight,
1184
- onResultClick,
1185
- sortBy = "availability"
1266
+ onResultClick
1186
1267
  }) => {
1187
1268
  const tables = (results || []).filter((r) => (r == null ? void 0 : r.type) === "table");
1188
- const getAvailableSlots = (r) => {
1189
- const capacity = typeof r.capacity === "number" ? r.capacity : 0;
1190
- const playersCount = typeof r.numPlayers === "number" ? r.numPlayers : 0;
1191
- return Math.max(capacity - playersCount, 0);
1192
- };
1193
- const sortedTables = sortBy === "availability" ? [...tables].sort((a, b) => getAvailableSlots(b) - getAvailableSlots(a)) : tables;
1194
1269
  const handleClick = (id) => onResultClick == null ? void 0 : onResultClick(id);
1195
1270
  return /* @__PURE__ */ jsx(
1196
1271
  ScrollableResultsList_default,
1197
1272
  {
1198
- results: sortedTables,
1273
+ results: tables,
1199
1274
  tags,
1200
1275
  maxHeight,
1201
1276
  onResultClick: (id, type) => {
@@ -1213,8 +1288,8 @@ var EventTablesCard = ({
1213
1288
  }) => {
1214
1289
  return /* @__PURE__ */ jsxs(Card10, { elevation: 6, sx: { width: "100%", boxShadow: "0px 8px 24px rgba(0, 0, 0, 0.15)" }, children: [
1215
1290
  /* @__PURE__ */ jsx(CardHeader4, { title: "Tables" }),
1216
- /* @__PURE__ */ jsx(Divider2, {}),
1217
- /* @__PURE__ */ jsx(CardContent10, { children: /* @__PURE__ */ jsx(TablesScrollableList_default, { results: tables, tags, maxHeight, onResultClick: onTableClick, sortBy: "availability" }) })
1291
+ /* @__PURE__ */ jsx(Divider3, {}),
1292
+ /* @__PURE__ */ jsx(CardContent10, { children: /* @__PURE__ */ jsx(TablesScrollableList_default, { results: tables, tags, maxHeight, onResultClick: onTableClick }) })
1218
1293
  ] });
1219
1294
  };
1220
1295
  var EventTablesCard_default = EventTablesCard;
@@ -1228,27 +1303,28 @@ function EventPageLayout({
1228
1303
  tables,
1229
1304
  allTags
1230
1305
  }) {
1231
- return /* @__PURE__ */ jsx(Grid9, { container: true, flexDirection: "column", children: /* @__PURE__ */ jsxs(EventEditProvider, { initialEvent: mergedEvent, value: { isOwner, updateEvent, updateImages }, children: [
1232
- /* @__PURE__ */ jsx(Grid9, { children: /* @__PURE__ */ jsx(
1306
+ return /* @__PURE__ */ jsx(Grid8, { container: true, flexDirection: "column", children: /* @__PURE__ */ jsxs(EventEditProvider, { initialEvent: mergedEvent, value: { isOwner, updateEvent, updateImages }, children: [
1307
+ /* @__PURE__ */ jsx(Grid8, { children: /* @__PURE__ */ jsx(
1233
1308
  EventBanner,
1234
1309
  {
1235
1310
  attendees,
1236
1311
  numGames
1237
1312
  }
1238
1313
  ) }),
1239
- /* @__PURE__ */ jsxs(Grid9, { container: true, flexDirection: "row", spacing: 3, size: { xs: 12, md: 12 }, children: [
1240
- /* @__PURE__ */ jsx(Grid9, { size: { xs: 12, md: 4 }, spacing: 3, padding: 3, children: /* @__PURE__ */ jsx(
1314
+ /* @__PURE__ */ jsxs(Grid8, { container: true, flexDirection: "row", spacing: 3, size: { xs: 12, md: 12 }, children: [
1315
+ /* @__PURE__ */ jsx(Grid8, { size: { xs: 12, md: 4 }, spacing: 3, padding: 3, children: /* @__PURE__ */ jsx(
1241
1316
  EventBasicInfo,
1242
1317
  {
1243
1318
  locationId: mergedEvent.location || "0"
1244
1319
  }
1245
1320
  ) }),
1246
- /* @__PURE__ */ jsx(Grid9, { size: { xs: 12, md: 8 }, spacing: 3, padding: 3, children: /* @__PURE__ */ jsx(EventTablesCard_default, { tables, tags: allTags }) })
1321
+ /* @__PURE__ */ jsx(Grid8, { size: { xs: 12, md: 8 }, spacing: 3, padding: 3, children: /* @__PURE__ */ jsx(EventTablesCard_default, { tables, tags: allTags }) })
1247
1322
  ] }),
1248
- /* @__PURE__ */ jsx(Grid9, {})
1323
+ /* @__PURE__ */ jsx(Grid8, {})
1249
1324
  ] }) });
1250
1325
  }
1251
- var PlayerDetails = ({
1326
+ var PlayerDetailsCard = ({
1327
+ preferredPronouns,
1252
1328
  age,
1253
1329
  yearsPlaying,
1254
1330
  discordUsername,
@@ -1298,6 +1374,23 @@ var PlayerDetails = ({
1298
1374
  }
1299
1375
  ),
1300
1376
  /* @__PURE__ */ jsxs("div", { className: "space-y-3", children: [
1377
+ preferredPronouns && /* @__PURE__ */ jsxs(
1378
+ Typography,
1379
+ {
1380
+ variant: "body2",
1381
+ className: "text-sm font-medium",
1382
+ sx: {
1383
+ color: "#FFFFFF",
1384
+ textShadow: "0px 2px 6px rgba(0, 0, 0, 0.5)",
1385
+ fontWeight: "bold"
1386
+ },
1387
+ children: [
1388
+ /* @__PURE__ */ jsx("span", { className: "font-extrabold text-cyan-300", children: "Preferred Pronouns:" }),
1389
+ " ",
1390
+ preferredPronouns
1391
+ ]
1392
+ }
1393
+ ),
1301
1394
  age !== null && /* @__PURE__ */ jsxs(
1302
1395
  Typography,
1303
1396
  {
@@ -1349,7 +1442,7 @@ var PlayerDetails = ({
1349
1442
  ]
1350
1443
  }
1351
1444
  ),
1352
- preferredGames && preferredGames.length > 0 && /* @__PURE__ */ jsxs(
1445
+ preferredGames && /* @__PURE__ */ jsxs(
1353
1446
  Typography,
1354
1447
  {
1355
1448
  variant: "body2",
@@ -1362,7 +1455,7 @@ var PlayerDetails = ({
1362
1455
  children: [
1363
1456
  /* @__PURE__ */ jsx("span", { className: "font-extrabold text-cyan-300", children: "Preferred Games:" }),
1364
1457
  " ",
1365
- preferredGames.join(", ")
1458
+ Array.isArray(preferredGames) ? preferredGames.join(", ") : preferredGames
1366
1459
  ]
1367
1460
  }
1368
1461
  )
@@ -1385,24 +1478,20 @@ var PlayerDetails = ({
1385
1478
  }
1386
1479
  );
1387
1480
  };
1388
- var PlayerDetailsCard_default = PlayerDetails;
1481
+ var PlayerDetailsCard_default = PlayerDetailsCard;
1389
1482
 
1390
1483
  // src/data/values.tsx
1391
1484
  var ProfilePictureSettings = {
1392
1485
  aspectRatio: 4 / 5};
1393
- var { aspectRatio } = ProfilePictureSettings;
1394
- var PlayerDisplayCard = ({
1395
- profilePicture,
1396
- username,
1397
- bio,
1398
- preferredPronouns
1399
- }) => {
1400
- const [imageSrc, setImageSrc] = useState("/man-walking-silhouette-clipart.jpg");
1486
+ var PlayerDisplayCard = ({ profilePicture, username, bio, preferredPronouns }) => {
1487
+ const defaultImg = "/man-walking-silhouette-clipart.jpg";
1488
+ const [imageSrc, setImageSrc] = useState(defaultImg);
1489
+ const { aspectRatio } = ProfilePictureSettings;
1401
1490
  useEffect(() => {
1402
1491
  async function validateImage() {
1403
- const newImage = profilePicture || "/man-walking-silhouette-clipart.jpg";
1492
+ const newImage = profilePicture || defaultImg;
1404
1493
  if (!profilePicture) {
1405
- setImageSrc("/man-walking-silhouette-clipart.jpg");
1494
+ setImageSrc(defaultImg);
1406
1495
  return;
1407
1496
  }
1408
1497
  const img = new Image();
@@ -1411,7 +1500,7 @@ var PlayerDisplayCard = ({
1411
1500
  setImageSrc(newImage);
1412
1501
  };
1413
1502
  img.onerror = () => {
1414
- setImageSrc("/man-walking-silhouette-clipart.jpg");
1503
+ setImageSrc(defaultImg);
1415
1504
  };
1416
1505
  }
1417
1506
  validateImage();
@@ -1445,7 +1534,7 @@ var PlayerDisplayCard = ({
1445
1534
  height: "auto",
1446
1535
  // Updates to maintain aspect ratio and fill space nicely
1447
1536
  width: "100%",
1448
- objectFit: "scale-down"
1537
+ objectFit: "cover"
1449
1538
  }
1450
1539
  }
1451
1540
  ),
@@ -1504,104 +1593,127 @@ var PlayerDisplayCard = ({
1504
1593
  );
1505
1594
  };
1506
1595
  var PlayerDisplayCard_default = PlayerDisplayCard;
1507
- var PlayerPromptCard = ({ title, description }) => {
1508
- return /* @__PURE__ */ jsx(
1509
- Card,
1510
- {
1511
- sx: {
1512
- margin: "1rem",
1513
- background: "linear-gradient(135deg, rgba(25, 118, 210, 0.8), rgba(25, 118, 210, 1))",
1514
- // Gradient color scheme
1515
- boxShadow: "0px 8px 15px rgba(25, 118, 210, 0.3)",
1516
- // Card shadow
1517
- borderRadius: "12px",
1518
- // Rounded corners
1519
- color: "#FFFFFF",
1520
- // Text contrast with the background
1521
- overflow: "hidden"
1522
- // Keeps consistent and clean card shape
1523
- },
1524
- className: "transition duration-300 transform hover:scale-105 hover:shadow-2xl",
1525
- children: /* @__PURE__ */ jsxs(CardContent, { className: "p-6", children: [
1526
- title && /* @__PURE__ */ jsx(
1527
- Typography,
1528
- {
1529
- variant: "h5",
1530
- className: "font-bold text-lg uppercase text-center tracking-wide mb-4",
1531
- sx: {
1532
- color: "#FFFFFF",
1533
- // Bright white for high visibility
1534
- textShadow: "0px 3px 6px rgba(0, 0, 0, 0.5)",
1535
- // Strong text shadow for contrast
1536
- fontSize: "1.5rem"
1537
- },
1538
- children: title
1539
- }
1540
- ),
1541
- description && /* @__PURE__ */ jsx(
1542
- Typography,
1543
- {
1544
- variant: "body2",
1545
- className: "text-sm font-medium text-center",
1546
- sx: {
1547
- color: "#E3F2FD",
1548
- // Softer light blue for description
1549
- textShadow: "0px 2px 4px rgba(0, 0, 0, 0.3)",
1550
- // Subtle shadow
1551
- lineHeight: 1.6,
1552
- marginTop: "1rem"
1553
- },
1554
- children: description
1596
+ var PlayerTagsCard = ({ tags = [] }) => {
1597
+ return /* @__PURE__ */ jsxs(Card, { sx: {
1598
+ margin: "1rem",
1599
+ borderRadius: "12px",
1600
+ boxShadow: "0px 8px 15px rgba(25, 118, 210, 0.3)",
1601
+ overflow: "hidden"
1602
+ }, className: "transition duration-300 transform hover:scale-105 hover:shadow-2xl", children: [
1603
+ /* @__PURE__ */ jsx(
1604
+ CardHeader,
1605
+ {
1606
+ title: "Player Tags",
1607
+ sx: {
1608
+ background: "linear-gradient(135deg, rgba(25, 118, 210, 0.8), rgba(25, 118, 210, 1))",
1609
+ color: "#FFFFFF",
1610
+ fontSize: "1.5rem",
1611
+ textShadow: "0px 3px 6px rgba(0, 0, 0, 0.5)",
1612
+ "& .MuiCardHeader-title": {
1613
+ fontWeight: "bold",
1614
+ fontSize: "1.5rem",
1615
+ textAlign: "center",
1616
+ textTransform: "uppercase",
1617
+ letterSpacing: "0.05em"
1555
1618
  }
1556
- )
1557
- ] })
1558
- }
1559
- );
1619
+ }
1620
+ }
1621
+ ),
1622
+ /* @__PURE__ */ jsx(CardContent, { className: "p-6", children: /* @__PURE__ */ jsx("div", { className: "flex flex-wrap gap-2", children: tags.map((tag) => /* @__PURE__ */ jsx(Chip, { tag }, tag.id)) }) })
1623
+ ] });
1560
1624
  };
1561
- var PlayerPromptCard_default = PlayerPromptCard;
1562
- function PlayerTagsCard(props) {
1563
- return /* @__PURE__ */ jsx(Grid9, { container: true, children: /* @__PURE__ */ jsx(Grid9, { size: { xs: 12, md: 3 }, children: /* @__PURE__ */ jsxs(Card10, { children: [
1564
- /* @__PURE__ */ jsx(CardHeader4, { title: "Player Tags", style: {
1625
+ var PlayerTagsCard_default = PlayerTagsCard;
1626
+ var PlayerPromptCard = ({ title, description }) => /* @__PURE__ */ jsx(
1627
+ Card,
1628
+ {
1629
+ sx: {
1630
+ margin: "1rem",
1565
1631
  background: "linear-gradient(135deg, rgba(25, 118, 210, 0.8), rgba(25, 118, 210, 1))",
1632
+ // Gradient color scheme
1633
+ boxShadow: "0px 8px 15px rgba(25, 118, 210, 0.3)",
1634
+ // Card shadow
1635
+ borderRadius: "12px",
1636
+ // Rounded corners
1566
1637
  color: "#FFFFFF",
1567
- // Pure white for username
1568
- fontSize: "1.5rem",
1569
- textShadow: "0px 3px 6px rgba(0, 0, 0, 0.5)"
1570
- // Strong shadow for visibility
1571
- } }),
1572
- /* @__PURE__ */ jsx(CardContent10, { children: renderLabels(props.PlayerTags) })
1573
- ] }) }) });
1574
- }
1575
- var renderLabels = (tags) => {
1576
- return /* @__PURE__ */ jsx("div", { className: "mt-2 flex flex-wrap gap-2", children: tags.map((tag) => /* @__PURE__ */ jsx(Chip, { tag }, tag.id)) });
1577
- };
1578
- function TagEditor({
1579
- title = "Tags",
1580
- selectedTags,
1581
- possibleTags,
1638
+ // Text contrast with the background
1639
+ overflow: "hidden"
1640
+ // Keeps consistent and clean card shape
1641
+ },
1642
+ className: "transition duration-300 transform hover:scale-105 hover:shadow-2xl",
1643
+ children: /* @__PURE__ */ jsxs(CardContent, { className: "p-6", children: [
1644
+ title && /* @__PURE__ */ jsx(
1645
+ Typography,
1646
+ {
1647
+ variant: "h5",
1648
+ className: "font-bold text-lg uppercase text-center tracking-wide mb-4",
1649
+ sx: {
1650
+ color: "#FFFFFF",
1651
+ // Bright white for high visibility
1652
+ textShadow: "0px 3px 6px rgba(0, 0, 0, 0.5)",
1653
+ // Strong text shadow for contrast
1654
+ fontSize: "1.5rem"
1655
+ },
1656
+ children: title
1657
+ }
1658
+ ),
1659
+ description && /* @__PURE__ */ jsx(
1660
+ Typography,
1661
+ {
1662
+ variant: "body2",
1663
+ className: "text-sm font-medium text-center",
1664
+ sx: {
1665
+ color: "#E3F2FD",
1666
+ // Softer light blue for description
1667
+ textShadow: "0px 2px 4px rgba(0, 0, 0, 0.3)",
1668
+ // Subtle shadow
1669
+ lineHeight: 1.6,
1670
+ marginTop: "1rem"
1671
+ },
1672
+ children: description
1673
+ }
1674
+ )
1675
+ ] })
1676
+ }
1677
+ );
1678
+ var PlayerPromptCard_default = PlayerPromptCard;
1679
+ var PlayerTagsEdit = ({
1680
+ selectedTags = [],
1681
+ possibleTags = [],
1582
1682
  onToggleTag
1583
- }) {
1683
+ }) => {
1584
1684
  const [inputValue, setInputValue] = useState("");
1585
1685
  const selectedIds = useMemo(() => selectedTags.map((tag) => tag.id), [selectedTags]);
1586
1686
  const options = useMemo(
1587
- () => possibleTags.map((tag) => ({ value: tag.id, label: tag.label })),
1687
+ () => possibleTags.map((tag) => ({ value: tag.id, label: tag.label, alternate_title: tag.alternate_title })),
1588
1688
  [possibleTags]
1589
1689
  );
1590
- return /* @__PURE__ */ jsx(Grid9, { container: true, children: /* @__PURE__ */ jsx(Grid9, { size: { xs: 12 }, children: /* @__PURE__ */ jsxs(Card10, { children: [
1690
+ return /* @__PURE__ */ jsxs(Card, { sx: {
1691
+ margin: "1rem",
1692
+ borderRadius: "12px",
1693
+ boxShadow: "0px 8px 15px rgba(25, 118, 210, 0.3)",
1694
+ overflow: "hidden"
1695
+ }, children: [
1591
1696
  /* @__PURE__ */ jsx(
1592
- CardHeader4,
1697
+ CardHeader,
1593
1698
  {
1594
- title,
1595
- style: {
1699
+ title: "Player Tags",
1700
+ sx: {
1596
1701
  background: "linear-gradient(135deg, rgba(25, 118, 210, 0.8), rgba(25, 118, 210, 1))",
1597
1702
  color: "#FFFFFF",
1598
1703
  fontSize: "1.5rem",
1599
- textShadow: "0px 3px 6px rgba(0, 0, 0, 0.5)"
1704
+ textShadow: "0px 3px 6px rgba(0, 0, 0, 0.5)",
1705
+ "& .MuiCardHeader-title": {
1706
+ fontWeight: "bold",
1707
+ fontSize: "1.5rem",
1708
+ textAlign: "center",
1709
+ textTransform: "uppercase",
1710
+ letterSpacing: "0.05em"
1711
+ }
1600
1712
  }
1601
1713
  }
1602
1714
  ),
1603
- /* @__PURE__ */ jsxs(CardContent10, { children: [
1604
- /* @__PURE__ */ jsx("div", { className: "mt-2 flex flex-wrap gap-2", children: selectedTags.map((tag) => /* @__PURE__ */ jsx(
1715
+ /* @__PURE__ */ jsxs(CardContent, { className: "p-6", children: [
1716
+ /* @__PURE__ */ jsx("div", { className: "flex flex-wrap gap-2 mb-4", children: selectedTags.map((tag) => /* @__PURE__ */ jsx(
1605
1717
  Chip,
1606
1718
  {
1607
1719
  tag,
@@ -1609,13 +1721,19 @@ function TagEditor({
1609
1721
  },
1610
1722
  tag.id
1611
1723
  )) }),
1612
- /* @__PURE__ */ jsx(Grid9, { container: true, spacing: 3, children: /* @__PURE__ */ jsx(Grid9, { sx: { marginTop: 3, width: "100%" }, children: /* @__PURE__ */ jsx(
1724
+ /* @__PURE__ */ jsx(
1613
1725
  Autocomplete,
1614
1726
  {
1615
1727
  options,
1616
- filterOptions: (availableOptions, state) => availableOptions.filter(
1617
- (option) => !selectedIds.includes(option.value) && option.label.toLowerCase().includes(state.inputValue.toLowerCase())
1618
- ).slice(0, 3),
1728
+ filterOptions: (availableOptions, state) => {
1729
+ const query = state.inputValue.toLowerCase();
1730
+ return availableOptions.filter(
1731
+ (option) => {
1732
+ var _a;
1733
+ return !selectedIds.includes(option.value) && (option.label.toLowerCase().includes(query) || ((_a = option.alternate_title) == null ? void 0 : _a.some((title) => title.toLowerCase().includes(query))));
1734
+ }
1735
+ ).slice(0, 5);
1736
+ },
1619
1737
  value: null,
1620
1738
  inputValue,
1621
1739
  onInputChange: (event, newInputValue) => {
@@ -1630,13 +1748,20 @@ function TagEditor({
1630
1748
  setInputValue("");
1631
1749
  },
1632
1750
  slots: { popper: CustomPopper },
1633
- renderInput: (params) => /* @__PURE__ */ jsx(TextField3, { ...params, label: "Select Tags" })
1751
+ renderInput: (params) => /* @__PURE__ */ jsx(
1752
+ TextField,
1753
+ {
1754
+ ...params,
1755
+ label: "Select Tags",
1756
+ variant: "outlined"
1757
+ }
1758
+ )
1634
1759
  },
1635
1760
  selectedIds.join("-")
1636
- ) }) })
1761
+ )
1637
1762
  ] })
1638
- ] }) }) });
1639
- }
1763
+ ] });
1764
+ };
1640
1765
  var CustomPopper = (props) => {
1641
1766
  return /* @__PURE__ */ jsx(
1642
1767
  Popper,
@@ -1645,28 +1770,105 @@ var CustomPopper = (props) => {
1645
1770
  modifiers: [
1646
1771
  {
1647
1772
  name: "preventOverflow",
1648
- options: { boundary: "viewport" }
1773
+ options: {
1774
+ boundary: "viewport"
1775
+ }
1649
1776
  },
1650
1777
  {
1651
1778
  name: "offset",
1652
- options: { offset: [0, -10] }
1779
+ options: {
1780
+ offset: [0, -10]
1781
+ }
1653
1782
  }
1654
1783
  ],
1655
1784
  placement: "top-start"
1656
1785
  }
1657
1786
  );
1658
1787
  };
1659
- function PlayerTagsEdit(props) {
1660
- return /* @__PURE__ */ jsx(
1661
- TagEditor,
1788
+ var PlayerTagsEdit_default = PlayerTagsEdit;
1789
+ function PlayerPageLayout({
1790
+ playerData,
1791
+ tags = [],
1792
+ blurbs = [],
1793
+ isOwner = false,
1794
+ possibleTags = [],
1795
+ onToggleTag = () => {
1796
+ }
1797
+ }) {
1798
+ const theme = useTheme();
1799
+ const isSmallScreen = useMediaQuery(theme.breakpoints.down("lg"));
1800
+ const tagsElement = isOwner ? /* @__PURE__ */ jsx(
1801
+ PlayerTagsEdit_default,
1662
1802
  {
1663
- title: "Player Tags",
1664
- selectedTags: props.PlayerTags,
1665
- possibleTags: props.possibleTags,
1666
- onToggleTag: props.updatePlayerTags
1803
+ selectedTags: tags,
1804
+ possibleTags,
1805
+ onToggleTag
1667
1806
  }
1668
- );
1807
+ ) : /* @__PURE__ */ jsx(PlayerTagsCard_default, { tags });
1808
+ return /* @__PURE__ */ jsx(NoSsr, { children: /* @__PURE__ */ jsx(Box, { sx: { padding: "2rem", marginRight: "auto", marginLeft: "auto" }, justifyContent: "center", children: /* @__PURE__ */ jsxs(Grid, { container: true, spacing: 3, justifyContent: "center", sx: { marginRight: "auto", marginLeft: "auto" }, children: [
1809
+ !isSmallScreen && /* @__PURE__ */ jsxs(Grid, { size: { xs: 12, lg: 3 }, children: [
1810
+ /* @__PURE__ */ jsx(
1811
+ PlayerDetailsCard_default,
1812
+ {
1813
+ preferredPronouns: playerData.preferredPronouns,
1814
+ age: playerData.age,
1815
+ yearsPlaying: playerData.yearsPlaying,
1816
+ discordUsername: playerData.discordUsername,
1817
+ preferredGames: playerData.preferredGames
1818
+ }
1819
+ ),
1820
+ tagsElement
1821
+ ] }),
1822
+ /* @__PURE__ */ jsx(Grid, { size: { xs: 12, lg: 6 }, children: /* @__PURE__ */ jsxs(Grid, { container: true, spacing: 3, children: [
1823
+ /* @__PURE__ */ jsx(Grid, { size: { xs: 12, lg: 8 }, children: /* @__PURE__ */ jsx(
1824
+ PlayerDisplayCard_default,
1825
+ {
1826
+ profilePicture: playerData.profilePicture,
1827
+ username: playerData.username,
1828
+ bio: playerData.bio,
1829
+ preferredPronouns: playerData.preferredPronouns
1830
+ }
1831
+ ) }),
1832
+ isSmallScreen && /* @__PURE__ */ jsx(Grid, { size: { xs: 12, lg: 3 }, children: /* @__PURE__ */ jsx(
1833
+ PlayerDetailsCard_default,
1834
+ {
1835
+ preferredPronouns: playerData.preferredPronouns,
1836
+ age: playerData.age,
1837
+ yearsPlaying: playerData.yearsPlaying,
1838
+ discordUsername: playerData.discordUsername,
1839
+ preferredGames: playerData.preferredGames
1840
+ }
1841
+ ) }),
1842
+ blurbs.map((blurb, index) => /* @__PURE__ */ jsx(Grid, { size: { xs: 12, lg: 8 }, children: /* @__PURE__ */ jsx(
1843
+ PlayerPromptCard_default,
1844
+ {
1845
+ title: blurb.title,
1846
+ description: blurb.description
1847
+ }
1848
+ ) }, index))
1849
+ ] }) })
1850
+ ] }) }) });
1669
1851
  }
1852
+ var ExpiredTablesFilter = ({
1853
+ includeExpiredTables,
1854
+ onChange
1855
+ }) => {
1856
+ return /* @__PURE__ */ jsx(Box2, { sx: { mt: 2 }, children: /* @__PURE__ */ jsx(
1857
+ FormControlLabel,
1858
+ {
1859
+ control: /* @__PURE__ */ jsx(
1860
+ Checkbox,
1861
+ {
1862
+ checked: includeExpiredTables,
1863
+ onChange: (e) => onChange(e.target.checked),
1864
+ color: "primary"
1865
+ }
1866
+ ),
1867
+ label: "Show expired tables"
1868
+ }
1869
+ ) });
1870
+ };
1871
+ var ExpiredTablesFilter_default = ExpiredTablesFilter;
1670
1872
  var SORT_OPTIONS = [
1671
1873
  { id: "relevance", label: "Relevance" },
1672
1874
  { id: "newest", label: "Newest" },
@@ -1680,7 +1882,7 @@ var SortOptions = ({
1680
1882
  onChange == null ? void 0 : onChange(event.target.value);
1681
1883
  };
1682
1884
  return /* @__PURE__ */ jsxs(Fragment, { children: [
1683
- /* @__PURE__ */ jsx(Typography10, { variant: "h6", gutterBottom: true, children: "Sort By" }),
1885
+ /* @__PURE__ */ jsx(Typography4, { variant: "h6", gutterBottom: true, children: "Sort By" }),
1684
1886
  /* @__PURE__ */ jsx(FormControl2, { children: /* @__PURE__ */ jsx(RadioGroup, { defaultValue: defaultValue2, onChange: handleSortChange, children: SORT_OPTIONS.map((option) => /* @__PURE__ */ jsx(
1685
1887
  FormControlLabel,
1686
1888
  {
@@ -1695,11 +1897,19 @@ var SortOptions = ({
1695
1897
  var SortOptions_default = SortOptions;
1696
1898
  var TagsFilter = ({
1697
1899
  onChange,
1698
- tags: Tags = []
1900
+ tags: Tags = [],
1901
+ initialSelectedTags
1699
1902
  }) => {
1700
- const [mustHaveTags, setMustHaveTags] = React7.useState([]);
1701
- const [mustNotHaveTags, setMustNotHaveTags] = React7.useState([]);
1702
- const [shouldHaveAtLeastOneTags, setShouldHaveAtLeastOneTags] = React7.useState([]);
1903
+ const [mustHaveTags, setMustHaveTags] = React7.useState((initialSelectedTags == null ? void 0 : initialSelectedTags.mustHave) || []);
1904
+ const [mustNotHaveTags, setMustNotHaveTags] = React7.useState((initialSelectedTags == null ? void 0 : initialSelectedTags.mustNotHave) || []);
1905
+ const [shouldHaveAtLeastOneTags, setShouldHaveAtLeastOneTags] = React7.useState((initialSelectedTags == null ? void 0 : initialSelectedTags.shouldHaveAtLeastOne) || []);
1906
+ React7.useEffect(() => {
1907
+ if (initialSelectedTags) {
1908
+ setMustHaveTags(initialSelectedTags.mustHave || []);
1909
+ setMustNotHaveTags(initialSelectedTags.mustNotHave || []);
1910
+ setShouldHaveAtLeastOneTags(initialSelectedTags.shouldHaveAtLeastOne || []);
1911
+ }
1912
+ }, [initialSelectedTags]);
1703
1913
  Tags = !!Tags ? Tags : [];
1704
1914
  const [inputValues, setInputValues] = React7.useState({
1705
1915
  mustHave: "",
@@ -1709,7 +1919,7 @@ var TagsFilter = ({
1709
1919
  const tagOptions = React7.useMemo(() => {
1710
1920
  console.log("available tags: " + JSON.stringify(Tags));
1711
1921
  console.log(!Tags);
1712
- if (!Tags || Tags.length == 0 || !Tags.map) return [];
1922
+ if (!Tags || Tags.length === 0 || !Tags.map) return [];
1713
1923
  return Tags.map((tag) => ({
1714
1924
  value: tag.id,
1715
1925
  label: tag.label
@@ -1741,7 +1951,7 @@ var TagsFilter = ({
1741
1951
  };
1742
1952
  const renderSelectedTags = (selectedTags, category) => {
1743
1953
  const tagValues = [];
1744
- if (!Tags || Tags.length == 0 || !Tags.map) return null;
1954
+ if (!Tags || Tags.length === 0 || !Tags.map) return null;
1745
1955
  Tags.forEach((tag) => {
1746
1956
  if (selectedTags.includes(tag.id)) {
1747
1957
  tagValues.push(tag);
@@ -1750,27 +1960,11 @@ var TagsFilter = ({
1750
1960
  if (tagValues.length === 0) {
1751
1961
  return null;
1752
1962
  }
1753
- return /* @__PURE__ */ jsx(Box2, { sx: { display: "flex", flexWrap: "wrap", gap: 1, mb: 2 }, children: tagValues.map((tag) => /* @__PURE__ */ jsxs(
1754
- "span",
1963
+ return /* @__PURE__ */ jsx(Box2, { sx: { display: "flex", flexWrap: "wrap", gap: 1, mb: 2 }, children: tagValues.map((tag) => /* @__PURE__ */ jsx(
1964
+ Chip,
1755
1965
  {
1756
- className: "inline-block text-sm px-3 py-1 rounded-full outline-black outline-2 font-outlined",
1757
- style: {
1758
- background: tag.color || "#bfbcbb",
1759
- color: "white",
1760
- textShadow: "black 0.2em 0.2em 0.4em"
1761
- },
1762
- children: [
1763
- tag.label,
1764
- /* @__PURE__ */ jsx(
1765
- "button",
1766
- {
1767
- type: "button",
1768
- onClick: () => handleTagChange(tag.id, category),
1769
- className: "ml-2 text-red-500 bg-white bg-opacity-50 rounded-full outline-black outline-2 font-outlined",
1770
- children: "\xD7"
1771
- }
1772
- )
1773
- ]
1966
+ tag,
1967
+ removeCallback: (tagId) => handleTagChange(tagId, category)
1774
1968
  },
1775
1969
  tag.id
1776
1970
  )) });
@@ -1778,7 +1972,7 @@ var TagsFilter = ({
1778
1972
  const createTagSelector = (category, label) => {
1779
1973
  const selectedTags = category === "mustHave" ? mustHaveTags : category === "mustNotHave" ? mustNotHaveTags : shouldHaveAtLeastOneTags;
1780
1974
  return /* @__PURE__ */ jsxs(Fragment, { children: [
1781
- /* @__PURE__ */ jsx(Typography10, { variant: "subtitle1", gutterBottom: true, sx: { mt: 2 }, children: label }),
1975
+ /* @__PURE__ */ jsx(Typography4, { variant: "subtitle1", gutterBottom: true, sx: { mt: 2 }, children: label }),
1782
1976
  renderSelectedTags(selectedTags, category),
1783
1977
  /* @__PURE__ */ jsx(
1784
1978
  Autocomplete,
@@ -1824,18 +2018,18 @@ var TagsFilter = ({
1824
2018
  });
1825
2019
  },
1826
2020
  slots: { popper: CustomPopper2 },
1827
- renderInput: (params) => /* @__PURE__ */ jsx(TextField3, { ...params, label: `Select ${label}` })
2021
+ renderInput: (params) => /* @__PURE__ */ jsx(TextField4, { ...params, label: `Select ${label}` })
1828
2022
  },
1829
2023
  `${category}-${selectedTags.join("-")}`
1830
2024
  )
1831
2025
  ] });
1832
2026
  };
1833
2027
  return /* @__PURE__ */ jsxs(Fragment, { children: [
1834
- /* @__PURE__ */ jsx(Typography10, { variant: "h6", gutterBottom: true, children: "Tags" }),
2028
+ /* @__PURE__ */ jsx(Typography4, { variant: "h6", gutterBottom: true, children: "Tags" }),
1835
2029
  createTagSelector("mustHave", "Must Have Tags"),
1836
- /* @__PURE__ */ jsx(Divider2, { sx: { my: 2 } }),
2030
+ /* @__PURE__ */ jsx(Divider3, { sx: { my: 2 } }),
1837
2031
  createTagSelector("mustNotHave", "Must Not Have Tags"),
1838
- /* @__PURE__ */ jsx(Divider2, { sx: { my: 2 } }),
2032
+ /* @__PURE__ */ jsx(Divider3, { sx: { my: 2 } }),
1839
2033
  createTagSelector("shouldHaveAtLeastOne", "Should Contain At Least One Tag")
1840
2034
  ] });
1841
2035
  };
@@ -1865,21 +2059,80 @@ var CustomPopper2 = (props) => {
1865
2059
  );
1866
2060
  };
1867
2061
  var TagsFilter_default = TagsFilter;
1868
- var FILTER_TYPES = [
1869
- { id: "player", label: "Players" },
1870
- { id: "event", label: "Events", disabled: true },
1871
- { id: "table", label: "Tables", disabled: true }
1872
- ];
1873
- var TypeFilter = ({ onChange }) => {
1874
- const [selectedTypes, setSelectedTypes] = React7.useState([]);
2062
+ var TextSearchCard = ({ onChange, selectedTypes, initialTextSearch }) => {
2063
+ const [query, setQuery] = React7.useState((initialTextSearch == null ? void 0 : initialTextSearch.query) || "");
2064
+ const [titleOnly, setTitleOnly] = React7.useState((initialTextSearch == null ? void 0 : initialTextSearch.titleOnly) || false);
2065
+ useEffect(() => {
2066
+ if (initialTextSearch) {
2067
+ setQuery(initialTextSearch.query || "");
2068
+ setTitleOnly(initialTextSearch.titleOnly || false);
2069
+ }
2070
+ }, [initialTextSearch]);
2071
+ const shouldShow = selectedTypes.includes("table") || selectedTypes.includes("event");
2072
+ if (!shouldShow) {
2073
+ return null;
2074
+ }
2075
+ const handleQueryChange = (e) => {
2076
+ const newQuery = e.target.value;
2077
+ setQuery(newQuery);
2078
+ if (onChange) {
2079
+ onChange({ query: newQuery, titleOnly });
2080
+ }
2081
+ };
2082
+ const handleTitleOnlyChange = (e) => {
2083
+ const newTitleOnly = e.target.checked;
2084
+ setTitleOnly(newTitleOnly);
2085
+ if (onChange) {
2086
+ onChange({ query, titleOnly: newTitleOnly });
2087
+ }
2088
+ };
2089
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
2090
+ /* @__PURE__ */ jsx(Typography4, { variant: "h6", gutterBottom: true, children: "Text Search" }),
2091
+ /* @__PURE__ */ jsxs(Box2, { sx: { mb: 2 }, children: [
2092
+ /* @__PURE__ */ jsx(
2093
+ TextField4,
2094
+ {
2095
+ fullWidth: true,
2096
+ label: "Search in title and description",
2097
+ variant: "outlined",
2098
+ value: query,
2099
+ onChange: handleQueryChange,
2100
+ placeholder: "Enter search terms...",
2101
+ sx: { mb: 1 }
2102
+ }
2103
+ ),
2104
+ /* @__PURE__ */ jsx(
2105
+ FormControlLabel,
2106
+ {
2107
+ control: /* @__PURE__ */ jsx(
2108
+ Checkbox,
2109
+ {
2110
+ checked: titleOnly,
2111
+ onChange: handleTitleOnlyChange
2112
+ }
2113
+ ),
2114
+ label: "Search in title only"
2115
+ }
2116
+ )
2117
+ ] })
2118
+ ] });
2119
+ };
2120
+ var TextSearchCard_default = TextSearchCard;
2121
+ var TypeFilter = ({ types, initialSelectedTypes = [], onChange }) => {
2122
+ const [selectedTypes, setSelectedTypes] = React7.useState(initialSelectedTypes);
2123
+ useEffect(() => {
2124
+ setSelectedTypes(initialSelectedTypes);
2125
+ }, [initialSelectedTypes]);
1875
2126
  const handleTypeChange = (typeId) => {
1876
2127
  const newSelectedTypes = selectedTypes.includes(typeId) ? selectedTypes.filter((id) => id !== typeId) : [...selectedTypes, typeId];
1877
2128
  setSelectedTypes(newSelectedTypes);
1878
- onChange == null ? void 0 : onChange(newSelectedTypes);
2129
+ if (onChange) {
2130
+ onChange(newSelectedTypes);
2131
+ }
1879
2132
  };
1880
2133
  return /* @__PURE__ */ jsxs(Fragment, { children: [
1881
- /* @__PURE__ */ jsx(Typography10, { variant: "h6", gutterBottom: true, children: "Type" }),
1882
- /* @__PURE__ */ jsx(FormGroup, { children: FILTER_TYPES.map((type) => /* @__PURE__ */ jsx(
2134
+ /* @__PURE__ */ jsx(Typography4, { variant: "h6", gutterBottom: true, children: "Type" }),
2135
+ /* @__PURE__ */ jsx(FormGroup, { children: types.map((type) => /* @__PURE__ */ jsx(
1883
2136
  FormControlLabel,
1884
2137
  {
1885
2138
  control: /* @__PURE__ */ jsx(
@@ -1887,7 +2140,8 @@ var TypeFilter = ({ onChange }) => {
1887
2140
  {
1888
2141
  checked: selectedTypes.includes(type.id),
1889
2142
  onChange: () => handleTypeChange(type.id),
1890
- disabled: type.disabled
2143
+ disabled: type.id === "event",
2144
+ title: type.id === "event" ? "Coming soon! Currently only player and table search are supported." : ""
1891
2145
  }
1892
2146
  ),
1893
2147
  label: type.label
@@ -1898,22 +2152,67 @@ var TypeFilter = ({ onChange }) => {
1898
2152
  };
1899
2153
  var TypeFilter_default = TypeFilter;
1900
2154
  var FiltersContainer = ({
2155
+ initialSelectedTypes = [],
2156
+ initialSelectedTags,
2157
+ initialTextSearch,
2158
+ includeExpiredTables = false,
1901
2159
  onTypeChange,
1902
2160
  onTagChange,
2161
+ onTextSearchChange,
2162
+ onIncludeExpiredTablesChange,
1903
2163
  onSubmit,
1904
- tags
2164
+ tags,
2165
+ searchTypes
1905
2166
  }) => {
2167
+ const [selectedTypes, setSelectedTypes] = React7.useState(initialSelectedTypes);
2168
+ useEffect(() => {
2169
+ setSelectedTypes(initialSelectedTypes);
2170
+ }, [initialSelectedTypes]);
2171
+ const handleTypeChange = (types) => {
2172
+ setSelectedTypes(types);
2173
+ if (onTypeChange) {
2174
+ onTypeChange(types);
2175
+ }
2176
+ };
1906
2177
  return /* @__PURE__ */ jsxs(Box2, { children: [
1907
- /* @__PURE__ */ jsx(TypeFilter_default, { onChange: onTypeChange }),
1908
- /* @__PURE__ */ jsx(Divider2, { sx: { my: 2 } }),
2178
+ /* @__PURE__ */ jsx(
2179
+ TypeFilter_default,
2180
+ {
2181
+ types: searchTypes,
2182
+ initialSelectedTypes,
2183
+ onChange: handleTypeChange
2184
+ }
2185
+ ),
2186
+ /* @__PURE__ */ jsx(Divider3, { sx: { my: 2 } }),
2187
+ /* @__PURE__ */ jsx(
2188
+ TextSearchCard_default,
2189
+ {
2190
+ selectedTypes,
2191
+ initialTextSearch,
2192
+ onChange: onTextSearchChange
2193
+ }
2194
+ ),
2195
+ (selectedTypes.includes("table") || selectedTypes.includes("event")) && /* @__PURE__ */ jsx(Divider3, { sx: { my: 2 } }),
1909
2196
  /* @__PURE__ */ jsx(
1910
2197
  TagsFilter_default,
1911
2198
  {
1912
2199
  tags,
2200
+ initialSelectedTags,
1913
2201
  onChange: onTagChange
1914
2202
  }
1915
2203
  ),
1916
- /* @__PURE__ */ jsx(Divider2, { sx: { my: 2 } }),
2204
+ /* @__PURE__ */ jsx(Divider3, { sx: { my: 2 } }),
2205
+ selectedTypes.includes("table") && /* @__PURE__ */ jsxs(Fragment, { children: [
2206
+ /* @__PURE__ */ jsx(
2207
+ ExpiredTablesFilter_default,
2208
+ {
2209
+ includeExpiredTables,
2210
+ onChange: onIncludeExpiredTablesChange || (() => {
2211
+ })
2212
+ }
2213
+ ),
2214
+ /* @__PURE__ */ jsx(Divider3, { sx: { my: 2 } })
2215
+ ] }),
1917
2216
  /* @__PURE__ */ jsx(Box2, { sx: { display: "flex", justifyContent: "center", mt: 2 }, children: /* @__PURE__ */ jsx(
1918
2217
  Button7,
1919
2218
  {
@@ -1971,16 +2270,75 @@ var SearchResultCard_default = SearchResultCard;
1971
2270
  function SearchPageLayout({
1972
2271
  results,
1973
2272
  title = "Search Results",
2273
+ initialSelectedTypes = [],
2274
+ initialSelectedTags = {
2275
+ mustHave: [],
2276
+ mustNotHave: [],
2277
+ shouldHaveAtLeastOne: []
2278
+ },
2279
+ initialTextSearch = {
2280
+ query: "",
2281
+ titleOnly: false
2282
+ },
2283
+ includeExpiredTables: initialIncludeExpiredTables = false,
1974
2284
  onTypeChange,
1975
2285
  onTagChange,
2286
+ onTextSearchChange,
2287
+ onIncludeExpiredTablesChange,
1976
2288
  onSubmit,
1977
2289
  onResultClick,
2290
+ onPacketChange,
2291
+ pagination,
1978
2292
  validTags,
1979
- allTags
2293
+ allTags,
2294
+ searchTypes,
2295
+ isLoading = false
1980
2296
  }) {
1981
- "use client";
1982
2297
  const theme = useTheme();
1983
2298
  const isMobile = useMediaQuery(theme.breakpoints.down("md"));
2299
+ const [selectedTypes, setSelectedTypes] = useState(initialSelectedTypes);
2300
+ const [selectedTags, setSelectedTags] = useState(initialSelectedTags);
2301
+ const [textSearch, setTextSearch] = useState(initialTextSearch);
2302
+ const [includeExpiredTables, setIncludeExpiredTables] = useState(initialIncludeExpiredTables);
2303
+ useEffect(() => {
2304
+ setSelectedTypes(initialSelectedTypes);
2305
+ }, [initialSelectedTypes]);
2306
+ useEffect(() => {
2307
+ setSelectedTags(initialSelectedTags);
2308
+ }, [initialSelectedTags]);
2309
+ useEffect(() => {
2310
+ setTextSearch(initialTextSearch);
2311
+ }, [initialTextSearch]);
2312
+ useEffect(() => {
2313
+ setIncludeExpiredTables(initialIncludeExpiredTables);
2314
+ }, [initialIncludeExpiredTables]);
2315
+ const handleTypeChange = (types) => {
2316
+ setSelectedTypes(types);
2317
+ if (onTypeChange) onTypeChange(types);
2318
+ };
2319
+ const handleTagChange = (tags) => {
2320
+ setSelectedTags(tags);
2321
+ if (onTagChange) onTagChange(tags);
2322
+ };
2323
+ const handleTextSearchChange = (ts) => {
2324
+ setTextSearch(ts);
2325
+ if (onTextSearchChange) onTextSearchChange(ts);
2326
+ };
2327
+ const handleIncludeExpiredTablesChange = (include) => {
2328
+ setIncludeExpiredTables(include);
2329
+ if (onIncludeExpiredTablesChange) onIncludeExpiredTablesChange(include);
2330
+ };
2331
+ const handleSubmit = () => {
2332
+ const currentCriteria = {
2333
+ selectedTypes,
2334
+ selectedTags,
2335
+ textSearch,
2336
+ includeExpiredTables
2337
+ };
2338
+ if (onSubmit) {
2339
+ onSubmit(currentCriteria);
2340
+ }
2341
+ };
1984
2342
  return /* @__PURE__ */ jsxs(Box2, { sx: { padding: 2 }, children: [
1985
2343
  /* @__PURE__ */ jsx(Card10, { sx: { marginBottom: 2 }, children: /* @__PURE__ */ jsx(
1986
2344
  CardHeader4,
@@ -1994,8 +2352,8 @@ function SearchPageLayout({
1994
2352
  }
1995
2353
  }
1996
2354
  ) }),
1997
- /* @__PURE__ */ jsxs(Grid9, { container: true, spacing: 2, children: [
1998
- /* @__PURE__ */ jsx(Grid9, { size: { xs: 12, md: 3 }, children: /* @__PURE__ */ jsxs(Card10, { sx: { marginBottom: isMobile ? 2 : 0 }, children: [
2355
+ /* @__PURE__ */ jsxs(Grid8, { container: true, spacing: 2, children: [
2356
+ /* @__PURE__ */ jsx(Grid8, { size: { xs: 12, md: 3 }, children: /* @__PURE__ */ jsxs(Card10, { sx: { marginBottom: isMobile ? 2 : 0 }, children: [
1999
2357
  /* @__PURE__ */ jsx(
2000
2358
  CardHeader4,
2001
2359
  {
@@ -2011,14 +2369,21 @@ function SearchPageLayout({
2011
2369
  /* @__PURE__ */ jsx(CardContent10, { children: /* @__PURE__ */ jsx(
2012
2370
  FiltersContainer_default,
2013
2371
  {
2014
- onTypeChange,
2015
- onTagChange,
2016
- onSubmit,
2017
- tags: validTags
2372
+ initialSelectedTypes: selectedTypes,
2373
+ initialSelectedTags: selectedTags,
2374
+ initialTextSearch: textSearch,
2375
+ includeExpiredTables,
2376
+ onTypeChange: handleTypeChange,
2377
+ onTagChange: handleTagChange,
2378
+ onTextSearchChange: handleTextSearchChange,
2379
+ onIncludeExpiredTablesChange: handleIncludeExpiredTablesChange,
2380
+ onSubmit: handleSubmit,
2381
+ tags: validTags,
2382
+ searchTypes
2018
2383
  }
2019
2384
  ) })
2020
2385
  ] }) }),
2021
- /* @__PURE__ */ jsx(Grid9, { size: { xs: 12, md: 9 }, children: /* @__PURE__ */ jsxs(Card10, { children: [
2386
+ /* @__PURE__ */ jsx(Grid8, { size: { xs: 12, md: 9 }, children: /* @__PURE__ */ jsxs(Card10, { children: [
2022
2387
  /* @__PURE__ */ jsx(
2023
2388
  CardHeader4,
2024
2389
  {
@@ -2031,10 +2396,12 @@ function SearchPageLayout({
2031
2396
  }
2032
2397
  }
2033
2398
  ),
2034
- /* @__PURE__ */ jsx(CardContent10, { children: /* @__PURE__ */ jsx(
2399
+ /* @__PURE__ */ jsx(CardContent10, { children: isLoading ? /* @__PURE__ */ jsx(Box2, { sx: { display: "flex", justifyContent: "center", py: 8 }, children: /* @__PURE__ */ jsx(CircularProgress3, { size: 60, thickness: 4 }) }) : /* @__PURE__ */ jsx(
2035
2400
  ResultsContainer_default,
2036
2401
  {
2037
2402
  results,
2403
+ pagination,
2404
+ onPacketChange,
2038
2405
  onResultClick,
2039
2406
  tags: allTags
2040
2407
  }
@@ -2136,14 +2503,14 @@ var PlayerHighlightsCard = function(props) {
2136
2503
  removeFromTable
2137
2504
  } = props;
2138
2505
  return /* @__PURE__ */ jsx(Card, { elevation: 3, sx: { backgroundColor: canEdit ? "#fffbea" : "#f5f9fa", marginBottom: "6px" }, children: /* @__PURE__ */ jsxs(CardContent, { children: [
2139
- /* @__PURE__ */ jsxs(Grid9, { container: true, spacing: 2, direction: "column", children: [
2140
- /* @__PURE__ */ jsxs(Grid9, { container: true, direction: "row", children: [
2141
- /* @__PURE__ */ jsx(Grid9, { children: /* @__PURE__ */ jsx(Image2, { alt: player.username + "'s profile pic", height: 64, src: player.miniPic || "", width: 64 }) }),
2142
- /* @__PURE__ */ jsx(Grid9, { children: /* @__PURE__ */ jsx(Typography, { variant: "h5", children: player.username }) })
2506
+ /* @__PURE__ */ jsxs(Grid8, { container: true, spacing: 2, direction: "column", children: [
2507
+ /* @__PURE__ */ jsxs(Grid8, { container: true, direction: "row", children: [
2508
+ /* @__PURE__ */ jsx(Grid8, { children: /* @__PURE__ */ jsx(Image2, { alt: player.username + "'s profile pic", height: 64, src: player.miniPic || "", width: 64 }) }),
2509
+ /* @__PURE__ */ jsx(Grid8, { children: /* @__PURE__ */ jsx(Typography, { variant: "h5", children: player.username }) })
2143
2510
  ] }),
2144
- /* @__PURE__ */ jsx(Grid9, { children: renderTagsFromIds(player.tags, allTags) })
2511
+ /* @__PURE__ */ jsx(Grid8, { children: renderTagsFromIds(player.tags, allTags) })
2145
2512
  ] }),
2146
- canEdit && /* @__PURE__ */ jsxs(Grid9, { children: [
2513
+ canEdit && /* @__PURE__ */ jsxs(Grid8, { children: [
2147
2514
  /* @__PURE__ */ jsx(Button7, { onClick: () => removeFromTable(player), children: isWaitList ? /* @__PURE__ */ jsx("p", { children: "Deny Player" }) : /* @__PURE__ */ jsx("p", { children: "Remove Player" }) }),
2148
2515
  canChangeDungeonMaster && /* @__PURE__ */ jsx(Button7, { onClick: () => {
2149
2516
  handleAssignToDungeonMaster(player);
@@ -2155,11 +2522,11 @@ var PlayerHighlightsCard = function(props) {
2155
2522
  var DMHighlightsCard = function({ canEdit, player, allTags }) {
2156
2523
  return /* @__PURE__ */ jsxs(Card, { elevation: 3, sx: { backgroundColor: "#f5f9fa", marginBottom: "6px" }, children: [
2157
2524
  /* @__PURE__ */ jsx(CardHeader, { slotProps: { title: { variant: "h4" } }, title: "Game Master" }),
2158
- /* @__PURE__ */ jsx(CardContent, { sx: { backgroundColor: canEdit ? "#fffbea" : "inherit" }, children: /* @__PURE__ */ jsxs(Grid9, { container: true, spacing: 2, direction: "column", children: [
2159
- /* @__PURE__ */ jsx(Grid9, { children: /* @__PURE__ */ jsx(Typography, { variant: "h5", children: player.username }) }),
2160
- /* @__PURE__ */ jsxs(Grid9, { container: true, direction: "row", children: [
2161
- /* @__PURE__ */ jsx(Grid9, { children: /* @__PURE__ */ jsx(Image2, { alt: player.username + "'s profile pic", height: 120, src: player.imageUrl ? player.imageUrl : "", width: 256 }) }),
2162
- /* @__PURE__ */ jsx(Grid9, { children: renderTagsFromIds(player.tags, allTags) }),
2525
+ /* @__PURE__ */ jsx(CardContent, { sx: { backgroundColor: canEdit ? "#fffbea" : "inherit" }, children: /* @__PURE__ */ jsxs(Grid8, { container: true, spacing: 2, direction: "column", children: [
2526
+ /* @__PURE__ */ jsx(Grid8, { children: /* @__PURE__ */ jsx(Typography, { variant: "h5", children: player.username }) }),
2527
+ /* @__PURE__ */ jsxs(Grid8, { container: true, direction: "row", children: [
2528
+ /* @__PURE__ */ jsx(Grid8, { children: /* @__PURE__ */ jsx(Image2, { alt: player.username + "'s profile pic", height: 120, src: player.imageUrl ? player.imageUrl : "", width: 256 }) }),
2529
+ /* @__PURE__ */ jsx(Grid8, { children: renderTagsFromIds(player.tags, allTags) }),
2163
2530
  /* @__PURE__ */ jsx(Typography, { children: player.description })
2164
2531
  ] })
2165
2532
  ] }) })
@@ -2313,6 +2680,87 @@ var NextGameCountdown = ({ nextGameTime }) => {
2313
2680
  timeLeft
2314
2681
  ] });
2315
2682
  };
2683
+ function TagEditor({
2684
+ title = "Tags",
2685
+ selectedTags,
2686
+ possibleTags,
2687
+ onToggleTag
2688
+ }) {
2689
+ const [inputValue, setInputValue] = useState("");
2690
+ const selectedIds = useMemo(() => selectedTags.map((tag) => tag.id), [selectedTags]);
2691
+ const options = useMemo(
2692
+ () => possibleTags.map((tag) => ({ value: tag.id, label: tag.label })),
2693
+ [possibleTags]
2694
+ );
2695
+ return /* @__PURE__ */ jsx(Grid8, { container: true, children: /* @__PURE__ */ jsx(Grid8, { size: { xs: 12 }, children: /* @__PURE__ */ jsxs(Card10, { children: [
2696
+ /* @__PURE__ */ jsx(
2697
+ CardHeader4,
2698
+ {
2699
+ title,
2700
+ style: {
2701
+ background: "linear-gradient(135deg, rgba(25, 118, 210, 0.8), rgba(25, 118, 210, 1))",
2702
+ color: "#FFFFFF",
2703
+ fontSize: "1.5rem",
2704
+ textShadow: "0px 3px 6px rgba(0, 0, 0, 0.5)"
2705
+ }
2706
+ }
2707
+ ),
2708
+ /* @__PURE__ */ jsxs(CardContent10, { children: [
2709
+ /* @__PURE__ */ jsx("div", { className: "mt-2 flex flex-wrap gap-2", children: selectedTags.map((tag) => /* @__PURE__ */ jsx(
2710
+ Chip,
2711
+ {
2712
+ tag,
2713
+ removeCallback: () => onToggleTag(tag.id)
2714
+ },
2715
+ tag.id
2716
+ )) }),
2717
+ /* @__PURE__ */ jsx(Grid8, { container: true, spacing: 3, children: /* @__PURE__ */ jsx(Grid8, { sx: { marginTop: 3, width: "100%" }, children: /* @__PURE__ */ jsx(
2718
+ Autocomplete,
2719
+ {
2720
+ options,
2721
+ filterOptions: (availableOptions, state) => availableOptions.filter(
2722
+ (option) => !selectedIds.includes(option.value) && option.label.toLowerCase().includes(state.inputValue.toLowerCase())
2723
+ ).slice(0, 3),
2724
+ value: null,
2725
+ inputValue,
2726
+ onInputChange: (event, newInputValue) => {
2727
+ if (event && event.type === "change") {
2728
+ setInputValue(newInputValue);
2729
+ }
2730
+ },
2731
+ onChange: (event, newValue) => {
2732
+ if (newValue) {
2733
+ onToggleTag(newValue.value);
2734
+ }
2735
+ setInputValue("");
2736
+ },
2737
+ slots: { popper: CustomPopper3 },
2738
+ renderInput: (params) => /* @__PURE__ */ jsx(TextField4, { ...params, label: "Select Tags" })
2739
+ },
2740
+ selectedIds.join("-")
2741
+ ) }) })
2742
+ ] })
2743
+ ] }) }) });
2744
+ }
2745
+ var CustomPopper3 = (props) => {
2746
+ return /* @__PURE__ */ jsx(
2747
+ Popper,
2748
+ {
2749
+ ...props,
2750
+ modifiers: [
2751
+ {
2752
+ name: "preventOverflow",
2753
+ options: { boundary: "viewport" }
2754
+ },
2755
+ {
2756
+ name: "offset",
2757
+ options: { offset: [0, -10] }
2758
+ }
2759
+ ],
2760
+ placement: "top-start"
2761
+ }
2762
+ );
2763
+ };
2316
2764
  function TablePageLayout(props) {
2317
2765
  var _a;
2318
2766
  const { allTags, dungeonMaster, onDeleteTable, onJoinWaitlist, onLeaveTable, onSaveDraft, players, table, tableStatus, waitlistPlayers } = props;
@@ -2383,9 +2831,9 @@ function TablePageLayout(props) {
2383
2831
  p: 2,
2384
2832
  boxShadow: "0px 8px 15px rgba(25, 118, 210, 0.3)"
2385
2833
  },
2386
- children: /* @__PURE__ */ jsxs(Grid9, { container: true, direction: "column", children: [
2834
+ children: /* @__PURE__ */ jsxs(Grid8, { container: true, direction: "column", children: [
2387
2835
  /* @__PURE__ */ jsxs(
2388
- Grid9,
2836
+ Grid8,
2389
2837
  {
2390
2838
  container: true,
2391
2839
  direction: "column",
@@ -2430,7 +2878,7 @@ function TablePageLayout(props) {
2430
2878
  value: currentShortDescription
2431
2879
  }
2432
2880
  ) : /* @__PURE__ */ jsx(Typography, { sx: { color: "white", opacity: 0.95 }, children: currentShortDescription }),
2433
- /* @__PURE__ */ jsx(Grid9, { container: true, children: isTableInEditMode ? renderEditableTags(currentTags, allTags, handleToggleTag) : renderTags(currentTagIds, allTags) }),
2881
+ /* @__PURE__ */ jsx(Grid8, { container: true, children: isTableInEditMode ? renderEditableTags(currentTags, allTags, handleToggleTag) : renderTags(currentTagIds, allTags) }),
2434
2882
  /* @__PURE__ */ jsx(
2435
2883
  TableActionsBar,
2436
2884
  {
@@ -2450,8 +2898,8 @@ function TablePageLayout(props) {
2450
2898
  ]
2451
2899
  }
2452
2900
  ),
2453
- /* @__PURE__ */ jsxs(Grid9, { container: true, spacing: 2, sx: { mt: 2 }, children: [
2454
- /* @__PURE__ */ jsx(Grid9, { size: { xs: 12, md: 8 }, children: /* @__PURE__ */ jsx(Card, { sx: { height: "100%" }, children: /* @__PURE__ */ jsx(CardContent, { children: isTableInEditMode ? /* @__PURE__ */ jsx(
2901
+ /* @__PURE__ */ jsxs(Grid8, { container: true, spacing: 2, sx: { mt: 2 }, children: [
2902
+ /* @__PURE__ */ jsx(Grid8, { size: { xs: 12, md: 8 }, children: /* @__PURE__ */ jsx(Card, { sx: { height: "100%" }, children: /* @__PURE__ */ jsx(CardContent, { children: isTableInEditMode ? /* @__PURE__ */ jsx(
2455
2903
  AutoResizingTextarea_default,
2456
2904
  {
2457
2905
  isInEditMode: isTableInEditMode,
@@ -2460,7 +2908,7 @@ function TablePageLayout(props) {
2460
2908
  value: currentDescription
2461
2909
  }
2462
2910
  ) : /* @__PURE__ */ jsx(Typography, { sx: { whiteSpace: "pre-wrap" }, children: currentDescription }) }) }) }),
2463
- /* @__PURE__ */ jsxs(Grid9, { size: { xs: 12, md: 4 }, children: [
2911
+ /* @__PURE__ */ jsxs(Grid8, { size: { xs: 12, md: 4 }, children: [
2464
2912
  /* @__PURE__ */ jsx(DMHighlightsCard, { canEdit: isTableInEditMode, player: currentDungeonMaster, allTags }),
2465
2913
  /* @__PURE__ */ jsxs(Card, { sx: { height: "100%" }, children: [
2466
2914
  /* @__PURE__ */ jsx(CardHeader, { slotProps: { title: { variant: "h4" } }, title: "Players: " }),
@@ -2487,13 +2935,13 @@ var renderTags = function(tags, allTags) {
2487
2935
  if (!tags || !allTags) {
2488
2936
  return /* @__PURE__ */ jsx(Fragment, {});
2489
2937
  }
2490
- return /* @__PURE__ */ jsx(Grid9, { container: true, spacing: 1, sx: { pb: 1.5 }, children: tags.map((tagId) => {
2938
+ return /* @__PURE__ */ jsx(Grid8, { container: true, spacing: 1, sx: { pb: 1.5 }, children: tags.map((tagId) => {
2491
2939
  const tag = allTags.find((potentialTag) => tagId === potentialTag.id);
2492
2940
  return tag ? generateTagsDisplay(tag) : /* @__PURE__ */ jsx(Fragment, {});
2493
2941
  }) });
2494
2942
  };
2495
2943
  var renderEditableTags = function(selectedTags, allTags, onToggleTag) {
2496
- return /* @__PURE__ */ jsx(Grid9, { size: { xs: 12 }, sx: { pb: 1.5 }, children: /* @__PURE__ */ jsx(
2944
+ return /* @__PURE__ */ jsx(Grid8, { size: { xs: 12 }, sx: { pb: 1.5 }, children: /* @__PURE__ */ jsx(
2497
2945
  TagEditor,
2498
2946
  {
2499
2947
  title: "Table Tags",
@@ -2508,6 +2956,6 @@ var renderEditableTags = function(selectedTags, allTags, onToggleTag) {
2508
2956
  };
2509
2957
  var TablePageLayout_default = TablePageLayout;
2510
2958
 
2511
- export { AutoResizingTextarea_default as AutoResizingTextarea, BaseSearchResultCard_default as BaseSearchResultCard, CANDIDATE_TIMEZONES, Chip, DMHighlightsCard, EventBanner, EventBannerEdit, EventBasicInfo, EventBasicInfoEdit, EventEditProvider, EventPageLayout, EventResultCard_default as EventResultCard, EventTablesCard_default as EventTablesCard, FiltersContainer_default as FiltersContainer, GameTableProvider, ModalContext, ModalProvider_default as ModalProvider, NextGameCountdown, PlayerDetailsCard_default as PlayerDetailsCard, PlayerDisplayCard_default as PlayerDisplayCard, PlayerHighlightsCard, PlayerPromptCard_default as PlayerPromptCard, PlayerResultCard_default as PlayerResultCard, PlayerTagsCard, PlayerTagsEdit, PlayersScrollableList_default as PlayersScrollableList, ResultsContainer_default as ResultsContainer, ScrollableResultsList_default as ScrollableResultsList, SearchPageLayout, SearchResultCard_default as SearchResultCard, SortOptions_default as SortOptions, TableActionsBar, TablePageLayout_default as TablePageLayout, TableResultCard_default as TableResultCard, TablesScrollableList_default as TablesScrollableList, TagEditor, TagsFilter_default as TagsFilter, TypeFilter_default as TypeFilter, generateTagsDisplay, renderTagsFromIds, useEventEdit, useGameTableContext, useModal };
2959
+ export { AutoResizingTextarea_default as AutoResizingTextarea, BaseSearchResultCard_default as BaseSearchResultCard, CANDIDATE_TIMEZONES, Chip, DMHighlightsCard, EventBanner, EventBannerEdit, EventBasicInfo, EventBasicInfoEdit, EventEditProvider, EventPageLayout, EventResultCard_default as EventResultCard, EventTablesCard_default as EventTablesCard, ExpiredTablesFilter_default as ExpiredTablesFilter, FiltersContainer_default as FiltersContainer, GameTableProvider, ModalContext, ModalProvider_default as ModalProvider, NextGameCountdown, NextGameLabel_default as NextGameLabel, PlayerDetailsCard_default as PlayerDetailsCard, PlayerDisplayCard_default as PlayerDisplayCard, PlayerHighlightsCard, PlayerPageLayout, PlayerPromptCard_default as PlayerPromptCard, PlayerResultCard_default as PlayerResultCard, PlayerTagsCard_default as PlayerTagsCard, PlayerTagsEdit_default as PlayerTagsEdit, PlayersScrollableList_default as PlayersScrollableList, ResultsContainer_default as ResultsContainer, ScrollableResultsList_default as ScrollableResultsList, SearchPageLayout, SearchResultCard_default as SearchResultCard, SortOptions_default as SortOptions, TableActionsBar, TablePageLayout_default as TablePageLayout, TableResultCard_default as TableResultCard, TablesScrollableList_default as TablesScrollableList, TagEditor, TagsFilter_default as TagsFilter, TextSearchCard_default as TextSearchCard, TypeFilter_default as TypeFilter, generateTagsDisplay, renderTagsFromIds, useEventEdit, useGameTableContext, useModal };
2512
2960
  //# sourceMappingURL=index.mjs.map
2513
2961
  //# sourceMappingURL=index.mjs.map