blog/source/files/magicbroad/assets/index.016e8a17.js.map
2022-06-09 09:09:09 +08:00

1 line
31 KiB
Text

{"version":3,"file":"index.016e8a17.js","sources":["../../node_modules/@suid/material/IconButton/iconButtonClasses.js","../../node_modules/@suid/material/IconButton/IconButton.jsx","../../node_modules/@suid/icons-material/Close.jsx","../../node_modules/@suid/icons-material/Person.jsx","../../node_modules/@suid/icons-material/Link.jsx","../../node_modules/@suid/icons-material/LinkOff.jsx","../../src/pages/Room/index.tsx"],"sourcesContent":["import { generateUtilityClass, generateUtilityClasses } from \"@suid/base\";\nexport function getIconButtonUtilityClass(slot) {\n return generateUtilityClass(\"MuiIconButton\", slot);\n}\nconst iconButtonClasses = generateUtilityClasses(\"MuiIconButton\", [\n \"root\",\n \"disabled\",\n \"colorInherit\",\n \"colorPrimary\",\n \"colorSecondary\",\n \"edgeStart\",\n \"edgeEnd\",\n \"sizeSmall\",\n \"sizeMedium\",\n \"sizeLarge\",\n]);\nexport default iconButtonClasses;\n","import ButtonBase from \"../ButtonBase\";\nimport styled from \"../styles/styled\";\nimport capitalize from \"../utils/capitalize\";\nimport iconButtonClasses, { getIconButtonUtilityClass, } from \"./iconButtonClasses\";\nimport createComponentFactory from \"@suid/base/createComponentFactory\";\nimport { alpha } from \"@suid/system\";\nimport clsx from \"clsx\";\nconst $ = createComponentFactory()({\n name: \"MuiIconButton\",\n selfPropNames: [\n \"children\",\n \"classes\",\n \"color\",\n \"disableFocusRipple\",\n \"disabled\",\n \"edge\",\n \"size\",\n ],\n propDefaults: ({ set }) => set({\n edge: false,\n color: \"default\",\n disabled: false,\n disableFocusRipple: false,\n size: \"medium\",\n }),\n utilityClass: getIconButtonUtilityClass,\n slotClasses: (ownerState) => ({\n root: [\n \"root\",\n ownerState.disabled && \"disabled\",\n ownerState.color !== \"default\" && `color${capitalize(ownerState.color)}`,\n ownerState.edge && `edge${capitalize(ownerState.edge)}`,\n `size${capitalize(ownerState.size)}`,\n ],\n }),\n});\nconst IconButtonRoot = styled(ButtonBase, {\n name: \"MuiIconButton\",\n slot: \"Root\",\n overridesResolver: (props, styles) => {\n const { ownerState } = props;\n return [\n styles.root,\n ownerState.color !== \"default\" &&\n styles[`color${capitalize(ownerState.color)}`],\n ownerState.edge && styles[`edge${capitalize(ownerState.edge)}`],\n styles[`size${capitalize(ownerState.size)}`],\n ];\n },\n})(({ theme, ownerState }) => ({\n textAlign: \"center\",\n flex: \"0 0 auto\",\n fontSize: theme.typography.pxToRem(24),\n padding: 8,\n borderRadius: \"50%\",\n overflow: \"visible\",\n color: theme.palette.action.active,\n transition: theme.transitions.create(\"background-color\", {\n duration: theme.transitions.duration.shortest,\n }),\n ...(!ownerState.disableRipple && {\n \"&:hover\": {\n backgroundColor: alpha(theme.palette.action.active, theme.palette.action.hoverOpacity),\n // Reset on touch devices, it doesn't add specificity\n \"@media (hover: none)\": {\n backgroundColor: \"transparent\",\n },\n },\n }),\n ...(ownerState.edge === \"start\" && {\n marginLeft: ownerState.size === \"small\" ? -3 : -12,\n }),\n ...(ownerState.edge === \"end\" && {\n marginRight: ownerState.size === \"small\" ? -3 : -12,\n }),\n}), ({ theme, ownerState }) => ({\n ...(ownerState.color === \"inherit\" && {\n color: \"inherit\",\n }),\n ...(ownerState.color !== \"inherit\" &&\n ownerState.color !== \"default\" && {\n color: theme.palette[ownerState.color].main,\n ...(!ownerState.disableRipple && {\n \"&:hover\": {\n backgroundColor: alpha(theme.palette[ownerState.color].main, theme.palette.action.hoverOpacity),\n // Reset on touch devices, it doesn't add specificity\n \"@media (hover: none)\": {\n backgroundColor: \"transparent\",\n },\n },\n }),\n }),\n ...(ownerState.size === \"small\" && {\n padding: 5,\n fontSize: theme.typography.pxToRem(18),\n }),\n ...(ownerState.size === \"large\" && {\n padding: 12,\n fontSize: theme.typography.pxToRem(28),\n }),\n [`&.${iconButtonClasses.disabled}`]: {\n backgroundColor: \"transparent\",\n color: theme.palette.action.disabled,\n },\n}));\n/**\n * Refer to the [Icons](https://mui.com/components/icons/) section of the documentation\n * regarding the available icon options.\n *\n * Demos:\n *\n * - [Buttons](https://mui.com/components/buttons/)\n *\n * API:\n *\n * - [IconButton API](https://mui.com/api/icon-button/)\n * - inherits [ButtonBase API](https://mui.com/api/button-base/)\n */\nconst IconButton = $.component(function IconButton({ allProps, classes, otherProps, props, }) {\n return (<IconButtonRoot className={clsx(classes.root, otherProps.className)} centerRipple focusRipple={!props.disableFocusRipple} disabled={props.disabled} ownerState={allProps} {...otherProps}>\n {props.children}\n </IconButtonRoot>);\n});\nexport default IconButton;\n","import $ from \"./utils/createSvgIcon\";\n\nexport default $(\n () => (\n <>\n <path d=\"M0 0h24v24H0z\" fill=\"none\" />\n <path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\" />\n </>\n ),\n \"Close\"\n);\n","import $ from \"./utils/createSvgIcon\";\n\nexport default $(\n () => (\n <>\n <path d=\"M0 0h24v24H0z\" fill=\"none\" />\n <path d=\"M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z\" />\n </>\n ),\n \"Person\"\n);\n","import $ from \"./utils/createSvgIcon\";\n\nexport default $(\n () => (\n <>\n <path d=\"M0 0h24v24H0z\" fill=\"none\" />\n <path d=\"M3.9 12c0-1.71 1.39-3.1 3.1-3.1h4V7H7c-2.76 0-5 2.24-5 5s2.24 5 5 5h4v-1.9H7c-1.71 0-3.1-1.39-3.1-3.1zM8 13h8v-2H8v2zm9-6h-4v1.9h4c1.71 0 3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4V17h4c2.76 0 5-2.24 5-5s-2.24-5-5-5z\" />\n </>\n ),\n \"Link\"\n);\n","import $ from \"./utils/createSvgIcon\";\n\nexport default $(\n () => (\n <>\n <path d=\"M17 7h-4v1.9h4c1.71 0 3.1 1.39 3.1 3.1 0 1.43-.98 2.63-2.31 2.98l1.46 1.46C20.88 15.61 22 13.95 22 12c0-2.76-2.24-5-5-5zm-1 4h-2.19l2 2H16zM2 4.27l3.11 3.11C3.29 8.12 2 9.91 2 12c0 2.76 2.24 5 5 5h4v-1.9H7c-1.71 0-3.1-1.39-3.1-3.1 0-1.59 1.21-2.9 2.76-3.07L8.73 11H8v2h2.73L13 15.27V17h1.73l4.01 4L20 19.74 3.27 3 2 4.27z\" />\n <path d=\"M0 24V0\" fill=\"none\" />\n </>\n ),\n \"LinkOff\"\n);\n","import AppBar from \"@suid/material/AppBar\";\nimport Box from \"@suid/material/Box\";\nimport IconButton from \"@suid/material/IconButton\";\nimport Toolbar from \"@suid/material/Toolbar\";\nimport { useNavigate, useParams } from \"solid-app-router\";\nimport { Component, Show, createEffect, createResource, createSignal, onCleanup, onMount } from \"solid-js\";\nimport { useBroadClient } from \"../../helpers/BroadClient/solid\";\nimport CloseIcon from \"@suid/icons-material/Close\";\nimport Typography from \"@suid/material/Typography\";\nimport { Participant, Room, RoomOpts } from \"../../helpers/BroadClient\";\nimport Modal from \"@suid/material/Modal\";\nimport Card from \"@suid/material/Card\";\nimport CardContent from \"@suid/material/CardContent\";\nimport Button from \"@suid/material/Button\";\nimport List from \"@suid/material/List\";\nimport ListItem from \"@suid/material/ListItem\";\nimport DrawBroad, { ContextMenuEvent, DrawBroadController, DrawPoint, DrawTool } from \"../../widgets/DrawBroad\";\nimport PersonIcon from \"@suid/icons-material/Person\";\nimport Popover from \"@suid/material/Popover\";\nimport { Peer, Router } from \"../../helpers/mesh\";\nimport { SupabaseDatachannel } from \"../../helpers/mesh/supabase\";\nimport LinkIcon from \"@suid/icons-material/Link\";\nimport LinkOffIcon from \"@suid/icons-material/LinkOff\";\nimport { Frame, Message } from \"../../helpers/mesh/datachannel\";\n\nconst DEFAULT_DRAWING_SIZE_X = 3000;\nconst DEFAULT_DRAWING_SIZE_Y = 3000;\n\nconst PROTO_TYPE_SEND_DRAWING = 302;\n\nenum RoomStatus {\n \"Unknown\",\n \"Found\",\n \"Joined\",\n \"NotFound\",\n}\n\nconst RoomJoiningNotice: Component<{open: boolean}> = (props) => {\n return <Modal open={props.open}>\n <Card\n sx={{\n position: \"absolute\",\n top: \"50%\",\n left: \"50%\",\n transform: \"translate(-50%, -50%)\",\n maxWidth: \"650px\",\n }}>\n <CardContent sx={{textAlign: \"center\"}}>\n <Typography>Communicating with Magicbroad...</Typography>\n </CardContent>\n </Card>\n </Modal>;\n};\n\nconst RoomNotFoundDialog: Component<{open: boolean}> = (props) => {\n const navigate = useNavigate();\n\n return <Modal open={props.open}>\n <Card\n sx={{\n position: \"absolute\",\n top: \"50%\",\n left: \"50%\",\n transform: \"translate(-50%, -50%)\",\n maxWidth: \"650px\",\n }}>\n <CardContent>\n <Typography variant=\"h6\">The Room is Missing</Typography>\n <Typography>We could not found the room you want. The owner might have been deleted the room.</Typography>\n </CardContent>\n <List>\n <ListItem sx={{paddingLeft: 0, paddingRight: 0}}>\n <Button variant=\"text\" sx={{width: \"100%\", justifyContent: \"flex-end\"}} onClick={() => navigate(\"/\")}>\n <Typography sx={{marginRight: \"20px\"}} component=\"div\">Go to the Home Page</Typography>\n </Button>\n </ListItem>\n </List>\n </Card>\n </Modal>;\n};\n\ninterface ContextMenuProps {\n position: undefined | [number, number],\n onClose: (() => void),\n currentDrawingTool: DrawTool,\n onChangingDrawingTool: ((newTool: DrawTool) => void),\n}\n\nconst ContextMenu: Component<ContextMenuProps> = (props) => {\n const buildContextMenuAnchorPos = () => {\n const [left, top] = props.position as [number, number];\n return {left, top};\n };\n\n const itemSx = {cursor: \"pointer\"};\n\n return <Popover\n open={typeof props.position !== \"undefined\"}\n anchorReference=\"anchorPosition\"\n anchorPosition={buildContextMenuAnchorPos()}\n onClose={() => props.onClose()}\n >\n <List>\n <ListItem sx={itemSx} onClick={() => props.onChangingDrawingTool(DrawTool.pen)}>\n <Typography>Pen</Typography><Show when={props.currentDrawingTool === DrawTool.pen}>*</Show>\n </ListItem>\n <ListItem sx={itemSx} onClick={() => props.onChangingDrawingTool(DrawTool.erase)}>\n <Typography>Erase</Typography><Show when={props.currentDrawingTool === DrawTool.erase}>*</Show>\n </ListItem>\n <ListItem sx={itemSx} onClick={() => props.onChangingDrawingTool(DrawTool.hand)}>\n <Typography>Move</Typography><Show when={props.currentDrawingTool === DrawTool.hand}>*</Show>\n </ListItem>\n </List>\n </Popover>;\n};\n\nconst RoomPage: Component = () => {\n const params = useParams();\n const broadCli = useBroadClient();\n const navigate = useNavigate();\n const [status, setStatus] = createSignal<RoomStatus>(RoomStatus.Unknown);\n const [roomInfo, setRoomInfo] = createSignal<Room>();\n const [currentDrawingTool, setCurrentDrawingTool] = createSignal<DrawTool>(DrawTool.pen);\n const [contextMenuPos, setContextMenuPos] = createSignal<[number, number] | undefined>();\n const [gRouter, setGRouter] = createSignal<Router>();\n const drawCtl = new DrawBroadController(\"black\", 20);\n\n const strokes: Map<string, DrawPoint[]> = new Map();\n\n const [participants, participantsCtl] = createResource<Participant[]>(() => {\n const room = roomInfo();\n if (room) {\n return broadCli.getParticipants(room.id);\n }\n return [];\n });\n\n const [roomOpts, roomOptsCtl] = createResource<RoomOpts | undefined>(() => {\n const room = roomInfo();\n if (room) {\n return (broadCli.getRoomOpts(room.id)\n .then(async (opts) => {\n if (!(opts.size_x && opts.size_y)) {\n await broadCli.setRoomOpts(room.id, {size_x: DEFAULT_DRAWING_SIZE_X, size_y: DEFAULT_DRAWING_SIZE_Y});\n return await broadCli.getRoomOpts(room.id);\n } else {\n return opts;\n }\n }));\n }\n return Promise.resolve(undefined);\n });\n\n const onBroadContextMenu = (e: ContextMenuEvent) => {\n setContextMenuPos([e.pageX, e.pageY]);\n };\n\n const getStroke = (peerId: string): DrawPoint[] => {\n const stroke = strokes.get(peerId);\n if (typeof stroke === \"undefined\") {\n strokes.set(peerId, []);\n return getStroke(peerId);\n } else {\n return stroke;\n }\n };\n\n const onDataReceived = (message: Message) => {\n if (message.message.length >= 1) {\n const codeFrame = message.message[0];\n if (codeFrame.isUInt()) {\n const code = codeFrame.toUInt();\n console.log(code);\n if ((code === PROTO_TYPE_SEND_DRAWING) && message.message.length >= 5) {\n const [, xFrame, yFrame, lineWidthFrame, colorFrame] = message.message;\n const point: DrawPoint = {\n x: xFrame.toUInt(),\n y: yFrame.toUInt(),\n lineWidth: lineWidthFrame.toUInt(),\n color: colorFrame.toString(),\n };\n const stroke = getStroke(message.srcUserDeviceId);\n stroke.push(point);\n drawCtl.draw(stroke);\n } else if (code === PROTO_TYPE_SEND_DRAWING && message.message.length >= 2) {\n strokes.set(message.srcUserDeviceId, []);\n }\n }\n }\n };\n\n const onDrawing = (stroke: DrawPoint[]) => {\n const point = stroke[stroke.length-1];\n const routerg = gRouter();\n if (routerg) {\n routerg.broadcast([\n Frame.fromUInt(PROTO_TYPE_SEND_DRAWING, true),\n Frame.fromUInt(point.x, true),\n Frame.fromUInt(point.y, true),\n Frame.fromUInt(point.lineWidth, true),\n Frame.fromString(point.color, false),\n ], true);\n }\n };\n\n const onDrawingEnd = () => {\n const routerg = gRouter();\n if (routerg) {\n routerg.broadcast([\n Frame.fromUInt(PROTO_TYPE_SEND_DRAWING, true),\n Frame.zero(0),\n ], true);\n }\n };\n\n const connectMesh = (roomId: string) => {\n const alterChan = SupabaseDatachannel.ofRoom(broadCli.supabase, roomId, broadCli.getUserDeviceId());\n const router = new Router(broadCli.getUserDeviceId(), alterChan, roomId);\n router.bus.on(\"addpeer\", (peer: Peer) => {\n console.log(\"addpeer\", peer);\n });\n router.bus.on(\"removepeer\", (peer: Peer) => {\n peer.disconnect();\n });\n router.bus.on(\"data\", onDataReceived);\n return router;\n };\n\n onMount(async () => {\n const room = await broadCli.findRoomById(params.id);\n if (room) {\n setStatus(RoomStatus.Found);\n setRoomInfo(room);\n if (!await broadCli.isJoinedRoomById(room.id)) {\n await broadCli.joinRoomById(room.id);\n }\n setStatus(RoomStatus.Joined);\n roomOptsCtl.refetch();\n } else {\n setStatus(RoomStatus.NotFound);\n }\n });\n\n createEffect(() => {\n if (status() === RoomStatus.Joined) {\n participantsCtl.refetch();\n }\n });\n\n createEffect(() => {\n drawCtl.setTool(currentDrawingTool());\n });\n\n createEffect(() => {\n const opts = roomOpts();\n if (opts) {\n if (opts.size_x && opts.size_y) {\n drawCtl.setOffscreenSize([opts.size_x, opts.size_y]);\n }\n } else {\n roomOptsCtl.refetch();\n }\n });\n\n createEffect(() => {\n const room = roomInfo();\n if (room) {\n setGRouter(prev => {\n if (prev && prev.roomId !== room.id) {\n prev.stop();\n return connectMesh(room.id);\n } else if (typeof prev === \"undefined\") {\n return connectMesh(room.id);\n } else {\n return prev;\n }\n });\n }\n });\n\n createEffect(() => {\n const routerg = gRouter();\n if (routerg) {\n routerg.broadcastPeerList();\n }\n });\n\n onCleanup(() => {\n const routerg = gRouter();\n if (routerg) {\n routerg.stop();\n }\n });\n\n const shouldShowJoiningNotice = () => status() === RoomStatus.Unknown || status() === RoomStatus.Found;\n\n const shouldShowRoomNotFound = () => status() === RoomStatus.NotFound;\n \n return <>\n <RoomJoiningNotice open={shouldShowJoiningNotice()} />\n <RoomNotFoundDialog open={shouldShowRoomNotFound()} />\n <ContextMenu\n position={contextMenuPos()}\n onClose={() => setContextMenuPos()}\n currentDrawingTool={currentDrawingTool()}\n onChangingDrawingTool={(newTool) => setCurrentDrawingTool(newTool)}\n />\n <Box sx={{flexGrow: 1}}>\n <AppBar position=\"absolute\" color=\"transparent\">\n <Toolbar>\n <IconButton\n size=\"large\"\n edge=\"start\"\n color=\"inherit\"\n aria-label=\"close\"\n sx={{mr: 2}}\n onClick={() => navigate(\"/\")}\n ><CloseIcon /></IconButton>\n <Typography variant=\"h6\" component=\"div\" sx={{flexGrow: 1}}>\n {() => roomInfo()?.name}\n </Typography>\n <Button size=\"large\" color=\"inherit\" variant=\"text\">\n <Show when={gRouter()} fallback={<LinkOffIcon />}><LinkIcon /></Show>\n </Button>\n <Button\n size=\"large\" color=\"inherit\" variant=\"text\">\n <PersonIcon />{participants.loading? \"...\" : participants()?.length}\n </Button>\n </Toolbar>\n </AppBar>\n </Box>\n <DrawBroad\n ctl={drawCtl}\n onContextMenu={onBroadContextMenu}\n onStart={onDrawing}\n onDrawing={onDrawing}\n onEnd={onDrawingEnd}\n />\n </>;\n};\n\nexport default RoomPage;\n"],"names":["$","createComponentFactory","name","selfPropNames","propDefaults","set","edge","color","disabled","disableFocusRipple","size","utilityClass","getIconButtonUtilityClass","slotClasses","ownerState","root","capitalize","IconButtonRoot","styled","ButtonBase","slot","overridesResolver","props","styles","theme","textAlign","flex","fontSize","typography","pxToRem","padding","borderRadius","overflow","palette","action","active","transition","transitions","create","duration","shortest","disableRipple","backgroundColor","alpha","hoverOpacity","marginLeft","marginRight","main","iconButtonClasses","IconButton","component","allProps","classes","otherProps","_$createComponent","_$mergeProps","clsx","className","children","_tmpl$","_tmpl$2","DEFAULT_DRAWING_SIZE_X","DEFAULT_DRAWING_SIZE_Y","PROTO_TYPE_SEND_DRAWING","RoomStatus","RoomJoiningNotice","open","position","top","left","transform","maxWidth","RoomNotFoundDialog","navigate","useNavigate","paddingLeft","paddingRight","width","justifyContent","ContextMenu","buildContextMenuAnchorPos","itemSx","cursor","onClose","onChangingDrawingTool","DrawTool","pen","currentDrawingTool","erase","hand","RoomPage","params","useParams","broadCli","useBroadClient","status","setStatus","createSignal","Unknown","roomInfo","setRoomInfo","setCurrentDrawingTool","contextMenuPos","setContextMenuPos","gRouter","setGRouter","drawCtl","DrawBroadController","strokes","Map","participants","participantsCtl","createResource","room","getParticipants","id","roomOpts","roomOptsCtl","getRoomOpts","then","opts","size_x","size_y","setRoomOpts","Promise","resolve","undefined","onBroadContextMenu","e","pageX","pageY","getStroke","peerId","stroke","get","onDataReceived","message","length","codeFrame","isUInt","code","toUInt","console","log","xFrame","yFrame","lineWidthFrame","colorFrame","point","x","y","lineWidth","toString","srcUserDeviceId","push","draw","onDrawing","routerg","broadcast","Frame","fromUInt","fromString","onDrawingEnd","zero","connectMesh","roomId","alterChan","SupabaseDatachannel","ofRoom","supabase","getUserDeviceId","router","Router","bus","on","peer","disconnect","onMount","findRoomById","Found","isJoinedRoomById","joinRoomById","Joined","refetch","NotFound","createEffect","setTool","setOffscreenSize","prev","stop","broadcastPeerList","onCleanup","shouldShowJoiningNotice","shouldShowRoomNotFound","newTool","flexGrow","mr","loading"],"mappings":"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"}