@razorpay/blade 11.31.1 → 11.32.0

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 (55) hide show
  1. package/build/lib/native/tokens/global/size.js +1 -1
  2. package/build/lib/native/tokens/global/size.js.map +1 -1
  3. package/build/lib/native/utils/componentZIndices.js +1 -1
  4. package/build/lib/native/utils/componentZIndices.js.map +1 -1
  5. package/build/lib/web/development/components/Menu/VisualSubComponents/MenuHeaderFooter.web.js +5 -4
  6. package/build/lib/web/development/components/Menu/VisualSubComponents/MenuHeaderFooter.web.js.map +1 -1
  7. package/build/lib/web/development/components/Table/Table.web.js +2 -1
  8. package/build/lib/web/development/components/Table/Table.web.js.map +1 -1
  9. package/build/lib/web/development/components/Table/TableBody.web.js +4 -2
  10. package/build/lib/web/development/components/Table/TableBody.web.js.map +1 -1
  11. package/build/lib/web/development/components/TopNav/TabNav/TabNav.web.js +103 -124
  12. package/build/lib/web/development/components/TopNav/TabNav/TabNav.web.js.map +1 -1
  13. package/build/lib/web/development/components/TopNav/TabNav/TabNavContext.js.map +1 -1
  14. package/build/lib/web/development/components/TopNav/TabNav/TabNavItem.web.js +38 -45
  15. package/build/lib/web/development/components/TopNav/TabNav/TabNavItem.web.js.map +1 -1
  16. package/build/lib/web/development/components/TopNav/TabNav/index.js +1 -1
  17. package/build/lib/web/development/components/TopNav/TabNav/utils.js +17 -30
  18. package/build/lib/web/development/components/TopNav/TabNav/utils.js.map +1 -1
  19. package/build/lib/web/development/components/TopNav/TopNav.web.js +34 -87
  20. package/build/lib/web/development/components/TopNav/TopNav.web.js.map +1 -1
  21. package/build/lib/web/development/components/index.js +1 -1
  22. package/build/lib/web/development/tokens/global/size.js +2 -0
  23. package/build/lib/web/development/tokens/global/size.js.map +1 -1
  24. package/build/lib/web/development/utils/componentZIndices.js +2 -1
  25. package/build/lib/web/development/utils/componentZIndices.js.map +1 -1
  26. package/build/lib/web/production/components/Menu/VisualSubComponents/MenuHeaderFooter.web.js +5 -4
  27. package/build/lib/web/production/components/Menu/VisualSubComponents/MenuHeaderFooter.web.js.map +1 -1
  28. package/build/lib/web/production/components/Table/Table.web.js +2 -1
  29. package/build/lib/web/production/components/Table/Table.web.js.map +1 -1
  30. package/build/lib/web/production/components/Table/TableBody.web.js +4 -2
  31. package/build/lib/web/production/components/Table/TableBody.web.js.map +1 -1
  32. package/build/lib/web/production/components/TopNav/TabNav/TabNav.web.js +103 -124
  33. package/build/lib/web/production/components/TopNav/TabNav/TabNav.web.js.map +1 -1
  34. package/build/lib/web/production/components/TopNav/TabNav/TabNavContext.js.map +1 -1
  35. package/build/lib/web/production/components/TopNav/TabNav/TabNavItem.web.js +38 -45
  36. package/build/lib/web/production/components/TopNav/TabNav/TabNavItem.web.js.map +1 -1
  37. package/build/lib/web/production/components/TopNav/TabNav/index.js +1 -1
  38. package/build/lib/web/production/components/TopNav/TabNav/utils.js +17 -30
  39. package/build/lib/web/production/components/TopNav/TabNav/utils.js.map +1 -1
  40. package/build/lib/web/production/components/TopNav/TopNav.web.js +34 -87
  41. package/build/lib/web/production/components/TopNav/TopNav.web.js.map +1 -1
  42. package/build/lib/web/production/components/index.js +1 -1
  43. package/build/lib/web/production/tokens/global/size.js +2 -0
  44. package/build/lib/web/production/tokens/global/size.js.map +1 -1
  45. package/build/lib/web/production/utils/componentZIndices.js +2 -1
  46. package/build/lib/web/production/utils/componentZIndices.js.map +1 -1
  47. package/build/types/components/index.d.ts +61 -49
  48. package/build/types/components/index.native.d.ts +22 -8
  49. package/build/types/tokens/index.d.ts +2 -0
  50. package/build/types/tokens/index.native.d.ts +2 -0
  51. package/package.json +1 -1
  52. package/build/lib/web/development/components/TopNav/TopNavContext.js +0 -13
  53. package/build/lib/web/development/components/TopNav/TopNavContext.js.map +0 -1
  54. package/build/lib/web/production/components/TopNav/TopNavContext.js +0 -13
  55. package/build/lib/web/production/components/TopNav/TopNavContext.js.map +0 -1
@@ -1,172 +1,151 @@
1
1
  import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
2
- import _objectWithoutProperties from '@babel/runtime/helpers/objectWithoutProperties';
3
2
  import _defineProperty from '@babel/runtime/helpers/defineProperty';
3
+ import _objectWithoutProperties from '@babel/runtime/helpers/objectWithoutProperties';
4
4
  import React__default from 'react';
5
- import styled from 'styled-components';
6
- import { useTopNavContext } from '../TopNavContext.js';
7
- import { MIXED_BG_COLOR, useHasOverflow, approximatelyEqual } from './utils.js';
5
+ import ReactDOM from 'react-dom';
8
6
  import { TabNavContext } from './TabNavContext.js';
7
+ import { useResize } from './utils.js';
9
8
  import '../../Box/BaseBox/index.js';
10
9
  import '../../Box/styledProps/index.js';
11
- import '../../Button/index.js';
12
10
  import '../../Divider/index.js';
13
- import '../../Icons/index.js';
14
11
  import '../../../utils/index.js';
15
12
  import '../../../tokens/global/index.js';
16
- import getIn from '../../../utils/lodashButBetter/get.js';
17
13
  import '../../../utils/metaAttribute/index.js';
18
- import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
19
- import { BaseBox } from '../../Box/BaseBox/BaseBox.web.js';
20
- import { makeMotionTime } from '../../../utils/makeMotionTime/makeMotionTime.web.js';
14
+ import '../../Box/index.js';
15
+ import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
16
+ import { Box } from '../../Box/Box.js';
17
+ import { Divider } from '../../Divider/Divider.js';
21
18
  import { makeSize } from '../../../utils/makeSize/makeSize.js';
19
+ import { size } from '../../../tokens/global/size.js';
20
+ import { BaseBox } from '../../Box/BaseBox/BaseBox.web.js';
22
21
  import { getStyledProps } from '../../Box/styledProps/getStyledProps.js';
23
22
  import { metaAttribute } from '../../../utils/metaAttribute/metaAttribute.web.js';
24
23
  import { MetaConstants } from '../../../utils/metaAttribute/metaConstants.js';
25
- import Button from '../../Button/Button/Button.js';
26
- import ChevronLeftIcon from '../../Icons/ChevronLeftIcon/ChevronLeftIcon.js';
27
- import { Divider } from '../../Divider/Divider.js';
28
- import { size } from '../../../tokens/global/size.js';
29
- import ChevronRightIcon from '../../Icons/ChevronRightIcon/ChevronRightIcon.js';
30
24
 
