High contrast mode findings (#1892)

Fixes most of the flaws in high contrast mode.
This commit is contained in:
Florian Scholdei
2021-12-16 17:54:39 +01:00
committed by GitHub
parent 089862b7ef
commit 16960d742e
42 changed files with 937 additions and 722 deletions

View File

@@ -0,0 +1,2 @@
- type: fixed
description: High contrast mode flaws ([#1892](https://github.com/scm-manager/scm-manager/pull/1892))

View File

@@ -47,7 +47,7 @@ class Autocomplete extends React.Component<Props, State> {
static defaultProps = { static defaultProps = {
placeholder: "Type here", placeholder: "Type here",
loadingMessage: "Loading...", loadingMessage: "Loading...",
noOptionsMessage: "No suggestion available", noOptionsMessage: "No suggestion available"
}; };
handleInputChange = (newValue: ValueType<SelectValue>, action: ActionMeta) => { handleInputChange = (newValue: ValueType<SelectValue>, action: ActionMeta) => {
@@ -64,7 +64,7 @@ class Autocomplete extends React.Component<Props, State> {
selectValue: ValueType<SelectValue>, selectValue: ValueType<SelectValue>,
selectOptions: readonly SelectValue[] selectOptions: readonly SelectValue[]
): boolean => { ): boolean => {
const isNotDuplicated = !selectOptions.map((option) => option.label).includes(inputValue); const isNotDuplicated = !selectOptions.map(option => option.label).includes(inputValue);
const isNotEmpty = inputValue !== ""; const isNotEmpty = inputValue !== "";
return isNotEmpty && isNotDuplicated; return isNotEmpty && isNotDuplicated;
}; };
@@ -79,7 +79,7 @@ class Autocomplete extends React.Component<Props, State> {
noOptionsMessage, noOptionsMessage,
loadSuggestions, loadSuggestions,
creatable, creatable,
className, className
} = this.props; } = this.props;
return ( return (
@@ -88,6 +88,7 @@ class Autocomplete extends React.Component<Props, State> {
<div className="control"> <div className="control">
{creatable ? ( {creatable ? (
<AsyncCreatable <AsyncCreatable
className="autocomplete-entry"
cacheOptions cacheOptions
loadOptions={loadSuggestions} loadOptions={loadSuggestions}
onChange={this.handleInputChange} onChange={this.handleInputChange}
@@ -96,13 +97,13 @@ class Autocomplete extends React.Component<Props, State> {
loadingMessage={() => loadingMessage} loadingMessage={() => loadingMessage}
noOptionsMessage={() => noOptionsMessage} noOptionsMessage={() => noOptionsMessage}
isValidNewOption={this.isValidNewOption} isValidNewOption={this.isValidNewOption}
onCreateOption={(value) => { onCreateOption={value => {
this.selectValue({ this.selectValue({
label: value, label: value,
value: { value: {
id: value, id: value,
displayName: value, displayName: value
}, }
}); });
}} }}
aria-label={helpText || label} aria-label={helpText || label}

View File

@@ -110,6 +110,7 @@ const ActionBar = styled.div`
} }
`; `;
// TODO ersetzen?
const PrefixButton = styled.div` const PrefixButton = styled.div`
border-right: 1px solid lightgray; border-right: 1px solid lightgray;
`; `;

View File

@@ -41,13 +41,13 @@ class CardColumnGroup extends React.Component<Props, State> {
constructor(props: Props) { constructor(props: Props) {
super(props); super(props);
this.state = { this.state = {
collapsed: false, collapsed: false
}; };
} }
toggleCollapse = () => { toggleCollapse = () => {
this.setState((prevState) => ({ this.setState(prevState => ({
collapsed: !prevState.collapsed, collapsed: !prevState.collapsed
})); }));
}; };
@@ -89,7 +89,7 @@ class CardColumnGroup extends React.Component<Props, State> {
{icon} {icon}
</span>{" "} </span>{" "}
{url ? ( {url ? (
<Link to={url} className="has-text-dark"> <Link to={url} className="has-text-secondary-more">
{name} {name}
</Link> </Link>
) : ( ) : (

View File

@@ -40,6 +40,7 @@ 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 whitesmoke;

View File

@@ -40,7 +40,7 @@ type Props = {
const Icon: FC<Props> = ({ const Icon: FC<Props> = ({
iconStyle = "fas", iconStyle = "fas",
color = "grey-light", color = "secondary",
title, title,
name, name,
className, className,

View File

@@ -26,6 +26,7 @@ import { storiesOf } from "@storybook/react";
import styled from "styled-components"; import styled from "styled-components";
import Logo from "./Logo"; import Logo from "./Logo";
// TODO Ersetzen?
const Wrapper = styled.div` const Wrapper = styled.div`
padding: 2em; padding: 2em;
background-color: black; background-color: black;

View File

@@ -102,7 +102,7 @@ const FileInput: FC<Props> = ({
{file?.name ? ( {file?.name ? (
<span className="file-name">{file?.name}</span> <span className="file-name">{file?.name}</span>
) : ( ) : (
<span className="file-name has-text-weight-light has-text-grey-light"> <span className="file-name has-text-weight-light has-text-secondary">
{filenamePlaceholder || t("fileInput.noFileChosen")} {filenamePlaceholder || t("fileInput.noFileChosen")}
</span> </span>
)} )}

View File

@@ -60,7 +60,7 @@ const FileUpload: FC<Props> = ({ handleFile, filenamePlaceholder = "", disabled
{file?.name ? ( {file?.name ? (
<span className="file-name">{file?.name}</span> <span className="file-name">{file?.name}</span>
) : ( ) : (
<span className="file-name has-text-weight-light has-text-grey-light ">{filenamePlaceholder}</span> <span className="file-name has-text-weight-light has-text-secondary">{filenamePlaceholder}</span>
)} )}
</label> </label>
</div> </div>

View File

@@ -51,11 +51,11 @@ const TriStateCheckbox: FC<Props> = ({ checked, indeterminate, disabled, label,
let color; let color;
if (disabled) { if (disabled) {
color = "grey-light"; color = "secondary";
} else if (checked || indeterminate) { } else if (checked || indeterminate) {
color = "link"; color = "link";
} else { } else {
color = "black"; color = "secondary-most";
} }
// We need a tabIndex to make the checkbox accessible from keyboard. // We need a tabIndex to make the checkbox accessible from keyboard.

View File

@@ -45,7 +45,7 @@ const FullSizedModal = styled(Modal)`
const FullscreenModal: FC<Props> = ({ title, closeFunction, body, active, closeButtonLabel }) => { const FullscreenModal: FC<Props> = ({ title, closeFunction, body, active, closeButtonLabel }) => {
const [t] = useTranslation("repos"); const [t] = useTranslation("repos");
const footer = <Button label={closeButtonLabel || t("diff.fullscreen.close")} action={closeFunction} color="grey" />; const footer = <Button label={closeButtonLabel || t("diff.fullscreen.close")} action={closeFunction} color="secondary" />;
return <FullSizedModal title={title} closeFunction={closeFunction} body={body} footer={footer} active={active} />; return <FullSizedModal title={title} closeFunction={closeFunction} body={body} footer={footer} active={active} />;
}; };

View File

@@ -45,7 +45,7 @@ type Props = {
}; };
const SizedModal = styled.div<{ size?: ModalSize }>` const SizedModal = styled.div<{ size?: ModalSize }>`
width: ${(props) => (props.size ? `${modalSizes[props.size]}%` : "640px")}; width: ${props => (props.size ? `${modalSizes[props.size]}%` : "640px")};
`; `;
export const Modal: FC<Props> = ({ export const Modal: FC<Props> = ({
@@ -55,9 +55,9 @@ export const Modal: FC<Props> = ({
footer, footer,
active, active,
className, className,
headColor = "light", headColor = "secondary-less",
headTextColor = "black", headTextColor = "secondary-most",
size, size
}) => { }) => {
const portalRootElement = usePortalRootElement("modalsRoot"); const portalRootElement = usePortalRootElement("modalsRoot");
const initialFocusRef = useRef(null); const initialFocusRef = useRef(null);
@@ -65,7 +65,7 @@ export const Modal: FC<Props> = ({
includeContainer: true, includeContainer: true,
initialFocus: initialFocusRef.current, initialFocus: initialFocusRef.current,
returnFocus: true, returnFocus: true,
updateNodes: false, updateNodes: false
}); });
if (!portalRootElement) { if (!portalRootElement) {

View File

@@ -41,29 +41,10 @@ type ContainerProps = {
}; };
const PopoverContainer = styled.div<ContainerProps>` const PopoverContainer = styled.div<ContainerProps>`
position: absolute; width: ${props => props.width}px;
z-index: 100;
width: ${(props) => props.width}px;
display: block;
&:before { &:before {
position: absolute; left: ${props => props.width / 2}px;
content: "";
border-style: solid;
pointer-events: none;
height: 0;
width: 0;
top: 100%;
left: ${(props) => props.width / 2}px;
border-color: transparent;
border-bottom-color: white;
border-left-color: white;
border-width: 0.4rem;
margin-left: -0.4rem;
margin-top: -0.4rem;
-webkit-transform-origin: center;
transform-origin: center;
transform: rotate(-45deg);
} }
`; `;
@@ -71,7 +52,7 @@ const PopoverHeading = styled.div`
height: 1.5em; height: 1.5em;
`; `;
const Popover: FC<Props> = (props) => { const Popover: FC<Props> = props => {
if (!props.show) { if (!props.show) {
return null; return null;
} }
@@ -89,13 +70,13 @@ const InnerPopover: FC<Props> = ({ title, show, width, offsetTop, offsetLeft, di
const onMouseEnter = () => { const onMouseEnter = () => {
dispatch({ dispatch({
type: "enter-popover", type: "enter-popover"
}); });
}; };
const onMouseLeave = () => { const onMouseLeave = () => {
dispatch({ dispatch({
type: "leave-popover", type: "leave-popover"
}); });
}; };
@@ -105,7 +86,7 @@ const InnerPopover: FC<Props> = ({ title, show, width, offsetTop, offsetLeft, di
<PopoverContainer <PopoverContainer
onMouseEnter={onMouseEnter} onMouseEnter={onMouseEnter}
onMouseLeave={onMouseLeave} onMouseLeave={onMouseLeave}
className="box" className="box popover"
style={{ top: `${top}px`, left: `${left}px` }} style={{ top: `${top}px`, left: `${left}px` }}
width={width!} width={width!}
ref={ref} ref={ref}
@@ -118,7 +99,7 @@ const InnerPopover: FC<Props> = ({ title, show, width, offsetTop, offsetLeft, di
}; };
Popover.defaultProps = { Popover.defaultProps = {
width: 120, width: 120
}; };
export default Popover; export default Popover;

View File

@@ -38,7 +38,7 @@ type Props = {
const HealthCheckFailureDetail: FC<Props> = ({ active, closeFunction, failures }) => { const HealthCheckFailureDetail: FC<Props> = ({ active, closeFunction, failures }) => {
const [t] = useTranslation("repos"); const [t] = useTranslation("repos");
const footer = <Button label={t("healthCheckFailure.close")} action={closeFunction} color="grey" />; const footer = <Button label={t("healthCheckFailure.close")} action={closeFunction} color="secondary" />;
return ( return (
<Modal <Modal
@@ -52,7 +52,7 @@ const HealthCheckFailureDetail: FC<Props> = ({ active, closeFunction, failures }
active={active} active={active}
footer={footer} footer={footer}
headColor={"danger"} headColor={"danger"}
headTextColor={"white"} headTextColor="secondary-least"
/> />
); );
}; };

View File

@@ -49,9 +49,6 @@ const ContentRightContainer = styled.div`
const QuickAction = styled(Icon)` const QuickAction = styled(Icon)`
margin-top: 0.2rem; margin-top: 0.2rem;
:hover {
color: #363636 !important;
}
`; `;
const ContactAvatar = styled.img` const ContactAvatar = styled.img`
@@ -79,9 +76,15 @@ const RepositoryEntry: FC<Props> = ({ repository, baseDate }) => {
const renderContactIcon = () => { const renderContactIcon = () => {
if (avatarFactory) { if (avatarFactory) {
return <ContactAvatar className="has-rounded-border" src={avatarFactory({ mail: repository.contact })} alt={repository.contact} />; return (
<ContactAvatar
className="has-rounded-border"
src={avatarFactory({ mail: repository.contact })}
alt={repository.contact}
/>
);
} }
return <QuickAction className={classNames("is-clickable")} name="envelope" color="info" />; return <QuickAction className={classNames("is-clickable", "has-hover-visible")} name="envelope" color="info" />;
}; };
const createContentRight = () => ( const createContentRight = () => (
@@ -124,7 +127,7 @@ const RepositoryEntry: FC<Props> = ({ repository, baseDate }) => {
</ContactActionWrapper> </ContactActionWrapper>
) : null} ) : null}
<QuickAction <QuickAction
className={classNames("is-clickable", "is-size-5")} className={classNames("is-clickable", "is-size-5", "has-hover-visible")}
name="download" name="download"
color="info" color="info"
onClick={() => setOpenCloneModal(true)} onClick={() => setOpenCloneModal(true)}

View File

@@ -58,6 +58,7 @@ const LineNumber = styled(LineElement)`
text-overflow: ellipsis; text-overflow: ellipsis;
white-space: nowrap; white-space: nowrap;
// TODO: ERSETZEN?
border-left: 1px solid lightgrey; border-left: 1px solid lightgrey;
border-right: 1px solid lightgrey; border-right: 1px solid lightgrey;

View File

@@ -34,32 +34,7 @@ import { Action } from "./actions";
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
const PopoverContainer = styled.div` const PopoverContainer = styled.div`
position: absolute;
left: 2.25em; left: 2.25em;
z-index: 100;
width: 30em;
display: block;
&:before {
position: absolute;
content: "";
border-style: solid;
pointer-events: none;
height: 0;
width: 0;
top: 100%;
left: 5.5em;
border-color: transparent;
border-bottom-color: white;
border-left-color: white;
border-width: 0.4rem;
margin-left: -0.4rem;
margin-top: -0.4rem;
-webkit-transform-origin: center;
transform-origin: center;
box-shadow: -1px 1px 2px rgba(10, 10, 10, 0.2);
transform: rotate(-45deg);
}
`; `;
const PopoverHeading = styled.div` const PopoverHeading = styled.div`
@@ -97,13 +72,13 @@ const Popover: FC<PopoverProps> = ({ annotation, offsetTop, repository, baseDate
const onMouseEnter = () => { const onMouseEnter = () => {
dispatch({ dispatch({
type: "enter-popover", type: "enter-popover"
}); });
}; };
const OnMouseLeave = () => { const OnMouseLeave = () => {
dispatch({ dispatch({
type: "leave-popover", type: "leave-popover"
}); });
}; };
@@ -113,7 +88,7 @@ const Popover: FC<PopoverProps> = ({ annotation, offsetTop, repository, baseDate
ref={ref} ref={ref}
onMouseEnter={onMouseEnter} onMouseEnter={onMouseEnter}
onMouseLeave={OnMouseLeave} onMouseLeave={OnMouseLeave}
className="box" className="box popover"
style={{ top: `${top}px` }} style={{ top: `${top}px` }}
> >
<PopoverHeading className="is-clearfix"> <PopoverHeading className="is-clearfix">

View File

@@ -22,6 +22,7 @@
* SOFTWARE. * SOFTWARE.
*/ */
// TODO erweitern
export const colors = [ export const colors = [
"black", "black",
"dark", "dark",
@@ -32,7 +33,7 @@ export const colors = [
"info", "info",
"success", "success",
"warning", "warning",
"danger", "danger"
] as const; ] as const;
export type Color = typeof colors[number]; export type Color = typeof colors[number];

View File

@@ -174,33 +174,6 @@ footer.footer {
background-color: $danger-25; background-color: $danger-25;
} }
// TODO
/*.has-background-danger-high-contrast {
background-color: $high-contrast-danger;
}
.has-background-danger-high-contrast-75 {
background-color: $high-contrast-danger-75;
}
.has-background-danger-high-contrast-50 {
background-color: $high-contrast-danger-50;
}
.has-background-danger-high-contrast-25 {
background-color: $high-contrast-danger-25;
}
.has-background-high-contrast-light-gray {
background-color: $high-contrast-light-gray;
}
.has-background-high-contrast-light-gray-75 {
background-color: $light-75;
}
.has-background-high-contrast-light-gray-50 {
background-color: $light-50;
}
.has-background-high-contrast-light-gray-25 {
background-color: $light-25;
}*/
// tags // tags
.tag:not(body) { .tag:not(body) {
border: 1px solid transparent; border: 1px solid transparent;
@@ -370,6 +343,35 @@ footer.footer {
} }
} }
.popover {
position: absolute;
z-index: 100;
width: 30em;
display: block;
&:before {
position: absolute;
content: "";
border-style: solid;
pointer-events: none;
height: 0;
width: 0;
top: 100%;
left: 5.5em;
border-color: transparent;
border-width: 0.4rem;
margin-left: -0.4rem;
margin-top: -0.4rem;
-webkit-transform-origin: center;
transform-origin: center;
transform: rotate(-45deg);
}
}
.notifications .dropdown-menu:before {
border: 0.4rem solid transparent;
}
@import "~@fortawesome/fontawesome-free/scss/fontawesome"; @import "~@fortawesome/fontawesome-free/scss/fontawesome";
$fa-font-path: "~@fortawesome/fontawesome-free/webfonts"; $fa-font-path: "~@fortawesome/fontawesome-free/webfonts";
@import "~@fortawesome/fontawesome-free/scss/solid"; @import "~@fortawesome/fontawesome-free/scss/solid";
@@ -551,7 +553,7 @@ ul.is-separated {
// panels // panels
.panel { .panel {
border: 1px solid #dbdbdb; border: 1px solid $border;
border-radius: 0.25rem; border-radius: 0.25rem;
.panel-heading { .panel-heading {
@@ -833,6 +835,11 @@ form .field:not(.is-grouped) {
color: $text !important; color: $text !important;
} }
.has-background-accent { .autocomplete-entry > div {
background: $background-accent; border-color: $blue-light;
&:hover,
&.is-hovered {
border-color: #4a4a4a;
}
} }

View File

@@ -30,8 +30,6 @@ $background: $grey-dark;
$text: $white-ter; $text: $white-ter;
$text-strong: $white-bis; $text-strong: $white-bis;
$background-accent: $grey-darker;
$red: #e63453; $red: #e63453;
// TODO check if we could replace red in commons, // TODO check if we could replace red in commons,
// without breaking the light mode // without breaking the light mode
@@ -53,7 +51,7 @@ $footer-color: $white-ter;
$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;
$modal-card-head-background-color: $grey-dark; $modal-card-head-background-color: $black-ter;
$modal-card-body-background-color: $scheme-main; $modal-card-body-background-color: $scheme-main;
$input-placeholder-color: $white; $input-placeholder-color: $white;
@@ -66,17 +64,13 @@ $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;
// WTF
$high-contrast-background-color: #050514;
$high-contrast-light-gray: #f2f2f2;
@import "utils/_post.scss"; @import "utils/_post.scss";
// SyntaxHighlighter
:root { :root {
--sh-base-color: #fff; --sh-base-color: #fff;
--sh-font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; --sh-font-family: Consolas, Monaco, "Andale Mono", "Ubuntu Mono", monospace;
--sh-block-background: #000; --sh-block-background: $scheme-main;
--sh-inline-code-color: #ff3860; --sh-inline-code-color: #ff3860;
--sh-inline-code-background: #fbe7eb; --sh-inline-code-background: #fbe7eb;
--sh-comment-color: #9a9a9a; --sh-comment-color: #9a9a9a;
@@ -85,8 +79,8 @@ $high-contrast-light-gray: #f2f2f2;
--sh-selector-color: #009dff; --sh-selector-color: #009dff;
--sh-operator-color: #999999; --sh-operator-color: #999999;
--sh-operator-bg: inherit; --sh-operator-bg: inherit;
--sh-variable-color: #C386CA; --sh-variable-color: #c386ca;
--sh-function-color: #FF6181; --sh-function-color: #ff6181;
--sh-keyword-color: #00a984; --sh-keyword-color: #00a984;
--sh-selected-color: #7fe3cd; --sh-selected-color: #7fe3cd;
--sh-highlight-background: #f5f5f5; --sh-highlight-background: #f5f5f5;
@@ -96,10 +90,10 @@ $high-contrast-light-gray: #f2f2f2;
--diff-text-color: $white-bis; --diff-text-color: $white-bis;
--diff-font-family: Consolas, Courier, monospace; --diff-font-family: Consolas, Courier, monospace;
--diff-selection-background-color: #b3d7ff; --diff-selection-background-color: #b3d7ff;
--diff-gutter-insert-background-color: #05C71D; --diff-gutter-insert-background-color: #05c71d;
--diff-gutter-delete-background-color: #EB7A85; --diff-gutter-delete-background-color: #eb7a85;
--diff-gutter-selected-background-color: #fffce0; --diff-gutter-selected-background-color: #fffce0;
--diff-code-insert-background-color: #05240B; --diff-code-insert-background-color: #05240b;
--diff-code-delete-background-color: #230608; --diff-code-delete-background-color: #230608;
--diff-code-insert-edit-background-color: #c0dc91; --diff-code-insert-edit-background-color: #c0dc91;
--diff-code-delete-edit-background-color: #000; --diff-code-delete-edit-background-color: #000;
@@ -107,19 +101,7 @@ $high-contrast-light-gray: #f2f2f2;
--diff-omit-gutter-line-color: #cb2a1d; --diff-omit-gutter-line-color: #cb2a1d;
} }
.button { .button {
&.is-danger:hover,
&.is-danger.is-hovered {
background-color: scale-color($danger, $lightness: -2.5%);
}
&.is-danger:active,
&.is-danger.is-active {
background-color: scale-color($danger, $lightness: -4%);
}
&.is-primary, &.is-primary,
&.is-info, &.is-info,
&.is-link, &.is-link,
@@ -130,6 +112,91 @@ $high-contrast-light-gray: #f2f2f2;
background-color: inherit; background-color: inherit;
} }
} }
&.is-primary:hover,
&.is-primary.is-hovered {
background-color: scale-color($primary, $lightness: -5%);
}
&.is-primary:active,
&.is-primary.is-active {
background-color: scale-color($primary, $lightness: -10%);
}
&.is-primary[disabled] {
background-color: scale-color($primary, $lightness: -50%);
}
&.is-info:hover,
&.is-info.is-hovered {
background-color: scale-color($info, $lightness: -5%);
}
&.is-info:active,
&.is-info.is-active {
background-color: scale-color($info, $lightness: -10%);
}
&.is-info[disabled] {
background-color: scale-color($info, $lightness: -50%);
}
&.is-link:hover,
&.is-link.is-hovered {
background-color: scale-color($link, $lightness: -5%);
}
&.is-link:active,
&.is-link.is-active {
background-color: scale-color($link, $lightness: -10%);
}
&.is-link[disabled] {
background-color: scale-color($link, $lightness: -50%);
}
&.is-success:hover,
&.is-success.is-hovered {
background-color: scale-color($success, $lightness: -5%);
}
&.is-success:active,
&.is-success.is-active {
background-color: scale-color($success, $lightness: -10%);
}
&.is-success[disabled] {
background-color: scale-color($success, $lightness: -50%);
}
&.is-warning:hover,
&.is-warning.is-hovered {
background-color: scale-color($warning, $lightness: -5%);
}
&.is-warning:active,
&.is-warning.is-active {
background-color: scale-color($warning, $lightness: -10%);
}
&.is-warning[disabled] {
background-color: scale-color($warning, $lightness: -50%);
color: #e1d4c2;
}
&.is-danger:hover,
&.is-danger.is-hovered {
background-color: scale-color($danger, $lightness: -5%);
}
&.is-danger:active,
&.is-danger.is-active {
background-color: scale-color($danger, $lightness: -10%);
}
&.is-danger[disabled] {
background-color: scale-color($danger, $lightness: -50%);
}
} }
.menu-label { .menu-label {
@@ -141,23 +208,31 @@ $high-contrast-light-gray: #f2f2f2;
color: $white-ter; color: $white-ter;
&.is-active { &.is-active {
background-color: $high-contrast-background-color; background-color: $scheme-main;
} }
} }
} }
//footer is overwritten in _main.scss //footer is overwritten in _main.scss
footer.footer { footer.footer {
background-color: $grey-dark; 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;
box-shadow: none;
}
//card
.modal-card { .modal-card {
border: 1px solid $white-ter; border: 1px solid $white-ter;
.modal-close::before, .delete::before, .modal-close::after, .delete::after {
background-color: $white-bis; & .modal-close,
& .delete {
background-color: $white-ter;
} }
} }
@@ -187,6 +262,9 @@ footer.footer {
&.is-darker { &.is-darker {
background-color: $grey-dark; background-color: $grey-dark;
} }
&:first-child {
border-left-width: 9px;
}
} }
&.is-hoverable tbody tr:not(.is-selected):hover { &.is-hoverable tbody tr:not(.is-selected):hover {
@@ -196,26 +274,15 @@ footer.footer {
// panels // panels
.panel { .panel {
border: 1px solid $white-bis; border-color: $white-bis;
border-radius: 0.25rem;
.panel-heading { .panel-heading {
border: none; background-color: $black-ter;
border-bottom: 1px solid $border;
border-radius: 0.25rem 0.25rem 0 0;
background-color: $grey-darker;
} }
.panel-footer { .panel-footer {
background-color: $grey-darker; background-color: $black-ter;
color: $white-bis; color: $white-bis;
font-size: 1.25em;
font-weight: 300;
line-height: 1.25;
padding: 0.5em 0.75em;
border: none;
border-top: 1px solid $border;
border-radius: 0 0 0.25rem 0.25rem;
} }
} }
@@ -225,10 +292,12 @@ footer.footer {
} }
.diff-gutter-conflict { .diff-gutter-conflict {
background-color: #FFD11A; background-color: #ffd11a;
} }
.diff-gutter-delete,.diff-gutter-insert, .diff-gutter-conflict { .diff-gutter-delete,
.diff-gutter-insert,
.diff-gutter-conflict {
color: $scheme-main; color: $scheme-main;
} }
@@ -265,57 +334,57 @@ td:first-child.diff-gutter-conflict:before {
.tag:not(body) { .tag:not(body) {
border: 1px solid transparent; border: 1px solid transparent;
background-color: $white; background-color: $white;
.is-delete::before, .is-delete::after {
&.is-delete {
&::before,
&::after {
background-color: $scheme-main;
}
&:hover::before,
&:hover::after {
background-color: $white-bis;
}
}
//dark tags have light borders to separate from background
&.is-dark,
&.is-black {
border: 1px solid $white-bis;
}
//blue text in light tags
&.is-light .has-text-link {
color: scale-color($link, $lightness: -50%) !important;
}
//outline-tags
&.is-outlined {
background-color: $scheme-main; background-color: $scheme-main;
} }
} }
.tag:not(body).is-delete::before, .tag:not(body).is-delete::after {
background-color: $scheme-main;
}
.tag:not(body).is-delete:hover::before, .tag:not(body).is-delete:hover::after {
background-color: $white-bis;
}
//dark tags have light borders to separate from background
.tag:not(body).is-dark, .tag:not(body).is-black {
border: 1px solid $white-bis;
}
//blue text in light tags
.tag.is-light .has-text-link {
color: scale-color($link, $lightness: -50%) !important;
}
//outline-tags
.tag:not(body).is-outlined {
background-color: $scheme-main;
}
//cards receive white border //cards receive white border
.box-link-shadow { .box-link-shadow {
box-shadow: 0 0 0 1px $white-bis; box-shadow: 0 0 0 1px $white-bis;
} }
//some modals have lighter backgrounds in head
//TODO: fix with meta-class (contains light color in light-mode, dark color in dark mode
.has-background-light {
background-color: $grey-dark !important;
}
//they also often have black text, this is a stop-gap
//TODO: fix with meta-class (contains dark color in light-mode, light color in dark mode
.modal-card-title.has-text-black {
color: $white-bis !important;
}
//fix triangle for pop-overs
.popover { .popover {
color: #00a984; border: 1px solid $white-ter;
&:before {
border-bottom-color: $grey-dark;
border-left-color: $grey-dark;
}
} }
.popover .popover-content::before
{ .notifications .dropdown-menu {
border-bottom-color: $grey-dark !important; border: 1px solid $white-ter;
border-left-color: $grey-dark !important;
&:before {
border-bottom-color: $white-ter;
border-left-color: $white-ter;
}
} }
//make horizontal lines pop more //make horizontal lines pop more
@@ -323,14 +392,112 @@ hr {
background-color: $white-bis; background-color: $white-bis;
} }
//Login and logout overwrite white-ter background
.hero-body .has-background-white-ter {
background-color: $grey-dark !important;
}
//Display darker version of background image //Display darker version of background image
.has-scm-background { .has-scm-background {
background-image: url(images/scmManagerHeroDark.jpg) !important; background-image: url(images/scmManagerHeroDark.jpg) !important;
background-size: cover; }
background-position: top center;
.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-hover-visible:hover {
color: $white-bis !important;
}
.select select[disabled],
[disabled].textarea,
[disabled].input,
fieldset[disabled] .select select,
.select fieldset[disabled] select,
fieldset[disabled] .textarea,
fieldset[disabled] .input {
color: $white-bis;
}
[disabled].textarea::placeholder,
[disabled].input::placeholder,
fieldset[disabled] .textarea::placeholder,
fieldset[disabled] .input::placeholder {
color: $white-bis;
}
.repository-export-info-box {
background-color: $high-contrast-info-25;
border: 0.2rem solid;
}
.search-syntax-accordion {
border: 1px solid $info;
box-shadow: none;
}
.autocomplete-entry > div {
background-color: $scheme-main;
color: $white-bis;
/* Text input */
&:nth-child(2) * {
color: $white-bis;
}
/* Suggestions */
&:nth-child(3) {
border: 1px solid $info;
> div div:hover {
background-color: #4672fe !important;
}
}
} }

View File

@@ -25,16 +25,14 @@
@import "utils/_pre.scss"; @import "utils/_pre.scss";
// colors defined in variables/commons.scss // colors defined in variables/commons.scss
$subtitle-color: #666; $subtitle-color: #666;
$warning-invert: #88550D; $warning-invert: #88550d;
$button-disabled-opacity: .25; $button-disabled-opacity: 0.25;
$background-accent: $white-ter;
@import "utils/_post.scss"; @import "utils/_post.scss";
:root { :root {
--sh-base-color: #363636; --sh-base-color: #363636;
--sh-font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; --sh-font-family: Consolas, Monaco, "Andale Mono", "Ubuntu Mono", monospace;
--sh-block-background: #ffffff; --sh-block-background: #ffffff;
--sh-inline-code-color: #ff3860; --sh-inline-code-color: #ff3860;
--sh-inline-code-background: #fbe7eb; --sh-inline-code-background: #fbe7eb;
@@ -52,3 +50,72 @@ $background-accent: $white-ter;
--sh-highlight-accent: #99d8f3; --sh-highlight-accent: #99d8f3;
} }
.popover:before {
border-bottom-color: white;
border-left-color: white;
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 {
color: $grey-darker !important;
}

View File

@@ -43,13 +43,24 @@ $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%);
// TODO $high-contrast-dark-75: scale-color($dark, $lightness: -25%);
// $high-contrast-danger-75: scale-color($high-contrast-danger, $lightness: 25%); $high-contrast-dark-50: scale-color($dark, $lightness: -50%);
// $high-contrast-danger-50: scale-color($high-contrast-danger, $lightness: 50%); $high-contrast-dark-25: scale-color($dark, $lightness: -75%);
// $high-contrast-danger-25: scale-color($high-contrast-danger, $lightness: 75%); $high-contrast-info-75: scale-color($info, $lightness: -25%);
$high-contrast-info-50: scale-color($info, $lightness: -50%);
// TODO $high-contrast-info-25: scale-color($info, $lightness: -75%);
// high-contrast light gray $high-contrast-link-75: scale-color($link, $lightness: -25%);
// $light-75: darken($high-contrast-light-gray, 15%); $high-contrast-link-50: scale-color($link, $lightness: -50%);
// $light-50: darken($high-contrast-light-gray, 30%); $high-contrast-link-25: scale-color($link, $lightness: -75%);
// $light-25: darken($high-contrast-light-gray, 45%); $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

@@ -43,6 +43,7 @@ const ActionbarWrapper = styled.div`
} }
`; `;
// TODO: ersetzen?
const IconWrapperStyle = styled.span.attrs(props => ({ const IconWrapperStyle = styled.span.attrs(props => ({
className: "level-item mb-0 p-2 is-clickable" className: "level-item mb-0 p-2 is-clickable"
}))` }))`

View File

@@ -26,6 +26,7 @@ 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 white;
margin-top: 1rem; margin-top: 1rem;

View File

@@ -68,7 +68,7 @@ class InfoBox extends React.Component<Props> {
"image", "image",
"box", "box",
"has-text-weight-bold", "has-text-weight-bold",
"has-text-white", "has-text-secondary-least",
"has-background-info", "has-background-info",
"is-flex", "is-flex",
"is-flex-direction-column", "is-flex-direction-column",

View File

@@ -46,6 +46,7 @@ const AvatarWrapper = styled.figure`
padding-bottom: 20px; padding-bottom: 20px;
`; `;
//TODO Ersetzen?
const AvatarImage = styled(Image)` const AvatarImage = styled(Image)`
width: 128px; width: 128px;
height: 128px; height: 128px;
@@ -99,7 +100,7 @@ class LoginForm extends React.Component<Props, State> {
render() { render() {
const { loading, t } = this.props; const { loading, t } = this.props;
return ( return (
<div className="column is-4 box has-text-centered has-background-white-ter"> <div className="column is-4 box has-text-centered has-background-secondary-less">
<h3 className="title">{t("login.title")}</h3> <h3 className="title">{t("login.title")}</h3>
<p className="subtitle">{t("login.subtitle")}</p> <p className="subtitle">{t("login.subtitle")}</p>
<TopMarginBox className="box"> <TopMarginBox className="box">

View File

@@ -120,7 +120,7 @@ const InitializationAdminAccountStep: FC<Props> = ({ data }) => {
} }
const component = ( const component = (
<div className="column is-8 box has-background-white-ter"> <div className="column is-8 box has-background-secondary-less">
<form onSubmit={handleSubmit(onSubmit)}> <form onSubmit={handleSubmit(onSubmit)}>
<h3 className="title">{t("title")}</h3> <h3 className="title">{t("title")}</h3>
<h4 className="subtitle">{t("adminStep.title")}</h4> <h4 className="subtitle">{t("adminStep.title")}</h4>

View File

@@ -85,6 +85,7 @@ 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 white;

View File

@@ -65,15 +65,10 @@ const DropDownMenu = styled.div`
&:before { &:before {
position: absolute; position: absolute;
content: ""; content: "";
border-style: solid;
pointer-events: none; pointer-events: none;
height: 0; height: 0;
width: 0; width: 0;
top: 0; top: -7px; // top padding of dropdown-menu + border-spacing
border-color: transparent;
border-bottom-color: white;
border-left-color: white;
border-width: 0.4rem;
transform-origin: center; transform-origin: center;
transform: rotate(135deg); transform: rotate(135deg);
@@ -132,7 +127,7 @@ const NotificationEntry: FC<EntryProps> = ({ notification, removeToast }) => {
) : ( ) : (
<Icon <Icon
name="trash" name="trash"
color="black" color="secondary-most"
className="is-clickable" className="is-clickable"
title={t("notifications.dismiss")} title={t("notifications.dismiss")}
onClick={remove} onClick={remove}
@@ -143,12 +138,6 @@ const NotificationEntry: FC<EntryProps> = ({ notification, removeToast }) => {
); );
}; };
const DismissAllButton = styled(Button)`
&:hover > * {
color: white !important;
}
`;
type ClearEntryProps = { type ClearEntryProps = {
notifications: NotificationCollection; notifications: NotificationCollection;
clearToasts: () => void; clearToasts: () => void;
@@ -164,9 +153,9 @@ const ClearEntry: FC<ClearEntryProps> = ({ notifications, clearToasts }) => {
return ( return (
<div className={classNames("dropdown-item", "has-text-centered")}> <div className={classNames("dropdown-item", "has-text-centered")}>
<ErrorNotification error={error} /> <ErrorNotification error={error} />
<DismissAllButton className="is-outlined" color="link" loading={isLoading} action={clear}> <Button className="is-outlined" color="link" loading={isLoading} action={clear}>
<Icon color="link" name="trash" className="mr-1" alt="" /> {t("notifications.dismissAll")} <Icon color="inherit" name="trash" className="mr-1" alt="" /> {t("notifications.dismissAll")}
</DismissAllButton> </Button>
</div> </div>
); );
}; };
@@ -188,7 +177,7 @@ const NotificationList: FC<Props> = ({ data, clear, remove }) => {
</tbody> </tbody>
</table> </table>
{all.length > 6 ? ( {all.length > 6 ? (
<p className={classNames("has-text-centered", "has-text-grey")}> <p className={classNames("has-text-centered", "has-text-secondary")}>
{t("notifications.xMore", { count: all.length - 6 })} {t("notifications.xMore", { count: all.length - 6 })}
</p> </p>
) : null} ) : null}
@@ -348,6 +337,7 @@ const Notifications: FC<NotificationProps> = ({ className }) => {
<NotificationSubscription notifications={notifications} remove={remove} /> <NotificationSubscription notifications={notifications} remove={remove} />
<div <div
className={classNames( className={classNames(
"notifications",
"dropdown", "dropdown",
"is-hoverable", "is-hoverable",
{ {

View File

@@ -71,6 +71,7 @@ const EmptyHits: FC = () => {
); );
}; };
// TODO ersetzen
const ResultHeading = styled.h3` const ResultHeading = styled.h3`
border-bottom: 1px solid lightgray; border-bottom: 1px solid lightgray;
`; `;
@@ -79,6 +80,7 @@ const DropdownMenu = styled.div`
max-width: 20rem; max-width: 20rem;
`; `;
// TODO ersetzen
const ResultFooter = styled.div` const ResultFooter = styled.div`
border-top: 1px solid lightgray; border-top: 1px solid lightgray;
`; `;

View File

@@ -96,7 +96,7 @@ const AheadBehindTag: FC<Props> = ({ branch, details, hiddenMobile, verbose }) =
<Behind className="column is-half is-flex is-flex-direction-column is-align-items-flex-end p-0"> <Behind className="column is-half is-flex is-flex-direction-column is-align-items-flex-end p-0">
<Count className="is-size-7 pr-1">{behindText}</Count> <Count className="is-size-7 pr-1">{behindText}</Count>
<Bar <Bar
className="has-rounded-border-left has-background-grey" className="has-rounded-border-left has-background-secondary"
width={calculateBarLength(details.changesetsBehind)} width={calculateBarLength(details.changesetsBehind)}
direction="left" direction="left"
/> />
@@ -104,7 +104,7 @@ const AheadBehindTag: FC<Props> = ({ branch, details, hiddenMobile, verbose }) =
<Ahead className="column is-half is-flex is-flex-direction-column is-align-items-flex-start p-0"> <Ahead className="column is-half is-flex is-flex-direction-column is-align-items-flex-start p-0">
<Count className="is-size-7 pl-1">{aheadText}</Count> <Count className="is-size-7 pl-1">{aheadText}</Count>
<Bar <Bar
className="has-rounded-border-right has-background-grey" className="has-rounded-border-right has-background-secondary"
width={calculateBarLength(details.changesetsAhead)} width={calculateBarLength(details.changesetsAhead)}
direction="right" direction="right"
/> />

View File

@@ -31,7 +31,7 @@ import { useTranslation } from "react-i18next";
const BranchCommitDateCommitter: FC<{ branch: Branch }> = ({ branch }) => { const BranchCommitDateCommitter: FC<{ branch: Branch }> = ({ branch }) => {
const [t] = useTranslation("repos"); const [t] = useTranslation("repos");
const committedAt = <DateFromNow className={classNames("is-size-7", "has-text-grey")} date={branch.lastCommitDate} />; const committedAt = <DateFromNow className={classNames("is-size-7", "has-text-secondary")} date={branch.lastCommitDate} />;
if (branch.lastCommitter?.name) { if (branch.lastCommitter?.name) {
return ( return (
<> <>

View File

@@ -76,7 +76,7 @@ const BranchRow: FC<Props> = ({ repository, baseUrl, branch, onDelete, details }
{branch.name} {branch.name}
</ReactLink> </ReactLink>
{branch.lastCommitDate && ( {branch.lastCommitDate && (
<span className={classNames("has-text-grey", "is-ellipsis-overflow", "is-size-7", "ml-4")}> <span className={classNames("has-text-secondary", "is-ellipsis-overflow", "is-size-7", "ml-4")}>
<BranchCommitDateCommitter branch={branch} /> <BranchCommitDateCommitter branch={branch} />
</span> </span>
)} )}

View File

@@ -58,7 +58,7 @@ const CodeActionBar: FC<Props> = ({ selectedBranch, branches, onSelectBranch, sw
const location = useLocation(); const location = useLocation();
return ( return (
<ActionBar className={"has-background-accent"}> <ActionBar className="has-background-secondary-less">
<FlexShrinkLevel <FlexShrinkLevel
left={ left={
branches && branches &&

View File

@@ -44,6 +44,7 @@ type Params = {
revision: string; revision: string;
}; };
// TODO ersetzen?
const HomeLink = styled(Link)` const HomeLink = styled(Link)`
border-right: 1px solid lightgray; border-right: 1px solid lightgray;
`; `;

View File

@@ -57,7 +57,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 ? "white" : "default"} alt="" /> <Icon className="pr-2" name={icon} color={isSelected ? "secondary-least" : "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

@@ -41,7 +41,6 @@ import classNames from "classnames";
const InfoBox = styled.div` const InfoBox = styled.div`
white-space: pre-line; white-space: pre-line;
background-color: #ccecf9;
border-radius: 2px; border-radius: 2px;
border-left: 0.2rem solid; border-left: 0.2rem solid;
border-color: #33b2e8; border-color: #33b2e8;
@@ -59,7 +58,7 @@ const ExportInterruptedNotification = () => {
const ExportInfoBox: FC<{ exportInfo: ExportInfo }> = ({ exportInfo }) => { const ExportInfoBox: FC<{ exportInfo: ExportInfo }> = ({ exportInfo }) => {
const [t] = useTranslation("repos"); const [t] = useTranslation("repos");
return ( return (
<InfoBox className={classNames("my-4", "p-4")}> <InfoBox className={classNames("my-4", "p-4", "has-background-info-25", "repository-export-info-box")}>
<strong>{t("export.exportInfo.infoBoxTitle")}</strong> <strong>{t("export.exportInfo.infoBoxTitle")}</strong>
<p>{t("export.exportInfo.exporter", { username: exportInfo.exporterName })}</p> <p>{t("export.exportInfo.exporter", { username: exportInfo.exporterName })}</p>
<p> <p>

View File

@@ -170,8 +170,8 @@ const Content: FC<Props> = ({ file, repository, revision, breadcrumb, error }) =
if (!collapsed) { if (!collapsed) {
return ( return (
<> <>
<div className="panel-block has-background-white-bis"> <div className="panel-block has-background-secondary-less">
<table className="table has-background-white-bis"> <table className="table has-background-secondary-less">
<tbody> <tbody>
<tr> <tr>
<td>{t("sources.content.path")}</td> <td>{t("sources.content.path")}</td>

View File

@@ -52,7 +52,7 @@ const TagDetail: FC<Props> = ({ repository, tag }) => {
<SignatureIcon signatures={tag.signatures} className="ml-2 mb-5" /> <SignatureIcon signatures={tag.signatures} className="ml-2 mb-5" />
<div className={classNames("is-ellipsis-overflow", "is-size-7", "ml-2")}> <div className={classNames("is-ellipsis-overflow", "is-size-7", "ml-2")}>
{t("tags.overview.created")}{" "} {t("tags.overview.created")}{" "}
<DateFromNow className={classNames("is-size-7", "has-text-grey")} date={tag.date} /> <DateFromNow className={classNames("is-size-7", "has-text-secondary")} date={tag.date} />
</div> </div>
</div> </div>
<div className="media-right"> <div className="media-right">

View File

@@ -58,7 +58,7 @@ const TagRow: FC<Props> = ({ tag, baseUrl, onDelete }) => {
<td> <td>
<RouterLink to={to} title={tag.name}> <RouterLink to={to} title={tag.name}>
{tag.name} {tag.name}
<span className={classNames("has-text-grey", "is-ellipsis-overflow", "ml-2", "is-size-7")}> <span className={classNames("has-text-secondary", "is-ellipsis-overflow", "ml-2", "is-size-7")}>
{t("tags.overview.created")} <DateFromNow date={tag.date} /> {t("tags.overview.created")} <DateFromNow date={tag.date} />
</span> </span>
</RouterLink> </RouterLink>

View File

@@ -53,7 +53,7 @@ const Expandable: FC<ExpandableProps> = ({ header, children, className }) => {
const [t] = useTranslation("commons"); const [t] = useTranslation("commons");
const [expanded, setExpanded] = useState(false); const [expanded, setExpanded] = useState(false);
return ( return (
<div className={classNames("card", className)}> <div className={classNames("card search-syntax-accordion", className)}>
<header onClick={() => setExpanded(!expanded)} className="card-header is-clickable"> <header onClick={() => setExpanded(!expanded)} className="card-header is-clickable">
<span className="card-header-title">{header}</span> <span className="card-header-title">{header}</span>
<span className="card-header-icon"> <span className="card-header-icon">