@mbpockets/shared-ui 0.1.20 → 0.2.0

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 (125) hide show
  1. package/dist/EventPage/index.cjs +208 -121
  2. package/dist/EventPage/index.cjs.map +1 -1
  3. package/dist/EventPage/index.mjs +200 -119
  4. package/dist/EventPage/index.mjs.map +1 -1
  5. package/dist/EventPage.cjs +208 -121
  6. package/dist/EventPage.cjs.map +1 -1
  7. package/dist/EventPage.mjs +200 -119
  8. package/dist/EventPage.mjs.map +1 -1
  9. package/dist/PlayerPage/index.cjs.map +1 -1
  10. package/dist/PlayerPage/index.mjs.map +1 -1
  11. package/dist/PlayerPage.cjs.map +1 -1
  12. package/dist/PlayerPage.mjs.map +1 -1
  13. package/dist/ProfilePage/index.cjs.map +1 -1
  14. package/dist/ProfilePage/index.mjs.map +1 -1
  15. package/dist/ProfilePage.cjs.map +1 -1
  16. package/dist/ProfilePage.mjs.map +1 -1
  17. package/dist/SearchPage/Filters/index.cjs +149 -43
  18. package/dist/SearchPage/Filters/index.cjs.map +1 -1
  19. package/dist/SearchPage/Filters/index.d.cts +1 -2
  20. package/dist/SearchPage/Filters/index.d.ts +1 -2
  21. package/dist/SearchPage/Filters/index.mjs +146 -42
  22. package/dist/SearchPage/Filters/index.mjs.map +1 -1
  23. package/dist/SearchPage/Filters.cjs +149 -43
  24. package/dist/SearchPage/Filters.cjs.map +1 -1
  25. package/dist/SearchPage/Filters.d.cts +38 -3
  26. package/dist/SearchPage/Filters.d.ts +38 -3
  27. package/dist/SearchPage/Filters.mjs +146 -42
  28. package/dist/SearchPage/Filters.mjs.map +1 -1
  29. package/dist/SearchPage/Results/index.cjs +138 -67
  30. package/dist/SearchPage/Results/index.cjs.map +1 -1
  31. package/dist/SearchPage/Results/index.mjs +126 -63
  32. package/dist/SearchPage/Results/index.mjs.map +1 -1
  33. package/dist/SearchPage/Results.cjs +138 -67
  34. package/dist/SearchPage/Results.cjs.map +1 -1
  35. package/dist/SearchPage/Results.d.cts +21 -12
  36. package/dist/SearchPage/Results.d.ts +21 -12
  37. package/dist/SearchPage/Results.mjs +126 -63
  38. package/dist/SearchPage/Results.mjs.map +1 -1
  39. package/dist/SearchPage/index.cjs +495 -221
  40. package/dist/SearchPage/index.cjs.map +1 -1
  41. package/dist/SearchPage/index.d.cts +1 -1
  42. package/dist/SearchPage/index.d.ts +1 -1
  43. package/dist/SearchPage/index.mjs +482 -216
  44. package/dist/SearchPage/index.mjs.map +1 -1
  45. package/dist/SearchPage.cjs +495 -221
  46. package/dist/SearchPage.cjs.map +1 -1
  47. package/dist/SearchPage.d.cts +78 -7
  48. package/dist/SearchPage.d.ts +78 -7
  49. package/dist/SearchPage.mjs +482 -216
  50. package/dist/SearchPage.mjs.map +1 -1
  51. package/dist/TablePage/index.cjs +10 -1
  52. package/dist/TablePage/index.cjs.map +1 -1
  53. package/dist/TablePage/index.d.cts +2 -2
  54. package/dist/TablePage/index.d.ts +2 -2
  55. package/dist/TablePage/index.mjs +10 -2
  56. package/dist/TablePage/index.mjs.map +1 -1
  57. package/dist/TablePage.cjs +10 -1
  58. package/dist/TablePage.cjs.map +1 -1
  59. package/dist/TablePage.d.cts +7 -2
  60. package/dist/TablePage.d.ts +7 -2
  61. package/dist/TablePage.mjs +10 -2
  62. package/dist/TablePage.mjs.map +1 -1
  63. package/dist/index.cjs +446 -178
  64. package/dist/index.cjs.map +1 -1
  65. package/dist/index.d.cts +3 -3
  66. package/dist/index.d.ts +3 -3
  67. package/dist/index.mjs +434 -175
  68. package/dist/index.mjs.map +1 -1
  69. package/dist/mocks/SearchResults.cjs +22 -15
  70. package/dist/mocks/SearchResults.cjs.map +1 -1
  71. package/dist/mocks/SearchResults.d.cts +3 -15
  72. package/dist/mocks/SearchResults.d.ts +3 -15
  73. package/dist/mocks/SearchResults.mjs +22 -15
  74. package/dist/mocks/SearchResults.mjs.map +1 -1
  75. package/dist/mocks/index.cjs +22 -15
  76. package/dist/mocks/index.cjs.map +1 -1
  77. package/dist/mocks/index.d.cts +2 -1
  78. package/dist/mocks/index.d.ts +2 -1
  79. package/dist/mocks/index.mjs +22 -15
  80. package/dist/mocks/index.mjs.map +1 -1
  81. package/dist/mocks.cjs +22 -15
  82. package/dist/mocks.cjs.map +1 -1
  83. package/dist/mocks.d.cts +2 -1
  84. package/dist/mocks.d.ts +2 -1
  85. package/dist/mocks.mjs +22 -15
  86. package/dist/mocks.mjs.map +1 -1
  87. package/dist/{common → shared}/index.cjs.map +1 -1
  88. package/dist/{common → shared}/index.d.cts +1 -1
  89. package/dist/{common → shared}/index.d.ts +1 -1
  90. package/dist/{common → shared}/index.mjs.map +1 -1
  91. package/dist/{common.cjs → shared.cjs} +2 -2
  92. package/dist/{common.cjs.map → shared.cjs.map} +1 -1
  93. package/dist/{common.css → shared.css} +1 -1
  94. package/dist/{common.mjs → shared.mjs} +2 -2
  95. package/dist/{common.mjs.map → shared.mjs.map} +1 -1
  96. package/dist/types/index.d.cts +1 -1
  97. package/dist/types/index.d.ts +1 -1
  98. package/dist/types/search.d.cts +23 -1
  99. package/dist/types/search.d.ts +23 -1
  100. package/dist/types.d.cts +1 -1
  101. package/dist/types.d.ts +1 -1
  102. package/package.json +1 -1
  103. /package/dist/{common → shared}/Modal/index.cjs +0 -0
  104. /package/dist/{common → shared}/Modal/index.cjs.map +0 -0
  105. /package/dist/{common → shared}/Modal/index.css +0 -0
  106. /package/dist/{common → shared}/Modal/index.css.map +0 -0
  107. /package/dist/{common → shared}/Modal/index.d.cts +0 -0
  108. /package/dist/{common → shared}/Modal/index.d.ts +0 -0
  109. /package/dist/{common → shared}/Modal/index.mjs +0 -0
  110. /package/dist/{common → shared}/Modal/index.mjs.map +0 -0
  111. /package/dist/{common → shared}/Modal.cjs +0 -0
  112. /package/dist/{common → shared}/Modal.cjs.map +0 -0
  113. /package/dist/{common → shared}/Modal.css +0 -0
  114. /package/dist/{common → shared}/Modal.css.map +0 -0
  115. /package/dist/{common → shared}/Modal.d.cts +0 -0
  116. /package/dist/{common → shared}/Modal.d.ts +0 -0
  117. /package/dist/{common → shared}/Modal.mjs +0 -0
  118. /package/dist/{common → shared}/Modal.mjs.map +0 -0
  119. /package/dist/{common → shared}/index.cjs +0 -0
  120. /package/dist/{common → shared}/index.css +0 -0
  121. /package/dist/{common → shared}/index.css.map +0 -0
  122. /package/dist/{common → shared}/index.mjs +0 -0
  123. /package/dist/{common.css.map → shared.css.map} +0 -0
  124. /package/dist/{common.d.cts → shared.d.cts} +0 -0
  125. /package/dist/{common.d.ts → shared.d.ts} +0 -0
