MM-56975 UI Incremental Refinements (#26407)

* updated styles to include rounded corners and updated backgrounds/containers

* updated snapshots

* removed background from app bar top

* removed top padding from lhs

* updated name of container to better match the grid name in css

* fixed lint issue with css

* update snapshot

* adjusted padding/margin

* use radius variables

* remove margin and border radius from plabooks for now

* fixed tasklist

* minor tweaks to menus

* add global border variables and use in key places

* fixed grid issues with login page and backstage

* use border variable

* adjust padding in global header

* fixed type issues

* tweaks to spacing

* fixed margin issue on backstage

* fixed padding on global header

* minor tweaks to header and apps bar

* removed background from apps bar

* updates to header and app bar and team icon

* updated more borders and radii to use variables

* fixed style lint issue

* adjust letter spacing on category labels

* fix lint issue

* fixed position of popover

* address UX feedback
Этот коммит содержится в:
Matthew Birtch
2024-05-08 11:28:38 -04:00
коммит произвёл GitHub
родитель f00efe58fd
Коммит 8fa6757949
37 изменённых файлов: 365 добавлений и 248 удалений

Просмотреть файл

@@ -4,7 +4,7 @@
@import 'utils/mixins'; @import 'utils/mixins';
$app-bar-icon-size: 24px; $app-bar-icon-size: 24px;
$app-bar-width: 48px; $app-bar-width: 44px;
.app-bar { .app-bar {
// Do not show App Bar if on mobile // Do not show App Bar if on mobile
@@ -12,11 +12,10 @@ $app-bar-width: 48px;
display: none; display: none;
} }
position: relative;
display: flex; display: flex;
min-height: 0; min-height: 0;
flex-flow: column; flex-flow: column;
border-left: solid 1px rgba(var(--center-channel-color-rgb), 0.12);
background-color: var(--center-channel-bg);
&__top { &__top {
position: relative; position: relative;
@@ -25,7 +24,6 @@ $app-bar-width: 48px;
flex: 1; flex: 1;
flex-flow: column; flex-flow: column;
padding-top: 15px; padding-top: 15px;
background-color: rgba(var(--center-channel-color-rgb), 0.04);
-ms-overflow-style: none; -ms-overflow-style: none;
overflow-x: hidden; overflow-x: hidden;
overflow-y: scroll; overflow-y: scroll;
@@ -49,7 +47,7 @@ $app-bar-width: 48px;
left: 0; left: 0;
width: 3px; width: 3px;
height: $app-bar-icon-size; height: $app-bar-icon-size;
border-radius: 0 2px 2px 0; border-radius: 0 var(--radius-xs) var(--radius-xs) 0;
background-color: var(--sidebar-text-active-border); background-color: var(--sidebar-text-active-border);
content: ''; content: '';
} }
@@ -71,18 +69,18 @@ $app-bar-width: 48px;
overflow: hidden; overflow: hidden;
width: $app-bar-icon-size; width: $app-bar-icon-size;
height: $app-bar-icon-size; height: $app-bar-icon-size;
border-radius: 50%; border-radius: var(--radius-full);
margin: 0 auto; margin: 0 auto;
line-height: 1; line-height: 1;
&:hover { &:hover {
box-shadow: 0 0 0 2px rgba(var(--center-channel-color-rgb), 0.16); box-shadow: 0 0 0 2px rgba(var(--sidebar-text-rgb), 0.16);
} }
img { img {
width: $app-bar-icon-size; width: $app-bar-icon-size;
height: $app-bar-icon-size; height: $app-bar-icon-size;
border-radius: 50%; border-radius: var(--radius-full);
} }
} }
@@ -105,11 +103,11 @@ $app-bar-width: 48px;
} }
.app-bar__old-icon { .app-bar__old-icon {
color: rgba(var(--center-channel-color-rgb), 0.64); color: rgba(var(--sidebar-text-rgb), 0.64);
&:hover, &:hover,
&--active { &--active {
color: rgba(var(--center-channel-color-rgb), 0.8); color: rgba(var(--sidebar-text-rgb), 0.8);
} }
} }
@@ -121,7 +119,7 @@ $app-bar-width: 48px;
.app-bar__divider { .app-bar__divider {
width: 28px; width: 28px;
border-top: 1px solid rgba(var(--center-channel-color-rgb), 0.16); border-top: 1px solid rgba(var(--sidebar-text-rgb), 0.16);
margin-top: 0; margin-top: 0;
margin-bottom: 19px; margin-bottom: 19px;
} }
@@ -140,11 +138,17 @@ $app-bar-width: 48px;
align-items: center; align-items: center;
padding-top: 24px; padding-top: 24px;
padding-bottom: 36px; padding-bottom: 36px;
background-color: rgba(var(--center-channel-color-rgb), 0.04);
.app_bar__marketplace_button { .app_bar__marketplace_button {
@include icon-button; @include icon-button;
@include icon-button-small-compact; @include icon-button-small-compact;
color: rgba(var(--sidebar-text-rgb), 0.64);
&:hover {
background-color: rgba(var(--sidebar-text-rgb), 0.08);
color: rgba(var(--sidebar-text-rgb), 0.72);
}
} }
} }
} }

Просмотреть файл