31
- var _excluded = ["children"];
25
+ var _excluded = ["children"],
26
+ _excluded2 = ["children", "items"];
32
27
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
33
28
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
34
- var GRADIENT_WIDTH = 54;
35
- var GRADIENT_OFFSET = -8;
36
- var OFFSET_BOTTOM = -12;
37
- var SCROLL_AMOUNT = 200;
38
- var ScrollableArea = /*#__PURE__*/styled(BaseBox).withConfig({
39
- displayName: "TabNavweb__ScrollableArea",
40
- componentId: "sc-1ww6x3k-0"
41
- })(function () {
42
- return {
43
- '&::-webkit-scrollbar': {
44
- display: 'none'
45
- }
46
- };
47
- });
48
- var GradientOverlay = /*#__PURE__*/styled(BaseBox).withConfig({
49
- displayName: "TabNavweb__GradientOverlay",
50
- componentId: "sc-1ww6x3k-1"
51
- })(function (_ref) {
52
- var theme = _ref.theme,
53
- shouldShow = _ref.shouldShow,
54
- variant = _ref.variant,
55
- $color = _ref.$color;
56
- var color = getIn(theme.colors, $color, MIXED_BG_COLOR);
57
- return _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty({
58
- position: 'absolute'
59
- }, variant, 0), "pointerEvents", shouldShow ? 'auto' : 'none'), "transform", shouldShow ? 'scale(1)' : 'scale(0.5)'), "opacity", shouldShow ? 1 : 0), "transitionTimingFunction", "".concat(theme.motion.easing.standard.revealing)), "transitionDuration", "".concat(makeMotionTime(theme.motion.duration.xquick))), "transitionProperty", 'opacity, transform'), "zIndex", 1), ':before', _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty({
60
- content: "''",
61
- pointerEvents: 'none',
62
- position: 'absolute'
63
- }, variant, 0), "top", makeSize(GRADIENT_OFFSET)), "bottom", makeSize(GRADIENT_OFFSET)), "width", makeSize(GRADIENT_WIDTH)), "background", "linear-gradient(to ".concat(variant, ", transparent 0%, ").concat(color, " 30%, ").concat(color, " 100%);")));
64
- });
65
- var TabNav = function TabNav(_ref3) {
66
- var children = _ref3.children,
67
- styledProps = _objectWithoutProperties(_ref3, _excluded);
29
+ var TabNavItems = function TabNavItems(_ref) {
30
+ var children = _ref.children,
31
+ props = _objectWithoutProperties(_ref, _excluded);
32
+ return /*#__PURE__*/jsxs(Box, _objectSpread(_objectSpread({}, props), {}, {
33
+ display: "flex",
34
+ width: "100%",
35
+ gap: "spacing.0",
36
+ position: "relative",
37
+ left: "-1px",
38
+ children: [React__default.Children.map(children, function (child, index) {
39
+ return /*#__PURE__*/jsxs(Fragment, {
40
+ children: [index > 0 ? /*#__PURE__*/jsx(Divider, {
41
+ margin: "auto",
42
+ variant: "muted",
43
+ orientation: "vertical",
44
+ height: makeSize(size[16])
45
+ }) : null, /*#__PURE__*/React__default.cloneElement(child, {
46
+ __isInsideTabNavItems: true,
47
+ __index: index
48
+ })]
49
+ });
50
+ }), /*#__PURE__*/jsx(Divider, {
51
+ margin: "auto",
52
+ variant: "muted",
53
+ orientation: "vertical",
54
+ height: makeSize(size[16])
55
+ })]
56
+ }));
57
+ };
58
+ var TabNav = function TabNav(_ref2) {
59
+ var children = _ref2.children,
60
+ items = _ref2.items,
61
+ styledProps = _objectWithoutProperties(_ref2, _excluded2);
68
62
  var ref = React__default.useRef(null);
69
- var hasOverflow = useHasOverflow(ref);
70
- var _React$useState = React__default.useState('start'),
63
+ var _React$useState = React__default.useState(items),
71
64
  _React$useState2 = _slicedToArray(_React$useState, 2),
72
- scrollStatus = _React$useState2[0],
73
- setScrollStatus = _React$useState2[1];
74
- var _useTopNavContext = useTopNavContext(),
75
- backgroundColor = _useTopNavContext.backgroundColor;
65
+ controlledItems = _React$useState2[0],
66
+ setControlledItems = _React$useState2[1];
67
+ var overflowingItems = controlledItems.filter(function (item) {
68
+ var _item$isAlwaysOverflo;
69
+ return (_item$isAlwaysOverflo = item.isAlwaysOverflowing) !== null && _item$isAlwaysOverflo !== void 0 ? _item$isAlwaysOverflo : item.isOverflowing;
70
+ });
71
+ var _items = controlledItems.filter(function (item) {
72
+ return !item.isAlwaysOverflowing && !item.isOverflowing;
73
+ });
76
74
 
77
- // Check if the scroll is at start, end or middle
78
- var handleScrollStatus = React__default.useCallback(function (e) {
79
- var target = e.target;
80
- var isAtStart = target.scrollLeft === 0;
81
- var isAtEnd = approximatelyEqual(target.scrollLeft, target.scrollWidth - target.offsetWidth);
82
- if (isAtStart) {
83
- setScrollStatus('start');
84
- } else if (isAtEnd) {
85
- setScrollStatus('end');
75
+ // We need to memoize this callback otherwise it will cause infinite re-renders
76
+ // Because the ResizeObserver callback will be a new reference on every render
77
+ // and it will trigger a re-render
78
+ var resizeCallback = React__default.useCallback(function (resizeInfo) {
79
+ var target = resizeInfo.target;
80
+ var updateItems = function updateItems() {
81
+ setControlledItems(function (items) {
82
+ return items.map(function (item, index) {
83
+ // never overflow the first item
84
+ if (index === 0) return _objectSpread(_objectSpread({}, item), {}, {
85
+ isOverflowing: false
86
+ });
87
+ // add padding to the offsetX to account the "More" menu's width changing due to the selection state (eg: More:ProdctName)
88
+ // Currently, hardcoding this to 150, we can make this dynamic too but that's causing layout thrashing
89
+ // because first we need to calculate the width of the "More" menu and then update the items
90
+ var padding = 150;
91
+ var offset = item.offsetX + padding - target.getBoundingClientRect().left;
92
+ if (offset > target.offsetWidth) {
93
+ return _objectSpread(_objectSpread({}, item), {}, {
94
+ isOverflowing: true
95
+ });
96
+ } else {
97
+ return _objectSpread(_objectSpread({}, item), {}, {
98
+ isOverflowing: false
99
+ });
100
+ }
101
+ });
102
+ });
103
+ };
104
+ // https://github.com/webpack/webpack/issues/14814
105
+ var flushSync = ReactDOM['flushSync'.toString()];
106
+ // Using flushSync to avoid layout thrashing,
107
+ // this will force React to flush all pending updates and only then update the DOM
108
+ if (flushSync !== undefined) {
109
+ flushSync(updateItems);
86
110
  } else {
87
- setScrollStatus('middle');
111
+ updateItems();
88
112
  }
89
113
  }, []);
90
- var scrollRight = function scrollRight() {
91
- if (!ref.current) return;
92
- ref.current.scrollBy({
93
- behavior: 'smooth',
94
- left: SCROLL_AMOUNT
95
- });
96
- };
97
- var scrollLeft = function scrollLeft() {
98
- if (!ref.current) return;
99
- ref.current.scrollBy({
100
- behavior: 'smooth',
101
- left: -SCROLL_AMOUNT
102
- });
103
- };
114
+ useResize(ref, resizeCallback);
104
115
  return /*#__PURE__*/jsx(TabNavContext.Provider, {
105
116
  value: {
106
117
  containerRef: ref,
107
- hasOverflow: hasOverflow
118
+ controlledItems: controlledItems,
119
+ setControlledItems: setControlledItems
108
120
  },
109
- children: /*#__PURE__*/jsxs(BaseBox, _objectSpread(_objectSpread(_objectSpread({
121
+ children: /*#__PURE__*/jsx(BaseBox, _objectSpread(_objectSpread(_objectSpread({
110
122
  as: "nav",
111
123
  display: "flex",
112
124
  width: "100%",
113
125
  alignItems: "center",
114
- position: "relative",
115
- marginBottom: makeSize(OFFSET_BOTTOM)
126
+ alignSelf: "end",
127
+ position: "relative"
116
128
  }, getStyledProps(styledProps)), metaAttribute({
117
129
  name: MetaConstants.TabNav
118
130
  })), {}, {
119
- children: [/*#__PURE__*/jsx(GradientOverlay, {
120
- variant: "left",
121
- $color: backgroundColor,
122
- shouldShow: hasOverflow && scrollStatus !== 'start',
123
- children: /*#__PURE__*/jsx(Button, {
124
- size: "xsmall",
125
- variant: "tertiary",
126
- icon: ChevronLeftIcon,
127
- accessibilityLabel: "Scroll Left",
128
- onClick: scrollLeft
129
- })
130
- }), /*#__PURE__*/jsx(ScrollableArea, {
131
- ref: ref,
132
- onScroll: handleScrollStatus,
131
+ ref: ref,
132
+ children: /*#__PURE__*/jsx(BaseBox, {
133
133
  display: "flex",
134
134
  width: "100%",
135
135
  position: "relative",
136
- whiteSpace: "nowrap",
137
- gap: "spacing.0",
138
- overflowY: "hidden",
139
- overflowX: "auto",
140
136
  children: /*#__PURE__*/jsx(BaseBox, {
141
137
  display: "flex",
142
138
  flexDirection: "row",
143
139
  width: "max-content",
144
- children: React__default.Children.map(children, function (child, index) {
145
- return /*#__PURE__*/jsxs(Fragment, {
146
- children: [index > 0 ? /*#__PURE__*/jsx(Divider, {
147
- margin: "auto",
148
- variant: "muted",
149
- orientation: "vertical",
150
- height: makeSize(size[16])
151
- }) : null, child]
152
- });
140
+ children: children({
141
+ items: _items,
142
+ overflowingItems: overflowingItems
153
143
  })
154
144
  })
155
- }), /*#__PURE__*/jsx(GradientOverlay, {
156
- variant: "right",
157
- $color: backgroundColor,
158
- shouldShow: hasOverflow && scrollStatus !== 'end',
159
- children: /*#__PURE__*/jsx(Button, {
160
- size: "xsmall",
161
- variant: "tertiary",
162
- icon: ChevronRightIcon,
163
- accessibilityLabel: "Scroll Right",
164
- onClick: scrollRight
165
- })
166
- })]
145
+ })
167
146
  }))
168
147
  });
169
148
  };
170
149
 
171
- export { TabNav };
150
+ export { TabNav, TabNavItems };
172
151
  //# sourceMappingURL=TabNav.web.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TabNav.web.js","sources":["../../../../../../../src/components/TopNav/TabNav/TabNav.web.tsx"],"sourcesContent":["import React from 'react';\nimport styled from 'styled-components';\nimport { useTopNavContext } from '../TopNavContext';\nimport { approximatelyEqual, MIXED_BG_COLOR, useHasOverflow } from './utils';\nimport { TabNavContext } from './TabNavContext';\nimport BaseBox from '~components/Box/BaseBox';\nimport type { StyledPropsBlade } from '~components/Box/styledProps';\nimport { getStyledProps } from '~components/Box/styledProps';\nimport { Button } from '~components/Button';\nimport { Divider } from '~components/Divider';\nimport { ChevronLeftIcon, ChevronRightIcon } from '~components/Icons';\nimport { makeMotionTime, makeSize } from '~utils';\nimport { size } from '~tokens/global';\nimport getIn from '~utils/lodashButBetter/get';\nimport type { BoxProps } from '~components/Box';\nimport { metaAttribute, MetaConstants } from '~utils/metaAttribute';\n\nconst GRADIENT_WIDTH = 54 as const;\nconst GRADIENT_OFFSET = -8 as const;\nconst OFFSET_BOTTOM = -12 as const;\nconst SCROLL_AMOUNT = 200;\n\ntype TabNavProps = {\n children: React.ReactNode;\n};\n\nconst ScrollableArea = styled(BaseBox)(() => {\n return {\n '&::-webkit-scrollbar': { display: 'none' },\n };\n});\n\nconst GradientOverlay = styled(BaseBox)<{\n shouldShow?: boolean;\n variant: 'left' | 'right';\n $color: BoxProps['backgroundColor'];\n}>(({ theme, shouldShow, variant, $color }) => {\n const color = getIn(theme.colors, $color as never, MIXED_BG_COLOR);\n\n return {\n position: 'absolute',\n [variant]: 0,\n pointerEvents: shouldShow ? 'auto' : 'none',\n transform: shouldShow ? 'scale(1)' : 'scale(0.5)',\n opacity: shouldShow ? 1 : 0,\n transitionTimingFunction: `${theme.motion.easing.standard.revealing}`,\n transitionDuration: `${makeMotionTime(theme.motion.duration.xquick)}`,\n transitionProperty: 'opacity, transform',\n zIndex: 1,\n ':before': {\n content: \"''\",\n pointerEvents: 'none',\n position: 'absolute',\n [variant]: 0,\n top: makeSize(GRADIENT_OFFSET),\n bottom: makeSize(GRADIENT_OFFSET),\n width: makeSize(GRADIENT_WIDTH),\n background: `linear-gradient(to ${variant}, transparent 0%, ${color} 30%, ${color} 100%);`,\n },\n };\n});\n\nconst TabNav = ({\n children,\n ...styledProps\n}: TabNavProps & StyledPropsBlade): React.ReactElement => {\n const ref = React.useRef<HTMLDivElement>(null);\n const hasOverflow = useHasOverflow(ref);\n const [scrollStatus, setScrollStatus] = React.useState<'start' | 'end' | 'middle'>('start');\n const { backgroundColor } = useTopNavContext();\n\n // Check if the scroll is at start, end or middle\n const handleScrollStatus = React.useCallback(\n (e: React.UIEvent<HTMLDivElement, UIEvent>): void => {\n const target = e.target as HTMLDivElement;\n const isAtStart = target.scrollLeft === 0;\n const isAtEnd = approximatelyEqual(\n target.scrollLeft,\n target.scrollWidth - target.offsetWidth,\n );\n\n if (isAtStart) {\n setScrollStatus('start');\n } else if (isAtEnd) {\n setScrollStatus('end');\n } else {\n setScrollStatus('middle');\n }\n },\n [],\n );\n\n const scrollRight = (): void => {\n if (!ref.current) return;\n ref.current.scrollBy({\n behavior: 'smooth',\n left: SCROLL_AMOUNT,\n });\n };\n\n const scrollLeft = (): void => {\n if (!ref.current) return;\n ref.current.scrollBy({\n behavior: 'smooth',\n left: -SCROLL_AMOUNT,\n });\n };\n\n return (\n <TabNavContext.Provider value={{ containerRef: ref, hasOverflow }}>\n <BaseBox\n as=\"nav\"\n display=\"flex\"\n width=\"100%\"\n alignItems=\"center\"\n position=\"relative\"\n marginBottom={makeSize(OFFSET_BOTTOM)}\n {...getStyledProps(styledProps)}\n {...metaAttribute({ name: MetaConstants.TabNav })}\n >\n <GradientOverlay\n variant=\"left\"\n $color={backgroundColor}\n shouldShow={hasOverflow && scrollStatus !== 'start'}\n >\n <Button\n size=\"xsmall\"\n variant=\"tertiary\"\n icon={ChevronLeftIcon}\n accessibilityLabel=\"Scroll Left\"\n onClick={scrollLeft}\n />\n </GradientOverlay>\n <ScrollableArea\n ref={ref}\n onScroll={handleScrollStatus}\n display=\"flex\"\n width=\"100%\"\n position=\"relative\"\n whiteSpace=\"nowrap\"\n gap=\"spacing.0\"\n overflowY=\"hidden\"\n overflowX=\"auto\"\n >\n <BaseBox display=\"flex\" flexDirection=\"row\" width=\"max-content\">\n {React.Children.map(children, (child, index) => {\n return (\n <>\n {index > 0 ? (\n <Divider\n margin=\"auto\"\n variant=\"muted\"\n orientation=\"vertical\"\n height={makeSize(size[16])}\n />\n ) : null}\n {child}\n </>\n );\n })}\n </BaseBox>\n </ScrollableArea>\n <GradientOverlay\n variant=\"right\"\n $color={backgroundColor}\n shouldShow={hasOverflow && scrollStatus !== 'end'}\n >\n <Button\n size=\"xsmall\"\n variant=\"tertiary\"\n icon={ChevronRightIcon}\n accessibilityLabel=\"Scroll Right\"\n onClick={scrollRight}\n />\n </GradientOverlay>\n </BaseBox>\n </TabNavContext.Provider>\n );\n};\n\nexport { TabNav };\n"],"names":["GRADIENT_WIDTH","GRADIENT_OFFSET","OFFSET_BOTTOM","SCROLL_AMOUNT","ScrollableArea","styled","BaseBox","withConfig","displayName","componentId","display","GradientOverlay","_ref","theme","shouldShow","variant","$color","color","getIn","colors","MIXED_BG_COLOR","_defineProperty","position","concat","motion","easing","standard","revealing","makeMotionTime","duration","xquick","content","pointerEvents","makeSize","TabNav","_ref3","children","styledProps","_objectWithoutProperties","_excluded","ref","React","useRef","hasOverflow","useHasOverflow","_React$useState","useState","_React$useState2","_slicedToArray","scrollStatus","setScrollStatus","_useTopNavContext","useTopNavContext","backgroundColor","handleScrollStatus","useCallback","e","target","isAtStart","scrollLeft","isAtEnd","approximatelyEqual","scrollWidth","offsetWidth","scrollRight","current","scrollBy","behavior","left","_jsx","TabNavContext","Provider","value","containerRef","_jsxs","_objectSpread","as","width","alignItems","marginBottom","getStyledProps","metaAttribute","name","MetaConstants","Button","size","icon","ChevronLeftIcon","accessibilityLabel","onClick","onScroll","whiteSpace","gap","overflowY","overflowX","flexDirection","Children","map","child","index","_Fragment","Divider","margin","orientation","height","ChevronRightIcon"],"mappings":"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"}
1
+ {"version":3,"file":"TabNav.web.js","sources":["../../../../../../../src/components/TopNav/TabNav/TabNav.web.tsx"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable consistent-return */\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport { TabNavContext } from './TabNavContext';\nimport { useResize } from './utils';\nimport type { TabNavItemData, TabNavProps } from './types';\nimport BaseBox from '~components/Box/BaseBox';\nimport type { StyledPropsBlade } from '~components/Box/styledProps';\nimport { getStyledProps } from '~components/Box/styledProps';\nimport { Divider } from '~components/Divider';\nimport { makeSize } from '~utils';\nimport { size } from '~tokens/global';\nimport { metaAttribute, MetaConstants } from '~utils/metaAttribute';\nimport type { BoxProps } from '~components/Box';\nimport { Box } from '~components/Box';\n\nconst TabNavItems = ({ children, ...props }: BoxProps): React.ReactElement => {\n return (\n <Box {...props} display=\"flex\" width=\"100%\" gap=\"spacing.0\" position=\"relative\" left=\"-1px\">\n {React.Children.map(children, (child, index) => {\n return (\n <>\n {index > 0 ? (\n <Divider\n margin=\"auto\"\n variant=\"muted\"\n orientation=\"vertical\"\n height={makeSize(size[16])}\n />\n ) : null}\n {React.cloneElement(child as React.ReactElement, {\n __isInsideTabNavItems: true,\n __index: index,\n })}\n </>\n );\n })}\n <Divider margin=\"auto\" variant=\"muted\" orientation=\"vertical\" height={makeSize(size[16])} />\n </Box>\n );\n};\n\nconst TabNav = ({\n children,\n items,\n ...styledProps\n}: TabNavProps & StyledPropsBlade): React.ReactElement => {\n const ref = React.useRef<HTMLDivElement>(null);\n const [controlledItems, setControlledItems] = React.useState<TabNavItemData[]>(items);\n\n const overflowingItems = controlledItems.filter(\n (item) => item.isAlwaysOverflowing ?? item.isOverflowing,\n );\n const _items = controlledItems.filter((item) => !item.isAlwaysOverflowing && !item.isOverflowing);\n\n // We need to memoize this callback otherwise it will cause infinite re-renders\n // Because the ResizeObserver callback will be a new reference on every render\n // and it will trigger a re-render\n const resizeCallback = React.useCallback((resizeInfo: ResizeObserverEntry): void => {\n const target = resizeInfo.target as HTMLElement;\n const updateItems = (): void => {\n setControlledItems((items) => {\n return items.map((item, index) => {\n // never overflow the first item\n if (index === 0) return { ...item, isOverflowing: false };\n // add padding to the offsetX to account the \"More\" menu's width changing due to the selection state (eg: More:ProdctName)\n // Currently, hardcoding this to 150, we can make this dynamic too but that's causing layout thrashing\n // because first we need to calculate the width of the \"More\" menu and then update the items\n const padding = 150;\n const offset = (item.offsetX! + padding)! - target.getBoundingClientRect().left;\n if (offset > target.offsetWidth) {\n return { ...item, isOverflowing: true };\n } else {\n return { ...item, isOverflowing: false };\n }\n });\n });\n };\n // https://github.com/webpack/webpack/issues/14814\n const flushSync = (ReactDOM as any)['flushSync'.toString()];\n // Using flushSync to avoid layout thrashing,\n // this will force React to flush all pending updates and only then update the DOM\n if (flushSync !== undefined) {\n flushSync(updateItems);\n } else {\n updateItems();\n }\n }, []);\n\n useResize(ref, resizeCallback);\n\n return (\n <TabNavContext.Provider value={{ containerRef: ref, controlledItems, setControlledItems }}>\n <BaseBox\n as=\"nav\"\n display=\"flex\"\n width=\"100%\"\n alignItems=\"center\"\n alignSelf=\"end\"\n position=\"relative\"\n {...getStyledProps(styledProps)}\n {...metaAttribute({ name: MetaConstants.TabNav })}\n ref={ref}\n >\n <BaseBox display=\"flex\" width=\"100%\" position=\"relative\">\n <BaseBox display=\"flex\" flexDirection=\"row\" width=\"max-content\">\n {children({ items: _items, overflowingItems })}\n </BaseBox>\n </BaseBox>\n </BaseBox>\n </TabNavContext.Provider>\n );\n};\n\nexport { TabNav, TabNavItems };\n"],"names":["TabNavItems","_ref","children","props","_objectWithoutProperties","_excluded","_jsxs","Box","_objectSpread","display","width","gap","position","left","React","Children","map","child","index","_Fragment","_jsx","Divider","margin","variant","orientation","height","makeSize","size","cloneElement","__isInsideTabNavItems","__index","TabNav","_ref2","items","styledProps","_excluded2","ref","useRef","_React$useState","useState","_React$useState2","_slicedToArray","controlledItems","setControlledItems","overflowingItems","filter","item","_item$isAlwaysOverflo","isAlwaysOverflowing","isOverflowing","_items","resizeCallback","useCallback","resizeInfo","target","updateItems","padding","offset","offsetX","getBoundingClientRect","offsetWidth","flushSync","ReactDOM","toString","undefined","useResize","TabNavContext","Provider","value","containerRef","BaseBox","as","alignItems","alignSelf","getStyledProps","metaAttribute","name","MetaConstants","flexDirection"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"TabNavContext.js","sources":["../../../../../../../src/components/TopNav/TabNav/TabNavContext.tsx"],"sourcesContent":["import React from 'react';\nimport { throwBladeError } from '~utils/logger';\n\ntype TabNavContextProps = {\n containerRef: React.RefObject<HTMLDivElement>;\n hasOverflow: boolean;\n};\nconst TabNavContext = React.createContext<TabNavContextProps | null>(null);\n\nconst useTabNavContext = (): TabNavContextProps => {\n const context = React.useContext(TabNavContext);\n if (!context) {\n throwBladeError({\n message: 'useTabNavContext must be used within a TabNavProvider',\n moduleName: 'TabNav',\n });\n }\n return context!;\n};\n\nexport { TabNavContext, useTabNavContext };\n"],"names":["TabNavContext","React","createContext","useTabNavContext","context","useContext","throwBladeError","message","moduleName"],"mappings":";;;;AAOA,IAAMA,aAAa,gBAAGC,cAAK,CAACC,aAAa,CAA4B,IAAI,EAAC;AAE1E,IAAMC,gBAAgB,GAAG,SAAnBA,gBAAgBA,GAA6B;AACjD,EAAA,IAAMC,OAAO,GAAGH,cAAK,CAACI,UAAU,CAACL,aAAa,CAAC,CAAA;EAC/C,IAAI,CAACI,OAAO,EAAE;AACZE,IAAAA,eAAe,CAAC;AACdC,MAAAA,OAAO,EAAE,uDAAuD;AAChEC,MAAAA,UAAU,EAAE,QAAA;AACd,KAAC,CAAC,CAAA;AACJ,GAAA;AACA,EAAA,OAAOJ,OAAO,CAAA;AAChB;;;;"}
1
+ {"version":3,"file":"TabNavContext.js","sources":["../../../../../../../src/components/TopNav/TabNav/TabNavContext.tsx"],"sourcesContent":["import React from 'react';\nimport type { TabNavItemData } from './types';\nimport { throwBladeError } from '~utils/logger';\n\ntype TabNavContextProps = {\n containerRef: React.RefObject<HTMLDivElement>;\n controlledItems: TabNavItemData[];\n setControlledItems: React.Dispatch<React.SetStateAction<TabNavItemData[]>>;\n};\nconst TabNavContext = React.createContext<TabNavContextProps | null>(null);\n\nconst useTabNavContext = (): TabNavContextProps => {\n const context = React.useContext(TabNavContext);\n if (!context) {\n throwBladeError({\n message: 'useTabNavContext must be used within a TabNavProvider',\n moduleName: 'TabNav',\n });\n }\n return context!;\n};\n\nexport { TabNavContext, useTabNavContext };\n"],"names":["TabNavContext","React","createContext","useTabNavContext","context","useContext","throwBladeError","message","moduleName"],"mappings":";;;;AASA,IAAMA,aAAa,gBAAGC,cAAK,CAACC,aAAa,CAA4B,IAAI,EAAC;AAE1E,IAAMC,gBAAgB,GAAG,SAAnBA,gBAAgBA,GAA6B;AACjD,EAAA,IAAMC,OAAO,GAAGH,cAAK,CAACI,UAAU,CAACL,aAAa,CAAC,CAAA;EAC/C,IAAI,CAACI,OAAO,EAAE;AACZE,IAAAA,eAAe,CAAC;AACdC,MAAAA,OAAO,EAAE,uDAAuD;AAChEC,MAAAA,UAAU,EAAE,QAAA;AACd,KAAC,CAAC,CAAA;AACJ,GAAA;AACA,EAAA,OAAOJ,OAAO,CAAA;AAChB;;;;"}
@@ -2,7 +2,6 @@ import _objectWithoutProperties from '@babel/runtime/helpers/objectWithoutProper
2
2
  import _defineProperty from '@babel/runtime/helpers/defineProperty';
3
3
  import React__default from 'react';
4
4
  import styled from 'styled-components';
5
- import { useTopNavContext } from '../TopNavContext.js';
6
5
  import { useTabNavContext } from './TabNavContext.js';
7
6
  import { MIXED_BG_COLOR } from './utils.js';
8
7
  import '../../Box/BaseBox/index.js';
@@ -11,10 +10,8 @@ import '../../../utils/index.js';
11
10
  import '../../../utils/assignWithoutSideEffects/index.js';
12
11
  import '../../../utils/makeAccessible/index.js';
13
12
  import '../../../tokens/global/index.js';
14
- import { useIsomorphicLayoutEffect } from '../../../utils/useIsomorphicLayoutEffect.js';
15
- import { mergeRefs } from '../../../utils/useMergeRefs.js';
16
- import getIn from '../../../utils/lodashButBetter/get.js';
17
13
  import '../../../utils/metaAttribute/index.js';
14
+ import { useIsomorphicLayoutEffect } from '../../../utils/useIsomorphicLayoutEffect.js';
18
15
  import { jsxs, jsx } from 'react/jsx-runtime';
19
16
  import { makeSpace } from '../../../utils/makeSpace/makeSpace.js';
20
17
  import { makeBorderSize } from '../../../utils/makeBorderSize/makeBorderSize.js';
@@ -27,7 +24,7 @@ import { MetaConstants } from '../../../utils/metaAttribute/metaConstants.js';
27
24
  import { makeAccessible } from '../../../utils/makeAccessible/makeAccessible.web.js';
28
25
  import { assignWithoutSideEffects } from '../../../utils/assignWithoutSideEffects/assignWithoutSideEffects.js';
29
26
 
30
- var _excluded = ["as", "children", "isActive", "icon", "trailing", "accessibilityLabel", "href", "target"];
27
+ var _excluded = ["as", "title", "isActive", "icon", "trailing", "accessibilityLabel", "href", "target", "__isInsideTabNavItems", "__index"];
31
28
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
32
29
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
33
30
  var StyledTabNavItem = /*#__PURE__*/styled.a.withConfig({
@@ -55,6 +52,12 @@ var StyledTabNavItem = /*#__PURE__*/styled.a.withConfig({
55
52
  paddingLeft: makeSpace(theme.spacing[4]),
56
53
  paddingRight: makeSpace(theme.spacing[4]),
57
54
  borderRadius: makeBorderSize(theme.border.radius.medium),
55
+ // reset button styles
56
+ border: 'none',
57
+ background: 'none',
58
+ '&[aria-expanded="true"]': $isActive ? {} : {
59
+ backgroundColor: theme.colors.interactive.background.gray["default"]
60
+ },
58
61
  '&:hover': $isActive ? {} : {
59
62
  backgroundColor: theme.colors.interactive.background.gray["default"]
60
63
  }
@@ -65,16 +68,15 @@ var StyledTabNavItemWrapper = /*#__PURE__*/styled(BaseBox).withConfig({
65
68
  componentId: "sc-1eiaez7-1"
66
69
  })(function (_ref2) {
67
70
  var theme = _ref2.theme,
68
- isActive = _ref2.isActive,
69
- dividerHiderColor = _ref2.dividerHiderColor;
71
+ isActive = _ref2.isActive;
70
72
  var dividerHiderStyle = {
71
73
  content: '""',
72
74
  position: 'absolute',
73
75
  top: '50%',
74
76
  transform: 'translateY(-50%)',
75
77
  width: makeSize(size[1]),
76
- height: '50%',
77
- backgroundColor: getIn(theme.colors, dividerHiderColor, MIXED_BG_COLOR)
78
+ height: makeSize(size[16]),
79
+ backgroundColor: MIXED_BG_COLOR
78
80
  };
79
81
  return _objectSpread({
80
82
  position: 'relative',
@@ -83,14 +85,12 @@ var StyledTabNavItemWrapper = /*#__PURE__*/styled(BaseBox).withConfig({
83
85
  backgroundColor: isActive ? theme.colors.surface.background.gray.intense : 'transparent',
84
86
  borderColor: isActive ? theme.colors.surface.border.gray.muted : 'transparent',
85
87
  borderStyle: 'solid',
86
- borderBottomWidth: 0,
87
88
  borderWidth: makeBorderSize(theme.border.width.thin),
89
+ borderBottomWidth: 0,
88
90
  borderTopLeftRadius: makeBorderSize(theme.border.radius.medium),
89
91
  borderTopRightRadius: makeBorderSize(theme.border.radius.medium),
90
- // Animation
91
- transform: isActive ? "translateY(".concat(makeSize(size[2]), ")") : 'none',
92
92
  transition: "".concat(makeMotionTime(theme.motion.duration.moderate), " ").concat(theme.motion.easing.standard.effective),
93
- transitionProperty: 'background, transform'
93
+ transitionProperty: 'background'
94
94
  }, isActive ? {
95
95
  ':before, :after': dividerHiderStyle,
96
96
  ':before': {
@@ -125,56 +125,49 @@ var SelectedBar = /*#__PURE__*/styled(BaseBox).withConfig({
125
125
  });
126
126
  var _TabNavItem = function _TabNavItem(_ref4, ref) {
127
127
  var as = _ref4.as,
128
- children = _ref4.children,
128
+ title = _ref4.title,
129
129
  isActive = _ref4.isActive,
130
130
  Icon = _ref4.icon,
131
131
  trailing = _ref4.trailing,
132
132
  accessibilityLabel = _ref4.accessibilityLabel,
133
133
  href = _ref4.href,
134
134
  target = _ref4.target,
135
+ __isInsideTabNavItems = _ref4.__isInsideTabNavItems,
136
+ __index = _ref4.__index,
135
137
  props = _objectWithoutProperties(_ref4, _excluded);
136
138
  var _useTabNavContext = useTabNavContext(),
137
- containerRef = _useTabNavContext.containerRef,
138
- hasOverflow = _useTabNavContext.hasOverflow;
139
- var _useTopNavContext = useTopNavContext(),
140
- backgroundColor = _useTopNavContext.backgroundColor;
141
- var linkRef = React__default.useRef(null);
139
+ setControlledItems = _useTabNavContext.setControlledItems;
140
+ var bodyRef = React__default.useRef(null);
142
141
 
143
- // Scroll the active tab into view
144
- // Only if the tab is very close to the edge
145
- // Or if the tab is out of view
142
+ // Update the controlledItems with the tabWidth and offsetX
146
143
  useIsomorphicLayoutEffect(function () {
147
- if (!isActive || !hasOverflow) return;
148
- if (!('requestAnimationFrame' in window)) return;
149
- window.requestAnimationFrame(function () {
150
- if (!linkRef.current || !containerRef.current) return;
151
- var buffer = 100;
152
- var container = containerRef.current;
153
- var linkElement = linkRef.current;
154
- var containerRect = container.getBoundingClientRect();
155
- var linkRect = linkElement.getBoundingClientRect();
156
- var isCloseToStart = linkRect.left < containerRect.left + buffer;
157
- var isCloseToEnd = linkRect.right > containerRect.right - buffer;
158
- if (isCloseToStart || isCloseToEnd) {
159
- linkElement.scrollIntoView({
160
- behavior: 'smooth',
161
- inline: 'center',
162
- block: 'nearest'
144
+ if (!bodyRef.current) return;
145
+ if (!__isInsideTabNavItems) return;
146
+ setControlledItems(function (prev) {
147
+ return prev.map(function (item, index) {
148
+ var _bodyRef$current;
149
+ if (index !== __index) return item;
150
+ var bounds = bodyRef === null || bodyRef === void 0 ? void 0 : (_bodyRef$current = bodyRef.current) === null || _bodyRef$current === void 0 ? void 0 : _bodyRef$current.getBoundingClientRect();
151
+ var tabWidth = bounds.width;
152
+ var offsetX = bounds.right;
153
+ return _objectSpread(_objectSpread({}, item), {}, {
154
+ tabWidth: tabWidth,
155
+ offsetX: offsetX
163
156
  });
164
- }
157
+ });
165
158
  });
166
- }, [hasOverflow, isActive]);
159
+ }, [__isInsideTabNavItems, __index, setControlledItems]);
167
160
  return /*#__PURE__*/jsxs(StyledTabNavItemWrapper, _objectSpread(_objectSpread({
168
- isActive: isActive,
169
- dividerHiderColor: backgroundColor
161
+ ref: bodyRef,
162
+ isActive: isActive
170
163
  }, metaAttribute({
171
164
  name: MetaConstants.TabNavItem
172
165
  })), {}, {
173
166
  children: [/*#__PURE__*/jsx(SelectedBar, {
174
167
  isActive: isActive
175
168
  }), /*#__PURE__*/jsxs(StyledTabNavItem, _objectSpread(_objectSpread(_objectSpread({
176
- ref: mergeRefs(ref, linkRef),
177
- as: as !== null && as !== void 0 ? as : 'a',
169
+ ref: ref,
170
+ as: as !== null && as !== void 0 ? as : href ? 'a' : 'button',
178
171
  to: href,
179
172
  href: as ? undefined : href,
180
173
  target: target,
@@ -186,7 +179,7 @@ var _TabNavItem = function _TabNavItem(_ref4, ref) {
186
179
  children: [Icon ? /*#__PURE__*/jsx(Icon, {
187
180
  size: "large",
188
181
  color: isActive ? 'interactive.icon.gray.normal' : 'surface.icon.gray.subtle'
189
- }) : null, children, trailing ? trailing : null]
182
+ }) : null, title, trailing ? trailing : null]
190
183
  }))]
191
184
  }));
192
185
  };
@@ -1 +1 @@
1
- {"version":3,"file":"TabNavItem.web.js","sources":["../../../../../../../src/components/TopNav/TabNav/TabNavItem.web.tsx"],"sourcesContent":["import React from 'react';\nimport styled from 'styled-components';\nimport { useTopNavContext } from '../TopNavContext';\nimport type { TabNavItemProps } from './types';\nimport { useTabNavContext } from './TabNavContext';\nimport { MIXED_BG_COLOR } from './utils';\nimport BaseBox from '~components/Box/BaseBox';\nimport getTextStyles from '~components/Typography/Text/getTextStyles';\nimport { makeBorderSize, makeMotionTime, makeSize, makeSpace } from '~utils';\nimport { assignWithoutSideEffects } from '~utils/assignWithoutSideEffects';\nimport { makeAccessible } from '~utils/makeAccessible';\nimport { size } from '~tokens/global';\nimport { useIsomorphicLayoutEffect } from '~utils/useIsomorphicLayoutEffect';\nimport { mergeRefs } from '~utils/useMergeRefs';\nimport type { BoxProps } from '~components/Box';\nimport getIn from '~utils/lodashButBetter/get';\nimport { metaAttribute, MetaConstants } from '~utils/metaAttribute';\n\nconst StyledTabNavItem = styled.a<{ $isActive?: boolean }>(({ theme, $isActive }) => {\n return {\n ...getTextStyles({\n theme,\n size: 'medium',\n weight: 'medium',\n color: $isActive ? 'interactive.text.gray.normal' : 'interactive.text.gray.subtle',\n }),\n flex: 1,\n display: 'flex',\n gap: makeSpace(theme.spacing[2]),\n alignItems: 'center',\n justifyContent: 'center',\n height: '100%',\n textDecoration: 'none',\n whiteSpace: 'nowrap',\n paddingTop: makeSpace(theme.spacing[3]),\n paddingBottom: makeSpace(theme.spacing[3]),\n paddingLeft: makeSpace(theme.spacing[4]),\n paddingRight: makeSpace(theme.spacing[4]),\n borderRadius: makeBorderSize(theme.border.radius.medium),\n '&:hover': $isActive\n ? {}\n : {\n backgroundColor: theme.colors.interactive.background.gray.default,\n },\n };\n});\n\nconst StyledTabNavItemWrapper = styled(BaseBox)<{\n isActive?: boolean;\n dividerHiderColor: BoxProps['backgroundColor'];\n}>(({ theme, isActive, dividerHiderColor }) => {\n const dividerHiderStyle = {\n content: '\"\"',\n position: 'absolute',\n top: '50%',\n transform: 'translateY(-50%)',\n width: makeSize(size[1]),\n height: '50%',\n backgroundColor: getIn(theme.colors, dividerHiderColor as never, MIXED_BG_COLOR),\n } as const;\n\n return {\n position: 'relative',\n flexShrink: 0,\n padding: `${makeSpace(theme.spacing[2])} ${makeSpace(theme.spacing[1])}`,\n backgroundColor: isActive ? theme.colors.surface.background.gray.intense : 'transparent',\n borderColor: isActive ? theme.colors.surface.border.gray.muted : 'transparent',\n borderStyle: 'solid',\n borderBottomWidth: 0,\n borderWidth: makeBorderSize(theme.border.width.thin),\n borderTopLeftRadius: makeBorderSize(theme.border.radius.medium),\n borderTopRightRadius: makeBorderSize(theme.border.radius.medium),\n // Animation\n transform: isActive ? `translateY(${makeSize(size[2])})` : 'none',\n transition: `${makeMotionTime(theme.motion.duration.moderate)} ${\n theme.motion.easing.standard.effective\n }`,\n transitionProperty: 'background, transform',\n\n // Hide the left and right divider by overlaying them with a pseudo element as same color as the background\n ...(isActive\n ? {\n ':before, :after': dividerHiderStyle,\n ':before': {\n left: -2,\n },\n ':after': {\n right: -2,\n },\n }\n : {}),\n };\n});\n\nconst SelectedBar = styled(BaseBox)<{ isActive?: boolean }>(({ theme, isActive }) => {\n return {\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n height: makeSpace(theme.spacing[1]),\n borderTopLeftRadius: makeBorderSize(theme.border.radius.medium),\n borderTopRightRadius: makeBorderSize(theme.border.radius.medium),\n backgroundColor: theme.colors.interactive.icon.gray.normal,\n pointerEvents: 'none',\n // Animation\n opacity: isActive ? 1 : 0,\n transition: `${makeMotionTime(theme.motion.duration.moderate)} ${\n theme.motion.easing.standard.effective\n }`,\n transitionProperty: 'opacity',\n };\n});\n\nconst _TabNavItem: React.ForwardRefRenderFunction<HTMLAnchorElement, TabNavItemProps> = (\n { as, children, isActive, icon: Icon, trailing, accessibilityLabel, href, target, ...props },\n ref,\n): React.ReactElement => {\n const { containerRef, hasOverflow } = useTabNavContext();\n const { backgroundColor } = useTopNavContext();\n const linkRef = React.useRef<HTMLAnchorElement>(null);\n\n // Scroll the active tab into view\n // Only if the tab is very close to the edge\n // Or if the tab is out of view\n useIsomorphicLayoutEffect(() => {\n if (!isActive || !hasOverflow) return;\n if (!('requestAnimationFrame' in window)) return;\n\n window.requestAnimationFrame(() => {\n if (!linkRef.current || !containerRef.current) return;\n\n const buffer = 100;\n const container = containerRef.current;\n const linkElement = linkRef.current;\n const containerRect = container.getBoundingClientRect();\n const linkRect = linkElement.getBoundingClientRect();\n const isCloseToStart = linkRect.left < containerRect.left + buffer;\n const isCloseToEnd = linkRect.right > containerRect.right - buffer;\n\n if (isCloseToStart || isCloseToEnd) {\n linkElement.scrollIntoView({ behavior: 'smooth', inline: 'center', block: 'nearest' });\n }\n });\n }, [hasOverflow, isActive]);\n\n return (\n <StyledTabNavItemWrapper\n isActive={isActive}\n dividerHiderColor={backgroundColor}\n {...metaAttribute({ name: MetaConstants.TabNavItem })}\n >\n <SelectedBar isActive={isActive} />\n <StyledTabNavItem\n ref={mergeRefs(ref, linkRef)}\n as={as ?? 'a'}\n to={href}\n href={as ? undefined : href}\n target={target}\n $isActive={isActive}\n {...props}\n {...makeAccessible({ label: accessibilityLabel, current: isActive })}\n >\n {Icon ? (\n <Icon\n size=\"large\"\n color={isActive ? 'interactive.icon.gray.normal' : 'surface.icon.gray.subtle'}\n />\n ) : null}\n {children}\n {trailing ? trailing : null}\n </StyledTabNavItem>\n </StyledTabNavItemWrapper>\n );\n};\n\nconst TabNavItem = assignWithoutSideEffects(React.forwardRef(_TabNavItem), {\n displayName: 'TabNavItem',\n});\n\nexport { TabNavItem };\n"],"names":["StyledTabNavItem","styled","a","withConfig","displayName","componentId","_ref","theme","$isActive","_objectSpread","getTextStyles","size","weight","color","flex","display","gap","makeSpace","spacing","alignItems","justifyContent","height","textDecoration","whiteSpace","paddingTop","paddingBottom","paddingLeft","paddingRight","borderRadius","makeBorderSize","border","radius","medium","backgroundColor","colors","interactive","background","gray","StyledTabNavItemWrapper","BaseBox","_ref2","isActive","dividerHiderColor","dividerHiderStyle","content","position","top","transform","width","makeSize","getIn","MIXED_BG_COLOR","flexShrink","padding","concat","surface","intense","borderColor","muted","borderStyle","borderBottomWidth","borderWidth","thin","borderTopLeftRadius","borderTopRightRadius","transition","makeMotionTime","motion","duration","moderate","easing","standard","effective","transitionProperty","left","right","SelectedBar","_ref3","icon","normal","pointerEvents","opacity","_TabNavItem","_ref4","ref","as","children","Icon","trailing","accessibilityLabel","href","target","props","_objectWithoutProperties","_excluded","_useTabNavContext","useTabNavContext","containerRef","hasOverflow","_useTopNavContext","useTopNavContext","linkRef","React","useRef","useIsomorphicLayoutEffect","window","requestAnimationFrame","current","buffer","container","linkElement","containerRect","getBoundingClientRect","linkRect","isCloseToStart","isCloseToEnd","scrollIntoView","behavior","inline","block","_jsxs","metaAttribute","name","MetaConstants","TabNavItem","_jsx","mergeRefs","to","undefined","makeAccessible","label","assignWithoutSideEffects","forwardRef"],"mappings":"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"}
1
+ {"version":3,"file":"TabNavItem.web.js","sources":["../../../../../../../src/components/TopNav/TabNav/TabNavItem.web.tsx"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-non-null-asserted-optional-chain */\n/* eslint-disable @typescript-eslint/explicit-function-return-type */\n/* eslint-disable consistent-return */\nimport React from 'react';\nimport styled from 'styled-components';\nimport type { TabNavItemProps } from './types';\nimport { useTabNavContext } from './TabNavContext';\nimport { MIXED_BG_COLOR } from './utils';\nimport BaseBox from '~components/Box/BaseBox';\nimport getTextStyles from '~components/Typography/Text/getTextStyles';\nimport { makeBorderSize, makeMotionTime, makeSize, makeSpace } from '~utils';\nimport { assignWithoutSideEffects } from '~utils/assignWithoutSideEffects';\nimport { makeAccessible } from '~utils/makeAccessible';\nimport { size } from '~tokens/global';\nimport { metaAttribute, MetaConstants } from '~utils/metaAttribute';\nimport { useIsomorphicLayoutEffect } from '~utils/useIsomorphicLayoutEffect';\n\nconst StyledTabNavItem = styled.a<{ $isActive?: boolean }>(({ theme, $isActive }) => {\n return {\n ...getTextStyles({\n theme,\n size: 'medium',\n weight: 'medium',\n color: $isActive ? 'interactive.text.gray.normal' : 'interactive.text.gray.subtle',\n }),\n flex: 1,\n display: 'flex',\n gap: makeSpace(theme.spacing[2]),\n alignItems: 'center',\n justifyContent: 'center',\n height: '100%',\n textDecoration: 'none',\n whiteSpace: 'nowrap',\n paddingTop: makeSpace(theme.spacing[3]),\n paddingBottom: makeSpace(theme.spacing[3]),\n paddingLeft: makeSpace(theme.spacing[4]),\n paddingRight: makeSpace(theme.spacing[4]),\n borderRadius: makeBorderSize(theme.border.radius.medium),\n // reset button styles\n border: 'none',\n background: 'none',\n '&[aria-expanded=\"true\"]': $isActive\n ? {}\n : {\n backgroundColor: theme.colors.interactive.background.gray.default,\n },\n '&:hover': $isActive\n ? {}\n : {\n backgroundColor: theme.colors.interactive.background.gray.default,\n },\n };\n});\n\nconst StyledTabNavItemWrapper = styled(BaseBox)<{\n isActive?: boolean;\n}>(({ theme, isActive }) => {\n const dividerHiderStyle = {\n content: '\"\"',\n position: 'absolute',\n top: '50%',\n transform: 'translateY(-50%)',\n width: makeSize(size[1]),\n height: makeSize(size[16]),\n backgroundColor: MIXED_BG_COLOR,\n } as const;\n\n return {\n position: 'relative',\n flexShrink: 0,\n padding: `${makeSpace(theme.spacing[2])} ${makeSpace(theme.spacing[1])}`,\n backgroundColor: isActive ? theme.colors.surface.background.gray.intense : 'transparent',\n borderColor: isActive ? theme.colors.surface.border.gray.muted : 'transparent',\n borderStyle: 'solid',\n borderWidth: makeBorderSize(theme.border.width.thin),\n borderBottomWidth: 0,\n borderTopLeftRadius: makeBorderSize(theme.border.radius.medium),\n borderTopRightRadius: makeBorderSize(theme.border.radius.medium),\n transition: `${makeMotionTime(theme.motion.duration.moderate)} ${\n theme.motion.easing.standard.effective\n }`,\n transitionProperty: 'background',\n\n // Hide the left and right divider by overlaying them with a pseudo element as same color as the background\n ...(isActive\n ? {\n ':before, :after': dividerHiderStyle,\n ':before': {\n left: -2,\n },\n ':after': {\n right: -2,\n },\n }\n : {}),\n };\n});\n\nconst SelectedBar = styled(BaseBox)<{ isActive?: boolean }>(({ theme, isActive }) => {\n return {\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n height: makeSpace(theme.spacing[1]),\n borderTopLeftRadius: makeBorderSize(theme.border.radius.medium),\n borderTopRightRadius: makeBorderSize(theme.border.radius.medium),\n backgroundColor: theme.colors.interactive.icon.gray.normal,\n pointerEvents: 'none',\n // Animation\n opacity: isActive ? 1 : 0,\n transition: `${makeMotionTime(theme.motion.duration.moderate)} ${\n theme.motion.easing.standard.effective\n }`,\n transitionProperty: 'opacity',\n };\n});\n\nconst _TabNavItem: React.ForwardRefRenderFunction<HTMLAnchorElement, TabNavItemProps> = (\n {\n as,\n title,\n isActive,\n icon: Icon,\n trailing,\n accessibilityLabel,\n href,\n target,\n // @ts-expect-error - This prop is only used internally\n __isInsideTabNavItems,\n // @ts-expect-error - This prop is only used internally\n __index,\n ...props\n },\n ref,\n): React.ReactElement => {\n const { setControlledItems } = useTabNavContext();\n const bodyRef = React.useRef<HTMLDivElement>(null);\n\n // Update the controlledItems with the tabWidth and offsetX\n useIsomorphicLayoutEffect(() => {\n if (!bodyRef.current) return;\n if (!__isInsideTabNavItems) return;\n setControlledItems((prev) => {\n return prev.map((item, index) => {\n if (index !== __index) return item;\n const bounds = bodyRef?.current?.getBoundingClientRect()!;\n const tabWidth = bounds.width;\n const offsetX = bounds.right;\n return {\n ...item,\n tabWidth,\n offsetX,\n };\n });\n });\n }, [__isInsideTabNavItems, __index, setControlledItems]);\n\n return (\n <StyledTabNavItemWrapper\n ref={bodyRef}\n isActive={isActive}\n {...metaAttribute({ name: MetaConstants.TabNavItem })}\n >\n <SelectedBar isActive={isActive} />\n <StyledTabNavItem\n ref={ref}\n as={as ?? (href ? 'a' : 'button')}\n to={href}\n href={as ? undefined : href}\n target={target}\n $isActive={isActive}\n {...props}\n {...makeAccessible({ label: accessibilityLabel, current: isActive })}\n >\n {Icon ? (\n <Icon\n size=\"large\"\n color={isActive ? 'interactive.icon.gray.normal' : 'surface.icon.gray.subtle'}\n />\n ) : null}\n {title}\n {trailing ? trailing : null}\n </StyledTabNavItem>\n </StyledTabNavItemWrapper>\n );\n};\n\nconst TabNavItem = assignWithoutSideEffects(React.forwardRef(_TabNavItem), {\n displayName: 'TabNavItem',\n});\n\nexport { TabNavItem };\n"],"names":["StyledTabNavItem","styled","a","withConfig","displayName","componentId","_ref","theme","$isActive","_objectSpread","getTextStyles","size","weight","color","flex","display","gap","makeSpace","spacing","alignItems","justifyContent","height","textDecoration","whiteSpace","paddingTop","paddingBottom","paddingLeft","paddingRight","borderRadius","makeBorderSize","border","radius","medium","background","backgroundColor","colors","interactive","gray","StyledTabNavItemWrapper","BaseBox","_ref2","isActive","dividerHiderStyle","content","position","top","transform","width","makeSize","MIXED_BG_COLOR","flexShrink","padding","concat","surface","intense","borderColor","muted","borderStyle","borderWidth","thin","borderBottomWidth","borderTopLeftRadius","borderTopRightRadius","transition","makeMotionTime","motion","duration","moderate","easing","standard","effective","transitionProperty","left","right","SelectedBar","_ref3","icon","normal","pointerEvents","opacity","_TabNavItem","_ref4","ref","as","title","Icon","trailing","accessibilityLabel","href","target","__isInsideTabNavItems","__index","props","_objectWithoutProperties","_excluded","_useTabNavContext","useTabNavContext","setControlledItems","bodyRef","React","useRef","useIsomorphicLayoutEffect","current","prev","map","item","index","_bodyRef$current","bounds","getBoundingClientRect","tabWidth","offsetX","_jsxs","metaAttribute","name","MetaConstants","TabNavItem","children","_jsx","to","undefined","makeAccessible","label","assignWithoutSideEffects","forwardRef"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiBA,IAAMA,gBAAgB,gBAAGC,MAAM,CAACC,CAAC,CAAAC,UAAA,CAAA;EAAAC,WAAA,EAAA,iCAAA;EAAAC,WAAA,EAAA,cAAA;AAAA,CAA0B,CAAA,CAAA,UAAAC,IAAA,EAA0B;AAAA,EAAA,IAAvBC,KAAK,GAAAD,IAAA,CAALC,KAAK;IAAEC,SAAS,GAAAF,IAAA,CAATE,SAAS,CAAA;AAC5E,EAAA,OAAAC,aAAA,CAAAA,aAAA,CAAA,EAAA,EACKC,aAAa,CAAC;AACfH,IAAAA,KAAK,EAALA,KAAK;AACLI,IAAAA,IAAI,EAAE,QAAQ;AACdC,IAAAA,MAAM,EAAE,QAAQ;AAChBC,IAAAA,KAAK,EAAEL,SAAS,GAAG,8BAA8B,GAAG,8BAAA;AACtD,GAAC,CAAC,CAAA,EAAA,EAAA,EAAA;AACFM,IAAAA,IAAI,EAAE,CAAC;AACPC,IAAAA,OAAO,EAAE,MAAM;IACfC,GAAG,EAAEC,SAAS,CAACV,KAAK,CAACW,OAAO,CAAC,CAAC,CAAC,CAAC;AAChCC,IAAAA,UAAU,EAAE,QAAQ;AACpBC,IAAAA,cAAc,EAAE,QAAQ;AACxBC,IAAAA,MAAM,EAAE,MAAM;AACdC,IAAAA,cAAc,EAAE,MAAM;AACtBC,IAAAA,UAAU,EAAE,QAAQ;IACpBC,UAAU,EAAEP,SAAS,CAACV,KAAK,CAACW,OAAO,CAAC,CAAC,CAAC,CAAC;IACvCO,aAAa,EAAER,SAAS,CAACV,KAAK,CAACW,OAAO,CAAC,CAAC,CAAC,CAAC;IAC1CQ,WAAW,EAAET,SAAS,CAACV,KAAK,CAACW,OAAO,CAAC,CAAC,CAAC,CAAC;IACxCS,YAAY,EAAEV,SAAS,CAACV,KAAK,CAACW,OAAO,CAAC,CAAC,CAAC,CAAC;IACzCU,YAAY,EAAEC,cAAc,CAACtB,KAAK,CAACuB,MAAM,CAACC,MAAM,CAACC,MAAM,CAAC;AACxD;AACAF,IAAAA,MAAM,EAAE,MAAM;AACdG,IAAAA,UAAU,EAAE,MAAM;AAClB,IAAA,yBAAyB,EAAEzB,SAAS,GAChC,EAAE,GACF;MACE0B,eAAe,EAAE3B,KAAK,CAAC4B,MAAM,CAACC,WAAW,CAACH,UAAU,CAACI,IAAI,CAAA,SAAA,CAAA;KAC1D;AACL,IAAA,SAAS,EAAE7B,SAAS,GAChB,EAAE,GACF;MACE0B,eAAe,EAAE3B,KAAK,CAAC4B,MAAM,CAACC,WAAW,CAACH,UAAU,CAACI,IAAI,CAAA,SAAA,CAAA;AAC3D,KAAA;AAAC,GAAA,CAAA,CAAA;AAET,CAAC,CAAC,CAAA;AAEF,IAAMC,uBAAuB,gBAAGrC,MAAM,CAACsC,OAAO,CAAC,CAAApC,UAAA,CAAA;EAAAC,WAAA,EAAA,wCAAA;EAAAC,WAAA,EAAA,cAAA;AAAA,CAE5C,CAAA,CAAA,UAAAmC,KAAA,EAAyB;AAAA,EAAA,IAAtBjC,KAAK,GAAAiC,KAAA,CAALjC,KAAK;IAAEkC,QAAQ,GAAAD,KAAA,CAARC,QAAQ,CAAA;AACnB,EAAA,IAAMC,iBAAiB,GAAG;AACxBC,IAAAA,OAAO,EAAE,IAAI;AACbC,IAAAA,QAAQ,EAAE,UAAU;AACpBC,IAAAA,GAAG,EAAE,KAAK;AACVC,IAAAA,SAAS,EAAE,kBAAkB;AAC7BC,IAAAA,KAAK,EAAEC,QAAQ,CAACrC,IAAI,CAAC,CAAC,CAAC,CAAC;AACxBU,IAAAA,MAAM,EAAE2B,QAAQ,CAACrC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC1BuB,IAAAA,eAAe,EAAEe,cAAAA;GACT,CAAA;AAEV,EAAA,OAAAxC,aAAA,CAAA;AACEmC,IAAAA,QAAQ,EAAE,UAAU;AACpBM,IAAAA,UAAU,EAAE,CAAC;IACbC,OAAO,EAAA,EAAA,CAAAC,MAAA,CAAKnC,SAAS,CAACV,KAAK,CAACW,OAAO,CAAC,CAAC,CAAC,CAAC,OAAAkC,MAAA,CAAInC,SAAS,CAACV,KAAK,CAACW,OAAO,CAAC,CAAC,CAAC,CAAC,CAAE;AACxEgB,IAAAA,eAAe,EAAEO,QAAQ,GAAGlC,KAAK,CAAC4B,MAAM,CAACkB,OAAO,CAACpB,UAAU,CAACI,IAAI,CAACiB,OAAO,GAAG,aAAa;AACxFC,IAAAA,WAAW,EAAEd,QAAQ,GAAGlC,KAAK,CAAC4B,MAAM,CAACkB,OAAO,CAACvB,MAAM,CAACO,IAAI,CAACmB,KAAK,GAAG,aAAa;AAC9EC,IAAAA,WAAW,EAAE,OAAO;IACpBC,WAAW,EAAE7B,cAAc,CAACtB,KAAK,CAACuB,MAAM,CAACiB,KAAK,CAACY,IAAI,CAAC;AACpDC,IAAAA,iBAAiB,EAAE,CAAC;IACpBC,mBAAmB,EAAEhC,cAAc,CAACtB,KAAK,CAACuB,MAAM,CAACC,MAAM,CAACC,MAAM,CAAC;IAC/D8B,oBAAoB,EAAEjC,cAAc,CAACtB,KAAK,CAACuB,MAAM,CAACC,MAAM,CAACC,MAAM,CAAC;IAChE+B,UAAU,EAAA,EAAA,CAAAX,MAAA,CAAKY,cAAc,CAACzD,KAAK,CAAC0D,MAAM,CAACC,QAAQ,CAACC,QAAQ,CAAC,EAAAf,GAAAA,CAAAA,CAAAA,MAAA,CAC3D7C,KAAK,CAAC0D,MAAM,CAACG,MAAM,CAACC,QAAQ,CAACC,SAAS,CACtC;AACFC,IAAAA,kBAAkB,EAAE,YAAA;AAAY,GAAA,EAG5B9B,QAAQ,GACR;AACE,IAAA,iBAAiB,EAAEC,iBAAiB;AACpC,IAAA,SAAS,EAAE;AACT8B,MAAAA,IAAI,EAAE,CAAC,CAAA;KACR;AACD,IAAA,QAAQ,EAAE;AACRC,MAAAA,KAAK,EAAE,CAAC,CAAA;AACV,KAAA;GACD,GACD,EAAE,CAAA,CAAA;AAEV,CAAC,CAAC,CAAA;AAEF,IAAMC,WAAW,gBAAGzE,MAAM,CAACsC,OAAO,CAAC,CAAApC,UAAA,CAAA;EAAAC,WAAA,EAAA,4BAAA;EAAAC,WAAA,EAAA,cAAA;AAAA,CAAyB,CAAA,CAAA,UAAAsE,KAAA,EAAyB;AAAA,EAAA,IAAtBpE,KAAK,GAAAoE,KAAA,CAALpE,KAAK;IAAEkC,QAAQ,GAAAkC,KAAA,CAARlC,QAAQ,CAAA;EAC5E,OAAO;AACLG,IAAAA,QAAQ,EAAE,UAAU;AACpBC,IAAAA,GAAG,EAAE,CAAC;AACN2B,IAAAA,IAAI,EAAE,CAAC;AACPC,IAAAA,KAAK,EAAE,CAAC;IACRpD,MAAM,EAAEJ,SAAS,CAACV,KAAK,CAACW,OAAO,CAAC,CAAC,CAAC,CAAC;IACnC2C,mBAAmB,EAAEhC,cAAc,CAACtB,KAAK,CAACuB,MAAM,CAACC,MAAM,CAACC,MAAM,CAAC;IAC/D8B,oBAAoB,EAAEjC,cAAc,CAACtB,KAAK,CAACuB,MAAM,CAACC,MAAM,CAACC,MAAM,CAAC;IAChEE,eAAe,EAAE3B,KAAK,CAAC4B,MAAM,CAACC,WAAW,CAACwC,IAAI,CAACvC,IAAI,CAACwC,MAAM;AAC1DC,IAAAA,aAAa,EAAE,MAAM;AACrB;AACAC,IAAAA,OAAO,EAAEtC,QAAQ,GAAG,CAAC,GAAG,CAAC;IACzBsB,UAAU,EAAA,EAAA,CAAAX,MAAA,CAAKY,cAAc,CAACzD,KAAK,CAAC0D,MAAM,CAACC,QAAQ,CAACC,QAAQ,CAAC,EAAAf,GAAAA,CAAAA,CAAAA,MAAA,CAC3D7C,KAAK,CAAC0D,MAAM,CAACG,MAAM,CAACC,QAAQ,CAACC,SAAS,CACtC;AACFC,IAAAA,kBAAkB,EAAE,SAAA;GACrB,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,IAAMS,WAA+E,GAAG,SAAlFA,WAA+EA,CAAAC,KAAA,EAgBnFC,GAAG,EACoB;AAAA,EAAA,IAfrBC,EAAE,GAAAF,KAAA,CAAFE,EAAE;IACFC,KAAK,GAAAH,KAAA,CAALG,KAAK;IACL3C,QAAQ,GAAAwC,KAAA,CAARxC,QAAQ;IACF4C,IAAI,GAAAJ,KAAA,CAAVL,IAAI;IACJU,QAAQ,GAAAL,KAAA,CAARK,QAAQ;IACRC,kBAAkB,GAAAN,KAAA,CAAlBM,kBAAkB;IAClBC,IAAI,GAAAP,KAAA,CAAJO,IAAI;IACJC,MAAM,GAAAR,KAAA,CAANQ,MAAM;IAENC,qBAAqB,GAAAT,KAAA,CAArBS,qBAAqB;IAErBC,OAAO,GAAAV,KAAA,CAAPU,OAAO;AACJC,IAAAA,KAAK,GAAAC,wBAAA,CAAAZ,KAAA,EAAAa,SAAA,CAAA,CAAA;AAIV,EAAA,IAAAC,iBAAA,GAA+BC,gBAAgB,EAAE;IAAzCC,kBAAkB,GAAAF,iBAAA,CAAlBE,kBAAkB,CAAA;AAC1B,EAAA,IAAMC,OAAO,GAAGC,cAAK,CAACC,MAAM,CAAiB,IAAI,CAAC,CAAA;;AAElD;AACAC,EAAAA,yBAAyB,CAAC,YAAM;AAC9B,IAAA,IAAI,CAACH,OAAO,CAACI,OAAO,EAAE,OAAA;IACtB,IAAI,CAACZ,qBAAqB,EAAE,OAAA;IAC5BO,kBAAkB,CAAC,UAACM,IAAI,EAAK;MAC3B,OAAOA,IAAI,CAACC,GAAG,CAAC,UAACC,IAAI,EAAEC,KAAK,EAAK;AAAA,QAAA,IAAAC,gBAAA,CAAA;AAC/B,QAAA,IAAID,KAAK,KAAKf,OAAO,EAAE,OAAOc,IAAI,CAAA;AAClC,QAAA,IAAMG,MAAM,GAAGV,OAAO,aAAPA,OAAO,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,CAAAS,gBAAA,GAAPT,OAAO,CAAEI,OAAO,cAAAK,gBAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAhBA,gBAAA,CAAkBE,qBAAqB,EAAG,CAAA;AACzD,QAAA,IAAMC,QAAQ,GAAGF,MAAM,CAAC7D,KAAK,CAAA;AAC7B,QAAA,IAAMgE,OAAO,GAAGH,MAAM,CAACnC,KAAK,CAAA;AAC5B,QAAA,OAAAhE,aAAA,CAAAA,aAAA,CAAA,EAAA,EACKgG,IAAI,CAAA,EAAA,EAAA,EAAA;AACPK,UAAAA,QAAQ,EAARA,QAAQ;AACRC,UAAAA,OAAO,EAAPA,OAAAA;AAAO,SAAA,CAAA,CAAA;AAEX,OAAC,CAAC,CAAA;AACJ,KAAC,CAAC,CAAA;GACH,EAAE,CAACrB,qBAAqB,EAAEC,OAAO,EAAEM,kBAAkB,CAAC,CAAC,CAAA;AAExD,EAAA,oBACEe,IAAA,CAAC1E,uBAAuB,EAAA7B,aAAA,CAAAA,aAAA,CAAA;AACtByE,IAAAA,GAAG,EAAEgB,OAAQ;AACbzD,IAAAA,QAAQ,EAAEA,QAAAA;AAAS,GAAA,EACfwE,aAAa,CAAC;IAAEC,IAAI,EAAEC,aAAa,CAACC,UAAAA;AAAW,GAAC,CAAC,CAAA,EAAA,EAAA,EAAA;IAAAC,QAAA,EAAA,cAErDC,GAAA,CAAC5C,WAAW,EAAA;AAACjC,MAAAA,QAAQ,EAAEA,QAAAA;KAAW,CAAC,eACnCuE,IAAA,CAAChH,gBAAgB,EAAAS,aAAA,CAAAA,aAAA,CAAAA,aAAA,CAAA;AACfyE,MAAAA,GAAG,EAAEA,GAAI;MACTC,EAAE,EAAEA,EAAE,KAAA,IAAA,IAAFA,EAAE,KAAA,KAAA,CAAA,GAAFA,EAAE,GAAKK,IAAI,GAAG,GAAG,GAAG,QAAU;AAClC+B,MAAAA,EAAE,EAAE/B,IAAK;AACTA,MAAAA,IAAI,EAAEL,EAAE,GAAGqC,SAAS,GAAGhC,IAAK;AAC5BC,MAAAA,MAAM,EAAEA,MAAO;AACfjF,MAAAA,SAAS,EAAEiC,QAAAA;KACPmD,EAAAA,KAAK,CACL6B,EAAAA,cAAc,CAAC;AAAEC,MAAAA,KAAK,EAAEnC,kBAAkB;AAAEe,MAAAA,OAAO,EAAE7D,QAAAA;AAAS,KAAC,CAAC,CAAA,EAAA,EAAA,EAAA;AAAA4E,MAAAA,QAAA,EAEnEhC,CAAAA,IAAI,gBACHiC,GAAA,CAACjC,IAAI,EAAA;AACH1E,QAAAA,IAAI,EAAC,OAAO;AACZE,QAAAA,KAAK,EAAE4B,QAAQ,GAAG,8BAA8B,GAAG,0BAAA;OACpD,CAAC,GACA,IAAI,EACP2C,KAAK,EACLE,QAAQ,GAAGA,QAAQ,GAAG,IAAI,CAAA;AAAA,KAAA,CACX,CAAC,CAAA;AAAA,GAAA,CACI,CAAC,CAAA;AAE9B,CAAC,CAAA;AAEK8B,IAAAA,UAAU,gBAAGO,wBAAwB,eAACxB,cAAK,CAACyB,UAAU,CAAC5C,WAAW,CAAC,EAAE;AACzE5E,EAAAA,WAAW,EAAE,YAAA;AACf,CAAC;;;;"}
@@ -1,4 +1,4 @@
1
- export { TabNav } from './TabNav.web.js';
1
+ export { TabNav, TabNavItems } from './TabNav.web.js';
2
2
  export { TabNavItem } from './TabNavItem.web.js';
3
3
  import './types.js';
4
4
  //# sourceMappingURL=index.js.map