@razorpay/blade
Version:
The Design System that powers Razorpay
128 lines (124 loc) • 5.68 kB
JavaScript
import _defineProperty from '@babel/runtime/helpers/defineProperty';
import _objectWithoutProperties from '@babel/runtime/helpers/objectWithoutProperties';
import React__default from 'react';
import { Composite } from '@floating-ui/react';
import styled from 'styled-components';
import { useTabsContext } from './TabsContext.js';
import { TabIndicator } from './TabIndicator.web.js';
import { trackColor } from './tabTokens.js';
import '../Box/BaseBox/index.js';
import { useIsomorphicLayoutEffect } from '../../utils/useIsomorphicLayoutEffect.js';
import '../Box/index.js';
import '../Box/styledProps/index.js';
import '../../utils/metaAttribute/index.js';
import '../../utils/makeAnalyticsAttribute/index.js';
import { jsxs, jsx } from 'react/jsx-runtime';
import { BaseBox } from '../Box/BaseBox/BaseBox.web.js';
import { Box } from '../Box/Box.js';
import { getStyledProps } from '../Box/styledProps/getStyledProps.js';
import { metaAttribute } from '../../utils/metaAttribute/metaAttribute.web.js';
import { MetaConstants } from '../../utils/metaAttribute/metaConstants.js';
import { makeAnalyticsAttribute } from '../../utils/makeAnalyticsAttribute/makeAnalyticsAttribute.js';
var _excluded = ["children"];
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; }
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; }
var ScrollableArea = /*#__PURE__*/styled(BaseBox).withConfig({
displayName: "TabListweb__ScrollableArea",
componentId: "sc-1evjc5b-0"
})(function () {
return {
'&::-webkit-scrollbar': {
display: 'none'
}
};
});
var TabList = function TabList(_ref) {
var children = _ref.children,
rest = _objectWithoutProperties(_ref, _excluded);
var _useTabsContext = useTabsContext(),
setSelectedValue = _useTabsContext.setSelectedValue,
selectedValue = _useTabsContext.selectedValue,
variant = _useTabsContext.variant,
isVertical = _useTabsContext.isVertical;
var tabListContainerRef = React__default.useRef(null);
var isBordered = variant === 'bordered';
var isFilled = variant === 'filled';
// Set the first child as the selected value
useIsomorphicLayoutEffect(function () {
if (selectedValue) return;
var first = React__default.Children.toArray(children)[0];
if ( /*#__PURE__*/React__default.isValidElement(first)) {
// We need to skip calling onChange on the first render when we set the initial value
setSelectedValue === null || setSelectedValue === void 0 ? void 0 : setSelectedValue(function () {
return first.props.value;
}, true);
}
}, [children, selectedValue, setSelectedValue]);
return /*#__PURE__*/jsxs(Box, _objectSpread(_objectSpread(_objectSpread(_objectSpread({}, getStyledProps(rest)), metaAttribute({
name: MetaConstants.TabList
})), makeAnalyticsAttribute(rest)), {}, {
display: isVertical ? 'flex' : 'block',
flexShrink: 0,
overflow: "hidden",
children: [/*#__PURE__*/jsxs(ScrollableArea, {
position: "relative",
whiteSpace: "nowrap",
flex: "1 1 auto",
width: "100%",
overflow: "auto hidden",
children: [/*#__PURE__*/jsx(Composite, {
render: function render(htmlProps) {
return /*#__PURE__*/jsxs(BaseBox, {
flexDirection: "row",
display: "flex",
children: [isVertical && isBordered ? /*#__PURE__*/jsx(BaseBox, {
width: "0px",
height: "auto",
flexGrow: 1,
flexShrink: 0,
borderColor: trackColor,
borderWidth: "thin",
style: {
transform: 'translateX(1.5px)'
}
}) : null, /*#__PURE__*/jsx(BaseBox, _objectSpread(_objectSpread(_objectSpread({}, htmlProps), {}, {
flexGrow: 1,
ref: tabListContainerRef,
role: "tablist",
width: "100%",
display: "flex",
flexDirection: isVertical ? 'column' : 'row',
alignItems: isVertical ? 'start' : 'center',
overflow: isVertical ? 'hidden' : undefined
}, isFilled ? {
borderRadius: 'medium',
borderWidth: 'thin',
borderColor: 'interactive.border.gray.default',
padding: 'spacing.2',
gap: isVertical ? 'spacing.0' : 'spacing.1',
backgroundColor: 'surface.background.gray.intense'
} : {
padding: 'spacing.0',
gap: isVertical ? 'spacing.0' : {
base: 'spacing.7',
m: 'spacing.8'
}
}), {}, {
children: children
}))]
});
}
}), !isVertical ? /*#__PURE__*/jsx(TabIndicator, {
tabListContainerRef: tabListContainerRef
}) : null]
}), !isVertical && isBordered ? /*#__PURE__*/jsx(BaseBox, {
style: {
transform: 'translateY(-1px)'
},
borderBottomColor: trackColor,
borderBottomWidth: "thin"
}) : null]
}));
};
export { TabList };
//# sourceMappingURL=TabList.web.js.map