@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.cjs CHANGED
@@ -11,28 +11,34 @@ 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 Grid9 = require('@mui/material/Grid');
14
+ var Grid8 = 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');
18
- var Divider2 = require('@mui/material/Divider');
18
+ var Divider3 = require('@mui/material/Divider');
19
+ var Typography4 = require('@mui/material/Typography');
20
+ var Pagination = require('@mui/material/Pagination');
19
21
  var Avatar = require('@mui/material/Avatar');
20
- var CasinoIcon = require('@mui/icons-material/Casino');
22
+ var Chip2 = require('@mui/material/Chip');
23
+ var LinearProgress = require('@mui/material/LinearProgress');
24
+ var PersonIcon = require('@mui/icons-material/Person');
25
+ var SupervisorAccountIcon = require('@mui/icons-material/SupervisorAccount');
26
+ var TableRestaurantIcon = require('@mui/icons-material/TableRestaurant');
21
27
  var CalendarTodayIcon = require('@mui/icons-material/CalendarToday');
22
28
  var LocationOnIcon = require('@mui/icons-material/LocationOn');
23
29
  var EventIcon = require('@mui/icons-material/Event');
24
30
  var Autocomplete = require('@mui/material/Autocomplete');
25
31
  var Popper = require('@mui/material/Popper');
26
- var TextField3 = require('@mui/material/TextField');
27
- var Typography10 = require('@mui/material/Typography');
32
+ var FormControlLabel = require('@mui/material/FormControlLabel');
33
+ var Checkbox = require('@mui/material/Checkbox');
28
34
  var FormControl2 = require('@mui/material/FormControl');
29
35
  var RadioGroup = require('@mui/material/RadioGroup');
30
- var FormControlLabel = require('@mui/material/FormControlLabel');
31
36
  var Radio = require('@mui/material/Radio');
37
+ var TextField4 = require('@mui/material/TextField');
32
38
  var FormGroup = require('@mui/material/FormGroup');
33
- var Checkbox = require('@mui/material/Checkbox');
34
39
  var Button7 = require('@mui/material/Button');
35
40
  var SearchIcon = require('@mui/icons-material/Search');
41
+ var CircularProgress3 = require('@mui/material/CircularProgress');
36
42
  var Image2 = require('next/image');
37
43
  var ListIcon = require('@mui/icons-material/List');
38
44
  var SaveIcon = require('@mui/icons-material/Save');
@@ -47,28 +53,34 @@ var ColorizeIcon__default = /*#__PURE__*/_interopDefault(ColorizeIcon);
47
53
  var CancelIcon__default = /*#__PURE__*/_interopDefault(CancelIcon);
48
54
  var CheckCircleIcon__default = /*#__PURE__*/_interopDefault(CheckCircleIcon);
49
55
  var Box2__default = /*#__PURE__*/_interopDefault(Box2);
50
- var Grid9__default = /*#__PURE__*/_interopDefault(Grid9);
56
+ var Grid8__default = /*#__PURE__*/_interopDefault(Grid8);
51
57
  var Card10__default = /*#__PURE__*/_interopDefault(Card10);
52
58
  var CardContent10__default = /*#__PURE__*/_interopDefault(CardContent10);
53
59
  var CardHeader4__default = /*#__PURE__*/_interopDefault(CardHeader4);
54
- var Divider2__default = /*#__PURE__*/_interopDefault(Divider2);
60
+ var Divider3__default = /*#__PURE__*/_interopDefault(Divider3);
61
+ var Typography4__default = /*#__PURE__*/_interopDefault(Typography4);
62
+ var Pagination__default = /*#__PURE__*/_interopDefault(Pagination);
55
63
  var Avatar__default = /*#__PURE__*/_interopDefault(Avatar);
56
- var CasinoIcon__default = /*#__PURE__*/_interopDefault(CasinoIcon);
64
+ var Chip2__default = /*#__PURE__*/_interopDefault(Chip2);
65
+ var LinearProgress__default = /*#__PURE__*/_interopDefault(LinearProgress);
66
+ var PersonIcon__default = /*#__PURE__*/_interopDefault(PersonIcon);
67
+ var SupervisorAccountIcon__default = /*#__PURE__*/_interopDefault(SupervisorAccountIcon);
68
+ var TableRestaurantIcon__default = /*#__PURE__*/_interopDefault(TableRestaurantIcon);
57
69
  var CalendarTodayIcon__default = /*#__PURE__*/_interopDefault(CalendarTodayIcon);
58
70
  var LocationOnIcon__default = /*#__PURE__*/_interopDefault(LocationOnIcon);
59
71
  var EventIcon__default = /*#__PURE__*/_interopDefault(EventIcon);
60
72
  var Autocomplete__default = /*#__PURE__*/_interopDefault(Autocomplete);
61
73
  var Popper__default = /*#__PURE__*/_interopDefault(Popper);
62
- var TextField3__default = /*#__PURE__*/_interopDefault(TextField3);
63
- var Typography10__default = /*#__PURE__*/_interopDefault(Typography10);
74
+ var FormControlLabel__default = /*#__PURE__*/_interopDefault(FormControlLabel);
75
+ var Checkbox__default = /*#__PURE__*/_interopDefault(Checkbox);
64
76
  var FormControl2__default = /*#__PURE__*/_interopDefault(FormControl2);
65
77
  var RadioGroup__default = /*#__PURE__*/_interopDefault(RadioGroup);
66
- var FormControlLabel__default = /*#__PURE__*/_interopDefault(FormControlLabel);
67
78
  var Radio__default = /*#__PURE__*/_interopDefault(Radio);
79
+ var TextField4__default = /*#__PURE__*/_interopDefault(TextField4);
68
80
  var FormGroup__default = /*#__PURE__*/_interopDefault(FormGroup);
69
- var Checkbox__default = /*#__PURE__*/_interopDefault(Checkbox);
70
81
  var Button7__default = /*#__PURE__*/_interopDefault(Button7);
71
82
  var SearchIcon__default = /*#__PURE__*/_interopDefault(SearchIcon);
83
+ var CircularProgress3__default = /*#__PURE__*/_interopDefault(CircularProgress3);
72
84
  var Image2__default = /*#__PURE__*/_interopDefault(Image2);
73
85
  var ListIcon__default = /*#__PURE__*/_interopDefault(ListIcon);
74
86
  var SaveIcon__default = /*#__PURE__*/_interopDefault(SaveIcon);
@@ -516,7 +528,7 @@ function EventBasicInfo(props) {
516
528
  );
517
529
  }
