@mbpockets/shared-ui 0.1.20 → 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 (125) 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.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 +139 -67
  30. package/dist/SearchPage/Results/index.cjs.map +1 -1
  31. package/dist/SearchPage/Results/index.mjs +127 -63
  32. package/dist/SearchPage/Results/index.mjs.map +1 -1
  33. package/dist/SearchPage/Results.cjs +139 -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 +127 -63
  38. package/dist/SearchPage/Results.mjs.map +1 -1
  39. package/dist/SearchPage/index.cjs +496 -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 +483 -216
  44. package/dist/SearchPage/index.mjs.map +1 -1
  45. package/dist/SearchPage.cjs +496 -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 +483 -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 +447 -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 +435 -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
@@ -1,13 +1,18 @@
1
1
  export { GameTableProvider, useGameTableContext } from './TablePage/GameTableProvider';
2
2
  export { ModalContext, ModalProvider, useModal } from './TablePage/ModalProvider';
3
+ import React__default from 'react';
3
4
  export { DMHighlightsCard, PlayerHighlightsCard, PlayerHighlightsCardProps } from './TablePage/players';
4
5
  import * as react_jsx_runtime from 'react/jsx-runtime';
5
6
  import { Player } from './types/player';
6
7
  import { TableRecord } from './types/tables';
7
8
  import { Tag } from './types/tag';
8
- import 'react';
9
9
  import './types/table.cjs';
10
10
 
11
+ interface NextGameCountdownProps {
12
+ nextGameTime: string | Date;
13
+ }
14
+ declare const NextGameLabel: React__default.FC<NextGameCountdownProps>;
15
+
11
16
  interface UpdatableValues {
12
17
  description?: string;
13
18
  shortDescription?: string;
@@ -51,4 +56,4 @@ declare function TableActionsBar(props: TableActionProps): react_jsx_runtime.JSX
51
56
 
52
57
  declare function TablePageLayout(props: TablePageLayoutProps): react_jsx_runtime.JSX.Element;
53
58
 
54
- export { type TableActionProps, TableActionsBar, TablePageLayout, type TablePageLayoutProps, type TableStatus, type UpdatableValues };
59
+ export { NextGameLabel, type TableActionProps, TableActionsBar, TablePageLayout, type TablePageLayoutProps, type TableStatus, type UpdatableValues };
@@ -1,13 +1,18 @@
1
1
  export { GameTableProvider, useGameTableContext } from './TablePage/GameTableProvider';
2
2
  export { ModalContext, ModalProvider, useModal } from './TablePage/ModalProvider';
3
+ import React__default from 'react';
3
4
  export { DMHighlightsCard, PlayerHighlightsCard, PlayerHighlightsCardProps } from './TablePage/players';
4
5
  import * as react_jsx_runtime from 'react/jsx-runtime';
5
6
  import { Player } from './types/player';
6
7
  import { TableRecord } from './types/tables';
7
8
  import { Tag } from './types/tag';
8
- import 'react';
9
9
  import './types/table.js';
10
10
 
11
+ interface NextGameCountdownProps {
12
+ nextGameTime: string | Date;
13
+ }
14
+ declare const NextGameLabel: React__default.FC<NextGameCountdownProps>;
15
+
11
16
  interface UpdatableValues {
12
17
  description?: string;
13
18
  shortDescription?: string;
@@ -51,4 +56,4 @@ declare function TableActionsBar(props: TableActionProps): react_jsx_runtime.JSX
51
56
 
52
57
  declare function TablePageLayout(props: TablePageLayoutProps): react_jsx_runtime.JSX.Element;
53
58
 
54
- export { type TableActionProps, TableActionsBar, TablePageLayout, type TablePageLayoutProps, type TableStatus, type UpdatableValues };
59
+ export { NextGameLabel, type TableActionProps, TableActionsBar, TablePageLayout, type TablePageLayoutProps, type TableStatus, type UpdatableValues };
@@ -1,9 +1,9 @@
1
1
  "use client";
2
2
  import React, { createContext, useContext, useState, useRef, useEffect, useMemo } from 'react';
3
3
  import { jsx, Fragment, jsxs } from 'react/jsx-runtime';
4
+ import { Typography, Card, CardContent, CardHeader, Grid as Grid$1, Box } from '@mui/material';
4
5
  import Image from 'next/image';
5
6
  import Button2 from '@mui/material/Button';
6
- import { Card, CardContent, Typography, CardHeader, Grid as Grid$1, Box } from '@mui/material';
7
7
  import Grid from '@mui/material/Grid';
8
8
  import CardHeader2 from '@mui/material/CardHeader';
9
9
  import DeleteIcon from '@mui/icons-material/Delete';
@@ -99,6 +99,14 @@ var ModalProvider = ({ children }) => {
99
99
  ] });
100
100
  };
101
101
  var ModalProvider_default = ModalProvider;
