@elliemae/ds-tabs 2.3.0-alpha.2 → 2.3.0-alpha.7

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.
Files changed (138) hide show
  1. package/{cjs → dist/cjs}/DSTabs.js +0 -0
  2. package/{cjs → dist/cjs}/DSTabs.js.map +0 -0
  3. package/{cjs → dist/cjs}/DSTabsCTX.js +0 -0
  4. package/{cjs → dist/cjs}/DSTabsCTX.js.map +0 -0
  5. package/{cjs → dist/cjs}/DSTabsDatatestid.js +0 -0
  6. package/{cjs → dist/cjs}/DSTabsDatatestid.js.map +0 -0
  7. package/{cjs → dist/cjs}/DSTabsTypes.js +0 -0
  8. package/{cjs → dist/cjs}/DSTabsTypes.js.map +1 -1
  9. package/{cjs → dist/cjs}/config/useCrossRef.js +0 -0
  10. package/{cjs → dist/cjs}/config/useCrossRef.js.map +0 -0
  11. package/{cjs → dist/cjs}/config/useTabs.js +0 -0
  12. package/{cjs → dist/cjs}/config/useTabs.js.map +0 -0
  13. package/{cjs → dist/cjs}/defaultProps.js +0 -0
  14. package/{cjs → dist/cjs}/defaultProps.js.map +0 -0
  15. package/{cjs → dist/cjs}/exportsRelated/DSTab.js +0 -0
  16. package/{cjs → dist/cjs}/exportsRelated/DSTab.js.map +0 -0
  17. package/{cjs → dist/cjs}/index.js +0 -0
  18. package/{cjs → dist/cjs}/index.js.map +0 -0
  19. package/{cjs → dist/cjs}/parts/carousel/Carousel.js +0 -0
  20. package/{cjs → dist/cjs}/parts/carousel/Carousel.js.map +0 -0
  21. package/{cjs → dist/cjs}/parts/carousel/styles.js +0 -0
  22. package/{cjs → dist/cjs}/parts/carousel/styles.js.map +0 -0
  23. package/{cjs → dist/cjs}/parts/carousel/useCarousel.js +0 -0
  24. package/{cjs → dist/cjs}/parts/carousel/useCarousel.js.map +0 -0
  25. package/{cjs → dist/cjs}/parts/carousel/useCarouselCallbacks.js +0 -0
  26. package/{cjs → dist/cjs}/parts/carousel/useCarouselCallbacks.js.map +0 -0
  27. package/{cjs → dist/cjs}/parts/tabBar/TabBar.js +7 -0
  28. package/dist/cjs/parts/tabBar/TabBar.js.map +7 -0
  29. package/{cjs → dist/cjs}/parts/tabBar/styles.js +0 -0
  30. package/{cjs → dist/cjs}/parts/tabBar/styles.js.map +0 -0
  31. package/{cjs → dist/cjs}/parts/tabBar/useTabBar.js +5 -13
  32. package/dist/cjs/parts/tabBar/useTabBar.js.map +7 -0
  33. package/{cjs → dist/cjs}/parts/tabsContent/TabsContent.js +0 -0
  34. package/{cjs → dist/cjs}/parts/tabsContent/TabsContent.js.map +0 -0
  35. package/{cjs → dist/cjs}/parts/tabsContent/styles.js +0 -0
  36. package/{cjs → dist/cjs}/parts/tabsContent/styles.js.map +0 -0
  37. package/{cjs → dist/cjs}/parts/tabsPanel/TabsPanels.js +0 -0
  38. package/{cjs → dist/cjs}/parts/tabsPanel/TabsPanels.js.map +0 -0
  39. package/{cjs → dist/cjs}/parts/tabsPanel/styles.js +0 -0
  40. package/{cjs → dist/cjs}/parts/tabsPanel/styles.js.map +0 -0
  41. package/{cjs → dist/cjs}/propTypes.js +0 -0
  42. package/{cjs → dist/cjs}/propTypes.js.map +0 -0
  43. package/{cjs → dist/cjs}/utils/constants.js +0 -0
  44. package/{cjs → dist/cjs}/utils/constants.js.map +0 -0
  45. package/{cjs → dist/cjs}/utils/helpers.js +17 -0
  46. package/dist/cjs/utils/helpers.js.map +7 -0
  47. package/{cjs → dist/cjs}/utils/hooks/useKeyboardNavigation.js +0 -0
  48. package/{cjs → dist/cjs}/utils/hooks/useKeyboardNavigation.js.map +0 -0
  49. package/{cjs → dist/cjs}/utils/hooks/useTabsCallbacks.js +3 -18
  50. package/dist/cjs/utils/hooks/useTabsCallbacks.js.map +7 -0
  51. package/{esm → dist/esm}/DSTabs.js +0 -0
  52. package/{esm → dist/esm}/DSTabs.js.map +0 -0
  53. package/{esm → dist/esm}/DSTabsCTX.js +0 -0
  54. package/{esm → dist/esm}/DSTabsCTX.js.map +0 -0
  55. package/{esm → dist/esm}/DSTabsDatatestid.js +0 -0
  56. package/{esm → dist/esm}/DSTabsDatatestid.js.map +0 -0
  57. package/{esm → dist/esm}/DSTabsTypes.js +0 -0
  58. package/{esm → dist/esm}/DSTabsTypes.js.map +0 -0
  59. package/{esm → dist/esm}/config/useCrossRef.js +0 -0
  60. package/{esm → dist/esm}/config/useCrossRef.js.map +0 -0
  61. package/{esm → dist/esm}/config/useTabs.js +0 -0
  62. package/{esm → dist/esm}/config/useTabs.js.map +0 -0
  63. package/{esm → dist/esm}/defaultProps.js +0 -0
  64. package/{esm → dist/esm}/defaultProps.js.map +0 -0
  65. package/{esm → dist/esm}/exportsRelated/DSTab.js +0 -0
  66. package/{esm → dist/esm}/exportsRelated/DSTab.js.map +0 -0
  67. package/{esm → dist/esm}/index.js +0 -0
  68. package/{esm → dist/esm}/index.js.map +0 -0
  69. package/{esm → dist/esm}/parts/carousel/Carousel.js +0 -0
  70. package/{esm → dist/esm}/parts/carousel/Carousel.js.map +0 -0
  71. package/{esm → dist/esm}/parts/carousel/styles.js +0 -0
  72. package/{esm → dist/esm}/parts/carousel/styles.js.map +0 -0
  73. package/{esm → dist/esm}/parts/carousel/useCarousel.js +0 -0
  74. package/{esm → dist/esm}/parts/carousel/useCarousel.js.map +0 -0
  75. package/{esm → dist/esm}/parts/carousel/useCarouselCallbacks.js +0 -0
  76. package/{esm → dist/esm}/parts/carousel/useCarouselCallbacks.js.map +0 -0
  77. package/{esm → dist/esm}/parts/tabBar/TabBar.js +7 -0
  78. package/dist/esm/parts/tabBar/TabBar.js.map +7 -0
  79. package/{esm → dist/esm}/parts/tabBar/styles.js +0 -0
  80. package/{esm → dist/esm}/parts/tabBar/styles.js.map +0 -0
  81. package/{esm → dist/esm}/parts/tabBar/useTabBar.js +6 -14
  82. package/dist/esm/parts/tabBar/useTabBar.js.map +7 -0
  83. package/{esm → dist/esm}/parts/tabsContent/TabsContent.js +0 -0
  84. package/{esm → dist/esm}/parts/tabsContent/TabsContent.js.map +0 -0
  85. package/{esm → dist/esm}/parts/tabsContent/styles.js +0 -0
  86. package/{esm → dist/esm}/parts/tabsContent/styles.js.map +0 -0
  87. package/{esm → dist/esm}/parts/tabsPanel/TabsPanels.js +0 -0
  88. package/{esm → dist/esm}/parts/tabsPanel/TabsPanels.js.map +0 -0
  89. package/{esm → dist/esm}/parts/tabsPanel/styles.js +0 -0
  90. package/{esm → dist/esm}/parts/tabsPanel/styles.js.map +0 -0
  91. package/{esm → dist/esm}/propTypes.js +0 -0
  92. package/{esm → dist/esm}/propTypes.js.map +0 -0
  93. package/{esm → dist/esm}/utils/constants.js +0 -0
  94. package/{esm → dist/esm}/utils/constants.js.map +0 -0
  95. package/{esm → dist/esm}/utils/helpers.js +17 -0
  96. package/dist/esm/utils/helpers.js.map +7 -0
  97. package/{esm → dist/esm}/utils/hooks/useKeyboardNavigation.js +0 -0
  98. package/{esm → dist/esm}/utils/hooks/useKeyboardNavigation.js.map +0 -0
  99. package/{esm → dist/esm}/utils/hooks/useTabsCallbacks.js +3 -18
  100. package/dist/esm/utils/hooks/useTabsCallbacks.js.map +7 -0
  101. package/package.json +72 -70
  102. package/cjs/parts/tabBar/TabBar.js.map +0 -7
  103. package/cjs/parts/tabBar/useTabBar.js.map +0 -7
  104. package/cjs/utils/helpers.js.map +0 -7
  105. package/cjs/utils/hooks/useTabsCallbacks.js.map +0 -7
  106. package/esm/parts/tabBar/TabBar.js.map +0 -7
  107. package/esm/parts/tabBar/useTabBar.js.map +0 -7
  108. package/esm/utils/helpers.js.map +0 -7
  109. package/esm/utils/hooks/useTabsCallbacks.js.map +0 -7
  110. package/types/DSTabs.d.ts +0 -14
  111. package/types/DSTabsCTX.d.ts +0 -4
  112. package/types/DSTabsDatatestid.d.ts +0 -12
  113. package/types/DSTabsTypes.d.ts +0 -201
  114. package/types/config/useCrossRef.d.ts +0 -2
  115. package/types/config/useTabs.d.ts +0 -2
  116. package/types/defaultProps.d.ts +0 -2
  117. package/types/exportsRelated/DSTab.d.ts +0 -14
  118. package/types/index.d.ts +0 -5
  119. package/types/parts/carousel/Carousel.d.ts +0 -3
  120. package/types/parts/carousel/styles.d.ts +0 -9
  121. package/types/parts/carousel/useCarousel.d.ts +0 -2
  122. package/types/parts/carousel/useCarouselCallbacks.d.ts +0 -2
  123. package/types/parts/tabBar/TabBar.d.ts +0 -2
  124. package/types/parts/tabBar/styles.d.ts +0 -7
  125. package/types/parts/tabBar/useTabBar.d.ts +0 -2
  126. package/types/parts/tabsContent/TabsContent.d.ts +0 -2
  127. package/types/parts/tabsContent/styles.d.ts +0 -1
  128. package/types/parts/tabsPanel/TabsPanels.d.ts +0 -2
  129. package/types/parts/tabsPanel/styles.d.ts +0 -2
  130. package/types/propTypes.d.ts +0 -54
  131. package/types/tests/DSTabs.callbacks.test.d.ts +0 -1
  132. package/types/tests/DSTabs.func.test.d.ts +0 -1
  133. package/types/tests/DSTabs.keyboard.test.d.ts +0 -1
  134. package/types/tests/DSTabs.test.d.ts +0 -1
  135. package/types/utils/constants.d.ts +0 -18
  136. package/types/utils/helpers.d.ts +0 -8
  137. package/types/utils/hooks/useKeyboardNavigation.d.ts +0 -2
  138. package/types/utils/hooks/useTabsCallbacks.d.ts +0 -2
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/DSTabsTypes.tsx", "../../../../scripts/build/transpile/react-shim.js"],
4
- "sourcesContent": ["/* eslint-disable max-lines */\nimport type React from 'react';\nimport { TabTypes } from './utils/constants';\n\n// **** **** **** **** **** **** **** **** CONSTANT TYPES **** **** **** **** **** **** **** **** **** //\n\ntype TabTypesT = typeof TabTypes[keyof typeof TabTypes];\n\n// **** **** **** **** **** **** **** **** COMPONENT TYPES **** **** **** **** **** **** **** **** **** //\n\nexport interface DSTabsPropsT {\n containerProps?: Record<string, unknown>;\n innerRef?: React.MutableRefObject<HTMLDivElement>;\n animated?: boolean;\n enableMouseEvents?: boolean;\n allowTextSelection?: boolean;\n onTabChange?: (tabId: string, e?: React.MouseEvent) => void;\n tabsListAriaLabel?: string;\n type?: TabTypesT;\n tabBarExtraContent?: React.ReactNode;\n children: React.ReactElement<DSTabPropsWithDefaultT>[];\n onlyRenderActiveTab?: boolean;\n activeTab?: string;\n withCarousel?: boolean;\n firstSubtabRef?: React.MutableRefObject<HTMLElement>;\n lastTabRef?: React.MutableRefObject<HTMLElement>;\n fixedTabsHeaders?: boolean;\n isDSMobile?: boolean;\n showSelectionIndicator?: boolean;\n showSeparator?: boolean;\n}\n\nexport interface DSTabsPropsWithDefaultsT {\n containerProps: Record<string, unknown>;\n innerRef?: React.MutableRefObject<HTMLDivElement>;\n animated: boolean;\n enableMouseEvents: boolean;\n allowTextSelection: boolean;\n onTabChange: (tabId: string, e?: React.MouseEvent) => void;\n tabsListAriaLabel: string;\n type: TabTypesT;\n tabBarExtraContent?: React.ReactNode;\n children: React.ReactElement<DSTabPropsWithDefaultT>[];\n onlyRenderActiveTab: boolean;\n activeTab?: string;\n withCarousel: boolean;\n firstSubtabRef?: React.MutableRefObject<HTMLElement>;\n lastTabRef?: React.MutableRefObject<HTMLElement>;\n fixedTabsHeaders: boolean;\n isDSMobile: boolean;\n showSelectionIndicator: boolean;\n showSeparator: boolean;\n}\n\nexport interface DSTabsDefaultPropsT {\n containerProps: Record<string, unknown>;\n animated: boolean;\n enableMouseEvents: boolean;\n allowTextSelection: boolean;\n onTabChange: (tabId: string, e?: React.MouseEvent) => void;\n tabsListAriaLabel: string;\n type: TabTypesT;\n onlyRenderActiveTab: boolean;\n fixedTabsHeaders: boolean;\n children: React.ReactElement<DSTabPropsWithDefaultT>[];\n withCarousel: boolean;\n isDSMobile: boolean;\n showSelectionIndicator: boolean;\n showSeparator: boolean;\n}\n\nexport interface CarouselPropsT {\n children: React.ReactNode[];\n updateIndicatorStyle?: () => void;\n}\n\nexport interface DSTabPropsT {\n tabId: string;\n title?: string;\n required?: boolean;\n children?: React.ReactNode;\n style?: Record<string, unknown>;\n disabled?: boolean;\n ref?: React.MutableRefObject<HTMLButtonElement>;\n onClick?: (tabId: string, e: React.MouseEvent) => null | void;\n onKeyDown?: (e: React.KeyboardEvent) => null | void;\n}\n\nexport interface DSTabPropsWithDefaultT {\n tabId: string;\n title: string;\n required: boolean;\n children?: React.ReactNode;\n style?: Record<string, unknown>;\n disabled: boolean;\n ref?: React.MutableRefObject<HTMLButtonElement>;\n onClick?: (tabId: string, e: React.MouseEvent) => null | void;\n onKeyDown?: (e: React.KeyboardEvent) => null | void;\n}\n\nexport interface CarouselButtonsPropsT {\n leftButtonOnClick: () => void;\n rightButtonOnClick: () => void;\n showChevrons: ShowChevronsT;\n type: TabTypesT;\n}\n\n// **** **** **** **** **** **** **** **** CONTEXT AND HOOK TYPES **** **** **** **** **** **** **** **** **** //\n\nexport interface DSTabsUseCrossRefContextT {\n lastTabInternalRef: React.MutableRefObject<HTMLButtonElement | null | undefined>;\n firstSubtabInternalRef: React.MutableRefObject<HTMLButtonElement | null | undefined>;\n}\n\nexport interface DSTabsUseTabsContextT {\n props: DSTabsPropsWithDefaultsT;\n tabsRef: React.MutableRefObject<Record<number, HTMLButtonElement> | null>;\n focusableTabsRef: React.MutableRefObject<HTMLButtonElement[] | null>;\n tabsListRef: React.MutableRefObject<HTMLDivElement | null>;\n tabsRefAsArray: React.MutableRefObject<HTMLButtonElement[] | null>;\n actualActiveTabRef: React.MutableRefObject<HTMLButtonElement | null>;\n carouselOnlyListRef: React.MutableRefObject<HTMLDivElement | null>;\n setInternalActiveTab: React.Dispatch<React.SetStateAction<string>>;\n actualActiveTab: string;\n}\n\nexport interface UseRezisePropsT {\n ref: React.MutableRefObject<HTMLDivElement | null>;\n callback: () => void;\n}\n\nexport interface UseCarouselPropsT {\n updateIndicatorStyle?: () => void;\n}\n\nexport interface ShowChevronsT {\n right: boolean;\n left: boolean;\n}\n\nexport interface MobileGradientsT {\n right: boolean;\n left: boolean;\n}\n\nexport interface IndicatorStyleT {\n left: string;\n width: string;\n backgroundWithTransparent: string;\n}\nexport interface UseCarouselReturnTypeT {\n showChevrons: ShowChevronsT;\n leftButtonOnClick: () => void;\n rightButtonOnClick: () => void;\n handleOnClick: (e: React.MouseEvent) => void;\n handleOnScroll: (e: React.UIEvent) => void;\n}\n\nexport interface UseCarouselCallbacksPropsT {\n getVisibleItemsOffset: () => number;\n recalcChevrons: () => void;\n updateIndicatorStyle?: () => void;\n}\n\nexport interface UseCarouselCallbacksReturnTypeT {\n leftButtonOnClick: () => void;\n rightButtonOnClick: () => void;\n handleOnClick: (e: React.MouseEvent) => void;\n handleOnScroll: (e: React.UIEvent) => void;\n}\n\nexport interface UseKeyboardNavigationReturnTypeT {\n handleOnKeyDown: (e: React.KeyboardEvent) => void;\n}\n\nexport interface UseTabsCallbacksReturnTypeT {\n handleOnTabChange: (tabId: string, e?: React.MouseEvent) => void;\n handleOnMouseDown: (e: React.MouseEvent) => void;\n}\n\nexport interface UseTabBarReturnTypeT {\n updateIndicatorStyle: () => void;\n updateMobileGradients: () => void;\n setIndicatorStyle: React.Dispatch<React.SetStateAction<IndicatorStyleT>>;\n indicatorStyle: IndicatorStyleT;\n mobileGradients: MobileGradientsT;\n}\n\n// **** **** **** **** **** **** **** **** HELPERS TYPES **** **** **** **** **** **** **** **** **** //\n\nexport interface VisibleDimensionsT {\n width: number;\n height: number;\n}\n\n// **** **** **** **** **** **** **** **** STYLED TYPES **** **** **** **** **** **** **** **** **** //\n\nexport interface StyledTabWrapperPropsT {\n isDSMobile: boolean;\n fixedTabsHeaders: boolean;\n}\n\nexport interface StyledTabListPropsT {\n withCarousel: boolean;\n isDSMobile: boolean;\n fixedTabsHeaders: boolean;\n mobileGradients: MobileGradientsT;\n indicatorStyle: IndicatorStyleT;\n tabType: TabTypesT;\n}\n\nexport interface StyledSubTabsListPropsT {\n withCarousel: boolean;\n}\n\nexport interface StyledTabButtonPropsT {\n isActive: boolean;\n disabled: boolean;\n showSeparator: boolean;\n isDSMobile: boolean;\n fixedTabsHeaders: boolean;\n withCarousel: boolean;\n tabType: TabTypesT;\n}\n\nexport interface StyledCarouselButtonWrapperPropsT {\n right?: boolean;\n tabType: TabTypesT;\n}\n\nexport interface StyledPanelContainerPropsT {\n hidden: boolean;\n isDSMobile: boolean;\n}\n\nexport interface StyledSelectionIndicatoPropsT {\n isDSMobile: boolean;\n tabType: TabTypesT;\n}\n", "import * as React from 'react';\nexport { React };\n"],
4
+ "sourcesContent": ["/* eslint-disable max-lines */\nimport type React from 'react';\nimport { TabTypes } from './utils/constants';\n\n// **** **** **** **** **** **** **** **** CONSTANT TYPES **** **** **** **** **** **** **** **** **** //\n\ntype TabTypesT = typeof TabTypes[keyof typeof TabTypes];\n\n// **** **** **** **** **** **** **** **** COMPONENT TYPES **** **** **** **** **** **** **** **** **** //\n\nexport interface DSTabsPropsT {\n containerProps?: Record<string, unknown>;\n innerRef?: React.MutableRefObject<HTMLDivElement>;\n animated?: boolean;\n enableMouseEvents?: boolean;\n allowTextSelection?: boolean;\n onTabChange?: (tabId: string, e?: React.MouseEvent) => void;\n tabsListAriaLabel?: string;\n type?: TabTypesT;\n tabBarExtraContent?: React.ReactNode;\n children: React.ReactElement<DSTabPropsWithDefaultT>[];\n onlyRenderActiveTab?: boolean;\n activeTab?: string;\n withCarousel?: boolean;\n firstSubtabRef?: React.MutableRefObject<HTMLElement>;\n lastTabRef?: React.MutableRefObject<HTMLElement>;\n fixedTabsHeaders?: boolean;\n isDSMobile?: boolean;\n showSelectionIndicator?: boolean;\n showSeparator?: boolean;\n}\n\nexport interface DSTabsPropsWithDefaultsT {\n containerProps: Record<string, unknown>;\n innerRef?: React.MutableRefObject<HTMLDivElement>;\n animated: boolean;\n enableMouseEvents: boolean;\n allowTextSelection: boolean;\n onTabChange: (tabId: string, e?: React.MouseEvent) => void;\n tabsListAriaLabel: string;\n type: TabTypesT;\n tabBarExtraContent?: React.ReactNode;\n children: React.ReactElement<DSTabPropsWithDefaultT>[];\n onlyRenderActiveTab: boolean;\n activeTab?: string;\n withCarousel: boolean;\n firstSubtabRef?: React.MutableRefObject<HTMLElement>;\n lastTabRef?: React.MutableRefObject<HTMLElement>;\n fixedTabsHeaders: boolean;\n isDSMobile: boolean;\n showSelectionIndicator: boolean;\n showSeparator: boolean;\n}\n\nexport interface DSTabsDefaultPropsT {\n containerProps: Record<string, unknown>;\n animated: boolean;\n enableMouseEvents: boolean;\n allowTextSelection: boolean;\n onTabChange: (tabId: string, e?: React.MouseEvent) => void;\n tabsListAriaLabel: string;\n type: TabTypesT;\n onlyRenderActiveTab: boolean;\n fixedTabsHeaders: boolean;\n children: React.ReactElement<DSTabPropsWithDefaultT>[];\n withCarousel: boolean;\n isDSMobile: boolean;\n showSelectionIndicator: boolean;\n showSeparator: boolean;\n}\n\nexport interface CarouselPropsT {\n children: React.ReactNode[];\n updateIndicatorStyle?: () => void;\n}\n\nexport interface DSTabPropsT {\n tabId: string;\n title?: string;\n required?: boolean;\n children?: React.ReactNode;\n style?: Record<string, unknown>;\n disabled?: boolean;\n ref?: React.MutableRefObject<HTMLButtonElement>;\n onClick?: (tabId: string, e: React.MouseEvent) => null | void;\n onKeyDown?: (e: React.KeyboardEvent) => null | void;\n}\n\nexport interface DSTabPropsWithDefaultT {\n tabId: string;\n title: string;\n required: boolean;\n children?: React.ReactNode;\n style?: Record<string, unknown>;\n disabled: boolean;\n ref?: React.MutableRefObject<HTMLButtonElement>;\n onClick?: (tabId: string, e: React.MouseEvent) => null | void;\n onKeyDown?: (e: React.KeyboardEvent) => null | void;\n}\n\nexport interface CarouselButtonsPropsT {\n leftButtonOnClick: () => void;\n rightButtonOnClick: () => void;\n showChevrons: ShowChevronsT;\n type: TabTypesT;\n}\n\n// **** **** **** **** **** **** **** **** CONTEXT AND HOOK TYPES **** **** **** **** **** **** **** **** **** //\n\nexport interface DSTabsUseCrossRefContextT {\n lastTabInternalRef: React.MutableRefObject<HTMLButtonElement | null | undefined>;\n firstSubtabInternalRef: React.MutableRefObject<HTMLButtonElement | null | undefined>;\n}\n\nexport interface DSTabsUseTabsContextT {\n props: DSTabsPropsWithDefaultsT;\n tabsRef: React.MutableRefObject<Record<number, HTMLButtonElement> | null>;\n focusableTabsRef: React.MutableRefObject<HTMLButtonElement[] | null>;\n tabsListRef: React.MutableRefObject<HTMLDivElement | null>;\n tabsRefAsArray: React.MutableRefObject<HTMLButtonElement[] | null>;\n actualActiveTabRef: React.MutableRefObject<HTMLButtonElement | null>;\n carouselOnlyListRef: React.MutableRefObject<HTMLDivElement | null>;\n setInternalActiveTab: React.Dispatch<React.SetStateAction<string>>;\n actualActiveTab: string;\n}\n\nexport interface UseRezisePropsT {\n ref: React.MutableRefObject<HTMLDivElement | null>;\n callback: () => void;\n}\n\nexport interface UseCarouselPropsT {\n updateIndicatorStyle?: () => void;\n}\n\nexport interface ShowChevronsT {\n right: boolean;\n left: boolean;\n}\n\nexport interface MobileGradientsT {\n right: boolean;\n left: boolean;\n}\n\nexport interface IndicatorStyleT {\n left: string;\n width: string;\n backgroundWithTransparent: string;\n}\nexport interface UseCarouselReturnTypeT {\n showChevrons: ShowChevronsT;\n leftButtonOnClick: () => void;\n rightButtonOnClick: () => void;\n handleOnClick: (e: React.MouseEvent) => void;\n handleOnScroll: (e: React.UIEvent) => void;\n}\n\nexport interface UseCarouselCallbacksPropsT {\n getVisibleItemsOffset: () => number;\n recalcChevrons: () => void;\n updateIndicatorStyle?: () => void;\n}\n\nexport interface UseCarouselCallbacksReturnTypeT {\n leftButtonOnClick: () => void;\n rightButtonOnClick: () => void;\n handleOnClick: (e: React.MouseEvent) => void;\n handleOnScroll: (e: React.UIEvent) => void;\n}\n\nexport interface UseKeyboardNavigationReturnTypeT {\n handleOnKeyDown: (e: React.KeyboardEvent) => void;\n}\n\nexport interface UseTabsCallbacksReturnTypeT {\n handleOnTabChange: (tabId: string, e?: React.MouseEvent) => void;\n handleOnMouseDown: (e: React.MouseEvent) => void;\n}\n\nexport interface UseTabBarReturnTypeT {\n updateIndicatorStyle: () => void;\n updateMobileGradients: () => void;\n setIndicatorStyle: React.Dispatch<React.SetStateAction<IndicatorStyleT>>;\n indicatorStyle: IndicatorStyleT;\n mobileGradients: MobileGradientsT;\n}\n\n// **** **** **** **** **** **** **** **** HELPERS TYPES **** **** **** **** **** **** **** **** **** //\n\nexport interface VisibleDimensionsT {\n width: number;\n height: number;\n}\n\nexport interface CenterTabPropsT {\n e?: React.MouseEvent | React.FocusEvent;\n listRef: React.MutableRefObject<HTMLDivElement | null>;\n}\n\n// **** **** **** **** **** **** **** **** STYLED TYPES **** **** **** **** **** **** **** **** **** //\n\nexport interface StyledTabWrapperPropsT {\n isDSMobile: boolean;\n fixedTabsHeaders: boolean;\n}\n\nexport interface StyledTabListPropsT {\n withCarousel: boolean;\n isDSMobile: boolean;\n fixedTabsHeaders: boolean;\n mobileGradients: MobileGradientsT;\n indicatorStyle: IndicatorStyleT;\n tabType: TabTypesT;\n}\n\nexport interface StyledSubTabsListPropsT {\n withCarousel: boolean;\n}\n\nexport interface StyledTabButtonPropsT {\n isActive: boolean;\n disabled: boolean;\n showSeparator: boolean;\n isDSMobile: boolean;\n fixedTabsHeaders: boolean;\n withCarousel: boolean;\n tabType: TabTypesT;\n}\n\nexport interface StyledCarouselButtonWrapperPropsT {\n right?: boolean;\n tabType: TabTypesT;\n}\n\nexport interface StyledPanelContainerPropsT {\n hidden: boolean;\n isDSMobile: boolean;\n}\n\nexport interface StyledSelectionIndicatoPropsT {\n isDSMobile: boolean;\n tabType: TabTypesT;\n}\n", "import * as React from 'react';\nexport { React };\n"],
5
5
  "mappings": ";;;;;;;;;;;;;;;;;;;;;;;AAAA;ACAA,YAAuB;",
