Skip to content

Commit 2278697

Browse files
bminglesdsmmcken
andauthored
feat: Theming - Spectrum variable mapping and light theme (#1680)
Theming - Spectrum variable mapping resolves #1669 resolves #1539 --------- Co-authored-by: Don McKenzie <donmckenzie@deephaven.io>
1 parent 4a8a81a commit 2278697

502 files changed

Lines changed: 2187 additions & 594 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

packages/code-studio/src/main/AppMainContainer.scss

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -280,6 +280,7 @@ $nav-space: 4px; // give a gap around some buttons for focus area that are in na
280280
display: flex;
281281
width: 100%;
282282
justify-content: space-between;
283+
align-items: center;
283284

284285
.btn-link {
285286
font-size: $tab-font-size;

packages/code-studio/src/main/AppMainContainer.tsx

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import {
2020
Button,
2121
InfoModal,
2222
LoadingSpinner,
23+
Logo,
2324
BasicModal,
2425
DebouncedModal,
2526
} from '@deephaven/components';
@@ -91,7 +92,6 @@ import JSZip from 'jszip';
9192
import SettingsMenu from '../settings/SettingsMenu';
9293
import AppControlsMenu from './AppControlsMenu';
9394
import { getLayoutStorage, getServerConfigValues } from '../redux';
94-
import Logo from '../settings/community-wordmark-app.svg';
9595
import './AppMainContainer.scss';
9696
import WidgetList, { WindowMouseEvent } from './WidgetList';
9797
import EmptyDashboard from './EmptyDashboard';
@@ -740,12 +740,7 @@ export class AppMainContainer extends Component<
740740
>
741741
<nav className="nav-container">
742742
<div className="app-main-top-nav-menus">
743-
<img
744-
src={Logo}
745-
alt="Deephaven Data Labs"
746-
width="115px"
747-
className="ml-1"
748-
/>
743+
<Logo className="ml-1" style={{ maxHeight: '20px' }} />
749744
<div>
750745
<Button
751746
kind="ghost"
@@ -800,10 +795,7 @@ export class AppMainContainer extends Component<
800795
onClick={this.handleSettingsMenuShow}
801796
icon={
802797
<span className="fa-layers">
803-
<FontAwesomeIcon
804-
icon={vsGear}
805-
transform="grow-3 right-1 down-1"
806-
/>
798+
<FontAwesomeIcon icon={vsGear} transform="grow-3" />
807799
{isDisconnected && !isAuthFailed && (
808800
<>
809801
<FontAwesomeIcon

packages/code-studio/src/settings/LegalNotice.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ function LegalNotice(): ReactElement {
1313
<Button kind="ghost" onClick={toggle} icon={vsLaw}>
1414
Legal Notices
1515
</Button>
16-
<Modal isOpen={modal} toggle={toggle} className="theme-bg-light">
16+
<Modal isOpen={modal} toggle={toggle}>
1717
<ModalHeader toggle={toggle}>Legal Notice</ModalHeader>
1818
<ModalBody>
1919
<p>

packages/code-studio/src/settings/SettingsMenu.scss

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
@import '@deephaven/components/scss/custom.scss';
22

3-
$settings-menu-bg: $gray-700;
43
$settings-menu-width: 400px;
54
$settings-menu-header-min-height: 60px;
65
$settings-menu-padding: $spacer-3;
@@ -9,7 +8,7 @@ $settings-menu-header-color: var(--dh-color-fg);
98

109
$settings-menu-collapse-trigger-color: var(--dh-color-fg);
1110

12-
$settings-menu-rule-bg: $gray-600;
11+
$settings-menu-rule-bg: $gray-800;
1312
$settings-menu-rule-button-color: $gray-300;
1413
$settings-menu-rule-border: $gray-400;
1514
$settings-menu-rule-focused-border: $primary;
@@ -21,9 +20,12 @@ $input-btn-focus-box-shadow-over-primary: 0 0 0 0.2rem
2120
$settings-menu-z-index: $zindex-modal;
2221

2322
.app-settings-menu {
23+
--settings-menu-bg: var(--dh-color-surface-bg);
24+
--dh-color-hr: var(--dh-color-gray-500);
25+
2426
display: flex;
2527
flex-direction: column;
26-
background: $settings-menu-bg;
28+
background: var(--settings-menu-bg);
2729
box-shadow: $box-shadow;
2830
position: fixed;
2931
top: 0;
@@ -181,7 +183,7 @@ $settings-menu-z-index: $zindex-modal;
181183
.app-settings-footer {
182184
.app-settings-footer-section {
183185
padding: $settings-menu-padding 0;
184-
border-top: 1px solid $gray-800;
186+
border-top: 1px solid var(--dh-color-hr);
185187
.app-settings-footer-item:not(:last-child) {
186188
padding-bottom: $settings-menu-padding;
187189
}

packages/code-studio/src/settings/SettingsMenu.tsx

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import {
1313
import {
1414
Button,
1515
CopyButton,
16+
Logo,
1617
ThemeContext,
1718
ThemePicker,
1819
Tooltip,
@@ -24,7 +25,6 @@ import {
2425
makeMessage,
2526
} from '@deephaven/jsapi-utils';
2627
import { assertNotNull } from '@deephaven/utils';
27-
import Logo from './community-wordmark-app.svg';
2828
import FormattingSectionContent from './FormattingSectionContent';
2929
import LegalNotice from './LegalNotice';
3030
import SettingsMenuSection from './SettingsMenuSection';
@@ -147,6 +147,7 @@ export class SettingsMenu extends Component<
147147
const userDisplayName = user.displayName ?? user.name;
148148
const hasUserImage = user.image != null && user.image !== '';
149149
const showUserName = userDisplayName !== '';
150+
150151
return (
151152
<div className="app-settings-menu">
152153
<header className="app-settings-menu-header">
@@ -345,16 +346,17 @@ export class SettingsMenu extends Component<
345346
</div>
346347
</div>
347348
<div className="app-settings-footer-section">
348-
<div className="logo">
349-
<a
350-
target="_blank"
351-
rel="noreferrer noopener"
352-
href="https://deephaven.io"
353-
className="d-inline-block custom-link p-1"
354-
>
355-
<img src={Logo} alt="Deephaven Data Labs" width="230px" />
356-
</a>
357-
</div>
349+
<a
350+
target="_blank"
351+
rel="noreferrer noopener"
352+
href="https://deephaven.io"
353+
style={{
354+
display: 'block',
355+
width: '61.8%',
356+
}}
357+
>
358+
<Logo />
359+
</a>
358360
</div>
359361
</div>
360362
</div>

packages/code-studio/src/styleguide/Buttons.tsx

Lines changed: 26 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,10 @@ import { Button, ButtonOld, SocketedButton } from '@deephaven/components';
55
import { dhTruck } from '@deephaven/icons';
66
import { sampleSectionIdAndClasses } from './utils';
77

8+
function noOp(): void {
9+
return undefined;
10+
}
11+
812
interface ButtonsState {
913
toggle: boolean;
1014
}
@@ -80,31 +84,38 @@ class Buttons extends Component<Record<string, never>, ButtonsState> {
8084
return (
8185
<div {...sampleSectionIdAndClasses('buttons-socketed')}>
8286
<h5>Socketed Buttons (for linker)</h5>
83-
<SocketedButton style={{ marginBottom: '1rem', marginRight: '1rem' }}>
87+
<SocketedButton
88+
style={{ marginBottom: '1rem', marginRight: '1rem' }}
89+
onClick={noOp}
90+
>
8491
Unlinked
8592
</SocketedButton>
8693
<SocketedButton
8794
style={{ marginBottom: '1rem', marginRight: '1rem' }}
8895
isLinked
96+
onClick={noOp}
8997
>
9098
Linked
9199
</SocketedButton>
92100
<SocketedButton
93101
style={{ marginBottom: '1rem', marginRight: '1rem' }}
94102
isLinkedSource
103+
onClick={noOp}
95104
>
96105
Linked Source
97106
</SocketedButton>
98107
<SocketedButton
99108
style={{ marginBottom: '1rem', marginRight: '1rem' }}
100109
isLinked
101110
isInvalid
111+
onClick={noOp}
102112
>
103113
Error
104114
</SocketedButton>
105115
<SocketedButton
106116
style={{ marginBottom: '1rem', marginRight: '1rem' }}
107117
disabled
118+
onClick={noOp}
108119
>
109120
Disabled
110121
</SocketedButton>
@@ -130,7 +141,13 @@ class Buttons extends Component<Record<string, never>, ButtonsState> {
130141
>
131142
<h5>Inline Buttons</h5>
132143
Regular btn-inline:
133-
<Button className="mx-2" kind="inline" icon={dhTruck} tooltip="test" />
144+
<Button
145+
className="mx-2"
146+
kind="inline"
147+
icon={dhTruck}
148+
tooltip="test"
149+
onClick={noOp}
150+
/>
134151
Toggle button (class active):
135152
<Button
136153
className="mx-2"
@@ -143,21 +160,23 @@ class Buttons extends Component<Record<string, never>, ButtonsState> {
143160
tooltip="test"
144161
/>
145162
Disabled:
146-
<Button className="mx-2" kind="inline" disabled>
163+
<Button className="mx-2" kind="inline" disabled onClick={noOp}>
147164
Disabled
148165
</Button>
149166
With Text:
150-
<Button className="mx-2" kind="inline" icon={dhTruck}>
167+
<Button className="mx-2" kind="inline" icon={dhTruck} onClick={noOp}>
151168
<span>Text Button</span>
152169
</Button>
153170
<br />
154171
<br />
155172
<span>btn-link-icon (no text):</span>
156-
<Button kind="ghost" icon={dhTruck} tooltip="test" />
173+
<Button kind="ghost" icon={dhTruck} tooltip="test" onClick={noOp} />
157174
<span className="mx-2">btn-link:</span>
158-
<Button kind="ghost">Text Button </Button>
175+
<Button kind="ghost" onClick={noOp}>
176+
Text Button
177+
</Button>
159178
<span className="mx-2">btn-link (text w/ optional with icon):</span>
160-
<Button kind="ghost" icon={dhTruck}>
179+
<Button kind="ghost" icon={dhTruck} onClick={noOp}>
161180
Text Button
162181
</Button>
163182
</div>

packages/code-studio/src/styleguide/Modals.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ function Modals(): React.ReactElement {
4242
</div>
4343
<h2 className="ui-title">Custom Modal</h2>
4444
<div style={{ padding: '1rem' }}>
45-
<div className="modal-dialog theme-bg-light" role="dialog">
45+
<div className="modal-dialog" role="dialog">
4646
<div className="modal-content">
4747
<div className="modal-header">
4848
<h5 className="modal-title">Modal title</h5>

packages/code-studio/src/styleguide/SamplesMenu.tsx

Lines changed: 31 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
/* eslint-disable react/jsx-props-no-spreading */
12
import React, { Key, useCallback, useEffect, useState } from 'react';
23
import {
34
ActionButton,
@@ -12,6 +13,7 @@ import { vsMenu } from '@deephaven/icons';
1213
import {
1314
MENU_CATEGORY_DATA_ATTRIBUTE,
1415
NO_MENU_DATA_ATTRIBUTE,
16+
SPECTRUM_COMPARISON_SAMPLES_ID,
1517
SPECTRUM_COMPONENT_SAMPLES_ID,
1618
} from './constants';
1719

@@ -26,18 +28,18 @@ type LinkCategory = { category: string; items: Link[] };
2628
* menu category. These will be queried by the SamplesMenu component to build
2729
* up the menu sections.
2830
*/
29-
export function SampleMenuCategory({
30-
'data-menu-category': dataMenuCategory,
31-
}: Record<typeof MENU_CATEGORY_DATA_ATTRIBUTE, string>): JSX.Element {
32-
return <div data-menu-category={dataMenuCategory} />;
31+
export function SampleMenuCategory(
32+
props: Record<typeof MENU_CATEGORY_DATA_ATTRIBUTE, string>
33+
): JSX.Element {
34+
return <div {...props} />;
3335
}
3436

3537
/**
3638
* Creates a menu from h2, h3 elements on the page and assigns them each an id
3739
* for hash navigation purposes. If the current hash matches one of the ids, it
3840
* will scroll to that element. This handles the initial page load scenario.
39-
* Menu sections are identified by divs with MENU_CATEGORY_DATA_ATTRIBUTE
40-
* attributes.
41+
* Menu categories are identified by divs with MENU_CATEGORY_DATA_ATTRIBUTE
42+
* attributes originating from the <SampleMenuCategory> component.
4143
*/
4244
export function SamplesMenu(): JSX.Element {
4345
const [links, setLinks] = useState<LinkCategory[]>([]);
@@ -53,34 +55,48 @@ export function SamplesMenu(): JSX.Element {
5355
`#${SPECTRUM_COMPONENT_SAMPLES_ID}`
5456
);
5557

58+
const spectrumComparisonSamples = document.querySelector(
59+
`#${SPECTRUM_COMPARISON_SAMPLES_ID}`
60+
);
61+
5662
document
5763
.querySelectorAll(`h2,h3,[${MENU_CATEGORY_DATA_ATTRIBUTE}]`)
58-
.forEach(el => {
59-
if (el.textContent == null || el.hasAttribute(NO_MENU_DATA_ATTRIBUTE)) {
64+
.forEach(headingEl => {
65+
if (
66+
headingEl.textContent == null ||
67+
headingEl.hasAttribute(NO_MENU_DATA_ATTRIBUTE)
68+
) {
6069
return;
6170
}
6271

6372
// Create a new category section
64-
if (el.hasAttribute(MENU_CATEGORY_DATA_ATTRIBUTE)) {
73+
if (headingEl.hasAttribute(MENU_CATEGORY_DATA_ATTRIBUTE)) {
6574
currentCategory = {
66-
category: el.getAttribute(MENU_CATEGORY_DATA_ATTRIBUTE) ?? '',
75+
category:
76+
headingEl.getAttribute(MENU_CATEGORY_DATA_ATTRIBUTE) ?? '',
6777
items: [],
6878
};
6979
categories.push(currentCategory);
7080

7181
return;
7282
}
7383

74-
const id = `${
75-
spectrumComponentsSamples?.contains(el) === true ? 'spectrum-' : ''
76-
}${el.textContent}`
84+
const idPrefix =
85+
// eslint-disable-next-line no-nested-ternary
86+
spectrumComponentsSamples?.contains(headingEl) === true
87+
? 'spectrum-'
88+
: spectrumComparisonSamples?.contains(headingEl) === true
89+
? 'spectrum-compare-'
90+
: '';
91+
92+
const id = `${idPrefix}${headingEl.textContent}`
7793
.toLowerCase()
7894
.replace(/\s/g, '-');
7995

8096
// eslint-disable-next-line no-param-reassign
81-
el.id = id;
97+
headingEl.id = id;
8298

83-
currentCategory.items.push({ id, label: el.textContent });
99+
currentCategory.items.push({ id, label: headingEl.textContent });
84100
});
85101

86102
setLinks(categories);

0 commit comments

Comments
 (0)