@@ -245,7 +245,7 @@ const BackstageGlobalStyle = createGlobalStyle`
#root { #root {
> #global-header, > #global-header,
> .team-sidebar, > .team-sidebar,
> .sidebar--right, > .main-wrapper .sidebar--right,
> .app-bar { > .app-bar {
display: none; display: none;
} }

Просмотреть файл

@@ -9,8 +9,8 @@
overflow: hidden; overflow: hidden;
max-height: calc(100vh - 240px); max-height: calc(100vh - 240px);
flex-direction: column; flex-direction: column;
border: 1px solid rgba(var(--center-channel-color-rgb), 0.16); border: var(--border-default);
border-radius: 12px; border-radius: var(--radius-l);
box-shadow: var(--elevation-6); box-shadow: var(--elevation-6);
} }
@@ -21,7 +21,7 @@
.modal-header { .modal-header {
border: none; border: none;
border-bottom: 1px solid rgba(var(--center-channel-color-rgb), 0.08); border-bottom: var(--border-light);
background: none; background: none;
} }
@@ -44,7 +44,7 @@
align-items: center; align-items: center;
justify-content: flex-end; justify-content: flex-end;
padding: 24px 32px; padding: 24px 32px;
border-top: 1px solid rgba(var(--center-channel-color-rgb), 0.08); border-top: var(--border-light);
gap: 8px; gap: 8px;
} }
@@ -73,7 +73,7 @@
} }
&__divider { &__divider {
border-bottom: 1px solid rgba(var(--center-channel-color-rgb), 0.08); border-bottom: var(--border-light);
} }
@media screen and (max-width: 768px) { @media screen and (max-width: 768px) {

Просмотреть файл

@@ -2,10 +2,8 @@
// See LICENSE.txt for license information. // See LICENSE.txt for license information.
.Drafts { .Drafts {
--border: 1px solid rgba(var(--center-channel-color-rgb), 0.16);
&__header { &__header {
border-bottom: var(--border); border-bottom: var(--border-default);
grid-area: header; grid-area: header;
} }
@@ -44,7 +42,7 @@
} }
.Header { .Header {
border-top: var(--border); border-top: var(--border-default);
} }
} }
} }

Просмотреть файл

@@ -22,11 +22,9 @@ const GlobalHeaderContainer = styled.header`
flex-shrink: 0; flex-shrink: 0;
align-items: center; align-items: center;
justify-content: space-between; justify-content: space-between;
height: 40px; height: 44px;
background: var(--global-header-background); color: rgba(var(--sidebar-text-rgb), 0.64);
border-bottom: solid 1px rgba(var(--center-channel-color-rgb), 0.08); padding: 0 4px 0 8px;
color: rgba(var(--global-header-text-rgb), 0.64);
padding: 0 12px;
z-index: 99; z-index: 99;
> * + * { > * + * {

Просмотреть файл

@@ -11,7 +11,7 @@
min-height: 100%; min-height: 100%;
flex-direction: column; flex-direction: column;
margin: 0 auto; margin: 0 auto;
grid-area: center; grid-area: main;
.header-footer-route-container { .header-footer-route-container {
display: flex; display: flex;

Просмотреть файл

@@ -22,7 +22,7 @@ export const MuiMenuStyled = styled(MuiMenu, {
backgroundColor: 'var(--center-channel-bg)', backgroundColor: 'var(--center-channel-bg)',
boxShadow: `${ boxShadow: `${
asSubMenu ? 'var(--elevation-5)' : 'var(--elevation-4)' asSubMenu ? 'var(--elevation-5)' : 'var(--elevation-4)'
}, 0 0 0 1px rgba(var(--center-channel-color-rgb), 0.16) inset`, }, 0 0 0 1px rgba(var(--center-channel-color-rgb), 0.12) inset`,
minWidth: '114px', minWidth: '114px',
maxWidth: '496px', maxWidth: '496px',
maxHeight: '80vh', maxHeight: '80vh',

Просмотреть файл

@@ -43,7 +43,7 @@ import {TaskListPopover} from './onboarding_tasklist_popover';
import {Task} from './onboarding_tasklist_task'; import {Task} from './onboarding_tasklist_task';
const TaskItems = styled.div` const TaskItems = styled.div`
border-radius: 4px; border-radius: var(--radius-m);
border: solid 1px rgba(var(--center-channel-color-rgb), 0.16); border: solid 1px rgba(var(--center-channel-color-rgb), 0.16);
background-color: var(--center-channel-bg); background-color: var(--center-channel-bg);
width: 352px; width: 352px;
@@ -91,9 +91,9 @@ const Button = styled.button<{open: boolean}>(({open}) => {
width: 36px; width: 36px;
height: 36px; height: 36px;
padding: 7px; padding: 7px;
border-radius: 50%; border-radius: var(--radius-full);
left: 20px; left: 15px;
bottom: 20px; bottom: 15px;
position: fixed; position: fixed;
z-index: 101; z-index: 101;
display: flex; display: flex;
@@ -113,15 +113,15 @@ const Button = styled.button<{open: boolean}>(({open}) => {
width: 20px; width: 20px;
height: 16px; height: 16px;
background: var(--button-bg); background: var(--button-bg);
position: fixed; position: absolute;
display: ${open ? 'none' : 'block'}; display: ${open ? 'none' : 'block'};
border-radius: 12px; border-radius: 12px;
color: var(--button-color); color: var(--button-color);
font-weight: bold; font-weight: bold;
font-size: 11px; font-size: 11px;
line-height: 16px; line-height: 16px;
bottom: 47px; bottom: 22px;
left: 41px; left: 22px;
} }
`; `;
}); });
@@ -130,7 +130,7 @@ const PlayButton = styled.button`
padding: 10px 0; padding: 10px 0;
max-width: 175px; max-width: 175px;
background: var(--button-bg); background: var(--button-bg);
border-radius: 4px; border-radius: var(--radius-s);
color: var(--button-color); color: var(--button-color);
border: none; border: none;
font-weight: bold; font-weight: bold;

Просмотреть файл

@@ -3,7 +3,7 @@
import type {Placement} from 'popper.js'; import type {Placement} from 'popper.js';
import React from 'react'; import React from 'react';
import type {RefObject} from 'react'; import type {RefObject, CSSProperties} from 'react';
import {usePopper} from 'react-popper'; import {usePopper} from 'react-popper';
import {CSSTransition} from 'react-transition-group'; import {CSSTransition} from 'react-transition-group';
import styled from 'styled-components'; import styled from 'styled-components';
@@ -83,8 +83,11 @@ export const TaskListPopover = ({
], ],
}); });
const style = { const style = {
...popper, container: {
zIndex: isVisible ? 100 : -1, ...popper,
zIndex: isVisible ? 100 : -1,
position: 'fixed',
} as CSSProperties,
}; };
return ( return (
<> <>
@@ -101,7 +104,7 @@ export const TaskListPopover = ({
</CSSTransition> </CSSTransition>
<div <div
ref={setPopperElement} ref={setPopperElement}
style={style} style={style.container}
{...attributes.popper} {...attributes.popper}
> >
{children} {children}

Просмотреть файл

@@ -99,33 +99,37 @@ exports[`components/Root Routes Should mount public product routes 1`] = `
<GlobalHeader /> <GlobalHeader />
<CloudEffectsWrapper /> <CloudEffectsWrapper />
<withRouter(Connect(TeamSidebar)) /> <withRouter(Connect(TeamSidebar)) />
<Switch> <div
<Route className="main-wrapper"
key="productwithpublic-public" >
path="/productwithpublic/public" <Switch>
render={[Function]} <Route
key="productwithpublic-public"
path="/productwithpublic/public"
render={[Function]}
/>
<Route
key="productwithpublic"
path="/productwithpublic"
render={[Function]}
/>
<Route
key="productwithoutpublic"
path="/productwithoutpublic"
render={[Function]}
/>
<LoggedInRoute
component={[Function]}
path="/:team([a-z0-9\\\\-_]+)"
theme={Object {}}
/>
<Connect(RootRedirect) />
</Switch>
<Connect(Pluggable)
pluggableName="Global"
/> />
<Route <withRouter(Connect(SidebarRight)) />
key="productwithpublic" </div>
path="/productwithpublic"
render={[Function]}
/>
<Route
key="productwithoutpublic"
path="/productwithoutpublic"
render={[Function]}
/>
<LoggedInRoute
component={[Function]}
path="/:team([a-z0-9\\\\-_]+)"
theme={Object {}}
/>
<Connect(RootRedirect) />
</Switch>
<Connect(Pluggable)
pluggableName="Global"
/>
<withRouter(Connect(SidebarRight)) />
<AppBar /> <AppBar />
<Connect(Component) /> <Connect(Component) />
</CompassThemeProvider> </CompassThemeProvider>

Просмотреть файл

@@ -549,75 +549,77 @@ export default class Root extends React.PureComponent<Props, State> {
<GlobalHeader/> <GlobalHeader/>
<CloudEffects/> <CloudEffects/>
<TeamSidebar/> <TeamSidebar/>
<Switch> <div className='main-wrapper'>
{this.props.products?.filter((product) => Boolean(product.publicComponent)).map((product) => ( <Switch>
<Route {this.props.products?.filter((product) => Boolean(product.publicComponent)).map((product) => (
key={`${product.id}-public`} <Route
path={`${product.baseURL}/public`} key={`${product.id}-public`}
render={(props) => { path={`${product.baseURL}/public`}
return ( render={(props) => {
<Pluggable return (
pluggableName={'Product'} <Pluggable
subComponentName={'publicComponent'} pluggableName={'Product'}
pluggableId={product.id} subComponentName={'publicComponent'}
css={{gridArea: 'center'}} pluggableId={product.id}
{...props} css={{gridArea: 'center'}}
/> {...props}
); />
}}
/>
))}
{this.props.products?.map((product) => (
<Route
key={product.id}
path={product.baseURL}
render={(props) => {
let pluggable = (
<Pluggable
pluggableName={'Product'}
subComponentName={'mainComponent'}
pluggableId={product.id}
webSocketClient={webSocketClient}
css={product.wrapped ? undefined : {gridArea: 'center'}}
/>
);
if (product.wrapped) {
pluggable = (
<div className={classNames(['product-wrapper', {wide: !product.showTeamSidebar}])}>
{pluggable}
</div>
); );
} }}
return ( />
<LoggedIn {...props}> ))}
{pluggable} {this.props.products?.map((product) => (
</LoggedIn> <Route
); key={product.id}
}} path={product.baseURL}
render={(props) => {
let pluggable = (
<Pluggable
pluggableName={'Product'}
subComponentName={'mainComponent'}
pluggableId={product.id}
webSocketClient={webSocketClient}
css={product.wrapped ? undefined : {gridArea: 'center'}}
/>
);
if (product.wrapped) {
pluggable = (
<div className={classNames(['product-wrapper', {wide: !product.showTeamSidebar}])}>
{pluggable}
</div>
);
}
return (
<LoggedIn {...props}>
{pluggable}
</LoggedIn>
);
}}
/>
))}
{this.props.plugins?.map((plugin) => (
<Route
key={plugin.id}
path={'/plug/' + (plugin as any).route}
render={() => (
<Pluggable
pluggableName={'CustomRouteComponent'}
pluggableId={plugin.id}
css={{gridArea: 'center'}}
/>
)}
/>
))}
<LoggedInRoute
theme={this.props.theme}
path={`/:team(${TEAM_NAME_PATH_PATTERN})`}
component={TeamController}
/> />
))} <RootRedirect/>
{this.props.plugins?.map((plugin) => ( </Switch>
<Route <Pluggable pluggableName='Global'/>
key={plugin.id} <SidebarRight/>
path={'/plug/' + (plugin as any).route} </div>
render={() => (
<Pluggable
pluggableName={'CustomRouteComponent'}
pluggableId={plugin.id}
css={{gridArea: 'center'}}
/>
)}
/>
))}
<LoggedInRoute
theme={this.props.theme}
path={`/:team(${TEAM_NAME_PATH_PATTERN})`}
component={TeamController}
/>
<RootRedirect/>
</Switch>
<Pluggable pluggableName='Global'/>
<SidebarRight/>
<AppBar/> <AppBar/>
<SidebarRightMenu/> <SidebarRightMenu/>
</CompassThemeProvider> </CompassThemeProvider>

Просмотреть файл

@@ -9,11 +9,20 @@
} }
} }
.GlobalThreads { .rhs-open #channel_view.channel-view {
--border: 1px solid rgba(var(--center-channel-color-rgb), 0.16); &:has(.GlobalThreads) {
padding-right: 0;
.ThreadPane,
.no-results__holder {
padding-right: 18px;
}
}
}
.GlobalThreads {
.GlobalThreads___header { .GlobalThreads___header {
border-bottom: var(--border); border-bottom: var(--border-default);
grid-area: header; grid-area: header;
} }
@@ -23,13 +32,14 @@
} }
.ThreadList { .ThreadList {
border-right: var(--border);
grid-area: list; grid-area: list;
} }
.ThreadPane, .ThreadPane,
.ThreadList + .no-results__holder { .ThreadList + .no-results__holder {
box-shadow: var(--elevation-2);
grid-area: pane; grid-area: pane;
outline: var(--border-light);
} }
> .no-results__holder { > .no-results__holder {
@@ -59,19 +69,15 @@
display: grid; display: grid;
overflow: hidden; overflow: hidden;
grid-template-areas: grid-template-areas: 'list pane';
'header header'
'list pane';
// 2-column // 2-column
grid-template-columns: var(--list) var(--pane); grid-template-columns: var(--list) var(--pane);
grid-template-rows: 56px 1fr; grid-template-rows: 1fr;
// single column // single column
@media screen and (max-width: 1020px) { @media screen and (max-width: 1020px) {
grid-template-areas: grid-template-areas: 'main main';
'header header'
'main main';
&:not(.thread-selected) { &:not(.thread-selected) {
.ThreadList { .ThreadList {
@@ -111,7 +117,7 @@
} }
.Header { .Header {
border-top: var(--border); border-top: var(--border-default);
} }
} }

Просмотреть файл

@@ -29,7 +29,6 @@ import LocalStorageStore from 'stores/local_storage_store';
import LoadingScreen from 'components/loading_screen'; import LoadingScreen from 'components/loading_screen';
import NoResultsIndicator from 'components/no_results_indicator'; import NoResultsIndicator from 'components/no_results_indicator';
import Header from 'components/widgets/header';
import {Constants, PreviousViewedTypes} from 'utils/constants'; import {Constants, PreviousViewedTypes} from 'utils/constants';
@@ -153,19 +152,6 @@ const GlobalThreads = () => {
id='app-content' id='app-content'
className={classNames('GlobalThreads app__content', {'thread-selected': Boolean(selectedThread)})} className={classNames('GlobalThreads app__content', {'thread-selected': Boolean(selectedThread)})}
> >
<Header
level={2}
className={'GlobalThreads___header'}
heading={formatMessage({
id: 'globalThreads.heading',
defaultMessage: 'Followed threads',
})}
subtitle={formatMessage({
id: 'globalThreads.subtitle',
defaultMessage: 'Threads youre participating in will automatically show here',
})}
/>
{isLoading || isEmptyList ? ( {isLoading || isEmptyList ? (
<div className='no-results__holder'> <div className='no-results__holder'>
{isLoading ? ( {isLoading ? (

Просмотреть файл

@@ -4,8 +4,6 @@
@import "sass/utils/_mixins"; @import "sass/utils/_mixins";
.ThreadItem { .ThreadItem {
--border: 1px solid rgba(var(--center-channel-color-rgb), 0.08);
position: relative; position: relative;
padding: 18px 18px 18px 28px; padding: 18px 18px 18px 28px;
cursor: pointer; cursor: pointer;

Просмотреть файл

@@ -18,8 +18,8 @@ exports[`components/threading/global_threads/thread_list should match snapshot 1
onClick={[Function]} onClick={[Function]}
> >
<Memo(MemoizedFormattedMessage) <Memo(MemoizedFormattedMessage)
defaultMessage="All your threads" defaultMessage="Followed threads"
id="threading.filters.allThreads" id="globalThreads.heading"
/> />
</Memo(Button)> </Memo(Button)>
</div> </div>

Просмотреть файл

@@ -9,7 +9,7 @@
.Header { .Header {
padding-right: 12px; padding-right: 12px;
padding-left: 12px; padding-left: 12px;
border-bottom: var(--border); border-bottom: var(--border-default);
color: rgba(var(--center-channel-color-rgb), 0.75); color: rgba(var(--center-channel-color-rgb), 0.75);
grid-area: header; grid-area: header;
@@ -69,7 +69,7 @@
} }
.ThreadItem { .ThreadItem {
border-bottom: var(--border); border-bottom: var(--border-default);
} }
.virtualized-thread-list { .virtualized-thread-list {

Просмотреть файл

@@ -205,8 +205,8 @@ const ThreadList = ({
onClick={handleRead} onClick={handleRead}
> >
<FormattedMessage <FormattedMessage
id='threading.filters.allThreads' id='globalThreads.heading'
defaultMessage='All your threads' defaultMessage='Followed threads'
/> />
</Button> </Button>
</div> </div>

Просмотреть файл

@@ -1,7 +1,6 @@
.ThreadPane { .ThreadPane {
display: grid; display: grid;
overflow: hidden;
grid-template-areas: grid-template-areas:
'header' 'header'
'pane'; 'pane';
@@ -13,7 +12,7 @@
align-items: center; align-items: center;
justify-content: space-between; justify-content: space-between;
padding: 12px 16px; padding: 12px 16px;
border-bottom: var(--border); border-bottom: var(--border-default);
grid-area: header; grid-area: header;
--button-separator-height: 24px; --button-separator-height: 24px;

Просмотреть файл

@@ -26,7 +26,7 @@
line-height: 16px; line-height: 16px;
} }
.content-container { .main-wrapper {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
margin-right: 24px; margin-right: 24px;

Просмотреть файл

@@ -7,7 +7,10 @@
max-width: 270px; max-width: 270px;
max-height: 80vh; max-height: 80vh;
padding: 8px 0; padding: 8px 0;
border-radius: 4px; border: solid 1px rgba(var(--center-channel-color-rgb), 0.12);
border-radius: var(--radius-s);
background-color: var(--center-channel-bg);
box-shadow: var(--elevation-4);
ul { ul {
padding: 8px 0; padding: 8px 0;

Просмотреть файл

@@ -95,7 +95,7 @@
padding: 0 3px; padding: 0 3px;
margin-right: 4px; margin-right: 4px;
margin-bottom: 2px; margin-bottom: 2px;
color: rgba(var(--center-channel-color-rgb), 0.72); color: rgba(var(--center-channel-color-rgb), 0.64);
vertical-align: middle; vertical-align: middle;
&::before { &::before {

Просмотреть файл

@@ -2,7 +2,7 @@
display: flex; display: flex;
align-items: center; align-items: center;
padding: 20px 20px 20px 32px; padding: 20px 20px 20px 32px;
border-bottom: 1px solid rgba(var(--center-channel-color-rgb), 0.08); border-bottom: var(--border-light);
background: none; background: none;
gap: 8px; gap: 8px;

Просмотреть файл

@@ -18,7 +18,7 @@
align-items: center; align-items: center;
padding: 8px 12px; padding: 8px 12px;
border: none; border: none;
border-radius: 4px; border-radius: var(--radius-s);
background: none; background: none;
color: rgba(var(--center-channel-color-rgb), 0.56); color: rgba(var(--center-channel-color-rgb), 0.56);
gap: 8px; gap: 8px;

Просмотреть файл

@@ -17,6 +17,8 @@
} }
.TeamIcon__initials { .TeamIcon__initials {
font-family: Metropolis, sans-serif;
letter-spacing: 0.02em;
user-select: none; user-select: none;
&.TeamIcon__initials__lg { &.TeamIcon__initials__lg {

Просмотреть файл

@@ -3757,7 +3757,6 @@
"globalThreads.searchGuidance.subtitle": "If youre looking for older conversations, try searching with {searchShortcut}", "globalThreads.searchGuidance.subtitle": "If youre looking for older conversations, try searching with {searchShortcut}",
"globalThreads.searchGuidance.title": "Thats the end of the list", "globalThreads.searchGuidance.title": "Thats the end of the list",
"globalThreads.sidebarLink": "Threads", "globalThreads.sidebarLink": "Threads",
"globalThreads.subtitle": "Threads youre participating in will automatically show here",
"globalThreads.threadList.noUnreadThreads": "No unread threads", "globalThreads.threadList.noUnreadThreads": "No unread threads",
"globalThreads.threadPane.unreadMessageLink": "You have {numUnread, plural, =0 {no unread threads} =1 {<link>{numUnread} thread</link>} other {<link>{numUnread} threads</link>}} {numUnread, plural, =0 {} other {with unread messages}}", "globalThreads.threadPane.unreadMessageLink": "You have {numUnread, plural, =0 {no unread threads} =1 {<link>{numUnread} thread</link>} other {<link>{numUnread} threads</link>}} {numUnread, plural, =0 {} other {with unread messages}}",
"globalThreads.threadPane.unselectedTitle": "{numUnread, plural, =0 {Looks like youre all caught up} other {Catch up on your threads}}", "globalThreads.threadPane.unselectedTitle": "{numUnread, plural, =0 {Looks like youre all caught up} other {Catch up on your threads}}",
@@ -5117,7 +5116,6 @@
"textbox.quote": ">quote", "textbox.quote": ">quote",
"textbox.strike": "strike", "textbox.strike": "strike",
"threadFromArchivedChannelMessage": "You are viewing a thread from an **archived channel**. New messages cannot be posted.", "threadFromArchivedChannelMessage": "You are viewing a thread from an **archived channel**. New messages cannot be posted.",
"threading.filters.allThreads": "All your threads",
"threading.filters.unreads": "Unreads", "threading.filters.unreads": "Unreads",
"threading.following": "Following", "threading.following": "Following",
"threading.footer.lastReplyAt": "Last reply {formatted}", "threading.footer.lastReplyAt": "Last reply {formatted}",

Просмотреть файл

@@ -78,7 +78,7 @@
--elevation-5: 0 12px 32px 0 rgba(0, 0, 0, 0.12); --elevation-5: 0 12px 32px 0 rgba(0, 0, 0, 0.12);
--elevation-6: 0 20px 32px 0 rgba(0, 0, 0, 0.12); --elevation-6: 0 20px 32px 0 rgba(0, 0, 0, 0.12);
//Corner Radius variables // Corner Radius variables
--radius-xs: 2px; --radius-xs: 2px;
--radius-s: 4px; --radius-s: 4px;
--radius-m: 8px; --radius-m: 8px;
@@ -86,6 +86,11 @@
--radius-xl: 16px; --radius-xl: 16px;
--radius-full: 50%; --radius-full: 50%;
// Border variables
--border-default: solid 1px rgba(var(--center-channel-color-rgb), 0.12);
--border-light: solid 1px rgba(var(--center-channel-color-rgb), 0.08);
--border-dark: solid 1px rgba(var(--center-channel-color-rgb), 0.16);
// Global Header variables // Global Header variables
--global-header-background: var(--sidebar-teambar-bg); --global-header-background: var(--sidebar-teambar-bg);
--global-header-text: var(--sidebar-header-text-color); --global-header-text: var(--sidebar-header-text-color);

Просмотреть файл

@@ -92,17 +92,46 @@ body.app__body #root {
display: grid; display: grid;
overflow: hidden; overflow: hidden;
--columns: min-content min-content minmax(385px, 1fr) minmax(0, auto) min-content;
grid-template: grid-template:
'announcement announcement announcement announcement announcement' min-content 'header' min-content
'header header header header header' min-content 'main'
'team-sidebar lhs center rhs app-sidebar' 'footer' min-content
'footer footer footer footer footer' min-content
/ var(--columns);
; ;
&.channel-view {
background-color: var(--sidebar-header-bg);
--columns: min-content minmax(385px, 1fr) min-content;
grid-template:
'announcement announcement announcement' min-content
'header header header' min-content
'team-sidebar main app-sidebar'
'footer footer footer' min-content
/ var(--columns);
;
&:has(.backstage-body){
background-color: $bg--gray;
}
}
&.console__root {
background-color: inherit;
padding-bottom: 0;
padding-right: 0;
grid-template:
'announcement announcement' min-content
'header header' min-content
'lhs center'
'footer footer' min-content
;
grid-template-columns: min-content auto;
}
&.container-fluid {
background: none;
display: block;
}
> :only-child { > :only-child {
grid-area: center;
width: 100%; width: 100%;
} }
@@ -114,52 +143,123 @@ body.app__body #root {
#global-header { #global-header {
grid-area: header; grid-area: header;
} }
.team-sidebar { .team-sidebar {
grid-area: team-sidebar; grid-area: team-sidebar;
} }
.main-wrapper {
position: relative;
display: grid;
overflow:hidden;
background-color: var(--sidebar-bg);
border: var(--border-light);
margin: 0 4px 4px 4px;
border-radius: var(--radius-l);
grid-area: main;
grid-template:
'lhs center rhs'
;
grid-template-columns: min-content minmax(385px, 1fr) min-content;
&:has(.backstage-body){
background: inherit;
padding: 0;
margin:0;
border-radius: 0;
grid-template:
'header' min-content
'main'
;
}
&:has(#playbooks-backstageRoot){
margin:0;
border-radius: 0;
}
}
&:has(.app-bar){
.main-wrapper {
margin-right:0;
}
}
&:has(.team-sidebar){
.main-wrapper {
margin-left: 0;
}
}
#SidebarContainer { #SidebarContainer {
grid-area: lhs; grid-area: lhs;
} }
#channel_view, #channel_view,
.product-wrapper { .product-wrapper {
grid-area: center; grid-area: center;
overflow: hidden; overflow: hidden;
} }
.sidebar--right--width-holder { .sidebar--right--width-holder {
grid-area: rhs; grid-area: rhs;
} }
#sidebar-right { #sidebar-right {
grid-area: rhs; top: 0;
right: 0;
@media screen and (min-width: 768px) { @media screen and (min-width: 768px) {
position: absolute; position: absolute;
right: 0;
} }
} }
.app-bar { .app-bar {
grid-area: app-sidebar; grid-area: app-sidebar;
} }
&:not(.console__root) { &:not(.console__root) {
@media screen and (max-width: 768px) { @media screen and (max-width: 768px) {
padding-bottom: 0;
padding-right: 0;
z-index: 17;
grid-template: grid-template:
'announcement' min-content 'announcement' min-content
'header' min-content 'header' min-content
'center' 'main' auto
'footer' min-content 'footer' min-content
/ auto / auto
; ;
.team-sidebar, .team-sidebar,
#SidebarContainer,
#channel_view,
.product-wrapper,
#sidebar-right,
.app-bar { .app-bar {
grid-area: center; grid-area: main;
} }
#SidebarContainer.move--right { #SidebarContainer.move--right {
position: relative; position: relative;
} }
.main-wrapper {
margin: 0;
grid-template:
'main'
;
padding:0;
border-radius: 0;
#channel_view,
#SidebarContainer,
.product-wrapper,
#sidebar-right {
grid-area: main;
border-radius: 0;
}
.channel-view {
border-radius: 0;
border: none;
box-shadow: none;
}
}
} }
} }
@@ -169,10 +269,12 @@ body.app__body #root {
display: none; display: none;
} }
#sidebar-right { #sidebar-right {
position: relative; position: absolute;
width: 100%; width: 100%;
grid-area: center;
transition: width .25s ease-in-out;
} }
--columns: min-content min-content 0 1fr min-content; --columns: min-content auto min-content;
} }
#sidebar-right { #sidebar-right {
transition: none; transition: none;
@@ -183,7 +285,19 @@ body.app__body #root {
/* stylelint-enable -- grid-template indentation */ /* stylelint-enable -- grid-template indentation */
#channel_view.channel-view { #channel_view.channel-view {
overflow: hidden;
border-radius: var(--radius-l);
border-left: var(--border-light);
background: var(--center-channel-bg); background: var(--center-channel-bg);
box-shadow: var(--elevation-1);
}
.rhs-open #channel_view.channel-view,
.rhs-open-expanded #channel_view.channel.view {
@media screen and (min-width: 1200px) {
padding-right: 20px;
margin-right: -20px;
}
} }
img { img {

Просмотреть файл

@@ -46,8 +46,8 @@
color: rgb(var(--center-channel-color-rgb)); color: rgb(var(--center-channel-color-rgb));
.modal-content { .modal-content {
border: 1px solid rgba(var(--center-channel-color-rgb), 0.16); border: var(--border-default);
border-radius: 12px; border-radius: var(--radius-l);
background: var(--center-channel-bg); background: var(--center-channel-bg);
} }
} }
@@ -150,7 +150,7 @@
grid-row-gap: 8px; grid-row-gap: 8px;
&.divider { &.divider {
border-top: 1px solid rgba(var(--center-channel-color-rgb), 0.08); border-top: var(--border-light);
} }
&.modal-footer--invisible { &.modal-footer--invisible {
@@ -260,7 +260,7 @@
background: transparent; background: transparent;
&.divider { &.divider {
border-bottom: 1px solid rgba(var(--center-channel-color-rgb), 0.12); border-bottom: var(--border-light);
} }
&::before, &::before,
@@ -283,7 +283,7 @@
right: 18px; right: 18px;
width: 40px; width: 40px;
height: 40px; height: 40px;
border-radius: 4px; border-radius: var(--radius-s);
color: rgba(var(--center-channel-color-rgb), 0.64); color: rgba(var(--center-channel-color-rgb), 0.64);
font-size: 30px; font-size: 30px;
font-weight: 400; font-weight: 400;
@@ -332,8 +332,8 @@
} }
.modal-content { .modal-content {
border: 1px solid rgba(var(--sys-center-channel-color-rgb), 0.16); border: var(--border-default);
border-radius: 12px; border-radius: var(--radius-l);
background: var(--sys-center-channel-bg); background: var(--sys-center-channel-bg);
} }
@@ -996,7 +996,7 @@
.filter-controls { .filter-controls {
padding: 24px 32px; padding: 24px 32px;
border-top: 1px solid rgba(var(--center-channel-color-rgb), 0.16); border-top: var(--border-default);
.filter-control__next { .filter-control__next {
float: right; float: right;

Просмотреть файл

@@ -111,7 +111,7 @@
} }
&.bottom { &.bottom {
margin-top: -30px; margin-top: -25px;
} }
} }

Просмотреть файл

@@ -11,7 +11,6 @@
.post-right-comments-container { .post-right-comments-container {
position: relative; position: relative;
margin-right: 5px;
.post { .post {
&:hover { &:hover {

Просмотреть файл

@@ -6,7 +6,7 @@
width: 100%; width: 100%;
max-height: 56px; max-height: 56px;
padding: 12px; padding: 12px;
border-bottom: 1px solid rgba(var(--center-channel-color-rgb), 0.12); border-bottom: var(--border-default);
background: v(center-channel-bg); background: v(center-channel-bg);
font-size: 14px; font-size: 14px;

Просмотреть файл

@@ -7,7 +7,7 @@ $sidebarOpacityAnimationDuration: 0.15s;
#TeamSidebar { #TeamSidebar {
z-index: 13; z-index: 13;
display: flex; display: flex;
width: 65px; width: 64px;
height: 100%; height: 100%;
flex-direction: column; flex-direction: column;
background-color: var(--sidebar-header-bg); background-color: var(--sidebar-header-bg);
@@ -28,17 +28,17 @@ $sidebarOpacityAnimationDuration: 0.15s;
z-index: 16; z-index: 16;
left: 0; left: 0;
display: flex; display: flex;
width: var(--overrideLhsWidth, 240px);
min-width: 240px; min-width: 240px;
max-width: 240px; max-width: 240px;
height: 100%; height: 100%;
flex-direction: column; flex-direction: column;
border-right: 1px solid rgba(var(--center-channel-color-rgb), 0.12);
background-color: var(--sidebar-bg); background-color: var(--sidebar-bg);
@media screen and (min-width: 769px) { @media screen and (min-width: 769px) {
width: var(--overrideLhsWidth, 264px);
min-width: 200px; min-width: 200px;
max-width: 264px; max-width: 264px;
background: none;
} }
@media screen and (min-width: 1201px) { @media screen and (min-width: 1201px) {
@@ -109,8 +109,6 @@ $sidebarOpacityAnimationDuration: 0.15s;
} }
.SidebarHeader { .SidebarHeader {
background-color: var(--sidebar-header-bg);
.header__info { .header__info {
color: var(--sidebar-header-text-color); color: var(--sidebar-header-text-color);
@@ -832,6 +830,7 @@ $sidebarOpacityAnimationDuration: 0.15s;
font-family: 'Open Sans', sans-serif; font-family: 'Open Sans', sans-serif;
font-size: 12px; font-size: 12px;
font-weight: 600; font-weight: 600;
letter-spacing: 0.05em;
text-align: left; text-align: left;
text-transform: uppercase; text-transform: uppercase;
transition: box-shadow 0.25s ease-in-out; transition: box-shadow 0.25s ease-in-out;

Просмотреть файл

@@ -43,25 +43,6 @@
padding: 0; padding: 0;
transform: translateX(100%); transform: translateX(100%);
&.is-open {
body:not(.layout-changing) & {
transition: width 0.25s 0s ease-in, z-index 0.25s 0s step-end;
}
}
&.expanded {
z-index: 13;
box-shadow: 0 8px 24px alpha-color($black, 0.24);
.sidebar-right__body {
overflow: hidden;
}
body:not(.layout-changing) & {
transition: width 0.25s 0s ease-in, z-index 0.15s 0.1s step-start;
}
}
.sidebar-right__table { .sidebar-right__table {
display: table; display: table;
@@ -92,8 +73,7 @@
height: 100%; height: 100%;
flex: 1 1 auto; flex: 1 1 auto;
flex-direction: column; flex-direction: column;
border-left: 1px solid rgba(var(--center-channel-color-rgb), 0.12); background: var(--center-channel-bg);
background: v(center-channel-bg);
.info-card { .info-card {
padding: 5px 15px 60px 15px; padding: 5px 15px 60px 15px;
@@ -152,7 +132,7 @@
overflow: hidden; overflow: hidden;
height: 2.4rem; height: 2.4rem;
padding: 0 8px; padding: 0 8px;
border-left: 1px solid rgba(var(--center-channel-color-rgb), 0.16); border-left: var(--border-light);
margin: 0 0 0 8px; margin: 0 0 0 8px;
color: rgba(var(--center-channel-color-rgb), 0.75); color: rgba(var(--center-channel-color-rgb), 0.75);
cursor: pointer; cursor: pointer;
@@ -180,7 +160,7 @@
overflow: hidden; overflow: hidden;
height: 2.4rem; height: 2.4rem;
padding: 0 8px; padding: 0 8px;
border-left: 1px solid rgba(var(--center-channel-color-rgb), 0.16); border-left: var(--border-default);
margin: 0 0 0 8px; margin: 0 0 0 8px;
color: rgba(var(--center-channel-color-rgb), 0.75); color: rgba(var(--center-channel-color-rgb), 0.75);
font-family: "Open Sans", sans-serif; font-family: "Open Sans", sans-serif;
@@ -205,8 +185,7 @@
align-items: center; align-items: center;
justify-content: space-between; justify-content: space-between;
padding: 0 16px 0 0; padding: 0 16px 0 0;
border-bottom: 1px solid rgba(var(--center-channel-color-rgb), 0.08); border-bottom: var(--border-default);
background: rgba(var(--center-channel-color-rgb), 0.04);
color: inherit; color: inherit;
white-space: nowrap; white-space: nowrap;
@@ -296,6 +275,29 @@
} }
} }
#sidebar-right {
overflow: hidden;
height: 100%;
border-left: var(--border-default);
box-shadow: var(--elevation-2);
&.expanded {
position: absolute;
z-index: 20;
box-shadow: var(--elevation-4);
.sidebar-right__body {
overflow: hidden;
}
}
body:not(.layout-changing) & {
transition-duration: 250ms;
transition-property: width, z-index, box-shadow;
transition-timing-function: ease-in-out;
}
}
// global header style adjustments // global header style adjustments
@media screen and (min-width: 769px) { @media screen and (min-width: 769px) {
// adjust RHS position and height // adjust RHS position and height
@@ -303,7 +305,7 @@
// If this is changed, the interaction with the App Bar icons must be tested // If this is changed, the interaction with the App Bar icons must be tested
//(see .app-bar__icon in components/app_bar/app_bar.scss) //(see .app-bar__icon in components/app_bar/app_bar.scss)
z-index: 20; z-index: 20;
top: 0; box-shadow: var(--elevation-2);
.sidebar-right-container { .sidebar-right-container {
height: 100%; height: 100%;

Просмотреть файл

@@ -4,7 +4,7 @@
width: 65px; width: 65px;
height: 100%; height: 100%;
flex-direction: column; flex-direction: column;
background: var(--sidebar-teambar-bg); background-color: var(--sidebar-header-bg);
text-align: center; text-align: center;
.fa { .fa {
@@ -21,7 +21,6 @@
width: 100%; width: 100%;
flex: 0 0 auto; flex: 0 0 auto;
padding: 16px 0 6px; padding: 16px 0 6px;
background-color: var(--sidebar-teambar-bg);
} }
.team-wrapper { .team-wrapper {
@@ -29,7 +28,6 @@
overflow: hidden; overflow: hidden;
height: 100%; height: 100%;
flex: 1 1 auto; flex: 1 1 auto;
background-color: var(--sidebar-teambar-bg);
-webkit-overflow-scrolling: touch; -webkit-overflow-scrolling: touch;
.draggable-team-container { .draggable-team-container {
@@ -127,7 +125,7 @@
} }
.scrollbar--view { .scrollbar--view {
padding-top: 15px; padding-top: 4px;
} }
.team-container a:hover { .team-container a:hover {
@@ -139,12 +137,11 @@
@media screen and (min-width: 769px) { @media screen and (min-width: 769px) {
// global header style adjustments // global header style adjustments
.team-sidebar { .team-sidebar {
background: none;
// use sidebar header variables for team sidebar // use sidebar header variables for team sidebar
--sidebar-teambar-bg: var(--sidebar-header-bg); --sidebar-teambar-bg: var(--sidebar-header-bg);
--sidebar-header-text-color: var(--sidebar-text); --sidebar-header-text-color: var(--sidebar-text);
--sidebar-teambar-bg-rgb: var(--sidebar-header-bg-rgb); --sidebar-teambar-bg-rgb: var(--sidebar-header-bg-rgb);
--sidebar-header-text-color-rgb: var(--sidebar-text-rgb); --sidebar-header-text-color-rgb: var(--sidebar-text-rgb);
border-right: solid 1px rgba(var(--center-channel-color-rgb), 0.08);
} }
} }

Просмотреть файл

@@ -1797,7 +1797,7 @@
left: 0; left: 0;
&.move--right { &.move--right {
left: 65px; left: 64px;
} }
} }

Просмотреть файл

@@ -28,7 +28,7 @@
overflow: auto; overflow: auto;
width: 100%; width: 100%;
background-color: $bg--gray; background-color: $bg--gray;
grid-area: center; grid-area: main;
} }
.backstage-content { .backstage-content {

Просмотреть файл

@@ -23,13 +23,13 @@
padding: 0; padding: 0;
&.divider { &.divider {
border-top: 1px solid rgba(var(--center-channel-color-rgb), 0.08); border-top: var(--border-light);
} }
.form-control { .form-control {
height: 40px; height: 40px;
box-sizing: border-box; box-sizing: border-box;
border: 1px solid rgba(var(--center-channel-color-rgb), 0.16); border: var(--border-default);
border-radius: 4px; border-radius: 4px;
&:focus { &:focus {
@@ -96,7 +96,7 @@
border: 1px solid rgba(var(--dnd-indicator-rgb), 0.16); border: 1px solid rgba(var(--dnd-indicator-rgb), 0.16);
margin-bottom: 24px; margin-bottom: 24px;
background: rgba(var(--dnd-indicator-rgb), 0.08); background: rgba(var(--dnd-indicator-rgb), 0.08);
border-radius: 4px; border-radius: var(--radius-s);
span { span {
color: var(--center-channel-color); color: var(--center-channel-color);