@transferwise/components 0.0.0-experimental-452dddd → 0.0.0-experimental-c326a17
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/build/tabs/Tab.js.map +1 -1
- package/build/tabs/Tab.mjs.map +1 -1
- package/build/tabs/Tabs.js.map +1 -1
- package/build/tabs/Tabs.mjs.map +1 -1
- package/package.json +1 -1
- package/src/tabs/Tab.tsx +1 -1
- package/src/tabs/Tabs.tsx +1 -1
package/build/tabs/Tab.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tab.js","sources":["../../src/tabs/Tab.tsx"],"sourcesContent":["import { clsx } from 'clsx';\nimport { forwardRef, useEffect, useRef } from 'react';\nimport { useEffectEvent } from '../common/hooks/useEffectEvent';\n\nexport interface TabProps {\n children?: React.ReactNode;\n disabled?: boolean;\n selected?: boolean;\n id: string;\n panelId: string;\n style?: React.CSSProperties;\n focusTab?: () => void;\n onKeyDown: React.KeyboardEventHandler<HTMLLIElement>;\n onClick?: React.MouseEventHandler<HTMLLIElement>;\n}\n\nconst noop = () => {};\n\nconst Tab = forwardRef(function Tab(\n {\n children,\n id,\n disabled,\n panelId,\n selected,\n onKeyDown,\n onClick,\n style,\n focusTab = noop,\n }: TabProps,\n reference: React.ForwardedRef<HTMLLIElement>,\n) {\n const handleFocusTab = useEffectEvent(focusTab);\n const firstUpdate = useRef(true);\n useEffect(\n function checkFocus() {\n if (firstUpdate.current) {\n firstUpdate.current = false;\n return;\n }\n\n if (selected) {\n handleFocusTab();\n }\n },\n [handleFocusTab, selected],\n );\n\n return (\n <li\n ref={reference}\n className={clsx('tabs__tab', selected ? 'np-text-body-large-bold' : 'np-text-body-large', {\n 'tabs__tab--selected': selected,\n clickable: !disabled,\n disabled,\n })}\n role=\"tab\"\n id={id}\n aria-selected={selected ? 'true' : 'false'}\n aria-disabled={disabled ? 'true' : 'false'}\n aria-controls={disabled ? undefined : panelId}\n tabIndex={0}\n style={style}\n onKeyDown={disabled ? undefined : onKeyDown}\n onClick={onClick}\n >\n <span className=\"tabs__tab__content\">{children}</span>\n </li>\n );\n});\n\nexport default Tab
|
|
1
|
+
{"version":3,"file":"Tab.js","sources":["../../src/tabs/Tab.tsx"],"sourcesContent":["import { clsx } from 'clsx';\nimport { forwardRef, useEffect, useRef } from 'react';\nimport { useEffectEvent } from '../common/hooks/useEffectEvent';\n\nexport interface TabProps {\n children?: React.ReactNode;\n disabled?: boolean;\n selected?: boolean;\n id: string;\n panelId: string;\n style?: React.CSSProperties;\n focusTab?: () => void;\n onKeyDown: React.KeyboardEventHandler<HTMLLIElement>;\n onClick?: React.MouseEventHandler<HTMLLIElement>;\n}\n\nconst noop = () => {};\n\nconst Tab = forwardRef(function Tab(\n {\n children,\n id,\n disabled,\n panelId,\n selected,\n onKeyDown,\n onClick,\n style,\n focusTab = noop,\n }: TabProps,\n reference: React.ForwardedRef<HTMLLIElement>,\n) {\n const handleFocusTab = useEffectEvent(focusTab);\n const firstUpdate = useRef(true);\n useEffect(\n function checkFocus() {\n if (firstUpdate.current) {\n firstUpdate.current = false;\n return;\n }\n\n if (selected) {\n handleFocusTab();\n }\n },\n [handleFocusTab, selected],\n );\n\n return (\n <li\n ref={reference}\n className={clsx('tabs__tab', selected ? 'np-text-body-large-bold' : 'np-text-body-large', {\n 'tabs__tab--selected': selected,\n clickable: !disabled,\n disabled,\n })}\n role=\"tab\"\n id={id}\n aria-selected={selected ? 'true' : 'false'}\n aria-disabled={disabled ? 'true' : 'false'}\n aria-controls={disabled ? undefined : panelId}\n tabIndex={0}\n style={style}\n onKeyDown={disabled ? undefined : onKeyDown}\n onClick={onClick}\n >\n <span className=\"tabs__tab__content\">{children}</span>\n </li>\n );\n});\n\nexport default Tab;"],"names":["noop","Tab","forwardRef","children","id","disabled","panelId","selected","onKeyDown","onClick","style","focusTab","reference","handleFocusTab","useEffectEvent","firstUpdate","useRef","useEffect","checkFocus","current","_jsx","ref","className","clsx","clickable","role","undefined","tabIndex"],"mappings":";;;;;;;;;AAgBA,MAAMA,IAAI,GAAGA,MAAK,CAAE,CAAC;AAErB,MAAMC,GAAG,gBAAGC,gBAAU,CAAC,SAASD,GAAGA,CACjC;EACEE,QAAQ;EACRC,EAAE;EACFC,QAAQ;EACRC,OAAO;EACPC,QAAQ;EACRC,SAAS;EACTC,OAAO;EACPC,KAAK;AACLC,EAAAA,QAAQ,GAAGX;AAAI,CACN,EACXY,SAA4C,EAAA;AAE5C,EAAA,MAAMC,cAAc,GAAGC,6BAAc,CAACH,QAAQ,CAAC;AAC/C,EAAA,MAAMI,WAAW,GAAGC,YAAM,CAAC,IAAI,CAAC;AAChCC,EAAAA,eAAS,CACP,SAASC,UAAUA,GAAA;IACjB,IAAIH,WAAW,CAACI,OAAO,EAAE;MACvBJ,WAAW,CAACI,OAAO,GAAG,KAAK;AAC3B,MAAA;AACF,IAAA;AAEA,IAAA,IAAIZ,QAAQ,EAAE;AACZM,MAAAA,cAAc,EAAE;AAClB,IAAA;AACF,EAAA,CAAC,EACD,CAACA,cAAc,EAAEN,QAAQ,CAAC,CAC3B;AAED,EAAA,oBACEa,cAAA,CAAA,IAAA,EAAA;AACEC,IAAAA,GAAG,EAAET,SAAU;IACfU,SAAS,EAAEC,SAAI,CAAC,WAAW,EAAEhB,QAAQ,GAAG,yBAAyB,GAAG,oBAAoB,EAAE;AACxF,MAAA,qBAAqB,EAAEA,QAAQ;MAC/BiB,SAAS,EAAE,CAACnB,QAAQ;AACpBA,MAAAA;AACD,KAAA,CAAE;AACHoB,IAAAA,IAAI,EAAC,KAAK;AACVrB,IAAAA,EAAE,EAAEA,EAAG;AACP,IAAA,eAAA,EAAeG,QAAQ,GAAG,MAAM,GAAG,OAAQ;AAC3C,IAAA,eAAA,EAAeF,QAAQ,GAAG,MAAM,GAAG,OAAQ;AAC3C,IAAA,eAAA,EAAeA,QAAQ,GAAGqB,SAAS,GAAGpB,OAAQ;AAC9CqB,IAAAA,QAAQ,EAAE,CAAE;AACZjB,IAAAA,KAAK,EAAEA,KAAM;AACbF,IAAAA,SAAS,EAAEH,QAAQ,GAAGqB,SAAS,GAAGlB,SAAU;AAC5CC,IAAAA,OAAO,EAAEA,OAAQ;AAAAN,IAAAA,QAAA,eAEjBiB,cAAA,CAAA,MAAA,EAAA;AAAME,MAAAA,SAAS,EAAC,oBAAoB;AAAAnB,MAAAA,QAAA,EAAEA;KAAe;AACvD,GAAI,CAAC;AAET,CAAC;;;;"}
|
package/build/tabs/Tab.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tab.mjs","sources":["../../src/tabs/Tab.tsx"],"sourcesContent":["import { clsx } from 'clsx';\nimport { forwardRef, useEffect, useRef } from 'react';\nimport { useEffectEvent } from '../common/hooks/useEffectEvent';\n\nexport interface TabProps {\n children?: React.ReactNode;\n disabled?: boolean;\n selected?: boolean;\n id: string;\n panelId: string;\n style?: React.CSSProperties;\n focusTab?: () => void;\n onKeyDown: React.KeyboardEventHandler<HTMLLIElement>;\n onClick?: React.MouseEventHandler<HTMLLIElement>;\n}\n\nconst noop = () => {};\n\nconst Tab = forwardRef(function Tab(\n {\n children,\n id,\n disabled,\n panelId,\n selected,\n onKeyDown,\n onClick,\n style,\n focusTab = noop,\n }: TabProps,\n reference: React.ForwardedRef<HTMLLIElement>,\n) {\n const handleFocusTab = useEffectEvent(focusTab);\n const firstUpdate = useRef(true);\n useEffect(\n function checkFocus() {\n if (firstUpdate.current) {\n firstUpdate.current = false;\n return;\n }\n\n if (selected) {\n handleFocusTab();\n }\n },\n [handleFocusTab, selected],\n );\n\n return (\n <li\n ref={reference}\n className={clsx('tabs__tab', selected ? 'np-text-body-large-bold' : 'np-text-body-large', {\n 'tabs__tab--selected': selected,\n clickable: !disabled,\n disabled,\n })}\n role=\"tab\"\n id={id}\n aria-selected={selected ? 'true' : 'false'}\n aria-disabled={disabled ? 'true' : 'false'}\n aria-controls={disabled ? undefined : panelId}\n tabIndex={0}\n style={style}\n onKeyDown={disabled ? undefined : onKeyDown}\n onClick={onClick}\n >\n <span className=\"tabs__tab__content\">{children}</span>\n </li>\n );\n});\n\nexport default Tab
|
|
1
|
+
{"version":3,"file":"Tab.mjs","sources":["../../src/tabs/Tab.tsx"],"sourcesContent":["import { clsx } from 'clsx';\nimport { forwardRef, useEffect, useRef } from 'react';\nimport { useEffectEvent } from '../common/hooks/useEffectEvent';\n\nexport interface TabProps {\n children?: React.ReactNode;\n disabled?: boolean;\n selected?: boolean;\n id: string;\n panelId: string;\n style?: React.CSSProperties;\n focusTab?: () => void;\n onKeyDown: React.KeyboardEventHandler<HTMLLIElement>;\n onClick?: React.MouseEventHandler<HTMLLIElement>;\n}\n\nconst noop = () => {};\n\nconst Tab = forwardRef(function Tab(\n {\n children,\n id,\n disabled,\n panelId,\n selected,\n onKeyDown,\n onClick,\n style,\n focusTab = noop,\n }: TabProps,\n reference: React.ForwardedRef<HTMLLIElement>,\n) {\n const handleFocusTab = useEffectEvent(focusTab);\n const firstUpdate = useRef(true);\n useEffect(\n function checkFocus() {\n if (firstUpdate.current) {\n firstUpdate.current = false;\n return;\n }\n\n if (selected) {\n handleFocusTab();\n }\n },\n [handleFocusTab, selected],\n );\n\n return (\n <li\n ref={reference}\n className={clsx('tabs__tab', selected ? 'np-text-body-large-bold' : 'np-text-body-large', {\n 'tabs__tab--selected': selected,\n clickable: !disabled,\n disabled,\n })}\n role=\"tab\"\n id={id}\n aria-selected={selected ? 'true' : 'false'}\n aria-disabled={disabled ? 'true' : 'false'}\n aria-controls={disabled ? undefined : panelId}\n tabIndex={0}\n style={style}\n onKeyDown={disabled ? undefined : onKeyDown}\n onClick={onClick}\n >\n <span className=\"tabs__tab__content\">{children}</span>\n </li>\n );\n});\n\nexport default Tab;"],"names":["noop","Tab","forwardRef","children","id","disabled","panelId","selected","onKeyDown","onClick","style","focusTab","reference","handleFocusTab","useEffectEvent","firstUpdate","useRef","useEffect","checkFocus","current","_jsx","ref","className","clsx","clickable","role","undefined","tabIndex"],"mappings":";;;;;AAgBA,MAAMA,IAAI,GAAGA,MAAK,CAAE,CAAC;AAErB,MAAMC,GAAG,gBAAGC,UAAU,CAAC,SAASD,GAAGA,CACjC;EACEE,QAAQ;EACRC,EAAE;EACFC,QAAQ;EACRC,OAAO;EACPC,QAAQ;EACRC,SAAS;EACTC,OAAO;EACPC,KAAK;AACLC,EAAAA,QAAQ,GAAGX;AAAI,CACN,EACXY,SAA4C,EAAA;AAE5C,EAAA,MAAMC,cAAc,GAAGC,cAAc,CAACH,QAAQ,CAAC;AAC/C,EAAA,MAAMI,WAAW,GAAGC,MAAM,CAAC,IAAI,CAAC;AAChCC,EAAAA,SAAS,CACP,SAASC,UAAUA,GAAA;IACjB,IAAIH,WAAW,CAACI,OAAO,EAAE;MACvBJ,WAAW,CAACI,OAAO,GAAG,KAAK;AAC3B,MAAA;AACF,IAAA;AAEA,IAAA,IAAIZ,QAAQ,EAAE;AACZM,MAAAA,cAAc,EAAE;AAClB,IAAA;AACF,EAAA,CAAC,EACD,CAACA,cAAc,EAAEN,QAAQ,CAAC,CAC3B;AAED,EAAA,oBACEa,GAAA,CAAA,IAAA,EAAA;AACEC,IAAAA,GAAG,EAAET,SAAU;IACfU,SAAS,EAAEC,IAAI,CAAC,WAAW,EAAEhB,QAAQ,GAAG,yBAAyB,GAAG,oBAAoB,EAAE;AACxF,MAAA,qBAAqB,EAAEA,QAAQ;MAC/BiB,SAAS,EAAE,CAACnB,QAAQ;AACpBA,MAAAA;AACD,KAAA,CAAE;AACHoB,IAAAA,IAAI,EAAC,KAAK;AACVrB,IAAAA,EAAE,EAAEA,EAAG;AACP,IAAA,eAAA,EAAeG,QAAQ,GAAG,MAAM,GAAG,OAAQ;AAC3C,IAAA,eAAA,EAAeF,QAAQ,GAAG,MAAM,GAAG,OAAQ;AAC3C,IAAA,eAAA,EAAeA,QAAQ,GAAGqB,SAAS,GAAGpB,OAAQ;AAC9CqB,IAAAA,QAAQ,EAAE,CAAE;AACZjB,IAAAA,KAAK,EAAEA,KAAM;AACbF,IAAAA,SAAS,EAAEH,QAAQ,GAAGqB,SAAS,GAAGlB,SAAU;AAC5CC,IAAAA,OAAO,EAAEA,OAAQ;AAAAN,IAAAA,QAAA,eAEjBiB,GAAA,CAAA,MAAA,EAAA;AAAME,MAAAA,SAAS,EAAC,oBAAoB;AAAAnB,MAAAA,QAAA,EAAEA;KAAe;AACvD,GAAI,CAAC;AAET,CAAC;;;;"}
|
package/build/tabs/Tabs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tabs.js","sources":["../../src/tabs/Tabs.tsx"],"sourcesContent":["import { clsx } from 'clsx';\nimport clamp from 'lodash.clamp';\nimport { Component, createRef } from 'react';\n\nimport { Width, Direction } from '../common';\nimport { DirectionContext } from '../provider/direction';\n\nimport Tab from './Tab';\nimport TabList from './TabList';\nimport TabPanel from './TabPanel';\nimport {\n getSwipeDifference,\n swipedLeftToRight,\n swipedRightToLeft,\n swipeShouldChangeTab,\n Swipe,\n} from './utils';\n\nconst MIN_INDEX = 0;\n\nexport interface TabItem {\n title: string;\n content: React.ReactNode;\n disabled: boolean;\n}\n\nexport interface TabsProps {\n tabs: TabItem[];\n selected: number;\n name: string;\n changeTabOnSwipe?: boolean;\n className?: string;\n headerWidth?: `${Width}`;\n onTabSelect: (index: number) => void;\n}\n\ninterface TabsState {\n start: Swipe | null;\n translateLineX: string | null;\n isSwiping: boolean;\n isScrolling: boolean;\n fullWidthTabs: boolean;\n}\n\nexport default class Tabs extends Component<TabsProps, TabsState> {\n declare props: TabsProps & Required<Pick<TabsProps, keyof typeof Tabs.defaultProps>>;\n\n static defaultProps = {\n changeTabOnSwipe: true,\n headerWidth: Width.BLOCK,\n } satisfies Partial<TabsProps>;\n\n containerReference = createRef<HTMLDivElement>();\n\n constructor(props: Tabs['props']) {\n super(props);\n this.state = {\n start: null,\n translateLineX: null,\n isSwiping: false,\n isScrolling: false,\n fullWidthTabs: props.headerWidth === Width.BLOCK,\n };\n }\n\n container: HTMLDivElement | null = null;\n\n containerWidth = 0;\n\n tabRefs: (HTMLLIElement | null)[] = [];\n\n get MAX_INDEX() {\n return this.props.tabs.length - 1;\n }\n\n componentDidMount() {\n const { selected } = this.props;\n\n this.setTabWidth();\n this.switchTab(clamp(selected, MIN_INDEX, this.MAX_INDEX));\n this.animateLine(clamp(selected, MIN_INDEX, this.MAX_INDEX));\n document.body.addEventListener('touchmove', this.disableScroll, { passive: false });\n document.body.addEventListener('touchforcechange', this.disableScroll, { passive: false });\n window.addEventListener('resize', this.handleResize);\n }\n\n componentDidUpdate(previousProps: TabsProps) {\n const currentSelected = this.props.selected;\n const previousSelected = previousProps.selected;\n const currentSelectedTab = this.props.tabs[currentSelected];\n const currentSelectedTabIsDisabled = currentSelectedTab?.disabled;\n const previousSelectedTab = previousProps.tabs[previousSelected];\n const previousSelectedTabIsDisabled = previousSelectedTab?.disabled;\n const currentTabsLength = this.props.tabs.length;\n const previousTabsLength = previousProps.tabs.length;\n const currentDisabledTabsLength = this.props.tabs.filter((tab) => !tab.disabled).length;\n const previousDisabledTabsLength = previousProps.tabs.filter((tab) => !tab.disabled).length;\n const currentHeaderWidth = this.props.headerWidth;\n const previousFullHeaderWidth = previousProps.headerWidth;\n\n if (\n currentHeaderWidth !== previousFullHeaderWidth ||\n currentTabsLength !== previousTabsLength\n ) {\n this.setTabWidth();\n }\n\n if (\n currentSelected !== previousSelected ||\n currentDisabledTabsLength !== previousDisabledTabsLength ||\n currentSelectedTabIsDisabled !== previousSelectedTabIsDisabled\n ) {\n this.animateLine(clamp(currentSelected, MIN_INDEX, this.MAX_INDEX));\n }\n }\n\n componentWillUnmount() {\n document.body.removeEventListener('touchmove', this.disableScroll);\n document.body.removeEventListener('touchforcechange', this.disableScroll);\n window.removeEventListener('resize', this.handleResize);\n }\n\n handleResize = () => {\n this.setContainerWidth(this.container);\n };\n\n setContainerRefAndWidth = (node: HTMLDivElement | null) => {\n this.container = node;\n this.setContainerWidth(node);\n };\n\n setContainerWidth = (node: HTMLDivElement | null) => {\n if (!node) {\n return;\n }\n\n const { width } = node.getBoundingClientRect();\n\n this.containerWidth = width;\n };\n\n isTabDisabled = (index: number) => {\n const { tabs } = this.props;\n\n return tabs[index]?.disabled ?? false;\n };\n\n getAllTabsWidth = () => {\n return this.tabRefs\n .map((reference) => {\n return reference ? reference.getBoundingClientRect().width : 0;\n })\n .reduce((a, b) => a + b, 0);\n };\n\n getDistanceToSelectedTab = (selectedTabIndex: number) => {\n return this.tabRefs\n .filter((_, idx) => idx < selectedTabIndex)\n .map((reference) => (reference ? reference.getBoundingClientRect().width : 0))\n .reduce((a, b) => a + b, 0);\n };\n\n setTabWidth = () => {\n const { fullWidthTabs } = this.state;\n const { headerWidth, selected } = this.props;\n\n const allTabsWidth = this.getAllTabsWidth();\n\n if (!fullWidthTabs && (headerWidth === Width.BLOCK || this.containerWidth < allTabsWidth)) {\n this.setState({ fullWidthTabs: true, translateLineX: `${selected * 100}%` });\n }\n if (fullWidthTabs && headerWidth === Width.AUTO && this.containerWidth >= allTabsWidth) {\n this.setState({\n fullWidthTabs: false,\n translateLineX: `${this.getDistanceToSelectedTab(selected)}px`,\n });\n }\n };\n\n getTabLineWidth = () => {\n const { fullWidthTabs } = this.state;\n const { selected, tabs } = this.props;\n\n if (fullWidthTabs) {\n return `${(1 / tabs.length) * 100}%`;\n }\n\n const reference = this.tabRefs[selected] || this.tabRefs[this.tabRefs.length - 1];\n const width = reference ? reference.getBoundingClientRect().width : 0;\n return `${width}px`;\n };\n\n /*\n * Gets the next tab that should be selected based on the swipe direction\n * and the current selected tab (is called recursively to account for disabled tabs).\n */\n getTabToSelect = (selected: number, start: Swipe, end: Swipe): number => {\n let nextSelected = selected;\n\n if (swipedLeftToRight(start, end)) {\n nextSelected -= 1;\n\n if (nextSelected > MIN_INDEX && this.isTabDisabled(nextSelected)) {\n return this.getTabToSelect(nextSelected, start, end);\n }\n } else if (swipedRightToLeft(start, end)) {\n nextSelected += 1;\n\n if (nextSelected < this.MAX_INDEX && this.isTabDisabled(nextSelected)) {\n return this.getTabToSelect(nextSelected, start, end);\n }\n }\n\n nextSelected = clamp(\n nextSelected,\n Math.max(selected - 1, MIN_INDEX),\n Math.min(selected + 1, this.MAX_INDEX),\n );\n\n if (this.isTabDisabled(nextSelected)) {\n return selected;\n }\n\n return nextSelected;\n };\n\n swipedOverHalfOfContainer = (difference: number) => difference / this.containerWidth >= 0.5;\n\n switchTab = (index: number) => {\n const { onTabSelect } = this.props;\n onTabSelect(index);\n };\n\n animateLine = (index: number) => {\n this.setState((previousState) => ({\n translateLineX: previousState.fullWidthTabs\n ? `${index * 100}%`\n : `${this.getDistanceToSelectedTab(index)}px`,\n }));\n };\n\n disableScroll = (event: Event) => {\n const { isSwiping } = this.state;\n\n if (isSwiping) {\n event.preventDefault();\n }\n };\n\n handleTabClick = (index: number) => () => {\n this.switchTab(index);\n };\n\n onKeyDown = (index: number) => (event: React.KeyboardEvent<HTMLLIElement>) => {\n if (event && event.key === 'Enter') {\n this.switchTab(index);\n }\n };\n\n handleTouchStart: React.TouchEventHandler<HTMLDivElement> = (event) => {\n const start = {\n x: event.nativeEvent.touches[0].clientX,\n y: event.nativeEvent.touches[0].clientY,\n time: Date.now(),\n };\n this.setState({\n start,\n });\n };\n\n handleTouchMove: React.TouchEventHandler<HTMLDivElement> = (event) => {\n const { start } = this.state;\n if (start == null) {\n return;\n }\n\n const { selected: currentSelectedFromProps } = this.props;\n const end: Swipe = {\n x: event.nativeEvent.changedTouches[0].clientX,\n y: event.nativeEvent.changedTouches[0].clientY,\n time: Date.now(),\n };\n const difference = getSwipeDifference(start, end);\n const yAxisDifference = getSwipeDifference(start, end, 'y');\n let { isScrolling, isSwiping } = this.state;\n\n if (!isScrolling && !isSwiping) {\n if (difference > yAxisDifference) {\n isSwiping = true;\n } else {\n isScrolling = true;\n }\n }\n\n this.setState({ isScrolling, isSwiping });\n\n if (isSwiping) {\n const nextSelected = this.getTabToSelect(currentSelectedFromProps, start, end);\n this.animateLine(\n this.swipedOverHalfOfContainer(difference) ? nextSelected : currentSelectedFromProps,\n );\n }\n };\n\n handleTouchEnd: React.TouchEventHandler<HTMLDivElement> = (event) => {\n const { start, isSwiping } = this.state;\n if (start == null) {\n return;\n }\n\n const { selected } = this.props;\n const end: Swipe = {\n x: event.nativeEvent.changedTouches[0].clientX,\n y: event.nativeEvent.changedTouches[0].clientY,\n time: Date.now(),\n };\n const difference = getSwipeDifference(start, end);\n\n let nextSelected = selected;\n\n if (isSwiping) {\n if (swipeShouldChangeTab(start, end) || this.swipedOverHalfOfContainer(difference)) {\n nextSelected = this.getTabToSelect(nextSelected, start, end);\n }\n\n if (nextSelected !== selected) {\n this.switchTab(nextSelected);\n } else {\n this.animateLine(nextSelected);\n }\n }\n\n this.setState({ isSwiping: false, isScrolling: false });\n };\n\n render() {\n const { tabs, changeTabOnSwipe, name, selected, className, headerWidth } = this.props;\n const { translateLineX, fullWidthTabs } = this.state;\n\n const selectedTab = tabs[selected];\n\n return (\n <DirectionContext.Consumer>\n {(direction) => {\n const isRTL = direction === Direction.RTL;\n return (\n <div\n ref={this.containerReference}\n className={clsx('tabs', className, {\n 'tabs--auto-width': headerWidth === Width.AUTO,\n })}\n onTouchStart={changeTabOnSwipe ? this.handleTouchStart : undefined}\n onTouchEnd={changeTabOnSwipe ? this.handleTouchEnd : undefined}\n onTouchMove={changeTabOnSwipe ? this.handleTouchMove : undefined}\n >\n <TabList>\n {tabs.map(({ title, disabled }, index) => {\n return (\n <Tab\n key={title}\n ref={(node) => {\n this.tabRefs[index] = node;\n }}\n id={`${name}-tab-${index}`}\n panelId={`${name}-panel-${index}`}\n selected={selected === index}\n disabled={disabled}\n focusTab={() => {\n if (this.containerReference.current?.contains(document.activeElement)) {\n this.tabRefs[index]?.focus();\n }\n }}\n onClick={disabled ? undefined : this.handleTabClick(index)}\n onKeyDown={this.onKeyDown(index)}\n {...(fullWidthTabs\n ? { style: { width: `${(1 / tabs.length) * 100}%` } }\n : {})}\n >\n {title}\n </Tab>\n );\n })}\n {translateLineX ? (\n <li\n role=\"none\"\n className=\"tabs__line\"\n style={{\n width: this.getTabLineWidth(),\n transform: isRTL\n ? `translateX(-${translateLineX})`\n : `translateX(${translateLineX})`,\n }}\n />\n ) : null}\n </TabList>\n <div ref={this.setContainerRefAndWidth} className=\"tabs__panel-container\">\n {selectedTab && !selectedTab.disabled ? (\n <TabPanel\n key={selectedTab.title}\n tabId={`${name}-tab-${selected}`}\n id={`${name}-panel-${selected}`}\n style={{\n width: '100%',\n }}\n >\n {selectedTab.content}\n </TabPanel>\n ) : null}\n </div>\n </div>\n );\n }}\n </DirectionContext.Consumer>\n );\n }\n}\n"],"names":["MIN_INDEX","Tabs","Component","defaultProps","changeTabOnSwipe","headerWidth","Width","BLOCK","containerReference","createRef","constructor","props","state","start","translateLineX","isSwiping","isScrolling","fullWidthTabs","container","containerWidth","tabRefs","MAX_INDEX","tabs","length","componentDidMount","selected","setTabWidth","switchTab","clamp","animateLine","document","body","addEventListener","disableScroll","passive","window","handleResize","componentDidUpdate","previousProps","currentSelected","previousSelected","currentSelectedTab","currentSelectedTabIsDisabled","disabled","previousSelectedTab","previousSelectedTabIsDisabled","currentTabsLength","previousTabsLength","currentDisabledTabsLength","filter","tab","previousDisabledTabsLength","currentHeaderWidth","previousFullHeaderWidth","componentWillUnmount","removeEventListener","setContainerWidth","setContainerRefAndWidth","node","width","getBoundingClientRect","isTabDisabled","index","getAllTabsWidth","map","reference","reduce","a","b","getDistanceToSelectedTab","selectedTabIndex","_","idx","allTabsWidth","setState","AUTO","getTabLineWidth","getTabToSelect","end","nextSelected","swipedLeftToRight","swipedRightToLeft","Math","max","min","swipedOverHalfOfContainer","difference","onTabSelect","previousState","event","preventDefault","handleTabClick","onKeyDown","key","handleTouchStart","x","nativeEvent","touches","clientX","y","clientY","time","Date","now","handleTouchMove","currentSelectedFromProps","changedTouches","getSwipeDifference","yAxisDifference","handleTouchEnd","swipeShouldChangeTab","render","name","className","selectedTab","_jsx","DirectionContext","Consumer","children","direction","isRTL","Direction","RTL","_jsxs","ref","clsx","onTouchStart","undefined","onTouchEnd","onTouchMove","TabList","title","Tab","id","panelId","focusTab","current","contains","activeElement","focus","onClick","style","role","transform","TabPanel","tabId","content"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Tabs.js","sources":["../../src/tabs/Tabs.tsx"],"sourcesContent":["import { clsx } from 'clsx';\nimport clamp from 'lodash.clamp';\nimport { Component, createRef } from 'react';\n\nimport { Width, Direction } from '../common';\nimport { DirectionContext } from '../provider/direction';\n\nimport Tab from './Tab';\nimport TabList from './TabList';\nimport TabPanel from './TabPanel';\nimport {\n getSwipeDifference,\n swipedLeftToRight,\n swipedRightToLeft,\n swipeShouldChangeTab,\n Swipe,\n} from './utils';\n\nconst MIN_INDEX = 0;\n\nexport interface TabItem {\n title: string;\n content: React.ReactNode;\n disabled: boolean;\n}\n\nexport interface TabsProps {\n tabs: TabItem[];\n selected: number;\n name: string;\n changeTabOnSwipe?: boolean;\n className?: string;\n headerWidth?: `${Width}`;\n onTabSelect: (index: number) => void;\n}\n\ninterface TabsState {\n start: Swipe | null;\n translateLineX: string | null;\n isSwiping: boolean;\n isScrolling: boolean;\n fullWidthTabs: boolean;\n}\n\nexport default class Tabs extends Component<TabsProps, TabsState> {\n declare props: TabsProps & Required<Pick<TabsProps, keyof typeof Tabs.defaultProps>>;\n\n static defaultProps = {\n changeTabOnSwipe: true,\n headerWidth: Width.BLOCK,\n } satisfies Partial<TabsProps>;\n\n containerReference = createRef<HTMLDivElement>();\n\n constructor(props: Tabs['props']) {\n super(props);\n this.state = {\n start: null,\n translateLineX: null,\n isSwiping: false,\n isScrolling: false,\n fullWidthTabs: props.headerWidth === Width.BLOCK,\n };\n }\n\n container: HTMLDivElement | null = null;\n\n containerWidth = 0;\n\n tabRefs: (HTMLLIElement | null)[] = [];\n\n get MAX_INDEX() {\n return this.props.tabs.length - 1;\n }\n\n componentDidMount() {\n const { selected } = this.props;\n\n this.setTabWidth();\n this.switchTab(clamp(selected, MIN_INDEX, this.MAX_INDEX));\n this.animateLine(clamp(selected, MIN_INDEX, this.MAX_INDEX));\n document.body.addEventListener('touchmove', this.disableScroll, { passive: false });\n document.body.addEventListener('touchforcechange', this.disableScroll, { passive: false });\n window.addEventListener('resize', this.handleResize);\n }\n\n componentDidUpdate(previousProps: TabsProps) {\n const currentSelected = this.props.selected;\n const previousSelected = previousProps.selected;\n const currentSelectedTab = this.props.tabs[currentSelected];\n const currentSelectedTabIsDisabled = currentSelectedTab?.disabled;\n const previousSelectedTab = previousProps.tabs[previousSelected];\n const previousSelectedTabIsDisabled = previousSelectedTab?.disabled;\n const currentTabsLength = this.props.tabs.length;\n const previousTabsLength = previousProps.tabs.length;\n const currentDisabledTabsLength = this.props.tabs.filter((tab) => !tab.disabled).length;\n const previousDisabledTabsLength = previousProps.tabs.filter((tab) => !tab.disabled).length;\n const currentHeaderWidth = this.props.headerWidth;\n const previousFullHeaderWidth = previousProps.headerWidth;\n\n if (\n currentHeaderWidth !== previousFullHeaderWidth ||\n currentTabsLength !== previousTabsLength\n ) {\n this.setTabWidth();\n }\n\n if (\n currentSelected !== previousSelected ||\n currentDisabledTabsLength !== previousDisabledTabsLength ||\n currentSelectedTabIsDisabled !== previousSelectedTabIsDisabled\n ) {\n this.animateLine(clamp(currentSelected, MIN_INDEX, this.MAX_INDEX));\n }\n }\n\n componentWillUnmount() {\n document.body.removeEventListener('touchmove', this.disableScroll);\n document.body.removeEventListener('touchforcechange', this.disableScroll);\n window.removeEventListener('resize', this.handleResize);\n }\n\n handleResize = () => {\n this.setContainerWidth(this.container);\n };\n\n setContainerRefAndWidth = (node: HTMLDivElement | null) => {\n this.container = node;\n this.setContainerWidth(node);\n };\n\n setContainerWidth = (node: HTMLDivElement | null) => {\n if (!node) {\n return;\n }\n\n const { width } = node.getBoundingClientRect();\n\n this.containerWidth = width;\n };\n\n isTabDisabled = (index: number) => {\n const { tabs } = this.props;\n\n return tabs[index]?.disabled ?? false;\n };\n\n getAllTabsWidth = () => {\n return this.tabRefs\n .map((reference) => {\n return reference ? reference.getBoundingClientRect().width : 0;\n })\n .reduce((a, b) => a + b, 0);\n };\n\n getDistanceToSelectedTab = (selectedTabIndex: number) => {\n return this.tabRefs\n .filter((_, idx) => idx < selectedTabIndex)\n .map((reference) => (reference ? reference.getBoundingClientRect().width : 0))\n .reduce((a, b) => a + b, 0);\n };\n\n setTabWidth = () => {\n const { fullWidthTabs } = this.state;\n const { headerWidth, selected } = this.props;\n\n const allTabsWidth = this.getAllTabsWidth();\n\n if (!fullWidthTabs && (headerWidth === Width.BLOCK || this.containerWidth < allTabsWidth)) {\n this.setState({ fullWidthTabs: true, translateLineX: `${selected * 100}%` });\n }\n if (fullWidthTabs && headerWidth === Width.AUTO && this.containerWidth >= allTabsWidth) {\n this.setState({\n fullWidthTabs: false,\n translateLineX: `${this.getDistanceToSelectedTab(selected)}px`,\n });\n }\n };\n\n getTabLineWidth = () => {\n const { fullWidthTabs } = this.state;\n const { selected, tabs } = this.props;\n\n if (fullWidthTabs) {\n return `${(1 / tabs.length) * 100}%`;\n }\n\n const reference = this.tabRefs[selected] || this.tabRefs[this.tabRefs.length - 1];\n const width = reference ? reference.getBoundingClientRect().width : 0;\n return `${width}px`;\n };\n\n /*\n * Gets the next tab that should be selected based on the swipe direction\n * and the current selected tab (is called recursively to account for disabled tabs).\n */\n getTabToSelect = (selected: number, start: Swipe, end: Swipe): number => {\n let nextSelected = selected;\n\n if (swipedLeftToRight(start, end)) {\n nextSelected -= 1;\n\n if (nextSelected > MIN_INDEX && this.isTabDisabled(nextSelected)) {\n return this.getTabToSelect(nextSelected, start, end);\n }\n } else if (swipedRightToLeft(start, end)) {\n nextSelected += 1;\n\n if (nextSelected < this.MAX_INDEX && this.isTabDisabled(nextSelected)) {\n return this.getTabToSelect(nextSelected, start, end);\n }\n }\n\n nextSelected = clamp(\n nextSelected,\n Math.max(selected - 1, MIN_INDEX),\n Math.min(selected + 1, this.MAX_INDEX),\n );\n\n if (this.isTabDisabled(nextSelected)) {\n return selected;\n }\n\n return nextSelected;\n };\n\n swipedOverHalfOfContainer = (difference: number) => difference / this.containerWidth >= 0.5;\n\n switchTab = (index: number) => {\n const { onTabSelect } = this.props;\n onTabSelect(index);\n };\n\n animateLine = (index: number) => {\n this.setState((previousState) => ({\n translateLineX: previousState.fullWidthTabs\n ? `${index * 100}%`\n : `${this.getDistanceToSelectedTab(index)}px`,\n }));\n };\n\n disableScroll = (event: Event) => {\n const { isSwiping } = this.state;\n\n if (isSwiping) {\n event.preventDefault();\n }\n };\n\n handleTabClick = (index: number) => () => {\n this.switchTab(index);\n };\n\n onKeyDown = (index: number) => (event: React.KeyboardEvent<HTMLLIElement>) => {\n if (event && event.key === 'Enter') {\n this.switchTab(index);\n }\n };\n\n handleTouchStart: React.TouchEventHandler<HTMLDivElement> = (event) => {\n const start = {\n x: event.nativeEvent.touches[0].clientX,\n y: event.nativeEvent.touches[0].clientY,\n time: Date.now(),\n };\n this.setState({\n start,\n });\n };\n\n handleTouchMove: React.TouchEventHandler<HTMLDivElement> = (event) => {\n const { start } = this.state;\n if (start == null) {\n return;\n }\n\n const { selected: currentSelectedFromProps } = this.props;\n const end: Swipe = {\n x: event.nativeEvent.changedTouches[0].clientX,\n y: event.nativeEvent.changedTouches[0].clientY,\n time: Date.now(),\n };\n const difference = getSwipeDifference(start, end);\n const yAxisDifference = getSwipeDifference(start, end, 'y');\n let { isScrolling, isSwiping } = this.state;\n\n if (!isScrolling && !isSwiping) {\n if (difference > yAxisDifference) {\n isSwiping = true;\n } else {\n isScrolling = true;\n }\n }\n\n this.setState({ isScrolling, isSwiping });\n\n if (isSwiping) {\n const nextSelected = this.getTabToSelect(currentSelectedFromProps, start, end);\n this.animateLine(\n this.swipedOverHalfOfContainer(difference) ? nextSelected : currentSelectedFromProps,\n );\n }\n };\n\n handleTouchEnd: React.TouchEventHandler<HTMLDivElement> = (event) => {\n const { start, isSwiping } = this.state;\n if (start == null) {\n return;\n }\n\n const { selected } = this.props;\n const end: Swipe = {\n x: event.nativeEvent.changedTouches[0].clientX,\n y: event.nativeEvent.changedTouches[0].clientY,\n time: Date.now(),\n };\n const difference = getSwipeDifference(start, end);\n\n let nextSelected = selected;\n\n if (isSwiping) {\n if (swipeShouldChangeTab(start, end) || this.swipedOverHalfOfContainer(difference)) {\n nextSelected = this.getTabToSelect(nextSelected, start, end);\n }\n\n if (nextSelected !== selected) {\n this.switchTab(nextSelected);\n } else {\n this.animateLine(nextSelected);\n }\n }\n\n this.setState({ isSwiping: false, isScrolling: false });\n };\n\n render() {\n const { tabs, changeTabOnSwipe, name, selected, className, headerWidth } = this.props;\n const { translateLineX, fullWidthTabs } = this.state;\n\n const selectedTab = tabs[selected];\n\n return (\n <DirectionContext.Consumer>\n {(direction) => {\n const isRTL = direction === Direction.RTL;\n return (\n <div\n ref={this.containerReference}\n className={clsx('tabs', className, {\n 'tabs--auto-width': headerWidth === Width.AUTO,\n })}\n onTouchStart={changeTabOnSwipe ? this.handleTouchStart : undefined}\n onTouchEnd={changeTabOnSwipe ? this.handleTouchEnd : undefined}\n onTouchMove={changeTabOnSwipe ? this.handleTouchMove : undefined}\n >\n <TabList>\n {tabs.map(({ title, disabled }, index) => {\n return (\n <Tab\n key={title}\n ref={(node) => {\n this.tabRefs[index] = node;\n }}\n id={`${name}-tab-${index}`}\n panelId={`${name}-panel-${index}`}\n selected={selected === index}\n disabled={disabled}\n focusTab={() => {\n if (this.containerReference.current?.contains(document.activeElement)) {\n this.tabRefs[index]?.focus();\n }\n }}\n onClick={disabled ? undefined : this.handleTabClick(index)}\n onKeyDown={this.onKeyDown(index)}\n {...(fullWidthTabs\n ? { style: { width: `${(1 / tabs.length) * 100}%` } }\n : {})}\n >\n {title}\n </Tab>\n );\n })}\n {translateLineX ? (\n <li\n role=\"none\"\n className=\"tabs__line\"\n style={{\n width: this.getTabLineWidth(),\n transform: isRTL\n ? `translateX(-${translateLineX})`\n : `translateX(${translateLineX})`,\n }}\n />\n ) : null}\n </TabList>\n <div ref={this.setContainerRefAndWidth} className=\"tabs__panel-container\">\n {selectedTab && !selectedTab.disabled ? (\n <TabPanel\n key={selectedTab.title}\n tabId={`${name}-tab-${selected}`}\n id={`${name}-panel-${selected}`}\n style={{\n width: '100%',\n }}\n >\n {selectedTab.content}\n </TabPanel>\n ) : null}\n </div>\n </div>\n );\n }}\n </DirectionContext.Consumer>\n );\n }\n}"],"names":["MIN_INDEX","Tabs","Component","defaultProps","changeTabOnSwipe","headerWidth","Width","BLOCK","containerReference","createRef","constructor","props","state","start","translateLineX","isSwiping","isScrolling","fullWidthTabs","container","containerWidth","tabRefs","MAX_INDEX","tabs","length","componentDidMount","selected","setTabWidth","switchTab","clamp","animateLine","document","body","addEventListener","disableScroll","passive","window","handleResize","componentDidUpdate","previousProps","currentSelected","previousSelected","currentSelectedTab","currentSelectedTabIsDisabled","disabled","previousSelectedTab","previousSelectedTabIsDisabled","currentTabsLength","previousTabsLength","currentDisabledTabsLength","filter","tab","previousDisabledTabsLength","currentHeaderWidth","previousFullHeaderWidth","componentWillUnmount","removeEventListener","setContainerWidth","setContainerRefAndWidth","node","width","getBoundingClientRect","isTabDisabled","index","getAllTabsWidth","map","reference","reduce","a","b","getDistanceToSelectedTab","selectedTabIndex","_","idx","allTabsWidth","setState","AUTO","getTabLineWidth","getTabToSelect","end","nextSelected","swipedLeftToRight","swipedRightToLeft","Math","max","min","swipedOverHalfOfContainer","difference","onTabSelect","previousState","event","preventDefault","handleTabClick","onKeyDown","key","handleTouchStart","x","nativeEvent","touches","clientX","y","clientY","time","Date","now","handleTouchMove","currentSelectedFromProps","changedTouches","getSwipeDifference","yAxisDifference","handleTouchEnd","swipeShouldChangeTab","render","name","className","selectedTab","_jsx","DirectionContext","Consumer","children","direction","isRTL","Direction","RTL","_jsxs","ref","clsx","onTouchStart","undefined","onTouchEnd","onTouchMove","TabList","title","Tab","id","panelId","focusTab","current","contains","activeElement","focus","onClick","style","role","transform","TabPanel","tabId","content"],"mappings":"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"}
|
package/build/tabs/Tabs.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tabs.mjs","sources":["../../src/tabs/Tabs.tsx"],"sourcesContent":["import { clsx } from 'clsx';\nimport clamp from 'lodash.clamp';\nimport { Component, createRef } from 'react';\n\nimport { Width, Direction } from '../common';\nimport { DirectionContext } from '../provider/direction';\n\nimport Tab from './Tab';\nimport TabList from './TabList';\nimport TabPanel from './TabPanel';\nimport {\n getSwipeDifference,\n swipedLeftToRight,\n swipedRightToLeft,\n swipeShouldChangeTab,\n Swipe,\n} from './utils';\n\nconst MIN_INDEX = 0;\n\nexport interface TabItem {\n title: string;\n content: React.ReactNode;\n disabled: boolean;\n}\n\nexport interface TabsProps {\n tabs: TabItem[];\n selected: number;\n name: string;\n changeTabOnSwipe?: boolean;\n className?: string;\n headerWidth?: `${Width}`;\n onTabSelect: (index: number) => void;\n}\n\ninterface TabsState {\n start: Swipe | null;\n translateLineX: string | null;\n isSwiping: boolean;\n isScrolling: boolean;\n fullWidthTabs: boolean;\n}\n\nexport default class Tabs extends Component<TabsProps, TabsState> {\n declare props: TabsProps & Required<Pick<TabsProps, keyof typeof Tabs.defaultProps>>;\n\n static defaultProps = {\n changeTabOnSwipe: true,\n headerWidth: Width.BLOCK,\n } satisfies Partial<TabsProps>;\n\n containerReference = createRef<HTMLDivElement>();\n\n constructor(props: Tabs['props']) {\n super(props);\n this.state = {\n start: null,\n translateLineX: null,\n isSwiping: false,\n isScrolling: false,\n fullWidthTabs: props.headerWidth === Width.BLOCK,\n };\n }\n\n container: HTMLDivElement | null = null;\n\n containerWidth = 0;\n\n tabRefs: (HTMLLIElement | null)[] = [];\n\n get MAX_INDEX() {\n return this.props.tabs.length - 1;\n }\n\n componentDidMount() {\n const { selected } = this.props;\n\n this.setTabWidth();\n this.switchTab(clamp(selected, MIN_INDEX, this.MAX_INDEX));\n this.animateLine(clamp(selected, MIN_INDEX, this.MAX_INDEX));\n document.body.addEventListener('touchmove', this.disableScroll, { passive: false });\n document.body.addEventListener('touchforcechange', this.disableScroll, { passive: false });\n window.addEventListener('resize', this.handleResize);\n }\n\n componentDidUpdate(previousProps: TabsProps) {\n const currentSelected = this.props.selected;\n const previousSelected = previousProps.selected;\n const currentSelectedTab = this.props.tabs[currentSelected];\n const currentSelectedTabIsDisabled = currentSelectedTab?.disabled;\n const previousSelectedTab = previousProps.tabs[previousSelected];\n const previousSelectedTabIsDisabled = previousSelectedTab?.disabled;\n const currentTabsLength = this.props.tabs.length;\n const previousTabsLength = previousProps.tabs.length;\n const currentDisabledTabsLength = this.props.tabs.filter((tab) => !tab.disabled).length;\n const previousDisabledTabsLength = previousProps.tabs.filter((tab) => !tab.disabled).length;\n const currentHeaderWidth = this.props.headerWidth;\n const previousFullHeaderWidth = previousProps.headerWidth;\n\n if (\n currentHeaderWidth !== previousFullHeaderWidth ||\n currentTabsLength !== previousTabsLength\n ) {\n this.setTabWidth();\n }\n\n if (\n currentSelected !== previousSelected ||\n currentDisabledTabsLength !== previousDisabledTabsLength ||\n currentSelectedTabIsDisabled !== previousSelectedTabIsDisabled\n ) {\n this.animateLine(clamp(currentSelected, MIN_INDEX, this.MAX_INDEX));\n }\n }\n\n componentWillUnmount() {\n document.body.removeEventListener('touchmove', this.disableScroll);\n document.body.removeEventListener('touchforcechange', this.disableScroll);\n window.removeEventListener('resize', this.handleResize);\n }\n\n handleResize = () => {\n this.setContainerWidth(this.container);\n };\n\n setContainerRefAndWidth = (node: HTMLDivElement | null) => {\n this.container = node;\n this.setContainerWidth(node);\n };\n\n setContainerWidth = (node: HTMLDivElement | null) => {\n if (!node) {\n return;\n }\n\n const { width } = node.getBoundingClientRect();\n\n this.containerWidth = width;\n };\n\n isTabDisabled = (index: number) => {\n const { tabs } = this.props;\n\n return tabs[index]?.disabled ?? false;\n };\n\n getAllTabsWidth = () => {\n return this.tabRefs\n .map((reference) => {\n return reference ? reference.getBoundingClientRect().width : 0;\n })\n .reduce((a, b) => a + b, 0);\n };\n\n getDistanceToSelectedTab = (selectedTabIndex: number) => {\n return this.tabRefs\n .filter((_, idx) => idx < selectedTabIndex)\n .map((reference) => (reference ? reference.getBoundingClientRect().width : 0))\n .reduce((a, b) => a + b, 0);\n };\n\n setTabWidth = () => {\n const { fullWidthTabs } = this.state;\n const { headerWidth, selected } = this.props;\n\n const allTabsWidth = this.getAllTabsWidth();\n\n if (!fullWidthTabs && (headerWidth === Width.BLOCK || this.containerWidth < allTabsWidth)) {\n this.setState({ fullWidthTabs: true, translateLineX: `${selected * 100}%` });\n }\n if (fullWidthTabs && headerWidth === Width.AUTO && this.containerWidth >= allTabsWidth) {\n this.setState({\n fullWidthTabs: false,\n translateLineX: `${this.getDistanceToSelectedTab(selected)}px`,\n });\n }\n };\n\n getTabLineWidth = () => {\n const { fullWidthTabs } = this.state;\n const { selected, tabs } = this.props;\n\n if (fullWidthTabs) {\n return `${(1 / tabs.length) * 100}%`;\n }\n\n const reference = this.tabRefs[selected] || this.tabRefs[this.tabRefs.length - 1];\n const width = reference ? reference.getBoundingClientRect().width : 0;\n return `${width}px`;\n };\n\n /*\n * Gets the next tab that should be selected based on the swipe direction\n * and the current selected tab (is called recursively to account for disabled tabs).\n */\n getTabToSelect = (selected: number, start: Swipe, end: Swipe): number => {\n let nextSelected = selected;\n\n if (swipedLeftToRight(start, end)) {\n nextSelected -= 1;\n\n if (nextSelected > MIN_INDEX && this.isTabDisabled(nextSelected)) {\n return this.getTabToSelect(nextSelected, start, end);\n }\n } else if (swipedRightToLeft(start, end)) {\n nextSelected += 1;\n\n if (nextSelected < this.MAX_INDEX && this.isTabDisabled(nextSelected)) {\n return this.getTabToSelect(nextSelected, start, end);\n }\n }\n\n nextSelected = clamp(\n nextSelected,\n Math.max(selected - 1, MIN_INDEX),\n Math.min(selected + 1, this.MAX_INDEX),\n );\n\n if (this.isTabDisabled(nextSelected)) {\n return selected;\n }\n\n return nextSelected;\n };\n\n swipedOverHalfOfContainer = (difference: number) => difference / this.containerWidth >= 0.5;\n\n switchTab = (index: number) => {\n const { onTabSelect } = this.props;\n onTabSelect(index);\n };\n\n animateLine = (index: number) => {\n this.setState((previousState) => ({\n translateLineX: previousState.fullWidthTabs\n ? `${index * 100}%`\n : `${this.getDistanceToSelectedTab(index)}px`,\n }));\n };\n\n disableScroll = (event: Event) => {\n const { isSwiping } = this.state;\n\n if (isSwiping) {\n event.preventDefault();\n }\n };\n\n handleTabClick = (index: number) => () => {\n this.switchTab(index);\n };\n\n onKeyDown = (index: number) => (event: React.KeyboardEvent<HTMLLIElement>) => {\n if (event && event.key === 'Enter') {\n this.switchTab(index);\n }\n };\n\n handleTouchStart: React.TouchEventHandler<HTMLDivElement> = (event) => {\n const start = {\n x: event.nativeEvent.touches[0].clientX,\n y: event.nativeEvent.touches[0].clientY,\n time: Date.now(),\n };\n this.setState({\n start,\n });\n };\n\n handleTouchMove: React.TouchEventHandler<HTMLDivElement> = (event) => {\n const { start } = this.state;\n if (start == null) {\n return;\n }\n\n const { selected: currentSelectedFromProps } = this.props;\n const end: Swipe = {\n x: event.nativeEvent.changedTouches[0].clientX,\n y: event.nativeEvent.changedTouches[0].clientY,\n time: Date.now(),\n };\n const difference = getSwipeDifference(start, end);\n const yAxisDifference = getSwipeDifference(start, end, 'y');\n let { isScrolling, isSwiping } = this.state;\n\n if (!isScrolling && !isSwiping) {\n if (difference > yAxisDifference) {\n isSwiping = true;\n } else {\n isScrolling = true;\n }\n }\n\n this.setState({ isScrolling, isSwiping });\n\n if (isSwiping) {\n const nextSelected = this.getTabToSelect(currentSelectedFromProps, start, end);\n this.animateLine(\n this.swipedOverHalfOfContainer(difference) ? nextSelected : currentSelectedFromProps,\n );\n }\n };\n\n handleTouchEnd: React.TouchEventHandler<HTMLDivElement> = (event) => {\n const { start, isSwiping } = this.state;\n if (start == null) {\n return;\n }\n\n const { selected } = this.props;\n const end: Swipe = {\n x: event.nativeEvent.changedTouches[0].clientX,\n y: event.nativeEvent.changedTouches[0].clientY,\n time: Date.now(),\n };\n const difference = getSwipeDifference(start, end);\n\n let nextSelected = selected;\n\n if (isSwiping) {\n if (swipeShouldChangeTab(start, end) || this.swipedOverHalfOfContainer(difference)) {\n nextSelected = this.getTabToSelect(nextSelected, start, end);\n }\n\n if (nextSelected !== selected) {\n this.switchTab(nextSelected);\n } else {\n this.animateLine(nextSelected);\n }\n }\n\n this.setState({ isSwiping: false, isScrolling: false });\n };\n\n render() {\n const { tabs, changeTabOnSwipe, name, selected, className, headerWidth } = this.props;\n const { translateLineX, fullWidthTabs } = this.state;\n\n const selectedTab = tabs[selected];\n\n return (\n <DirectionContext.Consumer>\n {(direction) => {\n const isRTL = direction === Direction.RTL;\n return (\n <div\n ref={this.containerReference}\n className={clsx('tabs', className, {\n 'tabs--auto-width': headerWidth === Width.AUTO,\n })}\n onTouchStart={changeTabOnSwipe ? this.handleTouchStart : undefined}\n onTouchEnd={changeTabOnSwipe ? this.handleTouchEnd : undefined}\n onTouchMove={changeTabOnSwipe ? this.handleTouchMove : undefined}\n >\n <TabList>\n {tabs.map(({ title, disabled }, index) => {\n return (\n <Tab\n key={title}\n ref={(node) => {\n this.tabRefs[index] = node;\n }}\n id={`${name}-tab-${index}`}\n panelId={`${name}-panel-${index}`}\n selected={selected === index}\n disabled={disabled}\n focusTab={() => {\n if (this.containerReference.current?.contains(document.activeElement)) {\n this.tabRefs[index]?.focus();\n }\n }}\n onClick={disabled ? undefined : this.handleTabClick(index)}\n onKeyDown={this.onKeyDown(index)}\n {...(fullWidthTabs\n ? { style: { width: `${(1 / tabs.length) * 100}%` } }\n : {})}\n >\n {title}\n </Tab>\n );\n })}\n {translateLineX ? (\n <li\n role=\"none\"\n className=\"tabs__line\"\n style={{\n width: this.getTabLineWidth(),\n transform: isRTL\n ? `translateX(-${translateLineX})`\n : `translateX(${translateLineX})`,\n }}\n />\n ) : null}\n </TabList>\n <div ref={this.setContainerRefAndWidth} className=\"tabs__panel-container\">\n {selectedTab && !selectedTab.disabled ? (\n <TabPanel\n key={selectedTab.title}\n tabId={`${name}-tab-${selected}`}\n id={`${name}-panel-${selected}`}\n style={{\n width: '100%',\n }}\n >\n {selectedTab.content}\n </TabPanel>\n ) : null}\n </div>\n </div>\n );\n }}\n </DirectionContext.Consumer>\n );\n }\n}\n"],"names":["MIN_INDEX","Tabs","Component","defaultProps","changeTabOnSwipe","headerWidth","Width","BLOCK","containerReference","createRef","constructor","props","state","start","translateLineX","isSwiping","isScrolling","fullWidthTabs","container","containerWidth","tabRefs","MAX_INDEX","tabs","length","componentDidMount","selected","setTabWidth","switchTab","clamp","animateLine","document","body","addEventListener","disableScroll","passive","window","handleResize","componentDidUpdate","previousProps","currentSelected","previousSelected","currentSelectedTab","currentSelectedTabIsDisabled","disabled","previousSelectedTab","previousSelectedTabIsDisabled","currentTabsLength","previousTabsLength","currentDisabledTabsLength","filter","tab","previousDisabledTabsLength","currentHeaderWidth","previousFullHeaderWidth","componentWillUnmount","removeEventListener","setContainerWidth","setContainerRefAndWidth","node","width","getBoundingClientRect","isTabDisabled","index","getAllTabsWidth","map","reference","reduce","a","b","getDistanceToSelectedTab","selectedTabIndex","_","idx","allTabsWidth","setState","AUTO","getTabLineWidth","getTabToSelect","end","nextSelected","swipedLeftToRight","swipedRightToLeft","Math","max","min","swipedOverHalfOfContainer","difference","onTabSelect","previousState","event","preventDefault","handleTabClick","onKeyDown","key","handleTouchStart","x","nativeEvent","touches","clientX","y","clientY","time","Date","now","handleTouchMove","currentSelectedFromProps","changedTouches","getSwipeDifference","yAxisDifference","handleTouchEnd","swipeShouldChangeTab","render","name","className","selectedTab","_jsx","DirectionContext","Consumer","children","direction","isRTL","Direction","RTL","_jsxs","ref","clsx","onTouchStart","undefined","onTouchEnd","onTouchMove","TabList","title","Tab","id","panelId","focusTab","current","contains","activeElement","focus","onClick","style","role","transform","TabPanel","tabId","content"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Tabs.mjs","sources":["../../src/tabs/Tabs.tsx"],"sourcesContent":["import { clsx } from 'clsx';\nimport clamp from 'lodash.clamp';\nimport { Component, createRef } from 'react';\n\nimport { Width, Direction } from '../common';\nimport { DirectionContext } from '../provider/direction';\n\nimport Tab from './Tab';\nimport TabList from './TabList';\nimport TabPanel from './TabPanel';\nimport {\n getSwipeDifference,\n swipedLeftToRight,\n swipedRightToLeft,\n swipeShouldChangeTab,\n Swipe,\n} from './utils';\n\nconst MIN_INDEX = 0;\n\nexport interface TabItem {\n title: string;\n content: React.ReactNode;\n disabled: boolean;\n}\n\nexport interface TabsProps {\n tabs: TabItem[];\n selected: number;\n name: string;\n changeTabOnSwipe?: boolean;\n className?: string;\n headerWidth?: `${Width}`;\n onTabSelect: (index: number) => void;\n}\n\ninterface TabsState {\n start: Swipe | null;\n translateLineX: string | null;\n isSwiping: boolean;\n isScrolling: boolean;\n fullWidthTabs: boolean;\n}\n\nexport default class Tabs extends Component<TabsProps, TabsState> {\n declare props: TabsProps & Required<Pick<TabsProps, keyof typeof Tabs.defaultProps>>;\n\n static defaultProps = {\n changeTabOnSwipe: true,\n headerWidth: Width.BLOCK,\n } satisfies Partial<TabsProps>;\n\n containerReference = createRef<HTMLDivElement>();\n\n constructor(props: Tabs['props']) {\n super(props);\n this.state = {\n start: null,\n translateLineX: null,\n isSwiping: false,\n isScrolling: false,\n fullWidthTabs: props.headerWidth === Width.BLOCK,\n };\n }\n\n container: HTMLDivElement | null = null;\n\n containerWidth = 0;\n\n tabRefs: (HTMLLIElement | null)[] = [];\n\n get MAX_INDEX() {\n return this.props.tabs.length - 1;\n }\n\n componentDidMount() {\n const { selected } = this.props;\n\n this.setTabWidth();\n this.switchTab(clamp(selected, MIN_INDEX, this.MAX_INDEX));\n this.animateLine(clamp(selected, MIN_INDEX, this.MAX_INDEX));\n document.body.addEventListener('touchmove', this.disableScroll, { passive: false });\n document.body.addEventListener('touchforcechange', this.disableScroll, { passive: false });\n window.addEventListener('resize', this.handleResize);\n }\n\n componentDidUpdate(previousProps: TabsProps) {\n const currentSelected = this.props.selected;\n const previousSelected = previousProps.selected;\n const currentSelectedTab = this.props.tabs[currentSelected];\n const currentSelectedTabIsDisabled = currentSelectedTab?.disabled;\n const previousSelectedTab = previousProps.tabs[previousSelected];\n const previousSelectedTabIsDisabled = previousSelectedTab?.disabled;\n const currentTabsLength = this.props.tabs.length;\n const previousTabsLength = previousProps.tabs.length;\n const currentDisabledTabsLength = this.props.tabs.filter((tab) => !tab.disabled).length;\n const previousDisabledTabsLength = previousProps.tabs.filter((tab) => !tab.disabled).length;\n const currentHeaderWidth = this.props.headerWidth;\n const previousFullHeaderWidth = previousProps.headerWidth;\n\n if (\n currentHeaderWidth !== previousFullHeaderWidth ||\n currentTabsLength !== previousTabsLength\n ) {\n this.setTabWidth();\n }\n\n if (\n currentSelected !== previousSelected ||\n currentDisabledTabsLength !== previousDisabledTabsLength ||\n currentSelectedTabIsDisabled !== previousSelectedTabIsDisabled\n ) {\n this.animateLine(clamp(currentSelected, MIN_INDEX, this.MAX_INDEX));\n }\n }\n\n componentWillUnmount() {\n document.body.removeEventListener('touchmove', this.disableScroll);\n document.body.removeEventListener('touchforcechange', this.disableScroll);\n window.removeEventListener('resize', this.handleResize);\n }\n\n handleResize = () => {\n this.setContainerWidth(this.container);\n };\n\n setContainerRefAndWidth = (node: HTMLDivElement | null) => {\n this.container = node;\n this.setContainerWidth(node);\n };\n\n setContainerWidth = (node: HTMLDivElement | null) => {\n if (!node) {\n return;\n }\n\n const { width } = node.getBoundingClientRect();\n\n this.containerWidth = width;\n };\n\n isTabDisabled = (index: number) => {\n const { tabs } = this.props;\n\n return tabs[index]?.disabled ?? false;\n };\n\n getAllTabsWidth = () => {\n return this.tabRefs\n .map((reference) => {\n return reference ? reference.getBoundingClientRect().width : 0;\n })\n .reduce((a, b) => a + b, 0);\n };\n\n getDistanceToSelectedTab = (selectedTabIndex: number) => {\n return this.tabRefs\n .filter((_, idx) => idx < selectedTabIndex)\n .map((reference) => (reference ? reference.getBoundingClientRect().width : 0))\n .reduce((a, b) => a + b, 0);\n };\n\n setTabWidth = () => {\n const { fullWidthTabs } = this.state;\n const { headerWidth, selected } = this.props;\n\n const allTabsWidth = this.getAllTabsWidth();\n\n if (!fullWidthTabs && (headerWidth === Width.BLOCK || this.containerWidth < allTabsWidth)) {\n this.setState({ fullWidthTabs: true, translateLineX: `${selected * 100}%` });\n }\n if (fullWidthTabs && headerWidth === Width.AUTO && this.containerWidth >= allTabsWidth) {\n this.setState({\n fullWidthTabs: false,\n translateLineX: `${this.getDistanceToSelectedTab(selected)}px`,\n });\n }\n };\n\n getTabLineWidth = () => {\n const { fullWidthTabs } = this.state;\n const { selected, tabs } = this.props;\n\n if (fullWidthTabs) {\n return `${(1 / tabs.length) * 100}%`;\n }\n\n const reference = this.tabRefs[selected] || this.tabRefs[this.tabRefs.length - 1];\n const width = reference ? reference.getBoundingClientRect().width : 0;\n return `${width}px`;\n };\n\n /*\n * Gets the next tab that should be selected based on the swipe direction\n * and the current selected tab (is called recursively to account for disabled tabs).\n */\n getTabToSelect = (selected: number, start: Swipe, end: Swipe): number => {\n let nextSelected = selected;\n\n if (swipedLeftToRight(start, end)) {\n nextSelected -= 1;\n\n if (nextSelected > MIN_INDEX && this.isTabDisabled(nextSelected)) {\n return this.getTabToSelect(nextSelected, start, end);\n }\n } else if (swipedRightToLeft(start, end)) {\n nextSelected += 1;\n\n if (nextSelected < this.MAX_INDEX && this.isTabDisabled(nextSelected)) {\n return this.getTabToSelect(nextSelected, start, end);\n }\n }\n\n nextSelected = clamp(\n nextSelected,\n Math.max(selected - 1, MIN_INDEX),\n Math.min(selected + 1, this.MAX_INDEX),\n );\n\n if (this.isTabDisabled(nextSelected)) {\n return selected;\n }\n\n return nextSelected;\n };\n\n swipedOverHalfOfContainer = (difference: number) => difference / this.containerWidth >= 0.5;\n\n switchTab = (index: number) => {\n const { onTabSelect } = this.props;\n onTabSelect(index);\n };\n\n animateLine = (index: number) => {\n this.setState((previousState) => ({\n translateLineX: previousState.fullWidthTabs\n ? `${index * 100}%`\n : `${this.getDistanceToSelectedTab(index)}px`,\n }));\n };\n\n disableScroll = (event: Event) => {\n const { isSwiping } = this.state;\n\n if (isSwiping) {\n event.preventDefault();\n }\n };\n\n handleTabClick = (index: number) => () => {\n this.switchTab(index);\n };\n\n onKeyDown = (index: number) => (event: React.KeyboardEvent<HTMLLIElement>) => {\n if (event && event.key === 'Enter') {\n this.switchTab(index);\n }\n };\n\n handleTouchStart: React.TouchEventHandler<HTMLDivElement> = (event) => {\n const start = {\n x: event.nativeEvent.touches[0].clientX,\n y: event.nativeEvent.touches[0].clientY,\n time: Date.now(),\n };\n this.setState({\n start,\n });\n };\n\n handleTouchMove: React.TouchEventHandler<HTMLDivElement> = (event) => {\n const { start } = this.state;\n if (start == null) {\n return;\n }\n\n const { selected: currentSelectedFromProps } = this.props;\n const end: Swipe = {\n x: event.nativeEvent.changedTouches[0].clientX,\n y: event.nativeEvent.changedTouches[0].clientY,\n time: Date.now(),\n };\n const difference = getSwipeDifference(start, end);\n const yAxisDifference = getSwipeDifference(start, end, 'y');\n let { isScrolling, isSwiping } = this.state;\n\n if (!isScrolling && !isSwiping) {\n if (difference > yAxisDifference) {\n isSwiping = true;\n } else {\n isScrolling = true;\n }\n }\n\n this.setState({ isScrolling, isSwiping });\n\n if (isSwiping) {\n const nextSelected = this.getTabToSelect(currentSelectedFromProps, start, end);\n this.animateLine(\n this.swipedOverHalfOfContainer(difference) ? nextSelected : currentSelectedFromProps,\n );\n }\n };\n\n handleTouchEnd: React.TouchEventHandler<HTMLDivElement> = (event) => {\n const { start, isSwiping } = this.state;\n if (start == null) {\n return;\n }\n\n const { selected } = this.props;\n const end: Swipe = {\n x: event.nativeEvent.changedTouches[0].clientX,\n y: event.nativeEvent.changedTouches[0].clientY,\n time: Date.now(),\n };\n const difference = getSwipeDifference(start, end);\n\n let nextSelected = selected;\n\n if (isSwiping) {\n if (swipeShouldChangeTab(start, end) || this.swipedOverHalfOfContainer(difference)) {\n nextSelected = this.getTabToSelect(nextSelected, start, end);\n }\n\n if (nextSelected !== selected) {\n this.switchTab(nextSelected);\n } else {\n this.animateLine(nextSelected);\n }\n }\n\n this.setState({ isSwiping: false, isScrolling: false });\n };\n\n render() {\n const { tabs, changeTabOnSwipe, name, selected, className, headerWidth } = this.props;\n const { translateLineX, fullWidthTabs } = this.state;\n\n const selectedTab = tabs[selected];\n\n return (\n <DirectionContext.Consumer>\n {(direction) => {\n const isRTL = direction === Direction.RTL;\n return (\n <div\n ref={this.containerReference}\n className={clsx('tabs', className, {\n 'tabs--auto-width': headerWidth === Width.AUTO,\n })}\n onTouchStart={changeTabOnSwipe ? this.handleTouchStart : undefined}\n onTouchEnd={changeTabOnSwipe ? this.handleTouchEnd : undefined}\n onTouchMove={changeTabOnSwipe ? this.handleTouchMove : undefined}\n >\n <TabList>\n {tabs.map(({ title, disabled }, index) => {\n return (\n <Tab\n key={title}\n ref={(node) => {\n this.tabRefs[index] = node;\n }}\n id={`${name}-tab-${index}`}\n panelId={`${name}-panel-${index}`}\n selected={selected === index}\n disabled={disabled}\n focusTab={() => {\n if (this.containerReference.current?.contains(document.activeElement)) {\n this.tabRefs[index]?.focus();\n }\n }}\n onClick={disabled ? undefined : this.handleTabClick(index)}\n onKeyDown={this.onKeyDown(index)}\n {...(fullWidthTabs\n ? { style: { width: `${(1 / tabs.length) * 100}%` } }\n : {})}\n >\n {title}\n </Tab>\n );\n })}\n {translateLineX ? (\n <li\n role=\"none\"\n className=\"tabs__line\"\n style={{\n width: this.getTabLineWidth(),\n transform: isRTL\n ? `translateX(-${translateLineX})`\n : `translateX(${translateLineX})`,\n }}\n />\n ) : null}\n </TabList>\n <div ref={this.setContainerRefAndWidth} className=\"tabs__panel-container\">\n {selectedTab && !selectedTab.disabled ? (\n <TabPanel\n key={selectedTab.title}\n tabId={`${name}-tab-${selected}`}\n id={`${name}-panel-${selected}`}\n style={{\n width: '100%',\n }}\n >\n {selectedTab.content}\n </TabPanel>\n ) : null}\n </div>\n </div>\n );\n }}\n </DirectionContext.Consumer>\n );\n }\n}"],"names":["MIN_INDEX","Tabs","Component","defaultProps","changeTabOnSwipe","headerWidth","Width","BLOCK","containerReference","createRef","constructor","props","state","start","translateLineX","isSwiping","isScrolling","fullWidthTabs","container","containerWidth","tabRefs","MAX_INDEX","tabs","length","componentDidMount","selected","setTabWidth","switchTab","clamp","animateLine","document","body","addEventListener","disableScroll","passive","window","handleResize","componentDidUpdate","previousProps","currentSelected","previousSelected","currentSelectedTab","currentSelectedTabIsDisabled","disabled","previousSelectedTab","previousSelectedTabIsDisabled","currentTabsLength","previousTabsLength","currentDisabledTabsLength","filter","tab","previousDisabledTabsLength","currentHeaderWidth","previousFullHeaderWidth","componentWillUnmount","removeEventListener","setContainerWidth","setContainerRefAndWidth","node","width","getBoundingClientRect","isTabDisabled","index","getAllTabsWidth","map","reference","reduce","a","b","getDistanceToSelectedTab","selectedTabIndex","_","idx","allTabsWidth","setState","AUTO","getTabLineWidth","getTabToSelect","end","nextSelected","swipedLeftToRight","swipedRightToLeft","Math","max","min","swipedOverHalfOfContainer","difference","onTabSelect","previousState","event","preventDefault","handleTabClick","onKeyDown","key","handleTouchStart","x","nativeEvent","touches","clientX","y","clientY","time","Date","now","handleTouchMove","currentSelectedFromProps","changedTouches","getSwipeDifference","yAxisDifference","handleTouchEnd","swipeShouldChangeTab","render","name","className","selectedTab","_jsx","DirectionContext","Consumer","children","direction","isRTL","Direction","RTL","_jsxs","ref","clsx","onTouchStart","undefined","onTouchEnd","onTouchMove","TabList","title","Tab","id","panelId","focusTab","current","contains","activeElement","focus","onClick","style","role","transform","TabPanel","tabId","content"],"mappings":"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"}
|
package/package.json
CHANGED
package/src/tabs/Tab.tsx
CHANGED
package/src/tabs/Tabs.tsx
CHANGED