Introduce darkmode theme (#1969)

This commit introduces a new more relaxed theme, the dark theme!
In addition, the theme can now be selected according to the system defaults.
And the other themes, as well as the general structure were unified/simplified.

Co-authored-by: Philipp Ahrendt <philipp.ahrendt@cloudogu.com>
Co-authored-by: Eduard Heimbuch <eduard.heimbuch@cloudogu.com>
Co-authored-by: René Pfeuffer <rene.pfeuffer@cloudogu.com>
Co-authored-by: Matthias Thieroff <matthias.thieroff@cloudogu.com>
This commit is contained in:
Florian Scholdei
2022-03-08 09:47:36 +01:00
committed by GitHub
parent 1dad31168b
commit 9c3e9cd76d
37 changed files with 922 additions and 553 deletions

View File

@@ -0,0 +1,4 @@
- type: added
description: Introduce darkmode theme ([#1969](https://github.com/scm-manager/scm-manager/pull/1969))
- type: changed
description: Default theme is selected according to system defaults ([#1969](https://github.com/scm-manager/scm-manager/pull/1969))

View File

@@ -87,7 +87,8 @@ export const parameters = {
default: "light", default: "light",
list: [ list: [
{ name: "light", color: "#fff" }, { name: "light", color: "#fff" },
{ name: "highcontrast", color: "#000" }, { name: "highcontrast", color: "#050514" },
{ name: "dark", color: "#121212" },
], ],
}, },
options: { options: {

View File

@@ -41,10 +41,9 @@ export const DangerZone = styled.div`
} }
} }
// TODO ersetzen?
> *:not(:last-child) { > *:not(:last-child) {
padding-bottom: 1.5rem; padding-bottom: 1.5rem;
border-bottom: solid 2px whitesmoke; border-bottom: solid 2px var(--scm-border-color);
} }
@media screen and (max-width: ${devices.tablet.width}px) { @media screen and (max-width: ${devices.tablet.width}px) {
.button { .button {

View File

@@ -34,10 +34,12 @@ import useScrollToElement from "./useScrollToElement";
import styled from "styled-components"; import styled from "styled-components";
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import copyToClipboard from "./CopyToClipboard"; import copyToClipboard from "./CopyToClipboard";
import { Button } from "./buttons";
const LINE_NUMBER_URL_HASH_REGEX = /^#line-(.*)$/; const LINE_NUMBER_URL_HASH_REGEX = /^#line-(.*)$/;
const TopRightButton = styled.button` const TopRightButton = styled(Button)`
height: inherit;
position: absolute; position: absolute;
display: none; display: none;
top: 0; top: 0;
@@ -90,7 +92,6 @@ const SyntaxHighlighter: FC<Props> = ({ language = defaultLanguage, showLineNumb
if (value && value.length > 1 && value.endsWith("\n")) { if (value && value.length > 1 && value.endsWith("\n")) {
valueWithoutTrailingLineBreak = value.substr(0, value.length - 1); valueWithoutTrailingLineBreak = value.substr(0, value.length - 1);
} }
return ( return (
<Container ref={setContentRef} className="is-relative"> <Container ref={setContentRef} className="is-relative">
<ReactSyntaxHighlighter <ReactSyntaxHighlighter
@@ -101,7 +102,7 @@ const SyntaxHighlighter: FC<Props> = ({ language = defaultLanguage, showLineNumb
> >
{valueWithoutTrailingLineBreak} {valueWithoutTrailingLineBreak}
</ReactSyntaxHighlighter> </ReactSyntaxHighlighter>
<TopRightButton className="is-clickable" title={t("syntaxHighlighting.copyButton")} onClick={copy}> <TopRightButton className="is-small" title={t("syntaxHighlighting.copyButton")} action={copy}>
<i className={copied ? "fa fa-clipboard-check" : "fa fa-clipboard"} /> <i className={copied ? "fa fa-clipboard-check" : "fa fa-clipboard"} />
</TopRightButton> </TopRightButton>
</Container> </Container>

View File

@@ -27,7 +27,7 @@ import Button, { ButtonProps } from "./Button";
import classNames from "classnames"; import classNames from "classnames";
const Wrapper = styled.div` const Wrapper = styled.div`
border: 2px solid #e9f7fd; border: 2px solid var(--scm-border-color);
`; `;
export default class CreateButton extends React.Component<ButtonProps> { export default class CreateButton extends React.Component<ButtonProps> {

View File

@@ -37,7 +37,7 @@ type Props = {
const Button = styled.button` const Button = styled.button`
width: 50px; width: 50px;
&:hover { &:hover {
color: #33b2e8; color: var(--scm-info-color);
} }
`; `;

View File

@@ -56,8 +56,8 @@ const PopoverContainer = styled.div<ContainerProps>`
top: 100%; top: 100%;
left: ${props => props.width / 2}px; left: ${props => props.width / 2}px;
border-color: transparent; border-color: transparent;
border-bottom-color: white; border-bottom-color: var(--scm-popover-border-color);
border-left-color: white; border-left-color: var(--scm-popover-border-color);
border-width: 0.4rem; border-width: 0.4rem;
margin-left: -0.4rem; margin-left: -0.4rem;
margin-top: -0.4rem; margin-top: -0.4rem;

View File

@@ -28,7 +28,7 @@ import Tooltip from "../Tooltip";
const Button = styled.button` const Button = styled.button`
width: 50px; width: 50px;
&:hover { &:hover {
color: #33b2e8; color: var(--scm-info-color);
} }
`; `;

View File

@@ -30,7 +30,7 @@ import Icon from "../Icon";
const Button = styled(Link)` const Button = styled(Link)`
width: 50px; width: 50px;
&:hover { &:hover {
color: #33b2e8; color: var(--scm-info-color);
} }
`; `;

View File

@@ -50,8 +50,8 @@ const PopoverContainer = styled.div`
top: 100%; top: 100%;
left: 5.5em; left: 5.5em;
border-color: transparent; border-color: transparent;
border-bottom-color: white; border-bottom-color: var(--scm-popover-border-color);
border-left-color: white; border-left-color: var(--scm-popover-border-color);
border-width: 0.4rem; border-width: 0.4rem;
margin-left: -0.4rem; margin-left: -0.4rem;
margin-top: -0.4rem; margin-top: -0.4rem;

View File

@@ -62,7 +62,7 @@ storiesOf("Table", module)
}; };
}} }}
> >
{(row: any) => <b style={{ color: "red" }}>{row.lastname}</b>} {(row: any) => <b className="has-text-danger">{row.lastname}</b>}
</Column> </Column>
<Column header={"E-Mail"}>{(row: any) => <span>{row.email}</span>}</Column> <Column header={"E-Mail"}>{(row: any) => <span>{row.email}</span>}</Column>
</Table> </Table>

View File

@@ -373,7 +373,7 @@
<section class="section container"> <section class="section container">
<div class="columns is-size-7"> <div class="columns is-size-7">
<section class="column is-one-third"> <section class="column is-one-third">
<div style="font-weight: bold; margin-bottom: 0.5rem;"> <div class="has-text-weight-bold mb-2">
<span <span
class="image is-rounded" class="image is-rounded"
style="float: left; margin-right: 0.3em; padding-top: 0.2em; width: 1em; height: 1em;" style="float: left; margin-right: 0.3em; padding-top: 0.2em; width: 1em; height: 1em;"
@@ -395,7 +395,7 @@
</ul> </ul>
</section> </section>
<section class="column is-one-third"> <section class="column is-one-third">
<div style="font-weight: bold; margin-bottom: 0.5rem;"> <div class="has-text-weight-bold mb-2">
<i class="fas fa-info-circle fa-fw"></i> <i class="fas fa-info-circle fa-fw"></i>
Information Information
</div> </div>
@@ -405,7 +405,7 @@
</ul> </ul>
</section> </section>
<section class="column is-one-third"> <section class="column is-one-third">
<div style="font-weight: bold; margin-bottom: 0.5rem;"> <div class="has-text-weight-bold mb-2">
<i class="fas fa-life-ring fa-fw"></i> <i class="fas fa-life-ring fa-fw"></i>
Support Support
</div> </div>
@@ -424,7 +424,7 @@
<h3 class="subtitle is-4">Headlines</h3> <h3 class="subtitle is-4">Headlines</h3>
<div class="notification">Subheadlines should only be used if there is reasonable content for them.</div> <div class="notification">Subheadlines should only be used if there is reasonable content for them.</div>
<div class="container"> <div class="container">
<div class="box" style="box-shadow: none; border: 1px solid #dbdbdb;"> <div class="box" style="box-shadow: none; border: 1px solid var(--scm-border-color);">
<h1 class="title">Users</h1> <h1 class="title">Users</h1>
<h2 class="subtitle">Create, read, update and delete users</h2> <h2 class="subtitle">Create, read, update and delete users</h2>
</div> </div>
@@ -1094,6 +1094,7 @@
<p class="control"><a class="button is-success">Success</a></p> <p class="control"><a class="button is-success">Success</a></p>
<p class="control"><a class="button is-warning">Warning</a></p> <p class="control"><a class="button is-warning">Warning</a></p>
<p class="control"><a class="button is-danger">Danger</a></p> <p class="control"><a class="button is-danger">Danger</a></p>
<p class="control"><a class="button">Default</a></p>
</div> </div>
</div> </div>
</div> </div>
@@ -1113,6 +1114,7 @@
<p class="control"><a class="button is-success" disabled="">Success</a></p> <p class="control"><a class="button is-success" disabled="">Success</a></p>
<p class="control"><a class="button is-warning" disabled="">Warning</a></p> <p class="control"><a class="button is-warning" disabled="">Warning</a></p>
<p class="control"><a class="button is-danger" disabled="">Danger</a></p> <p class="control"><a class="button is-danger" disabled="">Danger</a></p>
<p class="control"><a class="button" disabled="">Default</a></p>
</div> </div>
</div> </div>
</div> </div>
@@ -1132,6 +1134,7 @@
<p class="control"><a class="button is-success is-hovered">Success</a></p> <p class="control"><a class="button is-success is-hovered">Success</a></p>
<p class="control"><a class="button is-warning is-hovered">Warning</a></p> <p class="control"><a class="button is-warning is-hovered">Warning</a></p>
<p class="control"><a class="button is-danger is-hovered">Danger</a></p> <p class="control"><a class="button is-danger is-hovered">Danger</a></p>
<p class="control"><a class="button is-hovered">Default</a></p>
</div> </div>
</div> </div>
</div> </div>
@@ -1152,6 +1155,7 @@
<p class="control"><a class="button is-success is-active">Success</a></p> <p class="control"><a class="button is-success is-active">Success</a></p>
<p class="control"><a class="button is-warning is-active">Warning</a></p> <p class="control"><a class="button is-warning is-active">Warning</a></p>
<p class="control"><a class="button is-danger is-active">Danger</a></p> <p class="control"><a class="button is-danger is-active">Danger</a></p>
<p class="control"><a class="button is-active">Default</a></p>
</div> </div>
</div> </div>
</div> </div>
@@ -1176,6 +1180,7 @@
<p class="control"><a class="button is-success is-loading">Success</a></p> <p class="control"><a class="button is-success is-loading">Success</a></p>
<p class="control"><a class="button is-warning is-loading">Warning</a></p> <p class="control"><a class="button is-warning is-loading">Warning</a></p>
<p class="control"><a class="button is-danger is-loading">Danger</a></p> <p class="control"><a class="button is-danger is-loading">Danger</a></p>
<p class="control"><a class="button is-loading">Default</a></p>
</div> </div>
</div> </div>
</div> </div>
@@ -1197,6 +1202,7 @@
<p class="control"><a class="button is-success is-outlined">Success</a></p> <p class="control"><a class="button is-success is-outlined">Success</a></p>
<p class="control"><a class="button is-warning is-outlined">Warning</a></p> <p class="control"><a class="button is-warning is-outlined">Warning</a></p>
<p class="control"><a class="button is-danger is-outlined">Danger</a></p> <p class="control"><a class="button is-danger is-outlined">Danger</a></p>
<p class="control"><a class="button is-outlined">Default</a></p>
</div> </div>
</div> </div>
</div> </div>
@@ -1362,7 +1368,7 @@
<div class="has-text-right"> <div class="has-text-right">
<button class="button is-primary" type="submit">Create Repository</button> <button class="button is-primary" type="submit">Create Repository</button>
</div> </div>
<div class="has-text-centered" style="margin-top: 2em; padding: 1em; border: 2px solid rgb(233, 247, 253);"> <div class="has-text-centered" style="margin-top: 2em; padding: 1em; border: 2px solid var(--scm-border-color);">
<button class="button is-primary" type="submit">Create Repository</button> <button class="button is-primary" type="submit">Create Repository</button>
</div> </div>
</div> </div>
@@ -1699,7 +1705,6 @@
<span <span
class="tooltip has-tooltip-right is-inline-block has-tooltip-multiline" class="tooltip has-tooltip-right is-inline-block has-tooltip-multiline"
data-tooltip="Unique name of the group" data-tooltip="Unique name of the group"
style=""
> >
<i class="fas fa-question-circle has-text-info"></i> <i class="fas fa-question-circle has-text-info"></i>
</span> </span>
@@ -1717,7 +1722,6 @@
<span <span
class="tooltip has-tooltip-right is-inline-block has-tooltip-multiline" class="tooltip has-tooltip-right is-inline-block has-tooltip-multiline"
data-tooltip="A short description of the group" data-tooltip="A short description of the group"
style=""
> >
<i class="fas fa-question-circle has-text-info"></i> <i class="fas fa-question-circle has-text-info"></i>
</span> </span>
@@ -1738,7 +1742,6 @@
<span <span
class="tooltip has-tooltip-right is-inline-block has-tooltip-multiline" class="tooltip has-tooltip-right is-inline-block has-tooltip-multiline"
data-tooltip="The api key will be restricted to permissions of this role" data-tooltip="The api key will be restricted to permissions of this role"
style=""
> >
<i class="fas fa-question-circle has-text-info"></i> <i class="fas fa-question-circle has-text-info"></i>
</span> </span>
@@ -1753,15 +1756,15 @@
</select> </select>
</div> </div>
</div> </div>
<div class="field is-horizontal" style="margin-top: 2rem;"> <div class="field is-horizontal mt-4">
<div class="field-label is-normal" style="flex-basis: inherit; flex-grow: 0;"> <div class="field-label is-normal" style="flex-basis: inherit; flex-grow: 0;">
<label class="label is-size-6" for="selectBranch">Select branch</label> <label class="label is-size-6" for="selectBranch">Select branch</label>
</div> </div>
<div class="field-body"> <div class="field-body">
<div class="field is-narrow" style="margin-bottom: 0 !important;"> <div class="field is-narrow mb-0">
<div class="control" style="min-width: 10rem;"> <div class="control" style="min-width: 10rem;">
<div class="is-fullwidth select"> <div class="is-fullwidth select">
<select style="" id="selectBranch"> <select id="selectBranch">
<option value="main">main</option> <option value="main">main</option>
<option value="develop">develop</option> <option value="develop">develop</option>
</select> </select>
@@ -1781,7 +1784,6 @@
<span <span
class="tooltip has-tooltip-right is-inline-block has-tooltip-multiline" class="tooltip has-tooltip-right is-inline-block has-tooltip-multiline"
data-tooltip="This user is managed by an external system." data-tooltip="This user is managed by an external system."
style=""
> >
<i class="fas fa-question-circle has-text-info"></i> <i class="fas fa-question-circle has-text-info"></i>
</span> </span>
@@ -1812,7 +1814,7 @@
<form> <form>
<div class="field is-grouped"> <div class="field is-grouped">
<div class="control"> <div class="control">
<label class="hbseve radio" style="margin-right: 0.5em;"> <label class="hbseve radio mr-2">
<input checked="" name="permission_scope" type="radio" value="USER_PERMISSION" /> <input checked="" name="permission_scope" type="radio" value="USER_PERMISSION" />
User Permission User Permission
</label> </label>
@@ -1936,7 +1938,7 @@
<div class="is-flex is-align-items-center"> <div class="is-flex is-align-items-center">
<div style="width: 16px; height: 16px; font-size: 13px;"> <div style="width: 16px; height: 16px; font-size: 13px;">
<span class="tooltip has-tooltip-right" data-tooltip="Copy Permalink to Clipboard"> <span class="tooltip has-tooltip-right" data-tooltip="Copy Permalink to Clipboard">
<i class="fas fa-link has-text-inherit" style="color: #dbdbdb; opacity: 0.75;"></i> <i class="fas fa-link has-text-inherit" style="color: var(--scm-border-color); opacity: 0.75;"></i>
</span> </span>
</div> </div>
<nav <nav
@@ -1977,7 +1979,7 @@
<div class="content" style="overflow: hidden; margin-bottom: 0 !important;"> <div class="content" style="overflow: hidden; margin-bottom: 0 !important;">
<p class="shorten-text is-marginless"><strong>Git</strong></p> <p class="shorten-text is-marginless"><strong>Git</strong></p>
</div> </div>
<div style=""> <div>
<div class="is-flex" style="margin-left: auto;"></div> <div class="is-flex" style="margin-left: auto;"></div>
</div> </div>
</div> </div>
@@ -2019,15 +2021,15 @@
<div class="is-flex"> <div class="is-flex">
<span <span
class="level-item" class="level-item"
style="padding: 0.5rem; border: 1px solid rgb(205, 205, 205); border-radius: 4px; cursor: pointer; pointer-events: all; margin-bottom: 0 !important;" style="padding: 0.5rem; border: 1px solid var(--scm-border-color); border-radius: 4px; cursor: pointer; pointer-events: all; margin-bottom: 0 !important;"
> >
<i class="fas fa-fw fa-trash has-text-info" title="Uninstall"></i> <i class="fas fa-fw fa-trash has-text-info" title="Uninstall"></i>
</span> </span>
</div> </div>
</div> </div>
</div> </div>
<div class="level is-flex" style="padding-bottom: 1rem;"> <div class="level is-flex pb-4">
<div class="level-left is-hidden-mobile" style="margin-right: 0.5rem;"> <div class="level-left is-hidden-mobile mr-2">
<small>1.1.0-SNAPSHOT</small> <small>1.1.0-SNAPSHOT</small>
</div> </div>
<div <div
@@ -2060,22 +2062,22 @@
<div style="margin-left: auto;"> <div style="margin-left: auto;">
<div class="is-flex"> <div class="is-flex">
<span <span
class="level-item" class="level-item p-2"
style="padding: 0.5rem; border: 1px solid rgb(205, 205, 205); border-radius: 4px; cursor: pointer; pointer-events: all; margin-bottom: 0 !important;" style="border: 1px solid var(--scm-border-color); border-radius: 4px; cursor: pointer; pointer-events: all; margin-bottom: 0 !important;"
> >
<i class="fas fa-fw fa-trash has-text-info" title="Uninstall"></i> <i class="fas fa-fw fa-trash has-text-info" title="Uninstall"></i>
</span> </span>
<span <span
class="level-item" class="level-item p-2 ml-2"
style="padding: 0.5rem; border: 1px solid rgb(205, 205, 205); border-radius: 4px; cursor: pointer; pointer-events: all; margin-bottom: 0 !important; margin-left: 0.5rem;" style="border: 1px solid var(--scm-border-color); border-radius: 4px; cursor: pointer; pointer-events: all; margin-bottom: 0 !important;"
> >
<i class="fas fa-fw fa-sync-alt has-text-info" title="Update"></i> <i class="fas fa-fw fa-sync-alt has-text-info" title="Update"></i>
</span> </span>
</div> </div>
</div> </div>
</div> </div>
<div class="level is-flex" style="padding-bottom: 1rem;"> <div class="level is-flex pb-4">
<div class="level-left is-hidden-mobile" style="margin-right: 0.5rem;"> <div class="level-left is-hidden-mobile mr-2">
<small>2.6.0</small> <small>2.6.0</small>
</div> </div>
<div <div
@@ -2120,31 +2122,31 @@
<ul class="Details__StyledMemberList-sc-1uy93gc-0 cmCFmV"> <ul class="Details__StyledMemberList-sc-1uy93gc-0 cmCFmV">
<li <li
class="" class=""
style="display: inline-block; margin-right: 0.25rem; padding: 0.25rem 0.75rem; border: 1px solid rgb(238, 238, 238); border-radius: 4px;" style="display: inline-block; margin-right: 0.25rem; padding: 0.25rem 0.75rem; border: 1px solid var(--scm-border-color); border-radius: 4px;"
> >
<a><i class="fas fa-user has-text-inherit"></i> mmuster</a> <a><i class="fas fa-user has-text-inherit"></i> mmuster</a>
</li> </li>
<li <li
class="" class=""
style="display: inline-block; margin-right: 0.25rem; padding: 0.25rem 0.75rem; border: 1px solid rgb(238, 238, 238); border-radius: 4px;" style="display: inline-block; margin-right: 0.25rem; padding: 0.25rem 0.75rem; border: 1px solid var(--scm-border-color); border-radius: 4px;"
> >
<a><i class="fas fa-user has-text-inherit"></i> belefant</a> <a><i class="fas fa-user has-text-inherit"></i> belefant</a>
</li> </li>
<li <li
class="" class=""
style="display: inline-block; margin-right: 0.25rem; padding: 0.25rem 0.75rem; border: 1px solid rgb(238, 238, 238); border-radius: 4px;" style="display: inline-block; margin-right: 0.25rem; padding: 0.25rem 0.75rem; border: 1px solid var(--scm-border-color); border-radius: 4px;"
> >
<a><i class="fas fa-user has-text-inherit"></i> aschultz</a> <a><i class="fas fa-user has-text-inherit"></i> aschultz</a>
</li> </li>
<li <li
class="" class=""
style="display: inline-block; margin-right: 0.25rem; padding: 0.25rem 0.75rem; border: 1px solid rgb(238, 238, 238); border-radius: 4px;" style="display: inline-block; margin-right: 0.25rem; padding: 0.25rem 0.75rem; border: 1px solid var(--scm-border-color); border-radius: 4px;"
> >
<a><i class="fas fa-user has-text-inherit"></i> zgummi</a> <a><i class="fas fa-user has-text-inherit"></i> zgummi</a>
</li> </li>
<li <li
class="" class=""
style="display: inline-block; margin-right: 0.25rem; padding: 0.25rem 0.75rem; border: 1px solid rgb(238, 238, 238); border-radius: 4px;" style="display: inline-block; margin-right: 0.25rem; padding: 0.25rem 0.75rem; border: 1px solid var(--scm-border-color); border-radius: 4px;"
> >
<a><i class="fas fa-user has-text-inherit"></i> nobody</a> <a><i class="fas fa-user has-text-inherit"></i> nobody</a>
</li> </li>

View File

@@ -21,6 +21,30 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE. * SOFTWARE.
*/ */
:root {
--scm-white-color: #{$white};
--scm-light-color: #{$light};
--scm-dark-color: #{$dark};
--scm-primary-color: #{$primary};
--scm-link-color: #{$link};
--scm-info-color: #{$info};
--scm-success-color: #{$success};
--scm-warning-color: #{$warning};
--scm-danger-color: #{$danger};
--scm-secondary-least-color: #{$secondary-least};
--scm-secondary-less-color: #{$secondary-less};
--scm-secondary-color: #{$secondary};
--scm-secondary-more-color: #{$secondary-more};
--scm-secondary-most-color: #{$secondary-most};
--scm-border-color: #{$border};
--scm-border: #{$border-width} solid #{$border};
--scm-popover-border-color: #{$white};
}
// TODO split into multiple files // TODO split into multiple files
.is-ellipsis-overflow { .is-ellipsis-overflow {
@@ -84,15 +108,6 @@ hr.header-with-actions {
} }
} }
footer.footer {
background-color: $white-ter;
padding: inherit;
a {
color: darken($info, 15%);
}
}
.has-hover-background-blue:hover { .has-hover-background-blue:hover {
background-color: scale-color($blue, $alpha: -90%); background-color: scale-color($blue, $alpha: -90%);
} }
@@ -113,6 +128,61 @@ footer.footer {
background-color: $blue-light; background-color: $blue-light;
} }
.has-text-secondary-least {
color: $secondary-least !important;
}
a.has-text-secondary-least:hover,
a.has-text-secondary-least:focus {
color: lighten($secondary-least, 10%) !important;
}
.has-background-secondary-least {
background-color: $secondary-least !important;
}
.has-text-secondary-less {
color: $secondary-less !important;
}
a.has-text-secondary-less:hover,
a.has-text-secondary-less:focus {
color: lighten($secondary-less, 10%) !important;
}
.has-background-secondary-less {
background-color: $secondary-less !important;
}
.has-text-secondary {
color: $secondary !important;
}
a.has-text-secondary:hover,
a.has-text-secondary:focus {
color: lighten($secondary, 10%) !important;
}
.has-background-secondary {
background-color: $secondary !important;
}
.has-text-secondary-more {
color: $secondary-more !important;
}
a.has-text-secondary-more:hover,
a.has-text-secondary-more:focus {
color: lighten($secondary-more, 10%) !important;
}
.has-background-secondary-more {
background-color: $secondary-more !important;
}
.has-text-secondary-most {
color: $secondary-most !important;
}
a.has-text-secondary-most:hover,
a.has-text-secondary-most:focus {
color: lighten($secondary-most, 10%) !important;
}
.has-background-secondary-most {
background-color: $secondary-most !important;
}
// border and background colors // border and background colors
.has-background-dark-75 { .has-background-dark-75 {
background-color: $dark-75; background-color: $dark-75;
@@ -181,7 +251,7 @@ footer.footer {
// tags // tags
.tag:not(body) { .tag:not(body) {
border: 1px solid transparent; border: 1px solid transparent;
background-color: $white; background-color: $scheme-main;
&.is-delete { &.is-delete {
background-color: $light; background-color: $light;
@@ -193,7 +263,7 @@ footer.footer {
} }
&.is-outlined { &.is-outlined {
background-color: $white; background-color: $scheme-main;
} }
&.is-black.is-outlined { &.is-black.is-outlined {
color: $black; color: $black;
@@ -237,6 +307,13 @@ footer.footer {
} }
} }
.popover {
&:before {
border-bottom-color: $popover-background-color;
border-left-color: $popover-background-color;
}
}
// buttons // buttons
.button { .button {
padding-left: 1.5em; padding-left: 1.5em;
@@ -251,7 +328,7 @@ footer.footer {
&.is-warning, &.is-warning,
&.is-danger { &.is-danger {
&.is-outlined { &.is-outlined {
background-color: $white; background-color: inherit;
} }
} }
@@ -347,8 +424,14 @@ footer.footer {
} }
} }
.notifications .dropdown-menu:before { .notifications .dropdown-menu {
border: 0.4rem solid transparent; border: 1px solid $border;
&:before {
border: 0.4rem solid transparent;
border-bottom-color: $border;
border-left-color: $border;
}
} }
@import "~@fortawesome/fontawesome-free/scss/fontawesome"; @import "~@fortawesome/fontawesome-free/scss/fontawesome";
@@ -480,7 +563,7 @@ ul.is-separated {
tr { tr {
a { a {
color: #363636; color: $grey-darker;
} }
&.border-is-green td:first-child { &.border-is-green td:first-child {
border-left-color: $green; border-left-color: $green;
@@ -510,7 +593,7 @@ ul.is-separated {
&:hover { &:hover {
td { td {
background-color: whitesmoke; background-color: $white-ter;
&.is-darker { &.is-darker {
background-color: #e1e1e1; background-color: #e1e1e1;
@@ -531,15 +614,15 @@ ul.is-separated {
} }
td { td {
padding: 1em 1.25em; padding: 1em 1.25em;
background-color: #fafafa; background-color: $white-bis;
border-bottom: 1px solid whitesmoke; border-bottom: 1px solid $white-ter;
border-left-color: $grey; border-left-color: $grey;
&:first-child { &:first-child {
border-left: 3px solid; border-left: 3px solid;
} }
&.is-darker { &.is-darker {
background-color: whitesmoke; background-color: $white-ter;
} }
// Explicitly "remove" styles from td element to use it as an empty table column header, which is necessary for // Explicitly "remove" styles from td element to use it as an empty table column header, which is necessary for
// a11y because an empty th element is not allowed. // a11y because an empty th element is not allowed.
@@ -550,7 +633,7 @@ ul.is-separated {
} }
} }
&.is-hoverable tbody tr:not(.is-selected):hover { &.is-hoverable tbody tr:not(.is-selected):hover {
background-color: whitesmoke; background-color: $white-ter;
} }
thead th { thead th {
background-color: transparent; background-color: transparent;
@@ -579,8 +662,8 @@ ul.is-separated {
} }
.panel-footer { .panel-footer {
background-color: whitesmoke; background-color: $panel-heading-background-color;
color: #363636; color: $panel-heading-color;
font-size: 1.25em; font-size: 1.25em;
font-weight: 300; font-weight: 300;
line-height: 1.25; line-height: 1.25;
@@ -667,7 +750,7 @@ form .field:not(.is-grouped) {
.tabs.is-toggle li.is-active a:hover { .tabs.is-toggle li.is-active a:hover {
background-color: #28b1e8; background-color: #28b1e8;
border-color: #28b1e8; border-color: #28b1e8;
color: #fff; color: $white;
} }
} }
@@ -678,7 +761,7 @@ form .field:not(.is-grouped) {
position: absolute; position: absolute;
right: 0; right: 0;
top: 0; top: 0;
background-color: whitesmoke; background-color: $white-ter;
} }
// menu // menu
@@ -692,7 +775,6 @@ form .field:not(.is-grouped) {
display: flex; display: flex;
height: 3.2rem; height: 3.2rem;
align-items: center; align-items: center;
color: #fff;
font-size: 1em; font-size: 1em;
font-weight: 600; font-weight: 600;
background-color: $blue; background-color: $blue;
@@ -707,12 +789,11 @@ form .field:not(.is-grouped) {
} }
.menu-list { .menu-list {
a { a {
color: #333;
padding: 1rem; padding: 1rem;
&.is-active { &.is-active {
color: $info; color: $link;
background-color: #fff; background-color: $scheme-main;
} }
} }

View File

@@ -0,0 +1,308 @@
/*
* MIT License
*
* Copyright (c) 2020-present Cloudogu GmbH and Contributors
*
* 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.
*/
@import "utils/_pre.scss";
$turquoise: #55abad;
$blue: #599dad;
$cyan: $blue;
$green: #419374;
$yellow: #ccad5e;
$red: #ae4e6b;
$white: $grey-lighter;
$light: $grey-dark;
$primary-invert: $white;
$link-invert: $white;
$info-invert: $white;
$success-invert: $white;
$warning-invert: #583708;
$danger-invert: $white;
$light-invert: $white;
$dark-invert: $white;
$scheme-main: #121212;
$background: $grey-dark;
$border: $grey-dark;
$border-width: 1px;
$text: $grey-lighter;
$text-strong: $grey-lighter;
$code: lighten($red, 10%);
$code-background: lighten($scheme-main, 10%);
$link-hover: $grey;
$link-focus: $grey;
$link-active: $grey;
$secondary-least: $scheme-main;
$secondary-less: $black-ter;
$secondary: $grey;
$secondary-more: $grey-light;
$secondary-most: $white-ter;
// layout
$footer-background-color: $black-ter;
$footer-color: $text;
// element
$box-background-color: lighten($scheme-main, 2.5%);
$button-hover-color: lighten($text-strong, 2.5%);
$button-active-color: lighten($text-strong, 2.5%);
// component
$card-background-color: $box-background-color;
$menu-label-color: $text;
$menu-item-color: $text;
$menu-item-hover-background-color: $grey-dark;
$modal-card-head-background-color: $black-ter;
$modal-card-body-background-color: #17181c;
$navbar-item-color: $grey-lighter;
$navbar-item-hover-color: $navbar-item-color;
$navbar-item-active-color: $navbar-item-color;
$panel-heading-background-color: $black-ter;
// form
$input-placeholder-color: $grey-light;
$input-disabled-color: #7A7A7A;
// extension
$popover-background-color: $grey-dark;
$popover-border-color: $grey-dark;
$table-row-hover-background-color: $grey-darker;
@import "utils/_post.scss";
:root {
--scm-popover-border-color: #{$popover-border-color};
}
$dark-75: scale-color($dark, $lightness: -25%);
$dark-50: scale-color($dark, $lightness: -50%);
$dark-25: scale-color($dark, $lightness: -75%);
$info-75: scale-color($info, $lightness: -25%);
$info-50: scale-color($info, $lightness: -50%);
$info-25: scale-color($info, $lightness: -75%);
$link-75: scale-color($link, $lightness: -25%);
$link-50: scale-color($link, $lightness: -50%);
$link-25: scale-color($link, $lightness: -75%);
$primary-75: scale-color($primary, $lightness: -25%);
$primary-50: scale-color($primary, $lightness: -50%);
$primary-25: scale-color($primary, $lightness: -75%);
$success-75: scale-color($success, $lightness: -25%);
$success-50: scale-color($success, $lightness: -50%);
$success-25: scale-color($success, $lightness: -75%);
$warning-75: scale-color($warning, $lightness: -25%);
$warning-50: scale-color($warning, $lightness: -50%);
$warning-25: scale-color($warning, $lightness: -75%);
$danger-75: scale-color($danger, $lightness: -25%);
$danger-50: scale-color($danger, $lightness: -50%);
$danger-25: scale-color($danger, $lightness: -75%);
.has-background-dark-75 {
background-color: $dark-75;
}
.has-background-dark-50 {
background-color: $dark-50;
}
.has-background-dark-25 {
background-color: $dark-25;
}
.has-background-info-75 {
background-color: $info-75;
}
.has-background-info-50 {
background-color: $info-50;
}
.has-background-info-25 {
background-color: $info-25;
}
.has-background-link-75 {
background-color: $link-75;
}
.has-background-link-50 {
background-color: $link-50;
}
.has-background-link-25 {
background-color: $link-25;
}
.has-background-primary-75 {
background-color: $primary-75;
}
.has-background-primary-50 {
background-color: $primary-50;
}
.has-background-primary-25 {
background-color: $primary-25;
}
.has-background-success-75 {
background-color: $success-75;
}
.has-background-success-50 {
background-color: $success-50;
}
.has-background-success-25 {
background-color: $success-25;
}
.has-background-warning-75 {
background-color: $warning-75;
}
.has-background-warning-50 {
background-color: $warning-50;
}
.has-background-warning-25 {
background-color: $warning-25;
}
.has-background-danger-75 {
background-color: $danger-75;
}
.has-background-danger-50 {
background-color: $danger-50;
}
.has-background-danger-25 {
background-color: $danger-25;
}
:root {
--scm-secondary-background: #{$scheme-main};
--scm-secondary-text: #{$white};
--scm-border: 2px solid #{$white-ter};
--scm-hover-color: #{$grey};
--scm-column-selection: #{$link-dark};
--sh-base-color: #{$white};
--sh-font-family: Consolas, Monaco, "Andale Mono", "Ubuntu Mono", monospace;
--sh-block-background: #{$scheme-main};
--sh-inline-code-color: #ff3860;
--sh-inline-code-background: #fbe7eb;
--sh-comment-color: #9a9a9a;
--sh-punctuation-color: #999999;
--sh-property-color: #2c99c7;
--sh-selector-color: #009dff;
--sh-operator-color: #999999;
--sh-operator-bg: inherit;
--sh-variable-color: #c386ca;
--sh-function-color: #ff6181;
--sh-keyword-color: #00a984;
--sh-selected-color: #{$warning-dark};
--sh-highlight-background: #f5f5f5;
--sh-highlight-accent: #99d8f3;
--diff-background-color: #{$scheme-main};
--diff-text-color: #{$white-bis};
--diff-font-family: Consolas, Courier, monospace;
--diff-selection-background-color: #{desaturate(#b3d7ff, 20%)};
--diff-gutter-insert-background-color: #{desaturate(#05c71d, 20%)};
--diff-gutter-delete-background-color: #{desaturate(#eb7a85, 20%)};
--diff-gutter-selected-background-color: #{desaturate(#fffce0, 20%)};
--diff-code-insert-background-color: #{desaturate(#05240b, 20%)};
--diff-code-delete-background-color: #{desaturate(#230608, 20%)};
--diff-code-insert-edit-background-color: #{desaturate(#c0dc91, 20%)};
--diff-code-delete-edit-background-color: #{desaturate(#000, 20%)};
--diff-code-selected-background-color: #{desaturate(#fffce0, 20%)};
--diff-omit-gutter-line-color: #cb2a1d;
}
.menu-list {
a {
> li {
border-color: $grey-light;
}
li:last-child {
border-color: $grey-light;
}
}
}
//popover
.popover {
border: 1px solid $popover-border-color;
}
.modal-card {
border: 1px solid $border;
& .modal-close,
& .delete {
background-color: $background;
}
}
.card-table {
tr {
a {
color: $grey-light;
}
&:hover {
td {
background-color: $grey-darker;
&.is-darker {
background-color: $black-ter;
}
}
}
}
td {
background-color: $black-ter;
border-bottom: none;
&.is-darker {
background-color: $grey-dark;
}
}
&.is-hoverable tbody tr:not(.is-selected):hover {
background-color: $grey-darker;
}
}
.diff-code-conflict {
background-color: #332900;
}
.diff-gutter-conflict {
background-color: #bc9f2a;
}
.diff-decoration-content div {
color: $scheme-main;
}
//Display darker version of background image
.has-scm-background {
background-image: url(images/scmManagerHeroDark.jpg) !important;
}
.has-hover-visible:hover {
color: $grey !important;
}

View File

@@ -24,14 +24,20 @@
@import "utils/_pre.scss"; @import "utils/_pre.scss";
// $text: $white; $red: #e63453;
$scheme-main: #050514; $scheme-main: #050514;
$background: $grey-dark; $background: $grey-dark;
$text: $white-ter; $text: $white-ter;
$text-strong: $white-bis; $text-strong: $white-bis;
$danger: #e63453; $secondary-least: $scheme-main;
$code: lighten($danger, 25%); $secondary-less: $black-ter;
$secondary: $white-bis;
$secondary-more: $white-ter;
$secondary-most: $white;
$code: lighten($red, 25%);
$primary-invert: #050514; $primary-invert: #050514;
$info-invert: #050514; $info-invert: #050514;
$link-invert: #050514; $link-invert: #050514;
@@ -41,7 +47,7 @@ $danger-invert: #050514;
$light-gray: #f2f2f2; $light-gray: #f2f2f2;
$footer-background-color: $grey-dark; $footer-background-color: $black-ter;
$footer-color: $white-ter; $footer-color: $white-ter;
//make horizontal lines pop more //make horizontal lines pop more
@@ -50,6 +56,11 @@ $hr-background-color: $white-bis;
$box-background-color: scale-color($scheme-main, $lightness: 15%); $box-background-color: scale-color($scheme-main, $lightness: 15%);
$box-background-color: $grey-darker; $box-background-color: $grey-darker;
$menu-label-color: $scheme-main;
$menu-item-color: $white-ter;
$panel-heading-background-color: $black-ter;
$modal-card-head-background-color: $black-ter; $modal-card-head-background-color: $black-ter;
$modal-card-body-background-color: $scheme-main; $modal-card-body-background-color: $scheme-main;
@@ -64,13 +75,14 @@ $tooltip-background-color: $white-bis;
$tooltip-background-opacity: 0.9 !default; $tooltip-background-opacity: 0.9 !default;
$tooltip-color: $scheme-main; $tooltip-color: $scheme-main;
$border-width: 2px;
$border: $white-ter;
@import "utils/_post.scss"; @import "utils/_post.scss";
:root { :root {
--scm-secondary-background: #{$scheme-main}; --scm-secondary-background: #{$scheme-main};
--scm-secondary-text: #{$white}; --scm-secondary-text: #{$white};
--scm-border: 2px solid #{$white-ter};
--scm-info-color: #{$info};
--scm-hover-color: #{$grey}; --scm-hover-color: #{$grey};
--scm-column-selection: #{$link-dark}; --scm-column-selection: #{$link-dark};
@@ -108,17 +120,6 @@ $tooltip-color: $scheme-main;
} }
.button { .button {
&.is-primary,
&.is-info,
&.is-link,
&.is-success,
&.is-warning,
&.is-danger {
&.is-outlined {
background-color: inherit;
}
}
&.is-primary:hover, &.is-primary:hover,
&.is-primary.is-hovered { &.is-primary.is-hovered {
background-color: scale-color($primary, $lightness: -5%); background-color: scale-color($primary, $lightness: -5%);
@@ -205,36 +206,21 @@ $tooltip-color: $scheme-main;
} }
} }
.menu-label {
color: $scheme-main;
}
.menu-list {
a {
color: $white-ter;
&.is-active {
background-color: $scheme-main;
}
}
}
//footer is overwritten in _main.scss //footer is overwritten in _main.scss
footer.footer { footer.footer {
background-color: $black-ter;
a { a {
color: scale-color($link, $lightness: 25%); color: scale-color($link, $lightness: 25%);
} }
} }
.card { .card {
border: 1px solid $white-ter; border: 1px solid $border;
box-shadow: none; box-shadow: none;
} }
//card //card
.modal-card { .modal-card {
border: 1px solid $white-ter; border: 1px solid $border;
& .modal-close, & .modal-close,
& .delete { & .delete {
@@ -257,9 +243,6 @@ footer.footer {
background-color: $grey-darker; background-color: $grey-darker;
} }
} }
a {
color: $link;
}
} }
} }
td { td {
@@ -278,18 +261,8 @@ footer.footer {
} }
} }
// panels
.panel { .panel {
border-color: $white-bis; border-color: $white-bis;
.panel-heading {
background-color: $black-ter;
}
.panel-footer {
background-color: $black-ter;
color: $white-bis;
}
} }
//diffs //diffs
@@ -338,9 +311,6 @@ td:first-child.diff-gutter-conflict:before {
//inline member tags //inline member tags
.tag:not(body) { .tag:not(body) {
border: 1px solid transparent;
background-color: $white;
&.is-delete { &.is-delete {
&::before, &::before,
&::after { &::after {
@@ -363,11 +333,6 @@ td:first-child.diff-gutter-conflict:before {
&.is-light .has-text-link { &.is-light .has-text-link {
color: scale-color($link, $lightness: -50%) !important; color: scale-color($link, $lightness: -50%) !important;
} }
//outline-tags
&.is-outlined {
background-color: $scheme-main;
}
} }
//cards receive white border //cards receive white border
@@ -376,21 +341,7 @@ td:first-child.diff-gutter-conflict:before {
} }
.popover { .popover {
border: 1px solid $white-ter; border: 1px solid $border;
&:before {
border-bottom-color: $grey-dark;
border-left-color: $grey-dark;
}
}
.notifications .dropdown-menu {
border: 1px solid $white-ter;
&:before {
border-bottom-color: $white-ter;
border-left-color: $white-ter;
}
} }
//Display darker version of background image //Display darker version of background image
@@ -398,61 +349,6 @@ td:first-child.diff-gutter-conflict:before {
background-image: url(images/scmManagerHeroDark.jpg) !important; background-image: url(images/scmManagerHeroDark.jpg) !important;
} }
.has-text-secondary-least {
color: $scheme-main !important;
}
a.has-text-secondary-least:hover,
a.has-text-secondary-least:focus {
color: lighten($scheme-main, 10%) !important;
}
.has-background-secondary-least {
background-color: $scheme-main !important;
}
.has-text-secondary-less {
color: $black-ter !important;
}
a.has-text-secondary-less:hover,
a.has-text-secondary-less:focus {
color: lighten($black-ter, 10%) !important;
}
.has-background-secondary-less {
background-color: $black-ter !important;
}
.has-text-secondary {
color: $white-bis !important;
}
a.has-text-secondary:hover,
a.has-text-secondary:focus {
color: lighten($white-bis, 10%) !important;
}
.has-background-secondary {
background-color: $white-bis !important;
}
.has-text-secondary-more {
color: $white-ter !important;
}
a.has-text-secondary-more:hover,
a.has-text-secondary-more:focus {
color: lighten($white-ter, 10%) !important;
}
.has-background-secondary-more {
background-color: $white-ter !important;
}
.has-text-secondary-most {
color: $white !important;
}
a.has-text-secondary-most:hover,
a.has-text-secondary-most:focus {
color: lighten($white, 10%) !important;
}
.has-background-secondary-most {
background-color: $white !important;
}
.has-background-light { .has-background-light {
color: $grey-dark; color: $grey-dark;
} }
@@ -461,15 +357,8 @@ a.has-text-secondary-most:focus {
color: $white-bis !important; color: $white-bis !important;
} }
[disabled].textarea::placeholder,
[disabled].input::placeholder,
fieldset[disabled] .textarea::placeholder,
fieldset[disabled] .input::placeholder {
color: $white-bis;
}
.repository-export-info-box { .repository-export-info-box {
background-color: $high-contrast-info-25; background-color: scale-color($info, $lightness: -75%);
border: 0.2rem solid; border: 0.2rem solid;
} }

View File

@@ -23,18 +23,38 @@
*/ */
@import "utils/_pre.scss"; @import "utils/_pre.scss";
// colors defined in variables/commons.scss
$subtitle-color: #666;
$warning-invert: #88550d; $warning-invert: #88550d;
$border: $grey-lighter;
$border-width: 1px;
$secondary-least: $white;
$secondary-less: $white-ter;
$secondary: $grey-light;
$secondary-more: $grey-darker;
$secondary-most: $black;
// layout
$footer-background-color: $white-ter;
// element
$button-disabled-opacity: 0.25; $button-disabled-opacity: 0.25;
$subtitle-color: #666;
// component
$menu-label-color: $white;
$menu-item-color: #333;
// extension
$popover-background-color: $grey-light;
@import "utils/_post.scss"; @import "utils/_post.scss";
:root { :root {
--scm-secondary-background: #{$white}; --scm-secondary-background: #{$white};
--scm-secondary-text: #{$black}; --scm-secondary-text: #{$black};
--scm-border: 1px solid #dbdbdb;
--scm-info-color: #{$info};
--scm-hover-color: #{$black-ter}; --scm-hover-color: #{$black-ter};
--scm-column-selection: #{$link-25}; --scm-column-selection: #{$link-25};
@@ -57,72 +77,31 @@ $button-disabled-opacity: 0.25;
--sh-highlight-accent: #99d8f3; --sh-highlight-accent: #99d8f3;
} }
.button {
&.is-primary,
&.is-info,
&.is-link,
&.is-success,
&.is-warning,
&.is-danger {
&.is-outlined {
background-color: $white;
}
}
}
footer.footer {
a {
color: darken($info, 15%);
}
}
.popover:before { .popover:before {
border-bottom-color: white; border-bottom-color: white;
border-left-color: white; border-left-color: white;
box-shadow: -1px 1px 2px rgba(10, 10, 10, 0.2); box-shadow: -1px 1px 2px rgba(10, 10, 10, 0.2);
} }
.notifications .dropdown-menu:before {
border-bottom-color: white;
border-left-color: white;
}
.has-text-secondary-least {
color: $white !important;
}
a.has-text-secondary-least:hover,
a.has-text-secondary-least:focus {
color: lighten($white, 10%) !important;
}
.has-background-secondary-least {
background-color: $white !important;
}
.has-text-secondary-less {
color: $white-ter !important;
}
a.has-text-secondary-less:hover,
a.has-text-secondary-less:focus {
color: lighten($white-ter, 10%) !important;
}
.has-background-secondary-less {
background-color: $white-ter !important;
}
.has-text-secondary {
color: $grey-light !important;
}
a.has-text-secondary:hover,
a.has-text-secondary:focus {
color: lighten($grey-light, 10%) !important;
}
.has-background-secondary {
background-color: $grey-light !important;
}
.has-text-secondary-more {
color: $grey-darker !important;
}
a.has-text-secondary-more:hover,
a.has-text-secondary-more:focus {
color: lighten($grey-darker, 10%) !important;
}
.has-background-secondary-more {
background-color: $grey-darker !important;
}
.has-text-secondary-most {
color: $black !important;
}
a.has-text-secondary-most:hover,
a.has-text-secondary-most:focus {
color: lighten($black, 10%) !important;
}
.has-background-secondary-most {
background-color: $black !important;
}
.has-hover-visible:hover { .has-hover-visible:hover {
color: $grey-darker !important; color: $grey-darker !important;
} }

View File

@@ -21,16 +21,26 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE. * SOFTWARE.
*/ */
//$link: #007EB0;
$info: #33b2e8;
$turquoise: #00d1df; $turquoise: #00d1df;
$blue: #33b2e8; $blue: #33b2e8;
$cyan: $blue; $cyan: $blue;
$green: #00c79b; $green: #00c79b;
$warning: #ffdd57; $yellow: #ffdd57;
$red: #ff3860;
$blue-light: #98d8f3; $blue-light: #98d8f3;
$danger: #ff3860;
$family-monospace: Consolas, "Andale Mono WT", "Andale Mono", "Lucida Console", "Lucida Sans Typewriter", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Liberation Mono", "Nimbus Mono L", Monaco, "Courier New", Courier, monospace; $family-monospace: Consolas, "Andale Mono WT", "Andale Mono", "Lucida Console", "Lucida Sans Typewriter", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Liberation Mono", "Nimbus Mono L", Monaco, "Courier New", Courier, monospace;
$input-border-color: $blue-light; $input-border-color: $blue-light;
$navbar-background-color: transparent;
$navbar-item-color: $white;
$navbar-item-hover-color: $navbar-item-color;
$navbar-item-active-color: $navbar-item-color;
$navbar-item-hover-background-color: rgba(10, 10, 10, 0.1);
$footer-padding: inherit;
$popover-border-color: $white;

View File

@@ -43,24 +43,3 @@ $danger-75: scale-color($danger, $lightness: 25%);
$danger-50: scale-color($danger, $lightness: 50%); $danger-50: scale-color($danger, $lightness: 50%);
$danger-25: scale-color($danger, $lightness: 75%); $danger-25: scale-color($danger, $lightness: 75%);
$high-contrast-dark-75: scale-color($dark, $lightness: -25%);
$high-contrast-dark-50: scale-color($dark, $lightness: -50%);
$high-contrast-dark-25: scale-color($dark, $lightness: -75%);
$high-contrast-info-75: scale-color($info, $lightness: -25%);
$high-contrast-info-50: scale-color($info, $lightness: -50%);
$high-contrast-info-25: scale-color($info, $lightness: -75%);
$high-contrast-link-75: scale-color($link, $lightness: -25%);
$high-contrast-link-50: scale-color($link, $lightness: -50%);
$high-contrast-link-25: scale-color($link, $lightness: -75%);
$high-contrast-primary-75: scale-color($primary, $lightness: -25%);
$high-contrast-primary-25: scale-color($primary, $lightness: -75%);
$high-contrast-primary-50: scale-color($primary, $lightness: -50%);
$high-contrast-success-75: scale-color($success, $lightness: -25%);
$high-contrast-success-50: scale-color($success, $lightness: -50%);
$high-contrast-success-25: scale-color($success, $lightness: -75%);
$high-contrast-warning-75: scale-color($warning, $lightness: -25%);
$high-contrast-warning-50: scale-color($warning, $lightness: -50%);
$high-contrast-warning-25: scale-color($warning, $lightness: -75%);
$high-contrast-danger-75: scale-color($danger, $lightness: -25%);
$high-contrast-danger-50: scale-color($danger, $lightness: -50%);
$high-contrast-danger-25: scale-color($danger, $lightness: -75%);

View File

@@ -0,0 +1,67 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
viewBox="0 0 337.33 291.79">
<defs>
<style>
.cls-1{fill:none;}.cls-2{fill:#c7c7c7;}.cls-3{clip-path:url(#clip-path);}.cls-4{fill:url(#uv5);}.cls-5{clip-path:url(#clip-path-2);}.cls-6{fill:url(#uv5-2);}.cls-7{clip-path:url(#clip-path-3);}.cls-8{fill:url(#uv5-3);}.cls-9{clip-path:url(#clip-path-4);}.cls-10{fill:url(#uv5-4);}.cls-11{clip-path:url(#clip-path-5);}.cls-12{fill:url(#uv5-5);}.cls-13{fill:#f5f4f5;}.cls-14{clip-path:url(#clip-path-6);}.cls-15{fill:url(#uv5-6);}.cls-16{clip-path:url(#clip-path-7);}.cls-17{fill:url(#uv5-7);}.cls-18{clip-path:url(#clip-path-8);}.cls-19{fill:url(#uv5-8);}.cls-20{clip-path:url(#clip-path-9);}.cls-21{fill:url(#uv5-9);}.cls-22{clip-path:url(#clip-path-10);}.cls-23{fill:url(#uv5-10);}.cls-24{clip-path:url(#clip-path-11);}.cls-25{fill:url(#uv5-11);}.cls-26{clip-path:url(#clip-path-12);}.cls-27{fill:url(#uv5-12);}.cls-28{clip-path:url(#clip-path-13);}.cls-29{fill:url(#uv5-13);}.cls-30{clip-path:url(#clip-path-14);}.cls-31{fill:url(#uv5-14);}.cls-32{clip-path:url(#clip-path-15);}.cls-33{fill:url(#uv5-15);}.cls-34{fill:url(#uv5-16);}.cls-35{fill:#48c0ec;}
</style>
<clipPath id="clip-path">
<path class="cls-1"
d="M123.75,284.91h0a37.64,37.64,0,0,1,5-11.66c37.45-93.06,145.64-135,203.65-145.07l0-.28a158.77,158.77,0,0,0-20.84-9.35C284.33,126,147.39,168.67,123.75,284.91"/>
</clipPath>
<linearGradient id="uv5" x1="-611.94" y1="244.82" x2="-607.72" y2="244.82"
gradientTransform="translate(30388.6 -11906.59) scale(49.46)" gradientUnits="userSpaceOnUse">
<stop offset="0" stop-color="#47c0eb"/>
<stop offset="0.5" stop-color="#34aae1"/>
<stop offset="1" stop-color="#2c94d1"/>
</linearGradient>
<clipPath id="clip-path-2">
<path class="cls-1"
d="M126.64,264.88c-.72,4.83-1.46,9.68-2.16,14.5C142.86,174.89,250,128.47,295.2,113.38a209.53,209.53,0,0,0-23.88-4.86c-48.19,20.91-131.07,69-144.68,156.36"/>
</clipPath>
<linearGradient id="uv5-2" x1="-612.5" y1="247.75" x2="-608.28" y2="247.75"
gradientTransform="translate(24899.69 -9827.16) scale(40.45)" xlink:href="#uv5"/>
<clipPath id="clip-path-3">
<path class="cls-1"
d="M229.91,106.72C171,144.22,138.44,187.79,130.35,240l-2.17,14.52c4-22.83,16.25-92.3,125.74-147.71-4.18-.25-8.35-.37-12.48-.37q-5.82,0-11.53.32"/>
</clipPath>
<linearGradient id="uv5-3" x1="-613.54" y1="253.37" x2="-609.32" y2="253.37"
gradientTransform="translate(18409.91 -7369.32) scale(29.8)" xlink:href="#uv5"/>
<clipPath id="clip-path-4">
<path class="cls-1"
d="M188.92,114.12c-23.63,23.33-46.59,51.46-54.54,98.83-.71,4.83-1.45,9.66-2.17,14.51,3.64-20.66,12.15-69,78-118.59a145.93,145.93,0,0,0-21.29,5.25"/>
</clipPath>
<linearGradient id="uv5-4" x1="-615.95" y1="266.54" x2="-611.73" y2="266.54"
gradientTransform="translate(11517.07 -4758.34) scale(18.48)" xlink:href="#uv5"/>
<clipPath id="clip-path-5">
<path class="cls-1"
d="M169.44,122.74a72.54,72.54,0,0,0-10,6.87C148.85,148,142.32,162.81,138.11,188l-2.18,14.51c2.67-15.14,8.21-46.65,39.32-82.89-2,1-3.94,2-5.81,3.09"/>
</clipPath>
<linearGradient id="uv5-5" x1="-622.15" y1="300.88" x2="-617.93" y2="300.88"
gradientTransform="translate(5932.63 -2642.25) scale(9.32)" xlink:href="#uv5"/>
</defs>
<path class="cls-2"
d="M5,6.88l-.14.23C44.09,53.81,101.7,159.19,69,257.93a39.06,39.06,0,0,1-4.39,13.59c60.23-108.11-20.1-234-36.82-258.13A161.47,161.47,0,0,0,5,6.88"/>
<path class="cls-2"
d="M68.32,265.66C123.78,170.59,70,62.34,44.3,20.22A214.65,214.65,0,0,1,66.46,32.31C90.64,81,124.08,174.43,76.33,252.72q-4,6.48-8,12.94"/>
<path class="cls-2"
d="M82.08,243.43c12.11-20.76,49-84-.65-200.91a215.33,215.33,0,0,1,19.06,16c21.56,69,18.14,125.27-10.41,172Z"/>
<path class="cls-2"
d="M97,219.34c11-18.8,36.64-62.8,17.68-146A151.39,151.39,0,0,1,128,91.69c3.07,34.26,2.43,71.87-23,114.7l-8,13"/>
<path class="cls-2"
d="M110.75,197.11c8-13.78,24.75-42.45,24.39-91.91.94,2.11,1.78,4.22,2.54,6.33A76.46,76.46,0,0,1,141,123.65c-4,21.65-8.7,37.72-22.26,60.52Z"/>
<g class="cls-3">
<rect class="cls-4" x="123.75" y="118.55" width="208.71" height="166.36"/>
</g>
<g class="cls-5">
<rect class="cls-6" x="124.48" y="108.52" width="170.72" height="170.86"/>
</g>
<g class="cls-7">
<rect class="cls-8" x="128.18" y="106.4" width="125.73" height="148.07"/>
</g>
<g class="cls-9">
<rect class="cls-10" x="132.21" y="108.87" width="78" height="118.59"/>
</g>
<g class="cls-11">
<rect class="cls-12" x="135.93" y="119.65" width="39.31" height="82.88"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.7 KiB

View File

@@ -29,10 +29,18 @@
linkElement.rel = 'stylesheet'; linkElement.rel = 'stylesheet';
linkElement.type = 'text/css'; linkElement.type = 'text/css';
var theme = localStorage.getItem('scm.theme'); var theme = localStorage.getItem('scm.theme');
if (theme === 'highcontrast') { if (theme === 'light') {
linkElement.href = "{{ contextPath }}/assets/ui-theme-light.css"
} else if (theme === 'dark') {
linkElement.href = "{{ contextPath }}/assets/ui-theme-dark.css"
} else if (theme === 'highcontrast') {
linkElement.href = "{{ contextPath }}/assets/ui-theme-highcontrast.css" linkElement.href = "{{ contextPath }}/assets/ui-theme-highcontrast.css"
} else { } else {
linkElement.href = "{{ contextPath }}/assets/ui-theme-light.css" if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) {
linkElement.href = "{{ contextPath }}/assets/ui-theme-dark.css"
} else {
linkElement.href = "{{ contextPath }}/assets/ui-theme-light.css"
}
} }
document.head.appendChild(linkElement); document.head.appendChild(linkElement);
</script> </script>

View File

@@ -105,11 +105,19 @@
"submit": "Anwenden", "submit": "Anwenden",
"light": { "light": {
"displayName": "Hell", "displayName": "Hell",
"description": "'Hell' is das Standard-Design des SCM-Managers" "description": "Hell is das Standard-Design des SCM-Managers"
}, },
"highcontrast": { "highcontrast": {
"displayName": "Hoher Kontrast", "displayName": "Hoher Kontrast",
"description": "'Hoher Kontrast' ist ein dunkles Design mit einem hohen Kontrast" "description": "Hoher Kontrast ist ein dunkles Design mit einem hohen Kontrast"
},
"dark": {
"displayName": "Dunkel",
"description": "„Dunkel“ ist ein entspannteres, dunkles Design"
},
"systemdefault": {
"displayName": "Systemstandard",
"description": "Verwendet die Standardeinstellung des Systems"
} }
} }
}, },

View File

@@ -111,6 +111,14 @@
"highcontrast": { "highcontrast": {
"displayName": "High contrast", "displayName": "High contrast",
"description": "The high contrast mode is a dark theme with a high contrast between the colors" "description": "The high contrast mode is a dark theme with a high contrast between the colors"
},
"dark": {
"displayName": "Dark",
"description": "The dark mode is a more relaxed, dark theme"
},
"systemdefault": {
"displayName": "System default",
"description": "Use the default setting of the system"
} }
} }
}, },

View File

@@ -30,7 +30,7 @@ type Props = {
}; };
const ActionWrapper = styled.div` const ActionWrapper = styled.div`
border: 2px solid #e9f7fd; border: 2px solid var(--scm-border-color);
`; `;
export default class PluginBottomActions extends React.Component<Props> { export default class PluginBottomActions extends React.Component<Props> {

View File

@@ -26,9 +26,8 @@ import styled from "styled-components";
import { devices } from "@scm-manager/ui-components"; import { devices } from "@scm-manager/ui-components";
const HeaderButton = styled.div` const HeaderButton = styled.div`
// TODO: ersetzen?
@media screen and (max-width: ${devices.desktop.width - 1}px) { @media screen and (max-width: ${devices.desktop.width - 1}px) {
border-top: 1px solid white; border-top: 1px solid var(--scm-white-color);
margin-top: 1rem; margin-top: 1rem;
padding-top: 1rem; padding-top: 1rem;
padding-bottom: 1rem; padding-bottom: 1rem;

View File

@@ -30,12 +30,13 @@ type Props = {
icon: string; icon: string;
}; };
export const headerButtonContentClassName = "is-flex is-align-items-center is-justify-content-flex-start"; export const headerButtonContentClassName =
"is-flex is-align-items-center is-justify-content-flex-start has-text-inherit";
const HeaderButtonContent: FC<Props> = ({ burgerMode, icon, label }) => ( const HeaderButtonContent: FC<Props> = ({ burgerMode, icon, label }) => (
<> <>
<Icon title={label} name={icon} color="white" className={burgerMode ? "is-size-5" : "is-size-4"} /> <Icon title={label} name={icon} color="inherit" className={burgerMode ? "is-size-5" : "is-size-4"} />
<span className="has-text-white">{" " + label}</span> <span>{" " + label}</span>
</> </>
); );

View File

@@ -86,9 +86,9 @@ class InfoBox extends React.Component<Props> {
"is-align-items-center" "is-align-items-center"
)} )}
> >
<Icon className="has-text-blue-light mb-2 fa-2x" name={icon} color="inherit" alt="" /> <Icon className="mb-2 fa-2x" name={icon} color="white" alt="" />
<div className="is-size-4">{t("login." + type)}</div> <div className="is-size-4 has-text-white">{t("login." + type)}</div>
<div className="is-size-4">{t("login.tip")}</div> <div className="is-size-4 has-text-white">{t("login.tip")}</div>
</FixedSizedIconWrapper> </FixedSizedIconWrapper>
</figure> </figure>
{this.renderBody()} {this.renderBody()}

View File

@@ -42,17 +42,20 @@ const TopMarginBox = styled.div`
`; `;
const AvatarWrapper = styled.figure` const AvatarWrapper = styled.figure`
margin-top: -70px; display: flex;
padding-bottom: 20px; justify-content: center;
margin: -70px auto 20px;
width: 128px;
height: 128px;
background: var(--scm-white-color);
border: 1px solid lightgray;
border-radius: 50%;
`; `;
const AvatarImage = styled(Image)` const AvatarImage = styled(Image)`
width: 128px; width: 75%;
height: 128px; margin-left: 0.25rem;
padding: 5px; padding: 5px;
background: white;
border: 1px solid lightgray;
border-radius: 50%;
`; `;
class LoginForm extends React.Component<Props, State> { class LoginForm extends React.Component<Props, State> {
@@ -104,7 +107,7 @@ class LoginForm extends React.Component<Props, State> {
<p className="subtitle">{t("login.subtitle")}</p> <p className="subtitle">{t("login.subtitle")}</p>
<TopMarginBox className="box"> <TopMarginBox className="box">
<AvatarWrapper> <AvatarWrapper>
<AvatarImage src="/images/blib.jpg" alt={t("login.logo-alt")} /> <AvatarImage src="/images/blibSmallLightBackground.svg" alt={t("login.logo-alt")} />
</AvatarWrapper> </AvatarWrapper>
<ErrorNotification error={this.areCredentialsInvalid()} /> <ErrorNotification error={this.areCredentialsInvalid()} />
<form onSubmit={this.handleSubmit}> <form onSubmit={this.handleSubmit}>

View File

@@ -86,7 +86,7 @@ const AlertsList: FC<Props> = ({ data }) => (
const ShieldNotificationIcon: FC = () => { const ShieldNotificationIcon: FC = () => {
const [t] = useTranslation("commons"); const [t] = useTranslation("commons");
return <Icon className="is-size-4" name="shield-alt" color="white" alt={t("alerts.shieldTitle")} />; return <Icon className="is-size-4" name="shield-alt" color="inherit" alt={t("alerts.shieldTitle")} />;
}; };
type ComponentAlert = Alert & { type ComponentAlert = Alert & {

View File

@@ -87,31 +87,15 @@ const StyledNavBar = styled.nav`
padding: 0; padding: 0;
} }
//TODO Ersetzen?
.navbar-brand { .navbar-brand {
@media screen and (max-width: ${devices.desktop.width - 1}px) { @media screen and (max-width: ${devices.desktop.width - 1}px) {
border-bottom: 1px solid white; border-bottom: 1px solid var(--scm-white-color);
} }
} }
.navbar-menu.is-active .navbar-end .navbar-item { .navbar-menu.is-active .navbar-end .navbar-item {
border-left: solid 5px transparent; border-left: solid 5px transparent;
} }
.navbar-burger {
color: #fff !important;
}
.navbar-item {
:hover:not(.logo) {
background-color: rgba(10, 10, 10, 0.1) !important;
color: #fff;
}
color: #fff !important;
background-color: transparent !important;
}
color: #fff;
background-color: transparent !important;
`; `;
type Props = { type Props = {

View File

@@ -222,7 +222,7 @@ const BellNotificationIcon: FC<BellNotificationIconProps> = ({ data }) => {
className="is-size-4" className="is-size-4"
iconStyle={counter === 0 ? "far" : "fas"} iconStyle={counter === 0 ? "far" : "fas"}
name="bell" name="bell"
color="white" color="inherit"
alt={t("notifications.bellTitle")} alt={t("notifications.bellTitle")}
/> />
); );

View File

@@ -23,15 +23,16 @@
*/ */
import React, { FC, useState } from "react"; import React, { FC, useState } from "react";
import { createA11yId, Radio, SubmitButton, Subtitle } from "@scm-manager/ui-components"; import { ButtonGroup, createA11yId, Radio, SubmitButton, Subtitle } from "@scm-manager/ui-components";
import { useForm } from "react-hook-form"; import { useForm } from "react-hook-form";
import styled from "styled-components"; import styled from "styled-components";
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import classNames from "classnames";
const LS_KEY = "scm.theme"; const LS_KEY = "scm.theme";
const useThemeState = () => { const useThemeState = () => {
const [theme] = useState(localStorage.getItem(LS_KEY) || "light"); const [theme] = useState(localStorage.getItem(LS_KEY) || "systemdefault");
const [isLoading, setLoading] = useState(false); const [isLoading, setLoading] = useState(false);
const setTheme = (name: string) => { const setTheme = (name: string) => {
@@ -47,7 +48,7 @@ type ThemeForm = {
theme: string; theme: string;
}; };
const themes = ["light", "highcontrast"]; const themes = ["light", "dark", "highcontrast", "systemdefault"];
const RadioColumn = styled.div` const RadioColumn = styled.div`
flex: none; flex: none;
@@ -60,7 +61,8 @@ const Theme: FC = () => {
register, register,
setValue, setValue,
handleSubmit, handleSubmit,
formState: { isDirty } formState: { isDirty },
watch
} = useForm<ThemeForm>({ } = useForm<ThemeForm>({
mode: "onChange", mode: "onChange",
defaultValues: { defaultValues: {
@@ -76,14 +78,23 @@ const Theme: FC = () => {
return ( return (
<> <>
<Subtitle>{t("profile.theme.subtitle")}</Subtitle> <Subtitle>{t("profile.theme.subtitle")}</Subtitle>
<form onSubmit={handleSubmit(onSubmit)}> <form className="is-flex is-flex-direction-column" onSubmit={handleSubmit(onSubmit)}>
{themes.map(theme => { {themes.map(theme => {
const a11yId = createA11yId("theme"); const a11yId = createA11yId("theme");
return ( return (
<div <div
key={theme} key={theme}
onClick={() => setValue("theme", theme, { shouldDirty: true })} onClick={() => setValue("theme", theme, { shouldDirty: true })}
className="card ml-1 mb-5 control columns is-vcentered has-cursor-pointer" className={classNames(
"card",
"ml-1",
"mb-5",
"control",
"columns",
"is-vcentered",
"has-cursor-pointer",
{ "has-background-secondary-less": theme === watch().theme }
)}
> >
<RadioColumn className="column"> <RadioColumn className="column">
<Radio {...register("theme")} value={theme} disabled={isLoading} ariaLabelledby={a11yId} /> <Radio {...register("theme")} value={theme} disabled={isLoading} ariaLabelledby={a11yId} />
@@ -95,7 +106,9 @@ const Theme: FC = () => {
</div> </div>
); );
})} })}
<SubmitButton label={t("profile.theme.submit")} loading={isLoading} disabled={!isDirty} /> <ButtonGroup className="is-justify-content-flex-end">
<SubmitButton label={t("profile.theme.submit")} loading={isLoading} disabled={!isDirty} />
</ButtonGroup>
</form> </form>
</> </>
); );

View File

@@ -30,7 +30,7 @@ import { useTranslation } from "react-i18next";
import { Branch } from "@scm-manager/ui-types"; import { Branch } from "@scm-manager/ui-types";
const ActionBar = styled.div` const ActionBar = styled.div`
border: 1px solid #dbdbdb; border: 1px solid var(--scm-border-color);
border-radius: 4px; border-radius: 4px;
font-size: 1.25em; font-size: 1.25em;
font-weight: 300; font-weight: 300;

View File

@@ -45,7 +45,7 @@ const RepositoryFormButton: FC<RepositoryForm> = ({ path, icon, label }) => {
color={isSelected ? "link is-selected" : undefined} color={isSelected ? "link is-selected" : undefined}
link={!isSelected ? href : undefined} link={!isSelected ? href : undefined}
> >
<Icon className="pr-2" name={icon} color={isSelected ? "secondary-least" : "inherit"} alt="" /> <Icon className="pr-2" name={icon} color="inherit" alt="" />
<p className={classNames("is-hidden-mobile", "is-hidden-tablet-only")}>{t(`plugins:${label}`, label)}</p> <p className={classNames("is-hidden-mobile", "is-hidden-tablet-only")}>{t(`plugins:${label}`, label)}</p>
</Button> </Button>
); );

View File

@@ -43,7 +43,7 @@ const InfoBox = styled.div`
white-space: pre-line; white-space: pre-line;
border-radius: 2px; border-radius: 2px;
border-left: 0.2rem solid; border-left: 0.2rem solid;
border-color: #33b2e8; border-color: var(--scm-info-color);
`; `;
type Props = { type Props = {

View File

@@ -42,7 +42,7 @@ type Props = {
}; };
const HeaderWrapper = styled.div` const HeaderWrapper = styled.div`
border-bottom: solid 1px #dbdbdb; border-bottom: 1px solid var(--scm-border-color);
font-size: 1.25em; font-size: 1.25em;
font-weight: 300; font-weight: 300;
line-height: 1.25; line-height: 1.25;
@@ -50,7 +50,7 @@ const HeaderWrapper = styled.div`
`; `;
const BorderBottom = styled.div` const BorderBottom = styled.div`
border-bottom: solid 1px #dbdbdb; border-bottom: 1px solid var(--scm-border-color);
`; `;
const FullWidthTitleHeader = styled.div` const FullWidthTitleHeader = styled.div`

View File

@@ -184,6 +184,7 @@ const TimestampConverter: FC = () => {
<div className="is-flex"> <div className="is-flex">
<span className="is-flex mr-5"> <span className="is-flex mr-5">
<InputField <InputField
className="m-0"
value={datetime} value={datetime}
onChange={setDatetime} onChange={setDatetime}
placeholder={t("search.syntax.utilities.datetime.format")} placeholder={t("search.syntax.utilities.datetime.format")}
@@ -194,27 +195,26 @@ const TimestampConverter: FC = () => {
</span> </span>
<span className="is-flex"> <span className="is-flex">
<InputField <InputField
className="mr-4" className="m-0 mr-4"
value={timestamp} value={timestamp}
readOnly={true} readOnly={true}
placeholder={t("search.syntax.utilities.timestampPlaceholder")} placeholder={t("search.syntax.utilities.timestampPlaceholder")}
/> />
<StyledTooltip <div className="is-flex is-align-items-center">
message={t("search.syntax.utilities.copyTimestampTooltip")} <StyledTooltip message={t("search.syntax.utilities.copyTimestampTooltip")}>
className="is-flex is-align-items-center" {copying ? (
> <span className="small-loading-spinner" />
{copying ? ( ) : (
<span className="small-loading-spinner" /> <Icon
) : ( name="clipboard"
<Icon color="inherit"
name="clipboard" className="is-size-4 fa-fw is-clickable"
color="inherit" onClick={copyTimestamp}
className="is-size-4 fa-fw is-clickable" alt={t("search.syntax.utilities.copyTimestampTooltip")}
onClick={copyTimestamp} />
alt={t("search.syntax.utilities.copyTimestampTooltip")} )}
/> </StyledTooltip>
)} </div>
</StyledTooltip>
</span> </span>
</div> </div>
); );