diff --git a/static/css/about.scss b/static/css/about.scss index c22519b71a..6d3a19c4a5 100644 --- a/static/css/about.scss +++ b/static/css/about.scss @@ -1,5 +1,5 @@ /** - * Copyright 2023 Google LLC + * Copyright 2024 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,11 +16,11 @@ /* Styles for the about page */ -@use "./new_variables" as var; +@use "./variables" as var; @import "base"; -@import "./components/media_text"; -@import "./components/columns_text"; -@import "./components/quote"; +@import "./content/media_text"; +@import "./content/columns_text"; +@import "./content/quote"; #about { // General Styles diff --git a/static/css/base.scss b/static/css/base.scss index faf68eafb3..3a79adf932 100644 --- a/static/css/base.scss +++ b/static/css/base.scss @@ -36,6 +36,10 @@ $h3-font-size: 1.2rem; $headings-font-weight: 600; +/* + If the grid-breakpoints change, the TypeScript equivalent should be updated: + `static/js/apps/base/utilities/utilities.ts`, `export const BREAKPOINTS` + */ $grid-breakpoints: ( xs: 0, sm: 576px, diff --git a/static/css/build.scss b/static/css/build.scss index a38b590194..6aba4247ed 100644 --- a/static/css/build.scss +++ b/static/css/build.scss @@ -1,5 +1,5 @@ /** - * Copyright 2023 Google LLC + * Copyright 2024 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,15 +16,15 @@ /* Styles for the build page */ -@use "./new_variables" as var; +@use "./variables" as var; @import "base"; -@import "./components/partners"; -@import "./components/hero_columns"; -@import "./components/media_text"; -@import "./components/quote"; -@import "./components/simple_text"; -@import "./components/slide_carousel"; -@import "./components/one_data_commons"; +@import "./content/partners"; +@import "./content/hero_columns"; +@import "./content/media_text"; +@import "./content/quote"; +@import "./content/simple_text"; +@import "./content/slide_carousel"; +@import "./content/one_data_commons"; #build { // General Styles diff --git a/static/css/components/build_your_own.scss b/static/css/content/build_your_own.scss similarity index 100% rename from static/css/components/build_your_own.scss rename to static/css/content/build_your_own.scss diff --git a/static/css/components/topics.scss b/static/css/content/chips.scss similarity index 88% rename from static/css/components/topics.scss rename to static/css/content/chips.scss index 696669b307..e66bb1633f 100644 --- a/static/css/components/topics.scss +++ b/static/css/content/chips.scss @@ -15,15 +15,16 @@ */ /** - * Styles for the topics component located on the home page + * Styles for the LinkChips component and any other component that will display chips in the same way */ -.topics { +.chip-section { h3 { @include var.title_xs; margin-bottom: calc(#{var.$spacing} * 3); } - .topics-container { + + .chip-container { margin: 0; padding: 0; display: flex; @@ -34,7 +35,8 @@ max-width: 100%; } } - .topic-item { + + .chip-item { display: block; list-style: none; a { diff --git a/static/css/components/columns_text.scss b/static/css/content/columns_text.scss similarity index 55% rename from static/css/components/columns_text.scss rename to static/css/content/columns_text.scss index 3ee9a71a4b..67a54086a9 100644 --- a/static/css/components/columns_text.scss +++ b/static/css/content/columns_text.scss @@ -1,3 +1,21 @@ +/** + * Copyright 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* Styles for the text column sections */ + .text-columns { .container { display: grid; diff --git a/static/css/components/hero_columns.scss b/static/css/content/hero_columns.scss similarity index 100% rename from static/css/components/hero_columns.scss rename to static/css/content/hero_columns.scss diff --git a/static/css/components/hero_video.scss b/static/css/content/hero_video.scss similarity index 100% rename from static/css/components/hero_video.scss rename to static/css/content/hero_video.scss diff --git a/static/css/components/media_text.scss b/static/css/content/media_text.scss similarity index 100% rename from static/css/components/media_text.scss rename to static/css/content/media_text.scss diff --git a/static/css/components/one_data_commons.scss b/static/css/content/one_data_commons.scss similarity index 100% rename from static/css/components/one_data_commons.scss rename to static/css/content/one_data_commons.scss diff --git a/static/css/components/partners.scss b/static/css/content/partners.scss similarity index 100% rename from static/css/components/partners.scss rename to static/css/content/partners.scss diff --git a/static/css/components/quote.scss b/static/css/content/quote.scss similarity index 100% rename from static/css/components/quote.scss rename to static/css/content/quote.scss diff --git a/static/css/components/sample_questions.scss b/static/css/content/sample_questions.scss similarity index 100% rename from static/css/components/sample_questions.scss rename to static/css/content/sample_questions.scss diff --git a/static/css/components/simple_text.scss b/static/css/content/simple_text.scss similarity index 100% rename from static/css/components/simple_text.scss rename to static/css/content/simple_text.scss diff --git a/static/css/components/slide_carousel.scss b/static/css/content/slide_carousel.scss similarity index 100% rename from static/css/components/slide_carousel.scss rename to static/css/content/slide_carousel.scss diff --git a/static/css/components/tools.scss b/static/css/content/tools.scss similarity index 100% rename from static/css/components/tools.scss rename to static/css/content/tools.scss diff --git a/static/css/core.scss b/static/css/core.scss index 933e004f11..15b2223c9e 100644 --- a/static/css/core.scss +++ b/static/css/core.scss @@ -16,7 +16,7 @@ /* Styles for the header reflected in version 2 of the homepage */ -@use "./new_variables" as var; +@use "./variables" as var; @import "base"; $header-desktop-height: 96px; diff --git a/static/css/homepage.scss b/static/css/homepage.scss index 8d182d960c..64e4aca868 100644 --- a/static/css/homepage.scss +++ b/static/css/homepage.scss @@ -16,15 +16,15 @@ /* Styles for the homepage */ -@use "./new_variables" as var; +@use "./variables" as var; @import "base"; -@import "./components/hero_video"; -@import "./components/sample_questions"; -@import "./components/tools"; -@import "./components/partners"; -@import "./components/build_your_own"; -@import "./components/topics"; -@import "./components/slide_carousel"; +@import "./content/hero_video"; +@import "./content/sample_questions"; +@import "./content/tools"; +@import "./content/partners"; +@import "./content/build_your_own"; +@import "./content/chips"; +@import "./content/slide_carousel"; #homepage { // General Styles diff --git a/static/css/new_variables.scss b/static/css/variables.scss similarity index 100% rename from static/css/new_variables.scss rename to static/css/variables.scss diff --git a/static/js/apps/base/utilities/utilities.ts b/static/js/apps/base/utilities/utilities.ts index 4f366cb39e..c9ee36ed95 100644 --- a/static/js/apps/base/utilities/utilities.ts +++ b/static/js/apps/base/utilities/utilities.ts @@ -140,10 +140,19 @@ export const extractLabels = (elementId = "metadata-labels"): Labels => { return labels; }; -//A breakpoints constant object for responsiveness, for access on the TypeScript side. +/* + A breakpoints constant object for responsiveness, for access on the TypeScript side. + These are the default breakpoints for a page that does not have custom breakpoints and are + applied in: `static/css/base.scss` + + If a page does not use default breakpoints and those breakpoints are required on + the TypeScript side, a separate breakpoint object should be created. +*/ export const BREAKPOINTS = { - sm: 599, - md: 746, - mdExpanded: 859, - lg: 1440, + xs: 0, + sm: 576, + md: 768, + lg: 1068, + xl: 1350, + xxl: 1400, }; diff --git a/static/js/apps/homepage/app.tsx b/static/js/apps/homepage/app.tsx index db30d2d8d9..f530d30978 100644 --- a/static/js/apps/homepage/app.tsx +++ b/static/js/apps/homepage/app.tsx @@ -24,10 +24,10 @@ import React, { ReactElement } from "react"; import Build from "../../components/content/build_your_own"; import HeroVideo from "../../components/content/hero_video"; +import { LinkChip, LinkChips } from "../../components/content/link_chips"; import Partners from "../../components/content/partners"; import SampleQuestions from "../../components/content/sample_questions"; import Tools from "../../components/content/tools"; -import Topics from "../../components/content/topics"; import { GA_EVENT_HOMEPAGE_CLICK } from "../../shared/ga_events"; import { Routes } from "../../shared/types/base"; import { @@ -56,10 +56,16 @@ export function App({ sampleQuestions, routes, }: AppProps): ReactElement { + const topicLinkChips: LinkChip[] = topics.map((topic) => ({ + id: topic.id, + title: topic.title, + url: topic.browseUrl, + })); + return ( <> - + diff --git a/static/js/components/content/topics.tsx b/static/js/components/content/link_chips.tsx similarity index 51% rename from static/js/components/content/topics.tsx rename to static/js/components/content/link_chips.tsx index 4edb147b35..39de5cd42e 100644 --- a/static/js/components/content/topics.tsx +++ b/static/js/components/content/link_chips.tsx @@ -15,7 +15,7 @@ */ /** - * A component that renders the topics section of the home page. + * A component that renders a series of chips that function as links with titles */ import React, { ReactElement } from "react"; @@ -26,33 +26,47 @@ import { GA_PARAM_URL, triggerGAEvent, } from "../../shared/ga_events"; -import { Topic } from "../../shared/types/homepage"; -interface TopicsProps { - //the topics passed from the backend through to the JavaScript via the templates - topics: Topic[]; +//an individual LinkChip comprising the title and url attributes of the chip. +export interface LinkChip { + //a unique identifier for the chip (used for map keys) + id: string; + //the title of the chip - this will be the text of the link + title: string; + //the url of the chip link + url: string; } -const Topics = ({ topics }: TopicsProps): ReactElement => { +interface LinkChipsProps { + //the title of the component, displayed as a header above the chips + title?: string; + //the link + linkChips: LinkChip[]; +} + +export const LinkChips = ({ + title, + linkChips, +}: LinkChipsProps): ReactElement => { return ( -
+
); }; - -export default Topics;