Merge branch 'theming_settings' into theming

pull/2521/head
William Grant 3 years ago
commit 4adc20a457

@ -1,5 +1,14 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta
content="width=device-width, user-scalable=no, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0"
name="viewport"
/>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="description" content="" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta
http-equiv="Content-Security-Policy"
content="default-src 'none';
@ -14,6 +23,7 @@
script-src 'self' 'unsafe-inline';
style-src 'self' 'unsafe-inline';"
/>
<link href="images/sesion/session_icon_128.png" rel="shortcut icon" />
<link href="stylesheets/dist/manifest.css" rel="stylesheet" type="text/css" />
</head>
<body>

@ -55,16 +55,7 @@
}
.session-icon-button {
background-color: var(--button-icon-background-color);
box-shadow: none;
filter: brightness(1.05);
svg path {
transition: var(--default-duration);
opacity: 0.6;
// TODO Theming remove
fill: var(--color-text-opposite);
}
background-color: var(--primary-color);
}
}
}

@ -21,10 +21,6 @@
word-break: break-all;
}
.session-icon-button svg path {
transition: fill 0.3s ease;
}
input,
textarea {
caret-color: var(--color-text) !important;
@ -73,27 +69,17 @@ textarea {
}
.session-label {
color: var(--color-white-color);
font-weight: 700;
color: var(--white-color);
padding: var(--margins-sm);
width: 100%;
border-radius: 2px;
text-align: center;
&.primary {
background-color: var(--color-dark-gray-color);
}
&.secondary {
background-color: var(--color-darkest-gray-color);
}
&.success {
/* TODO is this correct? */
background-color: var(--color-text);
background-color: var(--primary-color);
}
&.danger {
background-color: var(--color-destructive);
}
/* TODO Is this correct? */
&.warning {
background-color: var(--color-warning);
background-color: var(--danger-color);
}
}
@ -101,17 +87,7 @@ textarea {
cursor: pointer;
display: inline-block;
position: relative;
opacity: 0.4;
transform: translateZ(0);
&:hover {
opacity: 1;
}
transition: opacity var(--default-duration);
&.no-opacity {
opacity: 1;
}
}
/* CONVERSATION AND MESSAGES */
@ -464,10 +440,6 @@ label {
&:hover {
background: var(--color-clickable-hovered);
.session-icon {
opacity: 1;
}
}
}
@ -582,6 +554,7 @@ label {
height: 100vh;
display: flex;
flex-direction: column;
background-color: var(--background-secondary-color);
&__password-lock {
display: flex;
@ -598,21 +571,22 @@ label {
max-width: 90%;
width: 600px;
background: var(--color-cell-background);
color: var(--color-text);
background: var(--background-primary-color);
color: var(--text-primary-color);
border: 1px solid var(--color-darker-gray-color);
border: 1px solid var(--border-color);
border-radius: 5px;
}
}
}
// TODO Theming
#qr svg,
.qr-image svg {
width: $session-modal-size-sm;
height: $session-modal-size-sm;
padding: var(--margins-xs);
background-color: var(--color-white-color);
background-color: var(--white-color);
border-radius: 3px;
}
@ -674,20 +648,6 @@ input {
height: 40px;
width: 40px;
border-radius: 50%;
opacity: 1;
background-color: var(--button-icon-background-color);
box-shadow: var(--color-session-shadow);
svg path {
transition: var(--default-duration);
opacity: 0.6;
fill: var(--button-icon-stroke-color);
}
&:hover svg path {
opacity: 1;
fill: var(--button-icon-stroke-hover-color);
}
}
}

