From 23ec8241e9b8eab43cc052589ca4fd7349150636 Mon Sep 17 00:00:00 2001 From: Enrique Moreno Date: Tue, 22 Apr 2025 13:37:50 +0200 Subject: [PATCH 1/9] Updated most of the styles according to tokens --- packages/lib/src/footer/Footer.tsx | 223 +++++++++++++++-------------- 1 file changed, 114 insertions(+), 109 deletions(-) diff --git a/packages/lib/src/footer/Footer.tsx b/packages/lib/src/footer/Footer.tsx index 0c4262114c..32e1b7f275 100644 --- a/packages/lib/src/footer/Footer.tsx +++ b/packages/lib/src/footer/Footer.tsx @@ -1,103 +1,34 @@ -import { useMemo, useContext } from "react"; -import styled, { ThemeProvider } from "styled-components"; +import { useContext } from "react"; +import styled from "styled-components"; import { responsiveSizes, spaces } from "../common/variables"; import DxcFlex from "../flex/Flex"; import DxcIcon from "../icon/Icon"; import { Tooltip } from "../tooltip/Tooltip"; import { dxcLogo, dxcSmallLogo } from "./Icons"; import FooterPropsType from "./types"; -import { CoreSpacingTokensType } from "../common/coreTokens"; -import HalstackContext, { HalstackLanguageContext } from "../HalstackContext"; - -const DxcFooter = ({ - socialLinks, - bottomLinks, - copyright, - children, - margin, - tabIndex = 0, - mode = "default", -}: FooterPropsType): JSX.Element => { - const colorsTheme = useContext(HalstackContext); - const translatedLabels = useContext(HalstackLanguageContext); - - const footerLogo = useMemo( - () => - !colorsTheme.footer.logo ? ( - mode === "default" ? ( - dxcLogo - ) : ( - dxcSmallLogo - ) - ) : typeof colorsTheme.footer.logo === "string" ? ( - - ) : ( - colorsTheme.footer.logo - ), - [colorsTheme, translatedLabels] - ); - - return ( - - - - {footerLogo} - {mode === "default" && ( - - {socialLinks?.map((link, index) => ( - - - - {typeof link.logo === "string" ? : link.logo} - - - - ))} - - )} - - {children} - {mode === "default" && ( - - - {bottomLinks?.map((link, index) => ( - - - {link.text} - - - ))} - - {copyright ?? translatedLabels.footer.copyrightText(new Date().getFullYear())} - - )} - - - ); -}; +import { HalstackLanguageContext } from "../HalstackContext"; const FooterContainer = styled.footer<{ margin: FooterPropsType["margin"]; mode?: FooterPropsType["mode"]; }>` - background-color: ${(props) => props.theme.backgroundColor}; + background-color: var(--color-bg-neutral-strongest); box-sizing: border-box; display: flex; flex-direction: ${(props) => (props?.mode === "default" ? "column" : "row")}; justify-content: space-between; margin-top: ${(props) => (props.margin ? spaces[props.margin] : "0px")}; - min-height: ${(props) => (props?.mode === "default" ? props.theme.height : "40px")}; + /* TODO: Ask about min height */ + min-height: ${(props) => (props?.mode === "default" ? "124px" : "40px")}; width: 100%; - gap: ${(props) => (props?.mode === "default" ? "0px" : "32px")}; + gap: ${(props) => (props?.mode === "default" ? "var(--spacing-gap-none)" : "32px")}; @media (min-width: ${responsiveSizes.small}rem) { - padding: ${(props) => (props?.mode === "default" ? "24px 32px" : "12px 32px")}; + padding: ${(props) => + props?.mode === "default" + ? "var(--spacing-padding-m) var(--spacing-padding-xl)" + : "var(--spacing-padding-s) var(--spacing-padding-xl)"}; } + /* TODO: Ask about responsive styles */ @media (max-width: ${responsiveSizes.small}rem) { padding: 20px; flex-direction: column; @@ -117,9 +48,8 @@ const BottomContainer = styled.div` align-items: center; } - border-top: ${(props) => - `${props.theme.bottomLinksDividerThickness} ${props.theme.bottomLinksDividerStyle} ${props.theme.bottomLinksDividerColor}`}; - margin-top: 16px; + border-top: var(--border-width-s) var(--border-style-default) var(--border-color-primary-medium); + margin-top: var(--spacing-gap-m); `; const ChildComponents = styled.div` @@ -128,12 +58,11 @@ const ChildComponents = styled.div` `; const Copyright = styled.div` - padding-top: ${(props) => props.theme.bottomLinksDividerSpacing}; - font-family: ${(props) => props.theme.copyrightFontFamily}; - font-size: ${(props) => props.theme.copyrightFontSize}; - font-style: ${(props) => props.theme.copyrightFontStyle}; - font-weight: ${(props) => props.theme.copyrightFontWeight}; - color: ${(props) => props.theme.copyrightFontColor}; + padding-top: var(--spacing-padding-xs); + font-family: var(--typography-font-family); + font-size: var(--typography-label-s); + font-weight: var(--typography-label-regular); + color: var(--color-fg-neutral-bright); @media (min-width: ${responsiveSizes.small}rem) { max-width: 40%; @@ -148,15 +77,17 @@ const Copyright = styled.div` `; const LogoContainer = styled.span<{ mode?: FooterPropsType["mode"] }>` - max-height: ${(props) => (props?.mode === "default" ? props.theme.logoHeight : "16px")}; - width: ${(props) => props.theme.logoWidth}; + max-height: ${(props) => (props?.mode === "default" ? "var(--height-m)" : "var(--height-xxs)")}; + width: auto; `; -const LogoImg = styled.img<{ mode?: FooterPropsType["mode"] }>` - max-height: ${(props) => (props?.mode === "default" ? props.theme.logoHeight : "16px")}; - width: ${(props) => props.theme.logoWidth}; -`; +// TODO: Remove and use logo from the props instead +// const LogoImg = styled.img<{ mode?: FooterPropsType["mode"] }>` +// max-height: ${(props) => (props?.mode === "default" ? "var(--height-m)" : "var(--height-xxs)")}; +// width: auto; +// `; +// TODO: Need an example in Figma with focus state const SocialAnchor = styled.a<{ index: number }>` border-radius: 4px; @@ -169,13 +100,13 @@ const SocialAnchor = styled.a<{ index: number }>` const SocialIconContainer = styled.div` display: flex; align-items: center; - color: ${(props) => props.theme.socialLinksColor}; + color: var(--color-fg-neutral-bright); overflow: hidden; - font-size: ${(props) => props.theme.socialLinksSize}; + font-size: var(--height-s); svg { - height: ${(props) => props.theme.socialLinksSize}; - width: ${(props) => props.theme.socialLinksSize}; + height: var(--height-s); + width: 24px; } `; @@ -183,8 +114,8 @@ const BottomLinks = styled.div` display: inline-flex; flex-wrap: wrap; align-self: center; - padding-top: ${(props) => props.theme.bottomLinksDividerSpacing}; - color: #fff; + padding-top: var(--spacing-padding-xs); + color: var(--color-fg-neutral-bright); @media (min-width: ${responsiveSizes.small}rem) { max-width: 60%; @@ -196,22 +127,96 @@ const BottomLinks = styled.div` & > span:not(:first-child):before { content: "·"; - padding: 0 0.5rem; + padding: var(--spacing-padding-none) var(--spacing-padding-xs); } `; +// TODO: Add examples with focus to figma to see border-radius and outline width const BottomLink = styled.a` - text-decoration: ${(props) => props.theme.bottomLinksTextDecoration}; - color: ${(props) => props.theme.bottomLinksFontColor}; - font-family: ${(props) => props.theme.bottomLinksFontFamily}; - font-size: ${(props) => props.theme.bottomLinksFontSize}; - font-style: ${(props) => props.theme.bottomLinksFontStyle}; - font-weight: ${(props) => props.theme.bottomLinksFontWeight}; + text-decoration: none; border-radius: 2px; + font-family: var(--typography-font-family); + font-size: var(--typography-label-m); + font-weight: var(--typography-label-regular); + color: var(--color-fg-neutral-bright); + &:focus { outline: 2px solid #0095ff; } `; +const DxcFooter = ({ + socialLinks, + bottomLinks, + copyright, + children, + margin, + tabIndex = 0, + mode = "default", +}: FooterPropsType): JSX.Element => { + const translatedLabels = useContext(HalstackLanguageContext); + + // TODO + // const footerLogo = useMemo( + // () => + // !colorsTheme.footer.logo ? ( + // mode === "default" ? ( + // dxcLogo + // ) : ( + // dxcSmallLogo + // ) + // ) : typeof colorsTheme.footer.logo === "string" ? ( + // + // ) : ( + // colorsTheme.footer.logo + // ), + // [colorsTheme, translatedLabels] + // ); + + const footerLogo = mode === "default" ? dxcLogo : dxcSmallLogo; + + return ( + + + {footerLogo} + {mode === "default" && ( + + {socialLinks?.map((link, index) => ( + + + + {typeof link.logo === "string" ? : link.logo} + + + + ))} + + )} + + {children} + {mode === "default" && ( + + + {bottomLinks?.map((link, index) => ( + + + {link.text} + + + ))} + + {copyright ?? translatedLabels.footer.copyrightText(new Date().getFullYear())} + + )} + + ); +}; + export default DxcFooter; From 5379d3d0466c6bd663914c77d9c13cb898d38ca4 Mon Sep 17 00:00:00 2001 From: Enrique Moreno Date: Thu, 29 May 2025 15:06:39 +0200 Subject: [PATCH 2/9] Fixed footer API to allow logos --- packages/lib/src/footer/Footer.tsx | 72 +++++++++++------------------- packages/lib/src/footer/types.ts | 43 +++++++++++++----- 2 files changed, 57 insertions(+), 58 deletions(-) diff --git a/packages/lib/src/footer/Footer.tsx b/packages/lib/src/footer/Footer.tsx index 32e1b7f275..3180eb50aa 100644 --- a/packages/lib/src/footer/Footer.tsx +++ b/packages/lib/src/footer/Footer.tsx @@ -17,20 +17,12 @@ const FooterContainer = styled.footer<{ display: flex; flex-direction: ${(props) => (props?.mode === "default" ? "column" : "row")}; justify-content: space-between; - margin-top: ${(props) => (props.margin ? spaces[props.margin] : "0px")}; - /* TODO: Ask about min height */ + margin-top: ${(props) => (props.margin ? spaces[props.margin] : "var(--spacing-padding-none)")}; min-height: ${(props) => (props?.mode === "default" ? "124px" : "40px")}; width: 100%; - gap: ${(props) => (props?.mode === "default" ? "var(--spacing-gap-none)" : "32px")}; - @media (min-width: ${responsiveSizes.small}rem) { - padding: ${(props) => - props?.mode === "default" - ? "var(--spacing-padding-m) var(--spacing-padding-xl)" - : "var(--spacing-padding-s) var(--spacing-padding-xl)"}; - } - /* TODO: Ask about responsive styles */ + gap: var(--spacing-gap-m); + padding: var(--spacing-padding-l) var(--spacing-padding-ml); @media (max-width: ${responsiveSizes.small}rem) { - padding: 20px; flex-direction: column; } `; @@ -53,7 +45,7 @@ const BottomContainer = styled.div` `; const ChildComponents = styled.div` - min-height: 16px; + min-height: var(--height-xxs); overflow: hidden; `; @@ -81,19 +73,17 @@ const LogoContainer = styled.span<{ mode?: FooterPropsType["mode"] }>` width: auto; `; -// TODO: Remove and use logo from the props instead -// const LogoImg = styled.img<{ mode?: FooterPropsType["mode"] }>` -// max-height: ${(props) => (props?.mode === "default" ? "var(--height-m)" : "var(--height-xxs)")}; -// width: auto; -// `; +const LogoImg = styled.img<{ mode?: FooterPropsType["mode"] }>` + max-height: ${(props) => (props?.mode === "default" ? "var(--height-m)" : "var(--height-xxs)")}; + width: auto; +`; -// TODO: Need an example in Figma with focus state const SocialAnchor = styled.a<{ index: number }>` - border-radius: 4px; + border-radius: var(--border-radius-s); &:focus { - outline: 2px solid #0095ff; - outline-offset: 2px; + outline: var(--border-width-m) var(--border-style-default) var(--border-color-secondary-medium); + outline-offset: var(--border-width-m); } `; @@ -131,50 +121,40 @@ const BottomLinks = styled.div` } `; -// TODO: Add examples with focus to figma to see border-radius and outline width const BottomLink = styled.a` text-decoration: none; - border-radius: 2px; - + border-radius: var(--border-radius-xs); font-family: var(--typography-font-family); font-size: var(--typography-label-m); font-weight: var(--typography-label-regular); color: var(--color-fg-neutral-bright); &:focus { - outline: 2px solid #0095ff; + outline: var(--border-width-m) var(--border-style-default) var(--border-color-secondary-medium); } `; +const getLogoElement = (mode: FooterPropsType["mode"], logo?: FooterPropsType["logo"]) => { + if (logo) { + return ; + } else { + return mode === "default" ? dxcLogo : dxcSmallLogo; + } +}; + const DxcFooter = ({ - socialLinks, bottomLinks, - copyright, children, + copyright, + logo, margin, - tabIndex = 0, mode = "default", + socialLinks, + tabIndex = 0, }: FooterPropsType): JSX.Element => { const translatedLabels = useContext(HalstackLanguageContext); - // TODO - // const footerLogo = useMemo( - // () => - // !colorsTheme.footer.logo ? ( - // mode === "default" ? ( - // dxcLogo - // ) : ( - // dxcSmallLogo - // ) - // ) : typeof colorsTheme.footer.logo === "string" ? ( - // - // ) : ( - // colorsTheme.footer.logo - // ), - // [colorsTheme, translatedLabels] - // ); - - const footerLogo = mode === "default" ? dxcLogo : dxcSmallLogo; + const footerLogo = getLogoElement(mode, logo); return ( diff --git a/packages/lib/src/footer/types.ts b/packages/lib/src/footer/types.ts index e87c1c1fd3..06967fb6eb 100644 --- a/packages/lib/src/footer/types.ts +++ b/packages/lib/src/footer/types.ts @@ -27,41 +27,60 @@ type BottomLink = { text: string; }; -type FooterPropsType = { +type Logo = { /** - * An array of objects representing the links that will be rendered as - * icons at the top-right side of the footer. + * URL to navigate when the logo is clicked. */ - socialLinks?: SocialLink[]; + href?: string; + /** + * Source of the logo image. + */ + src: string; + /** + * Alternative text for the logo image. + */ + title?: string; +}; + +type FooterPropsType = { /** * An array of objects representing the links that will be rendered at * the bottom part of the footer. */ bottomLinks?: BottomLink[]; + /** + * The center section of the footer. Can be used to render custom + * content in this area. + */ + children?: ReactNode; /** * The text that will be displayed as copyright disclaimer. */ copyright?: string; /** - * The center section of the footer. Can be used to render custom - * content in this area. + * Logo to be displayed inside the header */ - children?: ReactNode; + logo?: Logo; /** * Size of the top margin to be applied to the footer. */ margin?: Space; - /** - * Value of the tabindex for all interactive elements, except those - * inside the custom area. - */ - tabIndex?: number; /** * Determines the visual style and layout * - "default": The default mode with full content and styling. * - "reduced": A reduced mode with minimal content and styling. */ mode?: "default" | "reduced"; + /** + * An array of objects representing the links that will be rendered as + * icons at the top-right side of the footer. + */ + socialLinks?: SocialLink[]; + /** + * Value of the tabindex for all interactive elements, except those + * inside the custom area. + */ + tabIndex?: number; }; export default FooterPropsType; From 4601caab3985be5e7685385f054fc6a6352b0ae5 Mon Sep 17 00:00:00 2001 From: Enrique Moreno Date: Thu, 29 May 2025 15:30:34 +0200 Subject: [PATCH 3/9] Added documentation --- apps/website/pages/components/footer/code.tsx | 17 + .../website/pages/components/footer/index.tsx | 24 +- .../components/footer/specifications.tsx | 21 - .../website/pages/components/footer/usage.tsx | 21 - .../components/footer/FooterPageLayout.tsx | 14 +- .../footer/overview/FooterOverviewPage.tsx | 131 +++++ .../footer/overview/images/footer_anatomy.png | Bin 0 -> 37163 bytes .../overview/images/footer_variants.png | Bin 0 -> 78867 bytes .../footer/specs/FooterSpecsPage.tsx | 458 ------------------ .../footer/specs/images/footer_anatomy.png | Bin 23369 -> 0 bytes .../footer/specs/images/footer_specs.png | Bin 26219 -> 0 bytes .../footer/usage/FooterUsagePage.tsx | 87 ---- .../components/header/code/HeaderCodePage.tsx | 74 +-- 13 files changed, 209 insertions(+), 638 deletions(-) create mode 100644 apps/website/pages/components/footer/code.tsx delete mode 100644 apps/website/pages/components/footer/specifications.tsx delete mode 100644 apps/website/pages/components/footer/usage.tsx create mode 100644 apps/website/screens/components/footer/overview/FooterOverviewPage.tsx create mode 100644 apps/website/screens/components/footer/overview/images/footer_anatomy.png create mode 100644 apps/website/screens/components/footer/overview/images/footer_variants.png delete mode 100644 apps/website/screens/components/footer/specs/FooterSpecsPage.tsx delete mode 100644 apps/website/screens/components/footer/specs/images/footer_anatomy.png delete mode 100644 apps/website/screens/components/footer/specs/images/footer_specs.png delete mode 100644 apps/website/screens/components/footer/usage/FooterUsagePage.tsx diff --git a/apps/website/pages/components/footer/code.tsx b/apps/website/pages/components/footer/code.tsx new file mode 100644 index 0000000000..9dadb77cfe --- /dev/null +++ b/apps/website/pages/components/footer/code.tsx @@ -0,0 +1,17 @@ +import Head from "next/head"; +import type { ReactElement } from "react"; +import FooterPageLayout from "screens/components/footer/FooterPageLayout"; +import FooterCodePage from "screens/components/footer/code/FooterCodePage"; + +const Code = () => ( + <> + + Footer code — Halstack Design System + + + +); + +Code.getLayout = (page: ReactElement) => {page}; + +export default Code; diff --git a/apps/website/pages/components/footer/index.tsx b/apps/website/pages/components/footer/index.tsx index 68d3cc6c88..0a2734e535 100644 --- a/apps/website/pages/components/footer/index.tsx +++ b/apps/website/pages/components/footer/index.tsx @@ -1,21 +1,17 @@ import Head from "next/head"; import type { ReactElement } from "react"; import FooterPageLayout from "screens/components/footer/FooterPageLayout"; -import FooterCodePage from "screens/components/footer/code/FooterCodePage"; +import FooterOverviewPage from "screens/components/footer/overview/FooterOverviewPage"; -const Index = () => { - return ( - <> - - Footer — Halstack Design System - - - - ); -}; +const Index = () => ( + <> + + Footer — Halstack Design System + + + +); -Index.getLayout = function getLayout(page: ReactElement) { - return {page}; -}; +Index.getLayout = (page: ReactElement) => {page}; export default Index; diff --git a/apps/website/pages/components/footer/specifications.tsx b/apps/website/pages/components/footer/specifications.tsx deleted file mode 100644 index 8cd96b72b2..0000000000 --- a/apps/website/pages/components/footer/specifications.tsx +++ /dev/null @@ -1,21 +0,0 @@ -import Head from "next/head"; -import type { ReactElement } from "react"; -import FooterPageLayout from "screens/components/footer/FooterPageLayout"; -import FooterSpecsPage from "screens/components/footer/specs/FooterSpecsPage"; - -const Specifications = () => { - return ( - <> - - Footer Specs — Halstack Design System - - - - ); -}; - -Specifications.getLayout = function getLayout(page: ReactElement) { - return {page}; -}; - -export default Specifications; diff --git a/apps/website/pages/components/footer/usage.tsx b/apps/website/pages/components/footer/usage.tsx deleted file mode 100644 index d0f5bddf50..0000000000 --- a/apps/website/pages/components/footer/usage.tsx +++ /dev/null @@ -1,21 +0,0 @@ -import Head from "next/head"; -import type { ReactElement } from "react"; -import FooterPageLayout from "screens/components/footer/FooterPageLayout"; -import FooterUsagePage from "screens/components/footer/usage/FooterUsagePage"; - -const Usage = () => { - return ( - <> - - Footer Usage — Halstack Design System - - - - ); -}; - -Usage.getLayout = function getLayout(page: ReactElement) { - return {page}; -}; - -export default Usage; diff --git a/apps/website/screens/components/footer/FooterPageLayout.tsx b/apps/website/screens/components/footer/FooterPageLayout.tsx index dc32eaa4ad..a24ceaf234 100644 --- a/apps/website/screens/components/footer/FooterPageLayout.tsx +++ b/apps/website/screens/components/footer/FooterPageLayout.tsx @@ -7,9 +7,8 @@ import { ReactNode } from "react"; const FooterPageHeading = ({ children }: { children: ReactNode }) => { const tabs = [ - { label: "Code", path: "/components/footer" }, - { label: "Usage", path: "/components/footer/usage" }, - { label: "Specifications", path: "/components/footer/specifications" }, + { label: "Overview", path: "/components/footer" }, + { label: "Code", path: "/components/footer/code" }, ]; return ( @@ -18,11 +17,8 @@ const FooterPageHeading = ({ children }: { children: ReactNode }) => { - Footers are a secondary element in a web page because they usually appear at the bottom and it is the last - thing that the user interacts with. But the presence of the footer must be designed in every application and - be part of it (consumer or back-office) as it is a key layout element to the overall experience. It is a - choice of the designer to either leave the footer visible by default or push it down, depending on the use - case. + The footer is a UI component placed at the bottom of the page, providing informational context, secondary + navigation, and legal or support links. The footer is part of the application layout, so it can only be used inside of it. Please check the{" "} @@ -31,7 +27,7 @@ const FooterPageHeading = ({ children }: { children: ReactNode }) => { {" "} documentation. - + {children} diff --git a/apps/website/screens/components/footer/overview/FooterOverviewPage.tsx b/apps/website/screens/components/footer/overview/FooterOverviewPage.tsx new file mode 100644 index 0000000000..e2055c80fc --- /dev/null +++ b/apps/website/screens/components/footer/overview/FooterOverviewPage.tsx @@ -0,0 +1,131 @@ +import { DxcBulletedList, DxcFlex, DxcParagraph } from "@dxc-technology/halstack-react"; +import DocFooter from "@/common/DocFooter"; +import QuickNavContainer from "@/common/QuickNavContainer"; +import QuickNavContainerLayout from "@/common/QuickNavContainerLayout"; +import anatomy from "./images/footer_anatomy.png"; +import variants from "./images/footer_variants.png"; +import Image from "@/common/Image"; +import Figure from "@/common/Figure"; + +const sections = [ + { + title: "Introduction", + content: ( + + The footer is used as the final section of a page to display utility elements such as legal disclaimers, + secondary links, copyright information, or the brand logo. Its purpose is to reinforce brand identity and + provide consistent access across digital experiences without disrupting the main user flow. + + ), + }, + { + title: "Anatomy", + content: ( + <> + Footer's anatomy + + + Container: The outer wrapper that defines the overall layout, padding, and alignment of all + footer content. Ensures consistency across screen sizes. + + + Logo: Represents the brand identity visually. Positioned on the left side, it helps + reinforce company recognition across all pages. + + + Social icons: A set of clickable icons linking to the company’s social media platforms + (e.g., LinkedIn, Facebook). Placed on the right side for easy visibility and access. + + + Copyright: Text displaying legal ownership of the content. Ensures users know the site is + officially owned. + + + Company links: A horizontal list of navigational hyperlinks such as Privacy Policy, Terms & + Conditions, etc. Offers users access to important legal or informational resources. + + + + ), + }, + { + title: "Variants", + content: ( + <> + + To maintain consistency in layout flexibility and brand presentation, the footer offers three primary + variants: Default, With Navigation, and Small. + + + + Default: provides a balanced layout with branding and essential legal links. It offers a + clean, uncluttered appearance suitable for most standard applications. + + + With Navigation: includes additional navigational sections, enabling users to quickly + access key areas of the site. This layout is ideal for content-heavy pages or enterprise-level applications + requiring enhanced footer functionality. + + + Small: offers a compact version of the footer, typically limited to branding and minimal + legal text. It's best suited for lightweight experiences, login pages, or environments with constrained + vertical space. + + + + Choosing between these variants helps tailor the footer to a wide range of contexts, whether prioritizing + simplicity, providing extended navigation, or optimizing for space efficiency. + +
+ Application layout design specifications +
+ + ), + }, + { + title: "Best practices", + content: ( + <> + + + Dock the footer to the bottom of the page: the footer should remain fixed at the bottom + edge of the viewport and not scroll with the page content to maintain visibility and separation from dynamic + areas. + + + Ensure full-width alignment: the footer container should always span the full width of the + screen to create a clean, structured boundary and support responsive behavior across breakpoints. + + + Display copyright information on the right: consistently place legal disclaimers or + copyright text aligned to the right edge of the footer to support predictable user expectations. + + + Use a simplified or alternate logo: consider using a smaller or alternative version of the + brand logo (isotype, imagotype, or monochrome variant) rather than duplicating the main header image to + reduce visual redundancy. + + + Limit the number of links: include only the most essential company links (e.g., Terms, + Privacy, Accessibility) to avoid overwhelming users with excessive options. + + + Select the most appropriate variant for context: choose the footer variant that best fits + the content density and user goals of the page. + + + + ), + }, +]; + +const FooterOverviewPage = () => ( + + + + + + +); + +export default FooterOverviewPage; diff --git a/apps/website/screens/components/footer/overview/images/footer_anatomy.png b/apps/website/screens/components/footer/overview/images/footer_anatomy.png new file mode 100644 index 0000000000000000000000000000000000000000..ff389c8552e6ff440808948b5fe7d849c108368f GIT binary patch literal 37163 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 D-3;2z literal 0 HcmV?d00001 diff --git a/apps/website/screens/components/footer/specs/FooterSpecsPage.tsx b/apps/website/screens/components/footer/specs/FooterSpecsPage.tsx deleted file mode 100644 index d3c8889a38..0000000000 --- a/apps/website/screens/components/footer/specs/FooterSpecsPage.tsx +++ /dev/null @@ -1,458 +0,0 @@ -import { DxcBulletedList, DxcFlex, DxcTable, DxcParagraph } from "@dxc-technology/halstack-react"; -import Code from "@/common/Code"; -import DocFooter from "@/common/DocFooter"; -import Figure from "@/common/Figure"; -import QuickNavContainer from "@/common/QuickNavContainer"; -import QuickNavContainerLayout from "@/common/QuickNavContainerLayout"; -import Image from "@/common/Image"; -import footerAnatomy from "./images/footer_anatomy.png"; -import footerSpecs from "./images/footer_specs.png"; - -const sections = [ - { - title: "Specifications", - content: ( -
- Footer design specifications -
- ), - }, - { - title: "Anatomy", - content: ( - <> - Footer anatomy - - Container - Logo - Social icons - Copyright - Company links - - - ), - }, - { - title: "Design tokens", - subSections: [ - { - title: "Color", - content: ( - - - - Component token - Element - Core token - Value - - - - - - backgroundColor - - Footer container - - color-black - - #000000 - - - - bottomLinksDividerColor - - Divider - - color-blue-600 - - #0095ff - - - - bottomLinksFontColor - - Bottom links - - color-white - - #ffffff - - - - copyrightFontColor - - Copyright - - color-white - - #ffffff - - - - socialLinksColor - - Social icons - - color-white - - #ffffff - - - - ), - }, - { - title: "Typography", - content: ( - - - - Component token - Element - Core token - Value - - - - - - bottomLinksFontFamily - - Bottom links - - font-family-sans - - 'Open Sans', sans-serif - - - - bottomLinksFontSize - - Bottom links - - font-scale-01 - - 0.75rem / 12px - - - - bottomLinksFontWeight - - Bottom links - - font-weight-regular - - 400 - - - - bottomLinksFontStyle - - Bottom links - - font-style-normal - - normal - - - - bottomLinksTextDecoration - - Bottom links - - font-style-no-line - - none - - - - copyrightFontFamily - - Copyright - - font-family-sans - - 'Open Sans', sans-serif - - - - copyrightFontSize - - Copyright - - font-scale-01 - - 0.75rem / 12px - - - - copyrightFontWeight - - Copyright - - font-weight-regular - - 400 - - - - copyrightFontStyle - - Copyright - - font-style-normal - - normal - - - - ), - }, - { - title: "Border", - content: ( - - - - Component token - Element - Core token - Value - - - - - - border-width - - Divider - - border-width-1 - - 1px - - - - border-style - - Divider - - border-style-solid - - solid - - - - ), - }, - { - title: "Height", - content: ( - - - - Property - Value - - - - - - min-height - - 124px - - - - ), - }, - { - title: "Margin", - content: ( - - - - Margin - Value - - - - - - xxsmall - - 6px - - - - xsmall - - 16px - - - - small - - 24px - - - - medium - - 36px - - - - large - - 48px - - - - xlarge - - 64px - - - - xxlarge - - 100px - - - - ), - }, - { - title: "Iconography", - content: ( - - - - Property - Element - Value - - - - - - height/ width - - Social media icons - 24/24px - - - - max-height - - DXC logo - 32px - - - - ), - }, - { - title: "Bottom Links", - content: ( - - - - Property - Element - Core token - Value - - - - - - min-height - - Links container - - - 20px - - - - padding-top - - Links container - - spacing-8 - - 0.5rem / 8px - - - - ), - }, - { - title: "Custom content", - content: ( - <> - - - - Property - Element - Value - - - - - - min-height - - Custom container - 16px - - - - - The content of the footer should be adapt to the space available depending on the screen device. - - - ), - }, - ], - }, - { - title: "Responsive version for mobile and tablet", - content: ( - <> - - The same content in the footer will be displayed for the responsive versions and the only modification will be - the width of it. With less space available to display the content, some of the items will be relocated to fit - well in the screen. - - - Regarding his behavior, the footer must be pushed down always so it is not visible by default after page load, - even when the content is smaller than the device screen size. This includes the splash screen, which must push - the footer down. Of course, if the content is larger than the device screen size, the footer will be pushed - down anyway. - - - On the mobile version, first we have the logo. Below it the links to privacy and terms to let a space for - custom component and at the bottom the copyright terms, centered. At this stage, the custom content and the - disposition is responsability of the user, the same way as it is in the desktop and tablet version. - - - ), - }, -]; - -const FooterSpecsPage = () => { - return ( - - - - - - - ); -}; - -export default FooterSpecsPage; diff --git a/apps/website/screens/components/footer/specs/images/footer_anatomy.png b/apps/website/screens/components/footer/specs/images/footer_anatomy.png deleted file mode 100644 index 4f51b6b4eb16d598d48044bd723cd344228f9e7b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23369 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 unMq0h_}rg9`H# diff --git a/apps/website/screens/components/footer/specs/images/footer_specs.png b/apps/website/screens/components/footer/specs/images/footer_specs.png deleted file mode 100644 index 58896e27ca33f0226094fc1b0b9d5d931409825b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26219 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 - {/* */} - - - The footer frame should be docked at the bottom of the page and should not scroll with any of the data - within working section of the screen. - - The footer frame should span the entire screen width. - - The footer frame should display the copyright information at the right margin. - - - We recommend uploading either an alternate version or a smaller brand image than the used in the header. If - the company has an alternate version of the logo, isotype, imagotype or isologo available, we encourage to - use it. In the opposite case a smaller version of the main brand image can be used. - - - - ), - }, - { - title: "Content", - content: ( - <> - {/* */} - - The footer component has a custom area where many kinds of content can be placed, some of them are - contemplated in the following list: - - - - Plain text or content - - Informational purpose text - - - - Menu links - - Global navigation - Sitemap - Useful links or resources - - - - Forms - - Select language - Login / Sing up - Provide email adress / Subscribe - - - - Actions - - Ask for help / Support - Business related actions / Call to action - Search - - - - - ), - }, -]; - -const FooterUsagePage = () => { - return ( - - - - - - - ); -}; - -export default FooterUsagePage; diff --git a/apps/website/screens/components/header/code/HeaderCodePage.tsx b/apps/website/screens/components/header/code/HeaderCodePage.tsx index 246e592048..205c19c991 100644 --- a/apps/website/screens/components/header/code/HeaderCodePage.tsx +++ b/apps/website/screens/components/header/code/HeaderCodePage.tsx @@ -3,9 +3,15 @@ import DocFooter from "@/common/DocFooter"; import QuickNavContainer from "@/common/QuickNavContainer"; import QuickNavContainerLayout from "@/common/QuickNavContainerLayout"; import Link from "next/link"; -import TableCode from "@/common/TableCode"; +import TableCode, { ExtendedTableCode } from "@/common/TableCode"; import Code from "@/common/Code"; +const logoTypeString = `{ + href?: string; + src: string; + title?: string; +}`; + const sections = [ { title: "Props", @@ -20,16 +26,6 @@ const sections = [ - - underlined - - boolean - - Whether a contrast line should appear at the bottom of the header. - - false - - content @@ -43,14 +39,25 @@ const sections = [ - - responsiveContent + logo - {"(closeHandler: () => void) => React.ReactNode"} + + {"Logo"} +

+ being Logo an object with the following properties: +

+ {logoTypeString} + + Logo to be displayed inside the header. + - + + + margin - Content shown in responsive version. It receives the close menu handler that can be used to add that - functionality when a element is clicked. + 'xxsmall' | 'xsmall' | 'small' | 'medium' | 'large' | 'xlarge' | 'xxlarge' + Size of the bottom margin to be applied to the header. - @@ -62,11 +69,14 @@ const sections = [ - - margin + responsiveContent - 'xxsmall' | 'xsmall' | 'small' | 'medium' | 'large' | 'xlarge' | 'xxlarge' + {"(closeHandler: () => void) => React.ReactNode"} + + + Content shown in responsive version. It receives the close menu handler that can be used to add that + functionality when a element is clicked. - Size of the bottom margin to be applied to the header. - @@ -79,6 +89,16 @@ const sections = [ 0 + + underlined + + boolean + + Whether a contrast line should appear at the bottom of the header. + + false + + ), @@ -121,15 +141,13 @@ const sections = [ }, ]; -const HeaderCodePage = () => { - return ( - - - - - - - ); -}; +const HeaderCodePage = () => ( + + + + + + +); export default HeaderCodePage; From 02777e2648364bf6549a2de32da8d0c7b125ab57 Mon Sep 17 00:00:00 2001 From: Enrique Moreno Date: Thu, 12 Jun 2025 13:57:42 +0200 Subject: [PATCH 4/9] Replaced paddings with margins --- packages/lib/src/footer/Footer.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/lib/src/footer/Footer.tsx b/packages/lib/src/footer/Footer.tsx index 3180eb50aa..793a0f702d 100644 --- a/packages/lib/src/footer/Footer.tsx +++ b/packages/lib/src/footer/Footer.tsx @@ -50,7 +50,7 @@ const ChildComponents = styled.div` `; const Copyright = styled.div` - padding-top: var(--spacing-padding-xs); + margin-top: var(--spacing-padding-xs); font-family: var(--typography-font-family); font-size: var(--typography-label-s); font-weight: var(--typography-label-regular); @@ -104,7 +104,7 @@ const BottomLinks = styled.div` display: inline-flex; flex-wrap: wrap; align-self: center; - padding-top: var(--spacing-padding-xs); + margin-top: var(--spacing-padding-xs); color: var(--color-fg-neutral-bright); @media (min-width: ${responsiveSizes.small}rem) { From ec9c8858a7e75293f8d4c4193c30dcbcc9167c77 Mon Sep 17 00:00:00 2001 From: Enrique Moreno Date: Thu, 12 Jun 2025 14:01:00 +0200 Subject: [PATCH 5/9] Fixed typos --- .../components/footer/overview/FooterOverviewPage.tsx | 6 +++--- packages/lib/src/footer/types.ts | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/apps/website/screens/components/footer/overview/FooterOverviewPage.tsx b/apps/website/screens/components/footer/overview/FooterOverviewPage.tsx index e2055c80fc..1087c7d0a4 100644 --- a/apps/website/screens/components/footer/overview/FooterOverviewPage.tsx +++ b/apps/website/screens/components/footer/overview/FooterOverviewPage.tsx @@ -72,13 +72,13 @@ const sections = [ vertical space. +
+ Application layout design specifications +
Choosing between these variants helps tailor the footer to a wide range of contexts, whether prioritizing simplicity, providing extended navigation, or optimizing for space efficiency. -
- Application layout design specifications -
), }, diff --git a/packages/lib/src/footer/types.ts b/packages/lib/src/footer/types.ts index 06967fb6eb..881324c5d8 100644 --- a/packages/lib/src/footer/types.ts +++ b/packages/lib/src/footer/types.ts @@ -58,7 +58,7 @@ type FooterPropsType = { */ copyright?: string; /** - * Logo to be displayed inside the header + * Logo to be displayed inside the footer */ logo?: Logo; /** From 0ca5576e4b5214296c2102575d237158c2a9dd12 Mon Sep 17 00:00:00 2001 From: Enrique Moreno Date: Thu, 12 Jun 2025 14:15:15 +0200 Subject: [PATCH 6/9] Added color to children container --- packages/lib/src/footer/Footer.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/lib/src/footer/Footer.tsx b/packages/lib/src/footer/Footer.tsx index 793a0f702d..b930ce6f2e 100644 --- a/packages/lib/src/footer/Footer.tsx +++ b/packages/lib/src/footer/Footer.tsx @@ -47,6 +47,7 @@ const BottomContainer = styled.div` const ChildComponents = styled.div` min-height: var(--height-xxs); overflow: hidden; + color: var(--color-fg-neutral-bright); `; const Copyright = styled.div` From 81dec4ba4b3888753ea88c8cbb81a061aea50306 Mon Sep 17 00:00:00 2001 From: Enrique Moreno Date: Thu, 12 Jun 2025 14:18:50 +0200 Subject: [PATCH 7/9] Added DxcLink to Footer stories --- packages/lib/src/footer/Footer.stories.tsx | 25 +++++++++++----------- packages/lib/src/footer/Footer.tsx | 1 - 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/packages/lib/src/footer/Footer.stories.tsx b/packages/lib/src/footer/Footer.stories.tsx index f7d86038d6..49f995c952 100644 --- a/packages/lib/src/footer/Footer.stories.tsx +++ b/packages/lib/src/footer/Footer.stories.tsx @@ -8,6 +8,7 @@ import DxcFlex from "../flex/Flex"; import DxcTypography from "../typography/Typography"; import DxcFooter from "./Footer"; import { Meta, StoryObj } from "@storybook/react"; +import DxcLink from "../link/Link"; const social = [ { @@ -145,25 +146,25 @@ const Footer = () => ( <DxcFooter copyright="Copyright" socialLinks={social} bottomLinks={bottom}> - <div> - <a href="https://www.linkedin.com/company/dxctechnology">Linkedin</a> - </div> + <DxcLink href="https://www.linkedin.com/company/dxctechnology" inheritColor> + Linkedin + </DxcLink> </DxcFooter> </ExampleContainer> <ExampleContainer> <Title title="With children, copyright, bottom links and social links from material" theme="light" level={4} /> <DxcFooter copyright="Copyright" socialLinks={socialMaterialIcons} bottomLinks={bottom}> - <div> - <a href="https://www.linkedin.com/company/dxctechnology">Linkedin</a> - </div> + <DxcLink href="https://www.linkedin.com/company/dxctechnology" inheritColor> + Linkedin + </DxcLink> </DxcFooter> </ExampleContainer> <ExampleContainer pseudoState="pseudo-focus"> <Title title="Focused bottom and social links" theme="light" level={4} /> <DxcFooter copyright="Copyright" socialLinks={social} bottomLinks={bottom}> - <div> - <a href="https://www.linkedin.com/company/dxctechnology">Linkedin</a> - </div> + <DxcLink href="https://www.linkedin.com/company/dxctechnology" inheritColor> + Linkedin + </DxcLink> </DxcFooter> </ExampleContainer> <ExampleContainer> @@ -199,9 +200,9 @@ const Footer = () => ( <ExampleContainer> <HalstackProvider theme={opinionatedTheme}> <DxcFooter copyright="Copyright" socialLinks={social} bottomLinks={bottom}> - <div> - <a href="https://www.linkedin.com/company/dxctechnology">Linkedin</a> - </div> + <DxcLink href="https://www.linkedin.com/company/dxctechnology" inheritColor> + Linkedin + </DxcLink> </DxcFooter> </HalstackProvider> </ExampleContainer> diff --git a/packages/lib/src/footer/Footer.tsx b/packages/lib/src/footer/Footer.tsx index b930ce6f2e..e03770bd1c 100644 --- a/packages/lib/src/footer/Footer.tsx +++ b/packages/lib/src/footer/Footer.tsx @@ -46,7 +46,6 @@ const BottomContainer = styled.div` const ChildComponents = styled.div` min-height: var(--height-xxs); - overflow: hidden; color: var(--color-fg-neutral-bright); `; From 7121d5cb5cc79599761094b578b5b2b54331188c Mon Sep 17 00:00:00 2001 From: Enrique Moreno <enrique.moreno@dxc.com> Date: Thu, 12 Jun 2025 15:39:39 +0200 Subject: [PATCH 8/9] Fixed container padding for responsive content --- packages/lib/src/footer/Footer.tsx | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/packages/lib/src/footer/Footer.tsx b/packages/lib/src/footer/Footer.tsx index e03770bd1c..5c71dfbd45 100644 --- a/packages/lib/src/footer/Footer.tsx +++ b/packages/lib/src/footer/Footer.tsx @@ -21,7 +21,13 @@ const FooterContainer = styled.footer<{ min-height: ${(props) => (props?.mode === "default" ? "124px" : "40px")}; width: 100%; gap: var(--spacing-gap-m); - padding: var(--spacing-padding-l) var(--spacing-padding-ml); + padding: ${(props) => + props?.mode === "default" + ? "var(--spacing-padding-m) var(--spacing-padding-xl)" + : "var(--spacing-padding-s) var(--spacing-padding-xl)"}; + @media (max-width: ${responsiveSizes.medium}rem) { + padding: var(--spacing-padding-l) var(--spacing-padding-ml) + } @media (max-width: ${responsiveSizes.small}rem) { flex-direction: column; } From e244403ab4d26ec8bb42d07700f096e9bd87726d Mon Sep 17 00:00:00 2001 From: Enrique Moreno <enrique.moreno@dxc.com> Date: Thu, 12 Jun 2025 15:43:18 +0200 Subject: [PATCH 9/9] Added logo to props in doc --- .../components/footer/code/FooterCodePage.tsx | 113 +++++++++++------- .../components/header/code/HeaderCodePage.tsx | 8 +- 2 files changed, 76 insertions(+), 45 deletions(-) diff --git a/apps/website/screens/components/footer/code/FooterCodePage.tsx b/apps/website/screens/components/footer/code/FooterCodePage.tsx index 155e0b8937..329423f79f 100644 --- a/apps/website/screens/components/footer/code/FooterCodePage.tsx +++ b/apps/website/screens/components/footer/code/FooterCodePage.tsx @@ -3,7 +3,13 @@ import QuickNavContainer from "@/common/QuickNavContainer"; import QuickNavContainerLayout from "@/common/QuickNavContainerLayout"; import DocFooter from "@/common/DocFooter"; import StatusBadge from "@/common/StatusBadge"; -import Code, { TableCode } from "@/common/Code"; +import Code, { ExtendedTableCode, TableCode } from "@/common/Code"; + +const logoTypeString = `{ + href?: string; + src: string; + title?: string; +}`; const sections = [ { @@ -19,6 +25,68 @@ const sections = [ </tr> </thead> <tbody> + <tr> + <td>bottomLinks</td> + <td> + <TableCode>{"{ href: string; text: string; }[]"}</TableCode> + </td> + <td> + An array of objects representing the links that will be rendered at the bottom part of the footer. Each + object has the following properties: + <ul> + <li> + <b>text</b>: Text for the link. + </li> + <li> + <b>href</b>: URL of the page the link goes to. + </li> + </ul> + </td> + <td>-</td> + </tr> + <tr> + <td>children</td> + <td> + <TableCode>React.ReactNode</TableCode> + </td> + <td>The center section of the footer. Can be used to render custom content in this area.</td> + <td>-</td> + </tr> + <tr> + <td>copyright</td> + <td> + <TableCode>string</TableCode> + </td> + <td>The text that will be displayed as copyright disclaimer.</td> + <td>-</td> + </tr> + <tr> + <td> + <DxcFlex direction="column" gap="var(--spacing-gap-xs)" alignItems="baseline"> + <StatusBadge status="new" /> + logo + </DxcFlex> + </td> + <td> + <td> + <TableCode>{"Logo"}</TableCode> + <p> + being <Code>Logo</Code> an object with the following properties: + </p> + <ExtendedTableCode>{logoTypeString}</ExtendedTableCode> + </td> + </td> + <td>Logo to be displayed inside the header.</td> + <td>-</td> + </tr> + <tr> + <td>margin</td> + <td> + <TableCode>'xxsmall' | 'xsmall' | 'small' | 'medium' | 'large' | 'xlarge' | 'xxlarge'</TableCode> + </td> + <td>Size of the top margin to be applied to the footer.</td> + <td>-</td> + </tr> <tr> <td> <DxcFlex direction="column" gap="var(--spacing-gap-xs)" alignItems="baseline"> @@ -75,49 +143,6 @@ const sections = [ </td> <td>-</td> </tr> - <tr> - <td>bottomLinks</td> - <td> - <TableCode>{"{ href: string; text: string; }[]"}</TableCode> - </td> - <td> - An array of objects representing the links that will be rendered at the bottom part of the footer. Each - object has the following properties: - <ul> - <li> - <b>text</b>: Text for the link. - </li> - <li> - <b>href</b>: URL of the page the link goes to. - </li> - </ul> - </td> - <td>-</td> - </tr> - <tr> - <td>copyright</td> - <td> - <TableCode>string</TableCode> - </td> - <td>The text that will be displayed as copyright disclaimer.</td> - <td>-</td> - </tr> - <tr> - <td>children</td> - <td> - <TableCode>React.ReactNode</TableCode> - </td> - <td>The center section of the footer. Can be used to render custom content in this area.</td> - <td>-</td> - </tr> - <tr> - <td>margin</td> - <td> - <TableCode>'xxsmall' | 'xsmall' | 'small' | 'medium' | 'large' | 'xlarge' | 'xxlarge'</TableCode> - </td> - <td>Size of the top margin to be applied to the footer.</td> - <td>-</td> - </tr> <tr> <td>tabIndex</td> <td> diff --git a/apps/website/screens/components/header/code/HeaderCodePage.tsx b/apps/website/screens/components/header/code/HeaderCodePage.tsx index d4debc4f24..a7d21a5a99 100644 --- a/apps/website/screens/components/header/code/HeaderCodePage.tsx +++ b/apps/website/screens/components/header/code/HeaderCodePage.tsx @@ -4,6 +4,7 @@ import QuickNavContainer from "@/common/QuickNavContainer"; import QuickNavContainerLayout from "@/common/QuickNavContainerLayout"; import Link from "next/link"; import Code, { ExtendedTableCode, TableCode } from "@/common/Code"; +import StatusBadge from "@/common/StatusBadge"; const logoTypeString = `{ href?: string; @@ -38,7 +39,12 @@ const sections = [ <td>-</td> </tr> <tr> - <td>logo</td> + <td> + <DxcFlex direction="column" gap="var(--spacing-gap-xs)" alignItems="baseline"> + <StatusBadge status="new" /> + logo + </DxcFlex> + </td> <td> <td> <TableCode>{"Logo"}</TableCode>