From 6a26dd3a64f431378bb0a018169d6441f7b5028b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Iv=C3=A1n=20G=C3=B3mez=20Pinta?= <44321109+GomezIvann@users.noreply.github.com> Date: Thu, 6 Mar 2025 12:45:17 +0100 Subject: [PATCH 01/12] Tabs redesign --- packages/lib/src/tabs/Tab.tsx | 330 +++++++----------- packages/lib/src/tabs/Tabs.stories.tsx | 28 -- packages/lib/src/tabs/Tabs.tsx | 302 ++++++---------- packages/lib/src/tabs/types.ts | 2 - packages/lib/src/tabs/utils.ts | 36 ++ .../utils/{useTimeout.tsx => useTimeout.ts} | 0 .../src/utils/{useWidth.tsx => useWidth.ts} | 0 7 files changed, 265 insertions(+), 433 deletions(-) create mode 100644 packages/lib/src/tabs/utils.ts rename packages/lib/src/utils/{useTimeout.tsx => useTimeout.ts} (100%) rename packages/lib/src/utils/{useWidth.tsx => useWidth.ts} (100%) diff --git a/packages/lib/src/tabs/Tab.tsx b/packages/lib/src/tabs/Tab.tsx index 2ddbff058e..da180b1206 100644 --- a/packages/lib/src/tabs/Tab.tsx +++ b/packages/lib/src/tabs/Tab.tsx @@ -6,52 +6,113 @@ import { Tooltip } from "../tooltip/Tooltip"; import TabsContext from "./TabsContext"; import { TabProps, TabsContextProps } from "./types"; +export const sharedTabStyles = ` + background-color: var(--color-bg-neutral-lightest); + color: var(--color-fg-neutral-stronger); + cursor: pointer; + + &[aria-selected="true"]:enabled { + color: var(--color-fg-primary-strong); + } + &:hover:enabled { + background: var(--color-bg-primary-lighter); + } + &:active:enabled { + background: var(--color-bg-primary-lighter); + } + &:focus:enabled { + outline: var(--border-width-s) var(--border-style-default) var(--border-color-primary-stronger); + outline-offset: -1px; + } + &:disabled { + color: var(--color-fg-neutral-medium); + cursor: not-allowed; + } +`; + +const Tab = styled.button<{ + hasLabelAndIcon: boolean; + iconPosition: TabsContextProps["iconPosition"]; +}>` + position: relative; + display: flex; + align-items: center; + justify-content: center; + gap: var(--spacing-gap-m); + border: 0; + min-width: 90px; + max-width: 360px; + ${({ hasLabelAndIcon, iconPosition }) => + !hasLabelAndIcon || (hasLabelAndIcon && iconPosition !== "top") + ? "padding: var(--spacing-gap-m) var(--spacing-padding-m); height: var(--height-xxl); min-height: var(--height-xxl);" + : "padding: var(--spacing-padding-xs) var(--spacing-padding-m); height: 72px; min-height: 72px;"} + overflow: hidden; + ${sharedTabStyles} +`; + +const LabelIconContainer = styled.div<{ + hasLabelAndIcon: boolean; + iconPosition: TabsContextProps["iconPosition"]; +}>` + display: flex; + flex-direction: ${({ hasLabelAndIcon, iconPosition }) => + hasLabelAndIcon && iconPosition === "top" ? "column" : "row"}; + align-items: center; + gap: var(--spacing-gap-m); +`; + +const Label = styled.span` + font-family: var(--typography-font-family); + font-size: var(--typography-label-l); + font-weight: var(--typography-label-semibold); +`; + +const IconContainer = styled.div` + display: flex; + font-size: var(--height-s); + svg { + height: var(--height-s); + width: 24px; + } +`; + +const BadgeContainer = styled.div<{ + hasLabelAndIcon: boolean; + iconPosition: TabsContextProps["iconPosition"]; +}>` + display: flex; + flex-direction: column; + align-items: ${({ hasLabelAndIcon, iconPosition }) => + hasLabelAndIcon && iconPosition === "top" ? "flex-start" : "center"}; + justify-content: flex-start; + height: 100%; +`; + +const Underline = styled.span<{ active: boolean }>` + position: absolute; + bottom: 0; + left: 0; + width: 100%; + height: ${({ active }) => (active ? "var(--border-width-m)" : "var(--border-width-s)")}; + background-color: ${({ active }) => + active ? "var(--border-color-primary-stronger)" : "var(--border-color-neutral-medium)"}; +`; + const DxcTab = forwardRef( ( - { - icon, - label, - title, - disabled = false, - active, - notificationNumber = false, - onClick = () => {}, - onHover = () => {}, - }: TabProps, + { active, disabled, icon, label, notificationNumber, onClick, onHover, title }: TabProps, ref: Ref - ): JSX.Element => { - const tabRef = useRef(null); - + ) => { const { - iconPosition = "top", - tabIndex = 0, - focusedLabel, - isControlled, activeLabel, + focusedLabel, hasLabelAndIcon = false, + iconPosition = "top", + isControlled, setActiveLabel, - setActiveIndicatorWidth, - setActiveIndicatorLeft, + tabIndex = 0, } = useContext(TabsContext) ?? {}; - - useEffect(() => { - if (focusedLabel === label) { - tabRef?.current?.focus(); - } - }, [focusedLabel, label]); - - useEffect(() => { - if (activeLabel === label) { - setActiveIndicatorWidth?.(tabRef.current?.offsetWidth ?? 0); - setActiveIndicatorLeft?.(tabRef.current?.offsetLeft ?? 0); - } - }, [activeLabel, label, setActiveIndicatorWidth, setActiveIndicatorLeft]); - - useEffect(() => { - if (active) { - setActiveLabel?.(label); - } - }, [active, label, setActiveLabel]); + const tabRef = useRef(null); const handleOnKeyDown = (event: KeyboardEvent) => { switch (event.key) { @@ -65,16 +126,27 @@ const DxcTab = forwardRef( } }; + useEffect(() => { + if (focusedLabel === label) tabRef?.current?.focus(); + }, [focusedLabel, label]); + + useEffect(() => { + if (active) setActiveLabel?.(label); + }, [active, label, setActiveLabel]); + return ( - { + if (!isControlled) setActiveLabel?.(label); + onClick?.(); + }} + onKeyDown={handleOnKeyDown} + onMouseEnter={() => onHover?.()} ref={(anchorRef) => { tabRef.current = anchorRef; @@ -87,178 +159,28 @@ const DxcTab = forwardRef( } } }} - onClick={() => { - if (!isControlled) { - setActiveLabel?.(label); - } - onClick(); - }} - onMouseEnter={() => onHover()} - onKeyDown={handleOnKeyDown} + role="tab" + tabIndex={activeLabel === label && !disabled ? tabIndex : -1} + type="button" > - - {icon && ( - - {typeof icon === "string" ? : icon} - - )} - - - {notificationNumber && !disabled && ( + + {icon && {typeof icon === "string" ? : icon}} + + + {!disabled && notificationNumber && ( )} - + + ); } ); -const TabContainer = styled.button<{ - hasLabelAndIcon: boolean; - iconPosition: TabsContextProps["iconPosition"]; -}>` - text-transform: ${(props) => props.theme.fontTextTransform}; - overflow: hidden; - flex-shrink: 0; - border: 0; - cursor: pointer; - display: inline-flex; - align-items: center; - user-select: none; - vertical-align: middle; - justify-content: center; - min-width: 90px; - max-width: 360px; - padding: ${(props) => - ((!props.hasLabelAndIcon || (props.hasLabelAndIcon && props.iconPosition !== "top")) && "12px 16px") || "8px 16px"}; - height: ${(props) => - ((!props.hasLabelAndIcon || (props.hasLabelAndIcon && props.iconPosition !== "top")) && "47px") || "71px"}; - min-height: ${(props) => - ((!props.hasLabelAndIcon || (props.hasLabelAndIcon && props.iconPosition !== "top")) && "47px") || "71px"}; - background-color: ${(props) => props.theme.unselectedBackgroundColor}; - - &:hover { - background-color: ${(props) => `${props.theme.hoverBackgroundColor} !important`}; - } - &:active { - background-color: ${(props) => `${props.theme.pressedBackgroundColor} !important`}; - } - &:focus { - outline: ${(props) => props.theme.focusOutline} solid 1px; - outline-offset: -1px; - } - - svg, - span:before { - color: ${(props) => props.theme.unselectedIconColor}; - } - - &[aria-selected="true"] { - background-color: ${(props) => props.theme.selectedBackgroundColor}; - svg, - span:before { - color: ${(props) => props.theme.selectedIconColor}; - } - opacity: 1; - } - - &:disabled { - background-color: ${(props) => props.theme.unselectedBackgroundColor} !important; - cursor: not-allowed !important; - pointer-events: all; - font-style: ${(props) => props.theme.disabledFontStyle}; - outline: none !important; - - svg, - span:before { - color: ${(props) => props.theme.disabledIconColor}; - } - > div { - opacity: 0.5; - } - } -`; - -const BadgeContainer = styled.div<{ - hasLabelAndIcon: boolean; - iconPosition: TabsContextProps["iconPosition"]; -}>` - margin-left: 12px; - height: 100%; - display: flex; - align-items: ${(props) => (props.hasLabelAndIcon && props.iconPosition === "top" ? "flex-start" : "center")}; - justify-content: flex-start; - flex-direction: column; -`; - -const MainLabelContainer = styled.div<{ - notificationNumber: TabProps["notificationNumber"]; - hasLabelAndIcon: boolean; - iconPosition: TabsContextProps["iconPosition"]; - disabled: boolean; -}>` - display: flex; - flex-direction: ${(props) => (props.hasLabelAndIcon && props.iconPosition === "top" && "column") || "row"}; - align-items: center; - margin-left: ${(props) => - props.notificationNumber && !props.disabled - ? typeof props.notificationNumber === "number" - ? "36px" - : "18px" - : "unset"}; -`; - -const Label = styled.span<{ - disabled: TabProps["disabled"]; - label: TabProps["label"]; - activeLabel?: string; -}>` - display: inline; - color: ${(props) => - props.disabled - ? props.theme.disabledFontColor - : props.activeLabel === props.label - ? props.theme.selectedFontColor - : props.theme.unselectedFontColor}; - font-family: ${(props) => props.theme.fontFamily}; - font-size: ${(props) => props.theme.fontSize}; - font-style: ${(props) => (props.disabled ? props.theme.disabledFontStyle : props.theme.fontStyle)}; - font-weight: ${(props) => props.theme.fontWeight}; - text-align: center; - letter-spacing: 0.025em; - line-height: 1.715em; - text-decoration: none; - text-overflow: unset; - white-space: normal; - margin: 0; -`; - -const TabIconContainer = styled.div<{ - hasLabelAndIcon: boolean; - iconPosition: TabsContextProps["iconPosition"]; -}>` - display: flex; - margin-bottom: ${(props) => (props.hasLabelAndIcon && props.iconPosition === "top" && "8px") || ""}; - margin-right: ${(props) => (props.hasLabelAndIcon && props.iconPosition === "left" && "12px") || ""}; - font-size: 22px; - - svg { - height: 22px; - width: 22px; - } -`; - export default DxcTab; diff --git a/packages/lib/src/tabs/Tabs.stories.tsx b/packages/lib/src/tabs/Tabs.stories.tsx index 9b622b17f2..a502936f95 100644 --- a/packages/lib/src/tabs/Tabs.stories.tsx +++ b/packages/lib/src/tabs/Tabs.stories.tsx @@ -1,7 +1,6 @@ import { INITIAL_VIEWPORTS } from "@storybook/addon-viewport"; import ExampleContainer from "../../.storybook/components/ExampleContainer"; import Title from "../../.storybook/components/Title"; -import { HalstackProvider } from "../HalstackContext"; import DxcTabs from "./Tabs"; import type { Space } from "../common/utils"; import { Meta, StoryObj } from "@storybook/react/*"; @@ -168,12 +167,6 @@ const tabsNotificationIcon = (iconPosition?: "top" | "left") => ( ); -const opinionatedTheme = { - tabs: { - baseColor: "#5f249f", - }, -}; - const Tabs = () => ( <> @@ -249,27 +242,6 @@ const Tabs = () => ( {tabs("xxlarge")} </ExampleContainer> - <Title title="Opinionated theme" theme="light" level={2} /> - <ExampleContainer> - <Title title="With icon and notification" theme="light" level={4} /> - <HalstackProvider theme={opinionatedTheme}>{tabsNotificationIcon()}</HalstackProvider> - </ExampleContainer> - <ExampleContainer> - <Title title="Disabled" theme="light" level={4} /> - <HalstackProvider theme={opinionatedTheme}>{disabledTabsFirstActive}</HalstackProvider> - </ExampleContainer> - <ExampleContainer pseudoState="pseudo-hover"> - <Title title="Hovered" theme="light" level={4} /> - <HalstackProvider theme={opinionatedTheme}>{tabs()}</HalstackProvider> - </ExampleContainer> - <ExampleContainer pseudoState="pseudo-focus"> - <Title title="Focused" theme="light" level={4} /> - <HalstackProvider theme={opinionatedTheme}>{tabs()}</HalstackProvider> - </ExampleContainer> - <ExampleContainer pseudoState="pseudo-active"> - <Title title="Actived" theme="light" level={4} /> - <HalstackProvider theme={opinionatedTheme}>{tabs()}</HalstackProvider> - </ExampleContainer> </> ); diff --git a/packages/lib/src/tabs/Tabs.tsx b/packages/lib/src/tabs/Tabs.tsx index 5375493e9c..688aaa8b35 100644 --- a/packages/lib/src/tabs/Tabs.tsx +++ b/packages/lib/src/tabs/Tabs.tsx @@ -2,68 +2,110 @@ import { Children, isValidElement, KeyboardEvent, - MutableRefObject, ReactElement, - useCallback, useContext, useEffect, useMemo, useRef, useState, } from "react"; -import styled, { ThemeProvider } from "styled-components"; +import styled from "styled-components"; import TabsContext from "./TabsContext"; -import DxcTab from "./Tab"; +import DxcTab, { sharedTabStyles } from "./Tab"; import TabsPropsType, { TabProps } from "./types"; import DxcTabsLegacy from "./TabsLegacy"; import { spaces } from "../common/variables"; -import HalstackContext, { HalstackLanguageContext } from "../HalstackContext"; +import { HalstackLanguageContext } from "../HalstackContext"; import DxcIcon from "../icon/Icon"; +import { useResize, getPreviousTabIndex, getNextTabIndex } from "./utils"; -const useResize = (refTabList: MutableRefObject<HTMLDivElement | null>) => { - const [viewWidth, setViewWidth] = useState(0); +const TabsContainer = styled.div<{ margin: TabsPropsType["margin"] }>` + position: relative; + margin: ${(props) => (props.margin && typeof props.margin !== "object" ? spaces[props.margin] : "0px")}; + margin-top: ${(props) => + props.margin && typeof props.margin === "object" && props.margin.top ? spaces[props.margin.top] : ""}; + margin-right: ${(props) => + props.margin && typeof props.margin === "object" && props.margin.right ? spaces[props.margin.right] : ""}; + margin-bottom: ${(props) => + props.margin && typeof props.margin === "object" && props.margin.bottom ? spaces[props.margin.bottom] : ""}; + margin-left: ${(props) => + props.margin && typeof props.margin === "object" && props.margin.left ? spaces[props.margin.left] : ""}; +`; - const handleWindowSizeChange = useCallback(() => { - setViewWidth(refTabList?.current?.offsetWidth ?? 0); - }, [refTabList]); +const Underline = styled.div` + position: absolute; + left: 0; + bottom: 0; + width: 100%; + height: var(--border-width-s); + background-color: var(--border-color-neutral-medium); +`; - useEffect(() => { - handleWindowSizeChange(); - window.addEventListener("resize", handleWindowSizeChange); - return () => { - window.removeEventListener("resize", handleWindowSizeChange); - }; - }, [handleWindowSizeChange]); +const Tabs = styled.div<{ + hasLabelAndIcon: boolean; + iconPosition: TabsPropsType["iconPosition"]; +}>` + display: flex; + ${(props) => + !props.hasLabelAndIcon || (props.hasLabelAndIcon && props.iconPosition !== "top") + ? "min-height: var(--height-xxl); height: var(--height-xxl);" + : "min-height: 72px; height: 72px;"} + background-color: var(--color-bg-neutral-lightest); + overflow: hidden; +`; - return viewWidth; -}; +const ScrollIndicator = styled.button` + display: grid; + place-items: center; + min-width: var(--height-xxl); + height: 100%; + padding: 0; + background: var(--color-bg-neutral-lightest); + border: 0; + ${sharedTabStyles} -const getPreviousTabIndex = (array: ReactElement<TabProps>[], initialIndex: number): number => { - let index = initialIndex === 0 ? array.length - 1 : initialIndex - 1; - while (array[index]?.props.disabled) { - index = index === 0 ? array.length - 1 : index - 1; + /* Scroll indicator arrow icon */ + > span { + display: flex; + font-size: var(--height-s); + svg { + height: var(--height-s); + width: 24px; + } } - return index; -}; +`; -const getNextTabIndex = (array: ReactElement<TabProps>[], initialIndex: number): number => { - let index = initialIndex === array.length - 1 ? 0 : initialIndex + 1; - while (array[index]?.props.disabled) { - index = index === array.length - 1 ? 0 : index + 1; +const TabsContent = styled.div` + flex: 1 1 auto; + display: inline-block; + position: relative; + white-space: nowrap; + overflow-x: scroll; + ::-webkit-scrollbar { + display: none; } - return index; -}; +`; + +const ScrollableTabsList = styled.div<{ + translateScroll: number; + enabled: boolean; +}>` + display: flex; + ${({ enabled, translateScroll }) => + enabled ? `transform: translateX(${translateScroll}px)` : "transform: translateX(0px)"}; + transition: all 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; +`; const DxcTabs = ({ - defaultActiveTabIndex, activeTabIndex, - tabs, + children, + defaultActiveTabIndex, + iconPosition = "top", + margin, onTabClick, onTabHover, - margin, - iconPosition = "top", tabIndex = 0, - children, + tabs, }: TabsPropsType) => { const childrenArray: ReactElement<TabProps>[] = useMemo( () => Children.toArray(children) as ReactElement<TabProps>[], @@ -87,24 +129,19 @@ const DxcTabs = ({ return isValidElement(initialActiveTab) ? initialActiveTab.props.label : ""; }); const [innerFocusIndex, setInnerFocusIndex] = useState<number | null>(null); - const [activeIndicatorWidth, setActiveIndicatorWidth] = useState(0); - const [activeIndicatorLeft, setActiveIndicatorLeft] = useState(0); const [countClick, setCountClick] = useState(0); const [totalTabsWidth, setTotalTabsWidth] = useState(0); const [translateScroll, setTranslateScroll] = useState(0); const [scrollRightEnabled, setScrollRightEnabled] = useState(true); const [scrollLeftEnabled, setScrollLeftEnabled] = useState(false); - const [minHeightTabs, setMinHeightTabs] = useState(0); const refTabList = useRef<HTMLDivElement | null>(null); - const colorsTheme = useContext(HalstackContext); const viewWidth = useResize(refTabList); const translatedLabels = useContext(HalstackLanguageContext); - const enabledIndicator = useMemo(() => viewWidth < totalTabsWidth, [viewWidth]); + const enabledScrollIndicators = useMemo(() => viewWidth < totalTabsWidth, [viewWidth]); useEffect(() => { if (refTabList.current) { setTotalTabsWidth((refTabList.current.firstElementChild as HTMLElement)?.offsetWidth); - setMinHeightTabs(refTabList.current.offsetHeight + 1); } }, []); @@ -118,8 +155,6 @@ const DxcTabs = ({ activeLabel: activeTabLabel, hasLabelAndIcon, setActiveLabel: setActiveTabLabel, - setActiveIndicatorWidth, - setActiveIndicatorLeft, }; }, [iconPosition, tabIndex, innerFocusIndex, activeTabLabel, childrenArray, hasLabelAndIcon]); @@ -181,53 +216,45 @@ const DxcTabs = ({ return children ? ( <> - <ThemeProvider theme={colorsTheme.tabs}> - <TabsContainer margin={margin}> - <Underline /> - <Tabs hasLabelAndIcon={hasLabelAndIcon} iconPosition={iconPosition}> + <TabsContainer margin={margin}> + <Underline /> + <Tabs hasLabelAndIcon={hasLabelAndIcon} iconPosition={iconPosition}> + {enabledScrollIndicators && ( <ScrollIndicator onClick={scrollLeft} - enabled={enabledIndicator} disabled={!scrollLeftEnabled} aria-label={translatedLabels.tabs.scrollLeft} tabIndex={scrollLeftEnabled ? tabIndex : -1} - minHeightTabs={minHeightTabs} > <DxcIcon icon="keyboard_arrow_left" /> </ScrollIndicator> - <TabsContent> - <TabsContentScroll translateScroll={translateScroll} ref={refTabList} enabled={enabledIndicator}> - <TabList role="tablist" onKeyDown={handleOnKeyDown} minHeightTabs={minHeightTabs}> - <TabsContext.Provider value={contextValue}>{children}</TabsContext.Provider> - </TabList> - <ActiveIndicator - tabWidth={activeIndicatorWidth} - tabLeft={activeIndicatorLeft} - aria-disabled={childrenArray.some( - (child) => isValidElement(child) && activeTabLabel === child.props.label && child.props.disabled - )} - /> - </TabsContentScroll> - </TabsContent> + )} + <TabsContent> + <ScrollableTabsList + role="tablist" + translateScroll={translateScroll} + ref={refTabList} + enabled={enabledScrollIndicators} + onKeyDown={handleOnKeyDown} + > + <TabsContext.Provider value={contextValue}>{children}</TabsContext.Provider> + </ScrollableTabsList> + </TabsContent> + {enabledScrollIndicators && ( <ScrollIndicator onClick={scrollRight} - enabled={enabledIndicator} disabled={!scrollRightEnabled} aria-label={translatedLabels.tabs.scrollRight} tabIndex={scrollRightEnabled ? tabIndex : -1} - minHeightTabs={minHeightTabs} > <DxcIcon icon="keyboard_arrow_right" /> </ScrollIndicator> - </Tabs> - </TabsContainer> - </ThemeProvider> - {Children.map(children, (child) => { - if (isValidElement(child) && child.props.label === activeTabLabel) { - return child.props.children; - } - return null; - })} + )} + </Tabs> + </TabsContainer> + {Children.map(children, (child) => + isValidElement(child) && child.props.label === activeTabLabel ? child.props.children : null + )} </> ) : ( tabs != null && ( @@ -245,129 +272,6 @@ const DxcTabs = ({ ); }; -const Underline = styled.div` - position: absolute; - left: 0; - bottom: 0; - width: 100%; - height: ${(props) => props.theme.dividerThickness}; - background-color: ${(props) => props.theme.dividerColor}; -`; - -const TabsContainer = styled.div<{ margin: TabsPropsType["margin"] }>` - position: relative; - margin: ${(props) => (props.margin && typeof props.margin !== "object" ? spaces[props.margin] : "0px")}; - margin-top: ${(props) => - props.margin && typeof props.margin === "object" && props.margin.top ? spaces[props.margin.top] : ""}; - margin-right: ${(props) => - props.margin && typeof props.margin === "object" && props.margin.right ? spaces[props.margin.right] : ""}; - margin-bottom: ${(props) => - props.margin && typeof props.margin === "object" && props.margin.bottom ? spaces[props.margin.bottom] : ""}; - margin-left: ${(props) => - props.margin && typeof props.margin === "object" && props.margin.left ? spaces[props.margin.left] : ""}; -`; - -const Tabs = styled.div<{ - hasLabelAndIcon: boolean; - iconPosition: TabsPropsType["iconPosition"]; -}>` - min-height: ${(props) => - ((!props.hasLabelAndIcon || (props.hasLabelAndIcon && props.iconPosition !== "top")) && "48px") || "72px"}; - height: ${(props) => - ((!props.hasLabelAndIcon || (props.hasLabelAndIcon && props.iconPosition !== "top")) && "48px") || "72px"}; - display: flex; - overflow: hidden; - background-color: ${(props) => props.theme.unselectedBackgroundColor}; -`; - -const ScrollIndicator = styled.button<{ - enabled: boolean; - minHeightTabs: number; -}>` - box-sizing: border-box; - display: ${(props) => (props.enabled ? "flex" : "none")}; - justify-content: center; - min-width: ${(props) => props.theme.scrollButtonsWidth}; - height: ${(props) => props.minHeightTabs - 1}px; - padding: 0; - border: none; - background-color: #ffffff; - font-size: 1.25rem; - cursor: pointer; - - &:hover { - background-color: ${(props) => `${props.theme.hoverBackgroundColor} !important`}; - } - &:focus { - outline: ${(props) => props.theme.focusOutline} solid 1px; - outline-offset: -1px; - } - &:active { - background-color: ${(props) => `${props.theme.pressedBackgroundColor} !important`}; - } - &:disabled { - cursor: default; - display: none; - svg { - visibility: hidden; - } - &:focus { - outline: none; - } - &:hover, - &:active { - background-color: transparent !important; - } - } - - span { - align-self: center; - height: 20px; - width: 20px; - } - - span::before { - color: ${(props) => props.theme.unselectedFontColor}; - } -`; - -const ActiveIndicator = styled.span<{ tabLeft: number; tabWidth: number }>` - position: absolute; - bottom: 0; - left: ${(props) => `${props.tabLeft}px`}; - width: ${(props) => `${props.tabWidth}px`}; - height: ${(props) => props.theme.selectedUnderlineThickness}; - background-color: ${(props) => props.theme.selectedUnderlineColor}; - &[aria-disabled="true"] { - background-color: ${(props) => props.theme.disabledFontColor}; - display: none; - } -`; - -const TabsContent = styled.div` - flex: 1 1 auto; - display: inline-block; - position: relative; - white-space: nowrap; - overflow-x: scroll; - ::-webkit-scrollbar { - display: none; - } -`; - -const TabList = styled.div<{ minHeightTabs: number }>` - display: flex; - min-height: ${(props) => props.minHeightTabs}px; -`; - -const TabsContentScroll = styled.div<{ - translateScroll: number; - enabled: boolean; -}>` - display: flex; - ${(props) => (props.enabled ? `transform: translateX(${props.translateScroll}px)` : `transform: translateX(0px)`)}; - transition: all 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; -`; - DxcTabs.Tab = DxcTab; + export default DxcTabs; diff --git a/packages/lib/src/tabs/types.ts b/packages/lib/src/tabs/types.ts index 96a41c9daf..a4c7cb7e5c 100644 --- a/packages/lib/src/tabs/types.ts +++ b/packages/lib/src/tabs/types.ts @@ -25,8 +25,6 @@ export type TabsContextProps = { activeLabel: string; hasLabelAndIcon: boolean; setActiveLabel: (_tab: string) => void; - setActiveIndicatorWidth: (_width: number) => void; - setActiveIndicatorLeft: (_left: number) => void; }; export type TabLabelProps = TabCommonProps & { diff --git a/packages/lib/src/tabs/utils.ts b/packages/lib/src/tabs/utils.ts new file mode 100644 index 0000000000..8f9b7c7f33 --- /dev/null +++ b/packages/lib/src/tabs/utils.ts @@ -0,0 +1,36 @@ +import { MutableRefObject, useState, useCallback, useEffect, ReactElement } from "react"; +import { TabProps } from "./types"; + +export const getNextTabIndex = (array: ReactElement<TabProps>[], initialIndex: number): number => { + let index = initialIndex === array.length - 1 ? 0 : initialIndex + 1; + while (array[index]?.props.disabled) { + index = index === array.length - 1 ? 0 : index + 1; + } + return index; +}; + +export const getPreviousTabIndex = (array: ReactElement<TabProps>[], initialIndex: number): number => { + let index = initialIndex === 0 ? array.length - 1 : initialIndex - 1; + while (array[index]?.props.disabled) { + index = index === 0 ? array.length - 1 : index - 1; + } + return index; +}; + +export const useResize = (refTabList: MutableRefObject<HTMLDivElement | null>) => { + const [viewWidth, setViewWidth] = useState(0); + + const handleWindowSizeChange = useCallback(() => { + setViewWidth(refTabList?.current?.offsetWidth ?? 0); + }, [refTabList]); + + useEffect(() => { + handleWindowSizeChange(); + window.addEventListener("resize", handleWindowSizeChange); + return () => { + window.removeEventListener("resize", handleWindowSizeChange); + }; + }, [handleWindowSizeChange]); + + return viewWidth; +}; diff --git a/packages/lib/src/utils/useTimeout.tsx b/packages/lib/src/utils/useTimeout.ts similarity index 100% rename from packages/lib/src/utils/useTimeout.tsx rename to packages/lib/src/utils/useTimeout.ts diff --git a/packages/lib/src/utils/useWidth.tsx b/packages/lib/src/utils/useWidth.ts similarity index 100% rename from packages/lib/src/utils/useWidth.tsx rename to packages/lib/src/utils/useWidth.ts From 1465ffbf67d1f5e600478248cd4694e83fba8fd8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Iv=C3=A1n=20G=C3=B3mez=20Pinta?= <44321109+GomezIvann@users.noreply.github.com> Date: Thu, 6 Mar 2025 14:36:56 +0100 Subject: [PATCH 02/12] More tabs changes --- .../components/tabs/code/TabsCodePage.tsx | 2 +- packages/lib/src/tabs/Tab.tsx | 29 +++++++------------ packages/lib/src/tabs/Tabs.stories.tsx | 22 +++----------- packages/lib/src/tabs/Tabs.tsx | 26 +++++------------ packages/lib/src/tabs/types.ts | 7 ++--- 5 files changed, 26 insertions(+), 60 deletions(-) diff --git a/apps/website/screens/components/tabs/code/TabsCodePage.tsx b/apps/website/screens/components/tabs/code/TabsCodePage.tsx index 3771bee221..9e605996b6 100644 --- a/apps/website/screens/components/tabs/code/TabsCodePage.tsx +++ b/apps/website/screens/components/tabs/code/TabsCodePage.tsx @@ -122,7 +122,7 @@ const sections = [ </td> <td>Whether the icon should appear above or to the left of the label.</td> <td> - <TableCode>'top'</TableCode> + <TableCode>'left'</TableCode> </td> </tr> <tr> diff --git a/packages/lib/src/tabs/Tab.tsx b/packages/lib/src/tabs/Tab.tsx index da180b1206..f24179bf26 100644 --- a/packages/lib/src/tabs/Tab.tsx +++ b/packages/lib/src/tabs/Tab.tsx @@ -42,21 +42,19 @@ const Tab = styled.button<{ border: 0; min-width: 90px; max-width: 360px; - ${({ hasLabelAndIcon, iconPosition }) => - !hasLabelAndIcon || (hasLabelAndIcon && iconPosition !== "top") - ? "padding: var(--spacing-gap-m) var(--spacing-padding-m); height: var(--height-xxl); min-height: var(--height-xxl);" - : "padding: var(--spacing-padding-xs) var(--spacing-padding-m); height: 72px; min-height: 72px;"} + ${({ iconPosition }) => + iconPosition === "top" + ? "padding: var(--spacing-padding-xs) var(--spacing-padding-m); height: 72px;" + : "padding: var(--spacing-gap-s) var(--spacing-padding-m); height: var(--height-xxl);"} overflow: hidden; ${sharedTabStyles} `; const LabelIconContainer = styled.div<{ - hasLabelAndIcon: boolean; iconPosition: TabsContextProps["iconPosition"]; }>` display: flex; - flex-direction: ${({ hasLabelAndIcon, iconPosition }) => - hasLabelAndIcon && iconPosition === "top" ? "column" : "row"}; + flex-direction: ${({ iconPosition }) => (iconPosition === "top" ? "column" : "row")}; align-items: center; gap: var(--spacing-gap-m); `; @@ -81,10 +79,8 @@ const BadgeContainer = styled.div<{ iconPosition: TabsContextProps["iconPosition"]; }>` display: flex; - flex-direction: column; align-items: ${({ hasLabelAndIcon, iconPosition }) => hasLabelAndIcon && iconPosition === "top" ? "flex-start" : "center"}; - justify-content: flex-start; height: 100%; `; @@ -106,8 +102,7 @@ const DxcTab = forwardRef( const { activeLabel, focusedLabel, - hasLabelAndIcon = false, - iconPosition = "top", + iconPosition, isControlled, setActiveLabel, tabIndex = 0, @@ -139,7 +134,7 @@ const DxcTab = forwardRef( <Tab aria-selected={activeLabel === label} disabled={disabled} - hasLabelAndIcon={hasLabelAndIcon} + hasLabelAndIcon={Boolean(icon && label)} iconPosition={iconPosition} onClick={() => { if (!isControlled) setActiveLabel?.(label); @@ -149,11 +144,9 @@ const DxcTab = forwardRef( onMouseEnter={() => onHover?.()} ref={(anchorRef) => { tabRef.current = anchorRef; - if (ref) { - if (typeof ref === "function") { - ref(anchorRef); - } else { + if (typeof ref === "function") ref(anchorRef); + else { const currentRef = ref as MutableRefObject<HTMLButtonElement | null>; currentRef.current = anchorRef; } @@ -163,12 +156,12 @@ const DxcTab = forwardRef( tabIndex={activeLabel === label && !disabled ? tabIndex : -1} type="button" > - <LabelIconContainer hasLabelAndIcon={hasLabelAndIcon} iconPosition={iconPosition}> + <LabelIconContainer iconPosition={iconPosition}> {icon && <IconContainer>{typeof icon === "string" ? <DxcIcon icon={icon} /> : icon}</IconContainer>} <Label>{label}</Label> </LabelIconContainer> {!disabled && notificationNumber && ( - <BadgeContainer hasLabelAndIcon={hasLabelAndIcon} iconPosition={iconPosition}> + <BadgeContainer hasLabelAndIcon={Boolean(icon && label)} iconPosition={iconPosition}> <DxcBadge label={typeof notificationNumber === "number" ? notificationNumber : undefined} mode="notification" diff --git a/packages/lib/src/tabs/Tabs.stories.tsx b/packages/lib/src/tabs/Tabs.stories.tsx index a502936f95..f2f9bd4e43 100644 --- a/packages/lib/src/tabs/Tabs.stories.tsx +++ b/packages/lib/src/tabs/Tabs.stories.tsx @@ -61,20 +61,6 @@ const disabledTabs = ( </DxcTabs> ); -const disabledTabsFirstActive = ( - <DxcTabs> - <DxcTabs.Tab label="Tab 1" active disabled> - <></> - </DxcTabs.Tab> - <DxcTabs.Tab label="Tab 2" disabled> - <></> - </DxcTabs.Tab> - <DxcTabs.Tab label="Tab 3" disabled> - <></> - </DxcTabs.Tab> - </DxcTabs> -); - const firstDisabledTabs = ( <DxcTabs> <DxcTabs.Tab label="Tab 1" disabled> @@ -126,7 +112,7 @@ const tabsIcon = (iconPosition?: "top" | "left") => ( <DxcTabs.Tab label="Tab 3" icon={iconSVG} disabled> <></> </DxcTabs.Tab> - <DxcTabs.Tab label="Tab 4" icon={iconSVG}> + <DxcTabs.Tab label="Tab 4"> <></> </DxcTabs.Tab> <DxcTabs.Tab label="Tab 5" icon="mail"> @@ -199,11 +185,11 @@ const Tabs = () => ( </ExampleContainer> <ExampleContainer> <Title title="With icon position top" theme="light" level={4} /> - {tabsIcon()} + {tabsIcon("top")} </ExampleContainer> <ExampleContainer> <Title title="With icon position left" theme="light" level={4} /> - {tabsIcon("left")} + {tabsIcon()} </ExampleContainer> <ExampleContainer> <Title title="With icon and notification number" theme="light" level={4} /> @@ -211,7 +197,7 @@ const Tabs = () => ( </ExampleContainer> <ExampleContainer> <Title title="With icon on the left and notification number" theme="light" level={4} /> - {tabsNotificationIcon("left")} + {tabsNotificationIcon()} </ExampleContainer> <Title title="Margins" theme="light" level={2} /> <ExampleContainer> diff --git a/packages/lib/src/tabs/Tabs.tsx b/packages/lib/src/tabs/Tabs.tsx index 688aaa8b35..f430e4c110 100644 --- a/packages/lib/src/tabs/Tabs.tsx +++ b/packages/lib/src/tabs/Tabs.tsx @@ -41,15 +41,8 @@ const Underline = styled.div` background-color: var(--border-color-neutral-medium); `; -const Tabs = styled.div<{ - hasLabelAndIcon: boolean; - iconPosition: TabsPropsType["iconPosition"]; -}>` +const Tabs = styled.div` display: flex; - ${(props) => - !props.hasLabelAndIcon || (props.hasLabelAndIcon && props.iconPosition !== "top") - ? "min-height: var(--height-xxl); height: var(--height-xxl);" - : "min-height: 72px; height: 72px;"} background-color: var(--color-bg-neutral-lightest); overflow: hidden; `; @@ -100,7 +93,7 @@ const DxcTabs = ({ activeTabIndex, children, defaultActiveTabIndex, - iconPosition = "top", + iconPosition, margin, onTabClick, onTabHover, @@ -111,10 +104,6 @@ const DxcTabs = ({ () => Children.toArray(children) as ReactElement<TabProps>[], [children] ); - const hasLabelAndIcon = useMemo( - () => childrenArray.some((child) => isValidElement(child) && child.props.icon && child.props.label), - [childrenArray] - ); const [activeTabLabel, setActiveTabLabel] = useState(() => { const hasActiveChild = childrenArray.some( @@ -148,15 +137,14 @@ const DxcTabs = ({ const contextValue = useMemo(() => { const focusedChild = innerFocusIndex != null ? childrenArray[innerFocusIndex] : null; return { - iconPosition, - tabIndex, + activeLabel: activeTabLabel, focusedLabel: isValidElement(focusedChild) ? focusedChild.props.label : "", + iconPosition, isControlled: childrenArray.some((child) => isValidElement(child) && typeof child.props.active !== "undefined"), - activeLabel: activeTabLabel, - hasLabelAndIcon, setActiveLabel: setActiveTabLabel, + tabIndex, }; - }, [iconPosition, tabIndex, innerFocusIndex, activeTabLabel, childrenArray, hasLabelAndIcon]); + }, [iconPosition, tabIndex, innerFocusIndex, activeTabLabel, childrenArray]); const scrollLeft = () => { const scrollWidth = (refTabList?.current?.offsetHeight ?? 0) * 0.75; @@ -218,7 +206,7 @@ const DxcTabs = ({ <> <TabsContainer margin={margin}> <Underline /> - <Tabs hasLabelAndIcon={hasLabelAndIcon} iconPosition={iconPosition}> + <Tabs> {enabledScrollIndicators && ( <ScrollIndicator onClick={scrollLeft} diff --git a/packages/lib/src/tabs/types.ts b/packages/lib/src/tabs/types.ts index a4c7cb7e5c..d890de4841 100644 --- a/packages/lib/src/tabs/types.ts +++ b/packages/lib/src/tabs/types.ts @@ -18,13 +18,12 @@ type TabCommonProps = { }; export type TabsContextProps = { - iconPosition: "top" | "left"; - tabIndex: number; + activeLabel: string; focusedLabel: string; + iconPosition?: "top" | "left"; isControlled: boolean; - activeLabel: string; - hasLabelAndIcon: boolean; setActiveLabel: (_tab: string) => void; + tabIndex: number; }; export type TabLabelProps = TabCommonProps & { From f1f11e07ef3d70c51c329e31ed7371db0462d30b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Iv=C3=A1n=20G=C3=B3mez=20Pinta?= <44321109+GomezIvann@users.noreply.github.com> Date: Wed, 19 Mar 2025 11:42:46 +0100 Subject: [PATCH 03/12] Tabs documentation --- apps/website/pages/components/tabs/code.tsx | 17 + apps/website/pages/components/tabs/index.tsx | 24 +- .../pages/components/tabs/specifications.tsx | 21 - apps/website/pages/components/tabs/usage.tsx | 21 - .../button/overview/ButtonOverviewPage.tsx | 16 +- .../components/tabs/TabsPageLayout.tsx | 12 +- .../tabs/overview/TabsOverviewPage.tsx | 241 ++++++++++ .../{usage => overview}/examples/default.ts | 0 .../examples/scrollable.ts | 0 .../tabs/overview/images/tabs_anatomy.png | Bin 0 -> 33601 bytes .../components/tabs/specs/TabsSpecsPage.tsx | 454 ------------------ .../tabs/specs/images/tabs_anatomy.png | Bin 19633 -> 0 bytes .../tabs/specs/images/tabs_fixed_specs.png | Bin 37772 -> 0 bytes .../tabs/specs/images/tabs_fixed_specs72.png | Bin 14433 -> 0 bytes .../tabs/specs/images/tabs_notification.png | Bin 34221 -> 0 bytes .../tabs/specs/images/tabs_scrollable.png | Bin 12629 -> 0 bytes .../tabs/specs/images/tabs_specs.png | Bin 15984 -> 0 bytes .../tabs/specs/images/tabs_states_specs.png | Bin 29114 -> 0 bytes .../components/tabs/usage/TabsUsagePage.tsx | 267 ---------- .../tabs/usage/images/tabs_alignment.png | Bin 12865 -> 0 bytes .../tabs/usage/images/tabs_content.png | Bin 19368 -> 0 bytes .../usage/images/tabs_default_placement.png | Bin 7704 -> 0 bytes .../usage/images/tabs_mobile_navigation.png | Bin 17447 -> 0 bytes .../tabs/usage/images/tabs_panel_behavior.png | Bin 22349 -> 0 bytes .../usage/images/tabs_panel_navigation.png | Bin 16791 -> 0 bytes .../tabs/usage/images/tabs_placement.png | Bin 21538 -> 0 bytes .../images/tabs_scrollable_panel_behavior.png | Bin 15784 -> 0 bytes .../tabs_scrollable_panel_navigation.png | Bin 23604 -> 0 bytes .../images/tabs_scrollable_placement.png | Bin 7792 -> 0 bytes .../tabs/usage/images/tabs_typography.png | Bin 10902 -> 0 bytes .../tabs/usage/images/tabs_usage.png | Bin 13137 -> 0 bytes 31 files changed, 282 insertions(+), 791 deletions(-) create mode 100644 apps/website/pages/components/tabs/code.tsx delete mode 100644 apps/website/pages/components/tabs/specifications.tsx delete mode 100644 apps/website/pages/components/tabs/usage.tsx create mode 100644 apps/website/screens/components/tabs/overview/TabsOverviewPage.tsx rename apps/website/screens/components/tabs/{usage => overview}/examples/default.ts (100%) rename apps/website/screens/components/tabs/{usage => overview}/examples/scrollable.ts (100%) create mode 100644 apps/website/screens/components/tabs/overview/images/tabs_anatomy.png delete mode 100644 apps/website/screens/components/tabs/specs/TabsSpecsPage.tsx delete mode 100644 apps/website/screens/components/tabs/specs/images/tabs_anatomy.png delete mode 100644 apps/website/screens/components/tabs/specs/images/tabs_fixed_specs.png delete mode 100644 apps/website/screens/components/tabs/specs/images/tabs_fixed_specs72.png delete mode 100644 apps/website/screens/components/tabs/specs/images/tabs_notification.png delete mode 100644 apps/website/screens/components/tabs/specs/images/tabs_scrollable.png delete mode 100644 apps/website/screens/components/tabs/specs/images/tabs_specs.png delete mode 100644 apps/website/screens/components/tabs/specs/images/tabs_states_specs.png delete mode 100644 apps/website/screens/components/tabs/usage/TabsUsagePage.tsx delete mode 100644 apps/website/screens/components/tabs/usage/images/tabs_alignment.png delete mode 100644 apps/website/screens/components/tabs/usage/images/tabs_content.png delete mode 100644 apps/website/screens/components/tabs/usage/images/tabs_default_placement.png delete mode 100644 apps/website/screens/components/tabs/usage/images/tabs_mobile_navigation.png delete mode 100644 apps/website/screens/components/tabs/usage/images/tabs_panel_behavior.png delete mode 100644 apps/website/screens/components/tabs/usage/images/tabs_panel_navigation.png delete mode 100644 apps/website/screens/components/tabs/usage/images/tabs_placement.png delete mode 100644 apps/website/screens/components/tabs/usage/images/tabs_scrollable_panel_behavior.png delete mode 100644 apps/website/screens/components/tabs/usage/images/tabs_scrollable_panel_navigation.png delete mode 100644 apps/website/screens/components/tabs/usage/images/tabs_scrollable_placement.png delete mode 100644 apps/website/screens/components/tabs/usage/images/tabs_typography.png delete mode 100644 apps/website/screens/components/tabs/usage/images/tabs_usage.png diff --git a/apps/website/pages/components/tabs/code.tsx b/apps/website/pages/components/tabs/code.tsx new file mode 100644 index 0000000000..7c9623867b --- /dev/null +++ b/apps/website/pages/components/tabs/code.tsx @@ -0,0 +1,17 @@ +import Head from "next/head"; +import type { ReactElement } from "react"; +import TabsCodePage from "screens/components/tabs/overview/TabsOverviewPage"; +import TabsPageLayout from "screens/components/tabs/TabsPageLayout"; + +const Code = () => ( + <> + <Head> + <title>Tabs code — Halstack Design System + + + +); + +Code.getLayout = (page: ReactElement) => {page}; + +export default Code; diff --git a/apps/website/pages/components/tabs/index.tsx b/apps/website/pages/components/tabs/index.tsx index b64cef22f5..392735d82b 100644 --- a/apps/website/pages/components/tabs/index.tsx +++ b/apps/website/pages/components/tabs/index.tsx @@ -1,21 +1,17 @@ import Head from "next/head"; import type { ReactElement } from "react"; -import TabsCodePage from "screens/components/tabs/code/TabsCodePage"; +import TabsOverviewPage from "screens/components/tabs/overview/TabsOverviewPage"; import TabsPageLayout from "screens/components/tabs/TabsPageLayout"; -const Index = () => { - return ( - <> - - Tabs — Halstack Design System - - - - ); -}; +const Index = () => ( + <> + + Tabs — 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/tabs/specifications.tsx b/apps/website/pages/components/tabs/specifications.tsx deleted file mode 100644 index 546e63a6e3..0000000000 --- a/apps/website/pages/components/tabs/specifications.tsx +++ /dev/null @@ -1,21 +0,0 @@ -import Head from "next/head"; -import type { ReactElement } from "react"; -import TabsSpecsPage from "screens/components/tabs/specs/TabsSpecsPage"; -import TabsPageLayout from "screens/components/tabs/TabsPageLayout"; - -const Specifications = () => { - return ( - <> - - Tabs Specs— Halstack Design System - - - - ); -}; - -Specifications.getLayout = function getLayout(page: ReactElement) { - return {page}; -}; - -export default Specifications; diff --git a/apps/website/pages/components/tabs/usage.tsx b/apps/website/pages/components/tabs/usage.tsx deleted file mode 100644 index 4ce1860112..0000000000 --- a/apps/website/pages/components/tabs/usage.tsx +++ /dev/null @@ -1,21 +0,0 @@ -import Head from "next/head"; -import type { ReactElement } from "react"; -import TabsUsagePage from "screens/components/tabs/usage/TabsUsagePage"; -import TabsPageLayout from "screens/components/tabs/TabsPageLayout"; - -const Usage = () => { - return ( - <> - - Tabs — Halstack Design System - - - - ); -}; - -Usage.getLayout = function getLayout(page: ReactElement) { - return {page}; -}; - -export default Usage; diff --git a/apps/website/screens/components/button/overview/ButtonOverviewPage.tsx b/apps/website/screens/components/button/overview/ButtonOverviewPage.tsx index c08ec795b4..d40f699e12 100644 --- a/apps/website/screens/components/button/overview/ButtonOverviewPage.tsx +++ b/apps/website/screens/components/button/overview/ButtonOverviewPage.tsx @@ -153,7 +153,7 @@ const sections = [ - + Default @@ -164,7 +164,7 @@ const sections = [ - + Error @@ -175,7 +175,7 @@ const sections = [ - + Info @@ -186,7 +186,7 @@ const sections = [ - + Success @@ -197,7 +197,7 @@ const sections = [ - + Warning @@ -257,7 +257,7 @@ const sections = [ Secondary actions: They can be used for less prominent actions that are not the - primary focus of the user’s interaction. + primary focus of the user's interaction. @@ -338,7 +338,7 @@ const sections = [ content: ( - Avoid ambiguity: Make sure the button’s purpose is immediately clear. Avoid vague labels + Avoid ambiguity: Make sure the button's purpose is immediately clear. Avoid vague labels like "Click here" or "Go". @@ -368,7 +368,7 @@ const sections = [ content: ( - User-centric language: Write from the user’s perspective. For actions that the user + User-centric language: Write from the user's perspective. For actions that the user performs, consider using first-person pronouns (e.g., "My profile"). diff --git a/apps/website/screens/components/tabs/TabsPageLayout.tsx b/apps/website/screens/components/tabs/TabsPageLayout.tsx index f36e61bd52..b579a2fc2e 100644 --- a/apps/website/screens/components/tabs/TabsPageLayout.tsx +++ b/apps/website/screens/components/tabs/TabsPageLayout.tsx @@ -6,9 +6,8 @@ import { ReactNode } from "react"; const TabsPageHeading = ({ children }: { children: ReactNode }) => { const tabs = [ - { label: "Code", path: "/components/tabs" }, - { label: "Usage", path: "/components/tabs/usage" }, - { label: "Specifications", path: "/components/tabs/specifications" }, + { label: "Overview", path: "/components/tabs" }, + { label: "Code", path: "/components/tabs/code" }, ]; return ( @@ -17,10 +16,11 @@ const TabsPageHeading = ({ children }: { children: ReactNode }) => { - Tabs allow the user to interact across the sections to switch from one set of content to another, making the - transition easily from one peer to the other. + A tab is a UI component that allows users to switch between different sections of content without leaving + the page. Tabs are often used to organize related information into distinct views, making it easier to + navigate between them. - + {children} diff --git a/apps/website/screens/components/tabs/overview/TabsOverviewPage.tsx b/apps/website/screens/components/tabs/overview/TabsOverviewPage.tsx new file mode 100644 index 0000000000..d408366b3c --- /dev/null +++ b/apps/website/screens/components/tabs/overview/TabsOverviewPage.tsx @@ -0,0 +1,241 @@ +import { DxcParagraph, DxcBulletedList, DxcFlex, DxcLink, DxcInset } from "@dxc-technology/halstack-react"; +import Image from "@/common/Image"; +import QuickNavContainer from "@/common/QuickNavContainer"; +import QuickNavContainerLayout from "@/common/QuickNavContainerLayout"; +import DocFooter from "@/common/DocFooter"; +import defaultUsage from "./examples/default"; +import scrollableUsage from "./examples/scrollable"; +import Example from "@/common/example/Example"; +import anatomy from "./images/tabs_anatomy.png"; +import Link from "next/link"; + +const sections = [ + { + title: "Introduction", + content: ( + + Tabs are interactive UI components that allow users to navigate between different sections of content within the + same page. They help organize related information efficiently, improving usability by reducing clutter and + enabling seamless content switching. Tabs are commonly used in dashboards, settings panels, and content-heavy + applications to enhance user experience. + + ), + }, + { + title: "Anatomy", + content: ( + <> + Tabs anatomy + + + Container: the wrapper that holds all the tabs together in a row. + + + Active tab indicator: a colored line that visually marks the selected tab. + + + Divider: a subtle line separating tabs to improve readability. + + + Tab item: the clickable area that triggers a content change when selected. + + + Label (Optional if there's an icon): The text that identifies the tab's purpose or + section. + + + Icon: (Optional if there's a label): A small graphical element that enhances + visual recognition of the tab. + + + + ), + }, + { + title: "Using tabs", + content: ( + + Tabs are an effective way to organize content within a user interface by keeping related sections grouped + together while minimizing clutter. They improve usability by allowing users to quickly switch between different + views without navigating away from the page. When designed and implemented correctly, tabs enhance the user + experience by making content more accessible and easier to interact with. + + ), + subSections: [ + { + title: "Placement and alignment", + subSections: [ + { + title: "Placement", + content: ( + <> + + There are two types of tabs: Default and Container. Both types share + the same hierarchy and should never be nested within each other. Tabs are typically positioned above + the content, under the header or general navigation. + + + + Default tabs: used for main navigation, placed above the header, spanning 100% of + the screen width. + + + + + + Container tabs: Used for panel navigation, placed at the top of the panel, using + the full available width. Scrollable tabs are allowed when space is limited. + + + + + + + ), + }, + { + title: "Alignment", + content: ( + + Tabs are always displayed horizontally in a single row. They can be left-aligned or{" "} + centered, depending on the content and context. + + ), + }, + ], + }, + { + title: "Tabs vs. Nav tabs", + content: ( + <> + Tabs vs Nav tabs + + Both tabs and{" "} + + nav tabs + {" "} + are used for navigation, but they serve different purposes and function in distinct ways. + + + ), + subSections: [ + { + title: "Tabs", + content: ( + + + Used to switch between different content sections within the same page or container. + + + Typically do not trigger a full page reload but update content dynamically. + + + ), + }, + { + title: "Nav tabs", + content: ( + <> + + + Act as primary navigation elements, often leading to different pages or sections of + an application. + + + Clicking on a navigation tab may trigger a full page reload or route change. + + + + Both components improve usability, but tabs are best for grouping related content + within a page, while nav tabs help users move across different sections or pages of + an application. + + + ), + }, + ], + }, + ], + }, + { + title: "Best practices", + content: ( + + To ensure an intuitive and user-friendly experience, follow these best practices when designing and implementing + tabs: + + ), + subSections: [ + { + title: "Maintain logical order", + content: ( + + Arrange tabs in a meaningful sequence based on user needs. + Place frequently used or primary tabs first. + + ), + }, + { + title: "Keep tab babels short & clear", + content: ( + + + Use concise, descriptive labels (1-2 words) that clearly indicate the content. + + + Avoid using generic or ambiguous labels like "Info" or "More." Instead, choose specific terms that reflect + the content, such as "Account Details" for user-related settings or "Billing" for payment information. + + Prioritize readability—avoid using all caps unless necessary. + + ), + }, + { + title: "Managing the number of tabs effectively", + content: ( + + + While not a strict rule, keeping the number of tabs manageable (ideally 5-7) helps maintain clarity and + usability. + + + If additional tabs are necessary, assess the information architecture carefully and consider grouping + related items. + + + ), + }, + { + title: "Use icons thoughtfully", + content: ( + + + Ensure the icon is intuitive and clearly represents the content of the tab. While they are generally used + alongside labels, they can also be used independently. In such cases, it is crucial to choose highly + recognizable icons that clearly convey meaning without additional text. + + + When used together, the icon and label must work harmoniously to reinforce their meaning and avoid any + conflicting interpretations. + + + Avoid using overly decorative or generic icons that do not provide clear meaning, such as an abstract + shape with no context. + + + ), + }, + ], + }, +]; + +const TabsOverviewPage = () => ( + + + + + + +); + +export default TabsOverviewPage; diff --git a/apps/website/screens/components/tabs/usage/examples/default.ts b/apps/website/screens/components/tabs/overview/examples/default.ts similarity index 100% rename from apps/website/screens/components/tabs/usage/examples/default.ts rename to apps/website/screens/components/tabs/overview/examples/default.ts diff --git a/apps/website/screens/components/tabs/usage/examples/scrollable.ts b/apps/website/screens/components/tabs/overview/examples/scrollable.ts similarity index 100% rename from apps/website/screens/components/tabs/usage/examples/scrollable.ts rename to apps/website/screens/components/tabs/overview/examples/scrollable.ts diff --git a/apps/website/screens/components/tabs/overview/images/tabs_anatomy.png b/apps/website/screens/components/tabs/overview/images/tabs_anatomy.png new file mode 100644 index 0000000000000000000000000000000000000000..05863f27efe5659cf927d4fbfe46d3e8aac83766 GIT binary patch literal 33601 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%0DV*r?^aN`C%6 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 IXma=e0j;_-iU0rr literal 0 HcmV?d00001 diff --git a/apps/website/screens/components/tabs/specs/TabsSpecsPage.tsx b/apps/website/screens/components/tabs/specs/TabsSpecsPage.tsx deleted file mode 100644 index a767c5650f..0000000000 --- a/apps/website/screens/components/tabs/specs/TabsSpecsPage.tsx +++ /dev/null @@ -1,454 +0,0 @@ -import { DxcTable, DxcParagraph, DxcFlex, DxcLink, DxcBulletedList } from "@dxc-technology/halstack-react"; -import Image from "@/common/Image"; -import QuickNavContainer from "@/common/QuickNavContainer"; -import QuickNavContainerLayout from "@/common/QuickNavContainerLayout"; -import Figure from "@/common/Figure"; -import Code from "@/common/Code"; -import DocFooter from "@/common/DocFooter"; -import specsImage from "./images/tabs_specs.png"; -import specsFixed from "./images/tabs_fixed_specs.png"; -import specsFixed72 from "./images/tabs_fixed_specs72.png"; -import specsScrollable from "./images/tabs_scrollable.png"; -import specsNotification from "./images/tabs_notification.png"; -import statesTabs from "./images/tabs_states_specs.png"; -import specsAnatomy from "./images/tabs_anatomy.png"; -import HeaderDescriptionCell from "@/common/HeaderDescriptionCell"; - -const sections = [ - { - title: "Min / Max width", - content: ( -
- 48px height fixed tabs design specifications -
- ), - }, - { - title: "Fixed tabs", - content: ( - <> -
- 48px height fixed tabs design specifications -
-
- 72px height fixed tabs design specifications -
- - ), - }, - { - title: "Scrollable tabs", - content: ( - <> - - Tabs are horizontally scrollable when they are wider that screen, by using the scroll indicator. - -
- Scrollable tabs -
- - ), - }, - { - title: "Notification tabs", - content: ( - <> - - Notification badges are always positioned aligned with label or icon in 48px tab container and at top right of - the 72px tab container. - -
- Notification tabs -
- - ), - }, - { - title: "States", - content: ( - <> - - Tabs can get different states based on user interaction. These states are: inactive,{" "} - enabled, hover, pressed, focus and{" "} - disabled. - -
- Tab states -
- - ), - }, - { - title: "Anatomy", - content: ( - <> - Tabs anatomy - - Container - Active icon (Optional if there's a label) - Active text label (Optional if there's an icon) - Active tab indicator - Inactive icon (Optional if there's a label) - Inactive text label (Optional if there's an icon) - Tab item - Divider - - - ), - }, - { - title: "Design tokens", - subSections: [ - { - title: "Color", - content: ( - - - - Component token - Element - Core token - Value - - - - - - selectedBackgroundColor - - Tab item - - color-white - - #ffffff - - - - unselectedBackgroundColor - - Tab item:enabled - - color-white - - #ffffff - - - - hoverBackgroundColor - - Tab item:hover - - color-purple-100 - - #f2eafa - - - - pressedBackgroundColor - - Tab item:active - - color-purple-200 - - #e5d5f6 - - - - selectedFontColor - - Label - - color-purple-700 - - #5f249f - - - - unselectedFontColor - - Label - - color-grey-700 - - #666666 - - - - disabledFontColor - - Label:disabled - - color-grey-500 - - #999999 - - - - selectedIconColor - - Icon - - color-purple-700 - - #5f249f - - - - unselectedIconColor - - Icon - - color-grey-700 - - #666666 - - - - disabledIconColor - - Icon:disabled - - color-grey-500 - - #999999 - - - - focusOutline - - Tab item outline - - color-purple-700 - - #5f249f - - - - selectedUnderlineColor - - Tab item border botton - - color-purple-700 - - #5f249f - - - - dividerColor - - Separator - - color-grey-400 - - #bfbfbf - - - - ), - }, - { - title: "Typography", - content: ( - - - - Component token - Element - Core token - Value - - - - - - fontFamily - - Title - - font-family-sans - - 'Open Sans', sans-serif - - - - fontSize - - Title - - font-scale-03 - - 1rem / 16px - - - - fontStyle - - Title - - font-style-normal - - normal - - - - disabledFontStyle - - Title - - font-style-normal - - normal - - - - fontWeight - - Title:disabled - - font-weight-semibold - - 600 - - - - pressedFontWeight - - Title:active - - font-weight-semibold - - 600 - - - - fontTextTransform - - Title - - - none - - - - ), - }, - { - title: "Border", - content: ( - - - - Component token - Element - Core token - Value - - - - - - dividerThickness - - Separator - - - 1px - - - - selectedUnderlineThickness - - Separator:selected - - - 2px - - - - ), - }, - ], - }, - { - title: "Accessibility", - content: ( - <> - - Each tab must have a unique title that clearly describes tab panel content. This is particularly helpful for - users of assistive technologies so they have the necessary information to efficiently navigate the content. - - - Content authors need to ensure the content that is added to the tab panel is accessible. For example, if you - add an image to the panel you need to include alternative text to pass accessibility testing. - - - - W3C WAI-ARIA Tab Design Pattern - {" "} - covers the usage of ARIA names. - - - ), - subSections: [ - { - title: "Keyboard interactions", - content: ( - - - - key - Description - - - - - - Enter or Space - - Activates the tab if it was not activated automatically on focus. - - - - Tab - - - When focus moves into the tab list, places focus on the active tab element. When the tab list contains - the focus, moves focus to the next element in the page tab sequence outside the tablist, which is - typically either the first focusable element inside the tab panel or the tab panel itself. - - - - - Left-arrow - - - Moves focus to the previous tab. If focus is on the first tab, moves focus to the last tab. - Optionally, activates the newly focused tab. - - - - - Right-arrow - - - Moves focus to the next tab. If focus is on the last tab element, moves focus to the first tab. - Optionally, activates the newly focused tab. - - - - - ), - }, - ], - }, -]; - -const TabsSpecsPage = () => { - return ( - - - - - - - ); -}; - -export default TabsSpecsPage; diff --git a/apps/website/screens/components/tabs/specs/images/tabs_anatomy.png b/apps/website/screens/components/tabs/specs/images/tabs_anatomy.png deleted file mode 100644 index 53093010e5d12332996d226cfa5d0f868b799a28..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19633 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%0D^jOBXmu%#}EFZqxF3o@TYi@Y!3(ALR9a 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 DpRAni diff --git a/apps/website/screens/components/tabs/specs/images/tabs_notification.png b/apps/website/screens/components/tabs/specs/images/tabs_notification.png deleted file mode 100644 index cf1ba14bd5184af4c5157d415ec379aee09cd062..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34221 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 diff --git a/apps/website/screens/components/tabs/specs/images/tabs_scrollable.png b/apps/website/screens/components/tabs/specs/images/tabs_scrollable.png deleted file mode 100644 index f2bd1928d61b6508fd88e20d9720eaa25a6f2371..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12629 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 diff --git a/apps/website/screens/components/tabs/specs/images/tabs_states_specs.png b/apps/website/screens/components/tabs/specs/images/tabs_states_specs.png deleted file mode 100644 index f9fe8db876d99ec887175437ad8ec92fca9e0568..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29114 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 T_fyc5(It5OmJcfe_{aYP(4;WQ diff --git a/apps/website/screens/components/tabs/usage/TabsUsagePage.tsx b/apps/website/screens/components/tabs/usage/TabsUsagePage.tsx deleted file mode 100644 index 233ab3a668..0000000000 --- a/apps/website/screens/components/tabs/usage/TabsUsagePage.tsx +++ /dev/null @@ -1,267 +0,0 @@ -import { DxcParagraph, DxcBulletedList, DxcFlex } from "@dxc-technology/halstack-react"; -import Image from "@/common/Image"; -import QuickNavContainer from "@/common/QuickNavContainer"; -import QuickNavContainerLayout from "@/common/QuickNavContainerLayout"; -import Figure from "@/common/Figure"; -import DocFooter from "@/common/DocFooter"; -import defaultUsage from "./examples/default"; -import scrollableUsage from "./examples/scrollable"; -import contentUsageTabImage from "./images/tabs_content.png"; -import typographyUsageTabImage from "./images/tabs_typography.png"; -import tabsPlacement from "./images/tabs_placement.png"; -import scrollablePanelNavigation from "./images/tabs_scrollable_panel_navigation.png"; -import mobileNavigation from "./images/tabs_mobile_navigation.png"; -import panelNavigation from "./images/tabs_panel_navigation.png"; -import tabsAlignment from "./images/tabs_alignment.png"; -import tabsPanelBehavior from "./images/tabs_panel_behavior.png"; -import tabsScrollablePanelBehavior from "./images/tabs_scrollable_panel_behavior.png"; -import Example from "@/common/example/Example"; - -const sections = [ - { - title: "Usage", - content: ( - <> - - Tabs organize and allow navigation between groups of content that are related and at the same level of - hierarchy. - - - ), - }, - { - title: "Do's", - content: ( - - - Use tabs for navigation when dividing content into different sections. - - The content should have the same level of hierarchy. - - Tabs can contain icons and text. Text labels should be short and have a clear relation to content. - - - ), - }, - { - title: "Don'ts", - content: ( - - - Do not use tabs to move through sequential content that needs to be read in a particular order. - - - Avoid using tabs for comparing content across multiple tabs, such as different sizes of the same item. - - - ), - }, - { - title: "Placement and alignment", - subSections: [ - { - title: "Placement", - content: ( - <> - - There are two variations of tabs, default and container. They are hierarchically the same and should never - be nested within each other. Tabs are usually placed above the content under the header o general - navigation. - -
- - Left: A standalone tab that can also be nested within components. - - - Right: Emphasized tab always paired with an attached background container. - - - } - > - Placement -
- - ), - subSections: [ - { - title: "Desktop", - content: ( - <> - - Default - - - When used for main navigation place tabs above the header using 100% of the width of the screen. - - - - - Container - - - When used for panel navigation place tabs in the top of the panel using all available width. - Scrollable tabs are allowed when there is not enough space available. - -
- Using scrollable tabs for panel navigation -
- - ), - }, - { - title: "Mobile", - content: ( - <> - - Main navigation - - - When used for main navigation place tabs above the header using 100% of the width of the screen. - -
- - Left: Main navigation tabs are place above the content. - - - Right: Don't stack more than 4 fixed tabs. - - - } - > - Mobile main navigation -
- - Panel navigation - -
- Mobile panel nagivation -
- - ), - }, - ], - }, - { - title: "Alignment", - content: ( - <> - - Tabs are always displayed horizontally in a single row. They can be left aligned or entered depending on - the content and context. - -
- - Left: Tabs are always displayed in a single row. - - - } - > - Alignment -
- - ), - }, - ], - }, - { - title: "Content", - content: ( - <> -
- - Left: Text labels should clearly and succinctly describe the content of the tab they - represent. - - - Center: Tab content should contain a cohesive set of items that share a common - characteristics. - - - Right: Tab labels should appear in a single row. They can use a second line if needed, - with truncated text. - - - } - > - Tabs content -
- - ), - subSections: [ - { - title: "Typography", - content: ( - <> - - Avoid to use all caps for tab labels. ALL CAPS is rarely a good idea because it's harder to read. - -
- Typography -
- - ), - }, - ], - }, - { - title: "Behavior and interaction", - subSections: [ - { - title: "Main navigation", - content: ( - - Users can navigate between tabs by tapping a tab, or by performing a swipe gesture over content in mobile - devices. - - ), - }, - { - title: "Panel navigation", - content: ( - <> - - Interacting with the tabs makes the content scrolls to the point that is associated with that specific - tab, while the tabs keep fixed at the top of the container. - -
- Panel navigation -
-
- - The use of scrollable tabs in panel navigation could cause swipe interferences with OS navigation. - - Do not use main navigation if they only affect an specific panel. - - } - > - Scrollable panel -
- - ), - }, - ], - }, -]; - -const TabsUsagePage = () => { - return ( - - - - - - - ); -}; - -export default TabsUsagePage; diff --git a/apps/website/screens/components/tabs/usage/images/tabs_alignment.png b/apps/website/screens/components/tabs/usage/images/tabs_alignment.png deleted file mode 100644 index 01bb4def5a31126ecca2ea35388214a13555e8dd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12865 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 diff --git a/apps/website/screens/components/tabs/usage/images/tabs_default_placement.png b/apps/website/screens/components/tabs/usage/images/tabs_default_placement.png deleted file mode 100644 index b928c994df230887fee587cf2a32de706dbc98b8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7704 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�eRez;f|GYsJT-0A}<{NYQ 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 diff --git a/apps/website/screens/components/tabs/usage/images/tabs_panel_navigation.png b/apps/website/screens/components/tabs/usage/images/tabs_panel_navigation.png deleted file mode 100644 index 654679a5131793c10e0cbfaa2031069cf2c47f9a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16791 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 IbZr0pUmMvN*#H0l diff --git a/apps/website/screens/components/tabs/usage/images/tabs_placement.png b/apps/website/screens/components/tabs/usage/images/tabs_placement.png deleted file mode 100644 index 2a10dbb080a80dd7c71a686709bdba754148221b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21538 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 diff --git a/apps/website/screens/components/tabs/usage/images/tabs_scrollable_placement.png b/apps/website/screens/components/tabs/usage/images/tabs_scrollable_placement.png deleted file mode 100644 index bc34d4a7e6ad2ec6fd0e96b1577e932cb506ffe8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7792 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 DVXOWx From ba55c3a9c7ede09ddf2759bd1241df4cfd15b4e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Iv=C3=A1n=20G=C3=B3mez=20Pinta?= <44321109+GomezIvann@users.noreply.github.com> Date: Thu, 20 Mar 2025 13:54:04 +0100 Subject: [PATCH 04/12] Tabs scroll fixes --- .../components/tabs/code/TabsCodePage.tsx | 212 +++++++++--------- packages/lib/src/tabs/Tabs.tsx | 78 +++---- 2 files changed, 141 insertions(+), 149 deletions(-) diff --git a/apps/website/screens/components/tabs/code/TabsCodePage.tsx b/apps/website/screens/components/tabs/code/TabsCodePage.tsx index 9e605996b6..cd2a2bc2d1 100644 --- a/apps/website/screens/components/tabs/code/TabsCodePage.tsx +++ b/apps/website/screens/components/tabs/code/TabsCodePage.tsx @@ -27,19 +27,6 @@ const sections = [ - - - - - defaultActiveTabIndex - - - - number - - Initially active tab, only when it is uncontrolled. - - - @@ -59,60 +46,30 @@ const sections = [ - - tabs + {/* TODO: Swap experimental for required once old logic is removed */} + + children - - { - "{ label: string, icon: string | (React.ReactNode & React.SVGProps ), isDisabled: boolean, notificationNumber: boolean | number }[]" - } - + React.ReactNode - An array of objects representing the tabs. Each of them has the following properties: -

    -
  • - label: Tab label. -
  • -
  • - icon:{" "} - - Material Symbol - {" "} - name or SVG element used as the icon that will be displayed in the tab. When using Material Symbols, - replace spaces with underscores. By default they are outlined, if you want it to be filled prefix the - symbol name with "filled_". -
  • -
  • - isDisabled: Whether the tab is disabled or not. If the component is uncontrolled and the - selected tab is disabled, the first non-disabled tab from the array will be selected. -
  • -
  • - notificationNumber: It can have boolean type or number type. If true, an empty badge will - appear. If false or if the tab is disabled, no badge will appear. If a number is specified, the - component will display a badge with the value as its label. Take into account that if that number is - greater than 99, it will appear as +99 in the badge. -
  • -
+ Contains one or more DxcTabs.Tab. - - {/* TODO: Swap experimental for required once old logic is removed */} - - children + + defaultActiveTabIndex - React.ReactNode - - - Contains one or more DxcTabs.Tab. + number + Initially active tab, only when it is uncontrolled. - @@ -125,6 +82,17 @@ const sections = [ 'left' + + margin + + 'xxsmall' | 'xsmall' | 'small' | 'medium' | 'large' | 'xlarge' | 'xxlarge' | Margin + + + Size of the margin to be applied to the component. You can pass an object with 'top', 'bottom', 'left' and + 'right' properties in order to specify different margin sizes. + + - + @@ -158,27 +126,59 @@ const sections = [ - - margin + tabIndex - 'xxsmall' | 'xsmall' | 'small' | 'medium' | 'large' | 'xlarge' | 'xxlarge' | Margin + number - Size of the margin to be applied to the component. You can pass an object with 'top', 'bottom', 'left' and - 'right' properties in order to specify different margin sizes. + Value of the tabindex attribute applied to each tab. + + + 0 - - - tabIndex - number + + + tabs + - Value of the tabindex attribute applied to each tab. + + { + "{ label: string, icon: string | (React.ReactNode & React.SVGProps ), isDisabled: boolean, notificationNumber: boolean | number }[]" + } + - 0 + An array of objects representing the tabs. Each of them has the following properties: +
    +
  • + label: Tab label. +
  • +
  • + icon:{" "} + + Material Symbol + {" "} + name or SVG element used as the icon that will be displayed in the tab. When using Material Symbols, + replace spaces with underscores. By default they are outlined, if you want it to be filled prefix the + symbol name with "filled_". +
  • +
  • + isDisabled: Whether the tab is disabled or not. If the component is uncontrolled and the + selected tab is disabled, the first non-disabled tab from the array will be selected. +
  • +
  • + notificationNumber: It can have boolean type or number type. If true, an empty badge will + appear. If false or if the tab is disabled, no badge will appear. If a number is specified, the + component will display a badge with the value as its label. Take into account that if that number is + greater than 99, it will appear as +99 in the badge. +
  • +
+ - @@ -211,6 +211,19 @@ const sections = [ false + + + + + children + + + + React.ReactNode + + Contains the component to be rendered when this tab is active. + - + defaultActive @@ -232,44 +245,46 @@ const sections = [ + icon - - - label - + string | {"(React.ReactNode & React.SVGProps )"} - string + + Material Symbol + {" "} + name or SVG element as the icon that will be displayed in the tab. When using Material Symbols, + replace spaces with underscores. By default they are outlined if you want it to be filled prefix the + symbol name with "filled_". - Tab label text. - - title + + label string - Tooltip text for the tab. + Tab label text. - - icon + notificationNumber - string | {"(React.ReactNode & React.SVGProps )"} + boolean | number - - Material Symbol - {" "} - name or SVG element as the icon that will be displayed in the tab. When using Material Symbols, - replace spaces with underscores. By default they are outlined if you want it to be filled prefix the - symbol name with "filled_". + If true, an empty badge will appear. If false or if the tab is disabled, no badge will appear. If a + number is specified, the component will display a badge with the value as its label. Take into account + that if that number is greater than 99, it will appear as +99 in the badge. + + + false - - onClick @@ -287,31 +302,16 @@ const sections = [ This function will be called when the user hovers this tab. - - - notificationNumber - - boolean | number - - - If true, an empty badge will appear. If false or if the tab is disabled, no badge will appear. If a - number is specified, the component will display a badge with the value as its label. Take into account - that if that number is greater than 99, it will appear as +99 in the badge. - - - false - - - - children + title - React.ReactNode + string - Contains the component to be rendered when this tab is active. + Tooltip text for the tab. - @@ -356,15 +356,13 @@ const sections = [ }, ]; -const TabsUsagePage = () => { - return ( - - - - - - - ); -}; +const TabsCodePage = () => ( + + + + + + +); -export default TabsUsagePage; +export default TabsCodePage; diff --git a/packages/lib/src/tabs/Tabs.tsx b/packages/lib/src/tabs/Tabs.tsx index f430e4c110..c1a0511ddf 100644 --- a/packages/lib/src/tabs/Tabs.tsx +++ b/packages/lib/src/tabs/Tabs.tsx @@ -44,14 +44,12 @@ const Underline = styled.div` const Tabs = styled.div` display: flex; background-color: var(--color-bg-neutral-lightest); - overflow: hidden; `; -const ScrollIndicator = styled.button` +const ScrollIndicatorButton = styled.button` display: grid; place-items: center; min-width: var(--height-xxl); - height: 100%; padding: 0; background: var(--color-bg-neutral-lightest); border: 0; @@ -73,7 +71,7 @@ const TabsContent = styled.div` display: inline-block; position: relative; white-space: nowrap; - overflow-x: scroll; + overflow-x: auto; ::-webkit-scrollbar { display: none; } @@ -104,7 +102,6 @@ const DxcTabs = ({ () => Children.toArray(children) as ReactElement[], [children] ); - const [activeTabLabel, setActiveTabLabel] = useState(() => { const hasActiveChild = childrenArray.some( (child) => isValidElement(child) && (child.props.active || child.props.defaultActive) && !child.props.disabled @@ -117,23 +114,15 @@ const DxcTabs = ({ return isValidElement(initialActiveTab) ? initialActiveTab.props.label : ""; }); - const [innerFocusIndex, setInnerFocusIndex] = useState(null); const [countClick, setCountClick] = useState(0); - const [totalTabsWidth, setTotalTabsWidth] = useState(0); - const [translateScroll, setTranslateScroll] = useState(0); - const [scrollRightEnabled, setScrollRightEnabled] = useState(true); + const [innerFocusIndex, setInnerFocusIndex] = useState(null); const [scrollLeftEnabled, setScrollLeftEnabled] = useState(false); + const [scrollRightEnabled, setScrollRightEnabled] = useState(true); + const [translateScroll, setTranslateScroll] = useState(0); + const [totalTabsWidth, setTotalTabsWidth] = useState(0); const refTabList = useRef(null); - const viewWidth = useResize(refTabList); const translatedLabels = useContext(HalstackLanguageContext); - const enabledScrollIndicators = useMemo(() => viewWidth < totalTabsWidth, [viewWidth]); - - useEffect(() => { - if (refTabList.current) { - setTotalTabsWidth((refTabList.current.firstElementChild as HTMLElement)?.offsetWidth); - } - }, []); - + const viewWidth = useResize(refTabList); const contextValue = useMemo(() => { const focusedChild = innerFocusIndex != null ? childrenArray[innerFocusIndex] : null; return { @@ -144,17 +133,17 @@ const DxcTabs = ({ setActiveLabel: setActiveTabLabel, tabIndex, }; - }, [iconPosition, tabIndex, innerFocusIndex, activeTabLabel, childrenArray]); + }, [activeTabLabel, childrenArray, iconPosition, innerFocusIndex, tabIndex]); const scrollLeft = () => { - const scrollWidth = (refTabList?.current?.offsetHeight ?? 0) * 0.75; + const offsetHeight = refTabList?.current?.offsetHeight ?? 0; let moveX = 0; - if (countClick <= scrollWidth) { + if (countClick <= offsetHeight) { moveX = 0; setScrollLeftEnabled(false); setScrollRightEnabled(true); } else { - moveX = countClick - scrollWidth; + moveX = countClick - offsetHeight * 2; setScrollRightEnabled(true); setScrollLeftEnabled(true); } @@ -164,14 +153,13 @@ const DxcTabs = ({ const scrollRight = () => { const offsetHeight = refTabList?.current?.offsetHeight ?? 0; - const scrollWidth = offsetHeight * 0.75; let moveX = 0; - if (countClick + scrollWidth + offsetHeight >= totalTabsWidth) { + if (countClick + offsetHeight >= totalTabsWidth) { moveX = totalTabsWidth - offsetHeight; setScrollRightEnabled(false); setScrollLeftEnabled(true); } else { - moveX = countClick + scrollWidth; + moveX = countClick + offsetHeight * 2; setScrollLeftEnabled(true); setScrollRightEnabled(true); } @@ -202,41 +190,47 @@ const DxcTabs = ({ } }; + useEffect(() => { + if (refTabList.current) { + setTotalTabsWidth(refTabList.current?.scrollWidth); + } + }, []); + return children ? ( <> - {enabledScrollIndicators && ( - - + )} {children} - {enabledScrollIndicators && ( - - + )} @@ -247,14 +241,14 @@ const DxcTabs = ({ ) : ( tabs != null && ( ) ); From 80aa5399635968fd885d8e90b85bec478d6f44d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Iv=C3=A1n=20G=C3=B3mez=20Pinta?= <44321109+GomezIvann@users.noreply.github.com> Date: Thu, 20 Mar 2025 14:17:22 +0100 Subject: [PATCH 05/12] Deprecated tabs component props --- apps/website/pages/components/tabs/code.tsx | 2 +- .../components/tabs/code/TabsCodePage.tsx | 24 ++++++++-------- .../tabs/overview/examples/scrollable.ts | 7 +++-- packages/lib/src/tabs/types.ts | 28 +++++++++++-------- 4 files changed, 33 insertions(+), 28 deletions(-) diff --git a/apps/website/pages/components/tabs/code.tsx b/apps/website/pages/components/tabs/code.tsx index 7c9623867b..b43f98c951 100644 --- a/apps/website/pages/components/tabs/code.tsx +++ b/apps/website/pages/components/tabs/code.tsx @@ -1,6 +1,6 @@ import Head from "next/head"; import type { ReactElement } from "react"; -import TabsCodePage from "screens/components/tabs/overview/TabsOverviewPage"; +import TabsCodePage from "screens/components/tabs/code/TabsCodePage"; import TabsPageLayout from "screens/components/tabs/TabsPageLayout"; const Code = () => ( diff --git a/apps/website/screens/components/tabs/code/TabsCodePage.tsx b/apps/website/screens/components/tabs/code/TabsCodePage.tsx index cd2a2bc2d1..3a4ac1b9b9 100644 --- a/apps/website/screens/components/tabs/code/TabsCodePage.tsx +++ b/apps/website/screens/components/tabs/code/TabsCodePage.tsx @@ -4,9 +4,9 @@ import QuickNavContainerLayout from "@/common/QuickNavContainerLayout"; import DocFooter from "@/common/DocFooter"; import Code from "@/common/Code"; import Example from "@/common/example/Example"; -import controlledLegacy from "./examples-old/controlled"; -import uncontrolledLegacy from "./examples-old/uncontrolled"; -import iconsLegacy from "./examples-old/icons"; +import controlledDeprecated from "./examples-old/controlled"; +import uncontrolledDeprecated from "./examples-old/uncontrolled"; +import iconsDeprecated from "./examples-old/icons"; import TableCode from "@/common/TableCode"; import StatusBadge from "@/common/StatusBadge"; import controlled from "./examples-new/controlled"; @@ -30,7 +30,7 @@ const sections = [ - + activeTabIndex @@ -62,7 +62,7 @@ const sections = [ - + defaultActiveTabIndex @@ -96,7 +96,7 @@ const sections = [ - + onTabClick @@ -112,7 +112,7 @@ const sections = [ - + onTabHover @@ -140,7 +140,7 @@ const sections = [ - + tabs @@ -338,19 +338,19 @@ const sections = [ ], }, { - title: "Examples (Legacy)", + title: "Examples (deprecated)", subSections: [ { title: "Controlled", - content: , + content: , }, { title: "Uncontrolled", - content: , + content: , }, { title: "Icons and notifications", - content: , + content: , }, ], }, diff --git a/apps/website/screens/components/tabs/overview/examples/scrollable.ts b/apps/website/screens/components/tabs/overview/examples/scrollable.ts index 1626c8439b..64e898439f 100644 --- a/apps/website/screens/components/tabs/overview/examples/scrollable.ts +++ b/apps/website/screens/components/tabs/overview/examples/scrollable.ts @@ -1,10 +1,10 @@ -import { DxcTabs, DxcInset, DxcFlex } from "@dxc-technology/halstack-react"; +import { DxcContainer, DxcTabs, DxcInset, DxcFlex } from "@dxc-technology/halstack-react"; const code = `() => { return ( -
+ <> @@ -19,13 +19,14 @@ const code = `() => { <> -
+
); }`; const scope = { + DxcContainer, DxcTabs, DxcInset, DxcFlex, diff --git a/packages/lib/src/tabs/types.ts b/packages/lib/src/tabs/types.ts index d890de4841..2691000135 100644 --- a/packages/lib/src/tabs/types.ts +++ b/packages/lib/src/tabs/types.ts @@ -74,41 +74,46 @@ export type TabProps = { type LegacyProps = { /** - * Initially active tab, only when it is uncontrolled. - */ - defaultActiveTabIndex?: number; - /** + * @deprecated This prop is deprecated and will be removed in future versions. Use the children prop instead. * The index of the active tab. If undefined, the component will be * uncontrolled and the active tab will be managed internally by the component. */ activeTabIndex?: number; /** - * An array of objects representing the tabs. + * @deprecated This prop is deprecated and will be removed in future versions. + * Initially active tab, only when it is uncontrolled. */ - tabs?: (TabLabelProps | TabIconProps)[]; + defaultActiveTabIndex?: number; /** * Whether the icon should appear above or to the left of the label. */ iconPosition?: "top" | "left"; /** + * Size of the margin to be applied to the component ('xxsmall' | 'xsmall' | 'small' | 'medium' | 'large' | 'xlarge' | 'xxlarge'). + * You can pass an object with 'top', 'bottom', 'left' and 'right' properties in order to specify different margin sizes. + */ + margin?: Space | Margin; + /** + * @deprecated This prop is deprecated and will be removed in future versions. * This function will be called when the user clicks on a tab. The index of the * clicked tab will be passed as a parameter. */ onTabClick?: (index: number) => void; /** + * @deprecated This prop is deprecated and will be removed in future versions. * This function will be called when the user hovers a tab.The index of the * hovered tab will be passed as a parameter. */ onTabHover?: (index: number | null) => void; - /** - * Size of the margin to be applied to the component ('xxsmall' | 'xsmall' | 'small' | 'medium' | 'large' | 'xlarge' | 'xxlarge'). - * You can pass an object with 'top', 'bottom', 'left' and 'right' properties in order to specify different margin sizes. - */ - margin?: Space | Margin; /** * Value of the tabindex attribute applied to each tab. */ tabIndex?: number; + /** + * @deprecated This prop is deprecated and will be removed in future versions. + * An array of objects representing the tabs. + */ + tabs?: (TabLabelProps | TabIconProps)[]; }; type NewProps = { @@ -128,7 +133,6 @@ type NewProps = { /** * Contains one or more DxcTabs.Tab. */ - // children?: React.ReactElement[]; children?: ReactNode; }; From 95ee00f840f428cb3696e3556476bb57689cdf85 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Iv=C3=A1n=20G=C3=B3mez=20Pinta?= <44321109+GomezIvann@users.noreply.github.com> Date: Tue, 25 Mar 2025 17:23:24 +0100 Subject: [PATCH 06/12] Tabs issues fixed! --- .../tabs/overview/TabsOverviewPage.tsx | 8 ++++---- packages/lib/src/tabs/Tab.tsx | 2 +- packages/lib/src/tabs/Tabs.tsx | 13 ++++++------ packages/lib/src/tabs/utils.ts | 20 +------------------ 4 files changed, 12 insertions(+), 31 deletions(-) diff --git a/apps/website/screens/components/tabs/overview/TabsOverviewPage.tsx b/apps/website/screens/components/tabs/overview/TabsOverviewPage.tsx index d408366b3c..6c71061f54 100644 --- a/apps/website/screens/components/tabs/overview/TabsOverviewPage.tsx +++ b/apps/website/screens/components/tabs/overview/TabsOverviewPage.tsx @@ -26,7 +26,7 @@ const sections = [ content: ( <> Tabs anatomy - + Container: the wrapper that holds all the tabs together in a row. @@ -108,7 +108,7 @@ const sections = [ title: "Tabs vs. Nav tabs", content: ( <> - Tabs vs Nav tabs + Tabs vs nav tabs Both tabs and{" "} @@ -142,7 +142,7 @@ const sections = [ an application.
- Clicking on a navigation tab may trigger a full page reload or route change. + Clicking on a nav tab may trigger a full page reload or route change.
@@ -176,7 +176,7 @@ const sections = [ ), }, { - title: "Keep tab babels short & clear", + title: "Keep tab labels short & clear", content: ( diff --git a/packages/lib/src/tabs/Tab.tsx b/packages/lib/src/tabs/Tab.tsx index f24179bf26..0f59446154 100644 --- a/packages/lib/src/tabs/Tab.tsx +++ b/packages/lib/src/tabs/Tab.tsx @@ -40,7 +40,7 @@ const Tab = styled.button<{ justify-content: center; gap: var(--spacing-gap-m); border: 0; - min-width: 90px; + min-width: max-content; max-width: 360px; ${({ iconPosition }) => iconPosition === "top" diff --git a/packages/lib/src/tabs/Tabs.tsx b/packages/lib/src/tabs/Tabs.tsx index c1a0511ddf..5ec46d0a57 100644 --- a/packages/lib/src/tabs/Tabs.tsx +++ b/packages/lib/src/tabs/Tabs.tsx @@ -17,7 +17,8 @@ import DxcTabsLegacy from "./TabsLegacy"; import { spaces } from "../common/variables"; import { HalstackLanguageContext } from "../HalstackContext"; import DxcIcon from "../icon/Icon"; -import { useResize, getPreviousTabIndex, getNextTabIndex } from "./utils"; +import { getPreviousTabIndex, getNextTabIndex } from "./utils"; +import useWidth from "../utils/useWidth"; const TabsContainer = styled.div<{ margin: TabsPropsType["margin"] }>` position: relative; @@ -78,8 +79,8 @@ const TabsContent = styled.div` `; const ScrollableTabsList = styled.div<{ - translateScroll: number; enabled: boolean; + translateScroll: number; }>` display: flex; ${({ enabled, translateScroll }) => @@ -91,7 +92,7 @@ const DxcTabs = ({ activeTabIndex, children, defaultActiveTabIndex, - iconPosition, + iconPosition = "left", margin, onTabClick, onTabHover, @@ -122,7 +123,7 @@ const DxcTabs = ({ const [totalTabsWidth, setTotalTabsWidth] = useState(0); const refTabList = useRef(null); const translatedLabels = useContext(HalstackLanguageContext); - const viewWidth = useResize(refTabList); + const viewWidth = useWidth(refTabList.current); const contextValue = useMemo(() => { const focusedChild = innerFocusIndex != null ? childrenArray[innerFocusIndex] : null; return { @@ -191,9 +192,7 @@ const DxcTabs = ({ }; useEffect(() => { - if (refTabList.current) { - setTotalTabsWidth(refTabList.current?.scrollWidth); - } + if (refTabList.current) setTotalTabsWidth(refTabList.current?.getBoundingClientRect().width); }, []); return children ? ( diff --git a/packages/lib/src/tabs/utils.ts b/packages/lib/src/tabs/utils.ts index 8f9b7c7f33..428da17890 100644 --- a/packages/lib/src/tabs/utils.ts +++ b/packages/lib/src/tabs/utils.ts @@ -1,4 +1,4 @@ -import { MutableRefObject, useState, useCallback, useEffect, ReactElement } from "react"; +import { ReactElement } from "react"; import { TabProps } from "./types"; export const getNextTabIndex = (array: ReactElement[], initialIndex: number): number => { @@ -16,21 +16,3 @@ export const getPreviousTabIndex = (array: ReactElement[], initialInde } return index; }; - -export const useResize = (refTabList: MutableRefObject) => { - const [viewWidth, setViewWidth] = useState(0); - - const handleWindowSizeChange = useCallback(() => { - setViewWidth(refTabList?.current?.offsetWidth ?? 0); - }, [refTabList]); - - useEffect(() => { - handleWindowSizeChange(); - window.addEventListener("resize", handleWindowSizeChange); - return () => { - window.removeEventListener("resize", handleWindowSizeChange); - }; - }, [handleWindowSizeChange]); - - return viewWidth; -}; From 1c08c5eb6fd587cbba76509b0fe34ec425128df0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Iv=C3=A1n=20G=C3=B3mez=20Pinta?= <44321109+GomezIvann@users.noreply.github.com> Date: Tue, 25 Mar 2025 17:33:18 +0100 Subject: [PATCH 07/12] Adding Resize Observer to tests --- packages/lib/src/tabs/Tabs.test.tsx | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/packages/lib/src/tabs/Tabs.test.tsx b/packages/lib/src/tabs/Tabs.test.tsx index 82362b39dd..7518e6f0eb 100644 --- a/packages/lib/src/tabs/Tabs.test.tsx +++ b/packages/lib/src/tabs/Tabs.test.tsx @@ -2,6 +2,12 @@ import "@testing-library/jest-dom"; import { fireEvent, render } from "@testing-library/react"; import DxcTabs from "./Tabs"; +(global as any).ResizeObserver = class ResizeObserver { + observe() {} + unobserve() {} + disconnect() {} +}; + const sampleTabs = ( From eb420845f2865b7f7b0f37c0eeb62ca1d9d7d94b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Iv=C3=A1n=20G=C3=B3mez=20Pinta?= <44321109+GomezIvann@users.noreply.github.com> Date: Wed, 26 Mar 2025 11:33:53 +0100 Subject: [PATCH 08/12] Tabs updates --- packages/lib/src/tabs/Tabs.tsx | 13 ++++++++++--- packages/lib/src/utils/useWidth.ts | 5 +++++ 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/packages/lib/src/tabs/Tabs.tsx b/packages/lib/src/tabs/Tabs.tsx index 5ec46d0a57..b01baa55e4 100644 --- a/packages/lib/src/tabs/Tabs.tsx +++ b/packages/lib/src/tabs/Tabs.tsx @@ -4,7 +4,7 @@ import { KeyboardEvent, ReactElement, useContext, - useEffect, + useLayoutEffect, useMemo, useRef, useState, @@ -191,8 +191,15 @@ const DxcTabs = ({ } }; - useEffect(() => { - if (refTabList.current) setTotalTabsWidth(refTabList.current?.getBoundingClientRect().width); + useLayoutEffect(() => { + if (refTabList.current) + setTotalTabsWidth(() => { + let total = 0; + refTabList.current?.querySelectorAll('[role="tab"]').forEach((tab) => { + total += (tab as HTMLElement).offsetWidth; + }); + return total; + }); }, []); return children ? ( diff --git a/packages/lib/src/utils/useWidth.ts b/packages/lib/src/utils/useWidth.ts index 96171bc9aa..a17ff906fb 100644 --- a/packages/lib/src/utils/useWidth.ts +++ b/packages/lib/src/utils/useWidth.ts @@ -1,5 +1,10 @@ import { useLayoutEffect, useState } from "react"; +/** + * Custom hook to get the width of an element and keep it updated when it changes. + * @param target + * @returns + */ const useWidth = (target: T | null) => { const [width, setWidth] = useState(0); From 2839b93e6bc60b609ceb3a153a4c26a0a85a4ce1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Iv=C3=A1n=20G=C3=B3mez=20Pinta?= <44321109+GomezIvann@users.noreply.github.com> Date: Wed, 26 Mar 2025 11:59:38 +0100 Subject: [PATCH 09/12] Adding missing token --- packages/lib/src/tabs/Tab.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/lib/src/tabs/Tab.tsx b/packages/lib/src/tabs/Tab.tsx index 0f59446154..bc9cd95fd2 100644 --- a/packages/lib/src/tabs/Tab.tsx +++ b/packages/lib/src/tabs/Tab.tsx @@ -39,7 +39,7 @@ const Tab = styled.button<{ align-items: center; justify-content: center; gap: var(--spacing-gap-m); - border: 0; + border: var(--border-width-none); min-width: max-content; max-width: 360px; ${({ iconPosition }) => From 38af8545434bbcb53d486a657de42e92e13d06a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Iv=C3=A1n=20G=C3=B3mez=20Pinta?= <44321109+GomezIvann@users.noreply.github.com> Date: Thu, 27 Mar 2025 14:42:26 +0100 Subject: [PATCH 10/12] Tabs fixes --- apps/website/pages/_app.tsx | 17 ++--- packages/lib/src/tabs/Tab.tsx | 100 +++++++++++++------------ packages/lib/src/tabs/Tabs.stories.tsx | 51 +++++++------ 3 files changed, 86 insertions(+), 82 deletions(-) diff --git a/apps/website/pages/_app.tsx b/apps/website/pages/_app.tsx index 2f3ff87952..83cd4ed682 100644 --- a/apps/website/pages/_app.tsx +++ b/apps/website/pages/_app.tsx @@ -30,10 +30,8 @@ const ApplicationLayoutWrapper = ({ condition, wrapper, children }: ApplicationL const App = ({ Component, pageProps }: AppPropsWithLayout) => { const getLayout = Component.getLayout || ((page) => page); const componentWithLayout = getLayout(); - const [filter, setFilter] = useState(""); const { asPath: currentPath } = useRouter(); - const filteredLinks = useMemo(() => { const filtered: LinksSectionDetails[] = []; LinksSections.map((section) => { @@ -47,17 +45,10 @@ const App = ({ Component, pageProps }: AppPropsWithLayout) => { return filtered; }, [filter]); - const onFilterInputChange = ({ value }: { value: string }) => { - setFilter(value); - }; - const matchPaths = (linkPath: string) => { + const desiredPaths = [linkPath, `${linkPath}/code`]; const pathToBeMatched = currentPath?.split("#")[0]?.slice(0, -1); - const desiredPaths = [linkPath, `${linkPath}/specifications`, `${linkPath}/usage`]; - if (pathToBeMatched) { - return desiredPaths.includes(pathToBeMatched); - } - return false; + return pathToBeMatched ? desiredPaths.includes(pathToBeMatched) : false; }; return ( @@ -77,7 +68,9 @@ const App = ({ Component, pageProps }: AppPropsWithLayout) => { { + setFilter(value); + }} size="fillParent" clearable margin={{ diff --git a/packages/lib/src/tabs/Tab.tsx b/packages/lib/src/tabs/Tab.tsx index bc9cd95fd2..f807f8d47a 100644 --- a/packages/lib/src/tabs/Tab.tsx +++ b/packages/lib/src/tabs/Tab.tsx @@ -6,6 +6,14 @@ import { Tooltip } from "../tooltip/Tooltip"; import TabsContext from "./TabsContext"; import { TabProps, TabsContextProps } from "./types"; +const TabContainer = styled.div<{ + iconPosition: TabsContextProps["iconPosition"]; +}>` + display: grid; + grid-template-rows: 1fr auto; + ${({ iconPosition }) => (iconPosition === "top" ? "height: 72px;" : "height: var(--height-xxl);")} +`; + export const sharedTabStyles = ` background-color: var(--color-bg-neutral-lightest); color: var(--color-fg-neutral-stronger); @@ -21,8 +29,8 @@ export const sharedTabStyles = ` background: var(--color-bg-primary-lighter); } &:focus:enabled { - outline: var(--border-width-s) var(--border-style-default) var(--border-color-primary-stronger); - outline-offset: -1px; + outline: var(--border-width-m) var(--border-style-default) var(--border-color-secondary-medium); + outline-offset: -2px; } &:disabled { color: var(--color-fg-neutral-medium); @@ -31,10 +39,8 @@ export const sharedTabStyles = ` `; const Tab = styled.button<{ - hasLabelAndIcon: boolean; iconPosition: TabsContextProps["iconPosition"]; }>` - position: relative; display: flex; align-items: center; justify-content: center; @@ -42,11 +48,9 @@ const Tab = styled.button<{ border: var(--border-width-none); min-width: max-content; max-width: 360px; - ${({ iconPosition }) => - iconPosition === "top" - ? "padding: var(--spacing-padding-xs) var(--spacing-padding-m); height: 72px;" - : "padding: var(--spacing-gap-s) var(--spacing-padding-m); height: var(--height-xxl);"} overflow: hidden; + padding: ${({ iconPosition }) => (iconPosition === "top" ? "var(--spacing-padding-xs)" : "var(--spacing-gap-s)")} + var(--spacing-padding-l); ${sharedTabStyles} `; @@ -85,9 +89,6 @@ const BadgeContainer = styled.div<{ `; const Underline = styled.span<{ active: boolean }>` - position: absolute; - bottom: 0; - left: 0; width: 100%; height: ${({ active }) => (active ? "var(--border-width-m)" : "var(--border-width-s)")}; background-color: ${({ active }) => @@ -131,46 +132,47 @@ const DxcTab = forwardRef( return ( - { - if (!isControlled) setActiveLabel?.(label); - onClick?.(); - }} - onKeyDown={handleOnKeyDown} - onMouseEnter={() => onHover?.()} - ref={(anchorRef) => { - tabRef.current = anchorRef; - if (ref) { - if (typeof ref === "function") ref(anchorRef); - else { - const currentRef = ref as MutableRefObject; - currentRef.current = anchorRef; + + { + if (!isControlled) setActiveLabel?.(label); + onClick?.(); + }} + onKeyDown={handleOnKeyDown} + onMouseEnter={() => onHover?.()} + ref={(anchorRef) => { + tabRef.current = anchorRef; + if (ref) { + if (typeof ref === "function") ref(anchorRef); + else { + const currentRef = ref as MutableRefObject; + currentRef.current = anchorRef; + } } - } - }} - role="tab" - tabIndex={activeLabel === label && !disabled ? tabIndex : -1} - type="button" - > - - {icon && {typeof icon === "string" ? : icon}} - - - {!disabled && notificationNumber && ( - - - - )} + }} + role="tab" + tabIndex={activeLabel === label && !disabled ? tabIndex : -1} + type="button" + > + + {icon && {typeof icon === "string" ? : icon}} + + + {!disabled && notificationNumber && ( + + + + )} + - + ); } diff --git a/packages/lib/src/tabs/Tabs.stories.tsx b/packages/lib/src/tabs/Tabs.stories.tsx index f2f9bd4e43..e29dfa1bab 100644 --- a/packages/lib/src/tabs/Tabs.stories.tsx +++ b/packages/lib/src/tabs/Tabs.stories.tsx @@ -2,8 +2,9 @@ import { INITIAL_VIEWPORTS } from "@storybook/addon-viewport"; import ExampleContainer from "../../.storybook/components/ExampleContainer"; import Title from "../../.storybook/components/Title"; import DxcTabs from "./Tabs"; -import type { Space } from "../common/utils"; +import type { Margin, Space } from "../common/utils"; import { Meta, StoryObj } from "@storybook/react/*"; +import { userEvent, within } from "@storybook/test"; export default { title: "Tabs", @@ -21,7 +22,7 @@ const iconSVG = ( ); -const tabs = (margin?: Space) => ( +const tabs = (margin?: Space | Margin) => ( <> @@ -156,48 +157,48 @@ const tabsNotificationIcon = (iconPosition?: "top" | "left") => ( const Tabs = () => ( <> - - {tabs()} - </ExampleContainer> - <ExampleContainer> - <Title title="Disabled tabs" theme="light" level={4} /> - {disabledTabs} - </ExampleContainer> - <ExampleContainer> - <Title title="First two tabs disabled" theme="light" level={4} /> - {firstDisabledTabs} + <Title title="Default" theme="light" level={4} /> + {tabs({ bottom: "xxlarge" })} </ExampleContainer> <ExampleContainer pseudoState="pseudo-hover"> - <Title title="Hovered tabs" theme="light" level={4} /> + <Title title="Hovered" theme="light" level={4} /> {tabs()} </ExampleContainer> <ExampleContainer pseudoState="pseudo-focus"> - <Title title="Focused tabs" theme="light" level={4} /> + <Title title="Focused" theme="light" level={4} /> {tabs()} </ExampleContainer> <ExampleContainer pseudoState="pseudo-active"> - <Title title="Actived tabs" theme="light" level={4} /> + <Title title="Active" theme="light" level={4} /> {tabs()} </ExampleContainer> <ExampleContainer> - <Title title="With notification number" theme="light" level={4} /> - {tabsNotification()} + <Title title="Disabled" theme="light" level={4} /> + {firstDisabledTabs} </ExampleContainer> <ExampleContainer> - <Title title="With icon position top" theme="light" level={4} /> - {tabsIcon("top")} + <Title title="All tabs disabled" theme="light" level={4} /> + {disabledTabs} + </ExampleContainer> + <ExampleContainer> + <Title title="With notification number" theme="light" level={4} /> + {tabsNotification()} </ExampleContainer> <ExampleContainer> <Title title="With icon position left" theme="light" level={4} /> {tabsIcon()} </ExampleContainer> + <ExampleContainer> + <Title title="With icon position top" theme="light" level={4} /> + {tabsIcon("top")} + </ExampleContainer> <ExampleContainer> <Title title="With icon and notification number" theme="light" level={4} /> {tabsNotificationIcon()} </ExampleContainer> <ExampleContainer> - <Title title="With icon on the left and notification number" theme="light" level={4} /> - {tabsNotificationIcon()} + <Title title="With icon on top and notification number" theme="light" level={4} /> + {tabsNotificationIcon("top")} </ExampleContainer> <Title title="Margins" theme="light" level={2} /> <ExampleContainer> @@ -256,6 +257,14 @@ type Story = StoryObj<typeof DxcTabs>; export const Chromatic: Story = { render: Tabs, + play: async ({ canvasElement }) => { + const canvas = within(canvasElement); + const tabs = canvas.getAllByRole("tab"); + console.log(tabs[0]); + if (tabs[0]) { + await userEvent.hover(tabs[0]); + } + }, }; export const ScrollableTabs: Story = { From da9b2ec2e2a6fb0852d46e49dad50a348bcb6430 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Iv=C3=A1n=20G=C3=B3mez=20Pinta?= <44321109+GomezIvann@users.noreply.github.com> Date: Fri, 28 Mar 2025 10:42:52 +0100 Subject: [PATCH 11/12] Tabs fixes --- packages/lib/src/tabs/Tab.tsx | 96 ++++++++++++-------------- packages/lib/src/tabs/Tabs.stories.tsx | 5 +- packages/lib/src/tabs/Tabs.tsx | 13 ++-- 3 files changed, 54 insertions(+), 60 deletions(-) diff --git a/packages/lib/src/tabs/Tab.tsx b/packages/lib/src/tabs/Tab.tsx index f807f8d47a..ea8a87b8d3 100644 --- a/packages/lib/src/tabs/Tab.tsx +++ b/packages/lib/src/tabs/Tab.tsx @@ -6,14 +6,6 @@ import { Tooltip } from "../tooltip/Tooltip"; import TabsContext from "./TabsContext"; import { TabProps, TabsContextProps } from "./types"; -const TabContainer = styled.div<{ - iconPosition: TabsContextProps["iconPosition"]; -}>` - display: grid; - grid-template-rows: 1fr auto; - ${({ iconPosition }) => (iconPosition === "top" ? "height: 72px;" : "height: var(--height-xxl);")} -`; - export const sharedTabStyles = ` background-color: var(--color-bg-neutral-lightest); color: var(--color-fg-neutral-stronger); @@ -39,18 +31,20 @@ export const sharedTabStyles = ` `; const Tab = styled.button<{ + hasLabelAndIcon: boolean; iconPosition: TabsContextProps["iconPosition"]; }>` + position: relative; display: flex; align-items: center; justify-content: center; gap: var(--spacing-gap-m); border: var(--border-width-none); - min-width: max-content; + height: ${({ iconPosition }) => (iconPosition === "top" ? "71px" : "47px")}; max-width: 360px; - overflow: hidden; + min-width: max-content; padding: ${({ iconPosition }) => (iconPosition === "top" ? "var(--spacing-padding-xs)" : "var(--spacing-gap-s)")} - var(--spacing-padding-l); + var(--spacing-padding-m); ${sharedTabStyles} `; @@ -89,6 +83,9 @@ const BadgeContainer = styled.div<{ `; const Underline = styled.span<{ active: boolean }>` + position: absolute; + bottom: -1px; + left: 0; width: 100%; height: ${({ active }) => (active ? "var(--border-width-m)" : "var(--border-width-s)")}; background-color: ${({ active }) => @@ -132,47 +129,46 @@ const DxcTab = forwardRef( return ( <Tooltip label={title}> - <TabContainer iconPosition={iconPosition}> - <Tab - aria-selected={activeLabel === label} - disabled={disabled} - iconPosition={iconPosition} - onClick={() => { - if (!isControlled) setActiveLabel?.(label); - onClick?.(); - }} - onKeyDown={handleOnKeyDown} - onMouseEnter={() => onHover?.()} - ref={(anchorRef) => { - tabRef.current = anchorRef; - if (ref) { - if (typeof ref === "function") ref(anchorRef); - else { - const currentRef = ref as MutableRefObject<HTMLButtonElement | null>; - currentRef.current = anchorRef; - } + <Tab + aria-selected={activeLabel === label} + disabled={disabled} + hasLabelAndIcon={Boolean(icon && label)} + iconPosition={iconPosition} + onClick={() => { + if (!isControlled) setActiveLabel?.(label); + onClick?.(); + }} + onKeyDown={handleOnKeyDown} + onMouseEnter={() => onHover?.()} + ref={(anchorRef) => { + tabRef.current = anchorRef; + if (ref) { + if (typeof ref === "function") ref(anchorRef); + else { + const currentRef = ref as MutableRefObject<HTMLButtonElement | null>; + currentRef.current = anchorRef; } - }} - role="tab" - tabIndex={activeLabel === label && !disabled ? tabIndex : -1} - type="button" - > - <LabelIconContainer iconPosition={iconPosition}> - {icon && <IconContainer>{typeof icon === "string" ? <DxcIcon icon={icon} /> : icon}</IconContainer>} - <Label>{label}</Label> - </LabelIconContainer> - {!disabled && notificationNumber && ( - <BadgeContainer hasLabelAndIcon={Boolean(icon && label)} iconPosition={iconPosition}> - <DxcBadge - label={typeof notificationNumber === "number" ? notificationNumber : undefined} - mode="notification" - size="small" - /> - </BadgeContainer> - )} - </Tab> + } + }} + role="tab" + tabIndex={activeLabel === label && !disabled ? tabIndex : -1} + type="button" + > + <LabelIconContainer iconPosition={iconPosition}> + {icon && <IconContainer>{typeof icon === "string" ? <DxcIcon icon={icon} /> : icon}</IconContainer>} + <Label>{label}</Label> + </LabelIconContainer> + {!disabled && notificationNumber && ( + <BadgeContainer hasLabelAndIcon={Boolean(icon && label)} iconPosition={iconPosition}> + <DxcBadge + label={typeof notificationNumber === "number" ? notificationNumber : undefined} + mode="notification" + size="small" + /> + </BadgeContainer> + )} <Underline active={activeLabel === label} /> - </TabContainer> + </Tab> </Tooltip> ); } diff --git a/packages/lib/src/tabs/Tabs.stories.tsx b/packages/lib/src/tabs/Tabs.stories.tsx index e29dfa1bab..1561c52e5e 100644 --- a/packages/lib/src/tabs/Tabs.stories.tsx +++ b/packages/lib/src/tabs/Tabs.stories.tsx @@ -260,10 +260,7 @@ export const Chromatic: Story = { play: async ({ canvasElement }) => { const canvas = within(canvasElement); const tabs = canvas.getAllByRole("tab"); - console.log(tabs[0]); - if (tabs[0]) { - await userEvent.hover(tabs[0]); - } + if (tabs[0]) await userEvent.hover(tabs[0]); }, }; diff --git a/packages/lib/src/tabs/Tabs.tsx b/packages/lib/src/tabs/Tabs.tsx index b01baa55e4..1b8a5a0d4a 100644 --- a/packages/lib/src/tabs/Tabs.tsx +++ b/packages/lib/src/tabs/Tabs.tsx @@ -50,10 +50,11 @@ const Tabs = styled.div` const ScrollIndicatorButton = styled.button` display: grid; place-items: center; - min-width: var(--height-xxl); - padding: 0; background: var(--color-bg-neutral-lightest); border: 0; + min-width: 47px; + height: 47px; + padding: 0; ${sharedTabStyles} /* Scroll indicator arrow icon */ @@ -72,20 +73,19 @@ const TabsContent = styled.div` display: inline-block; position: relative; white-space: nowrap; - overflow-x: auto; - ::-webkit-scrollbar { - display: none; - } + overflow-x: hidden; `; const ScrollableTabsList = styled.div<{ enabled: boolean; + iconPosition: TabsPropsType["iconPosition"]; translateScroll: number; }>` display: flex; ${({ enabled, translateScroll }) => enabled ? `transform: translateX(${translateScroll}px)` : "transform: translateX(0px)"}; transition: all 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; + height: ${({ iconPosition }) => (iconPosition === "top" ? "72px" : "var(--height-xxl)")}; `; const DxcTabs = ({ @@ -220,6 +220,7 @@ const DxcTabs = ({ <TabsContent> <ScrollableTabsList enabled={viewWidth < totalTabsWidth} + iconPosition={iconPosition} onKeyDown={handleOnKeyDown} ref={refTabList} role="tablist" From 7bf83255a9bd6d88905ba99e6747a33ba9d6f61b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Iv=C3=A1n=20G=C3=B3mez=20Pinta?= <44321109+GomezIvann@users.noreply.github.com> Date: Fri, 28 Mar 2025 11:26:46 +0100 Subject: [PATCH 12/12] Overflow tabs fixed --- packages/lib/src/tabs/Tabs.tsx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/lib/src/tabs/Tabs.tsx b/packages/lib/src/tabs/Tabs.tsx index 1b8a5a0d4a..43a56a694b 100644 --- a/packages/lib/src/tabs/Tabs.tsx +++ b/packages/lib/src/tabs/Tabs.tsx @@ -73,7 +73,10 @@ const TabsContent = styled.div` display: inline-block; position: relative; white-space: nowrap; - overflow-x: hidden; + overflow-x: auto; + ::-webkit-scrollbar { + display: none; + } `; const ScrollableTabsList = styled.div<{