@workday/canvas-kit-react
Version:
The parent module that contains all Workday Canvas Kit React components
124 lines (123 loc) • 5.38 kB
JavaScript
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.TabsItem = exports.useTabsItem = exports.StyledTabItem = void 0;
const React = __importStar(require("react"));
const tokens_1 = require("@workday/canvas-kit-react/tokens");
const common_1 = require("@workday/canvas-kit-react/common");
const layout_1 = require("@workday/canvas-kit-react/layout");
const tooltip_1 = require("@workday/canvas-kit-react/tooltip");
const icon_1 = require("@workday/canvas-kit-react/icon");
const collection_1 = require("@workday/canvas-kit-react/collection");
const useTabsModel_1 = require("./useTabsModel");
const canvas_kit_styling_1 = require("@workday/canvas-kit-styling");
exports.StyledTabItem = (0, common_1.styled)(layout_1.Box.as('button'))(({ theme }) => ({
...tokens_1.type.levels.subtext.large,
fontWeight: tokens_1.type.properties.fontWeights.medium,
border: 'none',
backgroundColor: 'transparent',
flex: '0 0 auto',
alignItems: 'center',
padding: `${tokens_1.space.xs} ${tokens_1.space.s}`,
height: 52,
boxSizing: 'border-box',
cursor: 'pointer',
color: tokens_1.colors.licorice300,
position: 'relative',
borderRadius: `${tokens_1.borderRadius.m} ${tokens_1.borderRadius.m} 0px 0px`,
transition: 'background 150ms ease, color 150ms ease',
'&:hover, &:focus-visible, &.hover, &.focus': {
backgroundColor: tokens_1.colors.soap200,
color: tokens_1.colors.blackPepper400,
[icon_1.systemIconStencil.vars.color]: tokens_1.iconColors.hover,
},
'&:focus-visible, &.focus': {
outline: `${(0, canvas_kit_styling_1.px2rem)(2)} solid transparent`,
...(0, common_1.focusRing)({ inset: 'outer', width: 0, separation: 2 }, theme),
},
'&:disabled, &[aria-disabled]': {
color: tokens_1.colors.licorice100,
[icon_1.systemIconStencil.vars.color]: tokens_1.iconColors.disabled,
'&:hover': {
cursor: 'auto',
backgroundColor: `transparent`,
[icon_1.systemIconStencil.vars.color]: tokens_1.iconColors.disabled,
},
},
'&[aria-selected=true]': {
color: theme.canvas.palette.primary.main,
cursor: 'default',
[icon_1.systemIconStencil.vars.color]: theme.canvas.palette.primary.main,
'&:after': {
position: 'absolute',
// fallback for Windows high contrast theme
borderBottom: `${tokens_1.space.xxxs} solid transparent`,
borderRadius: `${tokens_1.borderRadius.m} ${tokens_1.borderRadius.m} 0px 0px`,
backgroundColor: theme.canvas.palette.primary.main,
bottom: 0,
content: `''`,
left: 0,
marginTop: '-2px',
width: '100%',
},
'&:hover, &:focus': {
backgroundColor: `transparent`,
color: theme.canvas.palette.primary.main,
},
},
}), ({ children, gap = tokens_1.space.xxs }) => {
if (typeof children === 'string') {
return common_1.ellipsisStyles;
}
else {
return {
display: 'flex',
gap,
};
}
});
exports.useTabsItem = (0, common_1.composeHooks)((0, common_1.createElemPropsHook)(useTabsModel_1.useTabsModel)(({ state }, _, elemProps = {}) => {
const name = elemProps['data-id'] || '';
const selected = !!elemProps['data-id'] && (0, collection_1.isSelected)(name, state);
return {
type: 'button',
role: 'tab',
'aria-selected': selected,
'aria-controls': (0, common_1.slugify)(`tabpanel-${state.id}-${name}`),
};
}), collection_1.useListItemSelect, collection_1.useOverflowListItemMeasure, collection_1.useListItemRovingFocus, collection_1.useListItemRegister);
exports.TabsItem = (0, common_1.createSubcomponent)('button')({
displayName: 'Tabs.Item',
modelHook: useTabsModel_1.useTabsModel,
elemPropsHook: exports.useTabsItem,
subComponents: {
Icon: icon_1.SystemIcon,
Text: common_1.EllipsisText,
},
})(({ children, ...elemProps }, Element) => {
const modality = (0, common_1.useModalityType)();
return (React.createElement(tooltip_1.OverflowTooltip, null,
React.createElement(exports.StyledTabItem, { as: Element, maxWidth: modality === 'touch' ? undefined : 280, ...elemProps }, children)));
});
;