Skip to content

Commit 8ec0ee6

Browse files
committed
feat(app): add alternative theme on sidebar menu
1 parent 436aef3 commit 8ec0ee6

15 files changed

Lines changed: 43 additions & 69 deletions

File tree

apps/codeimage/src/components/Frame/FrameHandler.tsx

Lines changed: 1 addition & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,6 @@
11
import {focusedEditor$} from '@codeimage/store/editor';
22
import {onCopyToClipboard} from '@codeimage/store/effects/onCopyToClipboard';
3-
import {
4-
isAlternativeTheme$,
5-
toggleAlternativeTheme,
6-
} from '@codeimage/store/terminal';
7-
import {Box, Button} from '@codeimage/ui';
3+
import {Box} from '@codeimage/ui';
84
import {dispatch} from '@ngneat/effects';
95
import {assignInlineVars} from '@vanilla-extract/dynamic';
106
import {WithRef} from 'solid-headless/dist/types/utils/dynamic-prop';
@@ -46,8 +42,6 @@ export function FrameHandler(
4642

4743
const ratio = 0.1;
4844

49-
const isAlternative = from(isAlternativeTheme$);
50-
5145
createEffect(
5246
on([handlerRef], ([frame]) => {
5347
if (modality === 'mobile') {
@@ -83,20 +77,6 @@ export function FrameHandler(
8377
}
8478
ref={setHandlerRef}
8579
>
86-
<div class={styles.toolbar}>
87-
<Button
88-
variant={'solid'}
89-
size={'xs'}
90-
theme={'secondary'}
91-
style={{height: 'auto'}}
92-
onClick={() => toggleAlternativeTheme()}
93-
>
94-
{isAlternative()
95-
? 'Apply default theme'
96-
: 'Apply alternative theme'}
97-
</Button>
98-
</div>
99-
10080
<div
10181
class={styles.content}
10282
ref={createRef<'div'>(props, e => {

apps/codeimage/src/components/PropertyEditor/WindowStyleForm.tsx

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
import {useI18n} from '@codeimage/locale';
22
import {
33
setAccentVisible,
4-
setOpacity,
4+
setAlternativeTheme,
55
setShowGlassReflection,
66
setShowHeader,
77
setShowWatermark,
88
setType,
99
terminal$,
1010
} from '@codeimage/store/terminal';
11-
import {RangeField, SegmentedField} from '@codeimage/ui';
11+
import {SegmentedField} from '@codeimage/ui';
1212
import {ParentComponent, Show} from 'solid-js';
1313
import {fromObservableObject} from '../../core/hooks/from-observable-object';
1414
import {AppLocaleEntries} from '../../i18n';
@@ -24,6 +24,20 @@ export const WindowStyleForm: ParentComponent = () => {
2424
<>
2525
<PanelHeader label={t('frame.terminal')} />
2626

27+
<PanelRow for={'frameAlternativeField'} label={t('frame.backgroundType')}>
28+
<TwoColumnPanelRow>
29+
<SegmentedField
30+
size={'xs'}
31+
value={terminal.alternativeTheme}
32+
onChange={setAlternativeTheme}
33+
items={[
34+
{label: 'Default', value: false},
35+
{label: 'Alternative', value: true},
36+
]}
37+
/>
38+
</TwoColumnPanelRow>
39+
</PanelRow>
40+
2741
<PanelRow for={'frameHeaderField'} label={t('frame.header')}>
2842
<TwoColumnPanelRow>
2943
<SegmentedField
@@ -50,7 +64,7 @@ export const WindowStyleForm: ParentComponent = () => {
5064
</PanelRow>
5165
</Show>
5266

53-
<Show when={terminal.showHeader}>
67+
<Show when={terminal.showHeader && !terminal.alternativeTheme}>
5468
<PanelRow for={'frameTabAccentField'} label={t('frame.tabAccent')}>
5569
<TwoColumnPanelRow>
5670
<SegmentedField
@@ -93,16 +107,6 @@ export const WindowStyleForm: ParentComponent = () => {
93107
/>
94108
</TwoColumnPanelRow>
95109
</PanelRow>
96-
97-
<PanelRow for={'frameOpacityField'} label={t('frame.opacity')}>
98-
<TwoColumnPanelRow>
99-
<RangeField
100-
size={'xs'}
101-
value={terminal.opacity}
102-
onChange={setOpacity}
103-
/>
104-
</TwoColumnPanelRow>
105-
</PanelRow>
106110
</>
107111
);
108112
};

apps/codeimage/src/components/Terminal/dynamic/DynamicTerminal.tsx

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ import {Box, FadeInOutTransition} from '@codeimage/ui';
22
import {createMemo, JSXElement, ParentComponent} from 'solid-js';
33
import {Dynamic} from 'solid-js/web';
44
import {omitProps} from 'solid-use';
5-
import {appEnvironment} from '../../../core/configuration';
65
import {AVAILABLE_TERMINAL_THEMES} from '../../../core/configuration/terminal-themes';
76
import {CodeImageLogo} from '../../Icons/CodeImageLogo';
87
import * as styles from '../terminal.css';
@@ -20,7 +19,7 @@ export const DynamicTerminal: ParentComponent<DynamicTerminalProps> = (
2019
const terminal = createMemo(
2120
() =>
2221
terminalThemes.entries[
23-
props.type as typeof appEnvironment['terminalThemes']['keys'][number]
22+
props.type as typeof terminalThemes['keys'][number]
2423
].component,
2524
);
2625

apps/codeimage/src/components/Terminal/macOS/MacOsTerminal.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,14 @@ import * as styles from './MacOsTerminal.css';
1111
export const exportExclude = _exportExclude;
1212

1313
export const MacOsTerminal: ParentComponent<BaseTerminalProps> = props => {
14-
const hasAccent = () => props.accentVisible && props.opacity === 100;
14+
const showTab = () => props.accentVisible && !props.alternativeTheme;
1515
return (
1616
<TerminalHost {...props} theme={styles.theme}>
1717
<Show when={props.showHeader}>
1818
<div
1919
class={baseStyles.header}
2020
data-theme-mode={props.darkMode ? 'dark' : 'light'}
21-
data-accent-visible={hasAccent()}
21+
data-accent-visible={showTab()}
2222
>
2323
<div class={styles.headerIconRow}>
2424
<div
@@ -44,7 +44,7 @@ export const MacOsTerminal: ParentComponent<BaseTerminalProps> = props => {
4444
<Show when={props.showTab}>
4545
<div
4646
use:exportExclude={!props.tabName?.length}
47-
class={baseStyles.tab({accent: hasAccent()})}
47+
class={baseStyles.tab({accent: showTab()})}
4848
>
4949
<Show when={props.tabIcon}>
5050
{icon => <TabIcon content={icon} />}

apps/codeimage/src/components/Terminal/windows/WindowsTerminal.tsx

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,19 +12,22 @@ import {WindowsTerminalControls} from './WindowsTerminalControls';
1212
export const exportExclude = _exportExclude;
1313

1414
export const WindowsTerminal: ParentComponent<BaseTerminalProps> = props => {
15+
const showTab = () => !!props.accentVisible && !props.alternativeTheme;
1516
return (
1617
<TerminalHost {...props} theme={styles.theme}>
1718
<Show when={props.showHeader}>
1819
<div
1920
class={baseStyles.header}
2021
data-theme-mode={props.darkMode ? 'dark' : 'light'}
21-
data-accent-visible={props.accentVisible}
22+
data-accent-visible={showTab()}
2223
>
2324
<Show when={props.showTab}>
2425
<div
2526
use:exportExclude={!props.tabName?.length}
2627
class={clsx(
27-
baseStyles.tab({accent: props.accentVisible}),
28+
baseStyles.tab({
29+
accent: showTab(),
30+
}),
2831
sprinkles({marginLeft: 6}),
2932
)}
3033
>

apps/codeimage/src/components/TerminalControlField/TerminalControlField.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ export function TerminalControlField(
3838
readonlyTab={true}
3939
showHeader={true}
4040
showWatermark={false}
41+
alternativeTheme={false}
42+
opacity={100}
4143
showGlassReflection={terminalState.showGlassReflection}
4244
/>
4345
</Box>

apps/codeimage/src/components/ThemeSwitcher/ThemeSwitcher.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,7 @@ export const ThemeSwitcher: ParentComponent<ThemeSwitcherVariant> = props => {
106106
showWatermark={false}
107107
showGlassReflection={terminal.showGlassReflection}
108108
opacity={100}
109+
alternativeTheme={terminal.alternativeTheme}
109110
>
110111
<Text size={'sm'}>{`// Code here`}</Text>
111112
</DynamicTerminal>

apps/codeimage/src/core/configuration.ts

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,6 @@ export const [appEnvironment] = createConfiguration({
2020
locales: SUPPORTED_LOCALES,
2121
themes: SUPPORTED_THEMES,
2222
languages: [],
23-
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
24-
// @ts-ignore
25-
terminalThemes: {},
2623
editorPadding: [16, 32, 64, 128],
2724
fonts: SUPPORTED_FONTS,
2825
defaultState: {
@@ -44,5 +41,5 @@ export const [appEnvironment] = createConfiguration({
4441
theme: SUPPORTED_THEMES_DICTIONARY.vsCodeDarkTheme,
4542
font: SUPPORTED_FONTS_DICTIONARY['jetbrains-mono'],
4643
},
47-
},
44+
} as const,
4845
});

apps/codeimage/src/i18n/sidebar.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ export default {
1717
font: 'Font',
1818
fontWeight: 'Font weight',
1919
reflection: 'Reflection',
20+
backgroundType: 'Background',
2021
},
2122
},
2223
it: {
@@ -37,6 +38,7 @@ export default {
3738
fontWeight: 'Peso carattere',
3839
reflection: 'Riflesso',
3940
watermark: 'Watermark',
41+
backgroundType: 'Tipo background',
4042
},
4143
},
4244
de: {
@@ -57,6 +59,7 @@ export default {
5759
fontWeight: 'Schriftart',
5860
reflection: 'Reflex',
5961
watermark: 'Schriftstärke',
62+
backgroundType: 'Background type',
6063
},
6164
},
6265
} as const;

apps/codeimage/src/state/effects/onTabNameChange.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1+
import {SUPPORTED_LANGUAGES} from '@codeimage/config';
12
import {editorLanguageId$, setLanguageId} from '@codeimage/store/editor';
23
import {createAction, createEffect, ofType, props} from '@ngneat/effects';
34
import {filterNil} from '@ngneat/elf';
45
import {debounceTime, map, tap, withLatestFrom} from 'rxjs';
5-
import {appEnvironment} from '../../core/configuration';
66

77
export const updateTabName = createAction(
88
'[CodeImage] Update Tab Name',
@@ -19,7 +19,7 @@ export const onTabNameChange$ = createEffect(actions =>
1919
languageId,
2020
})),
2121
map(({tabName, languageId}) => {
22-
const matches = appEnvironment.languages.filter(language => {
22+
const matches = SUPPORTED_LANGUAGES.filter(language => {
2323
return language.icons.some(({matcher}) => matcher.test(tabName));
2424
});
2525

0 commit comments

Comments
 (0)