6
6
  "names": []
7
7
  }
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -36,6 +36,7 @@ var import_useTabBar = require("./useTabBar");
36
36
  var import_styles = require("./styles");
37
37
  var import_DSTabsCTX = require("../../DSTabsCTX");
38
38
  var import_useKeyboardNavigation = require("../../utils/hooks/useKeyboardNavigation");
39
+ var import_helpers = require("../../utils/helpers");
39
40
  var import_constants = require("../../utils/constants");
40
41
  var import_useTabsCallbacks = require("../../utils/hooks/useTabsCallbacks");
41
42
  var import_DSTabsDatatestid = require("../../DSTabsDatatestid");
@@ -45,6 +46,7 @@ const TabBar = () => {
45
46
  focusableTabsRef,
46
47
  tabsListRef,
47
48
  tabsRefAsArray,
49
+ carouselOnlyListRef,
48
50
  actualActiveTab,
49
51
  props: { type, fixedTabsHeaders, withCarousel, isDSMobile, showSeparator, children: tabs }
50
52
  } = (0, import_react.useContext)(import_DSTabsCTX.DSTabsContext);
@@ -103,6 +105,10 @@ const TabBar = () => {
103
105
  if (onClick && !disabled)
104
106
  onClick(tabId, e);
105
107
  },
