UNPKG

@workday/canvas-kit-react

Version:

The parent module that contains all Workday Canvas Kit React components

94 lines (93 loc) 4.2 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.ToolbarIconButton = 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 BaseButton_1 = require("./BaseButton"); const canvas_tokens_web_1 = require("@workday/canvas-tokens-web"); const StyledToolbarIconButton = (0, common_1.styled)(BaseButton_1.BaseButton)({ ['& .wd-icon']: { display: 'inline-block', width: 20, height: 20, }, '&:focus-visible, &.focus': { ...(0, common_1.focusRing)({ width: 2, separation: 0, innerColor: 'transparent', outerColor: canvas_tokens_web_1.brand.common.focusOutline, }), }, }); exports.ToolbarIconButton = (0, common_1.createComponent)('button')({ displayName: 'ToolbarIconButton', Component: ({ // TODO: Fix useTheme and make it a real hook // eslint-disable-next-line react-hooks/rules-of-hooks theme = (0, common_1.useTheme)(), onToggleChange, icon, shouldMirrorIcon = false, toggled, children, ...elemProps }, ref, Element) => { const isInitialMount = React.useRef(true); // Only call onToggleChange on update - not on first mount React.useEffect(() => { if (isInitialMount.current) { isInitialMount.current = false; } else { if (toggled && typeof onToggleChange === 'function') { onToggleChange(toggled); } } }, [toggled, onToggleChange]); return (React.createElement(StyledToolbarIconButton, { ref: ref, as: Element, colors: getToolbarIconButtonColors(theme, toggled), size: 'small', fillIcon: toggled, "aria-pressed": toggled, padding: "zero", minWidth: tokens_1.space.l, width: tokens_1.space.l, height: tokens_1.space.l, borderRadius: tokens_1.borderRadius.m, ...elemProps }, icon ? React.createElement(BaseButton_1.BaseButton.Icon, { icon: icon, shouldMirrorIcon: shouldMirrorIcon }) : children)); }, }); const getToolbarIconButtonColors = (theme, toggled) => { const { canvas: { palette: { primary: themePrimary }, }, } = theme; return { default: { icon: toggled ? themePrimary.main : tokens_1.colors.licorice200, background: toggled ? themePrimary.lightest : 'transparent', }, hover: { icon: toggled ? themePrimary.dark : tokens_1.colors.licorice500, background: tokens_1.colors.soap300, }, active: { icon: toggled ? themePrimary.dark : tokens_1.colors.licorice500, background: tokens_1.colors.soap500, }, focus: { icon: toggled ? themePrimary.main : tokens_1.colors.licorice200, background: toggled ? themePrimary.lightest : 'transparent', }, disabled: { icon: toggled ? themePrimary.light : tokens_1.colors.soap600, background: toggled ? themePrimary.lightest : 'transparent', opacity: '1', }, }; };