@@ -12,12 +12,18 @@ 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
14
  var Grid5 = require('@mui/material/Grid');
15
- var Card4 = require('@mui/material/Card');
16
- var CardContent4 = require('@mui/material/CardContent');
15
+ var Card3 = require('@mui/material/Card');
16
+ var CardContent3 = require('@mui/material/CardContent');
17
17
  var CardHeader = require('@mui/material/CardHeader');
18
18
  var Divider = 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');
@@ -32,12 +38,18 @@ var CancelIcon__default = /*#__PURE__*/_interopDefault(CancelIcon);
32
38
  var CheckCircleIcon__default = /*#__PURE__*/_interopDefault(CheckCircleIcon);
33
39
  var Box2__default = /*#__PURE__*/_interopDefault(Box2);
34
40
  var Grid5__default = /*#__PURE__*/_interopDefault(Grid5);
35
- var Card4__default = /*#__PURE__*/_interopDefault(Card4);
36
- var CardContent4__default = /*#__PURE__*/_interopDefault(CardContent4);
41
+ var Card3__default = /*#__PURE__*/_interopDefault(Card3);
42
+ var CardContent3__default = /*#__PURE__*/_interopDefault(CardContent3);
37
43
  var CardHeader__default = /*#__PURE__*/_interopDefault(CardHeader);
