UNPKG

@workday/canvas-kit-preview-react

Version:

Canvas Kit Preview is made up of components that have the full design and a11y review, are part of the DS ecosystem and are approved for use in product. The API's could be subject to change, but not without strong communication and migration strategies.

134 lines (133 loc) • 6.25 kB
"use strict"; 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.SegmentedControlItem = 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 tooltip_1 = require("@workday/canvas-kit-react/tooltip"); const button_1 = require("@workday/canvas-kit-react/button"); const useSegmentedControlModel_1 = require("./hooks/useSegmentedControlModel"); const text_1 = require("@workday/canvas-kit-react/text"); const useSegmentedControlItem_1 = require("./hooks/useSegmentedControlItem"); const getMinWidthStyles = (children, size) => { switch (size) { case 'large': return children ? '112px' : '48px'; case 'medium': return children ? '96px' : tokens_1.space.xl; case 'small': return children ? tokens_1.space.xxxl : tokens_1.space.l; case 'extraSmall': return children ? 'auto' : tokens_1.space.m; default: return children ? '96px' : tokens_1.space.xl; } }; const getButtonSize = (size) => { switch (size) { case 'large': return 'medium'; case 'medium': return 'small'; case 'small': return 'extraSmall'; default: return 'medium'; } }; const getIconButtonColors = (toggled) => { return { default: { background: toggled ? tokens_1.colors.frenchVanilla100 : tokens_1.colors.soap200, border: toggled ? tokens_1.colors.licorice200 : 'transparent', icon: toggled ? tokens_1.colors.blackPepper400 : tokens_1.colors.licorice400, label: toggled ? tokens_1.colors.blackPepper400 : tokens_1.colors.licorice400, }, hover: { background: toggled ? tokens_1.colors.frenchVanilla100 : tokens_1.colors.soap400, border: toggled ? tokens_1.colors.licorice200 : 'transparent', icon: tokens_1.colors.licorice400, label: tokens_1.colors.licorice400, }, active: { background: toggled ? tokens_1.colors.frenchVanilla100 : tokens_1.colors.soap400, border: toggled ? tokens_1.colors.licorice200 : 'transparent', icon: tokens_1.colors.licorice400, label: tokens_1.colors.licorice400, }, focus: { background: toggled ? tokens_1.colors.frenchVanilla100 : tokens_1.colors.soap200, border: toggled ? tokens_1.colors.licorice200 : 'transparent', icon: toggled ? tokens_1.colors.blackPepper400 : tokens_1.colors.licorice400, label: toggled ? tokens_1.colors.blackPepper400 : tokens_1.colors.licorice400, }, disabled: { background: tokens_1.colors.soap200, opacity: '1', icon: tokens_1.colors.licorice400, border: toggled ? tokens_1.colors.licorice200 : 'transparent', label: tokens_1.colors.blackPepper400, }, }; }; const getPaddingStyles = (children, size, icon) => { if (!children) { return 0; } switch (size) { case 'large': return icon ? `0 ${tokens_1.space.m} 0 20px` : `0 ${tokens_1.space.m}`; case 'medium': return icon ? `0 20px 0 ${tokens_1.space.s}` : `0 ${tokens_1.space.s}`; case 'small': return icon ? `0 ${tokens_1.space.xs} 0 ${tokens_1.space.xxs}` : `0 ${tokens_1.space.xs}`; default: return icon ? `0 20px 0 ${tokens_1.space.s}` : `0 ${tokens_1.space.s}`; } }; const geButtonStyles = (size, children, icon) => { const buttonSize = getButtonSize(size); const minWidthValue = getMinWidthStyles(children, children ? size : buttonSize); return { height: getMinWidthStyles(false, buttonSize), minWidth: minWidthValue, padding: getPaddingStyles(children, size, icon), }; }; const Container = ({ tooltipProps, children, }) => { return tooltipProps ? (React.createElement(tooltip_1.Tooltip, { ...tooltipProps }, children)) : (React.createElement(React.Fragment, null, children)); }; exports.SegmentedControlItem = (0, common_1.createSubcomponent)('button')({ displayName: 'SegmentedControl.Item', modelHook: useSegmentedControlModel_1.useSegmentedControlModel, elemPropsHook: useSegmentedControlItem_1.useSegmentedControlItem, })(({ children, icon, tooltipProps, ...elemProps }, Element, { state: { size } }) => { const { color, ...textStyles } = tokens_1.type.levels.subtext[size === 'small' ? 'medium' : 'large']; return (React.createElement(Container, { tooltipProps: tooltipProps }, React.createElement(button_1.BaseButton, { as: Element, borderRadius: "m", colors: getIconButtonColors(elemProps['aria-pressed']), ...geButtonStyles(size, children, icon), ...elemProps }, icon && (React.createElement(button_1.BaseButton.Icon, { size: size === 'small' ? 'extraSmall' : 'medium', icon: icon, shouldMirrorIcon: (0, common_1.useIsRTL)() })), children && (React.createElement(text_1.Text, { ...textStyles, fontWeight: "bold", textAlign: "left" }, children))))); });