diff --git a/public/themes/default.css b/public/themes/default.css
index 353893b2..89d4e7fb 100644
--- a/public/themes/default.css
+++ b/public/themes/default.css
@@ -1,6 +1,7 @@
/* Copyright 2024, Command Line Inc.
SPDX-License-Identifier: Apache-2.0 */
+@import url("./term-default.css");
@import url("./term-dark.css");
:root {
@@ -47,9 +48,9 @@
--app-bg-color: black;
--app-accent-color: rgb(88, 193, 66);
--app-accent-bg-color: rgba(88, 193, 66, 0.2);
- --app-error-color: rgb(204, 0, 0);
- --app-warning-color: rgb(255, 165, 0);
- --app-success-color: rgb(38, 97, 26);
+ --app-error-color: rgb(229, 77, 46);
+ --app-warning-color: rgb(224, 185, 86);
+ --app-success-color: rgb(78, 154, 6);
--app-text-color: rgb(211, 215, 207);
--app-text-primary-color: rgb(255, 255, 255);
--app-text-secondary-color: rgb(195, 200, 194);
@@ -70,9 +71,9 @@
/* scrollbar colors */
/* --scrollbar-background-color: rgba(21, 23, 21, 1); */
- --scrollbar-background-color: #030303;
- --scrollbar-thumb-color: #333;
- --scrollbar-thumb-hover-color: rgb(211, 215, 207);
+ --scrollbar-background-color: var(--app-bg-color);
+ --scrollbar-thumb-color: rgba(255, 255, 255, 0.3);
+ --scrollbar-thumb-hover-color: rgba(255, 255, 255, 0.5);
/* code color */
--pre-bg-color: rgb(0, 0, 0);
@@ -91,44 +92,20 @@
--form-element-border-color: rgba(241, 246, 243, 0.15);
--form-element-bg-color: var(--app-bg-color);
- --form-element-text-color: #ffffff;
- --form-element-label-color: rgb(195, 200, 194);
- --form-element-primary-color: rgb(78, 154, 6);
- --form-element-secondary-color: rgba(255, 255, 255, 0.09);
- --form-element-error-color: rgb(204, 0, 0);
- --form-element-icon-color: #fff;
-
- /* button colors */
- /* todo: use --form-element-* directly in elements */
- --button-text-color: var(--form-element-text-color);
- --button-primary-bg-color: var(--form-element-primary-color);
- --button-primary-color: var(--form-element-text-color);
- --button-secondary-bg-color: var(--form-element-secondary-color);
- --button-warning-bg-color: var(--form-element-error-color);
-
- /* input colors */
- /* todo: use --form-element-* directly in elements */
- --checkbox-text-color: var(--form-element-text-color);
- --checkbox-bg-color: var(--form-element-primary-color);
- --checkbox-check-color: var(--form-element-text-color);
-
- /* dropdown colors */
- /* todo: use --form-element-* directly in elements */
- --dropdown-text-color: var(--form-element-text-color);
- --dropdown-label-color: var(--form-element-label-color);
- --dropdown-error-color: var(--form-element-error-color);
- --dropdown-focus-color: var(--form-element-primary-color);
- --dropdown-bg-color: var(--form-element-bg-color);
- --dropdown-border-color: var(--form-element-border-color);
+ --form-element-text-color: var(--app-text-primary-color);
+ --form-element-label-color: var(--app-text-secondary-color);
+ --form-element-primary-color: var(--app-accent-color);
+ --form-element-secondary-color: rgba(255, 255, 255, 0.2);
+ --form-element-error-color: var(--app-error-color);
+ --form-element-icon-color: var(--app-icon-hover-color);
/* toggle colors */
- --toggle-bg-color: rgb(51, 51, 51);
- --toggle-thumb-color: rgb(211, 215, 207);
- --toggle-checked-bg-color: var(--form-element-primary-color);
+ --toggle-bg-color: var(--app-border-color);
+ --toggle-thumb-color: var(--app-text-color);
+ --toggle-checked-bg-color: var(--app-accent-color);
/* cmdstrcode colors */
- --cmdstrcode-bg-color: rgb(0, 0, 0);
- --cmdstrcode-text-color: rgb(211, 215, 207);
+ --cmdstrcode-text-color: var(--app-text-color);
/* markdown colors */
--markdown-bg-color: rgb(35, 35, 35);
@@ -136,29 +113,29 @@
/* status(remote) colors */
/* todo: all status colors must be unified */
- --status-connected-color: rgb(70, 167, 88);
- --status-connecting-color: rgb(245, 217, 10);
- --status-error-color: rgb(229, 77, 46);
- --status-disconnected-color: rgb(195, 200, 194);
+ --status-connected-color: var(--app-success-color);
+ --status-connecting-color: var(--app-warning-color);
+ --status-error-color: var(--app-error-color);
+ --status-disconnected-color: var(--app-text-secondary-color);
/* status indicator colors */
/* todo: all status colors must be unified */
- --status-indicator-color: rgb(211, 215, 207);
- --status-indicator-error: rgb(204, 0, 0);
- --status-indicator-success: rgb(78, 154, 6);
+ --status-indicator-color: var(--app-text-color);
+ --status-indicator-error: var(--status-error-color);
+ --status-indicator-success: var(--status-connected-color);
/* status(version) colors */
/* todo: all status colors must be unified */
- --status-outdated-color: rgb(196, 160, 0);
- --status-updated-color: rgb(78, 154, 6);
+ --status-outdated-color: var(--status-connecting-color);
+ --status-updated-color: var(--status-connected-color);
/* term status colors */
/* todo: all status colors must be unified */
- --term-error-color: rgb(204, 0, 0);
- --term-warning-color: rgb(196, 160, 0);
+ --term-error-color: var(--status-error-color);
+ --term-warning-color: var(--status-connecting-color);
/* hotkey colors */
- --hotkey-text-color: rgb(195, 200, 194);
+ --hotkey-text-color: var(--app-text-secondary-color);
/* sidebar colors */
--sidebar-highlight-color: rgba(241, 246, 243, 0.08);
@@ -176,10 +153,10 @@
--line-svg-hover-fill-color: #eceeec;
--line-selected-border-color: rgb(193, 195, 193);
--line-separator-color: rgb(126, 126, 126);
- --line-error-color: #cc0000;
- --line-warning-color: #ffa500;
+ --line-error-color: var(--app-error-color);
+ --line-warning-color: var(--app-warning-color);
--line-base-soft-blue-color: #729fcf;
- --line-active-border-color: rgb(97, 158, 72);
+ --line-active-border-color: var(--app-accent-color);
--line-selected-bg-color: rgba(255, 255, 255, 0.05);
--line-selected-border-left-color: #777777;
--line-selected-error-border-color: rgba(204, 0, 0, 0.8);
@@ -190,12 +167,12 @@
--line-meta-user-color: rgba(140, 184, 232);
--line-svg-color: rgba(236, 238, 236, 0.6);
--line-svg-hover-color: rgba(236, 238, 236, 1);
- --line-status-success-fill: rgb(88, 193, 66);
- --line-status-error-fill: #cc0000;
- --line-status-warning-fill: #ffa500;
+ --line-status-success-fill: var(--app-success-color);
+ --line-status-error-fill: var(--app-error-color);
+ --line-status-warning-fill: var(--app-warning-color);
--line-actions-inactive-color: rgba(255, 255, 255, 0.5);
--line-actions-active-color: rgba(255, 255, 255, 1);
- --line-actions-bg-color: rgba(21, 23, 21, 1);
+ --line-actions-bg-color: rgba(255, 255, 255, 0.15);
/* view colors */
/* todo: bookmarks is a view, colors must be unified with --view* colors */
@@ -205,8 +182,8 @@
--bookmarks-control-hover-color: rgb(255, 255, 255);
/* view colors */
- --view-error-color: rgb(204, 0, 0);
- --view-text-color: rgb(195, 200, 194);
+ --view-error-color: var(--app-error-color);
+ --view-text-color: var(--app-text-color);
/* table colors */
--table-border-color: rgba(241, 246, 243, 0.15);
diff --git a/public/themes/light.css b/public/themes/light.css
index 19fefa4a..ca3b101c 100644
--- a/public/themes/light.css
+++ b/public/themes/light.css
@@ -2,10 +2,13 @@
SPDX-License-Identifier: Apache-2.0 */
@import "./default.css";
+@import "./term-default.css";
@import "./term-light.css";
:root {
--app-bg-color: #fefefe;
+ --app-accent-color: rgb(75, 166, 57);
+ --app-accent-bg-color: rgba(75, 166, 57, 0.2);
--app-text-color: #000;
--app-text-primary-color: rgb(0, 0, 0, 0.9);
--app-text-secondary-color: rgb(0, 0, 0, 0.7);
@@ -42,7 +45,7 @@
--form-element-bg-color: var(--app-bg-color);
--form-element-text-color: var(--app-text-color);
--form-element-label-color: rgba(0, 0, 0, 0.6);
- --form-element-secondary-color: rgba(255, 255, 255, 0.09);
+ --form-element-secondary-color: rgba(0, 0, 0, 0.09);
--form-element-icon-color: rgb(0, 0, 0, 0.6);
/* modal colors */
@@ -53,16 +56,17 @@
--cmdinput-textarea-border-color: var(--form-element-border-color);
/* scroll colors */
- --scrollbar-background-color: rgba(0, 0, 0, 0.3);
- --scrollbar-thumb-color: rgba(0, 0, 0, 0.4);
- --scrollbar-thumb-hover-color: rgba(0, 0, 0, 0.5);
-
- /* cmdstrcode colors */
- --cmdstrcode-bg-color: var(--term-black);
- --cmdstrcode-text-color: var(--term-white);
+ --scrollbar-background-color: var(--app-bg-color);
+ --scrollbar-thumb-color: rgba(0, 0, 0, 0.2);
+ --scrollbar-thumb-hover-color: rgba(0, 0, 0, 0.4);
/* line color */
- --line-actions-bg-color: rgba(0, 0, 0, 0.4);
+ --line-actions-bg-color: rgba(0, 0, 0, 0.1);
+ --line-actions-inactive-color: rgba(0, 0, 0, 0.3);
+ --line-actions-active-color: rgba(0, 0, 0, 1);
+
+ /* toggle colors */
+ --toggle-thumb-color: var(--app-bg-color);
--logo-button-hover-bg-color: #f0f0f0;
diff --git a/public/themes/term-default.css b/public/themes/term-default.css
index f0108a0d..0037124b 100644
--- a/public/themes/term-default.css
+++ b/public/themes/term-default.css
@@ -11,9 +11,9 @@
--term-green: #4e9a06;
--term-yellow: #c4a000;
--term-blue: #3465a4;
- --term-magenta: #75507b;
+ --term-magenta: #bc3fbc;
--term-cyan: #06989a;
- --term-white: #d3d7cf;
+ --term-white: #d0d0d0;
--term-bright-black: #555753;
--term-bright-red: #ef2929;
--term-bright-green: #58c142;
@@ -21,7 +21,7 @@
--term-bright-blue: #32afff;
--term-bright-magenta: #ad7fa8;
--term-bright-cyan: #34e2e2;
- --term-bright-white: #ffffff;
+ --term-bright-white: #e7e7e7;
--term-gray: #8b918a; /* not an official terminal color */
--term-cmdtext: #ffffff;
diff --git a/public/themes/term-light.css b/public/themes/term-light.css
index 27c01dd0..2cffb2ee 100644
--- a/public/themes/term-light.css
+++ b/public/themes/term-light.css
@@ -5,7 +5,5 @@
/* term colors */
--term-foreground: #000000;
--term-background: #fefefe;
- --term-black: #fefefe;
- --term-white: #000000;
--term-cmdtext: #000000;
}
diff --git a/src/app/app.less b/src/app/app.less
index 59541aa2..71d22ecc 100644
--- a/src/app/app.less
+++ b/src/app/app.less
@@ -12,7 +12,7 @@ body {
body {
&.is-dev .sidebar {
- background-color: var(--app-panel-bg-color-dev);
+ --app-panel-bg-color: var(--app-panel-bg-color-dev);
}
}
@@ -210,10 +210,10 @@ svg.icon {
.dropdown,
.button {
display: inline-block;
- border: 1px solid var(--button-secondary-bg-color) !important;
+ border: 1px solid var(--form-element-secondary-color) !important;
border-radius: 5px;
cursor: pointer;
- background-color: var(--button-secondary-bg-color) !important;
+ background-color: var(--form-element-secondary-color) !important;
color: var(--app-accent-color);
.hoverEffect;
&:hover {
@@ -221,7 +221,7 @@ svg.icon {
}
&.disabled {
color: var(--app-text-color);
- background: var(--button-secondary-bg-color);
+ background: var(--form-element-secondary-color);
opacity: 0.5;
cursor: initial;
}
@@ -382,9 +382,9 @@ a.a-block {
}
&.connect-button {
- color: var(--button-primary-bg-color);
+ color: var(--form-element-primary-color);
&:hover {
- color: var(--button-primary-bg-color);
+ color: var(--form-element-primary-color);
}
}
@@ -396,9 +396,9 @@ a.a-block {
}
&.success-button {
- color: var(--button-primary-bg-color);
+ color: var(--form-element-primary-color);
&:hover {
- color: var(--button-primary-bg-color);
+ color: var(--form-element-primary-color);
}
}
diff --git a/src/app/app.tsx b/src/app/app.tsx
index 63f36b92..de6910e6 100644
--- a/src/app/app.tsx
+++ b/src/app/app.tsx
@@ -111,11 +111,12 @@ class App extends React.Component<{}, {}> {
// used to force a full reload of the application
const renderVersion = GlobalModel.renderVersion.get();
const sidebarCollapsed = GlobalModel.mainSidebarModel.getCollapsed();
+ const lightDarkClass = GlobalModel.isThemeDark() ? "is-dark" : "is-light";
return (
diff --git a/src/app/assets/icons/globe.svg b/src/app/assets/icons/globe.svg
index 75a6930c..8f1966a0 100644
--- a/src/app/assets/icons/globe.svg
+++ b/src/app/assets/icons/globe.svg
@@ -1,5 +1,6 @@
+
+
+
+
\ No newline at end of file
diff --git a/src/app/assets/icons/rotate-sharp-solid.svg b/src/app/assets/icons/rotate-sharp-solid.svg
new file mode 100644
index 00000000..e46ae88c
--- /dev/null
+++ b/src/app/assets/icons/rotate-sharp-solid.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/app/clientsettings/clientsettings.tsx b/src/app/clientsettings/clientsettings.tsx
index 495b56be..8c08cccd 100644
--- a/src/app/clientsettings/clientsettings.tsx
+++ b/src/app/clientsettings/clientsettings.tsx
@@ -5,8 +5,6 @@ import * as React from "react";
import * as mobxReact from "mobx-react";
import * as mobx from "mobx";
import { boundMethod } from "autobind-decorator";
-import { If } from "tsx-control-statements/components";
-import cn from "classnames";
import { GlobalModel, GlobalCommandRunner, RemotesModel, getApi } from "@/models";
import { Toggle, InlineSettingsTextEdit, SettingsError, Dropdown } from "@/common/elements";
import { commandRtnHandler, isBlank } from "@/util/util";
@@ -192,19 +190,17 @@ class ClientSettingsView extends React.Component<{ model: RemotesModel }, { hove
/>
-
-
-
Theme
-
-
-
+
Client ID
{cdata.clientid}
diff --git a/src/app/common/elements/button.less b/src/app/common/elements/button.less
index 9d7a825d..d37b0034 100644
--- a/src/app/common/elements/button.less
+++ b/src/app/common/elements/button.less
@@ -18,20 +18,20 @@
background: none;
i {
- fill: var(--button-primary-bg-color);
+ fill: var(--form-element-primary-color);
}
&.solid {
- color: var(--button-primary-color);
- background: var(--button-primary-bg-color);
+ color: var(--form-element-text-color);
+ background: var(--form-element-primary-color);
i {
- fill: var(--button-primary-color);
+ fill: var(--form-element-text-color);
}
}
&.outlined {
- border: 1px solid var(--button-primary-bg-color);
+ border: 1px solid var(--form-element-primary-color);
}
&.ghost {
@@ -39,29 +39,29 @@
}
&:hover {
- color: var(--button-primary-color);
+ color: var(--form-element-text-color);
}
}
&.secondary {
- color: var(--button-text-color);
+ color: var(--form-element-text-color);
background: none;
&.solid {
- color: var(--button-text-color);
- background: var(--button-secondary-bg-color);
+ color: var(--form-element-text-color);
+ background: var(--form-element-secondary-color);
box-shadow: none;
}
&.outlined {
- border: 1px solid var(--button-secondary-bg-color);
+ border: 1px solid var(--form-element-secondary-color);
}
&.ghost {
padding: 6px 10px;
i {
- fill: var(--button-primary-bg-color);
+ fill: var(--form-element-primary-color);
}
}
}
diff --git a/src/app/common/elements/checkbox.less b/src/app/common/elements/checkbox.less
index 25e4cca6..3afbecfb 100644
--- a/src/app/common/elements/checkbox.less
+++ b/src/app/common/elements/checkbox.less
@@ -10,7 +10,7 @@
position: relative;
display: flex;
align-items: center;
- color: var(--checkbox-bg-color);
+ color: var(--form-element-primary-color);
transition: color 250ms cubic-bezier(0.4, 0, 0.23, 1);
}
input[type="checkbox"] + label > span {
@@ -36,7 +36,7 @@
}
input[type="checkbox"]:checked + label > span {
- border: 10px solid var(--button-primary-bg-color);
+ border: 10px solid var(--form-element-primary-color);
}
input[type="checkbox"]:checked + label > span:before {
content: "";
@@ -45,8 +45,8 @@
left: 3px;
width: 7px;
height: 12px;
- border-right: 2px solid var(--checkbox-check-color);
- border-bottom: 2px solid var(--checkbox-check-color);
+ border-right: 2px solid var(--form-element-text-color);
+ border-bottom: 2px solid var(--form-element-text-color);
transform: rotate(45deg);
transform-origin: 0% 100%;
animation: checkbox-check 500ms cubic-bezier(0.4, 0, 0.23, 1);
diff --git a/src/app/common/elements/cmdstrcode.less b/src/app/common/elements/cmdstrcode.less
index f6a54243..50e830eb 100644
--- a/src/app/common/elements/cmdstrcode.less
+++ b/src/app/common/elements/cmdstrcode.less
@@ -36,7 +36,6 @@
}
.code-div {
- background-color: var(--cmdstrcode-bg-color);
display: flex;
flex-direction: row;
min-width: 100px;
@@ -49,7 +48,6 @@
color: var(--cmdstrcode-text-color);
white-space: pre;
padding: 2px 8px 2px 8px;
- background-color: var(--cmdstrcode-bg-color);
font-size: var(--termfontsize);
font-family: var(--termfontfamily);
line-height: var(--termlineheight);
diff --git a/src/app/common/elements/dropdown.less b/src/app/common/elements/dropdown.less
index 681a11a9..70e4bbb2 100644
--- a/src/app/common/elements/dropdown.less
+++ b/src/app/common/elements/dropdown.less
@@ -3,9 +3,9 @@
height: 44px;
min-width: 150px;
width: 100%;
- border: 1px solid var(--dropdown-border-color);
+ border: 2px solid var(--form-element-border-color);
border-radius: 6px;
- background: var(--dropdown-bg-color);
+ background: var(--form-element-bg-color);
&.no-label {
height: 34px;
@@ -17,7 +17,7 @@
top: 16px;
font-size: 12.5px;
transition: all 0.3s;
- color: var(--dropdown-label-color);
+ color: var(--form-element-label-color);
line-height: 10px;
&.float {
@@ -88,11 +88,15 @@
}
&-error {
- border-color: var(--dropdown-error-color);
+ border-color: var(--form-element-error-color);
}
&:focus {
- border-color: var(--dropdown-focus-color);
+ border-color: var(--form-element-primary-color);
+ }
+
+ .lefticon {
+ color: var(--app-text-color);
}
}
@@ -109,13 +113,13 @@
align-items: flex-start;
gap: 4px;
border-radius: 6px;
- border: 1px solid var(--dropdown-border-color);
- background: var(--dropdown-bg-color);
+ border: 2px solid var(--form-element-border-color);
+ background: var(--form-element-bg-color);
// box-shadow: 0px 1px 3px 0px rgba(0, 0, 0, 0.5), 0px 3px 8px 0px rgba(0, 0, 0, 0.35), 0px 0px 0.5px 0px #fff inset,
// 0px 0.5px 0px 0px rgba(255, 255, 255, 0.2) inset;
animation-fill-mode: forwards;
z-index: 1000;
- color: var(--dropdown-text-color);
+ color: var(--form-element-text-color);
}
.wave-dropdown-menu-close {
diff --git a/src/app/common/elements/mainview.less b/src/app/common/elements/mainview.less
index 8433234d..5e9e306c 100644
--- a/src/app/common/elements/mainview.less
+++ b/src/app/common/elements/mainview.less
@@ -25,7 +25,7 @@
padding: 0 10px;
vertical-align: middle;
line-height: var(--screentabs-height);
- color: var(--term-white);
+ color: var(--app-text-color);
margin: 0;
}
diff --git a/src/app/common/elements/textfield.less b/src/app/common/elements/textfield.less
index 66d78624..34386817 100644
--- a/src/app/common/elements/textfield.less
+++ b/src/app/common/elements/textfield.less
@@ -3,10 +3,10 @@
align-items: center;
border-radius: 6px;
position: relative;
- height: 44px;
+ min-height: 44px;
min-width: 412px;
gap: 6px;
- border: 1px solid var(--form-element-border-color);
+ border: 2px solid var(--form-element-border-color);
background: var(--form-element-bg-color);
&:hover {
@@ -27,15 +27,14 @@
&-inner {
display: flex;
- align-items: flex-end;
- height: 100%;
+ flex-direction: column;
position: relative;
flex-grow: 1;
+ --inner-padding: 5px 0 5px 16px;
&-label {
- position: absolute;
- left: 16px;
- top: 16px;
+ padding: var(--inner-padding);
+ margin-bottom: -10px;
font-size: 12.5px;
transition: all 0.3s;
color: var(--form-element-label-color);
@@ -55,7 +54,7 @@
width: 100%;
height: 30px;
border: none;
- padding: 5px 0 5px 16px;
+ padding: var(--inner-padding);
font-size: 16px;
outline: none;
background-color: transparent;
diff --git a/src/app/common/elements/tooltip.less b/src/app/common/elements/tooltip.less
index aafa8092..44ca20d5 100644
--- a/src/app/common/elements/tooltip.less
+++ b/src/app/common/elements/tooltip.less
@@ -15,7 +15,7 @@
i {
display: inline;
font-size: 13px;
- fill: var(--checkbox-text-color);
+ fill: var(--form-element-text-color);
padding-top: 0.2em;
}
}
diff --git a/src/app/common/modals/screensettings.less b/src/app/common/modals/screensettings.less
index 897c48d2..92e78ca4 100644
--- a/src/app/common/modals/screensettings.less
+++ b/src/app/common/modals/screensettings.less
@@ -26,12 +26,16 @@
width: 16px;
height: 16px;
flex-shrink: 0;
+ fill: var(--app-text-secondary-color);
}
.status-icon {
position: absolute;
left: 7px;
top: 8px;
+ circle {
+ stroke: var(--app-bg-color);
+ }
}
}
diff --git a/src/app/common/modals/screensettings.tsx b/src/app/common/modals/screensettings.tsx
index 4d924901..d1813f68 100644
--- a/src/app/common/modals/screensettings.tsx
+++ b/src/app/common/modals/screensettings.tsx
@@ -5,7 +5,7 @@ import * as React from "react";
import * as mobxReact from "mobx-react";
import * as mobx from "mobx";
import { boundMethod } from "autobind-decorator";
-import { If, For } from "tsx-control-statements/components";
+import { For } from "tsx-control-statements/components";
import cn from "classnames";
import { GlobalModel, GlobalCommandRunner, Screen } from "@/models";
import { Toggle, InlineSettingsTextEdit, SettingsError, Modal, Dropdown, Tooltip } from "@/elements";
@@ -38,15 +38,13 @@ class ScreenSettingsModal extends React.Component<{}, {}> {
shareCopied: OV
= mobx.observable.box(false, { name: "ScreenSettings-shareCopied" });
errorMessage: OV = mobx.observable.box(null, { name: "ScreenSettings-errorMessage" });
screen: Screen;
- sessionId: string;
screenId: string;
remotes: RemoteType[];
constructor(props) {
super(props);
- let screenSettingsModal = GlobalModel.screenSettingsModal.get();
- let { sessionId, screenId } = screenSettingsModal;
- this.sessionId = sessionId;
+ const screenSettingsModal = GlobalModel.screenSettingsModal.get();
+ const { sessionId, screenId } = screenSettingsModal;
this.screenId = screenId;
this.screen = GlobalModel.getScreenById(sessionId, screenId);
if (this.screen == null || sessionId == null || screenId == null) {
@@ -67,8 +65,8 @@ class ScreenSettingsModal extends React.Component<{}, {}> {
value: remote.remotecanonicalname,
}))
.sort((a, b) => {
- let connValA = util.getRemoteConnVal(a);
- let connValB = util.getRemoteConnVal(b);
+ const connValA = util.getRemoteConnVal(a);
+ const connValB = util.getRemoteConnVal(b);
if (connValA !== connValB) {
return connValA - connValB;
}
@@ -92,7 +90,7 @@ class ScreenSettingsModal extends React.Component<{}, {}> {
if (this.screen.getTabColor() == color) {
return;
}
- let prtn = GlobalCommandRunner.screenSetSettings(this.screenId, { tabcolor: color }, false);
+ const prtn = GlobalCommandRunner.screenSetSettings(this.screenId, { tabcolor: color }, false);
util.commandRtnHandler(prtn, this.errorMessage);
}
@@ -101,7 +99,7 @@ class ScreenSettingsModal extends React.Component<{}, {}> {
if (this.screen.getTabIcon() == icon) {
return;
}
- let prtn = GlobalCommandRunner.screenSetSettings(this.screen.screenId, { tabicon: icon }, false);
+ const prtn = GlobalCommandRunner.screenSetSettings(this.screen.screenId, { tabicon: icon }, false);
util.commandRtnHandler(prtn, this.errorMessage);
}
@@ -113,7 +111,7 @@ class ScreenSettingsModal extends React.Component<{}, {}> {
if (this.screen.archived.get() == val) {
return;
}
- let prtn = GlobalCommandRunner.screenArchive(this.screenId, val);
+ const prtn = GlobalCommandRunner.screenArchive(this.screenId, val);
util.commandRtnHandler(prtn, this.errorMessage);
}
@@ -125,13 +123,13 @@ class ScreenSettingsModal extends React.Component<{}, {}> {
if (this.screen.isWebShared() == val) {
return;
}
- let message = val ? WebShareConfirmMarkdown : WebStopShareConfirmMarkdown;
- let alertRtn = GlobalModel.showAlert({ message: message, confirm: true, markdown: true });
+ const message = val ? WebShareConfirmMarkdown : WebStopShareConfirmMarkdown;
+ const alertRtn = GlobalModel.showAlert({ message: message, confirm: true, markdown: true });
alertRtn.then((result) => {
if (!result) {
return;
}
- let prtn = GlobalCommandRunner.screenWebShare(this.screen.screenId, val);
+ const prtn = GlobalCommandRunner.screenWebShare(this.screen.screenId, val);
util.commandRtnHandler(prtn, this.errorMessage);
});
}
@@ -141,7 +139,7 @@ class ScreenSettingsModal extends React.Component<{}, {}> {
if (this.screen == null) {
return null;
}
- let shareLink = this.screen.getWebShareUrl();
+ const shareLink = this.screen.getWebShareUrl();
if (shareLink == null) {
return;
}
@@ -164,7 +162,7 @@ class ScreenSettingsModal extends React.Component<{}, {}> {
if (util.isStrEq(val, this.screen.name.get())) {
return;
}
- let prtn = GlobalCommandRunner.screenSetSettings(this.screenId, { name: val }, false);
+ const prtn = GlobalCommandRunner.screenSetSettings(this.screenId, { name: val }, false);
util.commandRtnHandler(prtn, this.errorMessage);
}
@@ -176,7 +174,7 @@ class ScreenSettingsModal extends React.Component<{}, {}> {
if (util.isStrEq(val, this.screen.getShareName())) {
return;
}
- let prtn = GlobalCommandRunner.screenSetSettings(this.screenId, { sharename: val }, false);
+ const prtn = GlobalCommandRunner.screenSetSettings(this.screenId, { sharename: val }, false);
util.commandRtnHandler(prtn, this.errorMessage);
}
@@ -216,14 +214,14 @@ class ScreenSettingsModal extends React.Component<{}, {}> {
}
render() {
- let screen = this.screen;
+ const screen = this.screen;
if (screen == null) {
return null;
}
let color: string = null;
let icon: string = null;
let index: number = 0;
- let curRemote = GlobalModel.getRemote(GlobalModel.getActiveScreen().getCurRemoteInstance().remoteid);
+ const curRemote = GlobalModel.getRemote(GlobalModel.getActiveScreen().getCurRemoteInstance().remoteid);
return (
diff --git a/src/app/common/prompt/prompt.less b/src/app/common/prompt/prompt.less
index 824a2ac0..5678baaa 100644
--- a/src/app/common/prompt/prompt.less
+++ b/src/app/common/prompt/prompt.less
@@ -12,56 +12,42 @@
}
}
-.term-prompt.term-prompt-color {
+.is-dark .term-prompt.term-prompt-color {
.term-prompt-branch {
color: var(--term-white);
}
- .term-prompt-python {
- color: var(--term-magenta);
- }
-
.term-prompt-remote {
color: var(--term-bright-green);
-
- &.color-green {
- color: var(--term-green);
- }
-
- &.color-red {
- color: var(--term-red);
- }
-
- &.color-blue {
- color: var(--term-bright-blue);
- }
-
- &.color-yellow {
- color: var(--term-bright-yellow);
- }
-
- &.color-magenta {
- color: var(--term-bright-magenta);
- }
-
- &.color-cyan {
- color: var(--termt-bright-cyan);
- }
-
- &.color-white {
- color: var(--term-bright-white);
- }
-
- &.color-orange {
- color: var(--term-orange);
- }
}
.term-prompt-cwd {
color: var(--term-bright-green);
}
-
&.term-prompt-isroot .term-prompt-cwd {
color: var(--term-red);
}
}
+
+.is-light .term-prompt.term-prompt-color {
+ .term-prompt-branch {
+ color: var(--term-black);
+ }
+
+ .term-prompt-remote {
+ color: var(--term-green);
+ }
+
+ .term-prompt-cwd {
+ color: var(--term-green);
+ }
+ &.term-prompt-isroot .term-prompt-cwd {
+ color: var(--term-red);
+ }
+}
+
+.term-prompt.term-prompt-color {
+ .term-prompt-python {
+ color: var(--term-magenta);
+ }
+}
diff --git a/src/app/common/prompt/prompt.tsx b/src/app/common/prompt/prompt.tsx
index 21cef094..04fdb276 100644
--- a/src/app/common/prompt/prompt.tsx
+++ b/src/app/common/prompt/prompt.tsx
@@ -30,9 +30,9 @@ function getRemoteStr(rptr: RemotePtrType): string {
if (rptr == null || isBlank(rptr.remoteid)) {
return "(invalid remote)";
}
- let username = isBlank(rptr.ownerid) ? null : GlobalModel.resolveUserIdToName(rptr.ownerid);
- let remoteRef = GlobalModel.resolveRemoteIdToRef(rptr.remoteid);
- let fullRef = makeFullRemoteRef(username, remoteRef, rptr.name);
+ const username = isBlank(rptr.ownerid) ? null : GlobalModel.resolveUserIdToName(rptr.ownerid);
+ const remoteRef = GlobalModel.resolveRemoteIdToRef(rptr.remoteid);
+ const fullRef = makeFullRemoteRef(username, remoteRef, rptr.name);
return fullRef;
}
@@ -40,11 +40,11 @@ function getShortVEnv(venvDir: string): string {
if (isBlank(venvDir)) {
return "";
}
- let lastSlash = venvDir.lastIndexOf("/");
+ const lastSlash = venvDir.lastIndexOf("/");
if (lastSlash == -1) {
return venvDir;
}
- return venvDir.substr(lastSlash + 1);
+ return venvDir.substring(lastSlash + 1);
}
function replaceHomePath(path: string, homeDir: string): string {
@@ -52,7 +52,7 @@ function replaceHomePath(path: string, homeDir: string): string {
return "~";
}
if (path.startsWith(homeDir + "/")) {
- return "~" + path.substr(homeDir.length);
+ return "~" + path.substring(homeDir.length);
}
return path;
}
@@ -62,7 +62,7 @@ function getCwdStr(remote: RemoteType, state: Record): string {
return "~";
}
let cwd = state.cwd;
- if (remote && remote.remotevars.home) {
+ if (remote?.remotevars.home) {
cwd = replaceHomePath(cwd, remote.remotevars.home);
}
return cwd;
@@ -71,30 +71,29 @@ function getCwdStr(remote: RemoteType, state: Record): string {
@mobxReact.observer
class Prompt extends React.Component<{ rptr: RemotePtrType; festate: Record; color: boolean }, {}> {
render() {
- let rptr = this.props.rptr;
+ const rptr = this.props.rptr;
if (rptr == null || isBlank(rptr.remoteid)) {
return ;
}
- let termFontSize = GlobalModel.getTermFontSize();
- let remote = GlobalModel.getRemote(this.props.rptr.remoteid);
- let remoteStr = getRemoteStr(rptr);
- let festate = this.props.festate ?? {};
- let cwd = getCwdStr(remote, festate);
+ const remote = GlobalModel.getRemote(this.props.rptr.remoteid);
+ const remoteStr = getRemoteStr(rptr);
+ const festate = this.props.festate ?? {};
+ const cwd = getCwdStr(remote, festate);
let isRoot = false;
- if (remote && remote.remotevars) {
+ if (remote?.remotevars) {
if (remote.remotevars["sudo"] || remote.remotevars["bestuser"] == "root") {
isRoot = true;
}
}
let remoteColorClass = isRoot ? "color-red" : "color-green";
- if (remote && remote.remoteopts && remote.remoteopts.color) {
+ if (remote?.remoteopts?.color) {
remoteColorClass = "color-" + remote.remoteopts.color;
}
let remoteTitle: string = null;
- if (remote && remote.remotecanonicalname) {
+ if (remote?.remotecanonicalname) {
remoteTitle = "connected to " + remote.remotecanonicalname;
}
- let cwdElem = {cwd};
+ const cwdElem = {cwd};
let remoteElem = null;
if (remoteStr != "local") {
remoteElem = (
@@ -107,7 +106,7 @@ class Prompt extends React.Component<{ rptr: RemotePtrType; festate: Record
git:({branchName}){" "}
@@ -115,8 +114,8 @@ class Prompt extends React.Component<{ rptr: RemotePtrType; festate: Record
venv:({venv}){" "}
@@ -124,7 +123,7 @@ class Prompt extends React.Component<{ rptr: RemotePtrType; festate: Record
conda:({condaEnv}){" "}
diff --git a/src/app/history/history.less b/src/app/history/history.less
index 6c8ed2fd..77cbd566 100644
--- a/src/app/history/history.less
+++ b/src/app/history/history.less
@@ -108,7 +108,7 @@
.search-checkbox {
margin: 0 15px;
padding: 5px 10px 5px 10px;
- background: var(--button-secondary-bg-color);
+ background: var(--form-element-secondary-color);
border-radius: 4px;
display: flex;
flex-direction: row;
@@ -135,9 +135,6 @@
flex-direction: row;
align-items: center;
margin-left: 15px;
-
- .fromts-text {
- }
}
.reset-button {
diff --git a/src/app/line/line.less b/src/app/line/line.less
index d5e24691..9351e034 100644
--- a/src/app/line/line.less
+++ b/src/app/line/line.less
@@ -1,3 +1,5 @@
+@import "@/common/icons/icons.less";
+
.line {
margin: 0;
padding: calc(var(--termpad) * 2) var(--termpad) calc(var(--termpad) * 2 + 1px) calc(var(--termpad) * 3);
@@ -6,6 +8,7 @@
overflow: hidden;
flex-shrink: 0;
position: relative;
+ line-height: 11px;
font-weight: normal;
font-family: var(--termfontfamily);
scroll-margin-bottom: 20px;
@@ -27,9 +30,21 @@
}
}
+ .centered-icon {
+ .positional-icon-visible;
+ height: 15px;
+ width: 15px;
+ .positional-icon-inner {
+ height: 15px;
+ width: 15px;
+ &:first-child {
+ font-size: var(--termfontsize-sm);
+ }
+ }
+ }
+
&.active.selected {
.line-mask {
- background-color: var(--line-selected-bg-color);
border: 2px solid var(--line-active-border-color);
border-left: 4px solid var(--line-active-border-color);
}
@@ -92,35 +107,6 @@
}
}
- .simple-line-status {
- .linenum {
- cursor: pointer;
- }
-
- .avatar {
- display: inline-block;
- height: 1em;
- margin-left: 0.5em;
- vertical-align: text-top;
- fill: var(--primary-background-color);
- }
-
- .success {
- color: var(--primary-accent-color);
- fill: var(--primary-accent-color);
- }
-
- .fail {
- color: var(--line-error-color);
- fill: var(--line-error-color);
- }
-
- .warning {
- color: var(--line-warning-color);
- fill: var(--line-warning-color);
- }
- }
-
&.top-border {
border-top: 1px solid #777;
padding: 10px;
@@ -171,7 +157,7 @@
}
&:hover {
- color: var(--app-icon-hover-color);
+ color: var(--line-actions-active-color);
}
padding: 4px 4px;
@@ -203,7 +189,6 @@
.user {
color: var(--line-meta-user-color);
font-weight: bold;
- margin-top: 1px;
margin-right: 10px;
}
@@ -213,6 +198,31 @@
font-size: var(--termfontsize-sm);
line-height: var(--termlineheight-sm);
color: var(--term-gray);
+ align-items: center;
+
+ .status-icon {
+ display: inline-block;
+ margin-left: 0.5em;
+ height: var(--termfontsize-sm);
+ line-height: 1;
+
+ svg {
+ height: var(--termfontsize-sm);
+ width: var(--termfontsize-sm);
+ vertical-align: baseline;
+ }
+ }
+
+ i.fail {
+ color: var(--line-error-color);
+ fill: var(--line-error-color);
+ }
+
+ i.warning,
+ svg.warning {
+ color: var(--line-warning-color);
+ fill: var(--line-warning-color);
+ }
}
.meta-divider {
@@ -310,7 +320,6 @@
margin: 6px 0 2px 10px;
padding: 2px 5px 0px 5px;
display: inline-block;
- font-size: 10px;
color: var(--term-text-white);
background-color: #151715;
}
diff --git a/src/app/line/linecomps.tsx b/src/app/line/linecomps.tsx
index d2c645f3..56b6893e 100644
--- a/src/app/line/linecomps.tsx
+++ b/src/app/line/linecomps.tsx
@@ -28,6 +28,7 @@ import * as util from "@/util/util";
import * as textmeasure from "@/util/textmeasure";
import "./line.less";
+import { CenteredIcon, RotateIcon } from "../common/icons/icons";
const DebugHeightProblems = false;
const MinLine = 0;
@@ -317,21 +318,19 @@ class SmallLineAvatar extends React.Component<{ line: LineType; cmd: Cmd; onRigh
icon = ;
iconTitle = "error";
} else if (status == "running" || status == "detached") {
- icon = ;
+ icon = ;
iconTitle = "running";
} else {
icon = ;
iconTitle = "unknown";
}
return (
-
-
{lineNumStr}
-
{icon}
-
+ <>
+ {lineNumStr}
+
+ {icon}
+
+ >
);
}
}
diff --git a/src/app/workspace/cmdinput/cmdinput.less b/src/app/workspace/cmdinput/cmdinput.less
index e99f3ad5..540758ef 100644
--- a/src/app/workspace/cmdinput/cmdinput.less
+++ b/src/app/workspace/cmdinput/cmdinput.less
@@ -1,3 +1,5 @@
+@import "@/common/icons/icons.less";
+
.cmd-input {
max-height: max(300px, 40%);
display: flex;
@@ -10,9 +12,6 @@
border-top: 2px solid var(--app-border-color);
background-color: var(--app-bg-color);
- &.active {
- }
-
&.has-info,
&.has-aichat,
&.has-history {
@@ -43,11 +42,18 @@
align-items: center;
.cmdinput-icon {
+ display: inline-flex;
color: var(--app-icon-hover-color);
opacity: 0.5;
- &.running-cmds i {
- color: var(--app-warning-color);
+ .centered-icon {
+ .positional-icon-visible;
+ }
+
+ &.running-cmds {
+ .rotate {
+ fill: var(--app-warning-color);
+ }
}
&.active {
diff --git a/src/app/workspace/cmdinput/cmdinput.tsx b/src/app/workspace/cmdinput/cmdinput.tsx
index 29c81950..6cac9b5a 100644
--- a/src/app/workspace/cmdinput/cmdinput.tsx
+++ b/src/app/workspace/cmdinput/cmdinput.tsx
@@ -15,7 +15,7 @@ import { TextAreaInput } from "./textareainput";
import { InfoMsg } from "./infomsg";
import { HistoryInfo } from "./historyinfo";
import { Prompt } from "@/common/prompt/prompt";
-import { RotateIcon } from "@/common/icons/icons";
+import { CenteredIcon, RotateIcon } from "@/common/icons/icons";
import { AIChat } from "./aichat";
import "./cmdinput.less";
@@ -155,7 +155,10 @@ class CmdInput extends React.Component<{}, {}> {
title="Filter for Running Commands"
onClick={() => this.toggleFilter(screen)}
>
- {numRunningLines}
+ {numRunningLines}{" "}
+
+
+
diff --git a/src/app/workspace/screen/screenview.less b/src/app/workspace/screen/screenview.less
index c3c1e399..17ade0bd 100644
--- a/src/app/workspace/screen/screenview.less
+++ b/src/app/workspace/screen/screenview.less
@@ -249,12 +249,16 @@
width: 16px;
height: 16px;
flex-shrink: 0;
+ fill: var(--app-text-secondary-color);
}
.status-icon {
position: absolute;
left: 7px;
top: 8px;
+ circle {
+ stroke: var(--app-bg-color);
+ }
}
}
diff --git a/src/plugins/code/code.less b/src/plugins/code/code.less
index 6da14f5d..742bc160 100644
--- a/src/plugins/code/code.less
+++ b/src/plugins/code/code.less
@@ -61,7 +61,7 @@
top: 0.2em;
right: 12rem;
border-radius: 5px;
- background-color: var(--button-secondary-bg-color);
+ background-color: var(--form-element-secondary-color);
color: var(--app-error-color);
z-index: 1;
padding: 0 0.8em;
diff --git a/wavesrv/pkg/cmdrunner/shparse.go b/wavesrv/pkg/cmdrunner/shparse.go
index 2be93626..4544d955 100644
--- a/wavesrv/pkg/cmdrunner/shparse.go
+++ b/wavesrv/pkg/cmdrunner/shparse.go
@@ -258,7 +258,7 @@ func isRtnStateCmd(cmd syntax.Command) bool {
}
arg1 := getCallExprLitArg(callExpr, 1)
if arg0 == "git" {
- if arg1 == "checkout" || arg1 == "switch" {
+ if arg1 == "checkout" || arg1 == "co" || arg1 == "switch" {
return true
}
}