@mbpockets/shared-ui 0.1.18

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 (281) hide show
  1. package/LICENSE +681 -0
  2. package/README.md +85 -0
  3. package/dist/EventPage/editMode/index.cjs +573 -0
  4. package/dist/EventPage/editMode/index.cjs.map +1 -0
  5. package/dist/EventPage/editMode/index.d.cts +5 -0
  6. package/dist/EventPage/editMode/index.d.ts +5 -0
  7. package/dist/EventPage/editMode/index.mjs +559 -0
  8. package/dist/EventPage/editMode/index.mjs.map +1 -0
  9. package/dist/EventPage/editMode.cjs +573 -0
  10. package/dist/EventPage/editMode.cjs.map +1 -0
  11. package/dist/EventPage/editMode.d.cts +5 -0
  12. package/dist/EventPage/editMode.d.ts +5 -0
  13. package/dist/EventPage/editMode.mjs +559 -0
  14. package/dist/EventPage/editMode.mjs.map +1 -0
  15. package/dist/EventPage/index.cjs +1245 -0
  16. package/dist/EventPage/index.cjs.map +1 -0
  17. package/dist/EventPage/index.d.cts +6 -0
  18. package/dist/EventPage/index.d.ts +6 -0
  19. package/dist/EventPage/index.mjs +1215 -0
  20. package/dist/EventPage/index.mjs.map +1 -0
  21. package/dist/EventPage.cjs +1245 -0
  22. package/dist/EventPage.cjs.map +1 -0
  23. package/dist/EventPage.d.cts +42 -0
  24. package/dist/EventPage.d.ts +42 -0
  25. package/dist/EventPage.mjs +1215 -0
  26. package/dist/EventPage.mjs.map +1 -0
  27. package/dist/PlayerPage/index.cjs +370 -0
  28. package/dist/PlayerPage/index.cjs.map +1 -0
  29. package/dist/PlayerPage/index.d.cts +4 -0
  30. package/dist/PlayerPage/index.d.ts +4 -0
  31. package/dist/PlayerPage/index.mjs +358 -0
  32. package/dist/PlayerPage/index.mjs.map +1 -0
  33. package/dist/PlayerPage.cjs +370 -0
  34. package/dist/PlayerPage.cjs.map +1 -0
  35. package/dist/PlayerPage.d.cts +32 -0
  36. package/dist/PlayerPage.d.ts +32 -0
  37. package/dist/PlayerPage.mjs +358 -0
  38. package/dist/PlayerPage.mjs.map +1 -0
  39. package/dist/ProfilePage/index.cjs +136 -0
  40. package/dist/ProfilePage/index.cjs.map +1 -0
  41. package/dist/ProfilePage/index.d.cts +3 -0
  42. package/dist/ProfilePage/index.d.ts +3 -0
  43. package/dist/ProfilePage/index.mjs +124 -0
  44. package/dist/ProfilePage/index.mjs.map +1 -0
  45. package/dist/ProfilePage.cjs +136 -0
  46. package/dist/ProfilePage.cjs.map +1 -0
  47. package/dist/ProfilePage.d.cts +10 -0
  48. package/dist/ProfilePage.d.ts +10 -0
  49. package/dist/ProfilePage.mjs +124 -0
  50. package/dist/ProfilePage.mjs.map +1 -0
  51. package/dist/SearchPage/Filters/index.cjs +270 -0
  52. package/dist/SearchPage/Filters/index.cjs.map +1 -0
  53. package/dist/SearchPage/Filters/index.d.cts +4 -0
  54. package/dist/SearchPage/Filters/index.d.ts +4 -0
  55. package/dist/SearchPage/Filters/index.mjs +250 -0
  56. package/dist/SearchPage/Filters/index.mjs.map +1 -0
  57. package/dist/SearchPage/Filters.cjs +270 -0
  58. package/dist/SearchPage/Filters.cjs.map +1 -0
  59. package/dist/SearchPage/Filters.d.cts +31 -0
  60. package/dist/SearchPage/Filters.d.ts +31 -0
  61. package/dist/SearchPage/Filters.mjs +250 -0
  62. package/dist/SearchPage/Filters.mjs.map +1 -0
  63. package/dist/SearchPage/Results/index.cjs +226 -0
  64. package/dist/SearchPage/Results/index.cjs.map +1 -0
  65. package/dist/SearchPage/Results/index.d.cts +4 -0
  66. package/dist/SearchPage/Results/index.d.ts +4 -0
  67. package/dist/SearchPage/Results/index.mjs +212 -0
  68. package/dist/SearchPage/Results/index.mjs.map +1 -0
  69. package/dist/SearchPage/Results.cjs +226 -0
  70. package/dist/SearchPage/Results.cjs.map +1 -0
  71. package/dist/SearchPage/Results.d.cts +53 -0
  72. package/dist/SearchPage/Results.d.ts +53 -0
  73. package/dist/SearchPage/Results.mjs +212 -0
  74. package/dist/SearchPage/Results.mjs.map +1 -0
  75. package/dist/SearchPage/index.cjs +737 -0
  76. package/dist/SearchPage/index.cjs.map +1 -0
  77. package/dist/SearchPage/index.d.cts +7 -0
  78. package/dist/SearchPage/index.d.ts +7 -0
  79. package/dist/SearchPage/index.mjs +695 -0
  80. package/dist/SearchPage/index.mjs.map +1 -0
  81. package/dist/SearchPage.cjs +737 -0
  82. package/dist/SearchPage.cjs.map +1 -0
  83. package/dist/SearchPage.d.cts +110 -0
  84. package/dist/SearchPage.d.ts +110 -0
  85. package/dist/SearchPage.mjs +695 -0
  86. package/dist/SearchPage.mjs.map +1 -0
  87. package/dist/TablePage/GameTableProvider/index.cjs +26 -0
  88. package/dist/TablePage/GameTableProvider/index.cjs.map +1 -0
  89. package/dist/TablePage/GameTableProvider/index.d.cts +4 -0
  90. package/dist/TablePage/GameTableProvider/index.d.ts +4 -0
  91. package/dist/TablePage/GameTableProvider/index.mjs +19 -0
  92. package/dist/TablePage/GameTableProvider/index.mjs.map +1 -0
  93. package/dist/TablePage/GameTableProvider.cjs +26 -0
  94. package/dist/TablePage/GameTableProvider.cjs.map +1 -0
  95. package/dist/TablePage/GameTableProvider.d.cts +15 -0
  96. package/dist/TablePage/GameTableProvider.d.ts +15 -0
  97. package/dist/TablePage/GameTableProvider.mjs +19 -0
  98. package/dist/TablePage/GameTableProvider.mjs.map +1 -0
  99. package/dist/TablePage/ModalProvider/index.cjs +83 -0
  100. package/dist/TablePage/ModalProvider/index.cjs.map +1 -0
  101. package/dist/TablePage/ModalProvider/index.css +49 -0
  102. package/dist/TablePage/ModalProvider/index.css.map +1 -0
  103. package/dist/TablePage/ModalProvider/index.d.cts +3 -0
  104. package/dist/TablePage/ModalProvider/index.d.ts +3 -0
  105. package/dist/TablePage/ModalProvider/index.mjs +79 -0
  106. package/dist/TablePage/ModalProvider/index.mjs.map +1 -0
  107. package/dist/TablePage/ModalProvider.cjs +83 -0
  108. package/dist/TablePage/ModalProvider.cjs.map +1 -0
  109. package/dist/TablePage/ModalProvider.css +49 -0
  110. package/dist/TablePage/ModalProvider.css.map +1 -0
  111. package/dist/TablePage/ModalProvider.d.cts +17 -0
  112. package/dist/TablePage/ModalProvider.d.ts +17 -0
  113. package/dist/TablePage/ModalProvider.mjs +79 -0
  114. package/dist/TablePage/ModalProvider.mjs.map +1 -0
  115. package/dist/TablePage/index.cjs +606 -0
  116. package/dist/TablePage/index.cjs.map +1 -0
  117. package/dist/TablePage/index.css +49 -0
  118. package/dist/TablePage/index.css.map +1 -0
  119. package/dist/TablePage/index.d.cts +10 -0
  120. package/dist/TablePage/index.d.ts +10 -0
  121. package/dist/TablePage/index.mjs +579 -0
  122. package/dist/TablePage/index.mjs.map +1 -0
  123. package/dist/TablePage/players/index.cjs +85 -0
  124. package/dist/TablePage/players/index.cjs.map +1 -0
  125. package/dist/TablePage/players/index.d.cts +4 -0
  126. package/dist/TablePage/players/index.d.ts +4 -0
  127. package/dist/TablePage/players/index.mjs +76 -0
  128. package/dist/TablePage/players/index.mjs.map +1 -0
  129. package/dist/TablePage/players.cjs +85 -0
  130. package/dist/TablePage/players.cjs.map +1 -0
  131. package/dist/TablePage/players.d.cts +22 -0
  132. package/dist/TablePage/players.d.ts +22 -0
  133. package/dist/TablePage/players.mjs +76 -0
  134. package/dist/TablePage/players.mjs.map +1 -0
  135. package/dist/TablePage.cjs +606 -0
  136. package/dist/TablePage.cjs.map +1 -0
  137. package/dist/TablePage.css +49 -0
  138. package/dist/TablePage.css.map +1 -0
  139. package/dist/TablePage.d.cts +54 -0
  140. package/dist/TablePage.d.ts +54 -0
  141. package/dist/TablePage.mjs +579 -0
  142. package/dist/TablePage.mjs.map +1 -0
  143. package/dist/common/Modal/index.cjs +64 -0
  144. package/dist/common/Modal/index.cjs.map +1 -0
  145. package/dist/common/Modal/index.css +49 -0
  146. package/dist/common/Modal/index.css.map +1 -0
  147. package/dist/common/Modal/index.d.cts +2 -0
  148. package/dist/common/Modal/index.d.ts +2 -0
  149. package/dist/common/Modal/index.mjs +62 -0
  150. package/dist/common/Modal/index.mjs.map +1 -0
  151. package/dist/common/Modal.cjs +64 -0
  152. package/dist/common/Modal.cjs.map +1 -0
  153. package/dist/common/Modal.css +49 -0
  154. package/dist/common/Modal.css.map +1 -0
  155. package/dist/common/Modal.d.cts +9 -0
  156. package/dist/common/Modal.d.ts +9 -0
  157. package/dist/common/Modal.mjs +62 -0
  158. package/dist/common/Modal.mjs.map +1 -0
  159. package/dist/common/index.cjs +210 -0
  160. package/dist/common/index.cjs.map +1 -0
  161. package/dist/common/index.css +49 -0
  162. package/dist/common/index.css.map +1 -0
  163. package/dist/common/index.d.cts +4 -0
  164. package/dist/common/index.d.ts +4 -0
  165. package/dist/common/index.mjs +194 -0
  166. package/dist/common/index.mjs.map +1 -0
  167. package/dist/common.cjs +210 -0
  168. package/dist/common.cjs.map +1 -0
  169. package/dist/common.css +49 -0
  170. package/dist/common.css.map +1 -0
  171. package/dist/common.d.cts +28 -0
  172. package/dist/common.d.ts +28 -0
  173. package/dist/common.mjs +194 -0
  174. package/dist/common.mjs.map +1 -0
  175. package/dist/index-D7WHhl3Q.d.ts +64 -0
  176. package/dist/index-DC0kK3aC.d.cts +64 -0
  177. package/dist/index.cjs +2608 -0
  178. package/dist/index.cjs.map +1 -0
  179. package/dist/index.css +49 -0
  180. package/dist/index.css.map +1 -0
  181. package/dist/index.d.cts +20 -0
  182. package/dist/index.d.ts +20 -0
  183. package/dist/index.mjs +2529 -0
  184. package/dist/index.mjs.map +1 -0
  185. package/dist/mocks/EventDB.cjs +171 -0
  186. package/dist/mocks/EventDB.cjs.map +1 -0
  187. package/dist/mocks/EventDB.d.cts +6 -0
  188. package/dist/mocks/EventDB.d.ts +6 -0
  189. package/dist/mocks/EventDB.mjs +169 -0
  190. package/dist/mocks/EventDB.mjs.map +1 -0
  191. package/dist/mocks/Events.cjs +59 -0
  192. package/dist/mocks/Events.cjs.map +1 -0
  193. package/dist/mocks/Events.d.cts +13 -0
  194. package/dist/mocks/Events.d.ts +13 -0
  195. package/dist/mocks/Events.mjs +57 -0
  196. package/dist/mocks/Events.mjs.map +1 -0
  197. package/dist/mocks/Players.cjs +75 -0
  198. package/dist/mocks/Players.cjs.map +1 -0
  199. package/dist/mocks/Players.d.cts +15 -0
  200. package/dist/mocks/Players.d.ts +15 -0
  201. package/dist/mocks/Players.mjs +73 -0
  202. package/dist/mocks/Players.mjs.map +1 -0
  203. package/dist/mocks/SearchResults.cjs +143 -0
  204. package/dist/mocks/SearchResults.cjs.map +1 -0
  205. package/dist/mocks/SearchResults.d.cts +30 -0
  206. package/dist/mocks/SearchResults.d.ts +30 -0
  207. package/dist/mocks/SearchResults.mjs +137 -0
  208. package/dist/mocks/SearchResults.mjs.map +1 -0
  209. package/dist/mocks/Tables.cjs +133 -0
  210. package/dist/mocks/Tables.cjs.map +1 -0
  211. package/dist/mocks/Tables.d.cts +38 -0
  212. package/dist/mocks/Tables.d.ts +38 -0
  213. package/dist/mocks/Tables.mjs +131 -0
  214. package/dist/mocks/Tables.mjs.map +1 -0
  215. package/dist/mocks/Tags.cjs +142 -0
  216. package/dist/mocks/Tags.cjs.map +1 -0
  217. package/dist/mocks/Tags.d.cts +5 -0
  218. package/dist/mocks/Tags.d.ts +5 -0
  219. package/dist/mocks/Tags.mjs +140 -0
  220. package/dist/mocks/Tags.mjs.map +1 -0
  221. package/dist/mocks/index.cjs +566 -0
  222. package/dist/mocks/index.cjs.map +1 -0
  223. package/dist/mocks/index.d.cts +8 -0
  224. package/dist/mocks/index.d.ts +8 -0
  225. package/dist/mocks/index.mjs +555 -0
  226. package/dist/mocks/index.mjs.map +1 -0
  227. package/dist/mocks.cjs +566 -0
  228. package/dist/mocks.cjs.map +1 -0
  229. package/dist/mocks.d.cts +8 -0
  230. package/dist/mocks.d.ts +8 -0
  231. package/dist/mocks.mjs +555 -0
  232. package/dist/mocks.mjs.map +1 -0
  233. package/dist/types/event.cjs +4 -0
  234. package/dist/types/event.cjs.map +1 -0
  235. package/dist/types/event.d.cts +37 -0
  236. package/dist/types/event.d.ts +37 -0
  237. package/dist/types/event.mjs +3 -0
  238. package/dist/types/event.mjs.map +1 -0
  239. package/dist/types/index.cjs +4 -0
  240. package/dist/types/index.cjs.map +1 -0
  241. package/dist/types/index.d.cts +6 -0
  242. package/dist/types/index.d.ts +6 -0
  243. package/dist/types/index.mjs +3 -0
  244. package/dist/types/index.mjs.map +1 -0
  245. package/dist/types/player.cjs +4 -0
  246. package/dist/types/player.cjs.map +1 -0
  247. package/dist/types/player.d.cts +20 -0
  248. package/dist/types/player.d.ts +20 -0
  249. package/dist/types/player.mjs +3 -0
  250. package/dist/types/player.mjs.map +1 -0
  251. package/dist/types/search.cjs +4 -0
  252. package/dist/types/search.cjs.map +1 -0
  253. package/dist/types/search.d.cts +20 -0
  254. package/dist/types/search.d.ts +20 -0
  255. package/dist/types/search.mjs +3 -0
  256. package/dist/types/search.mjs.map +1 -0
  257. package/dist/types/table.cjs +4 -0
  258. package/dist/types/table.cjs.map +1 -0
  259. package/dist/types/table.d.cts +21 -0
  260. package/dist/types/table.d.ts +21 -0
  261. package/dist/types/table.mjs +3 -0
  262. package/dist/types/table.mjs.map +1 -0
  263. package/dist/types/tables.cjs +4 -0
  264. package/dist/types/tables.cjs.map +1 -0
  265. package/dist/types/tables.d.cts +21 -0
  266. package/dist/types/tables.d.ts +21 -0
  267. package/dist/types/tables.mjs +3 -0
  268. package/dist/types/tables.mjs.map +1 -0
  269. package/dist/types/tag.cjs +4 -0
  270. package/dist/types/tag.cjs.map +1 -0
  271. package/dist/types/tag.d.cts +14 -0
  272. package/dist/types/tag.d.ts +14 -0
  273. package/dist/types/tag.mjs +3 -0
  274. package/dist/types/tag.mjs.map +1 -0
  275. package/dist/types.cjs +4 -0
  276. package/dist/types.cjs.map +1 -0
  277. package/dist/types.d.cts +6 -0
  278. package/dist/types.d.ts +6 -0
  279. package/dist/types.mjs +3 -0
  280. package/dist/types.mjs.map +1 -0
  281. package/package.json +117 -0