108
+ onFocus: (e) => {
109
+ if (withCarousel)
110
+ (0, import_helpers.centerTab)({ e, listRef: carouselOnlyListRef });
111
+ },
106
112
  onKeyDown: (e) => {
107
113
  if (e.key === "Enter")
108
114
  e.stopPropagation();
@@ -129,6 +135,7 @@ const TabBar = () => {
129
135
  lastTabInternalRef,
130
136
  handleOnTabChange,
131
137
  updateIndicatorStyle,
138
+ carouselOnlyListRef,
132
139
  handleOnKeyDown
133
140
  ]);
134
141
  if (type === import_constants.TabTypes.SUBTABS && !isDSMobile) {
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/parts/tabBar/TabBar.tsx", "../../../../../../scripts/build/transpile/react-shim.js"],
4
+ "sourcesContent": ["/* eslint-disable complexity */\nimport React, { useMemo, useContext } from 'react';\nimport { Carousel } from '../carousel/Carousel';\nimport { useTabBar } from './useTabBar';\nimport {\n StyledTabButton,\n StyledTabList,\n StyledTabWrapper,\n StyledSelectionIndicator,\n StyledSubTabsList,\n StyledRequiredMark,\n} from './styles';\nimport { DSTabsContext, DSTabsCrossRefContext } from '../../DSTabsCTX';\nimport { useKeyboardNavigation } from '../../utils/hooks/useKeyboardNavigation';\nimport { centerTab } from '../../utils/helpers';\nimport { TabTypes } from '../../utils/constants';\nimport { useTabsCallbacks } from '../../utils/hooks/useTabsCallbacks';\nimport { DSTabsDatatestid } from '../../DSTabsDatatestid';\nimport type { DSTabPropsWithDefaultT } from '../../DSTabsTypes';\n\nexport const TabBar = (): JSX.Element => {\n const {\n tabsRef,\n focusableTabsRef,\n tabsListRef,\n tabsRefAsArray,\n carouselOnlyListRef,\n actualActiveTab,\n props: { type, fixedTabsHeaders, withCarousel, isDSMobile, showSeparator, children: tabs },\n } = useContext(DSTabsContext);\n\n const { lastTabInternalRef, firstSubtabInternalRef } = useContext(DSTabsCrossRefContext);\n const { handleOnTabChange } = useTabsCallbacks();\n const { handleOnKeyDown } = useKeyboardNavigation();\n\n const { indicatorStyle, mobileGradients, updateMobileGradients, updateIndicatorStyle } = useTabBar();\n\n const renderTabs: React.ReactNode[] = useMemo(() => {\n const availableTabIndexes: number[] = [];\n\n return React.Children.map(tabs, (tab: React.ReactElement<DSTabPropsWithDefaultT>, index) => {\n const { tabId = '', title = '', style, required = false, disabled = false, ref, onClick, onKeyDown } = tab.props;\n if (!disabled) availableTabIndexes.push(index);\n return (\n <StyledTabButton\n key={tabId}\n role=\"tab\"\n ref={(t: HTMLButtonElement) => {\n if (tabsRefAsArray.current && focusableTabsRef.current && tabsRef.current) {\n tabsRefAsArray.current[index] = t;\n if (!disabled && !focusableTabsRef.current.includes(t)) focusableTabsRef.current.push(t);\n tabsRef.current[index] = t;\n if (type === TabTypes.SUBTABS && firstSubtabInternalRef && index === availableTabIndexes[0]) {\n firstSubtabInternalRef.current = t;\n }\n if (type !== TabTypes.SUBTABS && index === availableTabIndexes[availableTabIndexes.length - 1]) {\n lastTabInternalRef.current = t;\n }\n if (ref) ref.current = t;\n }\n }}\n type=\"button\"\n aria-controls={tabId}\n aria-selected={actualActiveTab === tabId}\n aria-disabled={disabled}\n aria-labelledby={`${tabId}-label`}\n isDSMobile={isDSMobile}\n fixedTabsHeaders={fixedTabsHeaders}\n tabType={type}\n title={title}\n data-required={required}\n data-tab-id={tabId}\n data-index={index}\n withCarousel={withCarousel}\n isActive={actualActiveTab === tabId}\n disabled={disabled}\n showSeparator={showSeparator && type !== TabTypes.NORMAL}\n data-testid={type === TabTypes.NORMAL ? DSTabsDatatestid.TAB_BUTTON : DSTabsDatatestid.SUBTAB_BUTTON}\n id={`${tabId}-label`}\n onClick={(e) => {\n if (!disabled) {\n handleOnTabChange(tabId, e);\n updateIndicatorStyle();\n }\n if (onClick && !disabled) onClick(tabId, e);\n }}\n onFocus={(e) => {\n if (withCarousel) centerTab({ e, listRef: carouselOnlyListRef });\n }}\n onKeyDown={(e) => {\n if (e.key === 'Enter') e.stopPropagation();\n if (!disabled) handleOnKeyDown(e);\n if (onKeyDown && !disabled) onKeyDown(e);\n }}\n style={style}\n >\n {title}\n {required && <StyledRequiredMark>&#9679;</StyledRequiredMark>}\n </StyledTabButton>\n );\n });\n }, [\n tabs,\n actualActiveTab,\n isDSMobile,\n fixedTabsHeaders,\n type,\n withCarousel,\n showSeparator,\n tabsRefAsArray,\n focusableTabsRef,\n tabsRef,\n firstSubtabInternalRef,\n lastTabInternalRef,\n handleOnTabChange,\n updateIndicatorStyle,\n carouselOnlyListRef,\n handleOnKeyDown,\n ]);\n\n if (type === TabTypes.SUBTABS && !isDSMobile) {\n return (\n <StyledSubTabsList\n withCarousel={withCarousel}\n data-testid={DSTabsDatatestid.SUB_TAB_LIST}\n ref={tabsListRef}\n role=\"tablist\"\n >\n {withCarousel ? <Carousel>{renderTabs}</Carousel> : renderTabs}\n </StyledSubTabsList>\n );\n }\n\n return (\n <StyledTabList\n withCarousel={withCarousel}\n ref={tabsListRef}\n role=\"tablist\"\n data-testid={DSTabsDatatestid.TAB_LIST}\n isDSMobile={isDSMobile}\n fixedTabsHeaders={fixedTabsHeaders}\n mobileGradients={mobileGradients}\n onScroll={updateMobileGradients}\n indicatorStyle={indicatorStyle}\n tabType={type}\n >\n <StyledTabWrapper isDSMobile={isDSMobile} fixedTabsHeaders={fixedTabsHeaders}>\n {!isDSMobile && withCarousel ? (\n <Carousel updateIndicatorStyle={updateIndicatorStyle}>{renderTabs}</Carousel>\n ) : (\n renderTabs\n )}\n </StyledTabWrapper>\n <StyledSelectionIndicator isDSMobile={isDSMobile} tabType={type} />\n </StyledTabList>\n );\n};\n", "import * as React from 'react';\nexport { React };\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
File without changes
File without changes
@@ -73,7 +73,7 @@ const useTabBar = () => {
73
73
  });
74
74
  }
