Skip to content

Commit 34c4d4c

Browse files
authored
Feature task 3634 tdei theme (#54)
### DevBoard Task https://dev.azure.com/TDEI-UW/TDEI/_workitems/edit/3634/ This PR applies TDEI brand theming across the application — updating colours, typography, layout, and accessibility throughout. ### Visual changes - **Navbar** — Redesigned with TDEI brand colour (`#32006e`), new responsive mobile side-menu with slide-in animation, user profile dropdown, and sticky positioning - **Sign-in page** — Fully redesigned card layout with TDEI logo, styled inputs, show/hide password toggle, and responsive mobile view - **Dashboard** — Split-panel layout with scrollable workspace list and sticky detail panel; workspace type icons added - **Homepage** — New hero section with brand imagery and workspace type icons (OSW, Pathways, Flex) - **Buttons & links** — Replaced ad-hoc Bootstrap variants with consistent utility classes (`tdei-primary-button`, `tdei-secondary-button`, `tdei-primary-link`, `tdei-rounded-button`) ### Screenshots: <img width="1470" height="956" alt="Screenshot 2026-05-25 at 8 02 16 PM" src="https://github.com/user-attachments/assets/acaf73e3-9bea-4259-9846-03c1021574c4" /> <img width="1470" height="956" alt="Screenshot 2026-05-25 at 8 02 40 PM" src="https://github.com/user-attachments/assets/e7c76520-9f88-4042-b3cf-c83e5977a500" /> <img width="1470" height="956" alt="Screenshot 2026-05-25 at 8 06 00 PM" src="https://github.com/user-attachments/assets/65b10d2d-6042-46b8-8c18-02804cc53c0d" /> <img width="1470" height="956" alt="Screenshot 2026-05-25 at 8 08 21 PM" src="https://github.com/user-attachments/assets/7db14bb2-4ce4-4716-be2f-d4b203ed8bcb" /> <img width="1470" height="956" alt="Screenshot 2026-05-25 at 8 08 42 PM" src="https://github.com/user-attachments/assets/10893743-643c-4d8d-8b29-12df3e01e80a" /> <img width="1470" height="956" alt="Screenshot 2026-05-25 at 8 16 01 PM" src="https://github.com/user-attachments/assets/3a33c87d-9b94-4c15-a46f-b3636a753631" /> <img width="1470" height="956" alt="Screenshot 2026-05-25 at 8 17 03 PM" src="https://github.com/user-attachments/assets/4cbde4e3-9ff7-4577-911c-b523eceb3015" /> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Theme & Styling Updates - Updated Bootstrap primary color from `#9b0092` to TDEI brand colour `#32006e` - Added new SCSS theme variables for TDEI brand colors including `$brand-accent`, `$tdei-secondary`, `$tdei-blue`, `$tdei-green`, `$tdei-cyan`, background shades, and `$text-navy` - Expanded global styling in `main.scss` with webkit autofill transitions, new CSS variable declarations in `:root`, and dropdown menu active state styling - Added "TDEI Utility Classes" section with page header/title/subtitle helpers and typography utilities - Introduced Google Fonts module (`@nuxtjs/google-fonts`) with Open Sans and Montserrat font families ## Navigation & Navbar - Refactored `AppNavbar.vue` from Bootstrap collapsed layout to custom responsive design with sticky positioning - Implemented mobile-only off-canvas side drawer using `b-collapse` with click-to-dismiss backdrop - Added responsive behavior tracking (`isMobileView` for viewport ≤768px) with automatic drawer closure on resize - Integrated keyboard handling (Escape key to close drawer) and focus management for accessibility - Updated navbar styling with TDEI brand colors and responsive spacing - Added mobile-specific user section and logout button in side drawer - Hidden "Sign In" link for unauthenticated users (showing only the brand) ## Authentication & Sign-in Page - Redesigned `SigninForm.vue` with TDEI-branded auth card layout and updated styling - Changed password input from static to toggleable with visibility icon button controlled by `showPassword` state - Updated submit button to display dynamic state ("Signing In..." vs "Sign In") based on loading state, replacing prior spinner template - Implemented dedicated error rendering block displayed only when error exists - Improved error handling with stricter fetch-error type guard checking `response.status` and `response.json()` function - Refactored sign-in page (`pages/signin.vue`) to simplified markup with centered flex layout and login background image ## Dashboard Layout & Components - Refactored dashboard to split-panel layout with scrollable workspace list on left and sticky details panel on right - Updated `WorkspaceItem.vue` workspace picker card with type-specific icons, formatted type labels, conditional status/role pills, and responsive styling - Added `selectedProjectGroupName` computed value for project group display - Explicitly typed `selectWorkspace` function parameter as `Workspace` - Introduced new SCSS for flex split layout, responsive stacking, sticky positioning, and custom scrollbars - Updated `dashboard/Toolbar.vue` button styling: "Edit" uses primary variant, "Review/Export/Settings" use outline-secondary ## Homepage Updates - Redesigned homepage with new hero layout replacing prior centered jumbo-content - Added hero divider element and restructured hero content using `hero-shell`, `hero-copy`, and `hero-actions` classes - Made primary call-to-action conditional: routes to `/dashboard` when authenticated, otherwise to `/signin`, with dynamic button label - Updated `pages/index.vue` to import `tdeiClient` and expose auth state - Revised SCSS replacing `.jumbo` styles with new hero-specific classes and responsive breakpoint adjustments across lg/md/sm viewports ## Component Button & Link Standardization - Standardized button styling across components: - Changed outline buttons from `btn btn-outline-primary` to `btn btn-outline-secondary` (DatasetTypeRadio, help page) - Updated toolbar and modal buttons to use primary/secondary/danger variants consistently - Replaced `btn-dark` styling with appropriate primary/outline-secondary variants in review, settings, and teams components - Updated deletion confirmation button styling from outline-danger to solid danger variant ## Accessibility & UX Improvements - Added focus trap and keyboard handling in navbar for mobile menu drawer - Improved ARIA attributes and semantic HTML in refactored components - Updated button `aria-label` in WorkspaceItem to include workspace ID - Refined modal button configurations for better accessibility (e.g., custom `cancelClass` with `p-0`) - Updated component formatting for improved readability and spacing ## Additional Changes - Updated `AppLogo.vue` to use new TDEI logo (`tdei-logo.png` instead of `icon.svg`) - Modified Nuxt config to optimize dependency bundling for `BCollapse` and `BNavbar` components - Added `@nuxtjs/google-fonts` to devDependencies - Updated `nuxt-loading-indicator` styling in default layout with gradient color via CSS variables - Minor SCSS restructuring and reformatting across multiple components for consistency <!-- end of auto-generated comment: release notes by coderabbit.ai -->
2 parents d41aec5 + 558b158 commit 34c4d4c

32 files changed

Lines changed: 1477 additions & 345 deletions

assets/img/bg_login.png

492 KB
Loading

assets/img/flex-type.svg

Lines changed: 47 additions & 0 deletions
Loading

assets/img/osw-type.svg

Lines changed: 9 additions & 0 deletions
Loading

assets/img/pathways-type.svg

Lines changed: 80 additions & 0 deletions
Loading

assets/img/tdei-logo.png

152 KB
Loading

assets/scss/main.scss

Lines changed: 75 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,44 @@
11
@import "theme.scss";
22
@import "bootstrap/scss/bootstrap.scss";
3+
4+
input:-webkit-autofill,
5+
input:-webkit-autofill:hover,
6+
input:-webkit-autofill:focus {
7+
transition: background-color 600000s, color 600000s;
8+
}
39
@import "maplibre-gl/dist/maplibre-gl.css";
410
@import "vue3-toastify/dist/index.css";
511

612
:root {
7-
--ws-create-color: $review-create-color;
8-
--ws-modify-color: $review-modify-color;
9-
--ws-delete-color: $review-delete-color;
13+
--primary-font-family: "Open Sans", sans-serif;
14+
--secondary-font-family: "Montserrat", sans-serif;
15+
--brand-accent: #{$brand-accent};
16+
--secondary-color: #{$tdei-secondary};
17+
--text-navy: #{$text-navy};
18+
--tdei-blue: #{$tdei-blue};
19+
--tdei-green: #{$tdei-green};
20+
--tdei-cyan: #{$tdei-cyan};
21+
--purple-background-light: #{$purple-background-light};
22+
--purple-background-dark: #{$purple-background-dark};
23+
--purple-background-medium: #{$purple-background-medium};
24+
--ws-create-color: #{$review-create-color};
25+
--ws-modify-color: #{$review-modify-color};
26+
--ws-delete-color: #{$review-delete-color};
1027
}
1128

1229
html, body, #__nuxt {
1330
width: 100%;
1431
height: 100%;
1532
}
1633