@ -165,18 +165,11 @@
z-index: 1;
.session-icon-button {
margin-right: var(--margins-sm);
display: flex;
justify-content: center;
align-items: center;
opacity: 0.7;
&:hover {
opacity: 1;
filter: brightness(0.9);
transition: var(--default-duration);
}
margin-right: var(--margins-sm);
.send {
padding: var(--margins-xs);

@ -22,23 +22,18 @@
justify-content: center;
align-items: center;
background-color: var(--color-black-color);
width: 100%;
height: 100%;
padding: 3 * $session-margin-lg;
padding: calc(3 * var(--margins-lg));
}
&-error-section {
width: 100%;
color: white;
margin: -var(--margins-sm) 0px 2 * $session-margin-lg 0px;
color: var(--text-primary-color);
margin: -var(--margins-sm) 0px calc(2 * var(--margins-lg)) 0px;
.session-label {
&.primary {
background-color: rgba(var(--color-dark-gray-color-rgb), 0.3);
}
padding: var(--margins-xs) var(--margins-sm);
text-align: center;
}
@ -46,7 +41,7 @@
&-container {
font-family: $session-font-default;
color: white;
color: var(--text-primary-color);
display: inline-flex;
flex-direction: column;
align-items: center;
@ -54,10 +49,10 @@
width: 600px;
min-width: 420px;
padding: 3 * $session-margin-lg 2 * $session-margin-lg;
padding: calc(3 * var(--margins-lg)) calc(2 * var(--margins-lg));
box-sizing: border-box;
background-color: var(--color-darkest-gray-color);
border: 1px solid var(--color-darker-gray-color);
background-color: var(--background-secondary-color);
border: 1px solid var(--border-color);
border-radius: 2px;
.warning-info-area,
@ -67,7 +62,7 @@
align-items: center;
h1 {
color: white;
color: var(--text-primary-color);
}
svg {
margin-inline-end: var(--margins-lg);
@ -85,13 +80,13 @@
#password-prompt-input {
width: 100%;
color: var(--color-white-color);
background-color: var(--color-darker-gray-color);
margin-top: 2 * $session-margin-lg;
background-color: var(--text-box-background-color);
color: var(--text-box-text-user-color);
margin-top: calc(2 * var(--margins-lg));
padding: var(--margins-xs) var(--margins-lg);
outline: none;
border: none;
border-radius: 2px;
border: 1px solid var(--border-color);
border-radius: 7px;
text-align: center;
font-size: 24px;
letter-spacing: 5px;

@ -22,6 +22,7 @@ const StyledSessionMemberItem = styled.button<{
inMentions?: boolean;
zombie?: boolean;
selected?: boolean;
disableBg?: boolean;
}>`
cursor: pointer;
display: flex;
@ -36,14 +37,13 @@ const StyledSessionMemberItem = styled.button<{
transition: var(--default-duration);
opacity: ${props => (props.zombie ? 0.5 : 1)};
background-color: ${props =>
props.selected && 'var(--color-conversation-item-selected) !important'};
!props.disableBg && props.selected
? 'var(--conversation-tab-background-selected-color) !important'
: null};
:not(:last-child) {
border-bottom: var(--border-color);
}
background-color: ${props =>
props.selected ? 'var(--conversation-tab-background-selected-color) !important' : null};
`;
const StyledInfo = styled.div`
@ -109,6 +109,7 @@ export const MemberListItem = (props: {
zombie={isZombie}
inMentions={inMentions}
selected={isSelected}
disableBg={disableBg}
>
<StyledInfo>
<AvatarItem memberPubkey={pubkey} isAdmin={isAdmin || false} />

@ -1,12 +1,16 @@
import React from 'react';
import React, { useEffect } from 'react';
import classNames from 'classnames';
import { SessionIcon } from './icon';
import { withTheme } from 'styled-components';
import autoBind from 'auto-bind';
import { SessionButton, SessionButtonColor } from './basic/SessionButton';
import { Constants } from '../session';
import { SessionButton, SessionButtonColor, SessionButtonType } from './basic/SessionButton';
import { SessionSpinner } from './basic/SessionSpinner';
import {
SessionTheme,
switchHtmlToDarkTheme,
switchHtmlToLightTheme,
} from '../themes/SessionTheme';
import styled from 'styled-components';
interface State {
error: string;
@ -17,11 +21,16 @@ interface State {
export const MAX_LOGIN_TRIES = 3;
const StyledTextPleaseWait = styled.div`
margin: var(--margins-sm) 0;
font-weight: 700;
`;
const TextPleaseWait = (props: { isLoading: boolean }) => {
if (!props.isLoading) {
return null;
}
return <div>{window.i18n('pleaseWaitOpenAndOptimizeDb')}</div>;
return <StyledTextPleaseWait>{window.i18n('pleaseWaitOpenAndOptimizeDb')}</StyledTextPleaseWait>;
};
class SessionPasswordPromptInner extends React.PureComponent<{}, State> {
@ -78,18 +87,18 @@ class SessionPasswordPromptInner extends React.PureComponent<{}, State> {
/>
);
const infoIcon = this.state.clearDataView ? (
<SessionIcon iconType="warning" iconSize={35} iconColor="#ce0000" />
<SessionIcon iconType="warning" iconSize={35} iconColor="var(--danger-color)" />
) : (
<SessionIcon iconType="lock" iconSize={35} iconColor={Constants.UI.COLORS.GREEN} />
<SessionIcon iconType="lock" iconSize={35} iconColor={'var(--primary-color)'} />
);
const errorSection = !this.state.clearDataView && (
<div className="password-prompt-error-section">
{this.state.error && (
<>
{showResetElements ? (
<div className="session-label warning">{window.i18n('maxPasswordAttempts')}</div>
<div className="session-label danger">{window.i18n('maxPasswordAttempts')}</div>
) : (
<div className="session-label primary">{this.state.error}</div>
<div className="session-label danger">{this.state.error}</div>
)}
</>
)}
@ -174,7 +183,7 @@ class SessionPasswordPromptInner extends React.PureComponent<{}, State> {
<div className={classNames(showResetElements && 'button-group')}>
<SessionButton
text={window.i18n('unlock')}
buttonColor={SessionButtonColor.Primary}
buttonType={SessionButtonType.Simple}
onClick={this.initLogin}
/>
{showResetElements && (
@ -182,6 +191,7 @@ class SessionPasswordPromptInner extends React.PureComponent<{}, State> {
<SessionButton
text="Reset Database"
buttonColor={SessionButtonColor.Danger}
buttonType={SessionButtonType.Simple}
onClick={this.initClearDataView}
/>
</>
@ -196,10 +206,12 @@ class SessionPasswordPromptInner extends React.PureComponent<{}, State> {
<SessionButton
text={window.i18n('clearAllData')}
buttonColor={SessionButtonColor.Danger}
buttonType={SessionButtonType.Simple}
onClick={window.clearLocalData}
/>
<SessionButton
text={window.i18n('cancel')}
buttonType={SessionButtonType.Simple}
onClick={() => {
this.setState({ clearDataView: false });
}}
@ -209,4 +221,18 @@ class SessionPasswordPromptInner extends React.PureComponent<{}, State> {
}
}
export const SessionPasswordPrompt = withTheme(SessionPasswordPromptInner);
export const SessionPasswordPrompt = () => {
useEffect(() => {
if ((window as any).theme === 'dark') {
switchHtmlToDarkTheme();
} else {
switchHtmlToLightTheme();
}
}, []);
return (
<SessionTheme>
<SessionPasswordPromptInner />
</SessionTheme>
);
};

@ -2,19 +2,19 @@ import React from 'react';
import { updateConfirmModal } from '../../state/ducks/modalDialog';
import { useDispatch } from 'react-redux';
import styled from 'styled-components';
import { whiteColor } from '../../themes/SessionTheme';
const StyledKnob = styled.div<{ active: boolean }>`
position: absolute;
top: 0.5px;
left: 0.5px;
top: ${props => (props.active ? '1px' : '0.5px')};
left: ${props => (props.active ? '2px' : '0.5px')};
height: 21px;
width: 21px;
border-radius: 28px;
/* TODO Theming update */
background-color: ${whiteColor};
background-color: var(--toggle-switch-ball-color);
box-shadow: ${props =>
props.active ? '-2px 1px 3px rgba(0, 0, 0, 0.15)' : '2px 1px 3px rgba(0, 0, 0, 0.15);'};
props.active
? '-2px 1px 3px var(--toggle-switch-ball-shadow-color);'
: '2px 1px 3px var(--toggle-switch-ball-shadow-color);'};
transition: transform var(--default-duration) ease, background-color var(--default-duration) ease;
@ -24,17 +24,22 @@ const StyledKnob = styled.div<{ active: boolean }>`
const StyledSessionToggle = styled.div<{ active: boolean }>`
width: 51px;
height: 25px;
border: 1px solid #e5e5ea; // TODO Theming update
background-color: (--toggle-switch-off-background-color);
border: 1px solid var(--toggle-switch-off-border-color);
border-radius: 16px;
position: relative;
cursor: pointer;
background-color: var(--color-transparent-color);
transition: var(--default-duration);
background-color: ${props =>
props.active ? 'var(--color-accent)' : 'var(--color-clickable-hovered)'};
border-color: ${props => (props.active ? 'var(--color-accent)' : 'var(--color-cell-background)')};
props.active
? 'var(--toggle-switch-on-background-color)'
: 'var(--toggle-switch-off-background-color)'};
border-color: ${props =>
props.active
? 'var(--toggle-switch-on-border-color)'
: 'var(--toggle-switch-off-border-color)'};
`;
type Props = {

@ -68,19 +68,6 @@ const StyledMessagesContainer = styled.div<{}>`
height: 40px;
width: 40px;
border-radius: 50%;
opacity: 1;
background-color: var(--color-cell-background);
box-shadow: var(--color-session-shadow);
svg path {
transition: var(--default-duration);
opacity: 0.6;
fill: var(--color-text);
}
&:hover svg path {
opacity: 1;
}
}
`;

@ -127,7 +127,7 @@ export class SessionRecording extends React.Component<Props, State> {
<SessionIconButton
iconType="stop"
iconSize="medium"
iconColor={'#FF4538'}
iconColor={'var(--danger-color)'}
onClick={actionPauseFn}
/>
)}
@ -174,6 +174,7 @@ export class SessionRecording extends React.Component<Props, State> {
iconSize={'large'}
iconRotation={90}
onClick={this.onSendVoiceMessage}
margin={'var(--margins-sm)'}
/>
</div>
)}

@ -1,54 +1,77 @@
import React from 'react';
import styled from 'styled-components';
import { SessionIconButton } from '../../icon';
const StyledChatButtonContainer = styled.div`
.session-icon-button {
svg {
background-color: var(--chat-buttons-background-color);
}
&:hover svg {
background-color: var(--chat-buttons-background-hover-color);
}
}
`;
export const AddStagedAttachmentButton = (props: { onClick: () => void }) => {
return (
<SessionIconButton
iconType="plusThin"
backgroundColor={'var(--color-compose-view-button-background)'}
iconSize={'huge2'}
borderRadius="300px"
iconPadding="8px"
onClick={props.onClick}
/>
<StyledChatButtonContainer>
<SessionIconButton
iconType="plusThin"
backgroundColor={'var(--chat-buttons-background-color)'}
iconColor={'var(--chat-buttons-icon-color)'}
iconSize={'huge2'}
borderRadius="300px"
iconPadding="8px"
onClick={props.onClick}
/>
</StyledChatButtonContainer>
);
};
export const StartRecordingButton = (props: { onClick: () => void }) => {
return (
<SessionIconButton
iconType="microphone"
iconSize={'huge2'}
backgroundColor={'var(--color-compose-view-button-background)'}
borderRadius="300px"
iconPadding="6px"
onClick={props.onClick}
/>
);
};
export const ToggleEmojiButton = React.forwardRef<HTMLDivElement, { onClick: () => void }>(
(props, ref) => {
return (
<StyledChatButtonContainer>
<SessionIconButton
iconType="emoji"
ref={ref}
backgroundColor="var(--color-compose-view-button-background)"
iconType="microphone"
iconSize={'huge2'}
backgroundColor={'var(--chat-buttons-background-color)'}
iconColor={'var(--chat-buttons-icon-color)'}
borderRadius="300px"
iconPadding="6px"
onClick={props.onClick}
/>
</StyledChatButtonContainer>
);
};
export const ToggleEmojiButton = React.forwardRef<HTMLDivElement, { onClick: () => void }>(
(props, ref) => {
return (
<StyledChatButtonContainer>
<SessionIconButton
iconType="emoji"
ref={ref}
backgroundColor={'var(--chat-buttons-background-color)'}
iconColor={'var(--chat-buttons-icon-color)'}
iconSize={'huge2'}
borderRadius="300px"
iconPadding="6px"
onClick={props.onClick}
/>
</StyledChatButtonContainer>
);
}
);
export const SendMessageButton = (props: { onClick: () => void }) => {
return (
<div className="send-message-button">
<StyledChatButtonContainer className="send-message-button">
<SessionIconButton
iconType="send"
backgroundColor={'var(--color-compose-view-button-background)'}
backgroundColor={'var(--chat-buttons-background-color)'}
iconColor={'var(--chat-buttons-icon-color)'}
iconSize={'huge2'}
iconRotation={90}
borderRadius="300px"
@ -56,6 +79,6 @@ export const SendMessageButton = (props: { onClick: () => void }) => {
onClick={props.onClick}
dataTestId="send-message-button"
/>
</div>
</StyledChatButtonContainer>
);
};

@ -12,7 +12,7 @@ type Props = {
};
const StyledMessageReactBar = styled.div`
background-color: var(--color-received-message-background);
background-color: var(--emoji-reaction-bar-background-color);
border-radius: 25px;
box-shadow: 0 2px 16px 0 rgba(0, 0, 0, 0.2), 0 0px 20px 0 rgba(0, 0, 0, 0.19);
@ -26,9 +26,10 @@ const StyledMessageReactBar = styled.div`
align-items: center;
.session-icon-button {
border-color: transparent !important;
box-shadow: none !important;
margin: 0 4px;
&:hover svg {
background-color: var(--chat-buttons-background-hover-color);
}
}
`;
@ -44,7 +45,7 @@ const ReactButton = styled.span`
font-size: 24px;
:hover {
background-color: var(--color-compose-view-button-background);
background-color: var(--chat-buttons-background-hover-color);
}
`;
@ -79,11 +80,11 @@ export const MessageReactBar = (props: Props): ReactElement => {
</ReactButton>
))}
<SessionIconButton
iconColor={'var(--color-text)'}
iconPadding={'12px'}
iconSize={'huge2'}
iconColor={'var(--emoji-reaction-bar-icon-color)'}
iconPadding={'8px'}
iconSize={'huge'}
iconType="plusThin"
backgroundColor={'var(--color-compose-view-button-background)'}
backgroundColor={'var(--emoji-reaction-bar-icon-background-color)'}
borderRadius="300px"
onClick={additionalAction}
/>

