* work * moar work * notes * work * separate to terminal and control channels * stdin working * serve html web client initial * serve static assets loaded with include_dir * merge * enable_web_server config parameter * compile time flag to disable web server capability * rustfmt * add license to all xterm.js assets * mouse working except copy/paste * helpful comment * web client improvements - move script to js file - add favicon - add nerd font - change title TODO: investigate if font license embedded in otf is sufficient * get mouse to work properly * kitty keyboard support initial * fix wrong type in preload link * wip axum websocket handlers - upgrade axum to v0.8.1, enable ws feature - begin setup of websocket handlers - tidy up imports * replace control listener * handle terminal websocket with axum * cleanup Cargo.toml * kitty fixes and bracketed paste * fix(mouse): pane not found crash * initial session switching infra * add `web_client_font` option * session switching, creation and resurrection working through the session manager * move session module to zellij-utils and share logic with web-client * some cleanups * require restart for enable-web-server * use session name from router * write config to disk and watch for config changes * rename session name to ipc path * add basic panic handler, make render_to_client exit on channel close * use while let instead of loop * handle websocket close * add mouse motions * make clipboard work * add weblink handling and webgl rendering * add todo * fix: use session name instead of patch on session switch * use "default" layout for new sessions * ui indication for session being shared * share this session ui * plugin assets * Fix process crash on mac with notify watcher. Use poll watcher instead of recommended as a workaround. * make url session switching and creation work * start welcome screen on root url * scaffold control messages, set font from config * set dimensions on session start * bring back session name from url * send bytes on terminal websocket instead of json - create web client os input and id before websocket connection * draft ui * work * refactor ui * remove otf font, remove margins to avoid scrollbar * version query endpoint for server status * web session info query endpoint * refactor: move stuff around * add web client info to session metadata * make tests pass * populate real data in session list * remove unnecessary endpoint * add web_client node to config, add font option * remove web_client_font * allow disabling the web session through the config - WIP * formalize sharing/not-sharing configuration * fix tests * allow shutting down web server * display error when web clients are forbidden to attach * only show sessions that allow web clients if this is a web client * style(fmt): rustfmt * fix: query web server from Zellij rather than from each plugin * remove log spam * handle some error paths better in the web client * allow controlling the web server through the cli * allow configuring the web server's ip/port * fix tests and format code * use direct WebServerStatus event instead of piggy-backing on SessionInfo * plugin revamp initial * make plugin responsive * adjust plugin title * refactor: share plugin * refactor: share plugin * add cors middleware * some fixes for running without a compiled web server capability * display error when starting the share plugin without web server support * clarify config * add pipelines to compile zellij without web support * display error when unable to start web server * only query web server when share plugin is running * refactor(web-client): connection table * give zellij_server_listener access to the control channel * fixes and clarifications * refactor: consolidate generate_unique_session_name * give proper error when trying to attach to a forbidden session * change browser URL when switching sessions * add keyboard shortcut * enforce https when bound to non-loopback ip * initial authentication token implementation * background color from theme * initial web client theme config * basic token generation ui * refactor set config message creation * also set body background * allow editing scrollback for plugins too * set scrollback to 0 * properly parse colors in config * generate token from plugin * nice login modals * initial token management screen * implement token authentication * refactor(share): token management screen * style(fmt): rustfmt * fix(plugin): some minor bugs * refactor(share): main screen * refactor(share): token screen * refactor(share): main * refactor(share): ui components * fix(responsiveness): properly send usage_width to the render function * fix cli commands and add some verbosity * add support for settings ansi and selection colors * add cursor and cursor accent * basic web client tests * fix tests * refactor: web client * use session tokens for authentication * improve modals * move shutdown to ipc * refactor: ipc logic * serialize theme config for web client * update tests * refactor: move some stuff around to prepare for config hot reload * config live reloading for the web clients * change remember-me UI wording * improve xterm.js link handling * make sure terminal is focused on mousemove * remove deprecated sharing indication from compact-bar * gate deps and functionality behind the web_server_compatibility feature * feat(build): add --no-web flag in all the places * fix some other build flows * add new assets * update CI for no-web (untested) * make more dependencies optional * update axum-extra * add web client configuration options * gracefully close connections on server exit * tests for graceful connection closing * handle client-side reconnect when server is down * fix: make sure ipc bus folder exists before starting * add commands to manage login tokens from the cli * style(fmt): rustfmt * some cleanups * fix(ux): allow alt-right-click on the web client without opening the context menu * fix: prevent attaching to welcome screen * fix: reload config issues * fix long socket path on macos * normalize config conversion and fix color gap in browser * revoke session_token cookie if it is not valid * fix: visual bug with multiple clients in extremely small screen sizes * fix: only include rusqlite for the web server capability builds * update e2e snapshots * refactor(web): client side js * some cleanups * moar cleanups * fix(tests): wait for server instead of using a fixed timeout * debug CI * fix(tests): use spawn_blocking for running the test web server * fix(tests): wait for http rather than tcp port * fix(tests): properly pass config path - hopefully this is the issue... * success! bring back the rest of the tests * attempt to fix the macos CI issue * docs(changelog): add PR --------- Co-authored-by: Thomas Linford <linford.t@gmail.com>
223 lines
5.5 KiB
CSS
223 lines
5.5 KiB
CSS
/**
|
|
* Taken from @xterm/xterm v5.5.0
|
|
*
|
|
* The following license refers to this file and the functions
|
|
* within it only
|
|
*
|
|
* Copyright (c) 2014 The xterm.js authors. All rights reserved.
|
|
* Copyright (c) 2012-2013, Christopher Jeffrey (MIT License)
|
|
* https://github.com/chjj/term.js
|
|
* @license MIT
|
|
*
|
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
* of this software and associated documentation files (the "Software"), to deal
|
|
* in the Software without restriction, including without limitation the rights
|
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
* copies of the Software, and to permit persons to whom the Software is
|
|
* furnished to do so, subject to the following conditions:
|
|
*
|
|
* The above copyright notice and this permission notice shall be included in
|
|
* all copies or substantial portions of the Software.
|
|
*
|
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
* THE SOFTWARE.
|
|
*
|
|
* Originally forked from (with the author's permission):
|
|
* Fabrice Bellard's javascript vt100 for jslinux:
|
|
* http://bellard.org/jslinux/
|
|
* Copyright (c) 2011 Fabrice Bellard
|
|
* The original design remains. The terminal itself
|
|
* has been extended to include xterm CSI codes, among
|
|
* other features.
|
|
*/
|
|
|
|
/**
|
|
* Default styles for xterm.js
|
|
*/
|
|
|
|
.xterm {
|
|
cursor: text;
|
|
position: relative;
|
|
user-select: none;
|
|
-ms-user-select: none;
|
|
-webkit-user-select: none;
|
|
}
|
|
|
|
.xterm.focus,
|
|
.xterm:focus {
|
|
outline: none;
|
|
}
|
|
|
|
.xterm .xterm-helpers {
|
|
position: absolute;
|
|
top: 0;
|
|
/**
|
|
* The z-index of the helpers must be higher than the canvases in order for
|
|
* IMEs to appear on top.
|
|
*/
|
|
z-index: 5;
|
|
}
|
|
|
|
.xterm .xterm-helper-textarea {
|
|
padding: 0;
|
|
border: 0;
|
|
margin: 0;
|
|
/* Move textarea out of the screen to the far left, so that the cursor is not visible */
|
|
position: absolute;
|
|
opacity: 0;
|
|
left: -9999em;
|
|
top: 0;
|
|
width: 0;
|
|
height: 0;
|
|
z-index: -5;
|
|
/** Prevent wrapping so the IME appears against the textarea at the correct position */
|
|
white-space: nowrap;
|
|
overflow: hidden;
|
|
resize: none;
|
|
}
|
|
|
|
.xterm .composition-view {
|
|
/* TODO: Composition position got messed up somewhere */
|
|
background: #000;
|
|
color: #FFF;
|
|
display: none;
|
|
position: absolute;
|
|
white-space: nowrap;
|
|
z-index: 1;
|
|
}
|
|
|
|
.xterm .composition-view.active {
|
|
display: block;
|
|
}
|
|
|
|
.xterm .xterm-viewport {
|
|
/* On OS X this is required in order for the scroll bar to appear fully opaque */
|
|
background-color: #000;
|
|
overflow-y: scroll;
|
|
cursor: default;
|
|
position: absolute;
|
|
right: 0;
|
|
left: 0;
|
|
top: 0;
|
|
bottom: 0;
|
|
}
|
|
|
|
.xterm .xterm-screen {
|
|
position: relative;
|
|
}
|
|
|
|
.xterm .xterm-screen canvas {
|
|
position: absolute;
|
|
left: 0;
|
|
top: 0;
|
|
}
|
|
|
|
.xterm .xterm-scroll-area {
|
|
visibility: hidden;
|
|
}
|
|
|
|
.xterm-char-measure-element {
|
|
display: inline-block;
|
|
visibility: hidden;
|
|
position: absolute;
|
|
top: 0;
|
|
left: -9999em;
|
|
line-height: normal;
|
|
}
|
|
|
|
.xterm.enable-mouse-events {
|
|
/* When mouse events are enabled (eg. tmux), revert to the standard pointer cursor */
|
|
cursor: default;
|
|
}
|
|
|
|
.xterm.xterm-cursor-pointer,
|
|
.xterm .xterm-cursor-pointer {
|
|
cursor: pointer;
|
|
}
|
|
|
|
.xterm.column-select.focus {
|
|
/* Column selection mode */
|
|
cursor: crosshair;
|
|
}
|
|
|
|
.xterm .xterm-accessibility:not(.debug),
|
|
.xterm .xterm-message {
|
|
position: absolute;
|
|
left: 0;
|
|
top: 0;
|
|
bottom: 0;
|
|
right: 0;
|
|
z-index: 10;
|
|
color: transparent;
|
|
pointer-events: none;
|
|
}
|
|
|
|
.xterm .xterm-accessibility-tree:not(.debug) *::selection {
|
|
color: transparent;
|
|
}
|
|
|
|
.xterm .xterm-accessibility-tree {
|
|
user-select: text;
|
|
white-space: pre;
|
|
}
|
|
|
|
.xterm .live-region {
|
|
position: absolute;
|
|
left: -9999px;
|
|
width: 1px;
|
|
height: 1px;
|
|
overflow: hidden;
|
|
}
|
|
|
|
.xterm-dim {
|
|
/* Dim should not apply to background, so the opacity of the foreground color is applied
|
|
* explicitly in the generated class and reset to 1 here */
|
|
opacity: 1 !important;
|
|
}
|
|
|
|
.xterm-underline-1 { text-decoration: underline; }
|
|
.xterm-underline-2 { text-decoration: double underline; }
|
|
.xterm-underline-3 { text-decoration: wavy underline; }
|
|
.xterm-underline-4 { text-decoration: dotted underline; }
|
|
.xterm-underline-5 { text-decoration: dashed underline; }
|
|
|
|
.xterm-overline {
|
|
text-decoration: overline;
|
|
}
|
|
|
|
.xterm-overline.xterm-underline-1 { text-decoration: overline underline; }
|
|
.xterm-overline.xterm-underline-2 { text-decoration: overline double underline; }
|
|
.xterm-overline.xterm-underline-3 { text-decoration: overline wavy underline; }
|
|
.xterm-overline.xterm-underline-4 { text-decoration: overline dotted underline; }
|
|
.xterm-overline.xterm-underline-5 { text-decoration: overline dashed underline; }
|
|
|
|
.xterm-strikethrough {
|
|
text-decoration: line-through;
|
|
}
|
|
|
|
.xterm-screen .xterm-decoration-container .xterm-decoration {
|
|
z-index: 6;
|
|
position: absolute;
|
|
}
|
|
|
|
.xterm-screen .xterm-decoration-container .xterm-decoration.xterm-decoration-top-layer {
|
|
z-index: 7;
|
|
}
|
|
|
|
.xterm-decoration-overview-ruler {
|
|
z-index: 8;
|
|
position: absolute;
|
|
top: 0;
|
|
right: 0;
|
|
pointer-events: none;
|
|
}
|
|
|
|
.xterm-decoration-top {
|
|
z-index: 2;
|
|
position: relative;
|
|
}
|