34+
body {
35+
margin: 0;
36+
font-family: var(--primary-font-family);
37+
-webkit-font-smoothing: antialiased;
38+
-moz-osx-font-smoothing: grayscale;
39+
min-height: 100vh;
40+
}
41+
1742
/* Vue page transitions */
1843
.fade-enter-active, .fade-leave-active,
1944
.layout-enter-active, .layout-leave-active,
@@ -47,6 +72,13 @@ label > .form-select:first-child {
4772
box-shadow: $box-shadow;
4873
}
4974

75+
.dropdown-item.active,
76+
.dropdown-item:active {
77+
color: $text-navy;
78+
text-decoration: none;
79+
background-color: $dropdown-active-bg;
80+
}
81+
5082
/* Review */
5183

5284
.bg-create {
@@ -67,3 +99,43 @@ label > .form-select:first-child {
6799
.text-delete {
68100
color: #{darken($review-delete-color, 3%)};
69101
}
102+
103+
/* TDEI Utility Classes */
104+
105+
.page-header-title {
106+
font-family: var(--secondary-font-family);
107+
font-size: 24px;
108+
font-weight: 700;
109+
margin-bottom: 5px;
110+
}
111+
112+
.page-header-subtitle {
113+
font-family: var(--secondary-font-family);
114+
font-size: 14px;
115+
color: $tdei-secondary;
116+
}
117+
118+
.tdei-bold-name {
119+
font-size: 16px;
120+
font-weight: 700;
121+
margin-bottom: 8px;
122+
}
123+
124+
.tdei-name-desc {
125+
font-size: 14px;
126+
color: $tdei-secondary;
127+
}
128+
129+
.tdei-hint-text {
130+
font-size: 14px;
131+
color: $tdei-secondary;
132+
font-style: italic;
133+
}
134+
135+
.header {
136+
display: flex;
137+
justify-content: space-between;
138+
align-items: center;
139+
padding-bottom: 20px;
140+
}
141+

assets/scss/theme.scss

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,28 @@
33
/* Bootstrap Customization */
44
$border-radius: 0.15rem;
55
$card-height: 100%;
6-
$primary: #9b0092;
6+
$primary: #32006e;
7+
$secondary: #5f647a;
8+
$btn-font-weight: 600;
79

810
@import "bootstrap/scss/functions";
911
@import "bootstrap/scss/variables";
1012
@import "bootstrap/scss/mixins";
1113

1214
$navbar-height: 58px;
1315

16+
// TDEI brand colors
17+
$brand-accent: #4b2e83;
18+
$tdei-secondary: $secondary;
19+
$tdei-blue: #586ab5;
20+
$tdei-green: #479fa1;
21+
$tdei-cyan: #59c3c8;
22+
$purple-background-light: #f4f0fb;
23+
$purple-background-dark: #ddd2ee;
24+
$purple-background-medium: #ebe4f6;
25+
$text-navy: #2f3661;
26+
$dropdown-active-bg: #e2f0f8;
27+
1428
$review-create-color: #39dbc0;
1529
$review-modify-color: #db950a;
1630
$review-delete-color: #cc2c47;

components/AppLogo.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
<template>
2-
<img class="app-logo img-fluid" src="~/assets/img/icon.svg" alt="" />
2+
<img class="app-logo img-fluid" src="~/assets/img/tdei-logo.png" alt="" />
33
</template>
44

0 commit comments

Comments
 (0)