@ -25,8 +25,8 @@ export const GroupInvitation = (props: PropsForGroupInvitation) => {
<div className={classNames(classes)}>
<div className="contents">
<SessionIconButton
iconColor="var(--background-secondary-color)"
iconType="plus"
iconColor={'var(--color-accent)'}
iconSize={'large'}
onClick={() => {
acceptOpenGroupInvitation(props.acceptUrl, props.serverName);

@ -64,7 +64,7 @@ export const SessionConfirm = (props: SessionConfirmDialogProps) => {
const cancelText = props.cancelText || window.i18n('cancel');
const showHeader = !!props.title;
const messageSubText = messageSub ? 'session-confirm-main-message' : 'subtle';
const messageSubText = messageSub ? 'session-confirm-main-message' : undefined;
const onClickOkHandler = async () => {
if (onClickOk) {
@ -120,11 +120,7 @@ export const SessionConfirm = (props: SessionConfirmDialogProps) => {
)}
<SessionHtmlRenderer tag="span" className={messageSubText} html={message} />
<SessionHtmlRenderer
tag="span"
className="session-confirm-sub-message subtle"
html={messageSub}
/>
<SessionHtmlRenderer tag="span" className="session-confirm-sub-message" html={messageSub} />
<SessionSpinner loading={isLoading} />
</div>

@ -140,7 +140,7 @@ export class SessionPasswordDialog extends React.Component<Props, State> {
<>
{message && (
<>
<div className="session-label warning">{message}</div>
<div className="session-label danger">{message}</div>
<SpacerLG />
</>
)}

@ -3,6 +3,7 @@ import classNames from 'classnames';
import { SessionIcon, SessionIconProps } from '../icon';
import _ from 'lodash';
import { SessionNotificationCount } from './SessionNotificationCount';
import styled from 'styled-components';
interface SProps extends SessionIconProps {
onClick?: (e: React.MouseEvent<HTMLDivElement>) => void;
@ -15,6 +16,26 @@ interface SProps extends SessionIconProps {
style?: object;
}
const StyledSessionIconButton = styled.div<{ color?: string; isSelected?: boolean }>`
background-color: var(--button-icon-background-color);
svg path {
transition: var(--default-duration);
${props =>
!props.color &&
`fill:
${
props.isSelected
? 'var(--button-icon-stroke-selected-color)'
: 'var(--button-icon-stroke-color)'
};`}
}
&:hover svg path {
${props => !props.color && `fill: var(--button-icon-stroke-hover-color);`}
}
`;
const SessionIconButtonInner = React.forwardRef<HTMLDivElement, SProps>((props, ref) => {
const {
iconType,
@ -43,8 +64,10 @@ const SessionIconButtonInner = React.forwardRef<HTMLDivElement, SProps>((props,
};
return (
<div
className={classNames('session-icon-button', iconSize, isSelected ? 'no-opacity' : '')}
<StyledSessionIconButton
color={iconColor}
isSelected={isSelected}
className={classNames('session-icon-button', iconSize)}
role="button"
ref={ref}
id={id}
@ -65,7 +88,7 @@ const SessionIconButtonInner = React.forwardRef<HTMLDivElement, SProps>((props,
iconPadding={iconPadding}
/>
{Boolean(notificationCount) && <SessionNotificationCount count={notificationCount} />}
</div>
</StyledSessionIconButton>
);
});

@ -101,7 +101,6 @@ const Section = (props: { type: SectionType }) => {
iconSize="medium"
dataTestId="message-section"
iconType={'chatBubble'}
iconColor={undefined}
notificationCount={unreadToShow}
onClick={handleClick}
isSelected={isSelected}
@ -113,7 +112,6 @@ const Section = (props: { type: SectionType }) => {
iconSize="medium"
dataTestId="settings-section"
iconType={'gear'}
iconColor={undefined}
notificationCount={unreadToShow}
onClick={handleClick}
isSelected={isSelected}
@ -134,7 +132,6 @@ const Section = (props: { type: SectionType }) => {
iconSize="medium"
iconType={'moon'}
dataTestId="theme-section"
iconColor={undefined}
notificationCount={unreadToShow}
onClick={handleClick}
isSelected={isSelected}

@ -15,6 +15,33 @@ import { SessionIcon } from '../icon';
import { SessionSettingCategory } from '../settings/SessionSettings';
import { resetConversationExternal } from '../../state/ducks/conversations';
const StyledSettingsSectionTitle = styled.strong`
font-family: var(--font-font-accent);
font-size: var(--font-size-md);
`;
const StyledSettingsListItem = styled.div<{ active: boolean }>`
background-color: ${props =>
props.active
? 'var(--settings-tab-background-selected-color)'
: 'var(--settings-tab-background-color)'};
color: var(--settings-tab-text-color);
display: flex;
flex-direction: row;
justify-content: space-between;
align-items: center;
height: 74px;
line-height: 1.4;
padding: 0px var(--margins-md);
flex-shrink: 0;
cursor: pointer;
transition: var(--default-duration) !important;
:hover {
background: var(--settings-tab-background-hover-color);
}
`;
const getCategories = () => {
return [
{
@ -92,9 +119,7 @@ const LeftPaneSettingsCategoryRow = (props: {
}
}}
>
<StyledSettingsSectionTitle
style={{ color: isClearData ? 'var(--color-destructive)' : 'unset' }}
>
<StyledSettingsSectionTitle style={{ color: isClearData ? 'var(--danger-color)' : 'unset' }}>
{title}
</StyledSettingsSectionTitle>
@ -123,29 +148,6 @@ const StyledContentSection = styled.div`
overflow-y: auto;
`;
const StyledSettingsSectionTitle = styled.strong`
font-family: var(--font-font-accent);
font-size: var(--font-size-md);
`;
const StyledSettingsListItem = styled.div<{ active: boolean }>`
background: ${props => (props.active ? 'var(--color-conversation-item-selected)' : 'none')};
display: flex;
flex-direction: row;
justify-content: space-between;
align-items: center;
height: 74px;
line-height: 1.4;
padding: 0px var(--margins-md);
flex-shrink: 0;
cursor: pointer;
transition: var(--default-duration) !important;
:hover {
background: var(--color-clickable-hovered);
}
`;
export const LeftPaneSettingSection = () => {
return (
<StyledContentSection>

@ -14,6 +14,7 @@ import { Flex } from '../basic/Flex';
import { SessionIconButton, SessionIconType } from '../icon';
import * as MIME from '../../types/MIME';
import { isUndefined } from 'lodash';
import styled from 'styled-components';
const Colors = {
TEXT_SECONDARY: '#bbb',
@ -127,6 +128,17 @@ const styles = {
},
};
const StyledIconButton = styled.div`
.session-icon-button {
opacity: 0.4;
transition: opacity var(--default-duration);
&:hover {
opacity: 1;
}
}
`;
interface IconButtonProps {
onClick?: () => void;
style?: React.CSSProperties;
@ -162,14 +174,16 @@ const IconButton = ({ onClick, type }: IconButtonProps) => {
}
return (
<SessionIconButton
iconType={iconType}
iconSize={'huge'}
iconRotation={iconRotation}
// the lightbox has a dark background
iconColor="white"
onClick={clickHandler}
/>
<StyledIconButton>
<SessionIconButton
iconType={iconType}
iconSize={'huge'}
iconRotation={iconRotation}
// the lightbox has a dark background
iconColor="var(--white-color)"
onClick={clickHandler}
/>
</StyledIconButton>
);
};

@ -18,20 +18,28 @@ const BlockedEntriesContainer = styled.div`
overflow: auto;
min-height: 40px;
max-height: 100%;
background: var(--color-input-background); // TODO theming update
`;
const BlockedEntriesRoundedContainer = styled.div`
overflow: hidden;
background: var(--background-secondary-color);
border: 1px solid var(--border-color);
border-radius: 16px;
padding: var(--margins-lg);
background: var(--color-input-background); // TODO theming update
margin: 0 var(--margins-lg);
`;
const BlockedContactsSection = styled.div`
display: flex;
flex-direction: column;
min-height: 0;
background: var(--settings-tab-background-color);
color: var(--settings-tab-text-color);
border-top: 1px solid var(--border-color);
border-bottom: 1px solid var(--border-color);
margin-bottom: var(--margins-lg);
`;
const BlockedContactListTitle = styled.div`
@ -50,10 +58,6 @@ export const StyledBlockedSettingItem = styled.div<{ clickable: boolean }>`
font-size: var(--font-size-md);
padding: var(--margins-lg);
background: var(--color-cell-background);
color: var(--color-text);
border-bottom: var(--border-session);
cursor: ${props => (props.clickable ? 'pointer' : 'unset')};
`;
@ -143,18 +147,20 @@ export const BlockedContactsList = () => {
iconRotation={expanded ? 0 : 180}
dataTestId="reveal-blocked-user-settings"
/>
<SpacerLG />
</BlockedContactListTitleButtons>
)}
</BlockedContactListTitle>
</StyledBlockedSettingItem>
{expanded && !noBlockedNumbers ? (
<BlockedEntries
blockedNumbers={blockedNumbers}
selectedIds={selectedIds}
addToSelected={addToSelected}
removeFromSelected={removeFromSelected}
/>
<>
<BlockedEntries
blockedNumbers={blockedNumbers}
selectedIds={selectedIds}
addToSelected={addToSelected}
removeFromSelected={removeFromSelected}
/>
<SpacerLG />
</>
) : null}
</BlockedContactsSection>
);

@ -26,7 +26,6 @@ export const StyledDescriptionSettingsItem = styled.div`
font-size: var(--font-size-sm);
font-weight: 400;
max-width: 700px;
color: var(--color-text-subtle);
`;
export const StyledTitleSettingsItem = styled.div`
@ -47,10 +46,12 @@ const StyledDescriptionContainer = styled(StyledDescriptionSettingsItem)`
export const StyledSettingItem = styled.div`
font-size: var(--font-size-md);
padding: var(--margins-lg);
margin-bottom: var(--margins-lg);
background: var(--color-cell-background);
color: var(--color-text);
border-bottom: var(--border-session);
background: var(--settings-tab-background-color);
color: var(--settings-tab-text-color);
border-top: 1px solid var(--border-color);
border-bottom: 1px solid var(--border-color);
`;
const StyledSettingItemInline = styled(StyledSettingItem)`
@ -61,9 +62,12 @@ const StyledSettingItemInline = styled(StyledSettingItem)`
`;
const StyledSettingItemClickable = styled(StyledSettingItemInline)`
cursor: pointer;
:hover {
background: var(--color-clickable-hovered);
cursor: pointer;
background: var(--settings-tab-background-hover-color);
}
:active {
background: var(--settings-tab-background-selected-color);
}
`;

@ -61,21 +61,33 @@ const StyledSpanSessionInfo = styled.span`
opacity: 0.4;
transition: var(--default-duration);
user-select: text;
cursor: pointer;
:hover {
&:hover {
opacity: 1;
}
`;
const SessionInfo = () => {
const openOxenWebsite = () => {
void shell.openExternal('https://oxen.io/');
};
return (
<StyledVersionInfo>
<StyledSpanSessionInfo>v{window.versionInfo.version}</StyledSpanSessionInfo>
<StyledSpanSessionInfo
onClick={() => {
void shell.openExternal(
`https://github.com/oxen-io/session-desktop/releases/tag/v${window.versionInfo.version}`
);
}}
>
v{window.versionInfo.version}
</StyledSpanSessionInfo>
<StyledSpanSessionInfo>
<SessionIconButton iconSize="medium" iconType="oxen" onClick={openOxenWebsite} />
<SessionIconButton
iconSize="medium"
iconType="oxen"
onClick={() => {
void shell.openExternal('https://oxen.io/');
}}
/>
</StyledSpanSessionInfo>
<StyledSpanSessionInfo>{window.versionInfo.commitHash}</StyledSpanSessionInfo>
</StyledVersionInfo>
@ -84,18 +96,22 @@ const SessionInfo = () => {
const StyledPasswordInput = styled.input`
width: 100%;
background: var(--color-input-background);
color: var(--color-text);
background: var(--text-box-background-color);
color: var(--text-box-text-user-color);
padding: var(--margins-xs) var(--margins-md);
margin-bottom: var(--margins-lg);
outline: none;
border: none;
border-radius: 2px;
border: 1px solid var(--border-color);
border-radius: 7px;
text-align: center;
font-size: 24px;
letter-spacing: 5px;
font-family: var(--font-default);
::placeholder {
color: var(--text-box-text-control-color);
}
`;
const StyledH3 = styled.h3`
@ -123,7 +139,7 @@ const PasswordLock = ({
autoFocus={true}
/>
{pwdLockError && <div className="session-label warning">{pwdLockError}</div>}
{pwdLockError && <div className="session-label danger">{pwdLockError}</div>}
<SessionButton
buttonType={SessionButtonType.Simple}

@ -11,7 +11,6 @@ const StyledSettingsHeader = styled.div`
justify-content: center;
align-items: center;
height: var(--main-view-header-height);
background: var(--color-cell-background);
`;
const StyledHeaderTittle = styled.div`

@ -485,6 +485,7 @@ export const SessionGlobalStyles = createGlobalStyle`
/* TODO Theming Clarify what those transparent colors mean */
/* Text Box */
/* Also used for inputs specifically password box input */
--text-box-background-color: var(--background-primary-color);
--text-box-text-control-color: ${THEMES.CLASSIC_LIGHT.COLOR1};
--text-box-text-user-color: var(--text-primary-color);
@ -503,6 +504,7 @@ export const SessionGlobalStyles = createGlobalStyle`
--menu-button-icon-color: ${THEMES.CLASSIC_LIGHT.COLOR6};
/* Chat (Interaction) Buttons */
/* Also used for Reaction Bar Buttons */
--chat-buttons-background-color: ${THEMES.CLASSIC_LIGHT.COLOR4};
--chat-buttons-background-hover-color: ${THEMES.CLASSIC_LIGHT.COLOR3};
--chat-buttons-icon-color: var(--text-primary-color);
@ -582,7 +584,8 @@ export const SessionGlobalStyles = createGlobalStyle`
--zoom-bar-selector-color: var(--primary-color);
/* Toggle Switch */
--toggle-switch-ball-color: ;
--toggle-switch-ball-color: var(--white-color);
--toggle-switch-ball-shadow-color: rgba(${hexColorToRGB(COLORS.BLACK)}, 0.15);
/* TODO Theming think this should be white instead of transparent */
--toggle-switch-off-background-color: var(--transparent-color);
--toggle-switch-off-border-color: var(--border-color);

Loading…
Cancel
Save