import {createComponent, focusRing} from '@workday/canvas-kit-react/common'; import {systemIconStencil} from '@workday/canvas-kit-react/icon'; import {calc, createStencil, cssVar, handleCsProp, px2rem} from '@workday/canvas-kit-styling'; import {chevronDownSmallIcon} from '@workday/canvas-system-icons-web'; import {system} from '@workday/canvas-tokens-web'; import {BaseButton, buttonColorPropVars, buttonStencil} from './BaseButton'; import {ToolbarIconButtonProps} from './ToolbarIconButton'; export interface ToolbarDropdownButtonProps extends Omit {} export const toolbarDropdownButtonStencil = createStencil({ extends: buttonStencil, parts: { chevron: 'toolbar-dropdown-btn-arrow', customIcon: 'toolbar-dropdown-btn-custom-icon', }, base: ({chevronPart, customIconPart}) => ({ padding: 0, minWidth: system.legacy.size.sm, gap: 0, [buttonStencil.vars.borderRadius]: system.legacy.shape.sm, [systemIconStencil.vars.color]: cssVar( buttonColorPropVars.default.icon, system.color.fg.default ), [buttonStencil.vars.background]: system.legacy.color.surface.transparent, '&:focus-visible, &.focus': { [buttonStencil.vars.background]: system.legacy.color.surface.transparent, [systemIconStencil.vars.color]: cssVar( buttonColorPropVars.focus.icon, system.color.fg.strong ), ...focusRing({ width: 2, separation: 0, innerColor: system.legacy.color.focus.inverse, outerColor: system.legacy.color.brand.focus.primary, }), }, '&:hover, &.hover': { [buttonStencil.vars.background]: system.legacy.color.surface.overlay.hover.default, [systemIconStencil.vars.color]: cssVar( buttonColorPropVars.hover.icon, system.color.fg.default ), }, '&:active, &.active': { [buttonStencil.vars.background]: system.legacy.color.surface.overlay.pressed.default, [systemIconStencil.vars.color]: cssVar( buttonColorPropVars.active.icon, system.color.fg.strong ), }, '&:disabled, &.disabled': { [buttonStencil.vars.background]: system.legacy.color.surface.transparent, [buttonStencil.vars.opacity]: system.opacity.disabled, [systemIconStencil.vars.color]: cssVar( buttonColorPropVars.disabled.icon, system.color.fg.default ), [systemIconStencil.vars.color]: cssVar( buttonColorPropVars.disabled.icon, system.color.fg.default ), }, [customIconPart]: { marginInlineStart: system.legacy.padding.xxs, marginInlineEnd: calc.negate(px2rem(2)), }, [chevronPart]: { margin: 0, marginInlineEnd: px2rem(2), }, }), modifiers: { shouldMirrorIcon: { true: ({customIconPart}) => ({ [customIconPart]: { marginInlineEnd: 0, marginInlineStart: px2rem(2), }, }), }, shouldMirrorIconInRTL: { true: ({customIconPart}) => ({ [`&:dir(rtl) ${customIconPart}`]: { marginInlineEnd: 0, marginInlineStart: px2rem(2), }, }), }, }, }); export const ToolbarDropdownButton = createComponent('button')({ displayName: 'ToolbarDropdownButton', Component: ( { icon, shouldMirrorIcon = false, shouldMirrorIconInRTL = false, children, ...elemProps }: ToolbarDropdownButtonProps, ref, Element ) => { return ( {icon ? ( ) : ( children )} ); }, });