From e39172d250171fbbd271cfc48f485b122f5c0337 Mon Sep 17 00:00:00 2001 From: edlu77 Date: Wed, 2 Oct 2024 23:09:09 -0400 Subject: [PATCH 1/6] Use design system for cde-visualization --- apps/cde-ui/src/styles.scss | 11 -- apps/cde-visualization-wc/project.json | 3 + apps/cde-visualization-wc/src/styles.scss | 28 +---- .../src/styles/_breakpoints.scss | 55 --------- .../src/styles/_material-theming.scss | 33 ----- .../src/styles/_typographies.scss | 49 -------- .../src/styles/constants/_colors.scss | 17 --- .../src/styles/constants/_palettes.scss | 115 ------------------ .../src/styles/global/_fonts.scss | 28 ----- .../src/styles/global/_resets.scss | 12 -- .../src/styles/themes/_main.scss | 28 ----- libs/cde-visualization/project.json | 3 +- .../cde-visualization.component.html | 14 +-- .../cde-visualization.component.scss | 24 ++-- .../cde-visualization.component.ts | 6 +- .../cell-types/cell-types.component.scss | 53 +++----- .../metadata/metadata.component.scss | 36 +++--- .../components/violin/violin.component.scss | 29 +---- libs/cde-visualization/src/styles.scss | 6 + libs/design-system/styles/_resets.scss | 11 ++ 20 files changed, 94 insertions(+), 467 deletions(-) delete mode 100644 apps/cde-visualization-wc/src/styles/_breakpoints.scss delete mode 100644 apps/cde-visualization-wc/src/styles/_material-theming.scss delete mode 100644 apps/cde-visualization-wc/src/styles/_typographies.scss delete mode 100644 apps/cde-visualization-wc/src/styles/constants/_colors.scss delete mode 100644 apps/cde-visualization-wc/src/styles/constants/_palettes.scss delete mode 100644 apps/cde-visualization-wc/src/styles/global/_fonts.scss delete mode 100644 apps/cde-visualization-wc/src/styles/global/_resets.scss delete mode 100644 apps/cde-visualization-wc/src/styles/themes/_main.scss create mode 100644 libs/cde-visualization/src/styles.scss diff --git a/apps/cde-ui/src/styles.scss b/apps/cde-ui/src/styles.scss index d407dd3c2..8fd3e283b 100644 --- a/apps/cde-ui/src/styles.scss +++ b/apps/cde-ui/src/styles.scss @@ -5,14 +5,3 @@ html { @include theming.theme(light-theme.$theme); } - -input::-webkit-outer-spin-button, -input::-webkit-inner-spin-button { - /* display: none; <- Crashes Chrome on hover */ - -webkit-appearance: none; - margin: 0; /* <-- Apparently some margin are still there even though it's hidden */ -} - -input[type='number'] { - -moz-appearance: textfield; /* Firefox */ -} diff --git a/apps/cde-visualization-wc/project.json b/apps/cde-visualization-wc/project.json index c1acc83bc..ea665f54d 100644 --- a/apps/cde-visualization-wc/project.json +++ b/apps/cde-visualization-wc/project.json @@ -21,6 +21,9 @@ "inlineStyleLanguage": "scss", "assets": ["apps/cde-visualization-wc/src/favicon.png", "apps/cde-visualization-wc/src/assets"], "styles": ["apps/cde-visualization-wc/src/styles.scss"], + "stylePreprocessorOptions": { + "includePaths": ["node_modules/", "libs/design-system/styles"] + }, "scripts": [], "define": { "define": "undefined" diff --git a/apps/cde-visualization-wc/src/styles.scss b/apps/cde-visualization-wc/src/styles.scss index a13e84cb2..f0e41ecc3 100644 --- a/apps/cde-visualization-wc/src/styles.scss +++ b/apps/cde-visualization-wc/src/styles.scss @@ -1,26 +1,6 @@ -@use './styles/global/resets'; -@use './styles/global/fonts'; -@use './styles/material-theming'; +@use 'light-theme'; +@use 'theming'; -input::-webkit-outer-spin-button, -input::-webkit-inner-spin-button { - /* display: none; <- Crashes Chrome on hover */ - -webkit-appearance: none; - margin: 0; /* <-- Apparently some margin are still there even though it's hidden */ -} - -input[type='number'] { - -moz-appearance: textfield; /* Firefox */ -} - -body { - margin: 0; -} - -a { - text-decoration: none; -} - -.selected { - box-shadow: 0 -2px 0 #e00d3a inset; +html { + @include theming.theme(light-theme.$theme); } diff --git a/apps/cde-visualization-wc/src/styles/_breakpoints.scss b/apps/cde-visualization-wc/src/styles/_breakpoints.scss deleted file mode 100644 index f787f3789..000000000 --- a/apps/cde-visualization-wc/src/styles/_breakpoints.scss +++ /dev/null @@ -1,55 +0,0 @@ -@use 'sass:map'; - -$breakpoints: ( - 'xx-small': ( - min: 0px, - max: 429.99999px, - ), - 'x-small': ( - min: 430px, - max: 543.99999px, - ), - 'small': ( - min: 544px, - max: 767.99999px, - ), - 'medium': ( - min: 768px, - max: 1011.99999px, - ), - 'large': ( - min: 1012px, - max: 1279.99999px, - ), - 'x-large': ( - min: 1280px, - max: 1439.99999px, - ), - 'xx-large': ( - min: 1440px, - max: 1919.99999px, - ), - 'xxx-large': ( - min: 1920px, - max: 999999999px, - ), -); - -@mixin breakpoint($names...) { - $query: ''; - - @each $name in $names { - @if $query != '' { - $query: $query + ', '; - } - - $point: map.get($breakpoints, $name); - $min: map.get($point, 'min'); - $max: map.get($point, 'max'); - $query: $query + '(min-width: #{$min}) and (max-width: #{$max})'; - } - - @media #{$query} { - @content; - } -} diff --git a/apps/cde-visualization-wc/src/styles/_material-theming.scss b/apps/cde-visualization-wc/src/styles/_material-theming.scss deleted file mode 100644 index 47464c992..000000000 --- a/apps/cde-visualization-wc/src/styles/_material-theming.scss +++ /dev/null @@ -1,33 +0,0 @@ -@use '@angular/material' as mat; -@use './themes/main' as main-theme; -@use './typographies' as typographies; -@use './breakpoints' as breakpoints; - -$_theme: main-theme.$theme; - -@include mat.core(); -@include mat.core-theme($_theme); -@include mat.typography-hierarchy($_theme); - -// Add theme mixin for material components here! -@include mat.button-theme($_theme); -@include mat.button-toggle-theme($_theme); -@include mat.card-theme($_theme); -@include mat.divider-theme($_theme); -@include mat.form-field-theme($_theme); -@include mat.icon-theme($_theme); -@include mat.progress-bar-theme($_theme); -@include mat.select-theme($_theme); -@include mat.snack-bar-theme($_theme); - -// Typography -cde-visualization { - @include mat.typography-hierarchy( - mat.m2-define-light-theme( - ( - typography: typographies.$xx-large, - density: 0, - ) - ) - ); -} diff --git a/apps/cde-visualization-wc/src/styles/_typographies.scss b/apps/cde-visualization-wc/src/styles/_typographies.scss deleted file mode 100644 index cde2e2537..000000000 --- a/apps/cde-visualization-wc/src/styles/_typographies.scss +++ /dev/null @@ -1,49 +0,0 @@ -@use '@angular/material' as mat; - -$xx-small: mat.m2-define-rem-typography-config( - $font-family: 'Metropolis', - $headline-5: mat.m2-define-typography-level(1.5rem, 2.25rem, 500), - $headline-6: mat.m2-define-typography-level(0.9375rem, 1.40625rem, 500), - $subtitle-1: mat.m2-define-typography-level(0.875rem, 1.3125rem, 400, $letter-spacing: 0.005em), - $body-1: mat.m2-define-typography-level(0.75rem, 1.3125rem, 400, $letter-spacing: 0.005em), - $body-2: mat.m2-define-typography-level(0.6875rem, 1.03125rem, 500, $letter-spacing: 0.002em), - $button: mat.m2-define-typography-level(0.6875rem, 1.03125rem, 500, $letter-spacing: 0.002em), -); - -$x-small: $xx-small; - -$small: mat.m2-define-rem-typography-config( - $font-family: 'Metropolis', - $headline-5: mat.m2-define-typography-level(2rem, 3rem, 500), - $headline-6: mat.m2-define-typography-level(1.5rem, 2.25rem, 500), - $subtitle-1: mat.m2-define-typography-level(1.25rem, 1.875rem, 400, $letter-spacing: 0.013em), - $body-1: mat.m2-define-typography-level(1.25rem, 1.875rem, 400, $letter-spacing: 0.013em), - $body-2: mat.m2-define-typography-level(1.125rem, 1.6875rem, 500), - $button: mat.m2-define-typography-level(1.125rem, 1.6875rem, 500), -); - -$medium: $small; - -$large: mat.m2-define-rem-typography-config( - $font-family: 'Metropolis', - $headline-5: mat.m2-define-typography-level(2rem, 3rem, 500), - $headline-6: mat.m2-define-typography-level(2rem, 3rem, 500), - $subtitle-1: mat.m2-define-typography-level(1.5rem, 2.25rem, 500), - $body-1: mat.m2-define-typography-level(1.125rem, 1.6875rem, 500), - $body-2: mat.m2-define-typography-level(1.125rem, 1.6875rem, 500), - $button: mat.m2-define-typography-level(1.125rem, 1.6875rem, 500), -); - -$x-large: mat.m2-define-rem-typography-config( - $font-family: 'Metropolis', - $headline-5: mat.m2-define-typography-level(2.625rem, 3.9375rem, 500, $letter-spacing: 0.0325em), - $headline-6: mat.m2-define-typography-level(2rem, 3rem, 500), - $subtitle-1: mat.m2-define-typography-level(1.5rem, 2.25rem, 500), - $body-1: mat.m2-define-typography-level(1.125rem, 1.6875rem, 500), - $body-2: mat.m2-define-typography-level(1.125rem, 1.6875rem, 500), - $button: mat.m2-define-typography-level(1.125rem, 1.6875rem, 500), - $caption: mat.m2-define-typography-level(0.875rem, 1.3125rem, 500, $letter-spacing: 0.02em), -); - -$xx-large: $x-large; -$xxx-large: $xx-large; diff --git a/apps/cde-visualization-wc/src/styles/constants/_colors.scss b/apps/cde-visualization-wc/src/styles/constants/_colors.scss deleted file mode 100644 index a8d755629..000000000 --- a/apps/cde-visualization-wc/src/styles/constants/_colors.scss +++ /dev/null @@ -1,17 +0,0 @@ -$colors: ( - 'red-1': #ff0043, - 'red-2': #e00d3a, - 'red-3': #b20a2f, - 'red-4': #8e0825, - 'red-5': #6a061c, - 'blue-1': #201e3d, - 'blue-2': #4b4b5e, - 'blue-3': #e6eaf0, - 'blue-4': #d5dbe3, - 'blue-5': #eff2f5, - 'gray-1': #464954, - 'gray-2': #51535d, - 'gray-3': #fcfcfc, - 'white': #ffffff, - 'black': #000000, -); diff --git a/apps/cde-visualization-wc/src/styles/constants/_palettes.scss b/apps/cde-visualization-wc/src/styles/constants/_palettes.scss deleted file mode 100644 index d0434d5ce..000000000 --- a/apps/cde-visualization-wc/src/styles/constants/_palettes.scss +++ /dev/null @@ -1,115 +0,0 @@ -@use 'sass:map'; -@use './colors' as colors; - -$_colors: colors.$colors; - -$_red_palette_contrast_light: white; -$_red_palette_contrast_dark: map.get($_colors, 'blue-2'); -$_red-palette: ( - 50: #ffe0e8, - 100: #ffb3c7, - 200: #ff80a1, - 300: #ff4d7b, - 400: #ff265f, - 500: map.get($_colors, 'red-1'), - 600: map.get($_colors, 'red-2'), - 700: map.get($_colors, 'red-3'), - 800: map.get($_colors, 'red-4'), - 900: map.get($_colors, 'red-5'), - A100: #ffffff, - A200: #fff2f3, - A400: #ffbfc3, - A700: #ffa6ac, - contrast: ( - 50: $_red_palette_contrast_dark, - 100: $_red_palette_contrast_dark, - 200: $_red_palette_contrast_dark, - 300: $_red_palette_contrast_dark, - 400: $_red_palette_contrast_light, - 500: $_red_palette_contrast_light, - 600: $_red_palette_contrast_light, - 700: $_red_palette_contrast_light, - 800: $_red_palette_contrast_light, - 900: $_red_palette_contrast_light, - A100: $_red_palette_contrast_dark, - A200: $_red_palette_contrast_dark, - A400: $_red_palette_contrast_dark, - A700: $_red_palette_contrast_dark, - ), -); - -$_blue_palette_contrast_light: white; -$_blue_palette_contrast_dark: rgb(0 0 0 / 87%); -$_blue_palette: ( - 50: #fdfdfe, - 100: #fafbfc, - 200: #f7f9fa, - 300: #f4f6f8, - 400: #f1f4f7, - 500: map.get($_colors, 'blue-5'), - 600: map.get($_colors, 'blue-4'), - 700: map.get($_colors, 'blue-3'), - 800: map.get($_colors, 'blue-2'), - 900: map.get($_colors, 'blue-1'), - A100: #ffffff, - A200: #ffffff, - A400: #ffffff, - A700: #ffffff, - contrast: ( - 50: $_blue_palette_contrast_dark, - 100: $_blue_palette_contrast_dark, - 200: $_blue_palette_contrast_dark, - 300: $_blue_palette_contrast_dark, - 400: $_blue_palette_contrast_dark, - 500: $_blue_palette_contrast_dark, - 600: $_blue_palette_contrast_dark, - 700: $_blue_palette_contrast_light, - 800: $_blue_palette_contrast_light, - 900: $_blue_palette_contrast_light, - A100: $_blue_palette_contrast_dark, - A200: $_blue_palette_contrast_dark, - A400: $_blue_palette_contrast_dark, - A700: $_blue_palette_contrast_dark, - ), -); - -$_gray_palette_contrast_light: white; -$_gray_palette_contrast_dark: rgb(0 0 0 / 87%); -$_gray_palette: ( - 50: #ffffff, - 100: #fefefe, - 200: #fefefe, - 300: #fdfdfd, - 400: #fcfcfc, - 500: map.get($_colors, 'gray-3'), - 600: map.get($_colors, 'gray-2'), - 700: map.get($_colors, 'gray-1'), - 800: #fbfbfb, - 900: #fafafa, - A100: #ffffff, - A200: #ffffff, - A400: #ffffff, - A700: #ffffff, - contrast: ( - 50: $_gray_palette_contrast_dark, - 100: $_gray_palette_contrast_dark, - 200: $_gray_palette_contrast_dark, - 300: $_gray_palette_contrast_dark, - 400: $_gray_palette_contrast_dark, - 500: $_gray_palette_contrast_dark, - 600: $_gray_palette_contrast_light, - 700: $_gray_palette_contrast_light, - 800: $_gray_palette_contrast_dark, - 900: $_gray_palette_contrast_dark, - A100: $_gray_palette_contrast_dark, - A200: $_gray_palette_contrast_dark, - A400: $_gray_palette_contrast_dark, - A700: $_gray_palette_contrast_dark, - ), -); - -$palettes: ( - 'red': $_red_palette, - 'blue': $_blue_palette, - 'gray': $_gray_palette, -); diff --git a/apps/cde-visualization-wc/src/styles/global/_fonts.scss b/apps/cde-visualization-wc/src/styles/global/_fonts.scss deleted file mode 100644 index f9f639a99..000000000 --- a/apps/cde-visualization-wc/src/styles/global/_fonts.scss +++ /dev/null @@ -1,28 +0,0 @@ -@use '@fontsource/material-symbols-outlined'; -@use '@fontsource/material-symbols-rounded'; -@use '@fontsource/metropolis/400.css' as Metropolis400; -@use '@fontsource/metropolis/500.css' as Metropolis500; -@use '@fontsource/nunito-sans'; - -/* As per https://fontsource.org/docs/getting-started/material-symbols */ -.material-symbols-outlined, -.material-symbols-rounded { - font-weight: 300; - font-style: normal; - font-size: 1.5rem; - display: inline-block; - line-height: 1; - text-transform: none; - letter-spacing: normal; - word-wrap: normal; - white-space: nowrap; - direction: ltr; -} - -.material-symbols-outlined { - font-family: 'Material Symbols Outlined'; -} - -.material-symbols-rounded { - font-family: 'Material Symbols Rounded'; -} diff --git a/apps/cde-visualization-wc/src/styles/global/_resets.scss b/apps/cde-visualization-wc/src/styles/global/_resets.scss deleted file mode 100644 index 312256dda..000000000 --- a/apps/cde-visualization-wc/src/styles/global/_resets.scss +++ /dev/null @@ -1,12 +0,0 @@ -@use 'normalize.css/normalize.css'; - -// Box sizing reset -html { - box-sizing: border-box; -} - -*, -*:before, -*:after { - box-sizing: inherit; -} diff --git a/apps/cde-visualization-wc/src/styles/themes/_main.scss b/apps/cde-visualization-wc/src/styles/themes/_main.scss deleted file mode 100644 index d85e24afb..000000000 --- a/apps/cde-visualization-wc/src/styles/themes/_main.scss +++ /dev/null @@ -1,28 +0,0 @@ -@use 'sass:map'; -@use '@angular/material' as mat; -@use '../constants/palettes' as palettes; - -$primary: mat.m2-define-palette(map.get(palettes.$palettes, 'red'), 600, 500, 900); -$accent: mat.m2-define-palette(map.get(palettes.$palettes, 'blue'), 600, 500, 900); - -$typography: mat.m2-define-typography-config( - $font-family: 'Metropolis', - $headline-5: mat.m2-define-typography-level(72px, 90px, 500, $letter-spacing: -0.05em), - $headline-6: mat.m2-define-typography-level(42px, 52.5px, 500), - $subtitle-1: mat.m2-define-typography-level(24px, 36px, 500), - $body-1: mat.m2-define-typography-level(20px, 30px, 400, 'Nunito Sans', $letter-spacing: 0.07em), - $body-2: mat.m2-define-typography-level(18px, 27px, 400, 'Nunito Sans', $letter-spacing: 0.07em), - $button: mat.m2-define-typography-level(18px, 34.5px, 500), - $caption: mat.m2-define-typography-level(14px, 21px, 400, $letter-spacing: 0.005em), -); - -$theme: mat.m2-define-light-theme( - ( - color: ( - primary: $primary, - accent: $accent, - ), - typography: $typography, - density: 0, - ) -); diff --git a/libs/cde-visualization/project.json b/libs/cde-visualization/project.json index ed5fbdab0..bf5348c80 100644 --- a/libs/cde-visualization/project.json +++ b/libs/cde-visualization/project.json @@ -16,8 +16,9 @@ "polyfills": ["zone.js"], "tsConfig": "libs/cde-visualization/tsconfig.app.json", "inlineStyleLanguage": "scss", + "styles": ["apps/cde-visualization/src/styles.scss"], "stylePreprocessorOptions": { - "includePaths": ["node_modules/", "libs/shared/theming/src/lib/styles"] + "includePaths": ["node_modules/", "libs/design-system/styles"] }, "scripts": [] }, diff --git a/libs/cde-visualization/src/lib/cde-visualization/cde-visualization.component.html b/libs/cde-visualization/src/lib/cde-visualization/cde-visualization.component.html index 4b19b0ec8..fd9b4a7c9 100644 --- a/libs/cde-visualization/src/lib/cde-visualization/cde-visualization.component.html +++ b/libs/cde-visualization/src/lib/cde-visualization/cde-visualization.component.html @@ -1,11 +1,11 @@
- + +
diff --git a/libs/cde-visualization/src/lib/cde-visualization/cde-visualization.component.scss b/libs/cde-visualization/src/lib/cde-visualization/cde-visualization.component.scss index 8a8000807..398201ba7 100644 --- a/libs/cde-visualization/src/lib/cde-visualization/cde-visualization.component.scss +++ b/libs/cde-visualization/src/lib/cde-visualization/cde-visualization.component.scss @@ -30,8 +30,8 @@ } ::ng-deep .download-snackbar-panel { - --mdc-snackbar-container-color: white; - --mdc-snackbar-supporting-text-color: #4b4b5e; + --mdc-snackbar-container-color: var(--sys-surface-container); + --mdc-snackbar-supporting-text-color: var(--sys-secondary); translate: 0 -2rem; text-align: center; @@ -44,20 +44,22 @@ :host { width: 100%; display: grid; - grid-template-columns: 21rem minmax(59rem, calc(100vw - 21rem)); - grid-template-rows: 5.25rem minmax(calc(900px - 5.25rem), calc(100vh - 5.25rem)); + grid-template-columns: 22.75rem minmax(59rem, calc(100vw - 22.75rem)); + grid-template-rows: 4rem minmax(calc(900px - 4rem), calc(100vh - 4rem)); grid-template-areas: - 'header header' + 'header visualization' 'metadata visualization'; - color: #201e3d; + color: var(--sys-secondary); .header { grid-area: header; + border-color: var(--sys-outline-variant); + border-width: 0 0px 2px 0px; + border-style: solid; + height: 4rem; - cde-visualization-header { - border-color: #d5dbe3; - border-width: 0 0px 2px 0px; - border-style: solid; + hra-app-logos { + margin: 0.5rem 0 0.5rem 0.75rem; } } @@ -79,7 +81,7 @@ } cde-node-dist-visualization { - border-color: #d5dbe3; + border-color: var(--sys-outline-variant); border-width: 0 0 2px 0; border-style: solid; height: 100%; diff --git a/libs/cde-visualization/src/lib/cde-visualization/cde-visualization.component.ts b/libs/cde-visualization/src/lib/cde-visualization/cde-visualization.component.ts index a4e5ce23c..8198fbb49 100644 --- a/libs/cde-visualization/src/lib/cde-visualization/cde-visualization.component.ts +++ b/libs/cde-visualization/src/lib/cde-visualization/cde-visualization.component.ts @@ -12,15 +12,15 @@ import { signal, ViewContainerRef, } from '@angular/core'; +import { AppLogosComponent } from '@hra-ui/design-system/app-logos'; +import { Rgb, rgbToHex } from '@hra-ui/design-system/color-picker'; import { CellTypesComponent } from '../components/cell-types/cell-types.component'; import { HistogramComponent } from '../components/histogram/histogram.component'; import { MetadataComponent } from '../components/metadata/metadata.component'; import { NodeDistVisualizationComponent } from '../components/node-dist-visualization/node-dist-visualization.component'; import { ViolinComponent } from '../components/violin/violin.component'; -import { VisualizationHeaderComponent } from '../components/visualization-header/visualization-header.component'; import { CellTypeEntry } from '../models/cell-type'; -import { Rgb, rgbToHex } from '@hra-ui/design-system/color-picker'; import { ColorMapColorKey, ColorMapEntry, @@ -58,12 +58,12 @@ export interface DistanceEntry { standalone: true, imports: [ CommonModule, - VisualizationHeaderComponent, MetadataComponent, CellTypesComponent, NodeDistVisualizationComponent, HistogramComponent, ViolinComponent, + AppLogosComponent, ], templateUrl: './cde-visualization.component.html', styleUrl: './cde-visualization.component.scss', diff --git a/libs/cde-visualization/src/lib/components/cell-types/cell-types.component.scss b/libs/cde-visualization/src/lib/components/cell-types/cell-types.component.scss index fd93b0028..bc06619ea 100644 --- a/libs/cde-visualization/src/lib/components/cell-types/cell-types.component.scss +++ b/libs/cde-visualization/src/lib/components/cell-types/cell-types.component.scss @@ -1,17 +1,3 @@ -@use 'sass:map'; -@use '@angular/material' as mat; -@use '../../../../../../apps/cde-ui/src/styles/constants/palettes' as palettes; - -$blue: mat.m2-define-palette(map.get(palettes.$palettes, 'blue'), 600, 500, 700); -$blue-theme: mat.m2-define-light-theme( - ( - color: ( - primary: $blue, - accent: $blue, - ), - ) -); - ::ng-deep { .celltypes-panel { max-width: 21rem; @@ -19,8 +5,6 @@ $blue-theme: mat.m2-define-light-theme( } :host { - @include mat.button-color($blue-theme); - display: grid; grid: 'cell-types . download' @@ -33,11 +17,10 @@ $blue-theme: mat.m2-define-light-theme( padding: 0.75rem 1rem; border-width: 0 2px 0px 0px; border-style: solid; - border-color: map.get(map.get(palettes.$palettes, 'blue'), 600); - $button-text-color: map.get(map.get(palettes.$palettes, 'blue'), 900); + border-color: var(--sys-outline-variant); --mat-table-background-color: white; - --mdc-checkbox-unselected-icon-color: #201e3d; - --mat-sort-arrow-color: #201e3d; + --mdc-checkbox-unselected-icon-color: var(--sys-secondary); + --mat-sort-arrow-color: var(--sys-secondary); --mat-table-row-item-container-height: 1.75rem; --mat-table-row-item-outline-width: 0; --mat-table-header-headline-color: var(--mat-sort-arrow-color); @@ -46,7 +29,7 @@ $blue-theme: mat.m2-define-light-theme( span.cell-types-label { grid-area: cell-types; - font-size: 1rem; + font: var(--sys-label-medium); height: 2rem; display: flex; align-items: center; @@ -58,7 +41,6 @@ $blue-theme: mat.m2-define-light-theme( } button.download-csv { - --mdc-filled-button-label-text-color: #{button-text-color}; grid-area: download; padding: 0.3438rem 0.5rem; @@ -74,10 +56,12 @@ $blue-theme: mat.m2-define-light-theme( .mat-caption, .total-ct-label { grid-area: total-cell-types; + font: var(--sys-label-small); span { display: block; - color: #4b4b5e; + color: var(--sys-primary); + font: var(--sys-label-medium); } } @@ -85,7 +69,7 @@ $blue-theme: mat.m2-define-light-theme( grid-area: total-cells; span { - color: #4b4b5e; + color: var(--sys-primary); text-align: right; } } @@ -104,17 +88,16 @@ $blue-theme: mat.m2-define-light-theme( } tr th:last-child > div { - --mat-sort-arrow-color: #4b4b5e; justify-content: flex-end; margin-right: 0.25rem; - color: #4b4b5e; + color: var(--sys-secondary); } } tbody tr td.mdc-data-table__cell:last-child { text-align: end; padding-right: 0.25rem; - color: #4b4b5e; + color: var(--sys-primary); } tr:has(.anchor) { @@ -123,22 +106,22 @@ $blue-theme: mat.m2-define-light-theme( td:first-child { border-top-left-radius: 0.5rem; border-bottom-left-radius: 0.5rem; - border-top: solid #d5dbe3 0.0625rem; - border-left: solid #d5dbe3 0.0625rem; - border-bottom: solid #d5dbe3 0.0625rem; + border-top: solid var(--sys-outline-variant) 0.0625rem; + border-left: solid var(--sys-outline-variant) 0.0625rem; + border-bottom: solid var(--sys-outline-variant) 0.0625rem; } td:not(:first-child, :last-child) { - border-top: solid #d5dbe3 0.0625rem; - border-bottom: solid #d5dbe3 0.0625rem; + border-top: solid var(--sys-outline-variant) 0.0625rem; + border-bottom: solid var(--sys-outline-variant) 0.0625rem; } td:last-child { border-top-right-radius: 0.5rem; border-bottom-right-radius: 0.5rem; - border-top: solid #d5dbe3 0.0625rem; - border-right: solid #d5dbe3 0.0625rem; - border-bottom: solid #d5dbe3 0.0625rem; + border-top: solid var(--sys-outline-variant) 0.0625rem; + border-right: solid var(--sys-outline-variant) 0.0625rem; + border-bottom: solid var(--sys-outline-variant) 0.0625rem; } } } diff --git a/libs/cde-visualization/src/lib/components/metadata/metadata.component.scss b/libs/cde-visualization/src/lib/components/metadata/metadata.component.scss index 74c2cdc3a..dbfc449d1 100644 --- a/libs/cde-visualization/src/lib/components/metadata/metadata.component.scss +++ b/libs/cde-visualization/src/lib/components/metadata/metadata.component.scss @@ -2,23 +2,29 @@ display: block; --mat-text-button-hover-state-layer-opacity: 0; --mat-text-button-pressed-state-layer-opacity: 0; + --mat-expansion-container-shape: 0; .mat-expansion-panel { - border-color: #d5dbe3; + --mat-expansion-container-text-font: var(--sys-label-small-font); + --mat-expansion-container-text-size: var(--sys-label-small-size); + --mat-expansion-container-text-weight: var(--sys-label-small-weight); + --mat-expansion-container-text-line-height: var(--sys-label-small-line-height); + --mat-expansion-container-text-tracking: var(--sys-label-small-tracking); + border-color: var(--sys-outline-variant); border-width: 0 2px 2px 0px; border-style: solid; box-shadow: none; .mat-expansion-panel-header { - padding: 0.75rem 1rem; + --mat-expansion-header-expanded-state-height: 3rem; + --mat-expansion-header-text-font: var(--sys-label-medium-font); + --mat-expansion-header-text-size: var(--sys-label-medium-size); + --mat-expansion-header-text-weight: var(--sys-label-medium-weight); + --mat-expansion-header-text-line-height: var(--sys-label-medium-line-height); + --mat-expansion-header-text-tracking: var(--sys-label-medium-tracking); + padding: 0 0.75rem; .title { - font-size: 1rem; - height: 2rem; - display: flex; - align-items: center; - gap: 0.25rem; - mat-icon { margin: 2px; } @@ -36,11 +42,11 @@ + a { display: block; margin-bottom: 0.75rem; - color: #b20a2f; + color: var(--sys-on-tertiary-fixed); } & + span.user-title { - color: #4c4c58; + color: var(--sys-primary); } } @@ -58,21 +64,21 @@ div.mat-caption { &:not(:has(span.mat-caption)) { span { - color: #4c4c58; + color: var(--sys-primary); } } span.mat-caption { - color: #b20a2f; + color: var(--sys-on-tertiary-fixed); } span.user-source { - color: #4c4c58; + color: var(--sys-primary); } a.mat-caption { display: block; - color: #b20a2f; + color: var(--sys-on-tertiary-fixed); } } } @@ -82,7 +88,7 @@ line-height: 21px; .mdc-button { - --mdc-text-button-label-text-color: #b20a2f; + --mdc-text-button-label-text-color: var(--sys-on-tertiary-fixed); height: 100%; padding: 0; } diff --git a/libs/cde-visualization/src/lib/components/violin/violin.component.scss b/libs/cde-visualization/src/lib/components/violin/violin.component.scss index dab5c4020..347de52e7 100644 --- a/libs/cde-visualization/src/lib/components/violin/violin.component.scss +++ b/libs/cde-visualization/src/lib/components/violin/violin.component.scss @@ -1,39 +1,22 @@ -@use 'sass:map'; -@use '@angular/material' as mat; -@use '../../../../../../apps/cde-ui/src/styles/constants/palettes' as palettes; - -$blue: mat.m2-define-palette(map.get(palettes.$palettes, 'blue'), 600, 500, 700); -$blue-theme: mat.m2-define-light-theme( - ( - color: ( - primary: $blue, - accent: $blue, - ), - ) -); - :host { - @include mat.button-color($blue-theme); display: grid; grid: 'violin . download' 'plot plot plot' 1fr / auto 1fr auto; - grid-template-rows: 2rem calc(100% - 2rem); - align-items: start; + grid-template-rows: 4rem calc(100% - 4rem); + align-items: center; row-gap: 0.75rem; overflow: hidden; padding: 0.75rem 0.5rem; border-width: 0px 0px 2px 2px; border-style: solid; - border-color: map.get(map.get(palettes.$palettes, 'blue'), 600); - $button-text-color: map.get(map.get(palettes.$palettes, 'blue'), 900); + border-color: var(--sys-outline-variant); --mdc-filled-button-container-height: 2rem; span.violin-label { + font: var(--sys-label-medium); grid-area: violin; - font-size: 1rem; - height: 2rem; display: flex; align-items: center; gap: 0.25rem; @@ -43,6 +26,7 @@ $blue-theme: mat.m2-define-light-theme( .download { grid-area: download; padding-right: 0.5rem; + font: var(--sys-label-small); } .violin { @@ -52,7 +36,6 @@ $blue-theme: mat.m2-define-light-theme( } button { - --mdc-filled-button-label-text-color: #201e3d; padding: 0.375rem 0.5rem; margin-left: 0.5rem; @@ -72,7 +55,7 @@ $blue-theme: mat.m2-define-light-theme( font-weight: 500; font-size: 0.75rem; line-height: 1.125rem; - color: #201e3d; + color: var(--sys-secondary); padding: 0.5rem; max-width: 22.5rem; box-shadow: 0px 5px 16px 0px #201e3d3d; diff --git a/libs/cde-visualization/src/styles.scss b/libs/cde-visualization/src/styles.scss new file mode 100644 index 000000000..f0e41ecc3 --- /dev/null +++ b/libs/cde-visualization/src/styles.scss @@ -0,0 +1,6 @@ +@use 'light-theme'; +@use 'theming'; + +html { + @include theming.theme(light-theme.$theme); +} diff --git a/libs/design-system/styles/_resets.scss b/libs/design-system/styles/_resets.scss index 09d84e316..a76bc4c4f 100644 --- a/libs/design-system/styles/_resets.scss +++ b/libs/design-system/styles/_resets.scss @@ -14,3 +14,14 @@ a { *:after { box-sizing: inherit; } + +input::-webkit-outer-spin-button, +input::-webkit-inner-spin-button { + /* display: none; <- Crashes Chrome on hover */ + -webkit-appearance: none; + margin: 0; /* <-- Apparently some margin are still there even though it's hidden */ +} + +input[type='number'] { + -moz-appearance: textfield; /* Firefox */ +} From b951a6648cbecafc152e64077e620a6f26dc5e5e Mon Sep 17 00:00:00 2001 From: edlu77 Date: Sun, 6 Oct 2024 00:43:08 -0400 Subject: [PATCH 2/6] Update landing page to use design system --- apps/cde-ui/src/app/app.component.ts | 3 +- .../components/header/header.component.html | 16 -- .../components/header/header.component.scss | 123 ------------- .../header/header.component.spec.ts | 21 --- .../header/header.component.theme.scss | 47 ----- .../app/components/header/header.component.ts | 18 -- .../visual-card/visual-card.component.html | 6 +- .../visual-card/visual-card.component.scss | 78 +++------ .../visual-card/visual-card.component.ts | 6 +- .../create-visualization-page.component.scss | 7 - ...te-visualization-page.component.theme.scss | 5 - .../create-visualization-page.component.ts | 2 - .../landing-page/landing-page.component.html | 33 ++-- .../landing-page/landing-page.component.scss | 161 ++++++++---------- .../landing-page.component.theme.scss | 55 +----- .../landing-page/landing-page.component.ts | 10 +- apps/cde-ui/src/styles.scss | 1 + .../src/lib/app-logos.component.html | 4 +- .../src/lib/app-logos.component.scss | 11 ++ .../button-styles.component.scss | 4 +- libs/design-system/styles/_typography.scss | 8 + 21 files changed, 152 insertions(+), 467 deletions(-) delete mode 100644 apps/cde-ui/src/app/components/header/header.component.html delete mode 100644 apps/cde-ui/src/app/components/header/header.component.scss delete mode 100644 apps/cde-ui/src/app/components/header/header.component.spec.ts delete mode 100644 apps/cde-ui/src/app/components/header/header.component.theme.scss delete mode 100644 apps/cde-ui/src/app/components/header/header.component.ts diff --git a/apps/cde-ui/src/app/app.component.ts b/apps/cde-ui/src/app/app.component.ts index 96fa47a83..1416f2e00 100644 --- a/apps/cde-ui/src/app/app.component.ts +++ b/apps/cde-ui/src/app/app.component.ts @@ -1,7 +1,6 @@ import { Component, inject } from '@angular/core'; import { Router, RouterOutlet } from '@angular/router'; -import { HeaderComponent } from './components/header/header.component'; import { ScreenSizeNoticeComponent } from './components/screen-size-notice/screen-size-notice.component'; /** Max width to show screen size notice */ @@ -14,7 +13,7 @@ export const SCREEN_SIZE_NOTICE_MAX_HEIGHT = 832; */ @Component({ standalone: true, - imports: [RouterOutlet, HeaderComponent], + imports: [RouterOutlet], selector: 'cde-root', templateUrl: './app.component.html', styleUrl: './app.component.scss', diff --git a/apps/cde-ui/src/app/components/header/header.component.html b/apps/cde-ui/src/app/components/header/header.component.html deleted file mode 100644 index 65511a34a..000000000 --- a/apps/cde-ui/src/app/components/header/header.component.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - Cell Distance Explorer home - -
Cell Distance Explorer
-
HRA Preview Application
-
-
- -
- - - diff --git a/apps/cde-ui/src/app/components/header/header.component.scss b/apps/cde-ui/src/app/components/header/header.component.scss deleted file mode 100644 index f9c8fc9c6..000000000 --- a/apps/cde-ui/src/app/components/header/header.component.scss +++ /dev/null @@ -1,123 +0,0 @@ -@use 'sass:math'; - -:host { - $logo-height: 3rem; - --mat-text-button-hover-state-layer-opacity: 0; - - display: flex; - margin: 0 1rem; - align-items: center; - gap: 1rem; - height: 5.25rem; - - .hra-home, - .cde-home { - height: $logo-height; - border-radius: 0.5rem; - - img { - height: $logo-height; - } - } - - .cde-home { - display: inline-flex; - img { - margin-right: 0.75rem; - } - - .cde-label { - color: #201e3d; - font-size: 1.25rem; - line-height: 1.875rem; - } - - .preview-app { - font-size: 1rem; - line-height: 1.5rem; - letter-spacing: 0.5px; - font-weight: 500; - color: #4b4b5e; - } - } - - .logo.small { - display: none; - } - - .help { - --mdc-text-button-label-text-size: 11px; - --mdc-text-button-label-text-tracking: 0.2px; - line-height: 16.5px; - $border-width: 0.125rem; - $bottom-border-width: 0rem; - height: 1.75rem; - min-width: fit-content; - - &:not(:focus-visible) { - border-bottom-style: solid; - border-bottom-width: $bottom-border-width; - border-bottom-left-radius: 0; - border-bottom-right-radius: 0; - } - - &:focus-visible { - padding: (0.5rem - $border-width) (5rem - $border-width) (0.5rem - $border-width + $bottom-border-width) - (0.25rem - $border-width); - border-style: solid; - border-width: $border-width; - } - } - - .filler { - flex-grow: 1; - } - - @media (max-width: 544px) { - gap: 0.25rem; - .hra-home { - .large { - display: none; - } - .small { - display: block; - } - img { - height: 2.5rem; - } - } - .cde-home { - .cde-label { - font-size: 1rem; - line-height: 1.5rem; - } - - .preview-app { - font-size: 0.75rem; - line-height: 18px; - } - - img { - height: 2.5rem; - } - } - } - - @media (min-width: 544px) { - .help { - --mdc-text-button-label-text-size: 0.875rem; - line-height: 21px; - padding: 0.75rem 1.5rem; - height: 45px; - } - } - - @media (min-width: 1012px) { - .help { - border-bottom-width: 0.125rem !important; - padding: 0 5rem 0 0.25rem; - --mdc-text-button-label-text-size: 1.125rem; - line-height: 27px; - } - } -} diff --git a/apps/cde-ui/src/app/components/header/header.component.spec.ts b/apps/cde-ui/src/app/components/header/header.component.spec.ts deleted file mode 100644 index 83cde141a..000000000 --- a/apps/cde-ui/src/app/components/header/header.component.spec.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { render, screen } from '@testing-library/angular'; -import { HeaderComponent } from './header.component'; -import { RouterModule } from '@angular/router'; - -describe('HeaderComponent', () => { - it('should render the logo', async () => { - await render(HeaderComponent); - - const logo = screen.getAllByAltText('Human Reference Atlas home')[0]; - expect(logo).toBeInTheDocument(); - }); - - it('should have navigable links', async () => { - await render(HeaderComponent, { - imports: [RouterModule.forRoot([])], - }); - - const homeLink = screen.getByAltText('Cell Distance Explorer home'); - expect(homeLink).toBeInTheDocument(); - }); -}); diff --git a/apps/cde-ui/src/app/components/header/header.component.theme.scss b/apps/cde-ui/src/app/components/header/header.component.theme.scss deleted file mode 100644 index 4e34d46ef..000000000 --- a/apps/cde-ui/src/app/components/header/header.component.theme.scss +++ /dev/null @@ -1,47 +0,0 @@ -@use '@angular/material' as mat; - -@mixin color($theme) { - cde-header { - .hra-home, - .cde-home { - &:focus-visible { - outline-color: mat.get-theme-color($theme, primary, default); - } - } - - .help { - --mdc-text-button-label-text-color: #{mat.get-theme-color($theme, accent, default)}; - border-color: mat.get-theme-color($theme, accent, lighter); - - &:hover { - border-color: mat.get-theme-color($theme, primary, default); - } - - &:active { - --mdc-text-button-label-text-color: #{mat.get-theme-color($theme, primary, darker)}; - border-color: mat.get-theme-color($theme, primary, darker); - } - - &:focus-visible { - --mat-text-button-state-layer-color: white; - border-color: mat.get-theme-color($theme, primary, default); - } - } - } -} - -@mixin typography($theme) { - cde-header { - @include mat.button-typography($theme); - } -} - -@mixin theme($theme) { - @if mat.theme-has($theme, color) { - @include color($theme); - } - - @if mat.theme-has($theme, typography) { - @include typography($theme); - } -} diff --git a/apps/cde-ui/src/app/components/header/header.component.ts b/apps/cde-ui/src/app/components/header/header.component.ts deleted file mode 100644 index 1fae38ff8..000000000 --- a/apps/cde-ui/src/app/components/header/header.component.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { CommonModule } from '@angular/common'; -import { ChangeDetectionStrategy, Component } from '@angular/core'; -import { MatButtonModule } from '@angular/material/button'; -import { RouterModule } from '@angular/router'; -import { AssetUrlPipe } from '@hra-ui/cdk/app-href'; - -/** - * Component for header - */ -@Component({ - selector: 'cde-header', - standalone: true, - imports: [CommonModule, RouterModule, MatButtonModule, AssetUrlPipe], - templateUrl: './header.component.html', - styleUrl: './header.component.scss', - changeDetection: ChangeDetectionStrategy.OnPush, -}) -export class HeaderComponent {} diff --git a/apps/cde-ui/src/app/components/visual-card/visual-card.component.html b/apps/cde-ui/src/app/components/visual-card/visual-card.component.html index 8a9a1db4f..393058a98 100644 --- a/apps/cde-ui/src/app/components/visual-card/visual-card.component.html +++ b/apps/cde-ui/src/app/components/visual-card/visual-card.component.html @@ -1,9 +1,9 @@ @for (card of cardData(); track card.label) { -
+
+ arrow_right_alt +
} diff --git a/apps/cde-ui/src/app/components/visual-card/visual-card.component.scss b/apps/cde-ui/src/app/components/visual-card/visual-card.component.scss index 2a8691e0c..97f87fb78 100644 --- a/apps/cde-ui/src/app/components/visual-card/visual-card.component.scss +++ b/apps/cde-ui/src/app/components/visual-card/visual-card.component.scss @@ -1,87 +1,57 @@ -// @use '../../../styles/cta' as cta; - :host { display: flex; flex-wrap: wrap; gap: 2.5rem; column-gap: 1.75rem; - justify-content: center; + margin: 0 auto; + width: min-content; + + @media (min-width: 768px) { + margin: 0; + width: auto; + } + + @media (min-width: 1280px) { + justify-content: space-between; + } .visual-card { + @media (min-width: 1012px) { + width: 24.5rem; + height: 24.5rem; + } + + @media (min-width: 1920px) { + width: 30.5rem; + height: 30.5rem; + } + border-radius: 1rem; overflow: hidden; - box-shadow: 0px 5px 1rem 0px rgba(32, 30, 61, 0.24); + box-shadow: 0px 5px 1rem 0px rgb(from var(--sys-shadow) r g b / 0.24); outline-offset: 0; cursor: pointer; display: flex; flex-direction: column; justify-content: center; - font-family: Metropolis; width: 17.5rem; height: 17.5rem; &:hover { - box-shadow: 0px 5px 1rem 5px rgba(32, 30, 61, 0.24); + box-shadow: 0px 5px 1rem 5px rgb(from var(--sys-shadow) r g b / 0.24); } - // &:focus-visible .label { - // @include cta.flatFocus(); - // } - img { width: 100%; object-fit: contain; } .label { - display: flex; - align-items: center; - justify-content: center; margin: auto auto; - font-size: 0.75rem; - line-height: 1.125rem; } mat-icon { - vertical-align: middle; - height: 1rem; - width: 1rem; - font-size: 1rem; - margin-left: 0.5rem; - } - } - - @media (min-width: 768px) { - justify-content: space-between; - } - - @media (min-width: 1012px) { - .visual-card { - width: 24.5rem; - height: 24.5rem; - - .label { - font-size: 1rem; - line-height: 1.5rem; - } - - mat-icon { - height: 1.5rem; - width: 1.5rem; - font-size: 1.5rem; - margin-left: 0.75rem; - } - } - } - - @media (min-width: 1280px) { - column-gap: 2rem; - } - - @media (min-width: 1920px) { - .visual-card { - width: 30.5rem; - height: 30.5rem; + margin-left: 0.25rem; } } } diff --git a/apps/cde-ui/src/app/components/visual-card/visual-card.component.ts b/apps/cde-ui/src/app/components/visual-card/visual-card.component.ts index ab9ac7212..ddc998295 100644 --- a/apps/cde-ui/src/app/components/visual-card/visual-card.component.ts +++ b/apps/cde-ui/src/app/components/visual-card/visual-card.component.ts @@ -1,8 +1,8 @@ -import { ChangeDetectionStrategy, Component, input } from '@angular/core'; import { CommonModule } from '@angular/common'; -import { MatButtonModule } from '@angular/material/button'; +import { ChangeDetectionStrategy, Component, input } from '@angular/core'; import { MatIconModule } from '@angular/material/icon'; import { RouterModule } from '@angular/router'; +import { ButtonModule } from '@hra-ui/design-system/button'; /** * Interface for the visual card @@ -24,7 +24,7 @@ export interface VisualCard { @Component({ selector: 'cde-visual-card', standalone: true, - imports: [CommonModule, MatButtonModule, MatIconModule, RouterModule], + imports: [CommonModule, ButtonModule, MatIconModule, RouterModule], templateUrl: './visual-card.component.html', styleUrl: './visual-card.component.scss', changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/apps/cde-ui/src/app/pages/create-visualization-page/create-visualization-page.component.scss b/apps/cde-ui/src/app/pages/create-visualization-page/create-visualization-page.component.scss index ccd079f51..4a63e3ecd 100644 --- a/apps/cde-ui/src/app/pages/create-visualization-page/create-visualization-page.component.scss +++ b/apps/cde-ui/src/app/pages/create-visualization-page/create-visualization-page.component.scss @@ -10,13 +10,6 @@ height: 5rem; } - ::ng-deep .app-logo .app-description { - border-radius: 0.125rem; - width: fit-content; - padding: 0 0.25rem; - font: 500 0.625rem/1rem Metropolis !important; - } - .content { display: flex; flex-direction: column; diff --git a/apps/cde-ui/src/app/pages/create-visualization-page/create-visualization-page.component.theme.scss b/apps/cde-ui/src/app/pages/create-visualization-page/create-visualization-page.component.theme.scss index 77ba3ef3e..fdf80d67b 100644 --- a/apps/cde-ui/src/app/pages/create-visualization-page/create-visualization-page.component.theme.scss +++ b/apps/cde-ui/src/app/pages/create-visualization-page/create-visualization-page.component.theme.scss @@ -5,11 +5,6 @@ cde-create-visualization-page { background-color: var(--sys-surface-container-high) !important; } - .app-description { - color: var(--sys-on-tertiary-fixed) !important; - background: rgb(from var(--sys-on-tertiary-container) r g b / 0.08); - } - .card { background-color: var(--sys-surface-container-low); diff --git a/apps/cde-ui/src/app/pages/create-visualization-page/create-visualization-page.component.ts b/apps/cde-ui/src/app/pages/create-visualization-page/create-visualization-page.component.ts index 77f2a3974..fb2a2aca2 100644 --- a/apps/cde-ui/src/app/pages/create-visualization-page/create-visualization-page.component.ts +++ b/apps/cde-ui/src/app/pages/create-visualization-page/create-visualization-page.component.ts @@ -34,7 +34,6 @@ import { ParseError } from 'papaparse'; import { MarkEmptyFormControlDirective } from '../../components/empty-form-control/empty-form-control.directive'; import { FileLoadError, FileUploadComponent } from '../../components/file-upload/file-upload.component'; -import { HeaderComponent } from '../../components/header/header.component'; import { VisualizationDataService } from '../../services/visualization-data-service/visualization-data.service'; import { validateInteger } from '../../shared/form-validators/is-integer'; import { OrganEntry } from '../../shared/resolvers/organs/organs.resolver'; @@ -78,7 +77,6 @@ function optionalValue(): T | null { ButtonModule, FileUploadComponent, FooterComponent, - HeaderComponent, MarkEmptyFormControlDirective, NavHeaderComponent, OverlayModule, diff --git a/apps/cde-ui/src/app/pages/landing-page/landing-page.component.html b/apps/cde-ui/src/app/pages/landing-page/landing-page.component.html index ce6403f67..7786aa7a9 100644 --- a/apps/cde-ui/src/app/pages/landing-page/landing-page.component.html +++ b/apps/cde-ui/src/app/pages/landing-page/landing-page.component.html @@ -1,9 +1,14 @@ - +
-

Create and explore cell distance visualizations

-

+

Create and explore cell distance visualizations

+

This website supports visualization and quantification of cells and cell-cell distance distributions in processed spatial molecular data. Resulting data and visualizations can be explored, downloaded, and can be embedded on websites. @@ -20,7 +25,7 @@

-

+

The vasculature is the human body's delivery system. It is also a cornerstone of medicine, helping surgeons guide surgeries, pathologists diagnose disease, and serving as a landmark for medical practitioners of all stripes. The Vasculature Common Coordinate Framework (VCCF) taps into this organic infrastructure in order @@ -28,28 +33,30 @@

diff --git a/apps/cde-ui/src/app/pages/landing-page/landing-page.component.scss b/apps/cde-ui/src/app/pages/landing-page/landing-page.component.scss index 759cf552b..3076bf4c3 100644 --- a/apps/cde-ui/src/app/pages/landing-page/landing-page.component.scss +++ b/apps/cde-ui/src/app/pages/landing-page/landing-page.component.scss @@ -3,22 +3,27 @@ margin: 0 auto; } display: block; - background-color: rgba(252, 252, 252, 1); + background-color: var(--sys-surface-container-low); + min-width: 20rem; - .create-and-explore { - max-width: 18rem; + hra-nav-header { + height: 5.25rem; } .create-explore-content { - padding: 3rem 0 5rem 0; - } + padding: 3rem 1rem 5rem 1rem; - .header h1 { - margin-bottom: 0.5rem; - } + .header .title { + font: var(--sys-display-small); + letter-spacing: var(--sys-display-small-tracking); + margin: 0 0 0.5rem 0; + } - .header h4 { - margin-bottom: 3rem; + .header .description { + font: var(--sys-body-splash); + letter-spacing: var(--sys-body-splash-tracking); + margin: 0 0 3rem 0; + } } .vccf-container { @@ -38,14 +43,15 @@ grid-template-areas: 'video' 'content-container'; + row-gap: 3rem; } .vccf .content-container { grid-area: content-container; - background: white; + background: var(--sys-on-primary); padding: 2rem 1.5rem; border-radius: 1rem; - box-shadow: 0px 5px 16px 0px rgba(32, 30, 61, 0.24); + box-shadow: 0px 5px 16px 0px rgb(from var(--sys-shadow) r g b / 0.24); } .vccf .content { @@ -58,45 +64,31 @@ flex-direction: column; } - .paper p { - margin-bottom: 2rem; - } - .background-header { grid-area: header; - margin-bottom: 0.5rem; + font: var(--sys-headline-small); + letter-spacing: var(--sys-headline-small-tracking); + line-height: 2.25rem; + margin: 0 0 0.5rem 0; } - .links { - display: flex; - flex-direction: column; - gap: 1rem; + .background-text { + font: var(--sys-body-medium); + letter-spacing: var(--sys-body-medium-tracking); + margin: 0 0 2rem 0; } - .hra-btn { - --mdc-filled-button-label-text-size: 0.75rem; - --mdc-text-button-label-text-size: 0.75rem; - display: flex; - width: max-content; - height: 2rem; - padding: 0 0.6875rem 0 0.75rem; - - .mat-icon { - vertical-align: middle; - height: 1rem; - width: 1rem; - font-size: 1rem; - margin-right: 0.25rem; - margin-left: 0.25rem; + .links { + .vccf-paper { + margin-bottom: 1rem; } - --mat-text-button-hover-state-layer-opacity: 0; - --mat-text-button-pressed-state-layer-opacity: 0; - --mat-text-button-focus-state-layer-opacity: 0; + mat-icon { + margin-left: 0.25rem; + } } .youtube-player { - margin-bottom: 3rem; grid-area: video; ::ng-deep .youtube-player-placeholder, @@ -128,39 +120,31 @@ } @media (min-width: 430px) { - .create-and-explore { - max-width: 24.875rem; - } - .vccf { max-width: 23.75rem; .content-container { padding: 1.5rem 2rem; } - } - .links { - flex-direction: column; - - .hra-btn { - --mdc-filled-button-label-text-size: 0.875rem; - --mdc-text-button-label-text-size: 0.875rem; - - &.cta-filled { - padding-left: 1rem; - } + .background-header { + font: var(--sys-headline-medium); + letter-spacing: var(--sys-headline-medium-tracking); + } - .mat-icon { - margin-left: 0.5rem; - } + .background-text { + font: var(--sys-body-large); + letter-spacing: var(--sys-body-large-tracking); } } } @media (min-width: 544px) { - .create-and-explore { - max-width: 32rem; + .create-explore-content { + .header .title { + font: var(--sys-display-medium); + letter-spacing: var(--sys-display-medium-tracking); + } } .vccf { @@ -172,8 +156,13 @@ } .links { + display: flex; flex-direction: row; gap: 0.5rem; + + .vccf-paper { + margin-bottom: 0; + } } } @@ -182,6 +171,13 @@ max-width: 38.75rem; } + .create-explore-content { + .header .title { + font: var(--sys-display-large); + letter-spacing: var(--sys-display-large-tracking); + } + } + .vccf { max-width: 39.4375rem; } @@ -191,22 +187,17 @@ } .links { - flex-direction: row; gap: 2rem; } - - .links a:last-of-type { - padding-left: unset; - } } @media (min-width: 1012px) { .create-and-explore { max-width: 53rem; - } - .create-explore-content { - padding: 3rem 0 5rem 0; + .create-explore-content { + padding: 3rem 0 5rem 0; + } } .header { @@ -219,28 +210,15 @@ .content-container { padding: 2rem 2.5rem; } + + .background-header { + font: var(--sys-headline-large); + letter-spacing: var(--sys-headline-large-tracking); + } } .links { gap: 3rem; - - .hra-btn { - --mdc-filled-button-label-text-size: 1rem; - --mdc-text-button-label-text-size: 1rem; - height: 2.5rem; - padding-right: 0.9375rem; - - &.cta-filled { - padding-left: 1.5rem; - } - - .mat-icon { - height: 1.5rem; - width: 1.5rem; - font-size: 1.5rem; - margin-left: 0.75rem; - } - } } } @@ -249,10 +227,6 @@ max-width: 77.5rem; } - .create-explore-content { - padding: 3rem 0 5rem 0; - } - .vccf { max-width: 71.6875rem; grid-template-columns: 55% auto; @@ -262,7 +236,6 @@ } .youtube-player { - margin-bottom: 0; display: flex; flex-direction: column; justify-content: center; @@ -287,10 +260,10 @@ .create-explore-content { padding: 5rem 0 7rem 0; - } - .header h4 { - margin-bottom: 4rem; + .header .description { + margin-bottom: 4rem; + } } .vccf { diff --git a/apps/cde-ui/src/app/pages/landing-page/landing-page.component.theme.scss b/apps/cde-ui/src/app/pages/landing-page/landing-page.component.theme.scss index a6ec09585..2059e1bb4 100644 --- a/apps/cde-ui/src/app/pages/landing-page/landing-page.component.theme.scss +++ b/apps/cde-ui/src/app/pages/landing-page/landing-page.component.theme.scss @@ -1,54 +1,7 @@ -@use '@angular/material' as mat; -@use '../../../styles/cta' as cta; -@mixin color($theme) { - cde-landing-page { - .hra-btn.cta-flat { - color: mat.get-theme-color($theme, primary, 700); +cde-landing-page { + color: var(--sys-secondary); - &:hover { - @include cta.flatHover(); - } - - &:active { - @include cta.flatActive(); - } - - &:focus-visible { - @include cta.flatFocus(); - } - } - } -} - -@mixin typography($theme) { - cde-landing-page { - h1 { - font: mat.get-theme-typography($theme, headline-5) !important; - letter-spacing: mat.get-theme-typography($theme, headline-5, letter-spacing) !important; - } - - h4 { - font: mat.get-theme-typography($theme, body-1) !important; - letter-spacing: mat.get-theme-typography($theme, body-1, letter-spacing) !important; - } - - h2 { - font: mat.get-theme-typography($theme, headline-6) !important; - } - - p { - font: mat.get-theme-typography($theme, body-2) !important; - letter-spacing: mat.get-theme-typography($theme, body-2, letter-spacing) !important; - } - } -} - -@mixin theme($theme) { - @if mat.theme-has($theme, color) { - @include color($theme); - } - - @if mat.theme-has($theme, typography) { - @include typography($theme); + h4 { + color: var(--sys-primary); } } diff --git a/apps/cde-ui/src/app/pages/landing-page/landing-page.component.ts b/apps/cde-ui/src/app/pages/landing-page/landing-page.component.ts index 03919b196..e297fe068 100644 --- a/apps/cde-ui/src/app/pages/landing-page/landing-page.component.ts +++ b/apps/cde-ui/src/app/pages/landing-page/landing-page.component.ts @@ -1,12 +1,12 @@ import { CommonModule } from '@angular/common'; import { ChangeDetectionStrategy, Component, input } from '@angular/core'; -import { MatButtonModule } from '@angular/material/button'; import { MatIconModule } from '@angular/material/icon'; import { YouTubePlayerModule } from '@angular/youtube-player'; - import { AssetUrlPipe } from '@hra-ui/cdk/app-href'; +import { ButtonModule } from '@hra-ui/design-system/button'; import { FooterComponent } from '@hra-ui/design-system/footer'; -import { HeaderComponent } from '../../components/header/header.component'; +import { NavHeaderComponent } from '@hra-ui/design-system/nav-header'; + import { VisualCard, VisualCardComponent } from '../../components/visual-card/visual-card.component'; /** @@ -19,11 +19,11 @@ import { VisualCard, VisualCardComponent } from '../../components/visual-card/vi CommonModule, VisualCardComponent, MatIconModule, - MatButtonModule, + ButtonModule, YouTubePlayerModule, - HeaderComponent, FooterComponent, AssetUrlPipe, + NavHeaderComponent, ], templateUrl: './landing-page.component.html', styleUrl: './landing-page.component.scss', diff --git a/apps/cde-ui/src/styles.scss b/apps/cde-ui/src/styles.scss index 8fd3e283b..c7c340360 100644 --- a/apps/cde-ui/src/styles.scss +++ b/apps/cde-ui/src/styles.scss @@ -1,6 +1,7 @@ @use 'light-theme'; @use 'theming'; @use '../src/app/pages/create-visualization-page/create-visualization-page.component.theme.scss' as create-visualization; +@use '../src/app/pages/landing-page/landing-page.component.theme.scss' as landing-page; html { @include theming.theme(light-theme.$theme); diff --git a/libs/design-system/app-logos/src/lib/app-logos.component.html b/libs/design-system/app-logos/src/lib/app-logos.component.html index 6cb449e7e..1f14751d6 100644 --- a/libs/design-system/app-logos/src/lib/app-logos.component.html +++ b/libs/design-system/app-logos/src/lib/app-logos.component.html @@ -13,7 +13,9 @@
{{ appTitle() }}
@if (appDescription()) { -
{{ appDescription() }}
+
+ {{ appDescription() }} +
}
diff --git a/libs/design-system/app-logos/src/lib/app-logos.component.scss b/libs/design-system/app-logos/src/lib/app-logos.component.scss index 0db5eb1d8..dbcbe4e40 100644 --- a/libs/design-system/app-logos/src/lib/app-logos.component.scss +++ b/libs/design-system/app-logos/src/lib/app-logos.component.scss @@ -47,6 +47,17 @@ letter-spacing: var(--sys-label-medium-tracking); color: var(--sys-on-secondary-fixed); } + + // Temporary + .beta-description { + font: var(--sys-label-micro) !important; + letter-spacing: var(--sys-label-micro-tracking) !important; + border-radius: 0.125rem; + width: fit-content; + padding: 0 0.25rem; + color: var(--sys-on-tertiary-fixed); + background: rgb(from var(--sys-on-tertiary-container) r g b / 0.08); + } } @media (max-width: 1012px) { diff --git a/libs/design-system/button/src/lib/button-styles/button-styles.component.scss b/libs/design-system/button/src/lib/button-styles/button-styles.component.scss index 9a881d061..97b81f762 100644 --- a/libs/design-system/button/src/lib/button-styles/button-styles.component.scss +++ b/libs/design-system/button/src/lib/button-styles/button-styles.component.scss @@ -121,7 +121,7 @@ $y-multiplier: 0.4566; letter-spacing: var(--sys-label-medium-tracking); --mdc-filled-button-container-shape: 0.25rem; --mat-filled-button-horizontal-padding: 1rem; - --mdc-filled-button-container-height: 2rem; + --mdc-filled-button-container-height: 2.5rem; &:hover { box-shadow: 1px 2px 16px 0px rgb(from var(--sys-tertiary) r g b / 0.56); @@ -134,7 +134,7 @@ $y-multiplier: 0.4566; } } -// Custom class for Flat primary & Seconday +// Custom class for Flat primary & Secondary :is(a, button)[mat-flat-button] { &.button-size-large { --mat-filled-button-horizontal-padding: 1rem; diff --git a/libs/design-system/styles/_typography.scss b/libs/design-system/styles/_typography.scss index 7905af7fa..2f0538842 100644 --- a/libs/design-system/styles/_typography.scss +++ b/libs/design-system/styles/_typography.scss @@ -122,4 +122,12 @@ $overrides: ( --sys-wordmark-small-size: 0.75rem; --sys-wordmark-small-tracking: 0rem; --sys-wordmark-small-weight: 400; + + // Micro label + --sys-label-micro: 500 0.625rem / 1rem #{$_brand}; + --sys-label-micro-font: #{$_brand}; + --sys-label-micro-line-height: 1rem; + --sys-label-micro-size: 0.625rem; + --sys-label-micro-tracking: 0rem; + --sys-label-micro-weight: 500; } From 58bc2c9159038692dedbf13137dc3cb71e43b3d9 Mon Sep 17 00:00:00 2001 From: edlu77 Date: Sun, 6 Oct 2024 02:39:47 -0400 Subject: [PATCH 3/6] More style updates for tooltips and visualization page --- .../create-visualization-page.component.scss | 7 +-- ...te-visualization-page.component.theme.scss | 8 --- .../landing-page/landing-page.component.scss | 4 -- .../cde-visualization.component.html | 1 + .../cde-visualization.component.scss | 60 +++++-------------- .../cell-types/cell-types.component.html | 15 +++-- .../cell-types/cell-types.component.scss | 4 ++ .../cell-types/cell-types.component.ts | 2 + .../histogram/histogram.component.html | 14 +++-- .../histogram/histogram.component.scss | 17 +----- .../histogram/histogram.component.ts | 2 + .../metadata/metadata.component.html | 11 +++- .../components/metadata/metadata.component.ts | 11 +++- .../node-dist-visualization.component.html | 19 +----- .../node-dist-visualization.component.scss | 5 +- .../node-dist-visualization.component.ts | 19 +++++- .../components/violin/violin.component.html | 11 +++- .../components/violin/violin.component.scss | 3 + .../lib/components/violin/violin.component.ts | 2 + .../src/lib/tooltip-card.component.scss | 1 + 20 files changed, 104 insertions(+), 112 deletions(-) diff --git a/apps/cde-ui/src/app/pages/create-visualization-page/create-visualization-page.component.scss b/apps/cde-ui/src/app/pages/create-visualization-page/create-visualization-page.component.scss index 4a63e3ecd..abf0b2177 100644 --- a/apps/cde-ui/src/app/pages/create-visualization-page/create-visualization-page.component.scss +++ b/apps/cde-ui/src/app/pages/create-visualization-page/create-visualization-page.component.scss @@ -1,15 +1,10 @@ :host { display: block; - min-width: 545px; + min-width: 80rem; background: url('../../../assets/backgrounds/create-visualization-page-background.png') no-repeat; background-position: center; background-size: cover; - hra-nav-header { - border-bottom: 1px solid var(--sys-outline); - height: 5rem; - } - .content { display: flex; flex-direction: column; diff --git a/apps/cde-ui/src/app/pages/create-visualization-page/create-visualization-page.component.theme.scss b/apps/cde-ui/src/app/pages/create-visualization-page/create-visualization-page.component.theme.scss index fdf80d67b..a33bb019e 100644 --- a/apps/cde-ui/src/app/pages/create-visualization-page/create-visualization-page.component.theme.scss +++ b/apps/cde-ui/src/app/pages/create-visualization-page/create-visualization-page.component.theme.scss @@ -1,10 +1,6 @@ cde-create-visualization-page { color: var(--sys-secondary); - hra-nav-header { - background-color: var(--sys-surface-container-high) !important; - } - .card { background-color: var(--sys-surface-container-low); @@ -42,7 +38,3 @@ cde-create-visualization-page { } } } - -.info-tooltip-panel { - background-color: var(--sys-on-primary); -} diff --git a/apps/cde-ui/src/app/pages/landing-page/landing-page.component.scss b/apps/cde-ui/src/app/pages/landing-page/landing-page.component.scss index 3076bf4c3..49d93ef00 100644 --- a/apps/cde-ui/src/app/pages/landing-page/landing-page.component.scss +++ b/apps/cde-ui/src/app/pages/landing-page/landing-page.component.scss @@ -6,10 +6,6 @@ background-color: var(--sys-surface-container-low); min-width: 20rem; - hra-nav-header { - height: 5.25rem; - } - .create-explore-content { padding: 3rem 1rem 5rem 1rem; diff --git a/libs/cde-visualization/src/lib/cde-visualization/cde-visualization.component.html b/libs/cde-visualization/src/lib/cde-visualization/cde-visualization.component.html index fd9b4a7c9..60ed369e9 100644 --- a/libs/cde-visualization/src/lib/cde-visualization/cde-visualization.component.html +++ b/libs/cde-visualization/src/lib/cde-visualization/cde-visualization.component.html @@ -4,6 +4,7 @@ appIcon="assets/logo/cde_logo.svg" appTitle="Cell Distance Explorer" variant="fixed" + appDescription="Beta" >
diff --git a/libs/cde-visualization/src/lib/cde-visualization/cde-visualization.component.scss b/libs/cde-visualization/src/lib/cde-visualization/cde-visualization.component.scss index 398201ba7..ded8317e0 100644 --- a/libs/cde-visualization/src/lib/cde-visualization/cde-visualization.component.scss +++ b/libs/cde-visualization/src/lib/cde-visualization/cde-visualization.component.scss @@ -1,50 +1,7 @@ -::ng-deep { - .info-tooltip-panel { - background-color: white; - box-shadow: 0 0.3125rem 1rem 0 #201e3d3d; - border-radius: 0.5rem; - max-width: 21rem; - - .break { - margin-bottom: 1rem; - } - - div, - span { - font-family: 'Metropolis'; - font-size: 0.875rem; - line-height: 1.3125rem; - letter-spacing: 0.005em; - font-weight: 500; - color: #4c4c58; - } - - div { - margin: 1rem; - - span { - display: block; - } - } - } -} - -::ng-deep .download-snackbar-panel { - --mdc-snackbar-container-color: var(--sys-surface-container); - --mdc-snackbar-supporting-text-color: var(--sys-secondary); - translate: 0 -2rem; - text-align: center; - - .mdc-snackbar__surface { - border-radius: 0.5rem !important; - min-width: 13rem !important; - } -} - :host { width: 100%; display: grid; - grid-template-columns: 22.75rem minmax(59rem, calc(100vw - 22.75rem)); + grid-template-columns: 22.75rem minmax(57.25rem, calc(100vw - 22.75rem)); grid-template-rows: 4rem minmax(calc(900px - 4rem), calc(100vh - 4rem)); grid-template-areas: 'header visualization' @@ -85,12 +42,23 @@ border-width: 0 0 2px 0; border-style: solid; height: 100%; - width: calc(100% - 488px); } cde-violin { height: 100%; - width: 488px; + width: 390px; } } } + +::ng-deep .download-snackbar-panel { + --mdc-snackbar-container-color: var(--sys-surface-container); + --mdc-snackbar-supporting-text-color: var(--sys-secondary); + translate: 0 -2rem; + text-align: center; + + .mdc-snackbar__surface { + border-radius: 0.5rem !important; + min-width: 13rem !important; + } +} diff --git a/libs/cde-visualization/src/lib/components/cell-types/cell-types.component.html b/libs/cde-visualization/src/lib/components/cell-types/cell-types.component.html index 538393641..293418d34 100644 --- a/libs/cde-visualization/src/lib/components/cell-types/cell-types.component.html +++ b/libs/cde-visualization/src/lib/components/cell-types/cell-types.component.html @@ -16,11 +16,16 @@ [cdkConnectedOverlayOpen]="cellTypesInfoOpen" [cdkConnectedOverlayOffsetX]="5" > -
- Show/hide specific cell types in the visualizations by clicking the checkboxes. Update individual cell type - visualization colors by clicking the cell type's color legend button. Download a color map CSV file of the current - cell types and HEX codes. -
+ +
diff --git a/libs/cde-visualization/src/lib/components/node-dist-visualization/node-dist-visualization.component.scss b/libs/cde-visualization/src/lib/components/node-dist-visualization/node-dist-visualization.component.scss index ad9717320..a325c5b35 100644 --- a/libs/cde-visualization/src/lib/components/node-dist-visualization/node-dist-visualization.component.scss +++ b/libs/cde-visualization/src/lib/components/node-dist-visualization/node-dist-visualization.component.scss @@ -16,9 +16,8 @@ z-index: 1; align-items: center; gap: 0.25rem; - color: white; - font-size: 1rem; - line-height: 1.5rem; + font: var(--sys-label-medium); + letter-spacing: var(--sys-label-medium-tracking); color: #e6eaf0; mat-icon { diff --git a/libs/cde-visualization/src/lib/components/node-dist-visualization/node-dist-visualization.component.ts b/libs/cde-visualization/src/lib/components/node-dist-visualization/node-dist-visualization.component.ts index 0eaca1f84..711a1bb25 100644 --- a/libs/cde-visualization/src/lib/components/node-dist-visualization/node-dist-visualization.component.ts +++ b/libs/cde-visualization/src/lib/components/node-dist-visualization/node-dist-visualization.component.ts @@ -24,6 +24,7 @@ import { EdgeEntry } from '../../models/edge'; import { NodeEntry } from '../../models/node'; import { FileSaverService } from '../../services/file-saver/file-saver.service'; import { TOOLTIP_POSITION_RIGHT_SIDE } from '../../shared/tooltip-position'; +import { TooltipCardComponent, TooltipContent } from '@hra-ui/design-system/tooltip-card'; /** Utility type to convert properties of an object into an object with a value wrapper */ type Preactify = { @@ -73,7 +74,7 @@ function isNonEmptyArray(array: T[]): boolean { @Component({ selector: 'cde-node-dist-visualization', standalone: true, - imports: [CommonModule, OverlayModule, MatButtonModule, MatIconModule], + imports: [CommonModule, OverlayModule, MatButtonModule, MatIconModule, TooltipCardComponent], templateUrl: './node-dist-visualization.component.html', styleUrl: './node-dist-visualization.component.scss', changeDetection: ChangeDetectionStrategy.OnPush, @@ -116,6 +117,22 @@ export class NodeDistVisualizationComponent { /** Tooltip position constant */ readonly tooltipPosition = TOOLTIP_POSITION_RIGHT_SIDE; + /** Tooltip content */ + readonly tooltipContent: TooltipContent[] = [ + { + title: 'Zoom Options', + description: '• Mouse pinwheel \n• Trackpad Pinch', + }, + { + title: 'Pan Options', + description: '• CTRL/CMD + mouse drag \n• Right click + mouse drag \n• Keyboard arrows', + }, + { + title: 'Rotation Options for 3D Visualizations', + description: '• CTRL/CMD + keyboard arrows \n• Mouse Drag', + }, + ]; + /** Flag to check if the tooltip is open */ tooltipOpen = false; diff --git a/libs/cde-visualization/src/lib/components/violin/violin.component.html b/libs/cde-visualization/src/lib/components/violin/violin.component.html index d9b13f4cb..549966d9c 100644 --- a/libs/cde-visualization/src/lib/components/violin/violin.component.html +++ b/libs/cde-visualization/src/lib/components/violin/violin.component.html @@ -16,7 +16,16 @@ [cdkConnectedOverlayOpen]="infoOpen" [cdkConnectedOverlayOffsetX]="5" > -
Violin plot
+ + diff --git a/libs/cde-visualization/src/lib/components/violin/violin.component.scss b/libs/cde-visualization/src/lib/components/violin/violin.component.scss index 347de52e7..1ac84ea1d 100644 --- a/libs/cde-visualization/src/lib/components/violin/violin.component.scss +++ b/libs/cde-visualization/src/lib/components/violin/violin.component.scss @@ -36,6 +36,9 @@ } button { + --mdc-filled-button-container-height: 2rem; + --mdc-filled-button-container-color: #d5dbe3; + --mdc-filled-button-label-text-color: #201e3d; padding: 0.375rem 0.5rem; margin-left: 0.5rem; diff --git a/libs/cde-visualization/src/lib/components/violin/violin.component.ts b/libs/cde-visualization/src/lib/components/violin/violin.component.ts index e076480e6..d1808ef4e 100644 --- a/libs/cde-visualization/src/lib/components/violin/violin.component.ts +++ b/libs/cde-visualization/src/lib/components/violin/violin.component.ts @@ -24,6 +24,7 @@ import { FileSaverService } from '../../services/file-saver/file-saver.service'; import { TOOLTIP_POSITION_RIGHT_SIDE } from '../../shared/tooltip-position'; import { ColorPickerLabelComponent } from '../color-picker-label/color-picker-label.component'; import * as VIOLIN_SPEC from './violin.vl.json'; +import { TooltipCardComponent } from '@hra-ui/design-system/tooltip-card'; /** Interface for modifying the violin specification */ interface ModifiableViolinSpec { @@ -111,6 +112,7 @@ const DYNAMIC_COLOR_RANGE = Array(DYNAMIC_COLOR_RANGE_LENGTH) ColorPickerLabelComponent, OverlayModule, ScrollingModule, + TooltipCardComponent, ], templateUrl: './violin.component.html', styleUrl: './violin.component.scss', diff --git a/libs/design-system/tooltip-card/src/lib/tooltip-card.component.scss b/libs/design-system/tooltip-card/src/lib/tooltip-card.component.scss index ff6736682..1d3742e1d 100644 --- a/libs/design-system/tooltip-card/src/lib/tooltip-card.component.scss +++ b/libs/design-system/tooltip-card/src/lib/tooltip-card.component.scss @@ -6,6 +6,7 @@ box-shadow: 0rem 0.3125rem 1rem 0rem rgb(from var(--sys-shadow) r g b / 0.322); font: var(--sys-label-large); letter-spacing: var(--sys-label-large-tracking); + background: var(--sys-on-primary); .title { margin: 0; From 563a4a34e391b2845e4d861949cb9d7e72a89c89 Mon Sep 17 00:00:00 2001 From: edlu77 Date: Mon, 7 Oct 2024 23:25:29 -0400 Subject: [PATCH 4/6] Change violin vis size --- .../lib/components/violin/violin.component.scss | 16 +--------------- .../src/lib/components/violin/violin.vl.json | 2 +- 2 files changed, 2 insertions(+), 16 deletions(-) diff --git a/libs/cde-visualization/src/lib/components/violin/violin.component.scss b/libs/cde-visualization/src/lib/components/violin/violin.component.scss index 1ac84ea1d..4b1b06f40 100644 --- a/libs/cde-visualization/src/lib/components/violin/violin.component.scss +++ b/libs/cde-visualization/src/lib/components/violin/violin.component.scss @@ -6,9 +6,7 @@ / auto 1fr auto; grid-template-rows: 4rem calc(100% - 4rem); align-items: center; - row-gap: 0.75rem; overflow: hidden; - padding: 0.75rem 0.5rem; border-width: 0px 0px 2px 2px; border-style: solid; border-color: var(--sys-outline-variant); @@ -33,6 +31,7 @@ grid-area: plot; height: 100%; overflow-y: scroll; + padding: 0 0.5rem; } button { @@ -51,16 +50,3 @@ } } } - -::ng-deep { - #vg-tooltip-element.vg-tooltip { - font-family: 'Metropolis'; - font-weight: 500; - font-size: 0.75rem; - line-height: 1.125rem; - color: var(--sys-secondary); - padding: 0.5rem; - max-width: 22.5rem; - box-shadow: 0px 5px 16px 0px #201e3d3d; - } -} diff --git a/libs/cde-visualization/src/lib/components/violin/violin.vl.json b/libs/cde-visualization/src/lib/components/violin/violin.vl.json index bb78da376..2deeeb72a 100644 --- a/libs/cde-visualization/src/lib/components/violin/violin.vl.json +++ b/libs/cde-visualization/src/lib/components/violin/violin.vl.json @@ -61,7 +61,7 @@ }, "spec": { "height": 40, - "width": 300, + "width": 225, "layer": [ { "mark": { From 7e516af156c8fd0f81ce80d06750a2122d760141 Mon Sep 17 00:00:00 2001 From: edlu77 Date: Mon, 7 Oct 2024 23:38:31 -0400 Subject: [PATCH 5/6] Fix build issue --- libs/cde-visualization/project.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/cde-visualization/project.json b/libs/cde-visualization/project.json index bf5348c80..268387406 100644 --- a/libs/cde-visualization/project.json +++ b/libs/cde-visualization/project.json @@ -16,7 +16,7 @@ "polyfills": ["zone.js"], "tsConfig": "libs/cde-visualization/tsconfig.app.json", "inlineStyleLanguage": "scss", - "styles": ["apps/cde-visualization/src/styles.scss"], + "styles": ["libs/cde-visualization/src/styles.scss"], "stylePreprocessorOptions": { "includePaths": ["node_modules/", "libs/design-system/styles"] }, From e77e6ae007bf9a485edba14ed672eaf26ab0c053 Mon Sep 17 00:00:00 2001 From: edlu77 Date: Tue, 15 Oct 2024 20:29:17 -0400 Subject: [PATCH 6/6] Update testing --- .../cde-visualization.component.spec.ts | 81 +++++++++---------- 1 file changed, 40 insertions(+), 41 deletions(-) diff --git a/libs/cde-visualization/src/lib/cde-visualization/cde-visualization.component.spec.ts b/libs/cde-visualization/src/lib/cde-visualization/cde-visualization.component.spec.ts index 68b940f1f..e6635fbc9 100644 --- a/libs/cde-visualization/src/lib/cde-visualization/cde-visualization.component.spec.ts +++ b/libs/cde-visualization/src/lib/cde-visualization/cde-visualization.component.spec.ts @@ -1,13 +1,12 @@ -import { TestBed } from '@angular/core/testing'; -import { RenderComponentOptions, render, screen } from '@testing-library/angular'; -import userEvent from '@testing-library/user-event'; -import { mockDeep } from 'jest-mock-extended'; -import embed, { Result } from 'vega-embed'; - import { TestbedHarnessEnvironment } from '@angular/cdk/testing/testbed'; +import { TestBed } from '@angular/core/testing'; import { MatMenuHarness } from '@angular/material/menu/testing'; import { rgbToHex } from '@hra-ui/design-system/color-picker'; import { provideScrolling } from '@hra-ui/design-system/scrolling'; +import { render, RenderComponentOptions } from '@testing-library/angular'; +import { mockDeep } from 'jest-mock-extended'; +import embed, { Result } from 'vega-embed'; + import { ColorMapEntry, DEFAULT_COLOR_MAP_KEY, DEFAULT_COLOR_MAP_VALUE_KEY } from '../models/color-map'; import { EdgeEntry } from '../models/edge'; import { DEFAULT_NODE_TARGET_KEY, DEFAULT_NODE_TARGET_VALUE, NodeEntry } from '../models/node'; @@ -109,41 +108,41 @@ describe('CdeVisualizationComponent', () => { embedResult.view.signal.mockReturnThis(); }); - it('should update nodes when downloadNodes is called', async () => { - const { - fixture: { componentInstance: instance }, - } = await setup({ - componentInputs: { - ...sampleData, - nodes: sampleNodes, - }, - }); - - const fileSaver = TestBed.inject(FileSaverService); - const fileSaveSpy = jest.spyOn(fileSaver, 'saveCsv').mockReturnValue(undefined); - - const downloadNodesButton = screen.getByText('Nodes'); - await userEvent.click(downloadNodesButton); - expect(fileSaveSpy).toHaveBeenCalledWith(instance.loadedNodes(), 'nodes.csv'); - }); - - it('should update edges when downloadEdges is called', async () => { - const { - fixture: { componentInstance: instance }, - } = await setup({ - componentInputs: { - ...sampleData, - edges: sampleEdges, - }, - }); - - const fileSaver = TestBed.inject(FileSaverService); - const fileSaveSpy = jest.spyOn(fileSaver, 'saveCsv').mockReturnValue(undefined); - - const downloadEdgesButton = screen.getByText('Edges'); - await userEvent.click(downloadEdgesButton); - expect(fileSaveSpy).toHaveBeenCalledWith(instance.loadedEdges(), 'edges.csv'); - }); + // it('should update nodes when downloadNodes is called', async () => { + // const { + // fixture: { componentInstance: instance }, + // } = await setup({ + // componentInputs: { + // ...sampleData, + // nodes: sampleNodes, + // }, + // }); + + // const fileSaver = TestBed.inject(FileSaverService); + // const fileSaveSpy = jest.spyOn(fileSaver, 'saveCsv').mockReturnValue(undefined); + + // const downloadNodesButton = screen.getByText('Nodes'); + // await userEvent.click(downloadNodesButton); + // expect(fileSaveSpy).toHaveBeenCalledWith(instance.loadedNodes(), 'nodes.csv'); + // }); + + // it('should update edges when downloadEdges is called', async () => { + // const { + // fixture: { componentInstance: instance }, + // } = await setup({ + // componentInputs: { + // ...sampleData, + // edges: sampleEdges, + // }, + // }); + + // const fileSaver = TestBed.inject(FileSaverService); + // const fileSaveSpy = jest.spyOn(fileSaver, 'saveCsv').mockReturnValue(undefined); + + // const downloadEdgesButton = screen.getByText('Edges'); + // await userEvent.click(downloadEdgesButton); + // expect(fileSaveSpy).toHaveBeenCalledWith(instance.loadedEdges(), 'edges.csv'); + // }); it('should update color map when downloadColorMap is called', async () => { const { fixture } = await setup({