75
75
  }, [fixedTabsHeaders, isDSMobile, tabsListRef]);
76
- (0, import_react.useEffect)(() => {
76
+ (0, import_react.useLayoutEffect)(() => {
77
77
  if (showSelectionIndicator) {
78
78
  updateIndicatorStyle();
79
79
  }
@@ -81,21 +81,13 @@ const useTabBar = () => {
81
81
  updateMobileGradients();
82
82
  }
83
83
  }, [
84
- updateIndicatorStyle,
85
- showSelectionIndicator,
86
- actualActiveTab,
87
84
  updateMobileGradients,
85
+ showSelectionIndicator,
86
+ updateIndicatorStyle,
88
87
  isDSMobile,
89
- fixedTabsHeaders
88
+ fixedTabsHeaders,
89
+ actualActiveTab
90
90
  ]);
91
- (0, import_react.useLayoutEffect)(() => {
92
- if (showSelectionIndicator) {
93
- updateIndicatorStyle();
94
- }
95
- if (isDSMobile && !fixedTabsHeaders) {
96
- updateMobileGradients();
97
- }
98
- }, [updateMobileGradients, showSelectionIndicator, updateIndicatorStyle, isDSMobile, fixedTabsHeaders]);
99
91
  return {
100
92
  updateIndicatorStyle,
101
93
  setIndicatorStyle,
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/parts/tabBar/useTabBar.tsx", "../../../../../../scripts/build/transpile/react-shim.js"],
4
+ "sourcesContent": ["/* eslint-disable max-statements */\nimport { useCallback, useLayoutEffect, useState, useContext } from 'react';\nimport useResizeObserver from '@react-hook/resize-observer';\nimport { isElementVisible, shouldHaveLeftGradient, shouldHaveRightGradient } from '../../utils/helpers';\nimport { DSTabsContext } from '../../DSTabsCTX';\nimport { defaultIndicatorStyles } from '../../utils/constants';\nimport type { IndicatorStyleT, MobileGradientsT, UseTabBarReturnTypeT } from '../../DSTabsTypes';\n\nexport const useTabBar = (): UseTabBarReturnTypeT => {\n const {\n actualActiveTab,\n actualActiveTabRef,\n tabsListRef,\n props: { showSelectionIndicator, isDSMobile, fixedTabsHeaders },\n } = useContext(DSTabsContext);\n\n const [mobileGradients, setMobileGradients] = useState<MobileGradientsT>({ left: false, right: false });\n const [indicatorStyle, setIndicatorStyle] = useState<IndicatorStyleT>(defaultIndicatorStyles);\n\n const getIndicatorStyles = useCallback(() => {\n if (tabsListRef.current) {\n const tabList = tabsListRef.current;\n const activeTabButton = actualActiveTabRef.current;\n\n if (!activeTabButton || !isElementVisible(activeTabButton, tabList)) return defaultIndicatorStyles;\n\n // The missingMargins are to make the selection indicator white marks work properly in desktop, we need\n // the full width of the tab button with margins.\n const missingMargins = isDSMobile ? 0 : 16;\n\n const tabClientWidth =\n isDSMobile && !fixedTabsHeaders\n ? activeTabButton.clientWidth\n : activeTabButton.clientWidth + missingMargins * 2;\n\n // The reason why we use the tabList.scrollLeft is due to the centerOnTabChange (only in Mobile and FlexibleTabs)\n // behavior that adds scroll to the tabList\n const position =\n isDSMobile && !fixedTabsHeaders\n ? activeTabButton.getBoundingClientRect().left - tabList.getBoundingClientRect().left + tabList.scrollLeft\n : activeTabButton.getBoundingClientRect().left - tabList.getBoundingClientRect().left - missingMargins;\n\n const backgroundWithTransparent = `linear-gradient(to right, transparent 0px, transparent 16px, #1E79C2 16px, #1E79C2 ${\n tabClientWidth - 16\n }px,transparent ${tabClientWidth - 16}px,transparent ${tabClientWidth}px )`;\n\n return {\n left: `${position}px`,\n width: `${tabClientWidth}px`,\n backgroundWithTransparent,\n };\n }\n return defaultIndicatorStyles;\n }, [actualActiveTabRef, fixedTabsHeaders, isDSMobile, tabsListRef]);\n\n const updateIndicatorStyle = useCallback(\n () => setTimeout(() => setIndicatorStyle(getIndicatorStyles()), 100),\n [getIndicatorStyles, setIndicatorStyle],\n );\n\n useResizeObserver(tabsListRef, updateIndicatorStyle);\n\n const updateMobileGradients = useCallback(() => {\n if (tabsListRef.current && isDSMobile && !fixedTabsHeaders) {\n const { scrollLeft, scrollWidth, clientWidth } = tabsListRef.current;\n setMobileGradients({\n left: shouldHaveLeftGradient(scrollLeft),\n right: shouldHaveRightGradient(scrollLeft, clientWidth, scrollWidth),\n });\n }\n }, [fixedTabsHeaders, isDSMobile, tabsListRef]);\n\n useLayoutEffect(() => {\n if (showSelectionIndicator) {\n updateIndicatorStyle();\n }\n if (isDSMobile && !fixedTabsHeaders) {\n updateMobileGradients();\n }\n }, [\n updateMobileGradients,\n showSelectionIndicator,\n updateIndicatorStyle,\n isDSMobile,\n fixedTabsHeaders,\n actualActiveTab,\n ]);\n\n return {\n updateIndicatorStyle,\n setIndicatorStyle,\n indicatorStyle,\n mobileGradients,\n updateMobileGradients,\n };\n};\n", "import * as React from 'react';\nexport { React };\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADCvB,mBAAmE;AACnE,6BAA8B;AAC9B,qBAAkF;AAClF,uBAA8B;AAC9B,uBAAuC;AAGhC,MAAM,YAAY,MAA4B;AACnD,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAO,EAAE,wBAAwB,YAAY;AAAA,MAC3C,6BAAW;AAEf,QAAM,CAAC,iBAAiB,sBAAsB,2BAA2B,EAAE,MAAM,OAAO,OAAO;AAC/F,QAAM,CAAC,gBAAgB,qBAAqB,2BAA0B;AAEtE,QAAM,qBAAqB,8BAAY,MAAM;AAC3C,QAAI,YAAY,SAAS;AACvB,YAAM,UAAU,YAAY;AAC5B,YAAM,kBAAkB,mBAAmB;AAE3C,UAAI,CAAC,mBAAmB,CAAC,qCAAiB,iBAAiB;AAAU,eAAO;AAI5E,YAAM,iBAAiB,aAAa,IAAI;AAExC,YAAM,iBACJ,cAAc,CAAC,mBACX,gBAAgB,cAChB,gBAAgB,cAAc,iBAAiB;AAIrD,YAAM,WACJ,cAAc,CAAC,mBACX,gBAAgB,wBAAwB,OAAO,QAAQ,wBAAwB,OAAO,QAAQ,aAC9F,gBAAgB,wBAAwB,OAAO,QAAQ,wBAAwB,OAAO;AAE5F,YAAM,4BAA4B,uFAChC,iBAAiB,oBACD,iBAAiB,oBAAoB;AAEvD,aAAO;AAAA,QACL,MAAM,GAAG;AAAA,QACT,OAAO,GAAG;AAAA,QACV;AAAA;AAAA;AAGJ,WAAO;AAAA,KACN,CAAC,oBAAoB,kBAAkB,YAAY;AAEtD,QAAM,uBAAuB,8BAC3B,MAAM,WAAW,MAAM,kBAAkB,uBAAuB,MAChE,CAAC,oBAAoB;AAGvB,sCAAkB,aAAa;AAE/B,QAAM,wBAAwB,8BAAY,MAAM;AAC9C,QAAI,YAAY,WAAW,cAAc,CAAC,kBAAkB;AAC1D,YAAM,EAAE,YAAY,aAAa,gBAAgB,YAAY;AAC7D,yBAAmB;AAAA,QACjB,MAAM,2CAAuB;AAAA,QAC7B,OAAO,4CAAwB,YAAY,aAAa;AAAA;AAAA;AAAA,KAG3D,CAAC,kBAAkB,YAAY;AAElC,oCAAgB,MAAM;AACpB,QAAI,wBAAwB;AAC1B;AAAA;AAEF,QAAI,cAAc,CAAC,kBAAkB;AACnC;AAAA;AAAA,KAED;AAAA,IACD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAGF,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA;",
6
+ "names": []
7
+ }
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -27,6 +27,7 @@ var __toCommonJS = /* @__PURE__ */ ((cache) => {
27
27
  })(typeof WeakMap !== "undefined" ? /* @__PURE__ */ new WeakMap() : 0);
28
28
  var helpers_exports = {};
29
29
  __export(helpers_exports, {
30
+ centerTab: () => centerTab,
30
31
  getIdByIndex: () => getIdByIndex,
31
32
  getIndexById: () => getIndexById,
32
33
  getVisibleDimensions: () => getVisibleDimensions,
@@ -55,6 +56,22 @@ const isElementVisibleCarousel = (tab, tabContainer, firstOrLastItem = true) =>
55
56
  }
56
57
  return false;
57
58
  };
59
+ const centerTab = ({ e, listRef }) => {
60
+ if (listRef.current) {
61
+ const { offsetLeft } = e?.target;
62
+ const { width: tabWidth } = (e?.target).getBoundingClientRect();
63
+ const { width: listWidth } = listRef.current.getBoundingClientRect();
64
+ const extraSideSpace = listWidth - tabWidth;
65
+ const leftOffsetToCenter = extraSideSpace > 0 ? extraSideSpace / 2 : 0;
66
+ const centeredLeftOffset = offsetLeft > leftOffsetToCenter ? offsetLeft - leftOffsetToCenter : 0;
67
+ listRef.current.scrollTo({
68
+ top: 0,
69
+ left: centeredLeftOffset,
70
+ behavior: "smooth"
71
+ });
72
+ e?.preventDefault();
73
+ }
74
+ };
58
75
  const getVisibleDimensions = (node, referenceNode) => {
59
76
  const nodeDimensions = node.getBoundingClientRect();
60
77
  const referenceNodeDimensions = referenceNode.getBoundingClientRect();
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/utils/helpers.tsx", "../../../../../scripts/build/transpile/react-shim.js"],
4
+ "sourcesContent": ["import type { CenterTabPropsT, DSTabPropsWithDefaultT, VisibleDimensionsT } from '../DSTabsTypes';\nimport { MOBILE_GRADIENT_WIDTH } from './constants';\n\nexport const isElementVisible = (tab: HTMLElement, tabList: HTMLElement): boolean => {\n const tabDimensions = tab.getBoundingClientRect();\n const tabListDimensions = tabList.getBoundingClientRect();\n\n return tabDimensions.left <= tabListDimensions.left\n ? tabListDimensions.left - tabDimensions.left <= tabDimensions.width\n : tabDimensions.right - tabListDimensions.right <= tabDimensions.width;\n};\n\nexport const isElementVisibleCarousel = (\n tab: HTMLElement | null,\n tabContainer: HTMLDivElement | null,\n firstOrLastItem = true,\n): boolean => {\n if (tab && tabContainer) {\n const tabDimensions = tab.getBoundingClientRect();\n const tabContainerDimensions = tabContainer.getBoundingClientRect();\n\n const offset = firstOrLastItem ? 16 : 32;\n const tabDimensionsLeft = Math.floor(tabDimensions.left - offset);\n const tabDimensionsRight = Math.floor(tabDimensions.right + offset);\n\n const tabContainerDimensionsLeft = Math.floor(tabContainerDimensions.left);\n const tabContainerDimensionsRight = Math.floor(tabContainerDimensions.right);\n\n return tabDimensionsLeft >= tabContainerDimensionsLeft && tabDimensionsRight <= tabContainerDimensionsRight;\n }\n return false;\n};\n\nexport const centerTab = ({ e, listRef }: CenterTabPropsT) => {\n if (listRef.current) {\n const { offsetLeft } = e?.target as HTMLButtonElement;\n const { width: tabWidth } = (e?.target as HTMLButtonElement).getBoundingClientRect();\n const { width: listWidth } = listRef.current.getBoundingClientRect();\n const extraSideSpace = listWidth - tabWidth;\n const leftOffsetToCenter = extraSideSpace > 0 ? extraSideSpace / 2 : 0;\n const centeredLeftOffset = offsetLeft > leftOffsetToCenter ? offsetLeft - leftOffsetToCenter : 0;\n listRef.current.scrollTo({\n top: 0,\n left: centeredLeftOffset,\n behavior: 'smooth',\n });\n\n e?.preventDefault();\n }\n};\n\nexport const getVisibleDimensions = (node: HTMLElement, referenceNode: HTMLElement): VisibleDimensionsT => {\n const nodeDimensions = node.getBoundingClientRect();\n const referenceNodeDimensions = referenceNode.getBoundingClientRect();\n\n return {\n width: Math.min(\n node.clientWidth,\n referenceNodeDimensions.left + referenceNode.clientWidth - nodeDimensions.left,\n node.clientWidth - (referenceNodeDimensions.left - nodeDimensions.left),\n ),\n height: Math.min(\n node.clientHeight,\n referenceNodeDimensions.top + referenceNode.clientHeight - nodeDimensions.top,\n node.clientHeight - (referenceNodeDimensions.top - nodeDimensions.top),\n ),\n };\n};\n\nexport const getIndexById = (children: React.ReactElement<DSTabPropsWithDefaultT>[], activeId?: string): number =>\n children && children.findIndex((item: React.ReactElement<DSTabPropsWithDefaultT>) => item.props.tabId === activeId);\n\nexport const getIdByIndex = (children: React.ReactElement<DSTabPropsWithDefaultT>[], index: number): string =>\n (children && children[index].props.tabId) || '';\n\nexport const shouldHaveLeftGradient = (scrollLeft: number): boolean => Math.abs(scrollLeft) > MOBILE_GRADIENT_WIDTH;\n\nexport const shouldHaveRightGradient = (scrollLeft: number, clientWidth: number, scrollWidth: number): boolean =>\n Math.abs(scrollLeft) <= scrollWidth - (clientWidth + MOBILE_GRADIENT_WIDTH);\n", "import * as React from 'react';\nexport { React };\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADCvB,uBAAsC;AAE/B,MAAM,mBAAmB,CAAC,KAAkB,YAAkC;AACnF,QAAM,gBAAgB,IAAI;AAC1B,QAAM,oBAAoB,QAAQ;AAElC,SAAO,cAAc,QAAQ,kBAAkB,OAC3C,kBAAkB,OAAO,cAAc,QAAQ,cAAc,QAC7D,cAAc,QAAQ,kBAAkB,SAAS,cAAc;AAAA;AAG9D,MAAM,2BAA2B,CACtC,KACA,cACA,kBAAkB,SACN;AACZ,MAAI,OAAO,cAAc;AACvB,UAAM,gBAAgB,IAAI;AAC1B,UAAM,yBAAyB,aAAa;AAE5C,UAAM,SAAS,kBAAkB,KAAK;AACtC,UAAM,oBAAoB,KAAK,MAAM,cAAc,OAAO;AAC1D,UAAM,qBAAqB,KAAK,MAAM,cAAc,QAAQ;AAE5D,UAAM,6BAA6B,KAAK,MAAM,uBAAuB;AACrE,UAAM,8BAA8B,KAAK,MAAM,uBAAuB;AAEtE,WAAO,qBAAqB,8BAA8B,sBAAsB;AAAA;AAElF,SAAO;AAAA;AAGF,MAAM,YAAY,CAAC,EAAE,GAAG,cAA+B;AAC5D,MAAI,QAAQ,SAAS;AACnB,UAAM,EAAE,eAAe,GAAG;AAC1B,UAAM,EAAE,OAAO,aAAc,IAAG,QAA6B;AAC7D,UAAM,EAAE,OAAO,cAAc,QAAQ,QAAQ;AAC7C,UAAM,iBAAiB,YAAY;AACnC,UAAM,qBAAqB,iBAAiB,IAAI,iBAAiB,IAAI;AACrE,UAAM,qBAAqB,aAAa,qBAAqB,aAAa,qBAAqB;AAC/F,YAAQ,QAAQ,SAAS;AAAA,MACvB,KAAK;AAAA,MACL,MAAM;AAAA,MACN,UAAU;AAAA;AAGZ,OAAG;AAAA;AAAA;AAIA,MAAM,uBAAuB,CAAC,MAAmB,kBAAmD;AACzG,QAAM,iBAAiB,KAAK;AAC5B,QAAM,0BAA0B,cAAc;AAE9C,SAAO;AAAA,IACL,OAAO,KAAK,IACV,KAAK,aACL,wBAAwB,OAAO,cAAc,cAAc,eAAe,MAC1E,KAAK,cAAe,yBAAwB,OAAO,eAAe;AAAA,IAEpE,QAAQ,KAAK,IACX,KAAK,cACL,wBAAwB,MAAM,cAAc,eAAe,eAAe,KAC1E,KAAK,eAAgB,yBAAwB,MAAM,eAAe;AAAA;AAAA;AAKjE,MAAM,eAAe,CAAC,UAAwD,aACnF,YAAY,SAAS,UAAU,CAAC,SAAqD,KAAK,MAAM,UAAU;AAErG,MAAM,eAAe,CAAC,UAAwD,UAClF,YAAY,SAAS,OAAO,MAAM,SAAU;AAExC,MAAM,yBAAyB,CAAC,eAAgC,KAAK,IAAI,cAAc;AAEvF,MAAM,0BAA0B,CAAC,YAAoB,aAAqB,gBAC/E,KAAK,IAAI,eAAe,cAAe,eAAc;",
6
+ "names": []
7
+ }
@@ -31,6 +31,7 @@ __export(useTabsCallbacks_exports, {
31
31
  });
32
32
  var React = __toESM(require("react"));
33
33
  var import_react = require("react");
34
+ var import_helpers = require("../helpers");
34
35
  var import_DSTabsCTX = require("../../DSTabsCTX");
35
36
  const useTabsCallbacks = () => {
36
37
  const {
@@ -38,29 +39,13 @@ const useTabsCallbacks = () => {
38
39
  tabsListRef,
39
40
  props: { onTabChange, isDSMobile, allowTextSelection, fixedTabsHeaders }
40
41
  } = (0, import_react.useContext)(import_DSTabsCTX.DSTabsContext);
41
- const centerTabWhenTabChangeMobile = (0, import_react.useCallback)((e) => {
42
- if (tabsListRef.current) {
43
- const { offsetLeft } = e?.target;
44
- const { width: tabWidth } = (e?.target).getBoundingClientRect();
45
- const { width: listWidth } = tabsListRef.current.getBoundingClientRect();
46
- const extraSideSpace = listWidth - tabWidth;
47
- const leftOffsetToCenter = extraSideSpace > 0 ? extraSideSpace / 2 : 0;
48
- const centeredLeftOffset = offsetLeft > leftOffsetToCenter ? offsetLeft - leftOffsetToCenter : 0;
49
- tabsListRef.current.scrollTo({
50
- top: 0,
51
- left: centeredLeftOffset,
52
- behavior: "smooth"
53
- });
54
- e?.preventDefault();
55
- }
56
- }, [tabsListRef]);
57
42
  const handleOnTabChange = (0, import_react.useCallback)((tabId, e) => {
58
43
  setInternalActiveTab(tabId);
59
44
  onTabChange(tabId, e);
60
45
  if (isDSMobile && !fixedTabsHeaders && e) {
61
- centerTabWhenTabChangeMobile(e);
46
+ (0, import_helpers.centerTab)({ e, listRef: tabsListRef });
62
47
  }
63
- }, [centerTabWhenTabChangeMobile, fixedTabsHeaders, isDSMobile, onTabChange, setInternalActiveTab]);
48
+ }, [fixedTabsHeaders, isDSMobile, onTabChange, setInternalActiveTab, tabsListRef]);
64
49
  const handleOnMouseDown = (0, import_react.useCallback)((e) => {
65
50
  const role = e.target.getAttribute("role");
66
51
  if (role !== "tabpanel" && allowTextSelection)
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/utils/hooks/useTabsCallbacks.tsx", "../../../../../../scripts/build/transpile/react-shim.js"],
4
+ "sourcesContent": ["import React, { useCallback, useContext } from 'react';\nimport { centerTab } from '../helpers';\nimport { DSTabsContext } from '../../DSTabsCTX';\nimport type { UseTabsCallbacksReturnTypeT } from '../../DSTabsTypes';\n\nexport const useTabsCallbacks = (): UseTabsCallbacksReturnTypeT => {\n const {\n setInternalActiveTab,\n tabsListRef,\n props: { onTabChange, isDSMobile, allowTextSelection, fixedTabsHeaders },\n } = useContext(DSTabsContext);\n\n const handleOnTabChange = useCallback(\n (tabId: string, e?: React.MouseEvent) => {\n setInternalActiveTab(tabId);\n onTabChange(tabId, e);\n if (isDSMobile && !fixedTabsHeaders && e) {\n centerTab({ e, listRef: tabsListRef });\n }\n },\n [fixedTabsHeaders, isDSMobile, onTabChange, setInternalActiveTab, tabsListRef],\n );\n\n const handleOnMouseDown = useCallback(\n (e: React.MouseEvent) => {\n const role = (e.target as HTMLElement).getAttribute('role');\n if (role !== 'tabpanel' && allowTextSelection) e.stopPropagation();\n },\n [allowTextSelection],\n );\n\n return {\n handleOnTabChange,\n handleOnMouseDown,\n };\n};\n", "import * as React from 'react';\nexport { React };\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADAvB,mBAA+C;AAC/C,qBAA0B;AAC1B,uBAA8B;AAGvB,MAAM,mBAAmB,MAAmC;AACjE,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA,OAAO,EAAE,aAAa,YAAY,oBAAoB;AAAA,MACpD,6BAAW;AAEf,QAAM,oBAAoB,8BACxB,CAAC,OAAe,MAAyB;AACvC,yBAAqB;AACrB,gBAAY,OAAO;AACnB,QAAI,cAAc,CAAC,oBAAoB,GAAG;AACxC,oCAAU,EAAE,GAAG,SAAS;AAAA;AAAA,KAG5B,CAAC,kBAAkB,YAAY,aAAa,sBAAsB;AAGpE,QAAM,oBAAoB,8BACxB,CAAC,MAAwB;AACvB,UAAM,OAAQ,EAAE,OAAuB,aAAa;AACpD,QAAI,SAAS,cAAc;AAAoB,QAAE;AAAA,KAEnD,CAAC;AAGH,SAAO;AAAA,IACL;AAAA,IACA;AAAA;AAAA;",
6
+ "names": []
7
+ }
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -12,6 +12,7 @@ import {
12
12
  } from "./styles";
13
13
  import { DSTabsContext, DSTabsCrossRefContext } from "../../DSTabsCTX";
14
14
  import { useKeyboardNavigation } from "../../utils/hooks/useKeyboardNavigation";
15
+ import { centerTab } from "../../utils/helpers";
15
16
  import { TabTypes } from "../../utils/constants";
16
17
  import { useTabsCallbacks } from "../../utils/hooks/useTabsCallbacks";
17
18
  import { DSTabsDatatestid } from "../../DSTabsDatatestid";
@@ -21,6 +22,7 @@ const TabBar = () => {
21
22
  focusableTabsRef,
22
23
  tabsListRef,
23
24
  tabsRefAsArray,
25
+ carouselOnlyListRef,
24
26
  actualActiveTab,
25
27
  props: { type, fixedTabsHeaders, withCarousel, isDSMobile, showSeparator, children: tabs }
26
28
  } = useContext(DSTabsContext);
@@ -79,6 +81,10 @@ const TabBar = () => {
79
81
  if (onClick && !disabled)
80
82
  onClick(tabId, e);
81
83
  },
84
+ onFocus: (e) => {
85
+ if (withCarousel)
86
+ centerTab({ e, listRef: carouselOnlyListRef });
87
+ },
82
88
  onKeyDown: (e) => {
83
89
  if (e.key === "Enter")
84
90
  e.stopPropagation();
@@ -105,6 +111,7 @@ const TabBar = () => {
105
111
  lastTabInternalRef,
106
112
  handleOnTabChange,
107
113
  updateIndicatorStyle,
114
+ carouselOnlyListRef,
108
115
  handleOnKeyDown
109
116
  ]);
110
117
  if (type === TabTypes.SUBTABS && !isDSMobile) {
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../scripts/build/transpile/react-shim.js", "../../../../src/parts/tabBar/TabBar.tsx"],
4
+ "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "/* eslint-disable complexity */\nimport React, { useMemo, useContext } from 'react';\nimport { Carousel } from '../carousel/Carousel';\nimport { useTabBar } from './useTabBar';\nimport {\n StyledTabButton,\n StyledTabList,\n StyledTabWrapper,\n StyledSelectionIndicator,\n StyledSubTabsList,\n StyledRequiredMark,\n} from './styles';\nimport { DSTabsContext, DSTabsCrossRefContext } from '../../DSTabsCTX';\nimport { useKeyboardNavigation } from '../../utils/hooks/useKeyboardNavigation';\nimport { centerTab } from '../../utils/helpers';\nimport { TabTypes } from '../../utils/constants';\nimport { useTabsCallbacks } from '../../utils/hooks/useTabsCallbacks';\nimport { DSTabsDatatestid } from '../../DSTabsDatatestid';\nimport type { DSTabPropsWithDefaultT } from '../../DSTabsTypes';\n\nexport const TabBar = (): JSX.Element => {\n const {\n tabsRef,\n focusableTabsRef,\n tabsListRef,\n tabsRefAsArray,\n carouselOnlyListRef,\n actualActiveTab,\n props: { type, fixedTabsHeaders, withCarousel, isDSMobile, showSeparator, children: tabs },\n } = useContext(DSTabsContext);\n\n const { lastTabInternalRef, firstSubtabInternalRef } = useContext(DSTabsCrossRefContext);\n const { handleOnTabChange } = useTabsCallbacks();\n const { handleOnKeyDown } = useKeyboardNavigation();\n\n const { indicatorStyle, mobileGradients, updateMobileGradients, updateIndicatorStyle } = useTabBar();\n\n const renderTabs: React.ReactNode[] = useMemo(() => {\n const availableTabIndexes: number[] = [];\n\n return React.Children.map(tabs, (tab: React.ReactElement<DSTabPropsWithDefaultT>, index) => {\n const { tabId = '', title = '', style, required = false, disabled = false, ref, onClick, onKeyDown } = tab.props;\n if (!disabled) availableTabIndexes.push(index);\n return (\n <StyledTabButton\n key={tabId}\n role=\"tab\"\n ref={(t: HTMLButtonElement) => {\n if (tabsRefAsArray.current && focusableTabsRef.current && tabsRef.current) {\n tabsRefAsArray.current[index] = t;\n if (!disabled && !focusableTabsRef.current.includes(t)) focusableTabsRef.current.push(t);\n tabsRef.current[index] = t;\n if (type === TabTypes.SUBTABS && firstSubtabInternalRef && index === availableTabIndexes[0]) {\n firstSubtabInternalRef.current = t;\n }\n if (type !== TabTypes.SUBTABS && index === availableTabIndexes[availableTabIndexes.length - 1]) {\n lastTabInternalRef.current = t;\n }\n if (ref) ref.current = t;\n }\n }}\n type=\"button\"\n aria-controls={tabId}\n aria-selected={actualActiveTab === tabId}\n aria-disabled={disabled}\n aria-labelledby={`${tabId}-label`}\n isDSMobile={isDSMobile}\n fixedTabsHeaders={fixedTabsHeaders}\n tabType={type}\n title={title}\n data-required={required}\n data-tab-id={tabId}\n data-index={index}\n withCarousel={withCarousel}\n isActive={actualActiveTab === tabId}\n disabled={disabled}\n showSeparator={showSeparator && type !== TabTypes.NORMAL}\n data-testid={type === TabTypes.NORMAL ? DSTabsDatatestid.TAB_BUTTON : DSTabsDatatestid.SUBTAB_BUTTON}\n id={`${tabId}-label`}\n onClick={(e) => {\n if (!disabled) {\n handleOnTabChange(tabId, e);\n updateIndicatorStyle();\n }\n if (onClick && !disabled) onClick(tabId, e);\n }}\n onFocus={(e) => {\n if (withCarousel) centerTab({ e, listRef: carouselOnlyListRef });\n }}\n onKeyDown={(e) => {\n if (e.key === 'Enter') e.stopPropagation();\n if (!disabled) handleOnKeyDown(e);\n if (onKeyDown && !disabled) onKeyDown(e);\n }}\n style={style}\n >\n {title}\n {required && <StyledRequiredMark>&#9679;</StyledRequiredMark>}\n </StyledTabButton>\n );\n });\n }, [\n tabs,\n actualActiveTab,\n isDSMobile,\n fixedTabsHeaders,\n type,\n withCarousel,\n showSeparator,\n tabsRefAsArray,\n focusableTabsRef,\n tabsRef,\n firstSubtabInternalRef,\n lastTabInternalRef,\n handleOnTabChange,\n updateIndicatorStyle,\n carouselOnlyListRef,\n handleOnKeyDown,\n ]);\n\n if (type === TabTypes.SUBTABS && !isDSMobile) {\n return (\n <StyledSubTabsList\n withCarousel={withCarousel}\n data-testid={DSTabsDatatestid.SUB_TAB_LIST}\n ref={tabsListRef}\n role=\"tablist\"\n >\n {withCarousel ? <Carousel>{renderTabs}</Carousel> : renderTabs}\n </StyledSubTabsList>\n );\n }\n\n return (\n <StyledTabList\n withCarousel={withCarousel}\n ref={tabsListRef}\n role=\"tablist\"\n data-testid={DSTabsDatatestid.TAB_LIST}\n isDSMobile={isDSMobile}\n fixedTabsHeaders={fixedTabsHeaders}\n mobileGradients={mobileGradients}\n onScroll={updateMobileGradients}\n indicatorStyle={indicatorStyle}\n tabType={type}\n >\n <StyledTabWrapper isDSMobile={isDSMobile} fixedTabsHeaders={fixedTabsHeaders}>\n {!isDSMobile && withCarousel ? (\n <Carousel updateIndicatorStyle={updateIndicatorStyle}>{renderTabs}</Carousel>\n ) : (\n renderTabs\n )}\n </StyledTabWrapper>\n <StyledSelectionIndicator isDSMobile={isDSMobile} tabType={type} />\n </StyledTabList>\n );\n};\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
File without changes
File without changes
@@ -1,5 +1,5 @@
1
1
  import * as React from "react";
2
- import { useCallback, useLayoutEffect, useEffect, useState, useContext } from "react";
2
+ import { useCallback, useLayoutEffect, useState, useContext } from "react";
3
3
  import useResizeObserver from "@react-hook/resize-observer";
4
4
  import { isElementVisible, shouldHaveLeftGradient, shouldHaveRightGradient } from "../../utils/helpers";
5
5
  import { DSTabsContext } from "../../DSTabsCTX";
@@ -42,7 +42,7 @@ const useTabBar = () => {
42
42
  });
43
43
  }
44
44
  }, [fixedTabsHeaders, isDSMobile, tabsListRef]);
45
- useEffect(() => {
45
+ useLayoutEffect(() => {
46
46
  if (showSelectionIndicator) {
47
47
  updateIndicatorStyle();
48
48
  }
@@ -50,21 +50,13 @@ const useTabBar = () => {
50
50
  updateMobileGradients();
51
51
  }
52
52
  }, [
53
- updateIndicatorStyle,
54
- showSelectionIndicator,
55
- actualActiveTab,
56
53
  updateMobileGradients,
54
+ showSelectionIndicator,
55
+ updateIndicatorStyle,
57
56
  isDSMobile,
58
- fixedTabsHeaders
57
+ fixedTabsHeaders,
58
+ actualActiveTab
59
59
  ]);
60
- useLayoutEffect(() => {
61
- if (showSelectionIndicator) {
62
- updateIndicatorStyle();
63
- }
64
- if (isDSMobile && !fixedTabsHeaders) {
65
- updateMobileGradients();
66
- }
67
- }, [updateMobileGradients, showSelectionIndicator, updateIndicatorStyle, isDSMobile, fixedTabsHeaders]);
68
60
  return {
69
61
  updateIndicatorStyle,
70
62
  setIndicatorStyle,
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../scripts/build/transpile/react-shim.js", "../../../../src/parts/tabBar/useTabBar.tsx"],
4
+ "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "/* eslint-disable max-statements */\nimport { useCallback, useLayoutEffect, useState, useContext } from 'react';\nimport useResizeObserver from '@react-hook/resize-observer';\nimport { isElementVisible, shouldHaveLeftGradient, shouldHaveRightGradient } from '../../utils/helpers';\nimport { DSTabsContext } from '../../DSTabsCTX';\nimport { defaultIndicatorStyles } from '../../utils/constants';\nimport type { IndicatorStyleT, MobileGradientsT, UseTabBarReturnTypeT } from '../../DSTabsTypes';\n\nexport const useTabBar = (): UseTabBarReturnTypeT => {\n const {\n actualActiveTab,\n actualActiveTabRef,\n tabsListRef,\n props: { showSelectionIndicator, isDSMobile, fixedTabsHeaders },\n } = useContext(DSTabsContext);\n\n const [mobileGradients, setMobileGradients] = useState<MobileGradientsT>({ left: false, right: false });\n const [indicatorStyle, setIndicatorStyle] = useState<IndicatorStyleT>(defaultIndicatorStyles);\n\n const getIndicatorStyles = useCallback(() => {\n if (tabsListRef.current) {\n const tabList = tabsListRef.current;\n const activeTabButton = actualActiveTabRef.current;\n\n if (!activeTabButton || !isElementVisible(activeTabButton, tabList)) return defaultIndicatorStyles;\n\n // The missingMargins are to make the selection indicator white marks work properly in desktop, we need\n // the full width of the tab button with margins.\n const missingMargins = isDSMobile ? 0 : 16;\n\n const tabClientWidth =\n isDSMobile && !fixedTabsHeaders\n ? activeTabButton.clientWidth\n : activeTabButton.clientWidth + missingMargins * 2;\n\n // The reason why we use the tabList.scrollLeft is due to the centerOnTabChange (only in Mobile and FlexibleTabs)\n // behavior that adds scroll to the tabList\n const position =\n isDSMobile && !fixedTabsHeaders\n ? activeTabButton.getBoundingClientRect().left - tabList.getBoundingClientRect().left + tabList.scrollLeft\n : activeTabButton.getBoundingClientRect().left - tabList.getBoundingClientRect().left - missingMargins;\n\n const backgroundWithTransparent = `linear-gradient(to right, transparent 0px, transparent 16px, #1E79C2 16px, #1E79C2 ${\n tabClientWidth - 16\n }px,transparent ${tabClientWidth - 16}px,transparent ${tabClientWidth}px )`;\n\n return {\n left: `${position}px`,\n width: `${tabClientWidth}px`,\n backgroundWithTransparent,\n };\n }\n return defaultIndicatorStyles;\n }, [actualActiveTabRef, fixedTabsHeaders, isDSMobile, tabsListRef]);\n\n const updateIndicatorStyle = useCallback(\n () => setTimeout(() => setIndicatorStyle(getIndicatorStyles()), 100),\n [getIndicatorStyles, setIndicatorStyle],\n );\n\n useResizeObserver(tabsListRef, updateIndicatorStyle);\n\n const updateMobileGradients = useCallback(() => {\n if (tabsListRef.current && isDSMobile && !fixedTabsHeaders) {\n const { scrollLeft, scrollWidth, clientWidth } = tabsListRef.current;\n setMobileGradients({\n left: shouldHaveLeftGradient(scrollLeft),\n right: shouldHaveRightGradient(scrollLeft, clientWidth, scrollWidth),\n });\n }\n }, [fixedTabsHeaders, isDSMobile, tabsListRef]);\n\n useLayoutEffect(() => {\n if (showSelectionIndicator) {\n updateIndicatorStyle();\n }\n if (isDSMobile && !fixedTabsHeaders) {\n updateMobileGradients();\n }\n }, [\n updateMobileGradients,\n showSelectionIndicator,\n updateIndicatorStyle,\n isDSMobile,\n fixedTabsHeaders,\n actualActiveTab,\n ]);\n\n return {\n updateIndicatorStyle,\n setIndicatorStyle,\n indicatorStyle,\n mobileGradients,\n updateMobileGradients,\n };\n};\n"],
5
+ "mappings": "AAAA;ACCA;AACA;AACA;AACA;AACA;AAGO,MAAM,YAAY,MAA4B;AACnD,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAO,EAAE,wBAAwB,YAAY;AAAA,MAC3C,WAAW;AAEf,QAAM,CAAC,iBAAiB,sBAAsB,SAA2B,EAAE,MAAM,OAAO,OAAO;AAC/F,QAAM,CAAC,gBAAgB,qBAAqB,SAA0B;AAEtE,QAAM,qBAAqB,YAAY,MAAM;AAC3C,QAAI,YAAY,SAAS;AACvB,YAAM,UAAU,YAAY;AAC5B,YAAM,kBAAkB,mBAAmB;AAE3C,UAAI,CAAC,mBAAmB,CAAC,iBAAiB,iBAAiB;AAAU,eAAO;AAI5E,YAAM,iBAAiB,aAAa,IAAI;AAExC,YAAM,iBACJ,cAAc,CAAC,mBACX,gBAAgB,cAChB,gBAAgB,cAAc,iBAAiB;AAIrD,YAAM,WACJ,cAAc,CAAC,mBACX,gBAAgB,wBAAwB,OAAO,QAAQ,wBAAwB,OAAO,QAAQ,aAC9F,gBAAgB,wBAAwB,OAAO,QAAQ,wBAAwB,OAAO;AAE5F,YAAM,4BAA4B,uFAChC,iBAAiB,oBACD,iBAAiB,oBAAoB;AAEvD,aAAO;AAAA,QACL,MAAM,GAAG;AAAA,QACT,OAAO,GAAG;AAAA,QACV;AAAA;AAAA;AAGJ,WAAO;AAAA,KACN,CAAC,oBAAoB,kBAAkB,YAAY;AAEtD,QAAM,uBAAuB,YAC3B,MAAM,WAAW,MAAM,kBAAkB,uBAAuB,MAChE,CAAC,oBAAoB;AAGvB,oBAAkB,aAAa;AAE/B,QAAM,wBAAwB,YAAY,MAAM;AAC9C,QAAI,YAAY,WAAW,cAAc,CAAC,kBAAkB;AAC1D,YAAM,EAAE,YAAY,aAAa,gBAAgB,YAAY;AAC7D,yBAAmB;AAAA,QACjB,MAAM,uBAAuB;AAAA,QAC7B,OAAO,wBAAwB,YAAY,aAAa;AAAA;AAAA;AAAA,KAG3D,CAAC,kBAAkB,YAAY;AAElC,kBAAgB,MAAM;AACpB,QAAI,wBAAwB;AAC1B;AAAA;AAEF,QAAI,cAAc,CAAC,kBAAkB;AACnC;AAAA;AAAA,KAED;AAAA,IACD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAGF,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA;",
6
+ "names": []
7
+ }
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes