Skip to content

Commit 4ff79da

Browse files
committedAug 2, 2022
refactor: removed all SCSS code
1 parent 48a7c6a commit 4ff79da

23 files changed

+278
-327
lines changed
 

‎index.html

+6
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,12 @@
1212
crossorigin="anonymous"
1313
/>
1414
<link rel="stylesheet" href="./src/reset.css" />
15+
<style>
16+
body {
17+
background-color: black;
18+
height: 100vh;
19+
}
20+
</style>
1521
<link rel="apple-touch-icon" href="apple-icon-180.png" />
1622

1723
<meta name="apple-mobile-web-app-capable" content="yes" />

‎package-lock.json

+41-3
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
"@szhsin/react-menu": "^3.1.2",
2929
"axios": "^0.21.2",
3030
"body-parser": "^1.19.0",
31+
"colorjs.io": "^0.3.0",
3132
"cors": "^2.8.5",
3233
"express": "^4.17.1",
3334
"localforage": "^1.9.0",
@@ -51,7 +52,6 @@
5152
"dotenv": "^10.0.0",
5253
"eslint": "^7.19.0",
5354
"husky": "^7.0.1",
54-
"sass": "^1.32.6",
5555
"typescript": "^4.3.5",
5656
"vite": "^3.0.4",
5757
"vite-plugin-pwa": "^0.12.3"

‎src/0-dom/color-scheme.scss

-15
This file was deleted.

‎src/0-dom/ellipsis.scss

-5
This file was deleted.

‎src/0-dom/fit-parent.scss

-4
This file was deleted.

‎src/0-dom/hide-scrollbar.scss

-8
This file was deleted.

‎src/0-dom/responsive.scss

-11
This file was deleted.

‎src/0-dom/responsive.ts

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
export const mobileOnly = ' @media (max-width: 850px)';
2+
export const desktopOnly = '@media (min-width: 851px)';

‎src/0-dom/shadow-on-scroll.scss

-33
This file was deleted.

‎src/0-dom/tooltip.scss ‎src/0-dom/tooltip.css

+12-12
Original file line numberDiff line numberDiff line change
@@ -30,20 +30,20 @@
3030

3131
animation-name: tooltip-show-hide;
3232
animation-duration: 3s;
33+
}
3334

34-
&.top {
35-
transform: translate(-50%, calc(-100% - 16px));
36-
}
35+
.tooltip.top {
36+
transform: translate(-50%, calc(-100% - 16px));
37+
}
3738

38-
&.bottom {
39-
transform: translate(-50%, 16px);
40-
}
39+
.tooltip.bottom {
40+
transform: translate(-50%, 16px);
41+
}
4142

42-
&.left {
43-
transform: translate(calc(-100% - 16px), -50%);
44-
}
43+
.tooltip.left {
44+
transform: translate(calc(-100% - 16px), -50%);
45+
}
4546

46-
&.right {
47-
transform: translate(16px, -50%);
48-
}
47+
.tooltip.right {
48+
transform: translate(16px, -50%);
4949
}

‎src/0-dom/tooltip.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { getMousePosition } from '../1-core/mouse';
22
import { escapeHtml } from './escapeHtml';
3-
import './tooltip.scss';
3+
import './tooltip.css';
44