@@ -0,0 +1,124 @@
1
+ "use client";
2
+ import { useState, useMemo } from 'react';
3
+ import Autocomplete from '@mui/material/Autocomplete';
4
+ import Card from '@mui/material/Card';
5
+ import CardContent from '@mui/material/CardContent';
6
+ import CardHeader from '@mui/material/CardHeader';
7
+ import Grid from '@mui/material/Grid';
8
+ import Popper from '@mui/material/Popper';
9
+ import TextField from '@mui/material/TextField';
10
+ import { jsx, jsxs } from 'react/jsx-runtime';
11
+
12
+ // src/components/shared/TagEditor.tsx
13
+ function TagEditor({
14
+ title = "Tags",
15
+ selectedTags,
16
+ possibleTags,
17
+ onToggleTag
18
+ }) {
19
+ const [inputValue, setInputValue] = useState("");
20
+ const selectedIds = useMemo(() => selectedTags.map((tag) => tag.id), [selectedTags]);
21
+ const options = useMemo(
22
+ () => possibleTags.map((tag) => ({ value: tag.id, label: tag.label })),
23
+ [possibleTags]
24
+ );
25
+ return /* @__PURE__ */ jsx(Grid, { container: true, children: /* @__PURE__ */ jsx(Grid, { size: { xs: 12 }, children: /* @__PURE__ */ jsxs(Card, { children: [
26
+ /* @__PURE__ */ jsx(
27
+ CardHeader,
28
+ {
29
+ title,
30
+ style: {
31
+ background: "linear-gradient(135deg, rgba(25, 118, 210, 0.8), rgba(25, 118, 210, 1))",
32
+ color: "#FFFFFF",
33
+ fontSize: "1.5rem",
34
+ textShadow: "0px 3px 6px rgba(0, 0, 0, 0.5)"
35
+ }
36
+ }
37
+ ),
38
+ /* @__PURE__ */ jsxs(CardContent, { children: [
39
+ /* @__PURE__ */ jsx("div", { className: "mt-2 flex flex-wrap gap-2", children: selectedTags.map((tag) => /* @__PURE__ */ jsxs(
40
+ "span",
41
+ {
42
+ className: "inline-block text-sm px-3 py-1 rounded-full outline-black outline-2 font-outlined",
43
+ style: {
44
+ background: tag.color || "#bfbcbb",
45
+ color: "white",
46
+ textShadow: "black 0.2em 0.2em 0.4em"
47
+ },
48
+ children: [
49
+ tag.label,
50
+ /* @__PURE__ */ jsx(
51
+ "button",
52
+ {
53
+ type: "button",
54
+ onClick: () => onToggleTag(tag.id),
55
+ className: "ml-2 text-red-500 bg-white bg-opacity-50 rounded-full outline-black outline-2 font-outlined",
56
+ children: "\xD7"
57
+ }
58
+ )
59
+ ]
60
+ },
61
+ tag.id
62
+ )) }),
63
+ /* @__PURE__ */ jsx(Grid, { container: true, spacing: 3, children: /* @__PURE__ */ jsx(Grid, { sx: { marginTop: 3, width: "100%" }, children: /* @__PURE__ */ jsx(
64
+ Autocomplete,
65
+ {
66
+ options,
67
+ filterOptions: (availableOptions, state) => availableOptions.filter(
68
+ (option) => !selectedIds.includes(option.value) && option.label.toLowerCase().includes(state.inputValue.toLowerCase())
69
+ ).slice(0, 3),
70
+ value: null,
71
+ inputValue,
72
+ onInputChange: (event, newInputValue) => {
73
+ if (event && event.type === "change") {
74
+ setInputValue(newInputValue);
75
+ }
76
+ },
77
+ onChange: (event, newValue) => {
78
+ if (newValue) {
79
+ onToggleTag(newValue.value);
80
+ }
81
+ setInputValue("");
82
+ },
83
+ slots: { popper: CustomPopper },
84
+ renderInput: (params) => /* @__PURE__ */ jsx(TextField, { ...params, label: "Select Tags" })
85
+ },
86
+ selectedIds.join("-")
87
+ ) }) })
88
+ ] })
89
+ ] }) }) });
90
+ }
91
+ var CustomPopper = (props) => {
92
+ return /* @__PURE__ */ jsx(
93
+ Popper,
94
+ {
95
+ ...props,
96
+ modifiers: [
97
+ {
98
+ name: "preventOverflow",
99
+ options: { boundary: "viewport" }
100
+ },
101
+ {
102
+ name: "offset",
103
+ options: { offset: [0, -10] }
104
+ }
105
+ ],
106
+ placement: "top-start"
107
+ }
108
+ );
109
+ };
110
+ function PlayerTagsEdit(props) {
111
+ return /* @__PURE__ */ jsx(
112
+ TagEditor,
113
+ {
114
+ title: "Player Tags",
115
+ selectedTags: props.PlayerTags,
116
+ possibleTags: props.possibleTags,
117
+ onToggleTag: props.updatePlayerTags
118
+ }
119
+ );
120
+ }
121
+
122
+ export { PlayerTagsEdit };
123
+ //# sourceMappingURL=index.mjs.map
124
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/components/shared/TagEditor.tsx","../../src/components/ProfilePage/PlayerTagsEdit.tsx"],"names":["jsx"],"mappings":";;;;;;;;;;;AAmBO,SAAS,SAAA,CAAU;AAAA,EACxB,KAAA,GAAQ,MAAA;AAAA,EACR,YAAA;AAAA,EACA,YAAA;AAAA,EACA;AACF,CAAA,EAAmB;AACjB,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAI,SAAS,EAAE,CAAA;AAC/C,EAAA,MAAM,WAAA,GAAc,OAAA,CAAQ,MAAM,YAAA,CAAa,GAAA,CAAI,CAAC,GAAA,KAAQ,GAAA,CAAI,EAAE,CAAA,EAAG,CAAC,YAAY,CAAC,CAAA;AAEnF,EAAA,MAAM,OAAA,GAAU,OAAA;AAAA,IACd,MAAM,YAAA,CAAa,GAAA,CAAI,CAAC,GAAA,MAAS,EAAE,KAAA,EAAO,GAAA,CAAI,EAAA,EAAI,KAAA,EAAO,GAAA,CAAI,KAAA,EAAM,CAAE,CAAA;AAAA,IACrE,CAAC,YAAY;AAAA,GACf;AAEA,EAAA,uBACE,GAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAS,IAAA,EACb,QAAA,kBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAM,EAAE,EAAA,EAAI,EAAA,EAAG,EACnB,QAAA,kBAAA,IAAA,CAAC,IAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAA,GAAA;AAAA,MAAC,UAAA;AAAA,MAAA;AAAA,QACC,KAAA;AAAA,QACA,KAAA,EAAO;AAAA,UACL,UAAA,EAAY,yEAAA;AAAA,UACZ,KAAA,EAAO,SAAA;AAAA,UACP,QAAA,EAAU,QAAA;AAAA,UACV,UAAA,EAAY;AAAA;AACd;AAAA,KACF;AAAA,yBACC,WAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,SAAI,SAAA,EAAU,2BAAA,EACZ,QAAA,EAAA,YAAA,CAAa,GAAA,CAAI,CAAC,GAAA,qBACjB,IAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UAEC,SAAA,EAAU,mFAAA;AAAA,UACV,KAAA,EAAO;AAAA,YACL,UAAA,EAAY,IAAI,KAAA,IAAS,SAAA;AAAA,YACzB,KAAA,EAAO,OAAA;AAAA,YACP,UAAA,EAAY;AAAA,WACd;AAAA,UAEC,QAAA,EAAA;AAAA,YAAA,GAAA,CAAI,KAAA;AAAA,4BACL,GAAA;AAAA,cAAC,QAAA;AAAA,cAAA;AAAA,gBACC,IAAA,EAAK,QAAA;AAAA,gBACL,OAAA,EAAS,MAAM,WAAA,CAAY,GAAA,CAAI,EAAE,CAAA;AAAA,gBACjC,SAAA,EAAU,6FAAA;AAAA,gBACX,QAAA,EAAA;AAAA;AAAA;AAED;AAAA,SAAA;AAAA,QAfK,GAAA,CAAI;AAAA,OAiBZ,CAAA,EACH,CAAA;AAAA,sBACA,GAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAS,IAAA,EAAC,SAAS,CAAA,EACvB,QAAA,kBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,EAAA,EAAI,EAAE,SAAA,EAAW,CAAA,EAAG,KAAA,EAAO,QAAO,EACtC,QAAA,kBAAA,GAAA;AAAA,QAAC,YAAA;AAAA,QAAA;AAAA,UAEC,OAAA;AAAA,UACA,aAAA,EAAe,CAAC,gBAAA,EAAkB,KAAA,KAChC,gBAAA,CACG,MAAA;AAAA,YACC,CAAC,MAAA,KACC,CAAC,WAAA,CAAY,QAAA,CAAS,OAAO,KAAK,CAAA,IAClC,MAAA,CAAO,KAAA,CAAM,aAAY,CAAE,QAAA,CAAS,KAAA,CAAM,UAAA,CAAW,aAAa;AAAA,WACtE,CACC,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA;AAAA,UAEf,KAAA,EAAO,IAAA;AAAA,UACP,UAAA;AAAA,UACA,aAAA,EAAe,CAAC,KAAA,EAAO,aAAA,KAAkB;AACvC,YAAA,IAAI,KAAA,IAAS,KAAA,CAAM,IAAA,KAAS,QAAA,EAAU;AACpC,cAAA,aAAA,CAAc,aAAa,CAAA;AAAA,YAC7B;AAAA,UACF,CAAA;AAAA,UACA,QAAA,EAAU,CAAC,KAAA,EAAO,QAAA,KAAa;AAC7B,YAAA,IAAI,QAAA,EAAU;AACZ,cAAA,WAAA,CAAY,SAAS,KAAK,CAAA;AAAA,YAC5B;AACA,YAAA,aAAA,CAAc,EAAE,CAAA;AAAA,UAClB,CAAA;AAAA,UACA,KAAA,EAAO,EAAE,MAAA,EAAQ,YAAA,EAAa;AAAA,UAC9B,WAAA,EAAa,CAAC,MAAA,qBAAW,GAAA,CAAC,aAAW,GAAG,MAAA,EAAQ,OAAM,aAAA,EAAc;AAAA,SAAA;AAAA,QAzB/D,WAAA,CAAY,KAAK,GAAG;AAAA,SA2B7B,CAAA,EACF;AAAA,KAAA,EACF;AAAA,GAAA,EACF,GACF,CAAA,EACF,CAAA;AAEJ;AAEA,IAAM,YAAA,GAAe,CAAC,KAAA,KAAuB;AAC3C,EAAA,uBACE,GAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACE,GAAG,KAAA;AAAA,MACJ,SAAA,EAAW;AAAA,QACT;AAAA,UACE,IAAA,EAAM,iBAAA;AAAA,UACN,OAAA,EAAS,EAAE,QAAA,EAAU,UAAA;AAAW,SAClC;AAAA,QACA;AAAA,UACE,IAAA,EAAM,QAAA;AAAA,UACN,SAAS,EAAE,MAAA,EAAQ,CAAC,CAAA,EAAG,GAAG,CAAA;AAAE;AAC9B,OACF;AAAA,MACA,SAAA,EAAU;AAAA;AAAA,GACZ;AAEJ,CAAA;ACvHe,SAAR,eAAgC,KAAA,EAIpC;AACD,EAAA,uBACEA,GAAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAM,aAAA;AAAA,MACN,cAAc,KAAA,CAAM,UAAA;AAAA,MACpB,cAAc,KAAA,CAAM,YAAA;AAAA,MACpB,aAAa,KAAA,CAAM;AAAA;AAAA,GACrB;AAEJ","file":"index.mjs","sourcesContent":["\"use client\";\n\nimport React, { useMemo, useState } from \"react\";\nimport Autocomplete from \"@mui/material/Autocomplete\";\nimport Card from \"@mui/material/Card\";\nimport CardContent from \"@mui/material/CardContent\";\nimport CardHeader from \"@mui/material/CardHeader\";\nimport Grid from \"@mui/material/Grid\";\nimport Popper, { PopperProps } from \"@mui/material/Popper\";\nimport TextField from \"@mui/material/TextField\";\nimport type { Tag } from \"@/types/tag\";\n\nexport interface TagEditorProps {\n title?: string;\n selectedTags: Tag[];\n possibleTags: Tag[];\n onToggleTag: (id: number) => void;\n}\n\nexport function TagEditor({\n title = \"Tags\",\n selectedTags,\n possibleTags,\n onToggleTag,\n}: TagEditorProps) {\n const [inputValue, setInputValue] = useState(\"\");\n const selectedIds = useMemo(() => selectedTags.map((tag) => tag.id), [selectedTags]);\n\n const options = useMemo(\n () => possibleTags.map((tag) => ({ value: tag.id, label: tag.label })),\n [possibleTags]\n );\n\n return (\n <Grid container>\n <Grid size={{ xs: 12 }}>\n <Card>\n <CardHeader\n title={title}\n style={{\n background: \"linear-gradient(135deg, rgba(25, 118, 210, 0.8), rgba(25, 118, 210, 1))\",\n color: \"#FFFFFF\",\n fontSize: \"1.5rem\",\n textShadow: \"0px 3px 6px rgba(0, 0, 0, 0.5)\",\n }}\n />\n <CardContent>\n <div className=\"mt-2 flex flex-wrap gap-2\">\n {selectedTags.map((tag) => (\n <span\n key={tag.id}\n className=\"inline-block text-sm px-3 py-1 rounded-full outline-black outline-2 font-outlined\"\n style={{\n background: tag.color || \"#bfbcbb\",\n color: \"white\",\n textShadow: \"black 0.2em 0.2em 0.4em\",\n }}\n >\n {tag.label}\n <button\n type=\"button\"\n onClick={() => onToggleTag(tag.id)}\n className=\"ml-2 text-red-500 bg-white bg-opacity-50 rounded-full outline-black outline-2 font-outlined\"\n >\n &times;\n </button>\n </span>\n ))}\n </div>\n <Grid container spacing={3}>\n <Grid sx={{ marginTop: 3, width: \"100%\" }}>\n <Autocomplete\n key={selectedIds.join(\"-\")}\n options={options}\n filterOptions={(availableOptions, state) =>\n availableOptions\n .filter(\n (option) =>\n !selectedIds.includes(option.value) &&\n option.label.toLowerCase().includes(state.inputValue.toLowerCase())\n )\n .slice(0, 3)\n }\n value={null}\n inputValue={inputValue}\n onInputChange={(event, newInputValue) => {\n if (event && event.type === \"change\") {\n setInputValue(newInputValue);\n }\n }}\n onChange={(event, newValue) => {\n if (newValue) {\n onToggleTag(newValue.value);\n }\n setInputValue(\"\");\n }}\n slots={{ popper: CustomPopper }}\n renderInput={(params) => <TextField {...params} label=\"Select Tags\" />}\n />\n </Grid>\n </Grid>\n </CardContent>\n </Card>\n </Grid>\n </Grid>\n );\n}\n\nconst CustomPopper = (props: PopperProps) => {\n return (\n <Popper\n {...props}\n modifiers={[\n {\n name: \"preventOverflow\",\n options: { boundary: \"viewport\" },\n },\n {\n name: \"offset\",\n options: { offset: [0, -10] },\n },\n ]}\n placement=\"top-start\"\n />\n );\n};\n","\"use client\";\n\nimport React from \"react\";\nimport type { Tag } from \"@/types/tag\";\nimport { TagEditor } from \"@/components/shared/TagEditor\";\n\nexport default function PlayerTagsEdit(props: {\n PlayerTags: Tag[];\n possibleTags: Tag[];\n updatePlayerTags: (id:number) => void;\n}) {\n return (\n <TagEditor\n title=\"Player Tags\"\n selectedTags={props.PlayerTags}\n possibleTags={props.possibleTags}\n onToggleTag={props.updatePlayerTags}\n />\n );\n}\n"]}
@@ -0,0 +1,136 @@
1
+ "use client";
2
+ 'use strict';
3
+
4
+ var react = require('react');
5
+ var Autocomplete = require('@mui/material/Autocomplete');
6
+ var Card = require('@mui/material/Card');
7
+ var CardContent = require('@mui/material/CardContent');
8
+ var CardHeader = require('@mui/material/CardHeader');
9
+ var Grid = require('@mui/material/Grid');
10
+ var Popper = require('@mui/material/Popper');
11
+ var TextField = require('@mui/material/TextField');
12
+ var jsxRuntime = require('react/jsx-runtime');
13
+
14
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
15
+
16
+ var Autocomplete__default = /*#__PURE__*/_interopDefault(Autocomplete);
17
+ var Card__default = /*#__PURE__*/_interopDefault(Card);
18
+ var CardContent__default = /*#__PURE__*/_interopDefault(CardContent);
19
+ var CardHeader__default = /*#__PURE__*/_interopDefault(CardHeader);
20
+ var Grid__default = /*#__PURE__*/_interopDefault(Grid);
21
+ var Popper__default = /*#__PURE__*/_interopDefault(Popper);
22
+ var TextField__default = /*#__PURE__*/_interopDefault(TextField);
23
+
24
+ // src/components/shared/TagEditor.tsx
25
+ function TagEditor({
26
+ title = "Tags",
27
+ selectedTags,
28
+ possibleTags,
29
+ onToggleTag
30
+ }) {
31
+ const [inputValue, setInputValue] = react.useState("");
32
+ const selectedIds = react.useMemo(() => selectedTags.map((tag) => tag.id), [selectedTags]);
33
+ const options = react.useMemo(
34
+ () => possibleTags.map((tag) => ({ value: tag.id, label: tag.label })),
35
+ [possibleTags]
36
+ );
37
+ return /* @__PURE__ */ jsxRuntime.jsx(Grid__default.default, { container: true, children: /* @__PURE__ */ jsxRuntime.jsx(Grid__default.default, { size: { xs: 12 }, children: /* @__PURE__ */ jsxRuntime.jsxs(Card__default.default, { children: [
38
+ /* @__PURE__ */ jsxRuntime.jsx(
39
+ CardHeader__default.default,
40
+ {
41
+ title,
42
+ style: {
43
+ background: "linear-gradient(135deg, rgba(25, 118, 210, 0.8), rgba(25, 118, 210, 1))",
44
+ color: "#FFFFFF",
45
+ fontSize: "1.5rem",
46
+ textShadow: "0px 3px 6px rgba(0, 0, 0, 0.5)"
47
+ }
48
+ }
49
+ ),
50
+ /* @__PURE__ */ jsxRuntime.jsxs(CardContent__default.default, { children: [
51
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-2 flex flex-wrap gap-2", children: selectedTags.map((tag) => /* @__PURE__ */ jsxRuntime.jsxs(
52
+ "span",
53
+ {
54
+ className: "inline-block text-sm px-3 py-1 rounded-full outline-black outline-2 font-outlined",
55
+ style: {
56
+ background: tag.color || "#bfbcbb",
57
+ color: "white",
58
+ textShadow: "black 0.2em 0.2em 0.4em"
59
+ },
60
+ children: [
61
+ tag.label,
62
+ /* @__PURE__ */ jsxRuntime.jsx(
63
+ "button",
64
+ {
65
+ type: "button",
66
+ onClick: () => onToggleTag(tag.id),
67
+ className: "ml-2 text-red-500 bg-white bg-opacity-50 rounded-full outline-black outline-2 font-outlined",
68
+ children: "\xD7"
69
+ }
70
+ )
71
+ ]
72
+ },
73
+ tag.id
74
+ )) }),
75
+ /* @__PURE__ */ jsxRuntime.jsx(Grid__default.default, { container: true, spacing: 3, children: /* @__PURE__ */ jsxRuntime.jsx(Grid__default.default, { sx: { marginTop: 3, width: "100%" }, children: /* @__PURE__ */ jsxRuntime.jsx(
76
+ Autocomplete__default.default,
77
+ {
78
+ options,
79
+ filterOptions: (availableOptions, state) => availableOptions.filter(
80
+ (option) => !selectedIds.includes(option.value) && option.label.toLowerCase().includes(state.inputValue.toLowerCase())
81
+ ).slice(0, 3),
82
+ value: null,
83
+ inputValue,
84
+ onInputChange: (event, newInputValue) => {
85
+ if (event && event.type === "change") {
86
+ setInputValue(newInputValue);
87
+ }
88
+ },
89
+ onChange: (event, newValue) => {
90
+ if (newValue) {
91
+ onToggleTag(newValue.value);
92
+ }
93
+ setInputValue("");
94
+ },
95
+ slots: { popper: CustomPopper },
96
+ renderInput: (params) => /* @__PURE__ */ jsxRuntime.jsx(TextField__default.default, { ...params, label: "Select Tags" })
97
+ },
98
+ selectedIds.join("-")
99
+ ) }) })
100
+ ] })
101
+ ] }) }) });
102
+ }
103
+ var CustomPopper = (props) => {
104
+ return /* @__PURE__ */ jsxRuntime.jsx(
105
+ Popper__default.default,
106
+ {
107
+ ...props,
108
+ modifiers: [
109
+ {
110
+ name: "preventOverflow",
111
+ options: { boundary: "viewport" }
112
+ },
113
+ {
114
+ name: "offset",
115
+ options: { offset: [0, -10] }
116
+ }
117
+ ],
118
+ placement: "top-start"
119
+ }
120
+ );
121
+ };
122
+ function PlayerTagsEdit(props) {
123
+ return /* @__PURE__ */ jsxRuntime.jsx(
124
+ TagEditor,
125
+ {
126
+ title: "Player Tags",
127
+ selectedTags: props.PlayerTags,
128
+ possibleTags: props.possibleTags,
129
+ onToggleTag: props.updatePlayerTags
130
+ }
131
+ );
132
+ }
133
+
134
+ exports.PlayerTagsEdit = PlayerTagsEdit;
135
+ //# sourceMappingURL=ProfilePage.cjs.map
136
+ //# sourceMappingURL=ProfilePage.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/shared/TagEditor.tsx","../src/components/ProfilePage/PlayerTagsEdit.tsx"],"names":["useState","useMemo","jsx","Grid","jsxs","Card","CardHeader","CardContent","Autocomplete","TextField","Popper"],"mappings":"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","file":"ProfilePage.cjs","sourcesContent":["\"use client\";\n\nimport React, { useMemo, useState } from \"react\";\nimport Autocomplete from \"@mui/material/Autocomplete\";\nimport Card from \"@mui/material/Card\";\nimport CardContent from \"@mui/material/CardContent\";\nimport CardHeader from \"@mui/material/CardHeader\";\nimport Grid from \"@mui/material/Grid\";\nimport Popper, { PopperProps } from \"@mui/material/Popper\";\nimport TextField from \"@mui/material/TextField\";\nimport type { Tag } from \"@/types/tag\";\n\nexport interface TagEditorProps {\n title?: string;\n selectedTags: Tag[];\n possibleTags: Tag[];\n onToggleTag: (id: number) => void;\n}\n\nexport function TagEditor({\n title = \"Tags\",\n selectedTags,\n possibleTags,\n onToggleTag,\n}: TagEditorProps) {\n const [inputValue, setInputValue] = useState(\"\");\n const selectedIds = useMemo(() => selectedTags.map((tag) => tag.id), [selectedTags]);\n\n const options = useMemo(\n () => possibleTags.map((tag) => ({ value: tag.id, label: tag.label })),\n [possibleTags]\n );\n\n return (\n <Grid container>\n <Grid size={{ xs: 12 }}>\n <Card>\n <CardHeader\n title={title}\n style={{\n background: \"linear-gradient(135deg, rgba(25, 118, 210, 0.8), rgba(25, 118, 210, 1))\",\n color: \"#FFFFFF\",\n fontSize: \"1.5rem\",\n textShadow: \"0px 3px 6px rgba(0, 0, 0, 0.5)\",\n }}\n />\n <CardContent>\n <div className=\"mt-2 flex flex-wrap gap-2\">\n {selectedTags.map((tag) => (\n <span\n key={tag.id}\n className=\"inline-block text-sm px-3 py-1 rounded-full outline-black outline-2 font-outlined\"\n style={{\n background: tag.color || \"#bfbcbb\",\n color: \"white\",\n textShadow: \"black 0.2em 0.2em 0.4em\",\n }}\n >\n {tag.label}\n <button\n type=\"button\"\n onClick={() => onToggleTag(tag.id)}\n className=\"ml-2 text-red-500 bg-white bg-opacity-50 rounded-full outline-black outline-2 font-outlined\"\n >\n &times;\n </button>\n </span>\n ))}\n </div>\n <Grid container spacing={3}>\n <Grid sx={{ marginTop: 3, width: \"100%\" }}>\n <Autocomplete\n key={selectedIds.join(\"-\")}\n options={options}\n filterOptions={(availableOptions, state) =>\n availableOptions\n .filter(\n (option) =>\n !selectedIds.includes(option.value) &&\n option.label.toLowerCase().includes(state.inputValue.toLowerCase())\n )\n .slice(0, 3)\n }\n value={null}\n inputValue={inputValue}\n onInputChange={(event, newInputValue) => {\n if (event && event.type === \"change\") {\n setInputValue(newInputValue);\n }\n }}\n onChange={(event, newValue) => {\n if (newValue) {\n onToggleTag(newValue.value);\n }\n setInputValue(\"\");\n }}\n slots={{ popper: CustomPopper }}\n renderInput={(params) => <TextField {...params} label=\"Select Tags\" />}\n />\n </Grid>\n </Grid>\n </CardContent>\n </Card>\n </Grid>\n </Grid>\n );\n}\n\nconst CustomPopper = (props: PopperProps) => {\n return (\n <Popper\n {...props}\n modifiers={[\n {\n name: \"preventOverflow\",\n options: { boundary: \"viewport\" },\n },\n {\n name: \"offset\",\n options: { offset: [0, -10] },\n },\n ]}\n placement=\"top-start\"\n />\n );\n};\n","\"use client\";\n\nimport React from \"react\";\nimport type { Tag } from \"@/types/tag\";\nimport { TagEditor } from \"@/components/shared/TagEditor\";\n\nexport default function PlayerTagsEdit(props: {\n PlayerTags: Tag[];\n possibleTags: Tag[];\n updatePlayerTags: (id:number) => void;\n}) {\n return (\n <TagEditor\n title=\"Player Tags\"\n selectedTags={props.PlayerTags}\n possibleTags={props.possibleTags}\n onToggleTag={props.updatePlayerTags}\n />\n );\n}\n"]}
@@ -0,0 +1,10 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { Tag } from './types/tag';
3
+
4
+ declare function PlayerTagsEdit(props: {
5
+ PlayerTags: Tag[];
6
+ possibleTags: Tag[];
7
+ updatePlayerTags: (id: number) => void;
8
+ }): react_jsx_runtime.JSX.Element;
9
+
10
+ export { PlayerTagsEdit };
@@ -0,0 +1,10 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { Tag } from './types/tag';
3
+
4
+ declare function PlayerTagsEdit(props: {
5
+ PlayerTags: Tag[];
6
+ possibleTags: Tag[];
7
+ updatePlayerTags: (id: number) => void;
8
+ }): react_jsx_runtime.JSX.Element;
9
+
10
+ export { PlayerTagsEdit };
@@ -0,0 +1,124 @@
1
+ "use client";
2
+ import { useState, useMemo } from 'react';
3
+ import Autocomplete from '@mui/material/Autocomplete';
4
+ import Card from '@mui/material/Card';
5
+ import CardContent from '@mui/material/CardContent';
6
+ import CardHeader from '@mui/material/CardHeader';
7
+ import Grid from '@mui/material/Grid';
8
+ import Popper from '@mui/material/Popper';
9
+ import TextField from '@mui/material/TextField';
10
+ import { jsx, jsxs } from 'react/jsx-runtime';
11
+
12
+ // src/components/shared/TagEditor.tsx
13
+ function TagEditor({
14
+ title = "Tags",
15
+ selectedTags,
16
+ possibleTags,
17
+ onToggleTag
18
+ }) {
19
+ const [inputValue, setInputValue] = useState("");
20
+ const selectedIds = useMemo(() => selectedTags.map((tag) => tag.id), [selectedTags]);
21
+ const options = useMemo(
22
+ () => possibleTags.map((tag) => ({ value: tag.id, label: tag.label })),
23
+ [possibleTags]
24
+ );
25
+ return /* @__PURE__ */ jsx(Grid, { container: true, children: /* @__PURE__ */ jsx(Grid, { size: { xs: 12 }, children: /* @__PURE__ */ jsxs(Card, { children: [
26
+ /* @__PURE__ */ jsx(
27
+ CardHeader,
28
+ {
29
+ title,
30
+ style: {
31
+ background: "linear-gradient(135deg, rgba(25, 118, 210, 0.8), rgba(25, 118, 210, 1))",
32
+ color: "#FFFFFF",
33
+ fontSize: "1.5rem",
34
+ textShadow: "0px 3px 6px rgba(0, 0, 0, 0.5)"
35
+ }
36
+ }
37
+ ),
38
+ /* @__PURE__ */ jsxs(CardContent, { children: [
39
+ /* @__PURE__ */ jsx("div", { className: "mt-2 flex flex-wrap gap-2", children: selectedTags.map((tag) => /* @__PURE__ */ jsxs(
40
+ "span",
41
+ {
42
+ className: "inline-block text-sm px-3 py-1 rounded-full outline-black outline-2 font-outlined",
43
+ style: {
44
+ background: tag.color || "#bfbcbb",
45
+ color: "white",
46
+ textShadow: "black 0.2em 0.2em 0.4em"
47
+ },
48
+ children: [
49
+ tag.label,
50
+ /* @__PURE__ */ jsx(
51
+ "button",
52
+ {
53
+ type: "button",
54
+ onClick: () => onToggleTag(tag.id),
55
+ className: "ml-2 text-red-500 bg-white bg-opacity-50 rounded-full outline-black outline-2 font-outlined",
56
+ children: "\xD7"
57
+ }
58
+ )
59
+ ]
60
+ },
61
+ tag.id
62
+ )) }),
63
+ /* @__PURE__ */ jsx(Grid, { container: true, spacing: 3, children: /* @__PURE__ */ jsx(Grid, { sx: { marginTop: 3, width: "100%" }, children: /* @__PURE__ */ jsx(
64
+ Autocomplete,
65
+ {
66
+ options,
67
+ filterOptions: (availableOptions, state) => availableOptions.filter(
68
+ (option) => !selectedIds.includes(option.value) && option.label.toLowerCase().includes(state.inputValue.toLowerCase())
69
+ ).slice(0, 3),
70
+ value: null,
71
+ inputValue,
72
+ onInputChange: (event, newInputValue) => {
73
+ if (event && event.type === "change") {
74
+ setInputValue(newInputValue);
75
+ }
76
+ },
77
+ onChange: (event, newValue) => {
78
+ if (newValue) {
79
+ onToggleTag(newValue.value);
80
+ }
81
+ setInputValue("");
82
+ },
83
+ slots: { popper: CustomPopper },
84
+ renderInput: (params) => /* @__PURE__ */ jsx(TextField, { ...params, label: "Select Tags" })
85
+ },
86
+ selectedIds.join("-")
87
+ ) }) })
88
+ ] })
89
+ ] }) }) });
90
+ }
91
+ var CustomPopper = (props) => {
92
+ return /* @__PURE__ */ jsx(
93
+ Popper,
94
+ {
95
+ ...props,
96
+ modifiers: [
97
+ {
98
+ name: "preventOverflow",
99
+ options: { boundary: "viewport" }
100
+ },
101
+ {
102
+ name: "offset",
103
+ options: { offset: [0, -10] }
104
+ }
105
+ ],
106
+ placement: "top-start"
107
+ }
108
+ );
109
+ };
110
+ function PlayerTagsEdit(props) {
111
+ return /* @__PURE__ */ jsx(
112
+ TagEditor,
113
+ {
114
+ title: "Player Tags",
115
+ selectedTags: props.PlayerTags,
116
+ possibleTags: props.possibleTags,
117
+ onToggleTag: props.updatePlayerTags
118
+ }
119
+ );
120
+ }
121
+
122
+ export { PlayerTagsEdit };
123
+ //# sourceMappingURL=ProfilePage.mjs.map
124
+ //# sourceMappingURL=ProfilePage.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/shared/TagEditor.tsx","../src/components/ProfilePage/PlayerTagsEdit.tsx"],"names":["jsx"],"mappings":"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","file":"ProfilePage.mjs","sourcesContent":["\"use client\";\n\nimport React, { useMemo, useState } from \"react\";\nimport Autocomplete from \"@mui/material/Autocomplete\";\nimport Card from \"@mui/material/Card\";\nimport CardContent from \"@mui/material/CardContent\";\nimport CardHeader from \"@mui/material/CardHeader\";\nimport Grid from \"@mui/material/Grid\";\nimport Popper, { PopperProps } from \"@mui/material/Popper\";\nimport TextField from \"@mui/material/TextField\";\nimport type { Tag } from \"@/types/tag\";\n\nexport interface TagEditorProps {\n title?: string;\n selectedTags: Tag[];\n possibleTags: Tag[];\n onToggleTag: (id: number) => void;\n}\n\nexport function TagEditor({\n title = \"Tags\",\n selectedTags,\n possibleTags,\n onToggleTag,\n}: TagEditorProps) {\n const [inputValue, setInputValue] = useState(\"\");\n const selectedIds = useMemo(() => selectedTags.map((tag) => tag.id), [selectedTags]);\n\n const options = useMemo(\n () => possibleTags.map((tag) => ({ value: tag.id, label: tag.label })),\n [possibleTags]\n );\n\n return (\n <Grid container>\n <Grid size={{ xs: 12 }}>\n <Card>\n <CardHeader\n title={title}\n style={{\n background: \"linear-gradient(135deg, rgba(25, 118, 210, 0.8), rgba(25, 118, 210, 1))\",\n color: \"#FFFFFF\",\n fontSize: \"1.5rem\",\n textShadow: \"0px 3px 6px rgba(0, 0, 0, 0.5)\",\n }}\n />\n <CardContent>\n <div className=\"mt-2 flex flex-wrap gap-2\">\n {selectedTags.map((tag) => (\n <span\n key={tag.id}\n className=\"inline-block text-sm px-3 py-1 rounded-full outline-black outline-2 font-outlined\"\n style={{\n background: tag.color || \"#bfbcbb\",\n color: \"white\",\n textShadow: \"black 0.2em 0.2em 0.4em\",\n }}\n >\n {tag.label}\n <button\n type=\"button\"\n onClick={() => onToggleTag(tag.id)}\n className=\"ml-2 text-red-500 bg-white bg-opacity-50 rounded-full outline-black outline-2 font-outlined\"\n >\n &times;\n </button>\n </span>\n ))}\n </div>\n <Grid container spacing={3}>\n <Grid sx={{ marginTop: 3, width: \"100%\" }}>\n <Autocomplete\n key={selectedIds.join(\"-\")}\n options={options}\n filterOptions={(availableOptions, state) =>\n availableOptions\n .filter(\n (option) =>\n !selectedIds.includes(option.value) &&\n option.label.toLowerCase().includes(state.inputValue.toLowerCase())\n )\n .slice(0, 3)\n }\n value={null}\n inputValue={inputValue}\n onInputChange={(event, newInputValue) => {\n if (event && event.type === \"change\") {\n setInputValue(newInputValue);\n }\n }}\n onChange={(event, newValue) => {\n if (newValue) {\n onToggleTag(newValue.value);\n }\n setInputValue(\"\");\n }}\n slots={{ popper: CustomPopper }}\n renderInput={(params) => <TextField {...params} label=\"Select Tags\" />}\n />\n </Grid>\n </Grid>\n </CardContent>\n </Card>\n </Grid>\n </Grid>\n );\n}\n\nconst CustomPopper = (props: PopperProps) => {\n return (\n <Popper\n {...props}\n modifiers={[\n {\n name: \"preventOverflow\",\n options: { boundary: \"viewport\" },\n },\n {\n name: \"offset\",\n options: { offset: [0, -10] },\n },\n ]}\n placement=\"top-start\"\n />\n );\n};\n","\"use client\";\n\nimport React from \"react\";\nimport type { Tag } from \"@/types/tag\";\nimport { TagEditor } from \"@/components/shared/TagEditor\";\n\nexport default function PlayerTagsEdit(props: {\n PlayerTags: Tag[];\n possibleTags: Tag[];\n updatePlayerTags: (id:number) => void;\n}) {\n return (\n <TagEditor\n title=\"Player Tags\"\n selectedTags={props.PlayerTags}\n possibleTags={props.possibleTags}\n onToggleTag={props.updatePlayerTags}\n />\n );\n}\n"]}