UNPKG

@workday/canvas-kit-react

Version:

The parent module that contains all Workday Canvas Kit React components

129 lines (128 loc) • 13.2 kB
import { jsx as _jsx } from "react/jsx-runtime"; import { createComponent } from '@workday/canvas-kit-react/common'; import { systemIconStencil } from '@workday/canvas-kit-react/icon'; import { mergeStyles } from '@workday/canvas-kit-react/layout'; import { calc, createStencil, createVars, cssVar, px2rem } from '@workday/canvas-kit-styling'; import { base, system } from '@workday/canvas-tokens-web'; import { ButtonLabel } from '../lib/parts/ButtonLabel'; import { ButtonLabelIcon } from '../lib/parts/ButtonLabelIcon'; /** * The purpose of this object is for the `colors` prop - to provide backwards compatibility with how we allowed color overrides in Emotion. */ export const buttonColorPropVars = { default: createVars({ id: "2f7547", args: ["background", "border", "boxShadowInner", "boxShadowOuter", "icon", "label", "opacity", "borderRadius"] }), focus: createVars({ id: "5e7d9c", args: ["background", "border", "boxShadowInner", "boxShadowOuter", "icon", "label", "opacity", "borderRadius"] }), hover: createVars({ id: "60f068", args: ["background", "border", "boxShadowInner", "boxShadowOuter", "icon", "label", "opacity", "borderRadius"] }), active: createVars({ id: "76d965", args: ["background", "border", "boxShadowInner", "boxShadowOuter", "icon", "label", "opacity", "borderRadius"] }), disabled: createVars({ id: "4fc0b7", args: ["background", "border", "boxShadowInner", "boxShadowOuter", "icon", "label", "opacity", "borderRadius"] }), }; /** * Base styles for Buttons. */ export const buttonStencil = createStencil({ vars: { background: '', border: '', boxShadowInner: '', boxShadowOuter: '', label: '', opacity: '', borderRadius: '', }, base: { name: "15zax4", styles: "box-sizing:border-box;font-family:var(--cnvs-sys-font-family-default);font-size:var(--cnvs-sys-font-size-subtext-lg, var(--cnvs-sys-font-size-subtext-large, 0.875rem));line-height:var(--cnvs-sys-line-height-subtext-lg, var(--cnvs-sys-line-height-subtext-large, 1.25rem));letter-spacing:var(--cnvs-sys-letter-spacing-subtext-lg, var(--cnvs-sys-type-letter-spacing-subtext-large));font-weight:var(--cnvs-sys-font-weight-medium);background-color:var(--background-2f7547, var(--background-button-a19f67, transparent));color:var(--label-2f7547, var(--label-button-a19f67, var(--cnvs-sys-color-fg-strong)));border-width:0.0625rem;border-style:solid;gap:var(--cnvs-sys-gap-sm, var(--cnvs-sys-space-x2, 0.5rem));border-color:var(--border-2f7547, var(--border-button-a19f67, transparent));cursor:pointer;display:inline-flex;box-shadow:none;align-items:center;justify-content:center;outline:0.125rem transparent;white-space:nowrap;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;border-radius:var(--borderRadius-2f7547, var(--borderRadius-button-a19f67, var(--cnvs-sys-shape-full, var(--cnvs-sys-shape-round, 65rem))));position:relative;vertical-align:middle;overflow:hidden;--color-system-icon-c9acc3:var(--icon-2f7547, var(--cnvs-sys-color-fg-strong));transition:box-shadow 120ms linear, border 120ms linear, background-color 120ms linear, color 120ms linear;&:disabled, &:disabled:active, &.disabled{cursor:default;box-shadow:none;opacity:var(--opacity-2f7547, var(--opacity-button-a19f67, var(--cnvs-sys-opacity-full)));}&:focus-visible, &.focus{background-color:var(--background-5e7d9c, var(--background-button-a19f67, transparent));border-color:var(--border-5e7d9c, var(--border-button-a19f67, transparent));color:var(--label-5e7d9c, var(--label-button-a19f67, var(--cnvs-sys-color-fg-strong)));--color-system-icon-c9acc3:var(--icon-5e7d9c, var(--cnvs-sys-color-fg-strong));outline:0.125rem solid transparent;outline-offset:0.125rem;box-shadow:0 0 0 0.125rem var(--boxShadowInner-5e7d9c, var(--boxShadowInner-button-a19f67, var(--cnvs-sys-color-border-inverse-default, var(--cnvs-sys-color-border-inverse, oklch(1 0 0 / 1))))),0 0 0 0.25rem var(--boxShadowOuter-5e7d9c, var(--boxShadowOuter-button-a19f67, var(--cnvs-sys-color-brand-focus-primary, var(--cnvs-brand-common-focus-outline, oklch(0.6023 0.2032 255.68 / 1)))));}&:hover, &.hover{background-color:var(--background-60f068, var(--background-button-a19f67, var(--cnvs-sys-color-surface-contrast-strong, var(--cnvs-sys-color-bg-contrast-strong, oklch(0.0672 0 0 / 0.89)))));border-color:var(--border-60f068, var(--border-button-a19f67, transparent));color:var(--label-60f068, var(--label-button-a19f67, var(--cnvs-sys-color-fg-stronger)));--color-system-icon-c9acc3:var(--icon-60f068, var(--cnvs-sys-color-fg-stronger));}&:hover:active{transition-duration:40ms;}&:active, &.active{background-color:var(--background-76d965, var(--background-button-a19f67, transparent));border-color:var(--border-76d965, var(--border-button-a19f67, transparent));color:var(--label-76d965, var(--label-button-a19f67, var(--cnvs-sys-color-fg-strong)));--color-system-icon-c9acc3:var(--icon-76d965, var(--cnvs-sys-color-fg-strong));}&:disabled, &.disabled{background-color:var(--background-4fc0b7, var(--background-button-a19f67, transparent));border-color:var(--border-4fc0b7, var(--border-button-a19f67, transparent));color:var(--label-4fc0b7, var(--label-button-a19f67, var(--cnvs-sys-color-fg-strong)));--color-system-icon-c9acc3:var(--icon-4fc0b7, currentColor);}@media (prefers-contrast: more){&[aria-pressed=\"true\"]{outline:0.125rem solid transparent;outline-offset:-0.0625rem;}&[aria-pressed=\"true\"]:focus-visible, &[aria-pressed=\"true\"].focus{outline:0.25rem double transparent;outline-offset:0;}}svg{pointer-events:none;}" }, modifiers: { /** * Button modifiers that will overwrite the base styles of Buttons. * - `Size`: These modifiers will dictate a size of a Button and has a set of styles to associated with it. * - `iconPosition`: These modifiers will override the existing `Size` styles. These are specific to icon locations * within a button or if there is only an icon and no text. */ size: { large: { name: "3kztlf", styles: "font-size:var(--cnvs-sys-font-size-body-sm, var(--cnvs-sys-font-size-body-small, 1rem));line-height:var(--cnvs-sys-line-height-body-sm, var(--cnvs-sys-line-height-body-small, 1.5rem));letter-spacing:var(--cnvs-sys-letter-spacing-body-sm, var(--cnvs-sys-type-letter-spacing-body-small));height:var(--cnvs-sys-size-lg, 3rem);padding-inline:var(--cnvs-sys-padding-lg, var(--cnvs-sys-space-x5, 1.25rem));min-width:var(--cnvs-base-size-1300, 6.5rem);" }, medium: { name: "9kdlx", styles: "font-size:var(--cnvs-sys-font-size-subtext-lg, var(--cnvs-sys-font-size-subtext-large, 0.875rem));line-height:var(--cnvs-sys-line-height-subtext-lg, var(--cnvs-sys-line-height-subtext-large, 1.25rem));letter-spacing:var(--cnvs-sys-letter-spacing-subtext-lg, var(--cnvs-sys-type-letter-spacing-subtext-large));padding-inline:var(--cnvs-sys-padding-md, var(--cnvs-sys-space-x4, 1rem));height:var(--cnvs-sys-size-md, var(--cnvs-sys-space-x10, 2.5rem));gap:var(--cnvs-base-size-75, 0.375rem);min-width:var(--cnvs-base-size-1100, 5.5rem);" }, small: { name: "26dto0", styles: "font-size:var(--cnvs-sys-font-size-subtext-lg, var(--cnvs-sys-font-size-subtext-large, 0.875rem));line-height:var(--cnvs-sys-line-height-subtext-lg, var(--cnvs-sys-line-height-subtext-large, 1.25rem));letter-spacing:var(--cnvs-sys-letter-spacing-subtext-lg, var(--cnvs-sys-type-letter-spacing-subtext-large));height:var(--cnvs-sys-size-sm, var(--cnvs-sys-space-x8, 2rem));padding-inline:var(--cnvs-sys-padding-sm, var(--cnvs-sys-space-x3, 0.75rem));gap:var(--cnvs-sys-gap-xs, var(--cnvs-sys-space-x1, 0.25rem));min-width:var(--cnvs-base-size-900, 4.5rem);" }, extraSmall: { name: "18ged1", styles: "font-size:var(--cnvs-sys-font-size-subtext-md, var(--cnvs-sys-font-size-subtext-medium, 0.75rem));line-height:var(--cnvs-sys-line-height-subtext-md, var(--cnvs-sys-line-height-subtext-medium, 1rem));letter-spacing:var(--cnvs-sys-letter-spacing-subtext-md, var(--cnvs-sys-type-letter-spacing-subtext-medium));height:var(--cnvs-sys-size-xs, var(--cnvs-sys-space-x6, 1.5rem));padding-inline:var(--cnvs-sys-padding-xs, var(--cnvs-sys-space-x2, 0.5rem));gap:var(--cnvs-sys-gap-xs, var(--cnvs-sys-space-x1, 0.25rem));min-width:auto;" } }, grow: { true: { name: "3lk5pq", styles: "width:100%;max-width:100%;" } }, // IconPosition Styles iconPosition: { only: { name: "11hde", styles: "padding:0;" }, start: { name: "2dotfb", styles: "" }, end: { name: "49brhk", styles: "" } } }, // Compound Modifier Styles compound: [ { modifiers: { size: 'large', iconPosition: 'only' }, styles: { name: "2rr4b5", styles: "min-width:var(--cnvs-sys-size-lg, 3rem);" } }, { modifiers: { size: 'large', iconPosition: 'start' }, styles: { name: "3m5mhd", styles: "padding-inline-start:var(--cnvs-sys-padding-md, var(--cnvs-sys-space-x4, 1rem));padding-inline-end:var(--cnvs-sys-padding-lg, var(--cnvs-sys-space-x5, 1.25rem));" } }, { modifiers: { size: 'large', iconPosition: 'end' }, styles: { name: "3vy35z", styles: "padding-inline-start:var(--cnvs-sys-padding-lg, var(--cnvs-sys-space-x5, 1.25rem));padding-inline-end:var(--cnvs-sys-padding-md, var(--cnvs-sys-space-x4, 1rem));" } }, { modifiers: { size: 'medium', iconPosition: 'only' }, styles: { name: "2daela", styles: "min-width:var(--cnvs-sys-size-md, var(--cnvs-sys-space-x10, 2.5rem));" } }, { modifiers: { size: 'medium', iconPosition: 'start' }, styles: { name: "3mj91b", styles: "padding-inline-start:var(--cnvs-sys-padding-sm, var(--cnvs-sys-space-x3, 0.75rem));padding-inline-end:var(--cnvs-sys-padding-md, var(--cnvs-sys-space-x4, 1rem));" } }, { modifiers: { size: 'medium', iconPosition: 'end' }, styles: { name: "1numro", styles: "padding-inline-start:var(--cnvs-sys-padding-md, var(--cnvs-sys-space-x4, 1rem));padding-inline-end:var(--cnvs-sys-padding-sm, var(--cnvs-sys-space-x3, 0.75rem));" } }, { modifiers: { size: 'small', iconPosition: 'only' }, styles: { name: "28j3ie", styles: "min-width:var(--cnvs-sys-size-sm, var(--cnvs-sys-space-x8, 2rem));" } }, { modifiers: { size: 'small', iconPosition: 'start' }, styles: { name: "2evetf", styles: "padding-inline-start:var(--cnvs-sys-padding-xs, var(--cnvs-sys-space-x2, 0.5rem));padding-inline-end:var(--cnvs-sys-padding-sm, var(--cnvs-sys-space-x3, 0.75rem));" } }, { modifiers: { size: 'small', iconPosition: 'end' }, styles: { name: "12biqx", styles: "padding-inline-start:var(--cnvs-sys-padding-sm, var(--cnvs-sys-space-x3, 0.75rem));padding-inline-end:var(--cnvs-sys-padding-xs, var(--cnvs-sys-space-x2, 0.5rem));" } }, { modifiers: { size: 'extraSmall', iconPosition: 'only' }, styles: { name: "43fcz9", styles: "min-width:var(--cnvs-sys-size-xs, var(--cnvs-sys-space-x6, 1.5rem));" } }, { modifiers: { size: 'extraSmall', iconPosition: 'start' }, styles: { name: "288pks", styles: "padding-inline-start:calc(var(--cnvs-sys-padding-xxs, var(--cnvs-sys-space-x1, 0.25rem)) + 0.125rem);padding-inline-end:var(--cnvs-sys-padding-xs, var(--cnvs-sys-space-x2, 0.5rem));" } }, { modifiers: { size: 'extraSmall', iconPosition: 'end' }, styles: { name: "2k7w53", styles: "padding-inline-start:var(--cnvs-sys-padding-xs, var(--cnvs-sys-space-x2, 0.5rem));padding-inline-end:calc(var(--cnvs-sys-padding-xxs, var(--cnvs-sys-space-x1, 0.25rem)) + 0.125rem);" } } ] }, "button-a19f67"); /** * The baseLegacy button which which is the foundation of all Button variants (`PrimaryButton`, * `SecondaryButton`, `TertiaryButton`, `DeleteButton`, `ToolbarIconButton` and `ToolbarDropdownButton`). */ export const BaseButton = createComponent('button')({ displayName: 'BaseButton', Component: ({ children, size, fillIcon, grow, iconPosition, icon, colors, ...elemProps }, ref, Element) => { return (_jsx(Element, { ref: ref, type: "button", ...mergeStyles(elemProps, [ buttonStencil({ size, iconPosition, grow }), buttonColorPropVars.default((colors === null || colors === void 0 ? void 0 : colors.default) || {}), buttonColorPropVars.focus((colors === null || colors === void 0 ? void 0 : colors.focus) || {}), buttonColorPropVars.hover((colors === null || colors === void 0 ? void 0 : colors.hover) || {}), buttonColorPropVars.active((colors === null || colors === void 0 ? void 0 : colors.active) || {}), buttonColorPropVars.disabled((colors === null || colors === void 0 ? void 0 : colors.disabled) || {}), ]), children: children })); }, subComponents: { Icon: ButtonLabelIcon, Label: ButtonLabel, }, });