518
530
  function EventBasicInfoView({ description, locationId, startingDate, endingDate, timeInfo, timezone, isOwner, onEdit }) {
519
- return /* @__PURE__ */ jsxRuntime.jsx(Grid9__default.default, { sx: { position: "relative" }, children: /* @__PURE__ */ jsxRuntime.jsx(material.Card, { style: {
531
+ return /* @__PURE__ */ jsxRuntime.jsx(Grid8__default.default, { sx: { position: "relative" }, children: /* @__PURE__ */ jsxRuntime.jsx(material.Card, { style: {
520
532
  boxShadow: "0px 4px 10px rgba(0, 0, 0, 0.1)",
521
533
  background: "linear-gradient(135deg, rgba(225, 225, 225, 1), rgba(250, 250, 250, 1))"
522
534
  }, children: /* @__PURE__ */ jsxRuntime.jsxs(material.CardContent, { children: [
@@ -800,7 +812,7 @@ function EventBannerView({
800
812
  }) {
801
813
  const backgroundColor = bannerColor || "linear-gradient(135deg, rgba(25,118,210,0.8), rgba(25,118,210,1))";
802
814
  return /* @__PURE__ */ jsxRuntime.jsxs(
803
- Grid9__default.default,
815
+ Grid8__default.default,
804
816
  {
805
817
  sx: {
806
818
  background: backgroundColor,
@@ -808,7 +820,7 @@ function EventBannerView({
808
820
  position: "relative"
809
821
  },
810
822
  children: [
811
- /* @__PURE__ */ jsxRuntime.jsxs(Grid9__default.default, { children: [
823
+ /* @__PURE__ */ jsxRuntime.jsxs(Grid8__default.default, { children: [
812
824
  /* @__PURE__ */ jsxRuntime.jsxs(
813
825
  material.Box,
814
826
  {
@@ -867,7 +879,7 @@ function EventBannerView({
867
879
  }
868
880
  ),
869
881
  /* @__PURE__ */ jsxRuntime.jsxs(
870
- Grid9__default.default,
882
+ Grid8__default.default,
871
883
  {
872
884
  display: "flex",
873
885
  justifyContent: "center",
@@ -975,6 +987,14 @@ var generateLink = function(link) {
975
987
  link.text
976
988
  );
977
989
  };
990
+ var NextGameLabel = ({ nextGameTime }) => {
991
+ const date = typeof nextGameTime === "string" ? new Date(nextGameTime) : nextGameTime;
992
+ return /* @__PURE__ */ jsxRuntime.jsxs(material.Typography, { variant: "caption", sx: { display: "block", mb: 1, color: "primary.main", fontWeight: "bold" }, children: [
993
+ "Next Game: ",
994
+ date.toLocaleString()
995
+ ] });
996
+ };
997
+ var NextGameLabel_default = NextGameLabel;
978
998
  var BaseSearchResultCard = ({
979
999
  result,
980
1000
  onClick,
@@ -982,13 +1002,19 @@ var BaseSearchResultCard = ({
982
1002
  icon,
983
1003
  tags
984
1004
  }) => {
985
- const handleClick = () => {
1005
+ const handleClick = (e) => {
986
1006
  if (onClick) {
987
- onClick(result.id);
1007
+ if (e.ctrlKey || e.metaKey || e.shiftKey) {
1008
+ e.stopPropagation();
1009
+ const url = `/${result.type}/${result.id}`;
1010
+ window.open(url, "_blank");
1011
+ } else {
1012
+ onClick(result.id);
1013
+ }
988
1014
  }
989
1015
  };
990
1016
  return /* @__PURE__ */ jsxRuntime.jsx(
991
- material.Card,
1017
+ Card10__default.default,
992
1018
  {
993
1019
  elevation: 6,
994
1020
  sx: {
@@ -1001,48 +1027,22 @@ var BaseSearchResultCard = ({
1001
1027
  },
1002
1028
  marginBottom: 2
1003
1029
  },
1004
- onClick: handleClick,
1005
- children: /* @__PURE__ */ jsxRuntime.jsxs(material.CardContent, { sx: { display: "flex", alignItems: "flex-start" }, children: [
1006
- icon && /* @__PURE__ */ jsxRuntime.jsx(material.Box, { sx: { mr: 2, display: "flex", alignItems: "center", pt: 0.5 }, children: icon }),
1007
- /* @__PURE__ */ jsxRuntime.jsxs(material.Box, { sx: { flex: 1 }, children: [
1008
- /* @__PURE__ */ jsxRuntime.jsx(material.Typography, { variant: "h6", sx: { mb: 1 }, children: result.title }),
1030
+ onClick: (e) => handleClick(e),
1031
+ children: /* @__PURE__ */ jsxRuntime.jsxs(CardContent10__default.default, { sx: { display: "flex", alignItems: "flex-start" }, children: [
1032
+ icon && /* @__PURE__ */ jsxRuntime.jsx(Box2__default.default, { sx: { mr: 2, display: "flex", alignItems: "center", pt: 0.5 }, children: icon }),
1033
+ /* @__PURE__ */ jsxRuntime.jsxs(Box2__default.default, { sx: { flex: 1 }, children: [
1034
+ /* @__PURE__ */ jsxRuntime.jsx(Typography4__default.default, { variant: "h6", sx: { mb: 1 }, children: result.title }),
1035
+ result.nextGameTime && /* @__PURE__ */ jsxRuntime.jsx(NextGameLabel_default, { nextGameTime: result.nextGameTime }),
1036
+ result.type === "table" && result.shortDescription ? /* @__PURE__ */ jsxRuntime.jsx(Typography4__default.default, { variant: "body2", sx: { mb: 1 }, children: result.shortDescription }) : null,
1009
1037
  children,
1010
- /* @__PURE__ */ jsxRuntime.jsx(material.Typography, { variant: "body1", children: result.description }),
1011
- result.tags && result.tags.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(material.Box, { sx: { mt: 1 }, children: /* @__PURE__ */ jsxRuntime.jsx(material.Box, { sx: {
1012
- display: "block",
1013
- whiteSpace: "nowrap",
1014
- overflow: "hidden",
1015
- textOverflow: "clip",
1016
- pl: 0.5
1017
- // Add some padding to prevent clipping of the leftmost tag
1018
- }, children: (() => {
1019
- const MAX_VISIBLE = 5;
1020
- const tagObjs = result.tags.map((tagId) => tags.find((t) => t.id === tagId)).filter((t) => Boolean(t));
1021
- const visible = tagObjs.slice(0, MAX_VISIBLE);
1022
- const hiddenCount = Math.max(tagObjs.length - visible.length, 0);
1023
- return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1024
- visible.map((tag) => generateTagsDisplay(tag)),
1025
- hiddenCount > 0 && /* @__PURE__ */ jsxRuntime.jsxs(
1026
- "span",
1027
- {
1028
- className: "inline-block text-sm px-3 py-1 rounded-full outline-black outline-2 font-outlined",
1029
- style: {
1030
- marginTop: "6px",
1031
- marginRight: "6px",
1032
- marginBottom: "6px",
1033
- background: "#9e9e9e",
1034
- color: "white",
1035
- textShadow: "black 0.2em 0.2em 0.4em"
1036
- },
1037
- children: [
1038
- "+",
1039
- hiddenCount,
1040
- " more"
1041
- ]
1042
- }
1043
- )
1044
- ] });
1045
- })() }) })
1038
+ result.type === "table" ? /* @__PURE__ */ jsxRuntime.jsx(Typography4__default.default, { variant: "body1", children: (() => {
1039
+ var _a, _b;
1040
+ const full = (_b = (_a = result.fullDescription) != null ? _a : result.description) != null ? _b : "";
1041
+ if (typeof full !== "string") return "";
1042
+ const text = full || "";
1043
+ return text.length > 200 ? `${text.slice(0, 200).trimEnd()}...` : text;
1044
+ })() }) : /* @__PURE__ */ jsxRuntime.jsx(Typography4__default.default, { variant: "body1", children: result.description }),
1045
+ result.tags && result.tags.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(Box2__default.default, { sx: { mt: 1, display: "flex", flexWrap: "wrap", gap: 1 }, children: renderTagsFromIds(result.tags, tags) })
1046
1046
  ] })
1047
1047
  ] })
1048
1048
  }
@@ -1097,21 +1097,60 @@ var PlayerResultCard = ({
1097
1097
  return /* @__PURE__ */ jsxRuntime.jsx(BaseSearchResultCard_default, { result, onClick, icon: playerIcon, tags });
1098
1098
  };
1099
1099
  var PlayerResultCard_default = PlayerResultCard;
1100
- var TableResultCard = ({ result, tags, onClick }) => {
1101
- const capacity = result.capacity || 1;
1102
- const numPlayers = result.numPlayers || 0;
1103
- const occupancy = numPlayers / capacity * 100;
1104
- return /* @__PURE__ */ jsxRuntime.jsx(BaseSearchResultCard, { result, tags, onClick, icon: /* @__PURE__ */ jsxRuntime.jsx(CasinoIcon__default.default, { color: "primary" }), children: /* @__PURE__ */ jsxRuntime.jsxs(material.Box, { sx: { mb: 1 }, children: [
1105
- /* @__PURE__ */ jsxRuntime.jsxs(material.Box, { sx: { display: "flex", justifyContent: "space-between", alignItems: "center", mb: 0.5 }, children: [
1106
- /* @__PURE__ */ jsxRuntime.jsxs(material.Typography, { variant: "body2", color: "text.secondary", children: [
1107
- "Players: ",
1108
- numPlayers,
1109
- " / ",
1110
- capacity
1100
+ var TableResultCard = ({
1101
+ result,
1102
+ onClick,
1103
+ tags
1104
+ }) => {
1105
+ const rawCapacity = result.capacity;
1106
+ const hasDefinedCapacity = typeof rawCapacity === "number" && Number.isFinite(rawCapacity) && rawCapacity > 0;
1107
+ const capacity = hasDefinedCapacity ? rawCapacity : 0;
1108
+ const activePlayers = typeof result.numPlayers === "number" ? result.numPlayers : 0;
1109
+ const availableSlots = Math.max(capacity - activePlayers, 0);
1110
+ const hasDM = typeof result.hasDM === "boolean" ? result.hasDM : Boolean(result.dungeonMaster);
1111
+ const occupancyPercentage = hasDefinedCapacity ? activePlayers / capacity * 100 : 100;
1112
+ const tableIcon = /* @__PURE__ */ jsxRuntime.jsx(
1113
+ TableRestaurantIcon__default.default,
1114
+ {
1115
+ sx: {
1116
+ fontSize: 40,
1117
+ color: "primary.main"
1118
+ }
1119
+ }
1120
+ );
1121
+ return /* @__PURE__ */ jsxRuntime.jsx(BaseSearchResultCard_default, { result, onClick, icon: tableIcon, tags, children: /* @__PURE__ */ jsxRuntime.jsxs(Box2__default.default, { sx: { mb: 2 }, children: [
1122
+ /* @__PURE__ */ jsxRuntime.jsxs(Box2__default.default, { sx: { display: "flex", justifyContent: "space-between", alignItems: "center", mb: 1 }, children: [
1123
+ /* @__PURE__ */ jsxRuntime.jsxs(Typography4__default.default, { variant: "body2", children: [
1124
+ /* @__PURE__ */ jsxRuntime.jsx("strong", { children: "Players:" }),
1125
+ " ",
1126
+ hasDefinedCapacity ? `${activePlayers}/${capacity}` : activePlayers
1111
1127
  ] }),
1112
- result.dungeonMaster ? /* @__PURE__ */ jsxRuntime.jsx(material.Chip, { label: "DM Present", size: "small", color: "success", variant: "outlined" }) : /* @__PURE__ */ jsxRuntime.jsx(material.Chip, { label: "No DM", size: "small", color: "warning", variant: "outlined" })
1128
+ typeof hasDM === "boolean" && /* @__PURE__ */ jsxRuntime.jsx(
1129
+ Chip2__default.default,
1130
+ {
1131
+ icon: hasDM ? /* @__PURE__ */ jsxRuntime.jsx(SupervisorAccountIcon__default.default, {}) : /* @__PURE__ */ jsxRuntime.jsx(PersonIcon__default.default, {}),
1132
+ label: hasDM ? "DM Present" : "No DM",
1133
+ color: hasDM ? "success" : "warning",
1134
+ size: "small"
1135
+ }
1136
+ )
1113
1137
  ] }),
1114
- /* @__PURE__ */ jsxRuntime.jsx(material.LinearProgress, { variant: "determinate", value: occupancy, sx: { height: 8, borderRadius: 4 } })
1138
+ /* @__PURE__ */ jsxRuntime.jsx(
1139
+ LinearProgress__default.default,
1140
+ {
1141
+ variant: "determinate",
1142
+ value: occupancyPercentage,
1143
+ sx: {
1144
+ height: 10,
1145
+ borderRadius: 5,
1146
+ backgroundColor: "#e0e0e0",
1147
+ "& .MuiLinearProgress-bar": {
1148
+ backgroundColor: hasDefinedCapacity ? availableSlots > 0 ? "#4caf50" : "#f44336" : "#2196f3"
1149
+ }
1150
+ }
1151
+ }
1152
+ ),
1153
+ 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" })
1115
1154
  ] }) });
1116
1155
  };
1117
1156
  var TableResultCard_default = TableResultCard;
@@ -1130,20 +1169,42 @@ var EventResultCard = ({
1130
1169
  try {
1131
1170
  const date = new Date(dateString);
1132
1171
  return date.toLocaleDateString("en-US", options);
1133
- } catch {
1172
+ } catch (error) {
1134
1173
  return dateString;
1135
1174
  }
1136
1175
  };
1137
1176
  const formattedDate = result.date ? formatDate(result.date) : "Date TBD";
1138
1177
  const location = result.location || "Location TBD";
1139
- return /* @__PURE__ */ jsxRuntime.jsx(BaseSearchResultCard_default, { result, onClick, icon: /* @__PURE__ */ jsxRuntime.jsx(EventIcon__default.default, { color: "primary" }), tags, children: /* @__PURE__ */ jsxRuntime.jsxs(material.Box, { sx: { mb: 1 }, children: [
1140
- /* @__PURE__ */ jsxRuntime.jsxs(material.Box, { sx: { display: "flex", alignItems: "center", mb: 0.5 }, children: [
1141
- /* @__PURE__ */ jsxRuntime.jsx(CalendarTodayIcon__default.default, { sx: { mr: 1, fontSize: "small", color: "text.secondary" } }),
1142
- /* @__PURE__ */ jsxRuntime.jsx(material.Typography, { variant: "body2", color: "text.secondary", children: formattedDate })
1178
+ const eventIcon = /* @__PURE__ */ jsxRuntime.jsx(
1179
+ EventIcon__default.default,
1180
+ {
1181
+ sx: {
1182
+ fontSize: 40,
1183
+ color: "primary.main"
1184
+ }
1185
+ }
1186
+ );
1187
+ return /* @__PURE__ */ jsxRuntime.jsx(BaseSearchResultCard_default, { result, onClick, icon: eventIcon, tags, children: /* @__PURE__ */ jsxRuntime.jsxs(Box2__default.default, { sx: { mb: 2 }, children: [
1188
+ /* @__PURE__ */ jsxRuntime.jsxs(Box2__default.default, { sx: { display: "flex", alignItems: "center", mb: 1 }, children: [
1189
+ /* @__PURE__ */ jsxRuntime.jsx(CalendarTodayIcon__default.default, { sx: { mr: 1, color: "primary.main" } }),
1190
+ /* @__PURE__ */ jsxRuntime.jsxs(Typography4__default.default, { variant: "body2", children: [
1191
+ /* @__PURE__ */ jsxRuntime.jsx("strong", { children: "Date:" }),
1192
+ " ",
1193
+ formattedDate
1194
+ ] })
1143
1195
  ] }),
1144
- /* @__PURE__ */ jsxRuntime.jsxs(material.Box, { sx: { display: "flex", alignItems: "center", mb: 1 }, children: [
1145
- /* @__PURE__ */ jsxRuntime.jsx(LocationOnIcon__default.default, { sx: { mr: 1, fontSize: "small", color: "text.secondary" } }),
1146
- /* @__PURE__ */ jsxRuntime.jsx(material.Typography, { variant: "body2", color: "text.secondary", children: location })
1196
+ /* @__PURE__ */ jsxRuntime.jsxs(Box2__default.default, { sx: { display: "flex", alignItems: "center" }, children: [
1197
+ /* @__PURE__ */ jsxRuntime.jsx(LocationOnIcon__default.default, { sx: { mr: 1, color: "primary.main" } }),
1198
+ /* @__PURE__ */ jsxRuntime.jsxs(Typography4__default.default, { variant: "body2", children: [
1199
+ /* @__PURE__ */ jsxRuntime.jsx("strong", { children: "Location:" }),
1200
+ " ",
1201
+ location
1202
+ ] })
1203
+ ] }),
1204
+ result.organizer && /* @__PURE__ */ jsxRuntime.jsxs(Typography4__default.default, { variant: "body2", sx: { mt: 1 }, children: [
1205
+ /* @__PURE__ */ jsxRuntime.jsx("strong", { children: "Organizer:" }),
1206
+ " ",
1207
+ result.organizer
1147
1208
  ] })
1148
1209
  ] }) });
1149
1210
  };
@@ -1151,9 +1212,11 @@ var EventResultCard_default = EventResultCard;
1151
1212
  var ResultsContainer = ({
1152
1213
  results,
1153
1214
  onResultClick,
1154
- tags
1215
+ tags,
1216
+ pagination,
1217
+ onPacketChange
1155
1218
  }) => {
1156
- if (results.length === 0 || !results.map) {
1219
+ if (!results || results.length === 0 || !results.map) {
1157
1220
  return /* @__PURE__ */ jsxRuntime.jsx(Box2__default.default, { sx: { textAlign: "center", py: 4 }, children: "No results found. Try adjusting your filters." });
1158
1221
  }
1159
1222
  const onPlayerClick = (id) => {
@@ -1165,43 +1228,68 @@ var ResultsContainer = ({
1165
1228
  const onEventClick = (id) => {
1166
1229
  onResultClick == null ? void 0 : onResultClick(id, "event");
1167
1230
  };
1168
- return /* @__PURE__ */ jsxRuntime.jsx(Box2__default.default, { sx: { display: "flex", flexDirection: "column", gap: 2 }, children: results.map((result) => {
1169
- switch (result.type) {
1170
- case "player":
1171
- return /* @__PURE__ */ jsxRuntime.jsx(
1172
- PlayerResultCard_default,
1173
- {
1174
- result,
1175
- onClick: onPlayerClick,
1176
- tags
1177
- },
1178
- result.id
1179
- );
1180
- case "table":
1181
- return /* @__PURE__ */ jsxRuntime.jsx(
1182
- TableResultCard_default,
1183
- {
1184
- result,
1185
- onClick: onTableClick,
1186
- tags
1187
- },
1188
- result.id
1189
- );
1190
- case "event":
1191
- return /* @__PURE__ */ jsxRuntime.jsx(
1192
- EventResultCard_default,
1193
- {
1194
- result,
1195
- onClick: onEventClick,
1196
- tags
1197
- },
1198
- result.id
1199
- );
1200
- default:
1201
- console.error(`Unknown result type: ${result.type}`);
1202
- return null;
1203
- }
1204
- }) });
1231
+ const handlePacketChange = (_event, packet) => {
1232
+ onPacketChange == null ? void 0 : onPacketChange(packet);
1233
+ };
1234
+ const startResult = pagination ? (pagination.currentPacket - 1) * pagination.packetSize + 1 : 1;
1235
+ const endResult = pagination ? Math.min(pagination.currentPacket * pagination.packetSize, pagination.totalResults) : results.length;
1236
+ return /* @__PURE__ */ jsxRuntime.jsxs(Box2__default.default, { sx: { display: "flex", flexDirection: "column", gap: 2 }, children: [
1237
+ pagination && /* @__PURE__ */ jsxRuntime.jsx(Box2__default.default, { sx: { display: "flex", justifyContent: "space-between", alignItems: "center", mb: 1 }, children: /* @__PURE__ */ jsxRuntime.jsxs(Typography4__default.default, { variant: "body2", color: "text.secondary", children: [
1238
+ "Showing ",
1239
+ startResult,
1240
+ "-",
1241
+ endResult,
1242
+ " of ",
1243
+ pagination.totalResults,
1244
+ " results"
1245
+ ] }) }),
1246
+ results.map((result, index) => {
1247
+ switch (result.type) {
1248
+ case "player":
1249
+ return /* @__PURE__ */ jsxRuntime.jsx(
1250
+ PlayerResultCard_default,
1251
+ {
1252
+ result,
1253
+ onClick: onPlayerClick,
1254
+ tags
1255
+ },
1256
+ result.id
1257
+ );
1258
+ case "table":
1259
+ return /* @__PURE__ */ jsxRuntime.jsx(
1260
+ TableResultCard_default,
1261
+ {
1262
+ result,
1263
+ onClick: onTableClick,
1264
+ tags
1265
+ },
1266
+ result.id
1267
+ );
1268
+ case "event":
1269
+ return /* @__PURE__ */ jsxRuntime.jsx(
1270
+ EventResultCard_default,
1271
+ {
1272
+ result,
1273
+ onClick: onEventClick,
1274
+ tags
1275
+ },
1276
+ result.id
1277
+ );
1278
+ default:
1279
+ console.error(`Unknown result type: ${result.type}`);
1280
+ return null;
1281
+ }
1282
+ }),
1283
+ pagination && pagination.totalPackets > 1 && /* @__PURE__ */ jsxRuntime.jsx(Box2__default.default, { sx: { display: "flex", justifyContent: "center", mt: 4 }, children: /* @__PURE__ */ jsxRuntime.jsx(
1284
+ Pagination__default.default,
1285
+ {
1286
+ count: pagination.totalPackets,
1287
+ page: pagination.currentPacket,
1288
+ onChange: handlePacketChange,
1289
+ color: "primary"
1290
+ }
1291
+ ) })
1292
+ ] });
1205
1293
  };
1206
1294
  var ResultsContainer_default = ResultsContainer;
1207
1295
  var ScrollableResultsList = ({
@@ -1219,21 +1307,14 @@ var TablesScrollableList = ({
1219
1307
  results,
1220
1308
  tags,
1221
1309
  maxHeight,
1222
- onResultClick,
1223
- sortBy = "availability"
1310
+ onResultClick
1224
1311
  }) => {
1225
1312
  const tables = (results || []).filter((r) => (r == null ? void 0 : r.type) === "table");
1226
- const getAvailableSlots = (r) => {
1227
- const capacity = typeof r.capacity === "number" ? r.capacity : 0;
1228
- const playersCount = typeof r.numPlayers === "number" ? r.numPlayers : 0;
1229
- return Math.max(capacity - playersCount, 0);
1230
- };
1231
- const sortedTables = sortBy === "availability" ? [...tables].sort((a, b) => getAvailableSlots(b) - getAvailableSlots(a)) : tables;
1232
1313
  const handleClick = (id) => onResultClick == null ? void 0 : onResultClick(id);
1233
1314
  return /* @__PURE__ */ jsxRuntime.jsx(
1234
1315
  ScrollableResultsList_default,
1235
1316
  {
1236
- results: sortedTables,
1317
+ results: tables,
1237
1318
  tags,
1238
1319
  maxHeight,
1239
1320
  onResultClick: (id, type) => {
@@ -1251,8 +1332,8 @@ var EventTablesCard = ({
1251
1332
  }) => {
1252
1333
  return /* @__PURE__ */ jsxRuntime.jsxs(Card10__default.default, { elevation: 6, sx: { width: "100%", boxShadow: "0px 8px 24px rgba(0, 0, 0, 0.15)" }, children: [
1253
1334
  /* @__PURE__ */ jsxRuntime.jsx(CardHeader4__default.default, { title: "Tables" }),
1254
- /* @__PURE__ */ jsxRuntime.jsx(Divider2__default.default, {}),
1255
- /* @__PURE__ */ jsxRuntime.jsx(CardContent10__default.default, { children: /* @__PURE__ */ jsxRuntime.jsx(TablesScrollableList_default, { results: tables, tags, maxHeight, onResultClick: onTableClick, sortBy: "availability" }) })
1335
+ /* @__PURE__ */ jsxRuntime.jsx(Divider3__default.default, {}),
1336
+ /* @__PURE__ */ jsxRuntime.jsx(CardContent10__default.default, { children: /* @__PURE__ */ jsxRuntime.jsx(TablesScrollableList_default, { results: tables, tags, maxHeight, onResultClick: onTableClick }) })
1256
1337
  ] });
1257
1338
  };
1258
1339
  var EventTablesCard_default = EventTablesCard;
@@ -1266,27 +1347,28 @@ function EventPageLayout({
1266
1347
  tables,
1267
1348
  allTags
1268
1349
  }) {
1269
- return /* @__PURE__ */ jsxRuntime.jsx(Grid9__default.default, { container: true, flexDirection: "column", children: /* @__PURE__ */ jsxRuntime.jsxs(EventEditProvider, { initialEvent: mergedEvent, value: { isOwner, updateEvent, updateImages }, children: [
1270
- /* @__PURE__ */ jsxRuntime.jsx(Grid9__default.default, { children: /* @__PURE__ */ jsxRuntime.jsx(
1350
+ return /* @__PURE__ */ jsxRuntime.jsx(Grid8__default.default, { container: true, flexDirection: "column", children: /* @__PURE__ */ jsxRuntime.jsxs(EventEditProvider, { initialEvent: mergedEvent, value: { isOwner, updateEvent, updateImages }, children: [
1351
+ /* @__PURE__ */ jsxRuntime.jsx(Grid8__default.default, { children: /* @__PURE__ */ jsxRuntime.jsx(
1271
1352
  EventBanner,
1272
1353
  {
1273
1354
  attendees,
1274
1355
  numGames
1275
1356
  }
1276
1357
  ) }),
1277
- /* @__PURE__ */ jsxRuntime.jsxs(Grid9__default.default, { container: true, flexDirection: "row", spacing: 3, size: { xs: 12, md: 12 }, children: [
1278
- /* @__PURE__ */ jsxRuntime.jsx(Grid9__default.default, { size: { xs: 12, md: 4 }, spacing: 3, padding: 3, children: /* @__PURE__ */ jsxRuntime.jsx(
1358
+ /* @__PURE__ */ jsxRuntime.jsxs(Grid8__default.default, { container: true, flexDirection: "row", spacing: 3, size: { xs: 12, md: 12 }, children: [
1359
+ /* @__PURE__ */ jsxRuntime.jsx(Grid8__default.default, { size: { xs: 12, md: 4 }, spacing: 3, padding: 3, children: /* @__PURE__ */ jsxRuntime.jsx(
1279
1360
  EventBasicInfo,
1280
1361
  {
1281
1362
  locationId: mergedEvent.location || "0"
1282
1363
  }
1283
1364
  ) }),
1284
- /* @__PURE__ */ jsxRuntime.jsx(Grid9__default.default, { size: { xs: 12, md: 8 }, spacing: 3, padding: 3, children: /* @__PURE__ */ jsxRuntime.jsx(EventTablesCard_default, { tables, tags: allTags }) })
1365
+ /* @__PURE__ */ jsxRuntime.jsx(Grid8__default.default, { size: { xs: 12, md: 8 }, spacing: 3, padding: 3, children: /* @__PURE__ */ jsxRuntime.jsx(EventTablesCard_default, { tables, tags: allTags }) })
1285
1366
  ] }),
1286
- /* @__PURE__ */ jsxRuntime.jsx(Grid9__default.default, {})
1367
+ /* @__PURE__ */ jsxRuntime.jsx(Grid8__default.default, {})
1287
1368
  ] }) });
1288
1369
  }
1289
- var PlayerDetails = ({
1370
+ var PlayerDetailsCard = ({
1371
+ preferredPronouns,
1290
1372
  age,
1291
1373
  yearsPlaying,
1292
1374
  discordUsername,
@@ -1336,6 +1418,23 @@ var PlayerDetails = ({
1336
1418
  }
1337
1419
  ),
1338
1420
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-3", children: [
1421
+ preferredPronouns && /* @__PURE__ */ jsxRuntime.jsxs(
1422
+ material.Typography,
1423
+ {
1424
+ variant: "body2",
1425
+ className: "text-sm font-medium",
1426
+ sx: {
1427
+ color: "#FFFFFF",
1428
+ textShadow: "0px 2px 6px rgba(0, 0, 0, 0.5)",
1429
+ fontWeight: "bold"
1430
+ },
1431
+ children: [
1432
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-extrabold text-cyan-300", children: "Preferred Pronouns:" }),
1433
+ " ",
1434
+ preferredPronouns
1435
+ ]
1436
+ }
1437
+ ),
1339
1438
  age !== null && /* @__PURE__ */ jsxRuntime.jsxs(
1340
1439
  material.Typography,
1341
1440
  {
@@ -1387,7 +1486,7 @@ var PlayerDetails = ({
1387
1486
  ]
1388
1487
  }
1389
1488
  ),
1390
- preferredGames && preferredGames.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs(
1489
+ preferredGames && /* @__PURE__ */ jsxRuntime.jsxs(
1391
1490
  material.Typography,
1392
1491
  {
1393
1492
  variant: "body2",
@@ -1400,7 +1499,7 @@ var PlayerDetails = ({
1400
1499
  children: [
1401
1500
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-extrabold text-cyan-300", children: "Preferred Games:" }),
1402
1501
  " ",
1403
- preferredGames.join(", ")
1502
+ Array.isArray(preferredGames) ? preferredGames.join(", ") : preferredGames
1404
1503
  ]
1405
1504
  }
1406
1505
  )
@@ -1423,24 +1522,20 @@ var PlayerDetails = ({
1423
1522
  }
1424
1523
  );
1425
1524
  };
1426
- var PlayerDetailsCard_default = PlayerDetails;
1525
+ var PlayerDetailsCard_default = PlayerDetailsCard;
1427
1526
 
1428
1527
  // src/data/values.tsx
1429
1528
  var ProfilePictureSettings = {
1430
1529
  aspectRatio: 4 / 5};
1431
- var { aspectRatio } = ProfilePictureSettings;
1432
- var PlayerDisplayCard = ({
1433
- profilePicture,
1434
- username,
1435
- bio,
1436
- preferredPronouns
1437
- }) => {
1438
- const [imageSrc, setImageSrc] = React7.useState("/man-walking-silhouette-clipart.jpg");
1530
+ var PlayerDisplayCard = ({ profilePicture, username, bio, preferredPronouns }) => {
1531
+ const defaultImg = "/man-walking-silhouette-clipart.jpg";
1532
+ const [imageSrc, setImageSrc] = React7.useState(defaultImg);
1533
+ const { aspectRatio } = ProfilePictureSettings;
1439
1534
  React7.useEffect(() => {
1440
1535
  async function validateImage() {
1441
- const newImage = profilePicture || "/man-walking-silhouette-clipart.jpg";
1536
+ const newImage = profilePicture || defaultImg;
1442
1537
  if (!profilePicture) {
1443
- setImageSrc("/man-walking-silhouette-clipart.jpg");
1538
+ setImageSrc(defaultImg);
1444
1539
  return;
1445
1540
  }
1446
1541
  const img = new Image();
@@ -1449,7 +1544,7 @@ var PlayerDisplayCard = ({
1449
1544
  setImageSrc(newImage);
1450
1545
  };
1451
1546
  img.onerror = () => {
1452
- setImageSrc("/man-walking-silhouette-clipart.jpg");
1547
+ setImageSrc(defaultImg);
1453
1548
  };
1454
1549
  }
1455
1550
  validateImage();
@@ -1483,7 +1578,7 @@ var PlayerDisplayCard = ({
1483
1578
  height: "auto",
1484
1579
  // Updates to maintain aspect ratio and fill space nicely
1485
1580
  width: "100%",
1486
- objectFit: "scale-down"
1581
+ objectFit: "cover"
1487
1582
  }
1488
1583
  }
1489
1584
  ),
@@ -1542,104 +1637,127 @@ var PlayerDisplayCard = ({
1542
1637
  );
1543
1638
  };
1544
1639
  var PlayerDisplayCard_default = PlayerDisplayCard;
1545
- var PlayerPromptCard = ({ title, description }) => {
1546
- return /* @__PURE__ */ jsxRuntime.jsx(
1547
- material.Card,
1548
- {
1549
- sx: {
1550
- margin: "1rem",
1551
- background: "linear-gradient(135deg, rgba(25, 118, 210, 0.8), rgba(25, 118, 210, 1))",
1552
- // Gradient color scheme
1553
- boxShadow: "0px 8px 15px rgba(25, 118, 210, 0.3)",
1554
- // Card shadow
1555
- borderRadius: "12px",
1556
- // Rounded corners
1557
- color: "#FFFFFF",
1558
- // Text contrast with the background
1559
- overflow: "hidden"
1560
- // Keeps consistent and clean card shape
1561
- },
1562
- className: "transition duration-300 transform hover:scale-105 hover:shadow-2xl",
1563
- children: /* @__PURE__ */ jsxRuntime.jsxs(material.CardContent, { className: "p-6", children: [
1564
- title && /* @__PURE__ */ jsxRuntime.jsx(
1565
- material.Typography,
1566
- {
1567
- variant: "h5",
1568
- className: "font-bold text-lg uppercase text-center tracking-wide mb-4",
1569
- sx: {
1570
- color: "#FFFFFF",
1571
- // Bright white for high visibility
1572
- textShadow: "0px 3px 6px rgba(0, 0, 0, 0.5)",
1573
- // Strong text shadow for contrast
1574
- fontSize: "1.5rem"
1575
- },
1576
- children: title
1577
- }
1578
- ),
1579
- description && /* @__PURE__ */ jsxRuntime.jsx(
1580
- material.Typography,
1581
- {
1582
- variant: "body2",
1583
- className: "text-sm font-medium text-center",
1584
- sx: {
1585
- color: "#E3F2FD",
1586
- // Softer light blue for description
1587
- textShadow: "0px 2px 4px rgba(0, 0, 0, 0.3)",
1588
- // Subtle shadow
1589
- lineHeight: 1.6,
1590
- marginTop: "1rem"
1591
- },
1592
- children: description
1640
+ var PlayerTagsCard = ({ tags = [] }) => {
1641
+ return /* @__PURE__ */ jsxRuntime.jsxs(material.Card, { sx: {
1642
+ margin: "1rem",
1643
+ borderRadius: "12px",
1644
+ boxShadow: "0px 8px 15px rgba(25, 118, 210, 0.3)",
1645
+ overflow: "hidden"
1646
+ }, className: "transition duration-300 transform hover:scale-105 hover:shadow-2xl", children: [
1647
+ /* @__PURE__ */ jsxRuntime.jsx(
1648
+ material.CardHeader,
1649
+ {
1650
+ title: "Player Tags",
1651
+ sx: {
1652
+ background: "linear-gradient(135deg, rgba(25, 118, 210, 0.8), rgba(25, 118, 210, 1))",
1653
+ color: "#FFFFFF",
1654
+ fontSize: "1.5rem",
1655
+ textShadow: "0px 3px 6px rgba(0, 0, 0, 0.5)",
1656
+ "& .MuiCardHeader-title": {
1657
+ fontWeight: "bold",
1658
+ fontSize: "1.5rem",
1659
+ textAlign: "center",
1660
+ textTransform: "uppercase",
1661
+ letterSpacing: "0.05em"
1593
1662
  }
1594
- )
1595
- ] })
1596
- }
1597
- );
1663
+ }
1664
+ }
1665
+ ),
1666
+ /* @__PURE__ */ jsxRuntime.jsx(material.CardContent, { className: "p-6", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-wrap gap-2", children: tags.map((tag) => /* @__PURE__ */ jsxRuntime.jsx(Chip, { tag }, tag.id)) }) })
1667
+ ] });
1598
1668
  };
1599
- var PlayerPromptCard_default = PlayerPromptCard;
1600
- function PlayerTagsCard(props) {
1601
- return /* @__PURE__ */ jsxRuntime.jsx(Grid9__default.default, { container: true, children: /* @__PURE__ */ jsxRuntime.jsx(Grid9__default.default, { size: { xs: 12, md: 3 }, children: /* @__PURE__ */ jsxRuntime.jsxs(Card10__default.default, { children: [
1602
- /* @__PURE__ */ jsxRuntime.jsx(CardHeader4__default.default, { title: "Player Tags", style: {
1669
+ var PlayerTagsCard_default = PlayerTagsCard;
1670
+ var PlayerPromptCard = ({ title, description }) => /* @__PURE__ */ jsxRuntime.jsx(
1671
+ material.Card,
1672
+ {
1673
+ sx: {
1674
+ margin: "1rem",
1603
1675
  background: "linear-gradient(135deg, rgba(25, 118, 210, 0.8), rgba(25, 118, 210, 1))",
1676
+ // Gradient color scheme
1677
+ boxShadow: "0px 8px 15px rgba(25, 118, 210, 0.3)",
1678
+ // Card shadow
1679
+ borderRadius: "12px",
1680
+ // Rounded corners
1604
1681
  color: "#FFFFFF",
1605
- // Pure white for username
1606
- fontSize: "1.5rem",
1607
- textShadow: "0px 3px 6px rgba(0, 0, 0, 0.5)"
1608
- // Strong shadow for visibility
1609
- } }),
1610
- /* @__PURE__ */ jsxRuntime.jsx(CardContent10__default.default, { children: renderLabels(props.PlayerTags) })
1611
- ] }) }) });
1612
- }
1613
- var renderLabels = (tags) => {
1614
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-2 flex flex-wrap gap-2", children: tags.map((tag) => /* @__PURE__ */ jsxRuntime.jsx(Chip, { tag }, tag.id)) });
1615
- };
1616
- function TagEditor({
1617
- title = "Tags",
1618
- selectedTags,
1619
- possibleTags,
1682
+ // Text contrast with the background
1683
+ overflow: "hidden"
1684
+ // Keeps consistent and clean card shape
1685
+ },
1686
+ className: "transition duration-300 transform hover:scale-105 hover:shadow-2xl",
1687
+ children: /* @__PURE__ */ jsxRuntime.jsxs(material.CardContent, { className: "p-6", children: [
1688
+ title && /* @__PURE__ */ jsxRuntime.jsx(
1689
+ material.Typography,
1690
+ {
1691
+ variant: "h5",
1692
+ className: "font-bold text-lg uppercase text-center tracking-wide mb-4",
1693
+ sx: {
1694
+ color: "#FFFFFF",
1695
+ // Bright white for high visibility
1696
+ textShadow: "0px 3px 6px rgba(0, 0, 0, 0.5)",
1697
+ // Strong text shadow for contrast
1698
+ fontSize: "1.5rem"
1699
+ },
1700
+ children: title
1701
+ }
1702
+ ),
1703
+ description && /* @__PURE__ */ jsxRuntime.jsx(
1704
+ material.Typography,
1705
+ {
1706
+ variant: "body2",
1707
+ className: "text-sm font-medium text-center",
1708
+ sx: {
1709
+ color: "#E3F2FD",
1710
+ // Softer light blue for description
1711
+ textShadow: "0px 2px 4px rgba(0, 0, 0, 0.3)",
1712
+ // Subtle shadow
1713
+ lineHeight: 1.6,
1714
+ marginTop: "1rem"
1715
+ },
1716
+ children: description
1717
+ }
1718
+ )
1719
+ ] })
1720
+ }
1721
+ );
1722
+ var PlayerPromptCard_default = PlayerPromptCard;
1723
+ var PlayerTagsEdit = ({
1724
+ selectedTags = [],
1725
+ possibleTags = [],
1620
1726
  onToggleTag
1621
- }) {
1727
+ }) => {
1622
1728
  const [inputValue, setInputValue] = React7.useState("");
1623
1729
  const selectedIds = React7.useMemo(() => selectedTags.map((tag) => tag.id), [selectedTags]);
1624
1730
  const options = React7.useMemo(
1625
- () => possibleTags.map((tag) => ({ value: tag.id, label: tag.label })),
1731
+ () => possibleTags.map((tag) => ({ value: tag.id, label: tag.label, alternate_title: tag.alternate_title })),
1626
1732
  [possibleTags]
1627
1733
  );
1628
- return /* @__PURE__ */ jsxRuntime.jsx(Grid9__default.default, { container: true, children: /* @__PURE__ */ jsxRuntime.jsx(Grid9__default.default, { size: { xs: 12 }, children: /* @__PURE__ */ jsxRuntime.jsxs(Card10__default.default, { children: [
1734
+ return /* @__PURE__ */ jsxRuntime.jsxs(material.Card, { sx: {
1735
+ margin: "1rem",
1736
+ borderRadius: "12px",
1737
+ boxShadow: "0px 8px 15px rgba(25, 118, 210, 0.3)",
1738
+ overflow: "hidden"
1739
+ }, children: [
1629
1740
  /* @__PURE__ */ jsxRuntime.jsx(
1630
- CardHeader4__default.default,
1741
+ material.CardHeader,
1631
1742
  {
1632
- title,
1633
- style: {
1743
+ title: "Player Tags",
1744
+ sx: {
1634
1745
  background: "linear-gradient(135deg, rgba(25, 118, 210, 0.8), rgba(25, 118, 210, 1))",
1635
1746
  color: "#FFFFFF",
1636
1747
  fontSize: "1.5rem",
1637
- textShadow: "0px 3px 6px rgba(0, 0, 0, 0.5)"
1748
+ textShadow: "0px 3px 6px rgba(0, 0, 0, 0.5)",
1749
+ "& .MuiCardHeader-title": {
1750
+ fontWeight: "bold",
1751
+ fontSize: "1.5rem",
1752
+ textAlign: "center",
1753
+ textTransform: "uppercase",
1754
+ letterSpacing: "0.05em"
1755
+ }
1638
1756
  }
1639
1757
  }
1640
1758
  ),
1641
- /* @__PURE__ */ jsxRuntime.jsxs(CardContent10__default.default, { children: [
1642
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-2 flex flex-wrap gap-2", children: selectedTags.map((tag) => /* @__PURE__ */ jsxRuntime.jsx(
1759
+ /* @__PURE__ */ jsxRuntime.jsxs(material.CardContent, { className: "p-6", children: [
1760
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-wrap gap-2 mb-4", children: selectedTags.map((tag) => /* @__PURE__ */ jsxRuntime.jsx(
1643
1761
  Chip,
1644
1762
  {
1645
1763
  tag,
@@ -1647,13 +1765,19 @@ function TagEditor({
1647
1765
  },
1648
1766
  tag.id
1649
1767
  )) }),
1650
- /* @__PURE__ */ jsxRuntime.jsx(Grid9__default.default, { container: true, spacing: 3, children: /* @__PURE__ */ jsxRuntime.jsx(Grid9__default.default, { sx: { marginTop: 3, width: "100%" }, children: /* @__PURE__ */ jsxRuntime.jsx(
1768
+ /* @__PURE__ */ jsxRuntime.jsx(
1651
1769
  Autocomplete__default.default,
1652
1770
  {
1653
1771
  options,
1654
- filterOptions: (availableOptions, state) => availableOptions.filter(
1655
- (option) => !selectedIds.includes(option.value) && option.label.toLowerCase().includes(state.inputValue.toLowerCase())
1656
- ).slice(0, 3),
1772
+ filterOptions: (availableOptions, state) => {
1773
+ const query = state.inputValue.toLowerCase();
1774
+ return availableOptions.filter(
1775
+ (option) => {
1776
+ var _a;
1777
+ return !selectedIds.includes(option.value) && (option.label.toLowerCase().includes(query) || ((_a = option.alternate_title) == null ? void 0 : _a.some((title) => title.toLowerCase().includes(query))));
1778
+ }
1779
+ ).slice(0, 5);
1780
+ },
1657
1781
  value: null,
1658
1782
  inputValue,
1659
1783
  onInputChange: (event, newInputValue) => {
@@ -1668,13 +1792,20 @@ function TagEditor({
1668
1792
  setInputValue("");
1669
1793
  },
1670
1794
  slots: { popper: CustomPopper },
1671
- renderInput: (params) => /* @__PURE__ */ jsxRuntime.jsx(TextField3__default.default, { ...params, label: "Select Tags" })
1795
+ renderInput: (params) => /* @__PURE__ */ jsxRuntime.jsx(
1796
+ material.TextField,
1797
+ {
1798
+ ...params,
1799
+ label: "Select Tags",
1800
+ variant: "outlined"
1801
+ }
1802
+ )
1672
1803
  },
1673
1804
  selectedIds.join("-")
1674
- ) }) })
1805
+ )
1675
1806
  ] })
1676
- ] }) }) });
1677
- }
1807
+ ] });
1808
+ };
1678
1809
  var CustomPopper = (props) => {
1679
1810
  return /* @__PURE__ */ jsxRuntime.jsx(
1680
1811
  Popper__default.default,
@@ -1683,28 +1814,105 @@ var CustomPopper = (props) => {
1683
1814
  modifiers: [
1684
1815
  {
1685
1816
  name: "preventOverflow",
1686
- options: { boundary: "viewport" }
1817
+ options: {
1818
+ boundary: "viewport"
1819
+ }
1687
1820
  },
1688
1821
  {
1689
1822
  name: "offset",
1690
- options: { offset: [0, -10] }
1823
+ options: {
1824
+ offset: [0, -10]
1825
+ }
1691
1826
  }
1692
1827
  ],
1693
1828
  placement: "top-start"
1694
1829
  }
1695
1830
  );
1696
1831
  };
1697
- function PlayerTagsEdit(props) {
1698
- return /* @__PURE__ */ jsxRuntime.jsx(
1699
- TagEditor,
1832
+ var PlayerTagsEdit_default = PlayerTagsEdit;
1833
+ function PlayerPageLayout({
1834
+ playerData,
1835
+ tags = [],
1836
+ blurbs = [],
1837
+ isOwner = false,
1838
+ possibleTags = [],
1839
+ onToggleTag = () => {
1840
+ }
1841
+ }) {
1842
+ const theme = material.useTheme();
1843
+ const isSmallScreen = material.useMediaQuery(theme.breakpoints.down("lg"));
1844
+ const tagsElement = isOwner ? /* @__PURE__ */ jsxRuntime.jsx(
1845
+ PlayerTagsEdit_default,
1700
1846
  {
1701
- title: "Player Tags",
1702
- selectedTags: props.PlayerTags,
1703
- possibleTags: props.possibleTags,
1704
- onToggleTag: props.updatePlayerTags
1847
+ selectedTags: tags,
1848
+ possibleTags,
1849
+ onToggleTag
1705
1850
  }
1706
- );
1851
+ ) : /* @__PURE__ */ jsxRuntime.jsx(PlayerTagsCard_default, { tags });
1852
+ return /* @__PURE__ */ jsxRuntime.jsx(material.NoSsr, { children: /* @__PURE__ */ jsxRuntime.jsx(material.Box, { sx: { padding: "2rem", marginRight: "auto", marginLeft: "auto" }, justifyContent: "center", children: /* @__PURE__ */ jsxRuntime.jsxs(material.Grid, { container: true, spacing: 3, justifyContent: "center", sx: { marginRight: "auto", marginLeft: "auto" }, children: [
1853
+ !isSmallScreen && /* @__PURE__ */ jsxRuntime.jsxs(material.Grid, { size: { xs: 12, lg: 3 }, children: [
1854
+ /* @__PURE__ */ jsxRuntime.jsx(
1855
+ PlayerDetailsCard_default,
1856
+ {
1857
+ preferredPronouns: playerData.preferredPronouns,
1858
+ age: playerData.age,
1859
+ yearsPlaying: playerData.yearsPlaying,
1860
+ discordUsername: playerData.discordUsername,
1861
+ preferredGames: playerData.preferredGames
1862
+ }
1863
+ ),
1864
+ tagsElement
1865
+ ] }),
1866
+ /* @__PURE__ */ jsxRuntime.jsx(material.Grid, { size: { xs: 12, lg: 6 }, children: /* @__PURE__ */ jsxRuntime.jsxs(material.Grid, { container: true, spacing: 3, children: [
1867
+ /* @__PURE__ */ jsxRuntime.jsx(material.Grid, { size: { xs: 12, lg: 8 }, children: /* @__PURE__ */ jsxRuntime.jsx(
1868
+ PlayerDisplayCard_default,
1869
+ {
1870
+ profilePicture: playerData.profilePicture,
1871
+ username: playerData.username,
1872
+ bio: playerData.bio,
1873
+ preferredPronouns: playerData.preferredPronouns
1874
+ }
1875
+ ) }),
1876
+ isSmallScreen && /* @__PURE__ */ jsxRuntime.jsx(material.Grid, { size: { xs: 12, lg: 3 }, children: /* @__PURE__ */ jsxRuntime.jsx(
1877
+ PlayerDetailsCard_default,
1878
+ {
1879
+ preferredPronouns: playerData.preferredPronouns,
1880
+ age: playerData.age,
1881
+ yearsPlaying: playerData.yearsPlaying,
1882
+ discordUsername: playerData.discordUsername,
1883
+ preferredGames: playerData.preferredGames
1884
+ }
1885
+ ) }),
1886
+ blurbs.map((blurb, index) => /* @__PURE__ */ jsxRuntime.jsx(material.Grid, { size: { xs: 12, lg: 8 }, children: /* @__PURE__ */ jsxRuntime.jsx(
1887
+ PlayerPromptCard_default,
1888
+ {
1889
+ title: blurb.title,
1890
+ description: blurb.description
1891
+ }
1892
+ ) }, index))
1893
+ ] }) })
1894
+ ] }) }) });
1707
1895
  }
1896
+ var ExpiredTablesFilter = ({
1897
+ includeExpiredTables,
1898
+ onChange
1899
+ }) => {
1900
+ return /* @__PURE__ */ jsxRuntime.jsx(Box2__default.default, { sx: { mt: 2 }, children: /* @__PURE__ */ jsxRuntime.jsx(
1901
+ FormControlLabel__default.default,
1902
+ {
1903
+ control: /* @__PURE__ */ jsxRuntime.jsx(
1904
+ Checkbox__default.default,
1905
+ {
1906
+ checked: includeExpiredTables,
1907
+ onChange: (e) => onChange(e.target.checked),
1908
+ color: "primary"
1909
+ }
1910
+ ),
1911
+ label: "Show expired tables"
1912
+ }
1913
+ ) });
1914
+ };
1915
+ var ExpiredTablesFilter_default = ExpiredTablesFilter;
1708
1916
  var SORT_OPTIONS = [
1709
1917
  { id: "relevance", label: "Relevance" },
1710
1918
  { id: "newest", label: "Newest" },
@@ -1718,7 +1926,7 @@ var SortOptions = ({
1718
1926
  onChange == null ? void 0 : onChange(event.target.value);
1719
1927
  };
1720
1928
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1721
- /* @__PURE__ */ jsxRuntime.jsx(Typography10__default.default, { variant: "h6", gutterBottom: true, children: "Sort By" }),
1929
+ /* @__PURE__ */ jsxRuntime.jsx(Typography4__default.default, { variant: "h6", gutterBottom: true, children: "Sort By" }),
1722
1930
  /* @__PURE__ */ jsxRuntime.jsx(FormControl2__default.default, { children: /* @__PURE__ */ jsxRuntime.jsx(RadioGroup__default.default, { defaultValue: defaultValue2, onChange: handleSortChange, children: SORT_OPTIONS.map((option) => /* @__PURE__ */ jsxRuntime.jsx(
1723
1931
  FormControlLabel__default.default,
1724
1932
  {
@@ -1733,11 +1941,19 @@ var SortOptions = ({
1733
1941
  var SortOptions_default = SortOptions;
1734
1942
  var TagsFilter = ({
1735
1943
  onChange,
1736
- tags: Tags = []
1944
+ tags: Tags = [],
1945
+ initialSelectedTags
1737
1946
  }) => {
1738
- const [mustHaveTags, setMustHaveTags] = React7__default.default.useState([]);
1739
- const [mustNotHaveTags, setMustNotHaveTags] = React7__default.default.useState([]);
1740
- const [shouldHaveAtLeastOneTags, setShouldHaveAtLeastOneTags] = React7__default.default.useState([]);
1947
+ const [mustHaveTags, setMustHaveTags] = React7__default.default.useState((initialSelectedTags == null ? void 0 : initialSelectedTags.mustHave) || []);
1948
+ const [mustNotHaveTags, setMustNotHaveTags] = React7__default.default.useState((initialSelectedTags == null ? void 0 : initialSelectedTags.mustNotHave) || []);
1949
+ const [shouldHaveAtLeastOneTags, setShouldHaveAtLeastOneTags] = React7__default.default.useState((initialSelectedTags == null ? void 0 : initialSelectedTags.shouldHaveAtLeastOne) || []);
1950
+ React7__default.default.useEffect(() => {
1951
+ if (initialSelectedTags) {
1952
+ setMustHaveTags(initialSelectedTags.mustHave || []);
1953
+ setMustNotHaveTags(initialSelectedTags.mustNotHave || []);
1954
+ setShouldHaveAtLeastOneTags(initialSelectedTags.shouldHaveAtLeastOne || []);
1955
+ }
1956
+ }, [initialSelectedTags]);
1741
1957
  Tags = !!Tags ? Tags : [];
1742
1958
  const [inputValues, setInputValues] = React7__default.default.useState({
1743
1959
  mustHave: "",
@@ -1747,7 +1963,7 @@ var TagsFilter = ({
1747
1963
  const tagOptions = React7__default.default.useMemo(() => {
1748
1964
  console.log("available tags: " + JSON.stringify(Tags));
1749
1965
  console.log(!Tags);
1750
- if (!Tags || Tags.length == 0 || !Tags.map) return [];
1966
+ if (!Tags || Tags.length === 0 || !Tags.map) return [];
1751
1967
  return Tags.map((tag) => ({
1752
1968
  value: tag.id,
1753
1969
  label: tag.label
@@ -1779,7 +1995,7 @@ var TagsFilter = ({
1779
1995
  };
1780
1996
  const renderSelectedTags = (selectedTags, category) => {
1781
1997
  const tagValues = [];
1782
- if (!Tags || Tags.length == 0 || !Tags.map) return null;
1998
+ if (!Tags || Tags.length === 0 || !Tags.map) return null;
1783
1999
  Tags.forEach((tag) => {
1784
2000
  if (selectedTags.includes(tag.id)) {
1785
2001
  tagValues.push(tag);
@@ -1788,27 +2004,11 @@ var TagsFilter = ({
1788
2004
  if (tagValues.length === 0) {
1789
2005
  return null;
1790
2006
  }
1791
- return /* @__PURE__ */ jsxRuntime.jsx(Box2__default.default, { sx: { display: "flex", flexWrap: "wrap", gap: 1, mb: 2 }, children: tagValues.map((tag) => /* @__PURE__ */ jsxRuntime.jsxs(
1792
- "span",
2007
+ return /* @__PURE__ */ jsxRuntime.jsx(Box2__default.default, { sx: { display: "flex", flexWrap: "wrap", gap: 1, mb: 2 }, children: tagValues.map((tag) => /* @__PURE__ */ jsxRuntime.jsx(
2008
+ Chip,
1793
2009
  {
1794
- className: "inline-block text-sm px-3 py-1 rounded-full outline-black outline-2 font-outlined",
1795
- style: {
1796
- background: tag.color || "#bfbcbb",
1797
- color: "white",
1798
- textShadow: "black 0.2em 0.2em 0.4em"
1799
- },
1800
- children: [
1801
- tag.label,
1802
- /* @__PURE__ */ jsxRuntime.jsx(
1803
- "button",
1804
- {
1805
- type: "button",
1806
- onClick: () => handleTagChange(tag.id, category),
1807
- className: "ml-2 text-red-500 bg-white bg-opacity-50 rounded-full outline-black outline-2 font-outlined",
1808
- children: "\xD7"
1809
- }
1810
- )
1811
- ]
2010
+ tag,
2011
+ removeCallback: (tagId) => handleTagChange(tagId, category)
1812
2012
  },
1813
2013
  tag.id
1814
2014
  )) });
@@ -1816,7 +2016,7 @@ var TagsFilter = ({
1816
2016
  const createTagSelector = (category, label) => {
1817
2017
  const selectedTags = category === "mustHave" ? mustHaveTags : category === "mustNotHave" ? mustNotHaveTags : shouldHaveAtLeastOneTags;
1818
2018
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1819
- /* @__PURE__ */ jsxRuntime.jsx(Typography10__default.default, { variant: "subtitle1", gutterBottom: true, sx: { mt: 2 }, children: label }),
2019
+ /* @__PURE__ */ jsxRuntime.jsx(Typography4__default.default, { variant: "subtitle1", gutterBottom: true, sx: { mt: 2 }, children: label }),
1820
2020
  renderSelectedTags(selectedTags, category),
1821
2021
  /* @__PURE__ */ jsxRuntime.jsx(
1822
2022
  Autocomplete__default.default,
@@ -1862,18 +2062,18 @@ var TagsFilter = ({
1862
2062
  });
1863
2063
  },
1864
2064
  slots: { popper: CustomPopper2 },
1865
- renderInput: (params) => /* @__PURE__ */ jsxRuntime.jsx(TextField3__default.default, { ...params, label: `Select ${label}` })
2065
+ renderInput: (params) => /* @__PURE__ */ jsxRuntime.jsx(TextField4__default.default, { ...params, label: `Select ${label}` })
1866
2066
  },
1867
2067
  `${category}-${selectedTags.join("-")}`
1868
2068
  )
1869
2069
  ] });
1870
2070
  };
1871
2071
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1872
- /* @__PURE__ */ jsxRuntime.jsx(Typography10__default.default, { variant: "h6", gutterBottom: true, children: "Tags" }),
2072
+ /* @__PURE__ */ jsxRuntime.jsx(Typography4__default.default, { variant: "h6", gutterBottom: true, children: "Tags" }),
1873
2073
  createTagSelector("mustHave", "Must Have Tags"),
1874
- /* @__PURE__ */ jsxRuntime.jsx(Divider2__default.default, { sx: { my: 2 } }),
2074
+ /* @__PURE__ */ jsxRuntime.jsx(Divider3__default.default, { sx: { my: 2 } }),
1875
2075
  createTagSelector("mustNotHave", "Must Not Have Tags"),
1876
- /* @__PURE__ */ jsxRuntime.jsx(Divider2__default.default, { sx: { my: 2 } }),
2076
+ /* @__PURE__ */ jsxRuntime.jsx(Divider3__default.default, { sx: { my: 2 } }),
1877
2077
  createTagSelector("shouldHaveAtLeastOne", "Should Contain At Least One Tag")
1878
2078
  ] });
1879
2079
  };
@@ -1903,21 +2103,80 @@ var CustomPopper2 = (props) => {
1903
2103
  );
1904
2104
  };
1905
2105
  var TagsFilter_default = TagsFilter;
1906
- var FILTER_TYPES = [
1907
- { id: "player", label: "Players" },
1908
- { id: "event", label: "Events", disabled: true },
1909
- { id: "table", label: "Tables", disabled: true }
1910
- ];
1911
- var TypeFilter = ({ onChange }) => {
1912
- const [selectedTypes, setSelectedTypes] = React7__default.default.useState([]);
2106
+ var TextSearchCard = ({ onChange, selectedTypes, initialTextSearch }) => {
2107
+ const [query, setQuery] = React7__default.default.useState((initialTextSearch == null ? void 0 : initialTextSearch.query) || "");
2108
+ const [titleOnly, setTitleOnly] = React7__default.default.useState((initialTextSearch == null ? void 0 : initialTextSearch.titleOnly) || false);
2109
+ React7.useEffect(() => {
2110
+ if (initialTextSearch) {
2111
+ setQuery(initialTextSearch.query || "");
2112
+ setTitleOnly(initialTextSearch.titleOnly || false);
2113
+ }
2114
+ }, [initialTextSearch]);
2115
+ const shouldShow = selectedTypes.includes("table") || selectedTypes.includes("event");
2116
+ if (!shouldShow) {
2117
+ return null;
2118
+ }
2119
+ const handleQueryChange = (e) => {
2120
+ const newQuery = e.target.value;
2121
+ setQuery(newQuery);
2122
+ if (onChange) {
2123
+ onChange({ query: newQuery, titleOnly });
2124
+ }
2125
+ };
2126
+ const handleTitleOnlyChange = (e) => {
2127
+ const newTitleOnly = e.target.checked;
2128
+ setTitleOnly(newTitleOnly);
2129
+ if (onChange) {
2130
+ onChange({ query, titleOnly: newTitleOnly });
2131
+ }
2132
+ };
2133
+ return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
2134
+ /* @__PURE__ */ jsxRuntime.jsx(Typography4__default.default, { variant: "h6", gutterBottom: true, children: "Text Search" }),
2135
+ /* @__PURE__ */ jsxRuntime.jsxs(Box2__default.default, { sx: { mb: 2 }, children: [
2136
+ /* @__PURE__ */ jsxRuntime.jsx(
2137
+ TextField4__default.default,
2138
+ {
2139
+ fullWidth: true,
2140
+ label: "Search in title and description",
2141
+ variant: "outlined",
2142
+ value: query,
2143
+ onChange: handleQueryChange,
2144
+ placeholder: "Enter search terms...",
2145
+ sx: { mb: 1 }
2146
+ }
2147
+ ),
2148
+ /* @__PURE__ */ jsxRuntime.jsx(
2149
+ FormControlLabel__default.default,
2150
+ {
2151
+ control: /* @__PURE__ */ jsxRuntime.jsx(
2152
+ Checkbox__default.default,
2153
+ {
2154
+ checked: titleOnly,
2155
+ onChange: handleTitleOnlyChange
2156
+ }
2157
+ ),
2158
+ label: "Search in title only"
2159
+ }
2160
+ )
2161
+ ] })
2162
+ ] });
2163
+ };
2164
+ var TextSearchCard_default = TextSearchCard;
2165
+ var TypeFilter = ({ types, initialSelectedTypes = [], onChange }) => {
2166
+ const [selectedTypes, setSelectedTypes] = React7__default.default.useState(initialSelectedTypes);
2167
+ React7.useEffect(() => {
2168
+ setSelectedTypes(initialSelectedTypes);
2169
+ }, [initialSelectedTypes]);
1913
2170
  const handleTypeChange = (typeId) => {
1914
2171
  const newSelectedTypes = selectedTypes.includes(typeId) ? selectedTypes.filter((id) => id !== typeId) : [...selectedTypes, typeId];
1915
2172
  setSelectedTypes(newSelectedTypes);
1916
- onChange == null ? void 0 : onChange(newSelectedTypes);
2173
+ if (onChange) {
2174
+ onChange(newSelectedTypes);
2175
+ }
1917
2176
  };
1918
2177
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1919
- /* @__PURE__ */ jsxRuntime.jsx(Typography10__default.default, { variant: "h6", gutterBottom: true, children: "Type" }),
1920
- /* @__PURE__ */ jsxRuntime.jsx(FormGroup__default.default, { children: FILTER_TYPES.map((type) => /* @__PURE__ */ jsxRuntime.jsx(
2178
+ /* @__PURE__ */ jsxRuntime.jsx(Typography4__default.default, { variant: "h6", gutterBottom: true, children: "Type" }),
2179
+ /* @__PURE__ */ jsxRuntime.jsx(FormGroup__default.default, { children: types.map((type) => /* @__PURE__ */ jsxRuntime.jsx(
1921
2180
  FormControlLabel__default.default,
1922
2181
  {
1923
2182
  control: /* @__PURE__ */ jsxRuntime.jsx(
@@ -1925,7 +2184,8 @@ var TypeFilter = ({ onChange }) => {
1925
2184
  {
1926
2185
  checked: selectedTypes.includes(type.id),
1927
2186
  onChange: () => handleTypeChange(type.id),
1928
- disabled: type.disabled
2187
+ disabled: type.id === "event",
2188
+ title: type.id === "event" ? "Coming soon! Currently only player and table search are supported." : ""
1929
2189
  }
1930
2190
  ),
1931
2191
  label: type.label
@@ -1936,22 +2196,67 @@ var TypeFilter = ({ onChange }) => {
1936
2196
  };
1937
2197
  var TypeFilter_default = TypeFilter;
1938
2198
  var FiltersContainer = ({
2199
+ initialSelectedTypes = [],
2200
+ initialSelectedTags,
2201
+ initialTextSearch,
2202
+ includeExpiredTables = false,
1939
2203
  onTypeChange,
1940
2204
  onTagChange,
2205
+ onTextSearchChange,
2206
+ onIncludeExpiredTablesChange,
1941
2207
  onSubmit,
1942
- tags
2208
+ tags,
2209
+ searchTypes
1943
2210
  }) => {
2211
+ const [selectedTypes, setSelectedTypes] = React7__default.default.useState(initialSelectedTypes);
2212
+ React7.useEffect(() => {
2213
+ setSelectedTypes(initialSelectedTypes);
2214
+ }, [initialSelectedTypes]);
2215
+ const handleTypeChange = (types) => {
2216
+ setSelectedTypes(types);
2217
+ if (onTypeChange) {
2218
+ onTypeChange(types);
2219
+ }
2220
+ };
1944
2221
  return /* @__PURE__ */ jsxRuntime.jsxs(Box2__default.default, { children: [
1945
- /* @__PURE__ */ jsxRuntime.jsx(TypeFilter_default, { onChange: onTypeChange }),
1946
- /* @__PURE__ */ jsxRuntime.jsx(Divider2__default.default, { sx: { my: 2 } }),
2222
+ /* @__PURE__ */ jsxRuntime.jsx(
2223
+ TypeFilter_default,
2224
+ {
2225
+ types: searchTypes,
2226
+ initialSelectedTypes,
2227
+ onChange: handleTypeChange
2228
+ }
2229
+ ),
2230
+ /* @__PURE__ */ jsxRuntime.jsx(Divider3__default.default, { sx: { my: 2 } }),
2231
+ /* @__PURE__ */ jsxRuntime.jsx(
2232
+ TextSearchCard_default,
2233
+ {
2234
+ selectedTypes,
2235
+ initialTextSearch,
2236
+ onChange: onTextSearchChange
2237
+ }
2238
+ ),
2239
+ (selectedTypes.includes("table") || selectedTypes.includes("event")) && /* @__PURE__ */ jsxRuntime.jsx(Divider3__default.default, { sx: { my: 2 } }),
1947
2240
  /* @__PURE__ */ jsxRuntime.jsx(
1948
2241
  TagsFilter_default,
1949
2242
  {
1950
2243
  tags,
2244
+ initialSelectedTags,
1951
2245
  onChange: onTagChange
1952
2246
  }
1953
2247
  ),
1954
- /* @__PURE__ */ jsxRuntime.jsx(Divider2__default.default, { sx: { my: 2 } }),
2248
+ /* @__PURE__ */ jsxRuntime.jsx(Divider3__default.default, { sx: { my: 2 } }),
2249
+ selectedTypes.includes("table") && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
2250
+ /* @__PURE__ */ jsxRuntime.jsx(
2251
+ ExpiredTablesFilter_default,
2252
+ {
2253
+ includeExpiredTables,
2254
+ onChange: onIncludeExpiredTablesChange || (() => {
2255
+ })
2256
+ }
2257
+ ),
2258
+ /* @__PURE__ */ jsxRuntime.jsx(Divider3__default.default, { sx: { my: 2 } })
2259
+ ] }),
1955
2260
  /* @__PURE__ */ jsxRuntime.jsx(Box2__default.default, { sx: { display: "flex", justifyContent: "center", mt: 2 }, children: /* @__PURE__ */ jsxRuntime.jsx(
1956
2261
  Button7__default.default,
1957
2262
  {
@@ -2009,16 +2314,75 @@ var SearchResultCard_default = SearchResultCard;
2009
2314
  function SearchPageLayout({
2010
2315
  results,
2011
2316
  title = "Search Results",
2317
+ initialSelectedTypes = [],
2318
+ initialSelectedTags = {
2319
+ mustHave: [],
2320
+ mustNotHave: [],
2321
+ shouldHaveAtLeastOne: []
2322
+ },
2323
+ initialTextSearch = {
2324
+ query: "",
2325
+ titleOnly: false
2326
+ },
2327
+ includeExpiredTables: initialIncludeExpiredTables = false,
2012
2328
  onTypeChange,
2013
2329
  onTagChange,
2330
+ onTextSearchChange,
2331
+ onIncludeExpiredTablesChange,
2014
2332
  onSubmit,
2015
2333
  onResultClick,
2334
+ onPacketChange,
2335
+ pagination,
2016
2336
  validTags,
2017
- allTags
2337
+ allTags,
2338
+ searchTypes,
2339
+ isLoading = false
2018
2340
  }) {
2019
- "use client";
2020
2341
  const theme = material.useTheme();
2021
2342
  const isMobile = material.useMediaQuery(theme.breakpoints.down("md"));
2343
+ const [selectedTypes, setSelectedTypes] = React7.useState(initialSelectedTypes);
2344
+ const [selectedTags, setSelectedTags] = React7.useState(initialSelectedTags);
2345
+ const [textSearch, setTextSearch] = React7.useState(initialTextSearch);
2346
+ const [includeExpiredTables, setIncludeExpiredTables] = React7.useState(initialIncludeExpiredTables);
2347
+ React7.useEffect(() => {
2348
+ setSelectedTypes(initialSelectedTypes);
2349
+ }, [initialSelectedTypes]);
2350
+ React7.useEffect(() => {
2351
+ setSelectedTags(initialSelectedTags);
2352
+ }, [initialSelectedTags]);
2353
+ React7.useEffect(() => {
2354
+ setTextSearch(initialTextSearch);
2355
+ }, [initialTextSearch]);
2356
+ React7.useEffect(() => {
2357
+ setIncludeExpiredTables(initialIncludeExpiredTables);
2358
+ }, [initialIncludeExpiredTables]);
2359
+ const handleTypeChange = (types) => {
2360
+ setSelectedTypes(types);
2361
+ if (onTypeChange) onTypeChange(types);
2362
+ };
2363
+ const handleTagChange = (tags) => {
2364
+ setSelectedTags(tags);
2365
+ if (onTagChange) onTagChange(tags);
2366
+ };
2367
+ const handleTextSearchChange = (ts) => {
2368
+ setTextSearch(ts);
2369
+ if (onTextSearchChange) onTextSearchChange(ts);
2370
+ };
2371
+ const handleIncludeExpiredTablesChange = (include) => {
2372
+ setIncludeExpiredTables(include);
2373
+ if (onIncludeExpiredTablesChange) onIncludeExpiredTablesChange(include);
2374
+ };
2375
+ const handleSubmit = () => {
2376
+ const currentCriteria = {
2377
+ selectedTypes,
2378
+ selectedTags,
2379
+ textSearch,
2380
+ includeExpiredTables
2381
+ };
2382
+ if (onSubmit) {
2383
+ onSubmit(currentCriteria);
2384
+ }
2385
+ };
2022
2386
  return /* @__PURE__ */ jsxRuntime.jsxs(Box2__default.default, { sx: { padding: 2 }, children: [
2023
2387
  /* @__PURE__ */ jsxRuntime.jsx(Card10__default.default, { sx: { marginBottom: 2 }, children: /* @__PURE__ */ jsxRuntime.jsx(
2024
2388
  CardHeader4__default.default,
@@ -2032,8 +2396,8 @@ function SearchPageLayout({
2032
2396
  }
2033
2397
  }
2034
2398
  ) }),
2035
- /* @__PURE__ */ jsxRuntime.jsxs(Grid9__default.default, { container: true, spacing: 2, children: [
2036
- /* @__PURE__ */ jsxRuntime.jsx(Grid9__default.default, { size: { xs: 12, md: 3 }, children: /* @__PURE__ */ jsxRuntime.jsxs(Card10__default.default, { sx: { marginBottom: isMobile ? 2 : 0 }, children: [
2399
+ /* @__PURE__ */ jsxRuntime.jsxs(Grid8__default.default, { container: true, spacing: 2, children: [
2400
+ /* @__PURE__ */ jsxRuntime.jsx(Grid8__default.default, { size: { xs: 12, md: 3 }, children: /* @__PURE__ */ jsxRuntime.jsxs(Card10__default.default, { sx: { marginBottom: isMobile ? 2 : 0 }, children: [
2037
2401
  /* @__PURE__ */ jsxRuntime.jsx(
2038
2402
  CardHeader4__default.default,
2039
2403
  {
@@ -2049,14 +2413,21 @@ function SearchPageLayout({
2049
2413
  /* @__PURE__ */ jsxRuntime.jsx(CardContent10__default.default, { children: /* @__PURE__ */ jsxRuntime.jsx(
2050
2414
  FiltersContainer_default,
2051
2415
  {
2052
- onTypeChange,
2053
- onTagChange,
2054
- onSubmit,
2055
- tags: validTags
2416
+ initialSelectedTypes: selectedTypes,
2417
+ initialSelectedTags: selectedTags,
2418
+ initialTextSearch: textSearch,
2419
+ includeExpiredTables,
2420
+ onTypeChange: handleTypeChange,
2421
+ onTagChange: handleTagChange,
2422
+ onTextSearchChange: handleTextSearchChange,
2423
+ onIncludeExpiredTablesChange: handleIncludeExpiredTablesChange,
2424
+ onSubmit: handleSubmit,
2425
+ tags: validTags,
2426
+ searchTypes
2056
2427
  }
2057
2428
  ) })
2058
2429
  ] }) }),
2059
- /* @__PURE__ */ jsxRuntime.jsx(Grid9__default.default, { size: { xs: 12, md: 9 }, children: /* @__PURE__ */ jsxRuntime.jsxs(Card10__default.default, { children: [
2430
+ /* @__PURE__ */ jsxRuntime.jsx(Grid8__default.default, { size: { xs: 12, md: 9 }, children: /* @__PURE__ */ jsxRuntime.jsxs(Card10__default.default, { children: [
2060
2431
  /* @__PURE__ */ jsxRuntime.jsx(
2061
2432
  CardHeader4__default.default,
2062
2433
  {
@@ -2069,10 +2440,12 @@ function SearchPageLayout({
2069
2440
  }
2070
2441
  }
2071
2442
  ),
2072
- /* @__PURE__ */ jsxRuntime.jsx(CardContent10__default.default, { children: /* @__PURE__ */ jsxRuntime.jsx(
2443
+ /* @__PURE__ */ jsxRuntime.jsx(CardContent10__default.default, { children: isLoading ? /* @__PURE__ */ jsxRuntime.jsx(Box2__default.default, { sx: { display: "flex", justifyContent: "center", py: 8 }, children: /* @__PURE__ */ jsxRuntime.jsx(CircularProgress3__default.default, { size: 60, thickness: 4 }) }) : /* @__PURE__ */ jsxRuntime.jsx(
2073
2444
  ResultsContainer_default,
2074
2445
  {
2075
2446
  results,
2447
+ pagination,
2448
+ onPacketChange,
2076
2449
  onResultClick,
2077
2450
  tags: allTags
2078
2451
  }
@@ -2174,14 +2547,14 @@ var PlayerHighlightsCard = function(props) {
2174
2547
  removeFromTable
2175
2548
  } = props;
2176
2549
  return /* @__PURE__ */ jsxRuntime.jsx(material.Card, { elevation: 3, sx: { backgroundColor: canEdit ? "#fffbea" : "#f5f9fa", marginBottom: "6px" }, children: /* @__PURE__ */ jsxRuntime.jsxs(material.CardContent, { children: [
2177
- /* @__PURE__ */ jsxRuntime.jsxs(Grid9__default.default, { container: true, spacing: 2, direction: "column", children: [
2178
- /* @__PURE__ */ jsxRuntime.jsxs(Grid9__default.default, { container: true, direction: "row", children: [
2179
- /* @__PURE__ */ jsxRuntime.jsx(Grid9__default.default, { children: /* @__PURE__ */ jsxRuntime.jsx(Image2__default.default, { alt: player.username + "'s profile pic", height: 64, src: player.miniPic || "", width: 64 }) }),
2180
- /* @__PURE__ */ jsxRuntime.jsx(Grid9__default.default, { children: /* @__PURE__ */ jsxRuntime.jsx(material.Typography, { variant: "h5", children: player.username }) })
2550
+ /* @__PURE__ */ jsxRuntime.jsxs(Grid8__default.default, { container: true, spacing: 2, direction: "column", children: [
2551
+ /* @__PURE__ */ jsxRuntime.jsxs(Grid8__default.default, { container: true, direction: "row", children: [
2552
+ /* @__PURE__ */ jsxRuntime.jsx(Grid8__default.default, { children: /* @__PURE__ */ jsxRuntime.jsx(Image2__default.default, { alt: player.username + "'s profile pic", height: 64, src: player.miniPic || "", width: 64 }) }),
2553
+ /* @__PURE__ */ jsxRuntime.jsx(Grid8__default.default, { children: /* @__PURE__ */ jsxRuntime.jsx(material.Typography, { variant: "h5", children: player.username }) })
2181
2554
  ] }),
2182
- /* @__PURE__ */ jsxRuntime.jsx(Grid9__default.default, { children: renderTagsFromIds(player.tags, allTags) })
2555
+ /* @__PURE__ */ jsxRuntime.jsx(Grid8__default.default, { children: renderTagsFromIds(player.tags, allTags) })
2183
2556
  ] }),
2184
- canEdit && /* @__PURE__ */ jsxRuntime.jsxs(Grid9__default.default, { children: [
2557
+ canEdit && /* @__PURE__ */ jsxRuntime.jsxs(Grid8__default.default, { children: [
2185
2558
  /* @__PURE__ */ jsxRuntime.jsx(Button7__default.default, { onClick: () => removeFromTable(player), children: isWaitList ? /* @__PURE__ */ jsxRuntime.jsx("p", { children: "Deny Player" }) : /* @__PURE__ */ jsxRuntime.jsx("p", { children: "Remove Player" }) }),
2186
2559
  canChangeDungeonMaster && /* @__PURE__ */ jsxRuntime.jsx(Button7__default.default, { onClick: () => {
2187
2560
  handleAssignToDungeonMaster(player);
@@ -2193,11 +2566,11 @@ var PlayerHighlightsCard = function(props) {
2193
2566
  var DMHighlightsCard = function({ canEdit, player, allTags }) {
2194
2567
  return /* @__PURE__ */ jsxRuntime.jsxs(material.Card, { elevation: 3, sx: { backgroundColor: "#f5f9fa", marginBottom: "6px" }, children: [
2195
2568
  /* @__PURE__ */ jsxRuntime.jsx(material.CardHeader, { slotProps: { title: { variant: "h4" } }, title: "Game Master" }),
2196
- /* @__PURE__ */ jsxRuntime.jsx(material.CardContent, { sx: { backgroundColor: canEdit ? "#fffbea" : "inherit" }, children: /* @__PURE__ */ jsxRuntime.jsxs(Grid9__default.default, { container: true, spacing: 2, direction: "column", children: [
2197
- /* @__PURE__ */ jsxRuntime.jsx(Grid9__default.default, { children: /* @__PURE__ */ jsxRuntime.jsx(material.Typography, { variant: "h5", children: player.username }) }),
2198
- /* @__PURE__ */ jsxRuntime.jsxs(Grid9__default.default, { container: true, direction: "row", children: [
2199
- /* @__PURE__ */ jsxRuntime.jsx(Grid9__default.default, { children: /* @__PURE__ */ jsxRuntime.jsx(Image2__default.default, { alt: player.username + "'s profile pic", height: 120, src: player.imageUrl ? player.imageUrl : "", width: 256 }) }),
2200
- /* @__PURE__ */ jsxRuntime.jsx(Grid9__default.default, { children: renderTagsFromIds(player.tags, allTags) }),
2569
+ /* @__PURE__ */ jsxRuntime.jsx(material.CardContent, { sx: { backgroundColor: canEdit ? "#fffbea" : "inherit" }, children: /* @__PURE__ */ jsxRuntime.jsxs(Grid8__default.default, { container: true, spacing: 2, direction: "column", children: [
2570
+ /* @__PURE__ */ jsxRuntime.jsx(Grid8__default.default, { children: /* @__PURE__ */ jsxRuntime.jsx(material.Typography, { variant: "h5", children: player.username }) }),
2571
+ /* @__PURE__ */ jsxRuntime.jsxs(Grid8__default.default, { container: true, direction: "row", children: [
2572
+ /* @__PURE__ */ jsxRuntime.jsx(Grid8__default.default, { children: /* @__PURE__ */ jsxRuntime.jsx(Image2__default.default, { alt: player.username + "'s profile pic", height: 120, src: player.imageUrl ? player.imageUrl : "", width: 256 }) }),
2573
+ /* @__PURE__ */ jsxRuntime.jsx(Grid8__default.default, { children: renderTagsFromIds(player.tags, allTags) }),
2201
2574
  /* @__PURE__ */ jsxRuntime.jsx(material.Typography, { children: player.description })
2202
2575
  ] })
2203
2576
  ] }) })
@@ -2351,6 +2724,87 @@ var NextGameCountdown = ({ nextGameTime }) => {
2351
2724
  timeLeft
2352
2725
  ] });
2353
2726
  };
2727
+ function TagEditor({
2728
+ title = "Tags",
2729
+ selectedTags,
2730
+ possibleTags,
2731
+ onToggleTag
2732
+ }) {
2733
+ const [inputValue, setInputValue] = React7.useState("");
2734
+ const selectedIds = React7.useMemo(() => selectedTags.map((tag) => tag.id), [selectedTags]);
2735
+ const options = React7.useMemo(
2736
+ () => possibleTags.map((tag) => ({ value: tag.id, label: tag.label })),
2737
+ [possibleTags]
2738
+ );
2739
+ return /* @__PURE__ */ jsxRuntime.jsx(Grid8__default.default, { container: true, children: /* @__PURE__ */ jsxRuntime.jsx(Grid8__default.default, { size: { xs: 12 }, children: /* @__PURE__ */ jsxRuntime.jsxs(Card10__default.default, { children: [
2740
+ /* @__PURE__ */ jsxRuntime.jsx(
2741
+ CardHeader4__default.default,
2742
+ {
2743
+ title,
2744
+ style: {
2745
+ background: "linear-gradient(135deg, rgba(25, 118, 210, 0.8), rgba(25, 118, 210, 1))",
2746
+ color: "#FFFFFF",
2747
+ fontSize: "1.5rem",
2748
+ textShadow: "0px 3px 6px rgba(0, 0, 0, 0.5)"
2749
+ }
2750
+ }
2751
+ ),
2752
+ /* @__PURE__ */ jsxRuntime.jsxs(CardContent10__default.default, { children: [
2753
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-2 flex flex-wrap gap-2", children: selectedTags.map((tag) => /* @__PURE__ */ jsxRuntime.jsx(
2754
+ Chip,
2755
+ {
2756
+ tag,
2757
+ removeCallback: () => onToggleTag(tag.id)
2758
+ },
2759
+ tag.id
2760
+ )) }),
2761
+ /* @__PURE__ */ jsxRuntime.jsx(Grid8__default.default, { container: true, spacing: 3, children: /* @__PURE__ */ jsxRuntime.jsx(Grid8__default.default, { sx: { marginTop: 3, width: "100%" }, children: /* @__PURE__ */ jsxRuntime.jsx(
2762
+ Autocomplete__default.default,
2763
+ {
2764
+ options,
2765
+ filterOptions: (availableOptions, state) => availableOptions.filter(
2766
+ (option) => !selectedIds.includes(option.value) && option.label.toLowerCase().includes(state.inputValue.toLowerCase())
2767
+ ).slice(0, 3),
2768
+ value: null,
2769
+ inputValue,
2770
+ onInputChange: (event, newInputValue) => {
2771
+ if (event && event.type === "change") {
2772
+ setInputValue(newInputValue);
2773
+ }
2774
+ },
2775
+ onChange: (event, newValue) => {
2776
+ if (newValue) {
2777
+ onToggleTag(newValue.value);
2778
+ }
2779
+ setInputValue("");
2780
+ },
2781
+ slots: { popper: CustomPopper3 },
2782
+ renderInput: (params) => /* @__PURE__ */ jsxRuntime.jsx(TextField4__default.default, { ...params, label: "Select Tags" })
2783
+ },
2784
+ selectedIds.join("-")
2785
+ ) }) })
2786
+ ] })
2787
+ ] }) }) });
2788
+ }
2789
+ var CustomPopper3 = (props) => {
2790
+ return /* @__PURE__ */ jsxRuntime.jsx(
2791
+ Popper__default.default,
2792
+ {
2793
+ ...props,
2794
+ modifiers: [
2795
+ {
2796
+ name: "preventOverflow",
2797
+ options: { boundary: "viewport" }
2798
+ },
2799
+ {
2800
+ name: "offset",
2801
+ options: { offset: [0, -10] }
2802
+ }
2803
+ ],
2804
+ placement: "top-start"
2805
+ }
2806
+ );
2807
+ };
2354
2808
  function TablePageLayout(props) {
2355
2809
  var _a;
2356
2810
  const { allTags, dungeonMaster, onDeleteTable, onJoinWaitlist, onLeaveTable, onSaveDraft, players, table, tableStatus, waitlistPlayers } = props;
@@ -2421,9 +2875,9 @@ function TablePageLayout(props) {
2421
2875
  p: 2,
2422
2876
  boxShadow: "0px 8px 15px rgba(25, 118, 210, 0.3)"
2423
2877
  },
2424
- children: /* @__PURE__ */ jsxRuntime.jsxs(Grid9__default.default, { container: true, direction: "column", children: [
2878
+ children: /* @__PURE__ */ jsxRuntime.jsxs(Grid8__default.default, { container: true, direction: "column", children: [
2425
2879
  /* @__PURE__ */ jsxRuntime.jsxs(
2426
- Grid9__default.default,
2880
+ Grid8__default.default,
2427
2881
  {
2428
2882
  container: true,
2429
2883
  direction: "column",
@@ -2468,7 +2922,7 @@ function TablePageLayout(props) {
2468
2922
  value: currentShortDescription
2469
2923
  }
2470
2924
  ) : /* @__PURE__ */ jsxRuntime.jsx(material.Typography, { sx: { color: "white", opacity: 0.95 }, children: currentShortDescription }),
2471
- /* @__PURE__ */ jsxRuntime.jsx(Grid9__default.default, { container: true, children: isTableInEditMode ? renderEditableTags(currentTags, allTags, handleToggleTag) : renderTags(currentTagIds, allTags) }),
2925
+ /* @__PURE__ */ jsxRuntime.jsx(Grid8__default.default, { container: true, children: isTableInEditMode ? renderEditableTags(currentTags, allTags, handleToggleTag) : renderTags(currentTagIds, allTags) }),
2472
2926
  /* @__PURE__ */ jsxRuntime.jsx(
2473
2927
  TableActionsBar,
2474
2928
  {
@@ -2488,8 +2942,8 @@ function TablePageLayout(props) {
2488
2942
  ]
2489
2943
  }
2490
2944
  ),
2491
- /* @__PURE__ */ jsxRuntime.jsxs(Grid9__default.default, { container: true, spacing: 2, sx: { mt: 2 }, children: [
2492
- /* @__PURE__ */ jsxRuntime.jsx(Grid9__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(
2945
+ /* @__PURE__ */ jsxRuntime.jsxs(Grid8__default.default, { container: true, spacing: 2, sx: { mt: 2 }, children: [
2946
+ /* @__PURE__ */ jsxRuntime.jsx(Grid8__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(
2493
2947
  AutoResizingTextarea_default,
2494
2948
  {
2495
2949
  isInEditMode: isTableInEditMode,
@@ -2498,7 +2952,7 @@ function TablePageLayout(props) {
2498
2952
  value: currentDescription
2499
2953
  }
2500
2954
  ) : /* @__PURE__ */ jsxRuntime.jsx(material.Typography, { sx: { whiteSpace: "pre-wrap" }, children: currentDescription }) }) }) }),
2501
- /* @__PURE__ */ jsxRuntime.jsxs(Grid9__default.default, { size: { xs: 12, md: 4 }, children: [
2955
+ /* @__PURE__ */ jsxRuntime.jsxs(Grid8__default.default, { size: { xs: 12, md: 4 }, children: [
2502
2956
  /* @__PURE__ */ jsxRuntime.jsx(DMHighlightsCard, { canEdit: isTableInEditMode, player: currentDungeonMaster, allTags }),
2503
2957
  /* @__PURE__ */ jsxRuntime.jsxs(material.Card, { sx: { height: "100%" }, children: [
2504
2958
  /* @__PURE__ */ jsxRuntime.jsx(material.CardHeader, { slotProps: { title: { variant: "h4" } }, title: "Players: " }),
@@ -2525,13 +2979,13 @@ var renderTags = function(tags, allTags) {
2525
2979
  if (!tags || !allTags) {
2526
2980
  return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, {});
2527
2981
  }
2528
- return /* @__PURE__ */ jsxRuntime.jsx(Grid9__default.default, { container: true, spacing: 1, sx: { pb: 1.5 }, children: tags.map((tagId) => {
2982
+ return /* @__PURE__ */ jsxRuntime.jsx(Grid8__default.default, { container: true, spacing: 1, sx: { pb: 1.5 }, children: tags.map((tagId) => {
2529
2983
  const tag = allTags.find((potentialTag) => tagId === potentialTag.id);
2530
2984
  return tag ? generateTagsDisplay(tag) : /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, {});
2531
2985
  }) });
2532
2986
  };
2533
2987
  var renderEditableTags = function(selectedTags, allTags, onToggleTag) {
2534
- return /* @__PURE__ */ jsxRuntime.jsx(Grid9__default.default, { size: { xs: 12 }, sx: { pb: 1.5 }, children: /* @__PURE__ */ jsxRuntime.jsx(
2988
+ return /* @__PURE__ */ jsxRuntime.jsx(Grid8__default.default, { size: { xs: 12 }, sx: { pb: 1.5 }, children: /* @__PURE__ */ jsxRuntime.jsx(
2535
2989
  TagEditor,
2536
2990
  {
2537
2991
  title: "Table Tags",
@@ -2559,18 +3013,21 @@ exports.EventEditProvider = EventEditProvider;
2559
3013
  exports.EventPageLayout = EventPageLayout;
2560
3014
  exports.EventResultCard = EventResultCard_default;
2561
3015
  exports.EventTablesCard = EventTablesCard_default;
3016
+ exports.ExpiredTablesFilter = ExpiredTablesFilter_default;
2562
3017
  exports.FiltersContainer = FiltersContainer_default;
2563
3018
  exports.GameTableProvider = GameTableProvider;
2564
3019
  exports.ModalContext = ModalContext;
2565
3020
  exports.ModalProvider = ModalProvider_default;
2566
3021
  exports.NextGameCountdown = NextGameCountdown;
3022
+ exports.NextGameLabel = NextGameLabel_default;
2567
3023
  exports.PlayerDetailsCard = PlayerDetailsCard_default;
2568
3024
  exports.PlayerDisplayCard = PlayerDisplayCard_default;
2569
3025
  exports.PlayerHighlightsCard = PlayerHighlightsCard;
3026
+ exports.PlayerPageLayout = PlayerPageLayout;
2570
3027
  exports.PlayerPromptCard = PlayerPromptCard_default;
2571
3028
  exports.PlayerResultCard = PlayerResultCard_default;
2572
- exports.PlayerTagsCard = PlayerTagsCard;
2573
- exports.PlayerTagsEdit = PlayerTagsEdit;
3029
+ exports.PlayerTagsCard = PlayerTagsCard_default;
3030
+ exports.PlayerTagsEdit = PlayerTagsEdit_default;
2574
3031
  exports.PlayersScrollableList = PlayersScrollableList_default;
2575
3032
  exports.ResultsContainer = ResultsContainer_default;
2576
3033
  exports.ScrollableResultsList = ScrollableResultsList_default;
@@ -2583,6 +3040,7 @@ exports.TableResultCard = TableResultCard_default;
2583
3040
  exports.TablesScrollableList = TablesScrollableList_default;
2584
3041
  exports.TagEditor = TagEditor;
2585
3042
  exports.TagsFilter = TagsFilter_default;
3043
+ exports.TextSearchCard = TextSearchCard_default;
2586
3044
  exports.TypeFilter = TypeFilter_default;
2587
3045
  exports.generateTagsDisplay = generateTagsDisplay;
2588
3046
  exports.renderTagsFromIds = renderTagsFromIds;