38
44
  var Divider__default = /*#__PURE__*/_interopDefault(Divider);
45
+ var Typography4__default = /*#__PURE__*/_interopDefault(Typography4);
46
+ var Pagination__default = /*#__PURE__*/_interopDefault(Pagination);
39
47
  var Avatar__default = /*#__PURE__*/_interopDefault(Avatar);
40
- var CasinoIcon__default = /*#__PURE__*/_interopDefault(CasinoIcon);
48
+ var Chip2__default = /*#__PURE__*/_interopDefault(Chip2);
49
+ var LinearProgress__default = /*#__PURE__*/_interopDefault(LinearProgress);
50
+ var PersonIcon__default = /*#__PURE__*/_interopDefault(PersonIcon);
51
+ var SupervisorAccountIcon__default = /*#__PURE__*/_interopDefault(SupervisorAccountIcon);
52
+ var TableRestaurantIcon__default = /*#__PURE__*/_interopDefault(TableRestaurantIcon);
41
53
  var CalendarTodayIcon__default = /*#__PURE__*/_interopDefault(CalendarTodayIcon);
42
54
  var LocationOnIcon__default = /*#__PURE__*/_interopDefault(LocationOnIcon);
43
55
  var EventIcon__default = /*#__PURE__*/_interopDefault(EventIcon);
