| @ -1,15 +1,30 @@ | |||||
| import { FC } from "react"; | import { FC } from "react"; | ||||
| import { NavLink } from "react-router-dom"; | import { NavLink } from "react-router-dom"; | ||||
| interface LinkProps { | |||||
| to: string; | |||||
| } | |||||
| const Link: FC<LinkProps> = ({ to, children }) => ( | |||||
| <NavLink to={to} className={"mx-5 button-lg"} activeClassName="font-bold"> | |||||
| {children} | |||||
| </NavLink> | |||||
| ); | |||||
| const Header: FC = () => ( | const Header: FC = () => ( | ||||
| <header> | |||||
| <h1>Solstice web UI</h1> | |||||
| <NavLink to="/rooms" activeClassName="active"> | |||||
| Rooms | |||||
| </NavLink> | |||||
| <NavLink to="/users" activeClassName="active"> | |||||
| Users | |||||
| </NavLink> | |||||
| <header className="flex p-4 items-center"> | |||||
| <h1 | |||||
| className={ | |||||
| "text-3xl font-bold text-yellow-800 bg-yellow-300 shadow " + | |||||
| "mr-5 py-3 px-5 rounded-xl" | |||||
| } | |||||
| > | |||||
| Solstice | |||||
| </h1> | |||||
| <nav className="flex items-center"> | |||||
| <Link to="/rooms">Rooms</Link> | |||||
| <Link to="/users">Users</Link> | |||||
| </nav> | |||||
| </header> | </header> | ||||
| ); | ); | ||||
| @ -1,238 +0,0 @@ | |||||
| /* Styles */ | |||||
| body { | |||||
| font: 14px "Helvetica Neue", Helvetica, Arial, sans-serif; | |||||
| line-height: 1.4em; | |||||
| -webkit-font-smoothing: antialiased; | |||||
| -moz-font-smoothing: antialiased; | |||||
| font-smoothing: antialiased; | |||||
| font-weight: 300; | |||||
| padding: 0 !important; | |||||
| margin: 0 !important; | |||||
| height: 100%; | |||||
| } | |||||
| html { | |||||
| padding: 0; | |||||
| margin: 0; | |||||
| height: 100vh; | |||||
| } | |||||
| #app, | |||||
| #solstice-app { | |||||
| height: 100%; | |||||
| margin: 0; | |||||
| padding: 0; | |||||
| } | |||||
| #solstice-app { | |||||
| display: flex; | |||||
| flex-flow: column; | |||||
| justify-content: center; | |||||
| align-items: center; | |||||
| } | |||||
| header { | |||||
| margin: 0; | |||||
| padding: 1.5em 2em; | |||||
| display: flex; | |||||
| flex-flow: row; | |||||
| justify-content: space-around; | |||||
| width: 100%; | |||||
| } | |||||
| header h1 { | |||||
| margin: 0; | |||||
| } | |||||
| footer { | |||||
| display: flex; | |||||
| padding: 0.5em; | |||||
| width: 100%; | |||||
| box-sizing: border-box; | |||||
| } | |||||
| main { | |||||
| width: 100%; | |||||
| height: 85%; | |||||
| margin: 0; | |||||
| padding: 0; | |||||
| } | |||||
| #rooms-pane { | |||||
| display: flex; | |||||
| border: solid grey 0.1em; | |||||
| height: 100%; | |||||
| } | |||||
| #room-chat { | |||||
| border: solid grey 0.1em; | |||||
| } | |||||
| #room-list { | |||||
| flex: 1; | |||||
| display: flex; | |||||
| flex-flow: column; | |||||
| border: solid grey 0.1em; | |||||
| height: 100%; | |||||
| } | |||||
| #room-selected-pane { | |||||
| height: 100%; | |||||
| flex: 3; | |||||
| display: flex; | |||||
| flex-flow: row; | |||||
| } | |||||
| #room-chat { | |||||
| height: 100%; | |||||
| max-width: 100%; | |||||
| flex: 2; | |||||
| display: flex; | |||||
| flex-flow: column; | |||||
| justify-content: space-between; | |||||
| } | |||||
| #room-user-list { | |||||
| flex: 1; | |||||
| display: block; | |||||
| list-style: none; | |||||
| margin: 0; | |||||
| padding: 1em; | |||||
| } | |||||
| #room-chat-header { | |||||
| flex: 1; | |||||
| padding: 0.8em; | |||||
| border: solid grey 0.1em; | |||||
| display: flex; | |||||
| flex-flow: row; | |||||
| justify-content: space-between; | |||||
| align-items: center; | |||||
| } | |||||
| #room-chat-header-title { | |||||
| font-size: 1.3em; | |||||
| text-align: center; | |||||
| flex: 1; | |||||
| } | |||||
| #room-chat-header > button { | |||||
| padding: 0.5em 1em; | |||||
| } | |||||
| #room-chat-message-list { | |||||
| display: block; | |||||
| height: 83%; | |||||
| width: 100%; | |||||
| box-sizing: border-box; | |||||
| margin: 0; | |||||
| padding: 1em; | |||||
| overflow: auto; | |||||
| list-style: none; | |||||
| } | |||||
| .room-chat-message { | |||||
| display: flex; | |||||
| flex-flow: column; | |||||
| align-items: flex-start; | |||||
| margin-right: 3em; | |||||
| } | |||||
| .room-chat-message-me { | |||||
| align-items: flex-end; | |||||
| margin-left: 3em; | |||||
| margin-right: 0; | |||||
| } | |||||
| .room-chat-message-user { | |||||
| font-weight: bold; | |||||
| color: blue; | |||||
| } | |||||
| .room-chat-message-text { | |||||
| padding: 0.5em 0.7em; | |||||
| margin: 0.2em 0.5em; | |||||
| border-radius: 0.8em; | |||||
| background-color: lightgrey; | |||||
| } | |||||
| .room-chat-message-me > .room-chat-message-text { | |||||
| background-color: blue; | |||||
| color: white; | |||||
| } | |||||
| #room-chat-form { | |||||
| width: 100%; | |||||
| border: solid grey 0.1em; | |||||
| } | |||||
| #room-chat-form form { | |||||
| width: 100%; | |||||
| display: flex; | |||||
| flex-flow: row; | |||||
| } | |||||
| #room-chat-form input { | |||||
| flex: 1; | |||||
| padding: 0.8em; | |||||
| } | |||||
| #room-list-header { | |||||
| flex: 1; | |||||
| display: flex; | |||||
| flex-flow: row; | |||||
| border: solid grey 0.1em; | |||||
| } | |||||
| #room-list-header > div { | |||||
| flex: 1; | |||||
| border: solid grey 0.1em; | |||||
| } | |||||
| #room-list ul { | |||||
| display: block; | |||||
| list-style: none; | |||||
| padding: 0; | |||||
| margin: 0; | |||||
| height: 84%; | |||||
| overflow-y: auto; | |||||
| } | |||||
| .room { | |||||
| display: flex; | |||||
| justify-content: space-between; | |||||
| color: inherit; | |||||
| text-decoration: inherit; | |||||
| padding: 0.5em 1em; | |||||
| border: solid grey 0.1em; | |||||
| } | |||||
| .room:hover { | |||||
| background: lightgrey; | |||||
| } | |||||
| .room:active { | |||||
| background: grey; | |||||
| } | |||||
| .room-joined { | |||||
| background: lightgreen; | |||||
| } | |||||
| .room-selected { | |||||
| background: lightblue; | |||||
| } | |||||
| #login-status-pane, | |||||
| #socket-status-pane { | |||||
| flex: 1; | |||||
| } | |||||
| #connect-form { | |||||
| display: flex; | |||||
| flex-flow: column; | |||||
| align-items: center; | |||||
| } | |||||