102
+ var NextGameLabel = ({ nextGameTime }) => {
103
+ const date = typeof nextGameTime === "string" ? new Date(nextGameTime) : nextGameTime;
104
+ return /* @__PURE__ */ jsxs(Typography, { variant: "caption", sx: { display: "block", mb: 1, color: "primary.main", fontWeight: "bold" }, children: [
105
+ "Next Game: ",
106
+ date.toLocaleString()
107
+ ] });
108
+ };
109
+ var NextGameLabel_default = NextGameLabel;
102
110
  function Chip({ tag, removeCallback }) {
103
111
  var _a;
104
112
  const color = (_a = tag.color) != null ? _a : "#bfbcbb";
@@ -575,6 +583,6 @@ var renderEditableTags = function(selectedTags, allTags, onToggleTag) {
575
583
  };
576
584
  var TablePageLayout_default = TablePageLayout;
577
585
 
578
- export { DMHighlightsCard, GameTableProvider, ModalContext, ModalProvider_default as ModalProvider, PlayerHighlightsCard, TableActionsBar, TablePageLayout_default as TablePageLayout, useGameTableContext, useModal };
586
+ export { DMHighlightsCard, GameTableProvider, ModalContext, ModalProvider_default as ModalProvider, NextGameLabel_default as NextGameLabel, PlayerHighlightsCard, TableActionsBar, TablePageLayout_default as TablePageLayout, useGameTableContext, useModal };
579
587
  //# sourceMappingURL=TablePage.mjs.map
580
588
  //# sourceMappingURL=TablePage.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/TablePage/GameTableProvider/GameTableContext.tsx","../src/components/TablePage/ModalProvider/ModalContext.ts","../src/components/shared/Modal/index.tsx","../src/components/TablePage/ModalProvider/ModalProvider.tsx","../src/components/shared/Chip.tsx","../src/components/shared/TagComponents.tsx","../src/components/TablePage/players/PlayerHighlightsCard.tsx","../src/components/TablePage/TableActionsBar.tsx","../src/components/shared/AutoResizingTextarea.tsx","../src/components/shared/TagEditor.tsx","../src/components/TablePage/TablePageLayout.tsx"],"names":["_a","jsx","jsxs","Fragment","Button","CardHeader","Image","Grid","Typography","useEffect","useState","Card","CardContent","useRef","useMemo"],"mappings":"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","file":"TablePage.mjs","sourcesContent":["\"use client\"\nimport React from \"react\";\nimport type { TableFormat } from \"@/types/table\";\n\ninterface IGameTableContextType {\n table: TableFormat;\n setTable: React.Dispatch<React.SetStateAction<TableFormat | null>>;\n}\n\ninterface IGameTableProviderProps {\n children: React.ReactNode;\n}\n\nconst GameTableContext = React.createContext<IGameTableContextType | undefined>(undefined);\n\nexport function GameTableProvider(props: IGameTableProviderProps) {\n return <>{props.children}</>;\n}\n\nexport function useGameTableContext(): IGameTableContextType {\n const context = React.useContext(GameTableContext);\n\n if (context) {\n return context;\n }\n\n throw new Error('useGameTableContext is deprecated in the package build. Pass table data through props instead.');\n}\n","\"use client\"\r\nimport { createContext, ReactNode, useContext } from \"react\";\r\n\r\ntype ModalContextType = {\r\n showModal: (content: ReactNode) => void;\r\n hideModal: () => void;\r\n}\r\n\r\nexport const ModalContext = createContext<ModalContextType>({\r\n showModal: (content: ReactNode) => {},\r\n hideModal: () => {},\r\n});\r\n\r\nexport const useModal = () => useContext(ModalContext);","\"use client\"\r\nimport React, { useEffect, useRef } from \"react\";\r\nimport \"./style.css\";\r\n\r\ninterface IModalProps {\r\n onClose: () => void;\r\n children: React.ReactNode;\r\n}\r\n\r\nconst Modal: React.FC<IModalProps> = ({ onClose, children }) => {\r\n const modalRef = useRef<HTMLDivElement>(null);\r\n const previouslyFocusedElement = useRef<HTMLElement | null>(null);\r\n\r\n useEffect(() => {\r\n if (children) {\r\n previouslyFocusedElement.current = document.activeElement as HTMLElement;\r\n modalRef.current?.focus();\r\n }\r\n return () => {\r\n previouslyFocusedElement.current?.focus();\r\n }\r\n }, [children]);\r\n\r\n const handleOnClose = () => {\r\n onClose();\r\n };\r\n\r\n const handleKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\r\n if (e.key !== 'Tab') return;\r\n\r\n const focusableElements = modalRef.current?.querySelectorAll<HTMLElement>(\r\n 'button, [tabindex]:not([tabindex=\"-1\"])'\r\n );\r\n\r\n if (!focusableElements || focusableElements.length === 0) return;\r\n\r\n const first = focusableElements[0];\r\n const last = focusableElements[focusableElements.length - 1];\r\n\r\n if (e.shiftKey) {\r\n // shift + tab\r\n if (document.activeElement === first) {\r\n e.preventDefault();\r\n last.focus();\r\n }\r\n } else {\r\n // tab\r\n if (document.activeElement === last) {\r\n e.preventDefault();\r\n first.focus();\r\n }\r\n }\r\n };\r\n\r\n return (\r\n <div\r\n className=\"modal-overlay\"\r\n onKeyDown={handleKeyDown}\r\n ref={modalRef}\r\n role=\"dialog\"\r\n tabIndex={-1}\r\n >\r\n <div className=\"modal-container\">\r\n <div className=\"modal-control-strip\">\r\n <button onClick={handleOnClose}>X</button>\r\n </div>\r\n <div className=\"modal-content\">\r\n {children}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default Modal;\r\n","\"use client\";\n\nimport React, { ReactNode, useState } from \"react\";\r\nimport { ModalContext } from './ModalContext';\r\nimport Modal from \"@/components/shared/Modal\";\r\n\r\ntype ModalProviderProps = {\r\n children: ReactNode;\r\n}\r\n\r\nexport const ModalProvider = ({ children }: ModalProviderProps) => {\r\n const [modalContent, setModalContent] = useState<null | ReactNode>(null);\r\n\r\n const showModal = (content: ReactNode) => setModalContent(content);\r\n const hideModal = () => setModalContent(null);\r\n\r\n return (\r\n <ModalContext.Provider value={{ showModal, hideModal }}>\r\n {children}\r\n {modalContent && (\r\n <Modal onClose={hideModal}>\r\n {modalContent}\r\n </Modal>\r\n )}\r\n </ModalContext.Provider>\r\n );\r\n}\r\n\r\nexport default ModalProvider;","import React from \"react\";\r\nimport {Tag} from \"@/types/tag\";\r\n\r\nexport default function Chip({ tag, removeCallback }: { tag: Tag, removeCallback?: (tagId: number) => void }) {\r\n const color = tag.color ?? \"#bfbcbb\";\r\n return (\r\n <>\r\n <span\r\n key={tag.id}\r\n className=\"inline-block text-sm px-3 py-1 rounded-full border-2 font-outlined text-white m-0.5 font-stretch-105% font-sans\"\r\n style={{\r\n borderColor: `color-mix(in srgb, ${color}, black 50%)`,\r\n background: `linear-gradient(160deg, color-mix(in srgb, ${color}, white 10%) 0%, color-mix(in srgb, ${color}, black 60%) 100%)`,\r\n textShadow: \"black 1.5px 1px 1.5px\",\r\n filter: `drop-shadow(2px 2px 1.5px color-mix(in srgb, ${color}, black 80%))`\r\n }}\r\n >\r\n {tag.label}\r\n {removeCallback && (\r\n <button\r\n type=\"button\"\r\n onClick={() => removeCallback(tag.id)}\r\n className=\"ml-2 text-white hover:text-red-700 focus:outline-none pl-0.5 pr-1 cursor-pointer hover:bg-white rounded-full\"\r\n style={{\r\n textShadow: \"black 1px 1px 1px\"\r\n }}\r\n >\r\n X\r\n </button>\r\n )}\r\n </span>\r\n </>\r\n )\r\n\r\n}","\"use client\";\r\n\r\nimport React from \"react\";\r\nimport type { Tag } from \"@/types/tag\";\r\nimport Chip from \"@/components/shared/Chip\";\r\n\r\nexport function generateTagsDisplay(tag: Tag) {\r\n return (\r\n <Chip tag={tag} key={tag.id} />\r\n )\r\n}\r\n\r\nexport function renderTagsFromIds(ids: number[] | undefined, legalTags: Tag[]) {\r\n if (!ids || !legalTags || legalTags.length === 0) { return ( <></>) }\r\n const validTags = ids\r\n .map((id) => legalTags.find((tag) => tag.id === id))\r\n .filter((tag): tag is Tag => Boolean(tag));\r\n\r\n return validTags.map((tag) => generateTagsDisplay(tag));\r\n}\r\n","\"use client\";\n\nimport Image from \"next/image\";\nimport Button from \"@mui/material/Button\";\nimport {Card, CardContent, CardHeader, Typography} from \"@mui/material\";\nimport Grid from \"@mui/material/Grid\";\nimport {renderTagsFromIds} from \"@/components/shared/TagComponents\";\nimport type { Player } from \"@/types/player\";\nimport type { Tag } from \"@/types/tag\";\n\nexport type PlayerHighlightsCardProps = {\n addToTable?: (player: Player) => void;\n allTags: Tag[];\n canChangeDungeonMaster: boolean;\n canEdit: boolean;\n handleAssignToDungeonMaster: (player: Player) => void;\n isWaitList?: boolean;\n player: Player;\n removeFromTable: (player: Player) => void;\n}\n\nexport const PlayerHighlightsCard = function(props: PlayerHighlightsCardProps) {\n const {\n allTags,\n canChangeDungeonMaster,\n canEdit,\n handleAssignToDungeonMaster,\n isWaitList,\n player,\n removeFromTable\n } = props;\n\n return (\n <Card elevation={3} sx={{ backgroundColor: canEdit ? \"#fffbea\" : \"#f5f9fa\", marginBottom:\"6px\" }}>\n <CardContent>\n <Grid container spacing={2} direction=\"column\">\n <Grid container direction=\"row\">\n <Grid>\n <Image alt={player.username + \"'s profile pic\"} height={64} src={player.miniPic || \"\"} width={64} />\n </Grid>\n <Grid>\n <Typography variant=\"h5\">{player.username}</Typography>\n </Grid>\n </Grid>\n <Grid>{renderTagsFromIds(player.tags, allTags)}</Grid>\n </Grid>\n {canEdit && (\n <Grid>\n <Button onClick={() => removeFromTable(player)}>\n { isWaitList ? <p>Deny Player</p> : <p>Remove Player</p> }\n </Button>\n {canChangeDungeonMaster && (\n <Button onClick={() => {\n handleAssignToDungeonMaster(player);\n removeFromTable(player);\n }}>\n <p>Assign to DungeonMaster</p>\n </Button>\n )}\n </Grid>\n )}\n </CardContent>\n </Card>\n )\n}\n\nexport const DMHighlightsCard = function({canEdit, player, allTags}:{canEdit: boolean, player: Player, allTags:Tag[]}) {\n return (\n <Card elevation={3} sx={{ backgroundColor: \"#f5f9fa\", marginBottom:\"6px\" }}>\n <CardHeader slotProps={{title: { variant: \"h4\"}}} title=\"Game Master\"/>\n <CardContent sx={{ backgroundColor: canEdit ? '#fffbea' : 'inherit' }}>\n <Grid container spacing={2} direction=\"column\">\n <Grid>\n <Typography variant=\"h5\">{player.username}</Typography>\n </Grid>\n <Grid container direction=\"row\">\n <Grid>\n <Image alt={player.username + \"'s profile pic\"} height={120} src={player.imageUrl ? player.imageUrl : \"\"} width={256} />\n </Grid>\n <Grid>{renderTagsFromIds(player.tags, allTags)}</Grid>\n <Typography>{player.description}</Typography>\n </Grid>\n </Grid>\n </CardContent>\n </Card>\n )\n}\n","\"use client\";\n\nimport type { ReactNode } from \"react\";\nimport Image from \"next/image\";\nimport Button from \"@mui/material/Button\";\nimport CardHeader from \"@mui/material/CardHeader\";\nimport { Grid, Typography } from \"@mui/material\";\nimport DeleteIcon from \"@mui/icons-material/Delete\";\nimport EditIcon from \"@mui/icons-material/Edit\";\nimport ListIcon from \"@mui/icons-material/List\";\nimport SaveIcon from \"@mui/icons-material/Save\";\nimport { useModal } from \"@/components/TablePage/ModalProvider/ModalContext\";\nimport type { Player } from \"@/types/player\";\nimport type { TableStatus } from \"@/components/TablePage/types\";\n\nexport interface TableActionProps {\n isInEditMode: boolean;\n numPlayers: number;\n onDeleteTable?: () => void | Promise<void>;\n onEditModeChange: (nextValue: boolean) => void;\n onJoinWaitlist?: () => void | Promise<void>;\n onLeaveTable?: () => void | Promise<void>;\n onPromoteWaitlistPlayer?: (playerId: number) => void;\n onSave: () => void;\n slots: number;\n tableStatus: TableStatus;\n waitlistPlayers: Player[];\n}\n\nexport default function TableActionsBar(props: TableActionProps) {\n const { hideModal, showModal } = useModal();\n const {\n isInEditMode,\n numPlayers,\n onDeleteTable,\n onEditModeChange,\n onJoinWaitlist,\n onLeaveTable,\n onPromoteWaitlistPlayer,\n onSave,\n slots,\n tableStatus,\n waitlistPlayers,\n } = props;\n const {isOwner, isPlayer, isDM, onWaitlist} = tableStatus;\n\n const canEditTable = isOwner && !isInEditMode;\n const canSaveTable = isOwner && isInEditMode;\n const canViewWaitlist = isOwner || isDM || waitlistPlayers.length > 0;\n\n const renderPlayerWaitlistModalContent = (canMovePlayersToTable?: boolean): ReactNode => {\n if (waitlistPlayers.length === 0) {\n return <p>Waitlist is empty!</p>;\n }\n\n return (\n <div className=\"flex flex-col items-center\">\n <CardHeader slotProps={{title: {variant: \"h4\"}}} title=\"Waitlist Players: \"/>\n <ul className=\"gap-8\">\n {waitlistPlayers.map((player) => (\n <li\n className={`${canMovePlayersToTable ? 'bg-amber-100 cursor-pointer' : 'bg-gray-200'} mb-8 flex flex-row flex-start space-between justify-center items-center gap-3 p-2 rounded`}\n key={player.id}\n onClick={() => canMovePlayersToTable ? onPromoteWaitlistPlayer?.(player.id) : undefined}\n tabIndex={0}\n >\n <Image\n alt={player.username + \"'s profile pic\"}\n height={64}\n src={player.miniPic || \"\"}\n width={64}\n />\n <div>{player.username}</div>\n </li>\n ))}\n </ul>\n <button onClick={() => hideModal()}>close modal</button>\n </div>\n )\n }\n\n return (\n <Grid container direction=\"column\" spacing={1}>\n <Grid container direction=\"row\">\n <Typography color=\"white\" sx={{ textShadow:'4px 4px 6px rgba(0, 0, 0, 0.5)' }}>\n Players: {numPlayers} / {slots}\n </Typography>\n </Grid>\n\n <Grid container direction=\"row\">\n {!isOwner && !isPlayer && !isDM && !onWaitlist && (\n <Button onClick={() => onJoinWaitlist?.()} sx={buttonStyle}>\n Join Waitlist\n </Button>\n )}\n\n {!isOwner && (isPlayer || onWaitlist) && (\n <Button onClick={() => onLeaveTable?.()} sx={buttonStyle}>\n {onWaitlist ? \"Leave Waitlist\" : \"Leave Table\"}\n </Button>\n )}\n\n { canEditTable ? (\n <>\n <Button onClick={() => onEditModeChange(true)} sx={buttonStyle} endIcon={<EditIcon/>}>\n Edit\n </Button>\n {canViewWaitlist ? (\n <Button\n endIcon={<ListIcon />}\n onClick={() => showModal(renderPlayerWaitlistModalContent(false))}\n sx={buttonStyle}\n >\n View Waitlist\n </Button>\n ) : null}\n </>\n ) : canSaveTable ? (\n <>\n <Button onClick={onSave} sx={buttonStyle} endIcon={<SaveIcon/>}>\n Save\n </Button>\n <Button onClick={() => onEditModeChange(false)} sx={buttonStyle}>\n Cancel\n </Button>\n <Button\n endIcon={<ListIcon />}\n onClick={() => showModal(renderPlayerWaitlistModalContent(true))}\n sx={buttonStyle}\n >\n Edit Waitlist\n </Button>\n </>\n ) : null}\n\n { isOwner && (\n <Button onClick={() => onDeleteTable?.()} sx={buttonStyle} endIcon={<DeleteIcon/>}>\n Delete Table\n </Button>\n )}\n </Grid>\n </Grid>\n )\n}\n\nconst buttonStyle = {\n marginLeft: \"3px\",\n backgroundColor:\"blue\",\n color:\"white\",\n borderRadius:\"5px\",\n};\n","\"use client\"\r\n\r\nimport React, {Dispatch, SetStateAction, useEffect} from 'react';\r\n\r\ninterface IAutoResizingTextareaProps {\r\n isInEditMode: boolean;\r\n onChange: Dispatch<SetStateAction<string>>;\r\n textareaRef: React.RefObject<HTMLTextAreaElement | null>;\r\n value: string;\r\n}\r\n\r\nconst AutoResizingTextarea: React.FC<IAutoResizingTextareaProps> = (props: IAutoResizingTextareaProps) => {\r\n const { isInEditMode, onChange, textareaRef, value } = props;\r\n\r\n useEffect(() => {\r\n if (isInEditMode && textareaRef.current) {\r\n const textarea = textareaRef.current;\r\n\r\n textarea.style.height = 'auto';\r\n textarea.style.height = `${textarea.scrollHeight}px`;\r\n }\r\n }, [isInEditMode, textareaRef, value]); // Run effect when entering edit mode or value changes\r\n\r\n return (\r\n <textarea\r\n ref={textareaRef}\r\n value={value}\r\n onChange={(e) => onChange(e.target.value)}\r\n style={{\r\n backgroundColor: '#fffbea',\r\n overflow: 'hidden',\r\n resize: 'none',\r\n width: '100%'\r\n }}\r\n />\r\n );\r\n}\r\n\r\nexport default AutoResizingTextarea;\r\n","\"use client\";\r\n\r\nimport React, { useMemo, useState } from \"react\";\r\nimport Autocomplete from \"@mui/material/Autocomplete\";\r\nimport Card from \"@mui/material/Card\";\r\nimport CardContent from \"@mui/material/CardContent\";\r\nimport CardHeader from \"@mui/material/CardHeader\";\r\nimport Grid from \"@mui/material/Grid\";\r\nimport Popper, { PopperProps } from \"@mui/material/Popper\";\r\nimport TextField from \"@mui/material/TextField\";\r\nimport type { Tag } from \"@/types/tag\";\r\nimport Chip from \"@/components/shared/Chip\";\r\n\r\nexport interface TagEditorProps {\r\n title?: string;\r\n selectedTags: Tag[];\r\n possibleTags: Tag[];\r\n onToggleTag: (id: number) => void;\r\n}\r\n\r\nexport function TagEditor({\r\n title = \"Tags\",\r\n selectedTags,\r\n possibleTags,\r\n onToggleTag,\r\n}: TagEditorProps) {\r\n const [inputValue, setInputValue] = useState(\"\");\r\n const selectedIds = useMemo(() => selectedTags.map((tag) => tag.id), [selectedTags]);\r\n\r\n const options = useMemo(\r\n () => possibleTags.map((tag) => ({ value: tag.id, label: tag.label })),\r\n [possibleTags]\r\n );\r\n\r\n return (\r\n <Grid container>\r\n <Grid size={{ xs: 12 }}>\r\n <Card>\r\n <CardHeader\r\n title={title}\r\n style={{\r\n background: \"linear-gradient(135deg, rgba(25, 118, 210, 0.8), rgba(25, 118, 210, 1))\",\r\n color: \"#FFFFFF\",\r\n fontSize: \"1.5rem\",\r\n textShadow: \"0px 3px 6px rgba(0, 0, 0, 0.5)\",\r\n }}\r\n />\r\n <CardContent>\r\n <div className=\"mt-2 flex flex-wrap gap-2\">\r\n {selectedTags.map((tag) => (\r\n <Chip\r\n key={tag.id}\r\n tag={tag}\r\n removeCallback={() => onToggleTag(tag.id)}\r\n />\r\n ))}\r\n </div>\r\n <Grid container spacing={3}>\r\n <Grid sx={{ marginTop: 3, width: \"100%\" }}>\r\n <Autocomplete\r\n key={selectedIds.join(\"-\")}\r\n options={options}\r\n filterOptions={(availableOptions, state) =>\r\n availableOptions\r\n .filter(\r\n (option) =>\r\n !selectedIds.includes(option.value) &&\r\n option.label.toLowerCase().includes(state.inputValue.toLowerCase())\r\n )\r\n .slice(0, 3)\r\n }\r\n value={null}\r\n inputValue={inputValue}\r\n onInputChange={(event, newInputValue) => {\r\n if (event && event.type === \"change\") {\r\n setInputValue(newInputValue);\r\n }\r\n }}\r\n onChange={(event, newValue) => {\r\n if (newValue) {\r\n onToggleTag(newValue.value);\r\n }\r\n setInputValue(\"\");\r\n }}\r\n slots={{ popper: CustomPopper }}\r\n renderInput={(params) => <TextField {...params} label=\"Select Tags\" />}\r\n />\r\n </Grid>\r\n </Grid>\r\n </CardContent>\r\n </Card>\r\n </Grid>\r\n </Grid>\r\n );\r\n}\r\n\r\nconst CustomPopper = (props: PopperProps) => {\r\n return (\r\n <Popper\r\n {...props}\r\n modifiers={[\r\n {\r\n name: \"preventOverflow\",\r\n options: { boundary: \"viewport\" },\r\n },\r\n {\r\n name: \"offset\",\r\n options: { offset: [0, -10] },\r\n },\r\n ]}\r\n placement=\"top-start\"\r\n />\r\n );\r\n};\r\n","\"use client\";\n\nimport { JSX, useEffect, useMemo, useRef, useState } from \"react\";\nimport { Box, Card, CardContent, CardHeader, Typography } from \"@mui/material\";\nimport Grid from \"@mui/material/Grid\";\nimport AutoResizingTextarea from \"@/components/shared/AutoResizingTextarea\";\nimport { TagEditor, generateTagsDisplay } from \"@/components/shared\";\nimport { DMHighlightsCard, PlayerHighlightsCard } from \"@/components/TablePage/players/PlayerHighlightsCard\";\nimport TableActionsBar from \"@/components/TablePage/TableActionsBar\";\nimport type { Player } from \"@/types/player\";\nimport type { TableRecord } from \"@/types/tables\";\nimport type { Tag } from \"@/types/tag\";\nimport type { TablePageLayoutProps } from \"@/components/TablePage/types\";\n\nexport function TablePageLayout(props: TablePageLayoutProps) {\n const { allTags, dungeonMaster, onDeleteTable, onJoinWaitlist, onLeaveTable, onSaveDraft, players, table, tableStatus, waitlistPlayers } = props;\n const textAreaRef = useRef<HTMLTextAreaElement>(null);\n const [isTableInEditMode, setIsTableInEditMode] = useState(false);\n\n const [currentDescription, setCurrentDescription] = useState(table.description);\n const [currentDungeonMaster, setCurrentDungeonMaster] = useState(dungeonMaster);\n const [currentPlayers, setCurrentPlayers] = useState(players);\n const [currentShortDescription, setCurrentShortDescription] = useState(table.shortDescription);\n const [currentTitle, setCurrentTitle] = useState(table.title);\n const [currentWaitlistPlayers, setCurrentWaitlistPlayers] = useState(waitlistPlayers);\n const [currentTagIds, setCurrentTagIds] = useState<number[]>(table.tags ?? []);\n\n useEffect(() => {\n setCurrentDescription(table.description);\n setCurrentDungeonMaster(dungeonMaster);\n setCurrentPlayers(players);\n setCurrentShortDescription(table.shortDescription);\n setCurrentTitle(table.title);\n setCurrentWaitlistPlayers(waitlistPlayers);\n setCurrentTagIds(table.tags ?? []);\n }, [dungeonMaster, players, table, waitlistPlayers]);\n\n const currentTags = useMemo(\n () => allTags.filter((tag) => currentTagIds.includes(tag.id)),\n [allTags, currentTagIds]\n );\n\n const handleAssignToDungeonMaster = (newDungeonMaster: Player) => {\n setCurrentDungeonMaster(newDungeonMaster);\n };\n\n const handleRemovePlayerFromTable = (playerToRemove: Player): void => {\n setCurrentPlayers((prevState) => prevState.filter((player) => player.id !== playerToRemove.id));\n };\n\n const handlePromoteWaitlistPlayer = (playerIdToPromote: number) => {\n setCurrentWaitlistPlayers((prevWaitlist) => {\n const foundPlayer = prevWaitlist.find((player) => player.id === playerIdToPromote);\n if (!foundPlayer) {\n return prevWaitlist;\n }\n\n setCurrentPlayers((prevPlayers) => [...prevPlayers, foundPlayer]);\n return prevWaitlist.filter((player) => player.id !== playerIdToPromote);\n });\n };\n\n const handleToggleTag = (tagId: number) => {\n setCurrentTagIds((prevState) =>\n prevState.includes(tagId)\n ? prevState.filter((id) => id !== tagId)\n : [...prevState, tagId]\n );\n };\n\n const handleSaveTable = () => {\n const nextDraft: TableRecord = {\n ...table,\n description: currentDescription,\n dungeonMaster: String(currentDungeonMaster.id),\n players: currentPlayers.map((player) => player.id),\n shortDescription: currentShortDescription,\n tags: currentTagIds,\n title: currentTitle,\n waitlist: currentWaitlistPlayers.map((player) => player.id),\n };\n\n void onSaveDraft?.(nextDraft);\n setIsTableInEditMode(false);\n };\n\n return (\n <Card\n sx={{\n backgroundColor: isTableInEditMode ? \"lightsalmon\" : \"white\",\n borderRadius: \"5%\",\n p: 2,\n boxShadow: \"0px 8px 15px rgba(25, 118, 210, 0.3)\",\n }}\n >\n <Grid container direction=\"column\">\n <Grid\n container\n direction=\"column\"\n spacing={1}\n sx={{\n px: 2,\n py: 1.5,\n borderRadius: 2,\n background: \"linear-gradient(135deg, rgba(25,118,210,0.8), rgba(25,118,210,1))\",\n textShadow:'4px 4px 6px rgba(0, 0, 0, 0.5)'\n }}\n >\n <Box>\n {isTableInEditMode ? (\n <input\n onChange={(e) => setCurrentTitle(e.target.value)}\n style={{ backgroundColor: '#fffbea' }}\n tabIndex={0}\n type=\"text\"\n value={currentTitle}\n />\n ) : (\n <CardHeader\n title={currentTitle}\n sx={{\n p: 0,\n \"& .MuiCardHeader-title\": {\n color: \"white\",\n fontWeight: 700,\n },\n }}\n />\n )}\n </Box>\n\n {isTableInEditMode ? (\n <input\n onChange={(e) => setCurrentShortDescription(e.target.value)}\n style={{ backgroundColor: '#fffbea' }}\n tabIndex={0}\n type=\"text\"\n value={currentShortDescription}\n />\n ) : (\n <Typography sx={{ color: \"white\", opacity: 0.95 }}>\n {currentShortDescription}\n </Typography>\n )}\n\n <Grid container>\n {isTableInEditMode\n ? renderEditableTags(currentTags, allTags, handleToggleTag)\n : renderTags(currentTagIds, allTags)}\n </Grid>\n\n <TableActionsBar\n isInEditMode={isTableInEditMode}\n numPlayers={currentPlayers.length}\n onDeleteTable={onDeleteTable}\n onEditModeChange={setIsTableInEditMode}\n onJoinWaitlist={onJoinWaitlist}\n onLeaveTable={onLeaveTable}\n onPromoteWaitlistPlayer={handlePromoteWaitlistPlayer}\n onSave={handleSaveTable}\n slots={table.capacity || 0}\n tableStatus={tableStatus}\n waitlistPlayers={currentWaitlistPlayers}\n />\n </Grid>\n\n <Grid container spacing={2} sx={{ mt: 2 }}>\n <Grid size={{xs: 12, md:8}}>\n <Card sx={{ height: \"100%\" }}>\n <CardContent>\n {isTableInEditMode ? (\n <AutoResizingTextarea\n isInEditMode={isTableInEditMode}\n onChange={setCurrentDescription}\n textareaRef={textAreaRef}\n value={currentDescription}\n />\n ) : (\n <Typography sx={{ whiteSpace: \"pre-wrap\" }}>\n {currentDescription}\n </Typography>\n )}\n </CardContent>\n </Card>\n </Grid>\n\n <Grid size={{xs: 12, md:4}}>\n <DMHighlightsCard canEdit={isTableInEditMode} player={currentDungeonMaster} allTags={allTags} />\n\n <Card sx={{ height: \"100%\" }}>\n <CardHeader slotProps={{title: {variant: \"h4\"}}} title=\"Players: \"/>\n <CardContent>\n {currentPlayers.map((player) => (\n <PlayerHighlightsCard\n allTags={allTags}\n canChangeDungeonMaster={tableStatus.isOwner || tableStatus.isDM}\n canEdit={isTableInEditMode}\n handleAssignToDungeonMaster={handleAssignToDungeonMaster}\n key={player.id}\n player={player}\n removeFromTable={handleRemovePlayerFromTable}\n />\n ))}\n </CardContent>\n </Card>\n </Grid>\n </Grid>\n </Grid>\n </Card>\n );\n}\n\nconst renderTags = function (\n tags: number[] | undefined,\n allTags: Tag[] | undefined\n): JSX.Element {\n if (!tags || !allTags) {\n return <></>;\n }\n return (\n <Grid container spacing={1} sx={{ pb: 1.5 }}>\n {tags.map((tagId) => {\n const tag = allTags.find((potentialTag) => tagId === potentialTag.id);\n return tag ? generateTagsDisplay(tag) : <></>;\n })}\n </Grid>\n );\n};\n\nconst renderEditableTags = function (\n selectedTags: Tag[],\n allTags: Tag[],\n onToggleTag: (tagId: number) => void\n): JSX.Element {\n return (\n <Grid size={{ xs: 12 }} sx={{ pb: 1.5 }}>\n <TagEditor\n title=\"Table Tags\"\n possibleTags={allTags.filter((tag) => tag.appliesTo?.tables)}\n selectedTags={selectedTags}\n onToggleTag={onToggleTag}\n />\n </Grid>\n );\n};\n\nexport default TablePageLayout;\n"]}
1
+ {"version":3,"sources":["../src/components/TablePage/GameTableProvider/GameTableContext.tsx","../src/components/TablePage/ModalProvider/ModalContext.ts","../src/components/shared/Modal/index.tsx","../src/components/TablePage/ModalProvider/ModalProvider.tsx","../src/components/TablePage/NextGameLabel.tsx","../src/components/shared/Chip.tsx","../src/components/shared/TagComponents.tsx","../src/components/TablePage/players/PlayerHighlightsCard.tsx","../src/components/TablePage/TableActionsBar.tsx","../src/components/shared/AutoResizingTextarea.tsx","../src/components/shared/TagEditor.tsx","../src/components/TablePage/TablePageLayout.tsx"],"names":["_a","jsx","jsxs","Fragment","Typography","Button","CardHeader","Image","Grid","useEffect","useState","Card","CardContent","useRef","useMemo"],"mappings":"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","file":"TablePage.mjs","sourcesContent":["\"use client\"\nimport React from \"react\";\nimport type { TableFormat } from \"@/types/table\";\n\ninterface IGameTableContextType {\n table: TableFormat;\n setTable: React.Dispatch<React.SetStateAction<TableFormat | null>>;\n}\n\ninterface IGameTableProviderProps {\n children: React.ReactNode;\n}\n\nconst GameTableContext = React.createContext<IGameTableContextType | undefined>(undefined);\n\nexport function GameTableProvider(props: IGameTableProviderProps) {\n return <>{props.children}</>;\n}\n\nexport function useGameTableContext(): IGameTableContextType {\n const context = React.useContext(GameTableContext);\n\n if (context) {\n return context;\n }\n\n throw new Error('useGameTableContext is deprecated in the package build. Pass table data through props instead.');\n}\n","\"use client\"\r\nimport { createContext, ReactNode, useContext } from \"react\";\r\n\r\ntype ModalContextType = {\r\n showModal: (content: ReactNode) => void;\r\n hideModal: () => void;\r\n}\r\n\r\nexport const ModalContext = createContext<ModalContextType>({\r\n showModal: (content: ReactNode) => {},\r\n hideModal: () => {},\r\n});\r\n\r\nexport const useModal = () => useContext(ModalContext);","\"use client\"\r\nimport React, { useEffect, useRef } from \"react\";\r\nimport \"./style.css\";\r\n\r\ninterface IModalProps {\r\n onClose: () => void;\r\n children: React.ReactNode;\r\n}\r\n\r\nconst Modal: React.FC<IModalProps> = ({ onClose, children }) => {\r\n const modalRef = useRef<HTMLDivElement>(null);\r\n const previouslyFocusedElement = useRef<HTMLElement | null>(null);\r\n\r\n useEffect(() => {\r\n if (children) {\r\n previouslyFocusedElement.current = document.activeElement as HTMLElement;\r\n modalRef.current?.focus();\r\n }\r\n return () => {\r\n previouslyFocusedElement.current?.focus();\r\n }\r\n }, [children]);\r\n\r\n const handleOnClose = () => {\r\n onClose();\r\n };\r\n\r\n const handleKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\r\n if (e.key !== 'Tab') return;\r\n\r\n const focusableElements = modalRef.current?.querySelectorAll<HTMLElement>(\r\n 'button, [tabindex]:not([tabindex=\"-1\"])'\r\n );\r\n\r\n if (!focusableElements || focusableElements.length === 0) return;\r\n\r\n const first = focusableElements[0];\r\n const last = focusableElements[focusableElements.length - 1];\r\n\r\n if (e.shiftKey) {\r\n // shift + tab\r\n if (document.activeElement === first) {\r\n e.preventDefault();\r\n last.focus();\r\n }\r\n } else {\r\n // tab\r\n if (document.activeElement === last) {\r\n e.preventDefault();\r\n first.focus();\r\n }\r\n }\r\n };\r\n\r\n return (\r\n <div\r\n className=\"modal-overlay\"\r\n onKeyDown={handleKeyDown}\r\n ref={modalRef}\r\n role=\"dialog\"\r\n tabIndex={-1}\r\n >\r\n <div className=\"modal-container\">\r\n <div className=\"modal-control-strip\">\r\n <button onClick={handleOnClose}>X</button>\r\n </div>\r\n <div className=\"modal-content\">\r\n {children}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default Modal;\r\n","\"use client\";\n\nimport React, { ReactNode, useState } from \"react\";\r\nimport { ModalContext } from './ModalContext';\r\nimport Modal from \"@/components/shared/Modal\";\r\n\r\ntype ModalProviderProps = {\r\n children: ReactNode;\r\n}\r\n\r\nexport const ModalProvider = ({ children }: ModalProviderProps) => {\r\n const [modalContent, setModalContent] = useState<null | ReactNode>(null);\r\n\r\n const showModal = (content: ReactNode) => setModalContent(content);\r\n const hideModal = () => setModalContent(null);\r\n\r\n return (\r\n <ModalContext.Provider value={{ showModal, hideModal }}>\r\n {children}\r\n {modalContent && (\r\n <Modal onClose={hideModal}>\r\n {modalContent}\r\n </Modal>\r\n )}\r\n </ModalContext.Provider>\r\n );\r\n}\r\n\r\nexport default ModalProvider;","import React from 'react';\r\nimport { Typography } from '@mui/material';\r\n\r\ninterface NextGameCountdownProps {\r\n nextGameTime: string | Date;\r\n}\r\n\r\nconst NextGameLabel: React.FC<NextGameCountdownProps> = ({ nextGameTime }) => {\r\n const date = typeof nextGameTime === 'string' ? new Date(nextGameTime) : nextGameTime;\r\n \r\n return (\r\n <Typography variant=\"caption\" sx={{ display: 'block', mb: 1, color: 'primary.main', fontWeight: 'bold' }}>\r\n Next Game: {date.toLocaleString()}\r\n </Typography>\r\n );\r\n};\r\n\r\nexport default NextGameLabel;\r\n","import React from \"react\";\r\nimport {Tag} from \"@/types/tag\";\r\n\r\nexport default function Chip({ tag, removeCallback }: { tag: Tag, removeCallback?: (tagId: number) => void }) {\r\n const color = tag.color ?? \"#bfbcbb\";\r\n return (\r\n <>\r\n <span\r\n key={tag.id}\r\n className=\"inline-block text-sm px-3 py-1 rounded-full border-2 font-outlined text-white m-0.5 font-stretch-105% font-sans\"\r\n style={{\r\n borderColor: `color-mix(in srgb, ${color}, black 50%)`,\r\n background: `linear-gradient(160deg, color-mix(in srgb, ${color}, white 10%) 0%, color-mix(in srgb, ${color}, black 60%) 100%)`,\r\n textShadow: \"black 1.5px 1px 1.5px\",\r\n filter: `drop-shadow(2px 2px 1.5px color-mix(in srgb, ${color}, black 80%))`\r\n }}\r\n >\r\n {tag.label}\r\n {removeCallback && (\r\n <button\r\n type=\"button\"\r\n onClick={() => removeCallback(tag.id)}\r\n className=\"ml-2 text-white hover:text-red-700 focus:outline-none pl-0.5 pr-1 cursor-pointer hover:bg-white rounded-full\"\r\n style={{\r\n textShadow: \"black 1px 1px 1px\"\r\n }}\r\n >\r\n X\r\n </button>\r\n )}\r\n </span>\r\n </>\r\n )\r\n\r\n}","\"use client\";\r\n\r\nimport React from \"react\";\r\nimport type { Tag } from \"@/types/tag\";\r\nimport Chip from \"@/components/shared/Chip\";\r\n\r\nexport function generateTagsDisplay(tag: Tag) {\r\n return (\r\n <Chip tag={tag} key={tag.id} />\r\n )\r\n}\r\n\r\nexport function renderTagsFromIds(ids: number[] | undefined, legalTags: Tag[]) {\r\n if (!ids || !legalTags || legalTags.length === 0) { return ( <></>) }\r\n const validTags = ids\r\n .map((id) => legalTags.find((tag) => tag.id === id))\r\n .filter((tag): tag is Tag => Boolean(tag));\r\n\r\n return validTags.map((tag) => generateTagsDisplay(tag));\r\n}\r\n","\"use client\";\n\nimport Image from \"next/image\";\nimport Button from \"@mui/material/Button\";\nimport {Card, CardContent, CardHeader, Typography} from \"@mui/material\";\nimport Grid from \"@mui/material/Grid\";\nimport {renderTagsFromIds} from \"@/components/shared/TagComponents\";\nimport type { Player } from \"@/types/player\";\nimport type { Tag } from \"@/types/tag\";\n\nexport type PlayerHighlightsCardProps = {\n addToTable?: (player: Player) => void;\n allTags: Tag[];\n canChangeDungeonMaster: boolean;\n canEdit: boolean;\n handleAssignToDungeonMaster: (player: Player) => void;\n isWaitList?: boolean;\n player: Player;\n removeFromTable: (player: Player) => void;\n}\n\nexport const PlayerHighlightsCard = function(props: PlayerHighlightsCardProps) {\n const {\n allTags,\n canChangeDungeonMaster,\n canEdit,\n handleAssignToDungeonMaster,\n isWaitList,\n player,\n removeFromTable\n } = props;\n\n return (\n <Card elevation={3} sx={{ backgroundColor: canEdit ? \"#fffbea\" : \"#f5f9fa\", marginBottom:\"6px\" }}>\n <CardContent>\n <Grid container spacing={2} direction=\"column\">\n <Grid container direction=\"row\">\n <Grid>\n <Image alt={player.username + \"'s profile pic\"} height={64} src={player.miniPic || \"\"} width={64} />\n </Grid>\n <Grid>\n <Typography variant=\"h5\">{player.username}</Typography>\n </Grid>\n </Grid>\n <Grid>{renderTagsFromIds(player.tags, allTags)}</Grid>\n </Grid>\n {canEdit && (\n <Grid>\n <Button onClick={() => removeFromTable(player)}>\n { isWaitList ? <p>Deny Player</p> : <p>Remove Player</p> }\n </Button>\n {canChangeDungeonMaster && (\n <Button onClick={() => {\n handleAssignToDungeonMaster(player);\n removeFromTable(player);\n }}>\n <p>Assign to DungeonMaster</p>\n </Button>\n )}\n </Grid>\n )}\n </CardContent>\n </Card>\n )\n}\n\nexport const DMHighlightsCard = function({canEdit, player, allTags}:{canEdit: boolean, player: Player, allTags:Tag[]}) {\n return (\n <Card elevation={3} sx={{ backgroundColor: \"#f5f9fa\", marginBottom:\"6px\" }}>\n <CardHeader slotProps={{title: { variant: \"h4\"}}} title=\"Game Master\"/>\n <CardContent sx={{ backgroundColor: canEdit ? '#fffbea' : 'inherit' }}>\n <Grid container spacing={2} direction=\"column\">\n <Grid>\n <Typography variant=\"h5\">{player.username}</Typography>\n </Grid>\n <Grid container direction=\"row\">\n <Grid>\n <Image alt={player.username + \"'s profile pic\"} height={120} src={player.imageUrl ? player.imageUrl : \"\"} width={256} />\n </Grid>\n <Grid>{renderTagsFromIds(player.tags, allTags)}</Grid>\n <Typography>{player.description}</Typography>\n </Grid>\n </Grid>\n </CardContent>\n </Card>\n )\n}\n","\"use client\";\n\nimport type { ReactNode } from \"react\";\nimport Image from \"next/image\";\nimport Button from \"@mui/material/Button\";\nimport CardHeader from \"@mui/material/CardHeader\";\nimport { Grid, Typography } from \"@mui/material\";\nimport DeleteIcon from \"@mui/icons-material/Delete\";\nimport EditIcon from \"@mui/icons-material/Edit\";\nimport ListIcon from \"@mui/icons-material/List\";\nimport SaveIcon from \"@mui/icons-material/Save\";\nimport { useModal } from \"@/components/TablePage/ModalProvider/ModalContext\";\nimport type { Player } from \"@/types/player\";\nimport type { TableStatus } from \"@/components/TablePage/types\";\n\nexport interface TableActionProps {\n isInEditMode: boolean;\n numPlayers: number;\n onDeleteTable?: () => void | Promise<void>;\n onEditModeChange: (nextValue: boolean) => void;\n onJoinWaitlist?: () => void | Promise<void>;\n onLeaveTable?: () => void | Promise<void>;\n onPromoteWaitlistPlayer?: (playerId: number) => void;\n onSave: () => void;\n slots: number;\n tableStatus: TableStatus;\n waitlistPlayers: Player[];\n}\n\nexport default function TableActionsBar(props: TableActionProps) {\n const { hideModal, showModal } = useModal();\n const {\n isInEditMode,\n numPlayers,\n onDeleteTable,\n onEditModeChange,\n onJoinWaitlist,\n onLeaveTable,\n onPromoteWaitlistPlayer,\n onSave,\n slots,\n tableStatus,\n waitlistPlayers,\n } = props;\n const {isOwner, isPlayer, isDM, onWaitlist} = tableStatus;\n\n const canEditTable = isOwner && !isInEditMode;\n const canSaveTable = isOwner && isInEditMode;\n const canViewWaitlist = isOwner || isDM || waitlistPlayers.length > 0;\n\n const renderPlayerWaitlistModalContent = (canMovePlayersToTable?: boolean): ReactNode => {\n if (waitlistPlayers.length === 0) {\n return <p>Waitlist is empty!</p>;\n }\n\n return (\n <div className=\"flex flex-col items-center\">\n <CardHeader slotProps={{title: {variant: \"h4\"}}} title=\"Waitlist Players: \"/>\n <ul className=\"gap-8\">\n {waitlistPlayers.map((player) => (\n <li\n className={`${canMovePlayersToTable ? 'bg-amber-100 cursor-pointer' : 'bg-gray-200'} mb-8 flex flex-row flex-start space-between justify-center items-center gap-3 p-2 rounded`}\n key={player.id}\n onClick={() => canMovePlayersToTable ? onPromoteWaitlistPlayer?.(player.id) : undefined}\n tabIndex={0}\n >\n <Image\n alt={player.username + \"'s profile pic\"}\n height={64}\n src={player.miniPic || \"\"}\n width={64}\n />\n <div>{player.username}</div>\n </li>\n ))}\n </ul>\n <button onClick={() => hideModal()}>close modal</button>\n </div>\n )\n }\n\n return (\n <Grid container direction=\"column\" spacing={1}>\n <Grid container direction=\"row\">\n <Typography color=\"white\" sx={{ textShadow:'4px 4px 6px rgba(0, 0, 0, 0.5)' }}>\n Players: {numPlayers} / {slots}\n </Typography>\n </Grid>\n\n <Grid container direction=\"row\">\n {!isOwner && !isPlayer && !isDM && !onWaitlist && (\n <Button onClick={() => onJoinWaitlist?.()} sx={buttonStyle}>\n Join Waitlist\n </Button>\n )}\n\n {!isOwner && (isPlayer || onWaitlist) && (\n <Button onClick={() => onLeaveTable?.()} sx={buttonStyle}>\n {onWaitlist ? \"Leave Waitlist\" : \"Leave Table\"}\n </Button>\n )}\n\n { canEditTable ? (\n <>\n <Button onClick={() => onEditModeChange(true)} sx={buttonStyle} endIcon={<EditIcon/>}>\n Edit\n </Button>\n {canViewWaitlist ? (\n <Button\n endIcon={<ListIcon />}\n onClick={() => showModal(renderPlayerWaitlistModalContent(false))}\n sx={buttonStyle}\n >\n View Waitlist\n </Button>\n ) : null}\n </>\n ) : canSaveTable ? (\n <>\n <Button onClick={onSave} sx={buttonStyle} endIcon={<SaveIcon/>}>\n Save\n </Button>\n <Button onClick={() => onEditModeChange(false)} sx={buttonStyle}>\n Cancel\n </Button>\n <Button\n endIcon={<ListIcon />}\n onClick={() => showModal(renderPlayerWaitlistModalContent(true))}\n sx={buttonStyle}\n >\n Edit Waitlist\n </Button>\n </>\n ) : null}\n\n { isOwner && (\n <Button onClick={() => onDeleteTable?.()} sx={buttonStyle} endIcon={<DeleteIcon/>}>\n Delete Table\n </Button>\n )}\n </Grid>\n </Grid>\n )\n}\n\nconst buttonStyle = {\n marginLeft: \"3px\",\n backgroundColor:\"blue\",\n color:\"white\",\n borderRadius:\"5px\",\n};\n","\"use client\"\r\n\r\nimport React, {Dispatch, SetStateAction, useEffect} from 'react';\r\n\r\ninterface IAutoResizingTextareaProps {\r\n isInEditMode: boolean;\r\n onChange: Dispatch<SetStateAction<string>>;\r\n textareaRef: React.RefObject<HTMLTextAreaElement | null>;\r\n value: string;\r\n}\r\n\r\nconst AutoResizingTextarea: React.FC<IAutoResizingTextareaProps> = (props: IAutoResizingTextareaProps) => {\r\n const { isInEditMode, onChange, textareaRef, value } = props;\r\n\r\n useEffect(() => {\r\n if (isInEditMode && textareaRef.current) {\r\n const textarea = textareaRef.current;\r\n\r\n textarea.style.height = 'auto';\r\n textarea.style.height = `${textarea.scrollHeight}px`;\r\n }\r\n }, [isInEditMode, textareaRef, value]); // Run effect when entering edit mode or value changes\r\n\r\n return (\r\n <textarea\r\n ref={textareaRef}\r\n value={value}\r\n onChange={(e) => onChange(e.target.value)}\r\n style={{\r\n backgroundColor: '#fffbea',\r\n overflow: 'hidden',\r\n resize: 'none',\r\n width: '100%'\r\n }}\r\n />\r\n );\r\n}\r\n\r\nexport default AutoResizingTextarea;\r\n","\"use client\";\r\n\r\nimport React, { useMemo, useState } from \"react\";\r\nimport Autocomplete from \"@mui/material/Autocomplete\";\r\nimport Card from \"@mui/material/Card\";\r\nimport CardContent from \"@mui/material/CardContent\";\r\nimport CardHeader from \"@mui/material/CardHeader\";\r\nimport Grid from \"@mui/material/Grid\";\r\nimport Popper, { PopperProps } from \"@mui/material/Popper\";\r\nimport TextField from \"@mui/material/TextField\";\r\nimport type { Tag } from \"@/types/tag\";\r\nimport Chip from \"@/components/shared/Chip\";\r\n\r\nexport interface TagEditorProps {\r\n title?: string;\r\n selectedTags: Tag[];\r\n possibleTags: Tag[];\r\n onToggleTag: (id: number) => void;\r\n}\r\n\r\nexport function TagEditor({\r\n title = \"Tags\",\r\n selectedTags,\r\n possibleTags,\r\n onToggleTag,\r\n}: TagEditorProps) {\r\n const [inputValue, setInputValue] = useState(\"\");\r\n const selectedIds = useMemo(() => selectedTags.map((tag) => tag.id), [selectedTags]);\r\n\r\n const options = useMemo(\r\n () => possibleTags.map((tag) => ({ value: tag.id, label: tag.label })),\r\n [possibleTags]\r\n );\r\n\r\n return (\r\n <Grid container>\r\n <Grid size={{ xs: 12 }}>\r\n <Card>\r\n <CardHeader\r\n title={title}\r\n style={{\r\n background: \"linear-gradient(135deg, rgba(25, 118, 210, 0.8), rgba(25, 118, 210, 1))\",\r\n color: \"#FFFFFF\",\r\n fontSize: \"1.5rem\",\r\n textShadow: \"0px 3px 6px rgba(0, 0, 0, 0.5)\",\r\n }}\r\n />\r\n <CardContent>\r\n <div className=\"mt-2 flex flex-wrap gap-2\">\r\n {selectedTags.map((tag) => (\r\n <Chip\r\n key={tag.id}\r\n tag={tag}\r\n removeCallback={() => onToggleTag(tag.id)}\r\n />\r\n ))}\r\n </div>\r\n <Grid container spacing={3}>\r\n <Grid sx={{ marginTop: 3, width: \"100%\" }}>\r\n <Autocomplete\r\n key={selectedIds.join(\"-\")}\r\n options={options}\r\n filterOptions={(availableOptions, state) =>\r\n availableOptions\r\n .filter(\r\n (option) =>\r\n !selectedIds.includes(option.value) &&\r\n option.label.toLowerCase().includes(state.inputValue.toLowerCase())\r\n )\r\n .slice(0, 3)\r\n }\r\n value={null}\r\n inputValue={inputValue}\r\n onInputChange={(event, newInputValue) => {\r\n if (event && event.type === \"change\") {\r\n setInputValue(newInputValue);\r\n }\r\n }}\r\n onChange={(event, newValue) => {\r\n if (newValue) {\r\n onToggleTag(newValue.value);\r\n }\r\n setInputValue(\"\");\r\n }}\r\n slots={{ popper: CustomPopper }}\r\n renderInput={(params) => <TextField {...params} label=\"Select Tags\" />}\r\n />\r\n </Grid>\r\n </Grid>\r\n </CardContent>\r\n </Card>\r\n </Grid>\r\n </Grid>\r\n );\r\n}\r\n\r\nconst CustomPopper = (props: PopperProps) => {\r\n return (\r\n <Popper\r\n {...props}\r\n modifiers={[\r\n {\r\n name: \"preventOverflow\",\r\n options: { boundary: \"viewport\" },\r\n },\r\n {\r\n name: \"offset\",\r\n options: { offset: [0, -10] },\r\n },\r\n ]}\r\n placement=\"top-start\"\r\n />\r\n );\r\n};\r\n","\"use client\";\n\nimport { JSX, useEffect, useMemo, useRef, useState } from \"react\";\nimport { Box, Card, CardContent, CardHeader, Typography } from \"@mui/material\";\nimport Grid from \"@mui/material/Grid\";\nimport AutoResizingTextarea from \"@/components/shared/AutoResizingTextarea\";\nimport { TagEditor, generateTagsDisplay } from \"@/components/shared\";\nimport { DMHighlightsCard, PlayerHighlightsCard } from \"@/components/TablePage/players/PlayerHighlightsCard\";\nimport TableActionsBar from \"@/components/TablePage/TableActionsBar\";\nimport type { Player } from \"@/types/player\";\nimport type { TableRecord } from \"@/types/tables\";\nimport type { Tag } from \"@/types/tag\";\nimport type { TablePageLayoutProps } from \"@/components/TablePage/types\";\n\nexport function TablePageLayout(props: TablePageLayoutProps) {\n const { allTags, dungeonMaster, onDeleteTable, onJoinWaitlist, onLeaveTable, onSaveDraft, players, table, tableStatus, waitlistPlayers } = props;\n const textAreaRef = useRef<HTMLTextAreaElement>(null);\n const [isTableInEditMode, setIsTableInEditMode] = useState(false);\n\n const [currentDescription, setCurrentDescription] = useState(table.description);\n const [currentDungeonMaster, setCurrentDungeonMaster] = useState(dungeonMaster);\n const [currentPlayers, setCurrentPlayers] = useState(players);\n const [currentShortDescription, setCurrentShortDescription] = useState(table.shortDescription);\n const [currentTitle, setCurrentTitle] = useState(table.title);\n const [currentWaitlistPlayers, setCurrentWaitlistPlayers] = useState(waitlistPlayers);\n const [currentTagIds, setCurrentTagIds] = useState<number[]>(table.tags ?? []);\n\n useEffect(() => {\n setCurrentDescription(table.description);\n setCurrentDungeonMaster(dungeonMaster);\n setCurrentPlayers(players);\n setCurrentShortDescription(table.shortDescription);\n setCurrentTitle(table.title);\n setCurrentWaitlistPlayers(waitlistPlayers);\n setCurrentTagIds(table.tags ?? []);\n }, [dungeonMaster, players, table, waitlistPlayers]);\n\n const currentTags = useMemo(\n () => allTags.filter((tag) => currentTagIds.includes(tag.id)),\n [allTags, currentTagIds]\n );\n\n const handleAssignToDungeonMaster = (newDungeonMaster: Player) => {\n setCurrentDungeonMaster(newDungeonMaster);\n };\n\n const handleRemovePlayerFromTable = (playerToRemove: Player): void => {\n setCurrentPlayers((prevState) => prevState.filter((player) => player.id !== playerToRemove.id));\n };\n\n const handlePromoteWaitlistPlayer = (playerIdToPromote: number) => {\n setCurrentWaitlistPlayers((prevWaitlist) => {\n const foundPlayer = prevWaitlist.find((player) => player.id === playerIdToPromote);\n if (!foundPlayer) {\n return prevWaitlist;\n }\n\n setCurrentPlayers((prevPlayers) => [...prevPlayers, foundPlayer]);\n return prevWaitlist.filter((player) => player.id !== playerIdToPromote);\n });\n };\n\n const handleToggleTag = (tagId: number) => {\n setCurrentTagIds((prevState) =>\n prevState.includes(tagId)\n ? prevState.filter((id) => id !== tagId)\n : [...prevState, tagId]\n );\n };\n\n const handleSaveTable = () => {\n const nextDraft: TableRecord = {\n ...table,\n description: currentDescription,\n dungeonMaster: String(currentDungeonMaster.id),\n players: currentPlayers.map((player) => player.id),\n shortDescription: currentShortDescription,\n tags: currentTagIds,\n title: currentTitle,\n waitlist: currentWaitlistPlayers.map((player) => player.id),\n };\n\n void onSaveDraft?.(nextDraft);\n setIsTableInEditMode(false);\n };\n\n return (\n <Card\n sx={{\n backgroundColor: isTableInEditMode ? \"lightsalmon\" : \"white\",\n borderRadius: \"5%\",\n p: 2,\n boxShadow: \"0px 8px 15px rgba(25, 118, 210, 0.3)\",\n }}\n >\n <Grid container direction=\"column\">\n <Grid\n container\n direction=\"column\"\n spacing={1}\n sx={{\n px: 2,\n py: 1.5,\n borderRadius: 2,\n background: \"linear-gradient(135deg, rgba(25,118,210,0.8), rgba(25,118,210,1))\",\n textShadow:'4px 4px 6px rgba(0, 0, 0, 0.5)'\n }}\n >\n <Box>\n {isTableInEditMode ? (\n <input\n onChange={(e) => setCurrentTitle(e.target.value)}\n style={{ backgroundColor: '#fffbea' }}\n tabIndex={0}\n type=\"text\"\n value={currentTitle}\n />\n ) : (\n <CardHeader\n title={currentTitle}\n sx={{\n p: 0,\n \"& .MuiCardHeader-title\": {\n color: \"white\",\n fontWeight: 700,\n },\n }}\n />\n )}\n </Box>\n\n {isTableInEditMode ? (\n <input\n onChange={(e) => setCurrentShortDescription(e.target.value)}\n style={{ backgroundColor: '#fffbea' }}\n tabIndex={0}\n type=\"text\"\n value={currentShortDescription}\n />\n ) : (\n <Typography sx={{ color: \"white\", opacity: 0.95 }}>\n {currentShortDescription}\n </Typography>\n )}\n\n <Grid container>\n {isTableInEditMode\n ? renderEditableTags(currentTags, allTags, handleToggleTag)\n : renderTags(currentTagIds, allTags)}\n </Grid>\n\n <TableActionsBar\n isInEditMode={isTableInEditMode}\n numPlayers={currentPlayers.length}\n onDeleteTable={onDeleteTable}\n onEditModeChange={setIsTableInEditMode}\n onJoinWaitlist={onJoinWaitlist}\n onLeaveTable={onLeaveTable}\n onPromoteWaitlistPlayer={handlePromoteWaitlistPlayer}\n onSave={handleSaveTable}\n slots={table.capacity || 0}\n tableStatus={tableStatus}\n waitlistPlayers={currentWaitlistPlayers}\n />\n </Grid>\n\n <Grid container spacing={2} sx={{ mt: 2 }}>\n <Grid size={{xs: 12, md:8}}>\n <Card sx={{ height: \"100%\" }}>\n <CardContent>\n {isTableInEditMode ? (\n <AutoResizingTextarea\n isInEditMode={isTableInEditMode}\n onChange={setCurrentDescription}\n textareaRef={textAreaRef}\n value={currentDescription}\n />\n ) : (\n <Typography sx={{ whiteSpace: \"pre-wrap\" }}>\n {currentDescription}\n </Typography>\n )}\n </CardContent>\n </Card>\n </Grid>\n\n <Grid size={{xs: 12, md:4}}>\n <DMHighlightsCard canEdit={isTableInEditMode} player={currentDungeonMaster} allTags={allTags} />\n\n <Card sx={{ height: \"100%\" }}>\n <CardHeader slotProps={{title: {variant: \"h4\"}}} title=\"Players: \"/>\n <CardContent>\n {currentPlayers.map((player) => (\n <PlayerHighlightsCard\n allTags={allTags}\n canChangeDungeonMaster={tableStatus.isOwner || tableStatus.isDM}\n canEdit={isTableInEditMode}\n handleAssignToDungeonMaster={handleAssignToDungeonMaster}\n key={player.id}\n player={player}\n removeFromTable={handleRemovePlayerFromTable}\n />\n ))}\n </CardContent>\n </Card>\n </Grid>\n </Grid>\n </Grid>\n </Card>\n );\n}\n\nconst renderTags = function (\n tags: number[] | undefined,\n allTags: Tag[] | undefined\n): JSX.Element {\n if (!tags || !allTags) {\n return <></>;\n }\n return (\n <Grid container spacing={1} sx={{ pb: 1.5 }}>\n {tags.map((tagId) => {\n const tag = allTags.find((potentialTag) => tagId === potentialTag.id);\n return tag ? generateTagsDisplay(tag) : <></>;\n })}\n </Grid>\n );\n};\n\nconst renderEditableTags = function (\n selectedTags: Tag[],\n allTags: Tag[],\n onToggleTag: (tagId: number) => void\n): JSX.Element {\n return (\n <Grid size={{ xs: 12 }} sx={{ pb: 1.5 }}>\n <TagEditor\n title=\"Table Tags\"\n possibleTags={allTags.filter((tag) => tag.appliesTo?.tables)}\n selectedTags={selectedTags}\n onToggleTag={onToggleTag}\n />\n </Grid>\n );\n};\n\nexport default TablePageLayout;\n"]}