@@ -129,6 +141,13 @@ function Chip({ tag, removeCallback }) {
129
141
  function generateTagsDisplay(tag) {
130
142
  return /* @__PURE__ */ jsxRuntime.jsx(Chip, { tag }, tag.id);
131
143
  }
144
+ function renderTagsFromIds(ids, legalTags) {
145
+ if (!ids || !legalTags || legalTags.length === 0) {
146
+ return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, {});
147
+ }
148
+ const validTags = ids.map((id) => legalTags.find((tag) => tag.id === id)).filter((tag) => Boolean(tag));
149
+ return validTags.map((tag) => generateTagsDisplay(tag));
150
+ }
132
151
  function EventBannerEdit({
133
152
  initialValue,
134
153
  onCancel,
@@ -937,6 +956,14 @@ var generateLink = function(link) {
937
956
  link.text
938
957
  );
939
958
  };
959
+ var NextGameLabel = ({ nextGameTime }) => {
960
+ const date = typeof nextGameTime === "string" ? new Date(nextGameTime) : nextGameTime;
961
+ return /* @__PURE__ */ jsxRuntime.jsxs(material.Typography, { variant: "caption", sx: { display: "block", mb: 1, color: "primary.main", fontWeight: "bold" }, children: [
962
+ "Next Game: ",
963
+ date.toLocaleString()
964
+ ] });
965
+ };
966
+ var NextGameLabel_default = NextGameLabel;
940
967
  var BaseSearchResultCard = ({
941
968
  result,
942
969
  onClick,
@@ -944,13 +971,19 @@ var BaseSearchResultCard = ({
944
971
  icon,
945
972
  tags
946
973
  }) => {
947
- const handleClick = () => {
974
+ const handleClick = (e) => {
948
975
  if (onClick) {
949
- onClick(result.id);
976
+ if (e.ctrlKey || e.metaKey || e.shiftKey) {
977
+ e.stopPropagation();
978
+ const url = `/${result.type}/${result.id}`;
979
+ window.open(url, "_blank");
980
+ } else {
981
+ onClick(result.id);
982
+ }
950
983
  }
951
984
  };
952
985
  return /* @__PURE__ */ jsxRuntime.jsx(
953
- material.Card,
986
+ Card3__default.default,
954
987
  {
955
988
  elevation: 6,
956
989
  sx: {
@@ -963,48 +996,21 @@ var BaseSearchResultCard = ({
963
996
  },
964
997
  marginBottom: 2
965
998
  },
966
- onClick: handleClick,
967
- children: /* @__PURE__ */ jsxRuntime.jsxs(material.CardContent, { sx: { display: "flex", alignItems: "flex-start" }, children: [
968
- icon && /* @__PURE__ */ jsxRuntime.jsx(material.Box, { sx: { mr: 2, display: "flex", alignItems: "center", pt: 0.5 }, children: icon }),
969
- /* @__PURE__ */ jsxRuntime.jsxs(material.Box, { sx: { flex: 1 }, children: [
970
- /* @__PURE__ */ jsxRuntime.jsx(material.Typography, { variant: "h6", sx: { mb: 1 }, children: result.title }),
999
+ onClick: (e) => handleClick(e),
1000
+ children: /* @__PURE__ */ jsxRuntime.jsxs(CardContent3__default.default, { sx: { display: "flex", alignItems: "flex-start" }, children: [
1001
+ icon && /* @__PURE__ */ jsxRuntime.jsx(Box2__default.default, { sx: { mr: 2, display: "flex", alignItems: "center", pt: 0.5 }, children: icon }),
1002
+ /* @__PURE__ */ jsxRuntime.jsxs(Box2__default.default, { sx: { flex: 1 }, children: [
1003
+ /* @__PURE__ */ jsxRuntime.jsx(Typography4__default.default, { variant: "h6", sx: { mb: 1 }, children: result.title }),
1004
+ result.nextGameTime && /* @__PURE__ */ jsxRuntime.jsx(NextGameLabel_default, { nextGameTime: result.nextGameTime }),
1005
+ result.type === "table" && result.shortDescription ? /* @__PURE__ */ jsxRuntime.jsx(Typography4__default.default, { variant: "body2", sx: { mb: 1 }, children: result.shortDescription }) : null,
971
1006
  children,
972
- /* @__PURE__ */ jsxRuntime.jsx(material.Typography, { variant: "body1", children: result.description }),
973
- result.tags && result.tags.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(material.Box, { sx: { mt: 1 }, children: /* @__PURE__ */ jsxRuntime.jsx(material.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__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
986
- visible.map((tag) => generateTagsDisplay(tag)),
987
- hiddenCount > 0 && /* @__PURE__ */ jsxRuntime.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
- })() }) })
1007
+ result.type === "table" ? /* @__PURE__ */ jsxRuntime.jsx(Typography4__default.default, { variant: "body1", children: (() => {
1008
+ var _a, _b;
1009
+ const full = (_b = (_a = result.fullDescription) != null ? _a : result.description) != null ? _b : "";
1010
+ const text = full || "";
1011
+ return text.length > 200 ? `${text.slice(0, 200).trimEnd()}...` : text;
1012
+ })() }) : /* @__PURE__ */ jsxRuntime.jsx(Typography4__default.default, { variant: "body1", children: result.description }),
1013
+ 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) })
1008
1014
  ] })
1009
1015
  ] })
1010
1016
  }
@@ -1059,21 +1065,60 @@ var PlayerResultCard = ({
1059
1065
  return /* @__PURE__ */ jsxRuntime.jsx(BaseSearchResultCard_default, { result, onClick, icon: playerIcon, tags });
1060
1066
  };
1061
1067
  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__ */ 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: [
1067
- /* @__PURE__ */ jsxRuntime.jsxs(material.Box, { sx: { display: "flex", justifyContent: "space-between", alignItems: "center", mb: 0.5 }, children: [
1068
- /* @__PURE__ */ jsxRuntime.jsxs(material.Typography, { variant: "body2", color: "text.secondary", children: [
1069
- "Players: ",
1070
- numPlayers,
1071
- " / ",
1072
- capacity
1068
+ var TableResultCard = ({
1069
+ result,
1070
+ onClick,
1071
+ tags
1072
+ }) => {
1073
+ const rawCapacity = result.capacity;
1074
+ const hasDefinedCapacity = typeof rawCapacity === "number" && Number.isFinite(rawCapacity) && rawCapacity > 0;
1075
+ const capacity = hasDefinedCapacity ? rawCapacity : 0;
1076
+ const activePlayers = typeof result.numPlayers === "number" ? result.numPlayers : 0;
1077
+ const availableSlots = Math.max(capacity - activePlayers, 0);
1078
+ const hasDM = typeof result.hasDM === "boolean" ? result.hasDM : Boolean(result.dungeonMaster);
1079
+ const occupancyPercentage = hasDefinedCapacity ? activePlayers / capacity * 100 : 100;
1080
+ const tableIcon = /* @__PURE__ */ jsxRuntime.jsx(
1081
+ TableRestaurantIcon__default.default,
1082
+ {
1083
+ sx: {
1084
+ fontSize: 40,
1085
+ color: "primary.main"
1086
+ }
1087
+ }
1088
+ );
1089
+ return /* @__PURE__ */ jsxRuntime.jsx(BaseSearchResultCard_default, { result, onClick, icon: tableIcon, tags, children: /* @__PURE__ */ jsxRuntime.jsxs(Box2__default.default, { sx: { mb: 2 }, children: [
1090
+ /* @__PURE__ */ jsxRuntime.jsxs(Box2__default.default, { sx: { display: "flex", justifyContent: "space-between", alignItems: "center", mb: 1 }, children: [
1091
+ /* @__PURE__ */ jsxRuntime.jsxs(Typography4__default.default, { variant: "body2", children: [
1092
+ /* @__PURE__ */ jsxRuntime.jsx("strong", { children: "Players:" }),
1093
+ " ",
1094
+ hasDefinedCapacity ? `${activePlayers}/${capacity}` : activePlayers
1073
1095
  ] }),
1074
- 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" })
1096
+ typeof hasDM === "boolean" && /* @__PURE__ */ jsxRuntime.jsx(
1097
+ Chip2__default.default,
1098
+ {
1099
+ icon: hasDM ? /* @__PURE__ */ jsxRuntime.jsx(SupervisorAccountIcon__default.default, {}) : /* @__PURE__ */ jsxRuntime.jsx(PersonIcon__default.default, {}),
1100
+ label: hasDM ? "DM Present" : "No DM",
1101
+ color: hasDM ? "success" : "warning",
1102
+ size: "small"
1103
+ }
1104
+ )
1075
1105
  ] }),
1076
- /* @__PURE__ */ jsxRuntime.jsx(material.LinearProgress, { variant: "determinate", value: occupancy, sx: { height: 8, borderRadius: 4 } })
1106
+ /* @__PURE__ */ jsxRuntime.jsx(
1107
+ LinearProgress__default.default,
1108
+ {
1109
+ variant: "determinate",
1110
+ value: occupancyPercentage,
1111
+ sx: {
1112
+ height: 10,
1113
+ borderRadius: 5,
1114
+ backgroundColor: "#e0e0e0",
1115
+ "& .MuiLinearProgress-bar": {
1116
+ backgroundColor: hasDefinedCapacity ? availableSlots > 0 ? "#4caf50" : "#f44336" : "#2196f3"
1117
+ }
1118
+ }
1119
+ }
1120
+ ),
1121
+ 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" })
1077
1122
  ] }) });
1078
1123
  };
1079
1124
  var TableResultCard_default = TableResultCard;
@@ -1092,20 +1137,42 @@ var EventResultCard = ({
1092
1137
  try {
1093
1138
  const date = new Date(dateString);
1094
1139
  return date.toLocaleDateString("en-US", options);
1095
- } catch {
1140
+ } catch (error) {
1096
1141
  return dateString;
1097
1142
  }
1098
1143
  };
1099
1144
  const formattedDate = result.date ? formatDate(result.date) : "Date TBD";
1100
1145
  const location = result.location || "Location TBD";
1101
- 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: [
1102
- /* @__PURE__ */ jsxRuntime.jsxs(material.Box, { sx: { display: "flex", alignItems: "center", mb: 0.5 }, children: [
1103
- /* @__PURE__ */ jsxRuntime.jsx(CalendarTodayIcon__default.default, { sx: { mr: 1, fontSize: "small", color: "text.secondary" } }),
1104
- /* @__PURE__ */ jsxRuntime.jsx(material.Typography, { variant: "body2", color: "text.secondary", children: formattedDate })
1146
+ const eventIcon = /* @__PURE__ */ jsxRuntime.jsx(
1147
+ EventIcon__default.default,
1148
+ {
1149
+ sx: {
1150
+ fontSize: 40,
1151
+ color: "primary.main"
1152
+ }
1153
+ }
1154
+ );
1155
+ return /* @__PURE__ */ jsxRuntime.jsx(BaseSearchResultCard_default, { result, onClick, icon: eventIcon, tags, children: /* @__PURE__ */ jsxRuntime.jsxs(Box2__default.default, { sx: { mb: 2 }, children: [
1156
+ /* @__PURE__ */ jsxRuntime.jsxs(Box2__default.default, { sx: { display: "flex", alignItems: "center", mb: 1 }, children: [
1157
+ /* @__PURE__ */ jsxRuntime.jsx(CalendarTodayIcon__default.default, { sx: { mr: 1, color: "primary.main" } }),
1158
+ /* @__PURE__ */ jsxRuntime.jsxs(Typography4__default.default, { variant: "body2", children: [
1159
+ /* @__PURE__ */ jsxRuntime.jsx("strong", { children: "Date:" }),
1160
+ " ",
1161
+ formattedDate
1162
+ ] })
1105
1163
  ] }),
1106
- /* @__PURE__ */ jsxRuntime.jsxs(material.Box, { sx: { display: "flex", alignItems: "center", mb: 1 }, children: [
1107
- /* @__PURE__ */ jsxRuntime.jsx(LocationOnIcon__default.default, { sx: { mr: 1, fontSize: "small", color: "text.secondary" } }),
1108
- /* @__PURE__ */ jsxRuntime.jsx(material.Typography, { variant: "body2", color: "text.secondary", children: location })
1164
+ /* @__PURE__ */ jsxRuntime.jsxs(Box2__default.default, { sx: { display: "flex", alignItems: "center" }, children: [
1165
+ /* @__PURE__ */ jsxRuntime.jsx(LocationOnIcon__default.default, { sx: { mr: 1, color: "primary.main" } }),
1166
+ /* @__PURE__ */ jsxRuntime.jsxs(Typography4__default.default, { variant: "body2", children: [
1167
+ /* @__PURE__ */ jsxRuntime.jsx("strong", { children: "Location:" }),
1168
+ " ",
1169
+ location
1170
+ ] })
1171
+ ] }),
1172
+ result.organizer && /* @__PURE__ */ jsxRuntime.jsxs(Typography4__default.default, { variant: "body2", sx: { mt: 1 }, children: [
1173
+ /* @__PURE__ */ jsxRuntime.jsx("strong", { children: "Organizer:" }),
1174
+ " ",
1175
+ result.organizer
1109
1176
  ] })
1110
1177
  ] }) });
1111
1178
  };
@@ -1113,9 +1180,11 @@ var EventResultCard_default = EventResultCard;
1113
1180
  var ResultsContainer = ({
1114
1181
  results,
1115
1182
  onResultClick,
1116
- tags
1183
+ tags,
1184
+ pagination,
1185
+ onPacketChange
1117
1186
  }) => {
1118
- if (results.length === 0 || !results.map) {
1187
+ if (!results || results.length === 0 || !results.map) {
1119
1188
  return /* @__PURE__ */ jsxRuntime.jsx(Box2__default.default, { sx: { textAlign: "center", py: 4 }, children: "No results found. Try adjusting your filters." });
1120
1189
  }
1121
1190
  const onPlayerClick = (id) => {
@@ -1127,43 +1196,68 @@ var ResultsContainer = ({
1127
1196
  const onEventClick = (id) => {
1128
1197
  onResultClick == null ? void 0 : onResultClick(id, "event");
1129
1198
  };
1130
- return /* @__PURE__ */ jsxRuntime.jsx(Box2__default.default, { sx: { display: "flex", flexDirection: "column", gap: 2 }, children: results.map((result) => {
1131
- switch (result.type) {
1132
- case "player":
1133
- return /* @__PURE__ */ jsxRuntime.jsx(
1134
- PlayerResultCard_default,
1135
- {
1136
- result,
1137
- onClick: onPlayerClick,
1138
- tags
1139
- },
1140
- result.id
1141
- );
1142
- case "table":
1143
- return /* @__PURE__ */ jsxRuntime.jsx(
1144
- TableResultCard_default,
1145
- {
1146
- result,
1147
- onClick: onTableClick,
1148
- tags
1149
- },
1150
- result.id
1151
- );
1152
- case "event":
1153
- return /* @__PURE__ */ jsxRuntime.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
- }) });
1199
+ const handlePacketChange = (_event, packet) => {
1200
+ onPacketChange == null ? void 0 : onPacketChange(packet);
1201
+ };
1202
+ const startResult = pagination ? (pagination.currentPacket - 1) * pagination.packetSize + 1 : 1;
1203
+ const endResult = pagination ? Math.min(pagination.currentPacket * pagination.packetSize, pagination.totalResults) : results.length;
1204
+ return /* @__PURE__ */ jsxRuntime.jsxs(Box2__default.default, { sx: { display: "flex", flexDirection: "column", gap: 2 }, children: [
1205
+ 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: [
1206
+ "Showing ",
1207
+ startResult,
1208
+ "-",
1209
+ endResult,
1210
+ " of ",
1211
+ pagination.totalResults,
1212
+ " results"
1213
+ ] }) }),
1214
+ results.map((result) => {
1215
+ switch (result.type) {
1216
+ case "player":
1217
+ return /* @__PURE__ */ jsxRuntime.jsx(
1218
+ PlayerResultCard_default,
1219
+ {
1220
+ result,
1221
+ onClick: onPlayerClick,
1222
+ tags
1223
+ },
1224
+ result.id
1225
+ );
1226
+ case "table":
1227
+ return /* @__PURE__ */ jsxRuntime.jsx(
1228
+ TableResultCard_default,
1229
+ {
1230
+ result,
1231
+ onClick: onTableClick,
1232
+ tags
1233
+ },
1234
+ result.id
1235
+ );
1236
+ case "event":
1237
+ return /* @__PURE__ */ jsxRuntime.jsx(
1238
+ EventResultCard_default,
1239
+ {
1240
+ result,
1241
+ onClick: onEventClick,
1242
+ tags
1243
+ },
1244
+ result.id
1245
+ );
1246
+ default:
1247
+ console.error(`Unknown result type: ${result.type}`);
1248
+ return null;
1249
+ }
1250
+ }),
1251
+ pagination && pagination.totalPackets > 1 && /* @__PURE__ */ jsxRuntime.jsx(Box2__default.default, { sx: { display: "flex", justifyContent: "center", mt: 4 }, children: /* @__PURE__ */ jsxRuntime.jsx(
1252
+ Pagination__default.default,
1253
+ {
1254
+ count: pagination.totalPackets,
1255
+ page: pagination.currentPacket,
1256
+ onChange: handlePacketChange,
1257
+ color: "primary"
1258
+ }
1259
+ ) })
1260
+ ] });
1167
1261
  };
1168
1262
  var ResultsContainer_default = ResultsContainer;
1169
1263
  var ScrollableResultsList = ({
@@ -1181,21 +1275,14 @@ var TablesScrollableList = ({
1181
1275
  results,
1182
1276
  tags,
1183
1277
  maxHeight,
1184
- onResultClick,
1185
- sortBy = "availability"
1278
+ onResultClick
1186
1279
  }) => {
1187
1280
  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
1281
  const handleClick = (id) => onResultClick == null ? void 0 : onResultClick(id);
1195
1282
  return /* @__PURE__ */ jsxRuntime.jsx(
1196
1283
  ScrollableResultsList_default,
1197
1284
  {
1198
- results: sortedTables,
1285
+ results: tables,
1199
1286
  tags,
1200
1287
  maxHeight,
1201
1288
  onResultClick: (id, type) => {
@@ -1211,10 +1298,10 @@ var EventTablesCard = ({
1211
1298
  maxHeight = 450,
1212
1299
  onTableClick
1213
1300
  }) => {
1214
- return /* @__PURE__ */ jsxRuntime.jsxs(Card4__default.default, { elevation: 6, sx: { width: "100%", boxShadow: "0px 8px 24px rgba(0, 0, 0, 0.15)" }, children: [
1301
+ return /* @__PURE__ */ jsxRuntime.jsxs(Card3__default.default, { elevation: 6, sx: { width: "100%", boxShadow: "0px 8px 24px rgba(0, 0, 0, 0.15)" }, children: [
1215
1302
  /* @__PURE__ */ jsxRuntime.jsx(CardHeader__default.default, { title: "Tables" }),
1216
1303
  /* @__PURE__ */ jsxRuntime.jsx(Divider__default.default, {}),
1217
- /* @__PURE__ */ jsxRuntime.jsx(CardContent4__default.default, { children: /* @__PURE__ */ jsxRuntime.jsx(TablesScrollableList_default, { results: tables, tags, maxHeight, onResultClick: onTableClick, sortBy: "availability" }) })
1304
+ /* @__PURE__ */ jsxRuntime.jsx(CardContent3__default.default, { children: /* @__PURE__ */ jsxRuntime.jsx(TablesScrollableList_default, { results: tables, tags, maxHeight, onResultClick: onTableClick }) })
1218
1305
  ] });
1219
1306
  };
1220
1307
  var EventTablesCard_default = EventTablesCard;