@drivy/cobalt 0.18.0 → 0.18.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/components/Accordion/index.js +4 -2
- package/components/Accordion/index.js.map +1 -1
- package/components/Tabs/index.js +5 -3
- package/components/Tabs/index.js.map +1 -1
- package/components/Tag/index.js +1 -1
- package/components/Tag/index.js.map +1 -1
- package/package.json +1 -1
- package/styles/components/Accordion/index.scss +7 -0
- package/styles/components/Tabs/index.scss +4 -8
- package/styles/components/Tag/index.scss +5 -7
- package/types/components/Accordion/index.d.ts +4 -0
- package/types/components/Tag/index.d.ts +2 -1
|
@@ -7,11 +7,13 @@ import { animated, useSpring } from '@react-spring/web';
|
|
|
7
7
|
import useElementHeight from '../../hooks/useElementHeight.js';
|
|
8
8
|
|
|
9
9
|
const accordionSpringConfig = { tension: 300, friction: 30, clamp: true };
|
|
10
|
-
const AccordionItemHeader = forwardRef(({ headingLevel = 4, className, children, ...props }, ref) => {
|
|
10
|
+
const AccordionItemHeader = forwardRef(({ headingLevel = 4, className, leftToggleIcon = false, children, ...props }, ref) => {
|
|
11
11
|
const { isExpanded } = useAccordionItemContext();
|
|
12
12
|
const Heading = `h${headingLevel}`;
|
|
13
13
|
return (React.createElement(Heading, null,
|
|
14
|
-
React.createElement(AccordionButton, { ref: ref, className: "cobalt-accordion__header",
|
|
14
|
+
React.createElement(AccordionButton, { ref: ref, className: cx("cobalt-accordion__header", {
|
|
15
|
+
"cobalt-accordion__header--left-toggle-icon": leftToggleIcon,
|
|
16
|
+
}), ...props },
|
|
15
17
|
React.createElement("span", { className: cx("cobalt-accordion__header-content", className) }, children),
|
|
16
18
|
React.createElement(ToggleIcon, { isOpen: isExpanded }))));
|
|
17
19
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/components/Accordion/index.tsx"],"sourcesContent":["import React, { forwardRef } from \"react\"\nimport cx from \"classnames\"\nimport {\n Accordion as ReachAccordion,\n AccordionItem as ReachAccordionItem,\n AccordionButton as ReachAccordionButton,\n AccordionPanel as ReachAccordionPanel,\n AccordionProps as ReachAccordionProps,\n AccordionItemProps as ReachAccordionItemProps,\n AccordionButtonProps as ReachAccordionButtonProps,\n useAccordionItemContext,\n AccordionPanelProps as ReachAccordionPanelProps,\n} from \"@reach/accordion\"\nimport ToggleIcon from \"./ToggleIcon\"\nimport { animated, useSpring } from \"@react-spring/web\"\nimport useElementHeight from \"../../hooks/useElementHeight\"\nexport { useAccordionItemContext } from \"@reach/accordion\"\n\ntype HeadingLevelMapType = {\n h2: 2\n h3: 3\n h4: 4\n h5: 5\n h6: 6\n}\n\ntype HeadingTag = keyof HeadingLevelMapType\nexport type AccordionItemHeaderPropsType = {\n /**\n * To improve the semantics of the markup further, the ARIA guidelines dictate\n * that each accordion item's button should be wrapped in an element with\n * role=\"heading\", or more simply, an HTML heading tag.\n * https://reach.tech/accordion/#accordion-headings\n */\n headingLevel?: HeadingLevelMapType[HeadingTag]\n className?: string\n} & ReachAccordionButtonProps\n\nexport type AccordionItemPanelPropsType = {\n className?: string\n} & ReachAccordionPanelProps\nexport type AccordionItemPropsType = {\n className?: string\n} & ReachAccordionItemProps\nexport type AccordionPropsType = {\n className?: string\n // We have to explicit them below to get displayed by Storybook\n // should work without but might be an issue on Storybook side\n collapsible?: ReachAccordionProps[\"collapsible\"]\n defaultIndex?: ReachAccordionProps[\"defaultIndex\"]\n index?: ReachAccordionProps[\"index\"]\n multiple?: ReachAccordionProps[\"multiple\"]\n onChange?: ReachAccordionProps[\"onChange\"]\n} & ReachAccordionProps\n\nconst accordionSpringConfig = { tension: 300, friction: 30, clamp: true }\n\nexport const AccordionItemHeader = forwardRef<\n HTMLButtonElement,\n AccordionItemHeaderPropsType\n>(({ headingLevel = 4, className, children, ...props }
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/components/Accordion/index.tsx"],"sourcesContent":["import React, { forwardRef } from \"react\"\nimport cx from \"classnames\"\nimport {\n Accordion as ReachAccordion,\n AccordionItem as ReachAccordionItem,\n AccordionButton as ReachAccordionButton,\n AccordionPanel as ReachAccordionPanel,\n AccordionProps as ReachAccordionProps,\n AccordionItemProps as ReachAccordionItemProps,\n AccordionButtonProps as ReachAccordionButtonProps,\n useAccordionItemContext,\n AccordionPanelProps as ReachAccordionPanelProps,\n} from \"@reach/accordion\"\nimport ToggleIcon from \"./ToggleIcon\"\nimport { animated, useSpring } from \"@react-spring/web\"\nimport useElementHeight from \"../../hooks/useElementHeight\"\nexport { useAccordionItemContext } from \"@reach/accordion\"\n\ntype HeadingLevelMapType = {\n h2: 2\n h3: 3\n h4: 4\n h5: 5\n h6: 6\n}\n\ntype HeadingTag = keyof HeadingLevelMapType\nexport type AccordionItemHeaderPropsType = {\n /**\n * To improve the semantics of the markup further, the ARIA guidelines dictate\n * that each accordion item's button should be wrapped in an element with\n * role=\"heading\", or more simply, an HTML heading tag.\n * https://reach.tech/accordion/#accordion-headings\n */\n headingLevel?: HeadingLevelMapType[HeadingTag]\n className?: string\n leftToggleIcon?: boolean\n} & ReachAccordionButtonProps\n\nexport type AccordionItemPanelPropsType = {\n className?: string\n} & ReachAccordionPanelProps\nexport type AccordionItemPropsType = {\n className?: string\n} & ReachAccordionItemProps\nexport type AccordionPropsType = {\n className?: string\n // We have to explicit them below to get displayed by Storybook\n // should work without but might be an issue on Storybook side\n collapsible?: ReachAccordionProps[\"collapsible\"]\n defaultIndex?: ReachAccordionProps[\"defaultIndex\"]\n index?: ReachAccordionProps[\"index\"]\n multiple?: ReachAccordionProps[\"multiple\"]\n onChange?: ReachAccordionProps[\"onChange\"]\n} & ReachAccordionProps\n\nconst accordionSpringConfig = { tension: 300, friction: 30, clamp: true }\n\nexport const AccordionItemHeader = forwardRef<\n HTMLButtonElement,\n AccordionItemHeaderPropsType\n>(\n (\n { headingLevel = 4, className, leftToggleIcon = false, children, ...props },\n ref\n ) => {\n const { isExpanded } = useAccordionItemContext()\n const Heading = `h${headingLevel}` as HeadingTag\n return (\n <Heading>\n <ReachAccordionButton\n ref={ref}\n className={cx(\"cobalt-accordion__header\", {\n \"cobalt-accordion__header--left-toggle-icon\": leftToggleIcon,\n })}\n {...props}\n >\n <span className={cx(\"cobalt-accordion__header-content\", className)}>\n {children}\n </span>\n <ToggleIcon isOpen={isExpanded} />\n </ReachAccordionButton>\n </Heading>\n )\n }\n)\nAccordionItemHeader.displayName = \"Accordion.Item.Header\"\n\nconst AnimatedAccordionPanel = animated(ReachAccordionPanel)\nexport const AccordionItemPanel = ({\n children,\n className,\n ...props\n}: AccordionItemPanelPropsType) => {\n const { isExpanded } = useAccordionItemContext()\n const { ref, height } = useElementHeight<HTMLDivElement>()\n const animation = useSpring({\n opacity: isExpanded ? 1 : 0,\n height: isExpanded ? height : 0,\n overflow: \"hidden\",\n config: accordionSpringConfig,\n })\n\n return (\n <AnimatedAccordionPanel\n style={animation}\n // We need to set hidden to false for the exit animations to work\n // but the panel should still be hidden from the accessibility tree\n // when the panel is closed. We'll use aria-hidden instead.\n hidden={false}\n aria-hidden={!isExpanded || undefined}\n {...props}\n >\n <div ref={ref} className={cx(\"cobalt-accordion__panel\", className)}>\n {children}\n </div>\n </AnimatedAccordionPanel>\n )\n}\nAccordionItemPanel.displayName = \"Accordion.Item.Panel\"\n\nexport const AccordionItem = ({\n children,\n className,\n ...props\n}: AccordionItemPropsType) => {\n return (\n <ReachAccordionItem\n className={cx(\"cobalt-accordions-list__item\", className)}\n {...props}\n >\n {children}\n </ReachAccordionItem>\n )\n}\nAccordionItem.displayName = \"Accordion.Item\"\nAccordionItem.Header = AccordionItemHeader\nAccordionItem.Panel = AccordionItemPanel\n\nconst Accordion = ({\n className,\n children,\n index,\n collapsible = true,\n multiple = false,\n ...props\n}: AccordionPropsType) => {\n const hasIndex = index === 0 || !!index\n return (\n <ReachAccordion\n className={cx(\"cobalt-accordions-list\", className)}\n collapsible={!hasIndex && collapsible}\n multiple={!hasIndex && multiple}\n index={index}\n {...props}\n >\n {children}\n </ReachAccordion>\n )\n}\nAccordion.Item = AccordionItem\n\nexport default Accordion\n"],"names":["ReachAccordionButton","ReachAccordionPanel","ReachAccordionItem","ReachAccordion"],"mappings":"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"}
|
package/components/Tabs/index.js
CHANGED
|
@@ -3,7 +3,9 @@ import { Tabs as Tabs$1, TabList, TabPanels, TabPanel, Tab as Tab$1 } from '@rea
|
|
|
3
3
|
import cx from 'classnames';
|
|
4
4
|
import { useSpring } from '@react-spring/web';
|
|
5
5
|
import throttle from 'lodash.throttle';
|
|
6
|
-
import
|
|
6
|
+
import '../Icon/index.js';
|
|
7
|
+
import ChevronLeftIcon from '../Icon/__generated__/ChevronLeftIcon.js';
|
|
8
|
+
import ChevronRightIcon from '../Icon/__generated__/ChevronRightIcon.js';
|
|
7
9
|
|
|
8
10
|
const SCROLL_STEP = 150;
|
|
9
11
|
// Only for the API, render nothing, we use InternalTab component internally
|
|
@@ -125,10 +127,10 @@ const Tabs = ({ children, defaultTabIndex, onChange, subLevel, }) => {
|
|
|
125
127
|
isScrollable && (React.createElement(React.Fragment, null,
|
|
126
128
|
React.createElement("button", { className: "cobalt-tabs__nav-prev", onClick: onScrollPrev, disabled: !scrollButtonsEnabled.prev },
|
|
127
129
|
React.createElement("span", { className: "cobalt-tabs__nav-icon" },
|
|
128
|
-
React.createElement(
|
|
130
|
+
React.createElement(ChevronLeftIcon, { color: "accent" }))),
|
|
129
131
|
React.createElement("button", { className: "cobalt-tabs__nav-next", onClick: onScrollNext, disabled: !scrollButtonsEnabled.next },
|
|
130
132
|
React.createElement("span", { className: "cobalt-tabs__nav-icon" },
|
|
131
|
-
React.createElement(
|
|
133
|
+
React.createElement(ChevronRightIcon, { color: "accent" }))))),
|
|
132
134
|
!!tabsChildren.length && (React.createElement(TabPanels, null, tabsChildren.map((tabChildren, index) => (React.createElement(TabPanel, { className: "cobalt-tabs__panel", key: index }, tabChildren)))))));
|
|
133
135
|
};
|
|
134
136
|
Tabs.Tab = Tab;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/components/Tabs/index.tsx"],"sourcesContent":["import React, {\n FC,\n useRef,\n useLayoutEffect,\n useState,\n useCallback,\n} from \"react\"\nimport {\n Tabs as ReachTabs,\n TabList as ReachTabList,\n Tab as ReachTab,\n TabPanels as ReachTabPanels,\n TabPanel as ReachTabPanel,\n} from \"@reach/tabs\"\nimport cx from \"classnames\"\nimport { useSpring } from \"@react-spring/web\"\n\nimport { throttle } from \"../utils\"\nimport { Icon } from \"../Icon\"\n\nconst SCROLL_STEP = 150\n\nexport type TabsPropsType = {\n /**\n * Index of the initial actived tab (first tab by default)\n */\n defaultTabIndex?: number\n /**\n * Method to be run on tab change\n */\n onChange?: (index: number) => void\n /**\n * Left aligned tabs with no uppercased labels\n */\n subLevel?: boolean\n}\n\ntype TabPropsType = {\n /**\n * Label/title of the tab\n */\n label: string | React.ReactNode | ((isSelected?: boolean) => React.ReactNode)\n /**\n * Hypertext link. If provided, the tab will be an anchor\n */\n href?: string\n}\n\ntype InternalTabPropsType = {\n isSelected?: boolean // Provided by Reach TabList component\n href?: string\n children: TabPropsType[\"label\"]\n}\n\n// Only for the API, render nothing, we use InternalTab component internally\nexport const Tab: FC<TabPropsType> = () => null\nTab.displayName = \"Tab\"\n\nconst isTabComponent = (\n component: React.ReactNode\n): component is React.ReactElement<React.PropsWithChildren<TabPropsType>> =>\n React.isValidElement(component) && component.type === Tab\n\nconst InternalTab = (props: InternalTabPropsType) => {\n const { href, children, isSelected } = props\n return (\n <ReachTab\n {...props}\n {...(href ? { href, as: \"a\" } : { as: \"button\" })}\n className={cx(\"cobalt-tabs__label\", {\n \"cobalt-tabs__label--selected\": isSelected,\n })}\n >\n {typeof children === \"function\" ? children(isSelected) : children}\n </ReachTab>\n )\n}\nInternalTab.displayName = \"InternalTab\"\n\nexport const Tabs: FC<TabsPropsType> & { Tab: FC<TabPropsType> } = ({\n children,\n defaultTabIndex,\n onChange,\n subLevel,\n}) => {\n const [scrollDistance, setScrollDistance] = useState(0)\n const [scrollButtonsEnabled, setScrollButtonsEnabled] = useState({\n prev: false,\n next: true,\n })\n\n const labelListRef = useRef<HTMLDivElement>(null)\n\n const [, scrollLeftSpringRef] = useSpring(() => ({\n config: { tension: 300, friction: 30, clamp: true },\n springScrollLeft: 0,\n onChange: {\n springScrollLeft: (springScrollLeft) => {\n if (labelListRef?.current) {\n labelListRef.current.scrollLeft =\n springScrollLeft as unknown as number\n }\n },\n },\n }))\n\n const updateScrollDistance = () => {\n const scrollWidth = labelListRef?.current?.scrollWidth || 0\n const clientWidth = labelListRef?.current?.clientWidth || 0\n setScrollDistance(scrollWidth && clientWidth && scrollWidth - clientWidth)\n }\n\n const updateScrollButtonsState = () => {\n if (labelListRef?.current) {\n const newScrollButtonStates = { prev: true, next: true }\n if (labelListRef.current.scrollLeft <= 0) {\n newScrollButtonStates.prev = false\n }\n if (scrollDistance && labelListRef.current.scrollLeft >= scrollDistance) {\n newScrollButtonStates.next = false\n }\n setScrollButtonsEnabled(newScrollButtonStates)\n }\n }\n\n const updateStates = () => {\n updateScrollDistance()\n updateScrollButtonsState()\n }\n\n useLayoutEffect(() => {\n const throttledUpdate = throttle(updateStates, 300)\n window.addEventListener(\"resize\", throttledUpdate)\n return () => window.removeEventListener(\"resize\", throttledUpdate)\n }, [scrollDistance])\n\n // When the bar became scrollable/not scrollable, the scrollWidth will change\n // so we update states according to its change\n useLayoutEffect(() => {\n updateStates()\n }, [labelListRef?.current?.scrollWidth])\n\n const tabsPropsArray: TabPropsType[] = []\n const tabsChildren: typeof children[] = []\n let matchedHrefIndex: number | undefined = undefined\n React.Children.forEach(children, (child, index) => {\n if (isTabComponent(child)) {\n const { children: tabChildren, ...tabProps } = child.props\n tabsPropsArray.push(tabProps)\n // if no children, it will be null, nothing will be rendered\n tabsChildren.push(tabChildren)\n if (tabProps.href === window.location.pathname) {\n matchedHrefIndex = index\n }\n }\n })\n\n const scrollTabs = (scrollAmount: number) => {\n if (labelListRef?.current) {\n const newScrollButtonStates = { prev: true, next: true }\n const computedScrollLeft = labelListRef.current.scrollLeft + scrollAmount\n let newScrollLeft = computedScrollLeft\n\n // not scrolled at all\n if (computedScrollLeft <= 0) {\n newScrollButtonStates.prev = false\n newScrollLeft = 0\n }\n // scrolled at maximum\n if (scrollDistance && computedScrollLeft >= scrollDistance) {\n newScrollButtonStates.next = false\n newScrollLeft = scrollDistance\n }\n\n setScrollButtonsEnabled(newScrollButtonStates)\n scrollLeftSpringRef.start({\n springScrollLeft: newScrollLeft,\n immediate: false,\n })\n }\n }\n const onScrollPrev = useCallback(\n () => scrollTabs(-SCROLL_STEP),\n [scrollButtonsEnabled, labelListRef?.current?.scrollLeft]\n )\n const onScrollNext = useCallback(\n () => scrollTabs(SCROLL_STEP),\n [scrollButtonsEnabled, labelListRef?.current?.scrollLeft]\n )\n\n const isScrollable = !!scrollDistance\n\n const handleWheel = throttle(() => {\n if (labelListRef?.current) {\n updateScrollButtonsState()\n // Don't animate\n scrollLeftSpringRef.set({\n springScrollLeft: labelListRef.current.scrollLeft,\n })\n }\n }, 300)\n\n return (\n <ReachTabs\n className=\"cobalt-tabs\"\n defaultIndex={matchedHrefIndex || defaultTabIndex}\n onChange={onChange}\n >\n <ReachTabList\n className={cx(\"cobalt-tabs__labels\", {\n \"cobalt-tabs__labels--scrollable\": isScrollable,\n \"cobalt-tabs__labels--subLevel\": subLevel,\n })}\n onWheel={handleWheel}\n ref={labelListRef}\n >\n {tabsPropsArray.map((props, index) => (\n <InternalTab key={index} href={props.href}>\n {props.label}\n </InternalTab>\n ))}\n </ReachTabList>\n {isScrollable && (\n <>\n <button\n className=\"cobalt-tabs__nav-prev\"\n onClick={onScrollPrev}\n disabled={!scrollButtonsEnabled.prev}\n >\n <span className=\"cobalt-tabs__nav-icon\">\n <Icon source=\"chevronLeft\" color=\"indigo\" />\n </span>\n </button>\n <button\n className=\"cobalt-tabs__nav-next\"\n onClick={onScrollNext}\n disabled={!scrollButtonsEnabled.next}\n >\n <span className=\"cobalt-tabs__nav-icon\">\n <Icon source=\"chevronRight\" color=\"indigo\" />\n </span>\n </button>\n </>\n )}\n {!!tabsChildren.length && (\n <ReachTabPanels>\n {tabsChildren.map((tabChildren, index) => (\n <ReachTabPanel className=\"cobalt-tabs__panel\" key={index}>\n {tabChildren}\n </ReachTabPanel>\n ))}\n </ReachTabPanels>\n )}\n </ReachTabs>\n )\n}\nTabs.Tab = Tab\nTabs.displayName = \"Tabs\"\n\nexport default Tabs\n"],"names":["ReachTab","ReachTabs","ReachTabList","ReachTabPanels","ReachTabPanel"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/components/Tabs/index.tsx"],"sourcesContent":["import React, {\n FC,\n useRef,\n useLayoutEffect,\n useState,\n useCallback,\n} from \"react\"\nimport {\n Tabs as ReachTabs,\n TabList as ReachTabList,\n Tab as ReachTab,\n TabPanels as ReachTabPanels,\n TabPanel as ReachTabPanel,\n} from \"@reach/tabs\"\nimport cx from \"classnames\"\nimport { useSpring } from \"@react-spring/web\"\n\nimport { throttle } from \"../utils\"\nimport { ChevronLeftIcon, ChevronRightIcon } from \"../Icon\"\n\nconst SCROLL_STEP = 150\n\nexport type TabsPropsType = {\n /**\n * Index of the initial actived tab (first tab by default)\n */\n defaultTabIndex?: number\n /**\n * Method to be run on tab change\n */\n onChange?: (index: number) => void\n /**\n * Left aligned tabs with no uppercased labels\n */\n subLevel?: boolean\n}\n\ntype TabPropsType = {\n /**\n * Label/title of the tab\n */\n label: string | React.ReactNode | ((isSelected?: boolean) => React.ReactNode)\n /**\n * Hypertext link. If provided, the tab will be an anchor\n */\n href?: string\n}\n\ntype InternalTabPropsType = {\n isSelected?: boolean // Provided by Reach TabList component\n href?: string\n children: TabPropsType[\"label\"]\n}\n\n// Only for the API, render nothing, we use InternalTab component internally\nexport const Tab: FC<TabPropsType> = () => null\nTab.displayName = \"Tab\"\n\nconst isTabComponent = (\n component: React.ReactNode\n): component is React.ReactElement<React.PropsWithChildren<TabPropsType>> =>\n React.isValidElement(component) && component.type === Tab\n\nconst InternalTab = (props: InternalTabPropsType) => {\n const { href, children, isSelected } = props\n return (\n <ReachTab\n {...props}\n {...(href ? { href, as: \"a\" } : { as: \"button\" })}\n className={cx(\"cobalt-tabs__label\", {\n \"cobalt-tabs__label--selected\": isSelected,\n })}\n >\n {typeof children === \"function\" ? children(isSelected) : children}\n </ReachTab>\n )\n}\nInternalTab.displayName = \"InternalTab\"\n\nexport const Tabs: FC<TabsPropsType> & { Tab: FC<TabPropsType> } = ({\n children,\n defaultTabIndex,\n onChange,\n subLevel,\n}) => {\n const [scrollDistance, setScrollDistance] = useState(0)\n const [scrollButtonsEnabled, setScrollButtonsEnabled] = useState({\n prev: false,\n next: true,\n })\n\n const labelListRef = useRef<HTMLDivElement>(null)\n\n const [, scrollLeftSpringRef] = useSpring(() => ({\n config: { tension: 300, friction: 30, clamp: true },\n springScrollLeft: 0,\n onChange: {\n springScrollLeft: (springScrollLeft) => {\n if (labelListRef?.current) {\n labelListRef.current.scrollLeft =\n springScrollLeft as unknown as number\n }\n },\n },\n }))\n\n const updateScrollDistance = () => {\n const scrollWidth = labelListRef?.current?.scrollWidth || 0\n const clientWidth = labelListRef?.current?.clientWidth || 0\n setScrollDistance(scrollWidth && clientWidth && scrollWidth - clientWidth)\n }\n\n const updateScrollButtonsState = () => {\n if (labelListRef?.current) {\n const newScrollButtonStates = { prev: true, next: true }\n if (labelListRef.current.scrollLeft <= 0) {\n newScrollButtonStates.prev = false\n }\n if (scrollDistance && labelListRef.current.scrollLeft >= scrollDistance) {\n newScrollButtonStates.next = false\n }\n setScrollButtonsEnabled(newScrollButtonStates)\n }\n }\n\n const updateStates = () => {\n updateScrollDistance()\n updateScrollButtonsState()\n }\n\n useLayoutEffect(() => {\n const throttledUpdate = throttle(updateStates, 300)\n window.addEventListener(\"resize\", throttledUpdate)\n return () => window.removeEventListener(\"resize\", throttledUpdate)\n }, [scrollDistance])\n\n // When the bar became scrollable/not scrollable, the scrollWidth will change\n // so we update states according to its change\n useLayoutEffect(() => {\n updateStates()\n }, [labelListRef?.current?.scrollWidth])\n\n const tabsPropsArray: TabPropsType[] = []\n const tabsChildren: typeof children[] = []\n let matchedHrefIndex: number | undefined = undefined\n React.Children.forEach(children, (child, index) => {\n if (isTabComponent(child)) {\n const { children: tabChildren, ...tabProps } = child.props\n tabsPropsArray.push(tabProps)\n // if no children, it will be null, nothing will be rendered\n tabsChildren.push(tabChildren)\n if (tabProps.href === window.location.pathname) {\n matchedHrefIndex = index\n }\n }\n })\n\n const scrollTabs = (scrollAmount: number) => {\n if (labelListRef?.current) {\n const newScrollButtonStates = { prev: true, next: true }\n const computedScrollLeft = labelListRef.current.scrollLeft + scrollAmount\n let newScrollLeft = computedScrollLeft\n\n // not scrolled at all\n if (computedScrollLeft <= 0) {\n newScrollButtonStates.prev = false\n newScrollLeft = 0\n }\n // scrolled at maximum\n if (scrollDistance && computedScrollLeft >= scrollDistance) {\n newScrollButtonStates.next = false\n newScrollLeft = scrollDistance\n }\n\n setScrollButtonsEnabled(newScrollButtonStates)\n scrollLeftSpringRef.start({\n springScrollLeft: newScrollLeft,\n immediate: false,\n })\n }\n }\n const onScrollPrev = useCallback(\n () => scrollTabs(-SCROLL_STEP),\n [scrollButtonsEnabled, labelListRef?.current?.scrollLeft]\n )\n const onScrollNext = useCallback(\n () => scrollTabs(SCROLL_STEP),\n [scrollButtonsEnabled, labelListRef?.current?.scrollLeft]\n )\n\n const isScrollable = !!scrollDistance\n\n const handleWheel = throttle(() => {\n if (labelListRef?.current) {\n updateScrollButtonsState()\n // Don't animate\n scrollLeftSpringRef.set({\n springScrollLeft: labelListRef.current.scrollLeft,\n })\n }\n }, 300)\n\n return (\n <ReachTabs\n className=\"cobalt-tabs\"\n defaultIndex={matchedHrefIndex || defaultTabIndex}\n onChange={onChange}\n >\n <ReachTabList\n className={cx(\"cobalt-tabs__labels\", {\n \"cobalt-tabs__labels--scrollable\": isScrollable,\n \"cobalt-tabs__labels--subLevel\": subLevel,\n })}\n onWheel={handleWheel}\n ref={labelListRef}\n >\n {tabsPropsArray.map((props, index) => (\n <InternalTab key={index} href={props.href}>\n {props.label}\n </InternalTab>\n ))}\n </ReachTabList>\n {isScrollable && (\n <>\n <button\n className=\"cobalt-tabs__nav-prev\"\n onClick={onScrollPrev}\n disabled={!scrollButtonsEnabled.prev}\n >\n <span className=\"cobalt-tabs__nav-icon\">\n <ChevronLeftIcon color=\"accent\" />\n </span>\n </button>\n <button\n className=\"cobalt-tabs__nav-next\"\n onClick={onScrollNext}\n disabled={!scrollButtonsEnabled.next}\n >\n <span className=\"cobalt-tabs__nav-icon\">\n <ChevronRightIcon color=\"accent\" />\n </span>\n </button>\n </>\n )}\n {!!tabsChildren.length && (\n <ReachTabPanels>\n {tabsChildren.map((tabChildren, index) => (\n <ReachTabPanel className=\"cobalt-tabs__panel\" key={index}>\n {tabChildren}\n </ReachTabPanel>\n ))}\n </ReachTabPanels>\n )}\n </ReachTabs>\n )\n}\nTabs.Tab = Tab\nTabs.displayName = \"Tabs\"\n\nexport default Tabs\n"],"names":["ReachTab","ReachTabs","ReachTabList","ReachTabPanels","ReachTabPanel"],"mappings":"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"}
|
package/components/Tag/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import cx from 'classnames';
|
|
3
3
|
|
|
4
|
-
const Tag = ({ children, variant }) => (React.createElement("div", { className: cx("cobalt-Tag", {
|
|
4
|
+
const Tag = ({ children, variant, className }) => (React.createElement("div", { className: cx("cobalt-Tag", className, {
|
|
5
5
|
"cobalt-Tag--muted": variant === "muted",
|
|
6
6
|
"cobalt-Tag--important": variant === "important",
|
|
7
7
|
}) }, children));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/components/Tag/index.tsx"],"sourcesContent":["import React from \"react\"\nimport cx from \"classnames\"\n\nexport interface TagProps {\n children: React.ReactNode\n variant?: \"muted\" | \"important\"\n}\n\nexport const Tag = ({ children, variant }: TagProps) => (\n <div\n className={cx(\"cobalt-Tag\", {\n \"cobalt-Tag--muted\": variant === \"muted\",\n \"cobalt-Tag--important\": variant === \"important\",\n })}\n >\n {children}\n </div>\n)\n"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/components/Tag/index.tsx"],"sourcesContent":["import React from \"react\"\nimport cx from \"classnames\"\n\nexport interface TagProps {\n children: React.ReactNode\n className?: string\n variant?: \"muted\" | \"important\"\n}\n\nexport const Tag = ({ children, variant, className }: TagProps) => (\n <div\n className={cx(\"cobalt-Tag\", className, {\n \"cobalt-Tag--muted\": variant === \"muted\",\n \"cobalt-Tag--important\": variant === \"important\",\n })}\n >\n {children}\n </div>\n)\n"],"names":[],"mappings":";;;AASa,MAAA,GAAG,GAAG,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAY,MAC5D,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,SAAS,EAAE,EAAE,CAAC,YAAY,EAAE,SAAS,EAAE;QACrC,mBAAmB,EAAE,OAAO,KAAK,OAAO;QACxC,uBAAuB,EAAE,OAAO,KAAK,WAAW;AACjD,KAAA,CAAC,EAED,EAAA,QAAQ,CACL;;;;"}
|
package/package.json
CHANGED
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
width: 100%;
|
|
12
12
|
display: flex;
|
|
13
13
|
padding: spacing(sm);
|
|
14
|
+
|
|
14
15
|
border: 0;
|
|
15
16
|
|
|
16
17
|
font-family: font-family(base);
|
|
@@ -20,6 +21,12 @@
|
|
|
20
21
|
// Disable reach-ui styles
|
|
21
22
|
background: transparent;
|
|
22
23
|
|
|
24
|
+
gap: spacing(sm);
|
|
25
|
+
|
|
26
|
+
&--left-toggle-icon {
|
|
27
|
+
flex-direction: row-reverse;
|
|
28
|
+
}
|
|
29
|
+
|
|
23
30
|
&-content {
|
|
24
31
|
width: 100%;
|
|
25
32
|
|
|
@@ -101,6 +101,8 @@ $scrollButtonWidth: 2rem;
|
|
|
101
101
|
}
|
|
102
102
|
|
|
103
103
|
.cobalt-tabs__label {
|
|
104
|
+
@include text-color(subdued);
|
|
105
|
+
@include bg-color(secondaryInteractive);
|
|
104
106
|
position: relative;
|
|
105
107
|
|
|
106
108
|
display: flex;
|
|
@@ -116,7 +118,6 @@ $scrollButtonWidth: 2rem;
|
|
|
116
118
|
font-size: 1rem;
|
|
117
119
|
line-height: 1;
|
|
118
120
|
text-transform: uppercase;
|
|
119
|
-
color: color(graphite, light);
|
|
120
121
|
font-family: font-family(brand);
|
|
121
122
|
font-weight: 700;
|
|
122
123
|
|
|
@@ -126,11 +127,6 @@ $scrollButtonWidth: 2rem;
|
|
|
126
127
|
|
|
127
128
|
transition: 0.2s color;
|
|
128
129
|
|
|
129
|
-
&:hover,
|
|
130
|
-
&:focus {
|
|
131
|
-
background: color(acier, lighter);
|
|
132
|
-
}
|
|
133
|
-
|
|
134
130
|
&:after {
|
|
135
131
|
position: absolute;
|
|
136
132
|
bottom: 0;
|
|
@@ -149,10 +145,10 @@ $scrollButtonWidth: 2rem;
|
|
|
149
145
|
}
|
|
150
146
|
|
|
151
147
|
&.cobalt-tabs__label--selected {
|
|
152
|
-
|
|
148
|
+
@include text-color(base);
|
|
153
149
|
|
|
154
150
|
&:after {
|
|
155
|
-
|
|
151
|
+
@include semantic-color(accent, fill, background-color);
|
|
156
152
|
|
|
157
153
|
transform: scaleX(1);
|
|
158
154
|
}
|
|
@@ -1,26 +1,24 @@
|
|
|
1
1
|
.cobalt- {
|
|
2
2
|
&Tag {
|
|
3
|
+
@include bg-color(neutral);
|
|
3
4
|
display: inline-block;
|
|
4
5
|
|
|
5
|
-
padding: spacing(
|
|
6
|
+
padding: spacing("2xs") spacing(xs);
|
|
6
7
|
|
|
7
8
|
font-size: 13px;
|
|
8
9
|
|
|
9
10
|
font-weight: 600;
|
|
10
11
|
|
|
11
|
-
background-color: color(acier, light);
|
|
12
|
-
|
|
13
12
|
border-radius: border-radius();
|
|
14
13
|
}
|
|
15
14
|
|
|
16
15
|
&Tag--muted {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
background-color: color(acier, lighter);
|
|
16
|
+
@include text-color(subdued);
|
|
17
|
+
@include bg-color(neutralAlt);
|
|
20
18
|
}
|
|
21
19
|
|
|
22
20
|
&Tag--important {
|
|
23
|
-
|
|
21
|
+
@include text-color(error);
|
|
24
22
|
|
|
25
23
|
background-color: lighten(color(essence), 24);
|
|
26
24
|
}
|
|
@@ -18,6 +18,7 @@ export declare type AccordionItemHeaderPropsType = {
|
|
|
18
18
|
*/
|
|
19
19
|
headingLevel?: HeadingLevelMapType[HeadingTag];
|
|
20
20
|
className?: string;
|
|
21
|
+
leftToggleIcon?: boolean;
|
|
21
22
|
} & ReachAccordionButtonProps;
|
|
22
23
|
export declare type AccordionItemPanelPropsType = {
|
|
23
24
|
className?: string;
|
|
@@ -42,6 +43,7 @@ export declare const AccordionItemHeader: React.ForwardRefExoticComponent<{
|
|
|
42
43
|
*/
|
|
43
44
|
headingLevel?: 2 | 3 | 4 | 5 | 6 | undefined;
|
|
44
45
|
className?: string | undefined;
|
|
46
|
+
leftToggleIcon?: boolean | undefined;
|
|
45
47
|
} & ReachAccordionButtonProps & React.RefAttributes<HTMLButtonElement>>;
|
|
46
48
|
export declare const AccordionItemPanel: {
|
|
47
49
|
({ children, className, ...props }: AccordionItemPanelPropsType): JSX.Element;
|
|
@@ -59,6 +61,7 @@ export declare const AccordionItem: {
|
|
|
59
61
|
*/
|
|
60
62
|
headingLevel?: 2 | 3 | 4 | 5 | 6 | undefined;
|
|
61
63
|
className?: string | undefined;
|
|
64
|
+
leftToggleIcon?: boolean | undefined;
|
|
62
65
|
} & ReachAccordionButtonProps & React.RefAttributes<HTMLButtonElement>>;
|
|
63
66
|
Panel: {
|
|
64
67
|
({ children, className, ...props }: AccordionItemPanelPropsType): JSX.Element;
|
|
@@ -79,6 +82,7 @@ declare const Accordion: {
|
|
|
79
82
|
*/
|
|
80
83
|
headingLevel?: 2 | 3 | 4 | 5 | 6 | undefined;
|
|
81
84
|
className?: string | undefined;
|
|
85
|
+
leftToggleIcon?: boolean | undefined;
|
|
82
86
|
} & ReachAccordionButtonProps & React.RefAttributes<HTMLButtonElement>>;
|
|
83
87
|
Panel: {
|
|
84
88
|
({ children, className, ...props }: AccordionItemPanelPropsType): JSX.Element;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
export interface TagProps {
|
|
3
3
|
children: React.ReactNode;
|
|
4
|
+
className?: string;
|
|
4
5
|
variant?: "muted" | "important";
|
|
5
6
|
}
|
|
6
|
-
export declare const Tag: ({ children, variant }: TagProps) => JSX.Element;
|
|
7
|
+
export declare const Tag: ({ children, variant, className }: TagProps) => JSX.Element;
|