55
export function tooltip(
66
text: string,

‎src/5-app/App.scss

-119
This file was deleted.

‎src/5-app/App.tsx

+56-3
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,66 @@
1+
import { Global } from '@emotion/react';
2+
import styled from '@emotion/styled';
13
import { useEffect, useState } from 'react';
4+
import { desktopOnly, mobileOnly } from '../0-dom/responsive';
25
import { createStore } from '../4-storage';
36
import { AppStorage } from '../4-storage/AppStorage';
47
import { useNavigator } from '../6-hooks/useNavigator';
58
import { Loader } from '../7-components/atoms/Loader';
69
import { NotesList } from '../7-components/NotesList/NotesList';
7-
import './App.scss';
810
import { StorageContext } from './contexts';
911
import { Router } from './Router';
12+
import { globalStyles } from './theme';
1013
import { useGithubAuth } from './useGithubAuth';
1114

15+
const StyledAppContainer = styled.div`
16+
height: 100vh;
17+
width: 100vw;
18+
overflow: hidden;
19+
20+
font-family: Arial, Helvetica, sans-serif;
21+
22+
display: grid;
23+
align-items: stretch;
24+
align-content: stretch;
25+
justify-items: stretch;
26+
grid-template-rows: minmax(0, 1fr);
27+
28+
--gist-item-height: 28px;
29+
30+
> main {
31+
grid-area: editor;
32+
z-index: 1;
33+
}
34+
35+
${mobileOnly} {
36+
grid-template-columns: 100vw;
37+
38+
&.page-home {
39+
grid-template-areas: 'list';
40+
}
41+
42+
&.page-note {
43+
grid-template-areas: 'editor';
44+
45+
> aside {
46+
display: none;
47+
}
48+
}
49+
}
50+
51+
${desktopOnly} {
52+
&:not(.page-home) {
53+
--sidebar-width: calc(
54+
calc(var(--setting-sidebarWidth, 400) * var(--setting-sidebarVisible)) *
55+
1px
56+
);
57+
}
58+
59+
grid-template-columns: var(--sidebar-width) 1fr;
60+
grid-template-areas: 'list editor';
61+
}
62+
`;
63+
1264
export function App() {
1365
const [store, setStore] = useState<AppStorage>(null!);
1466
const { token, username } = useGithubAuth();
@@ -43,12 +95,13 @@ export function App() {
4395

4496
return (
4597
<StorageContext.Provider value={store}>
46-
<div className={`app page-${pageName}`}>
98+
<Global styles={globalStyles} />
99+
<StyledAppContainer className={`page-${pageName}`}>
47100
<NotesList />
48101
<main>
49102
<Router />
50103
</main>
51-
</div>
104+
</StyledAppContainer>
52105
</StorageContext.Provider>
53106
);
54107
}

‎src/5-app/theme.tsx

+68
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
import { css } from '@emotion/react';
2+
import Color from 'colorjs.io';
3+
import { desktopOnly } from '../0-dom/responsive';
4+
5+
const fg = new Color('#c4c4c4').to('lch');
6+
const bg = new Color('#1c1c1c').to('lch');
7+
const sidebar = new Color('#252526').to('lch');
8+
const border = new Color('#343637').to('lch');
9+
const primary = new Color('#669bd1').to('lch');
10+
const secondary = new Color('#f2f230').to('lch');
11+
// const secondary = new Color('#d16014');
12+
// const secondary = new Color('#c9866e');
13+
14+
const rgba = (color: Color, l = 0) =>
15+
color
16+
.clone()
17+
.set('l', color.l + l)
18+
.to('sRGB')
19+
.toString();
20+
21+
export const globalStyles = css`
22+
#app-container {
23+
color: var(--fg-color);
24+
background-color: var(--bg-color);
25+
width: 100vw;
26+
height: 100vh;
27+
28+
&.is-virtual-keyboard-open .mobile-fallback {
29+
height: 50%;
30+
}
31+
32+
--animation-speed: 0.25s;
33+
--group-border-width: 2px;
34+
--status-line-width: var(--group-border-width);
35+
--status-line-color: transparent;
36+
37+
{mobileOnly} {
38+
--sidebar-font-size: 1rem;
39+
--sidebar-gap: 0.5rem;
40+
}
41+
42+
${desktopOnly} {
43+
--sidebar-font-size: 0.9rem;
44+
--sidebar-gap: 0.4rem;
45+
}
46+
47+
--fg-color: ${rgba(fg)};
48+
--fg-color-active: ${rgba(fg, 100)};
49+
50+
--bg-color: ${rgba(bg)};
51+
--bg-color-sidebar: ${rgba(sidebar)};
52+
--bg-color-control: ${rgba(bg, -2)};
53+
--bg-color-hover: ${rgba(bg, 10)};
54+
--border-color: ${rgba(border)};
55+
56+
--bg-color-active: ${rgba(primary, -20)};
57+
--border-color-active: ${rgba(primary, 0)};
58+
59+
--note-item-color: ${rgba(bg, 2)};
60+
--favorite-color: ${rgba(secondary)};
61+
62+
--group-color: var(--bg-color-sidebar);
63+
--group-active-color: ${rgba(primary, -30)};
64+
--group-border-color: ${rgba(secondary, -30)};
65+
66+
// }
67+
}
68+
`;

‎src/7-components/Editor/MobileFallback.scss

-46
This file was deleted.

‎src/7-components/Editor/MobileFallback.tsx

+35-21
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,40 @@
1+
import { css } from '@emotion/react';
2+
import styled from '@emotion/styled';
13
import { useMonaco } from '@monaco-editor/react';
24
import { createRef, useEffect, useState } from 'react';
5+
import { hideScrollbar } from '../../0-dom/hideScrollbar';
36
import { useSetting } from '../../6-hooks/useSetting';
4-
import './MobileFallback.scss';
57
import { extendMonaco } from './monaco/extendMonaco';
68
import { theme } from './monacoConfiguration';
79

8-
// import MarkdownPreview from '@uiw/react-markdown-preview';
10+
const Fallback = css`
11+
box-sizing: border-box;
12+
padding: 24px;
13+
height: 100vh;
14+
--toolbar-height: 0;
15+
`;
16+
17+
const Preview = styled.pre`
18+
${Fallback}
19+
${hideScrollbar}
20+
font-size: 13px;
21+
line-height: 1.15rem;
22+
overflow: auto;
23+
`;
24+
25+
const Textarea = styled.textarea`
26+
${Fallback}
27+
appearance: none;
28+
border: none;
29+
outline: none;
30+
padding: 8px;
31+
background-color: #1c1c1c;
32+
color: inherit;
33+
width: 100%;
34+
height: calc(100vh - var(--toolbar-height));
35+
padding: 32px;
36+
box-sizing: border-box;
37+
`;
938

1039
export interface MobileFallbackProps {
1140
language: string;
@@ -46,37 +75,22 @@ export function MobileFallback({
4675

4776
if (!isPreview) {
4877
return (
49-
<textarea
78+
<Textarea
5079
ref={x => x?.style.setProperty('--toolbar-height', `${gap || 0}px`)}
51-
className="mobile-fallback mobile-fallback--textarea"
5280
defaultValue={value}
5381
readOnly={readonly}
5482
autoFocus={autofocus}
5583
autoComplete=""
5684
onChange={e => onChange(e.target.value)}
57-
></textarea>
85+
/>
5886
);
5987
}
6088

61-
// if (language === 'markdown') {
62-
// return (
63-
// <div
64-
// className="mobile-fallback mobile-fallback--markdown"
65-
// onClick={() => setIsPreview(false)}
66-
// >
67-
// <MarkdownPreview className="mobile-fallback--renderer" source={value} />
68-
// </div>
69-
// );
70-
// }
71-
7289
return (
73-
<pre
74-
className="mobile-fallback mobile-fallback--code"
75-
onClick={() => setIsPreview(false)}
76-
>
90+
<Preview onClick={() => setIsPreview(false)}>
7791
<code ref={ref} lang={language} data-lang={language}>
7892
{value}
7993
</code>
80-
</pre>
94+
</Preview>
8195
);
8296
}

‎src/7-components/Editor/MonacoEditor.scss

-10
This file was deleted.

‎src/7-components/Editor/MonacoEditor.tsx

+8-2
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import styled from '@emotion/styled';
12
import Editor, { useMonaco } from '@monaco-editor/react';
23
import { editor } from 'monaco-editor';
34
import { isMobile } from '../../0-dom/isMobile';
@@ -6,7 +7,12 @@ import { useSetting } from '../../6-hooks/useSetting';
67
import { MobileFallback } from './MobileFallback';
78
import { extendMonaco } from './monaco/extendMonaco';
89
import * as hardcodedConfig from './monacoConfiguration';
9-
import './MonacoEditor.scss';
10+
11+
const StyledEditor = styled(Editor)`
12+
.monaco-editor {
13+
overflow: hidden;
14+
}
15+
`;
1016

1117
export function MonacoEditor({
1218
value,
@@ -43,7 +49,7 @@ export function MonacoEditor({
4349
}
4450

4551
return (
46-
<Editor
52+
<StyledEditor
4753
className="editor"
4854
height={gap ? `calc(100vh - ${gap}` : '100vh'}
4955
theme={hardcodedConfig.theme}

‎src/7-components/NotesList/NoteItem.tsx

+1-2
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,8 @@ const NoteItemContainer = styled.h5`
2424
cursor: pointer;
2525
gap: var(--sidebar-gap);
2626
padding: var(--sidebar-gap);
27+
border: 1px solid transparent;
2728
border-left: var(--status-line-width) solid var(--status-line-color);
28-
border-bottom: 1px solid transparent;
29-
background-color: var(--note-item-color);
3029
user-select: none;
3130
3231
&:hover {

‎src/7-components/atoms/BusinessIndicator.tsx

+3-3
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,9 @@ export function BusinessIndicator() {
4040

4141
useEffect(() => onBusinessChange(setIsBusy) as () => void);
4242

43-
// if (!isBusy) {
44-
// return null;
45-
// }
43+
if (!isBusy) {
44+
return null;
45+
}
4646

4747
return (
4848
<Container>

‎src/7-components/routes/EditSettings.scss

-20
This file was deleted.

‎src/7-components/routes/EditSettings.tsx

+44-8
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
import React, { useEffect, useState } from 'react';
1+
import styled from '@emotion/styled';
2+
import { useEffect, useState } from 'react';
23
import { DEFAULT_SETTINGS } from '../../2-entities/Settings';
34
import { DEFAULT_SHORTCUTS } from '../../2-entities/Shortcuts';
45
import { RemoteJson } from '../../4-storage/helpers/RemoteJson';
@@ -7,7 +8,38 @@ import { useStore } from '../../6-hooks/useStore';
78
import { isDeserializable, serialize } from '../../util/serialization';
89
import { Loader } from '../atoms/Loader';
910
import { Editor } from '../Editor/Editor';
10-
import './EditSettings.scss';
11+
12+
const SettingsEditor = styled.div`
13+
flex: 1;
14+
`;
15+
16+
const TabContainer = styled.nav`
17+
display: flex;
18+
align-items: stretch;
19+
justify-content: center;
20+
min-height: 2rem;
21+
border-left: 1px solid var(--border-color);
22+
background-color: var(--bg-color-sidebar);
23+
padding: var(--sidebar-gap);
24+
gap: calc(var(--sidebar-gap) * 2);
25+
`;
26+
27+
const Tab = styled.div`
28+
--spacing: calc(var(--sidebar-gap) * 1.6);
29+
30+
cursor: default;
31+
border: 1px solid var(--border-color);
32+
padding: var(--spacing);
33+
34+
&:first-of-type {
35+
border-left: 1px solid var(--border-color);
36+
}
37+
38+
&.active,
39+
&:hover {
40+
background-color: var(--bg-color-hover);
41+
}
42+
`;
1143

1244
function useRemoteJson<T>(remote: RemoteJson<T>) {
1345
const [loading, setLoading] = useState(true);
@@ -71,20 +103,24 @@ export function EditSettings() {
71103
const { loading, ...selected } = tabs[tab];
72104

73105
return (
74-
<div className="settings-editor">
75-
<nav>
106+
<SettingsEditor>
107+
<TabContainer>
76108
{tabs.map((x, i) => (
77-
<div key={x.title} className="tab" onClick={() => setTab(i)}>
109+
<Tab
110+
key={x.title}
111+
className={tab === i ? 'active' : undefined}
112+
onClick={() => setTab(i)}
113+
>
78114
{x.title}
79-
</div>
115+
</Tab>
80116
))}
81-
</nav>
117+
</TabContainer>
82118

83119
{loading ? (
84120
<Loader />
85121
) : (
86122
<Editor key={selected.title} gap="33px" ext=".json" {...selected} />
87123
)}
88-
</div>
124+
</SettingsEditor>
89125
);
90126
}

0 commit comments

Comments
 (0)
Please sign in to comment.