Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: Add style transform support for stencils #2489

Merged
6 changes: 5 additions & 1 deletion modules/labs-react/tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,11 @@
{
"transform": "../styling-transform/lib/styleTransform.ts",
"prefix": "css",
"fallbackFiles": []
"fallbackFiles": [
"@workday/canvas-tokens-web/css/base/_variables.css",
"@workday/canvas-tokens-web/css/brand/_variables.css",
"@workday/canvas-tokens-web/css/system/_variables.css"
]
}
]
}
Expand Down
4 changes: 2 additions & 2 deletions modules/preview-react/form-field/lib/FormFieldLabel.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import {createSubcomponent, ExtractProps} from '@workday/canvas-kit-react/common
import {type, space} from '@workday/canvas-kit-react/tokens';
import {LabelText, Text} from '@workday/canvas-kit-react/text';
import {useFormFieldLabel, useFormFieldModel} from './hooks';
import {createStyles, cssVar} from '@workday/canvas-kit-styling';
import {createStyles} from '@workday/canvas-kit-styling';
import {mergeStyles} from '@workday/canvas-kit-react/layout';
import {brand} from '@workday/canvas-tokens-web';

Expand All @@ -25,7 +25,7 @@ const asteriskStyles = createStyles({
fontSize: type.properties.fontSizes[20],
fontWeight: type.properties.fontWeights.regular,
textDecoration: 'unset',
color: cssVar(brand.error.base, '#de2e21'),
color: brand.error.base,
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This type of change is in many places. Auto-fallback works and manually including a fallback is a maitenance issue.

});

export const FormFieldLabel = createSubcomponent(LabelText)({
Expand Down
12 changes: 11 additions & 1 deletion modules/preview-react/tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,16 @@
"extends": "../../tsconfig.json",
"exclude": ["node_modules", "ts-tmp", "dist", "**/spec", "**/stories"],
"compilerOptions": {
"plugins": [{"transform": "../modules/styling/parser/styleParser.ts", "prefix": "css"}]
"plugins": [
{
"transform": "../modules/styling/parser/styleParser.ts",
"prefix": "css",
"fallbackFiles": [
"@workday/canvas-tokens-web/css/base/_variables.css",
"@workday/canvas-tokens-web/css/brand/_variables.css",
"@workday/canvas-tokens-web/css/system/_variables.css"
]
}
]
}
}
109 changes: 53 additions & 56 deletions modules/react/button/lib/BaseButton.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -121,10 +121,10 @@ const baseButtonStyles = createStyles({
letterSpacing: '0.015rem',
fontWeight: 'bold',
backgroundColor: cssVar(buttonVars.default.background, 'transparent'),
color: cssVar(buttonVars.default.label, cssVar(base.blackPepper400, '#333333')),
color: cssVar(buttonVars.default.label, base.blackPepper400),
borderWidth: '1px',
borderStyle: 'solid',
gap: cssVar(system.space.x2, '0.5rem'),
gap: system.space.x2,
borderColor: cssVar(buttonVars.default.border, 'transparent'),
cursor: 'pointer',
display: 'inline-flex',
Expand All @@ -136,7 +136,7 @@ const baseButtonStyles = createStyles({
whiteSpace: 'nowrap',
WebkitFontSmoothing: 'antialiased',
MozOsxFontSmoothing: 'grayscale',
borderRadius: cssVar(buttonVars.default.borderRadius, cssVar(system.shape.round, '62.5rem')),
borderRadius: cssVar(buttonVars.default.borderRadius, system.shape.round),
position: 'relative',
verticalAlign: 'middle',
overflow: 'hidden',
Expand All @@ -149,63 +149,60 @@ const baseButtonStyles = createStyles({
},
'& span .wd-icon-fill': {
transitionDuration: '40ms',
fill: cssVar(buttonVars.default.icon, cssVar(base.blackPepper400, '#333333')),
fill: cssVar(buttonVars.default.icon, base.blackPepper400),
},
'.wd-icon-background ~ .wd-icon-accent, .wd-icon-background ~ .wd-icon-accent2': {
fill: cssVar(buttonVars.default.icon, cssVar(base.blackPepper400, '#333333')),
fill: cssVar(buttonVars.default.icon, base.blackPepper400),
},
'&:focus-visible, &.focus': {
backgroundColor: cssVar(buttonVars.focus.background, 'transparent'),
borderColor: cssVar(buttonVars.focus.border, 'transparent'),
color: cssVar(buttonVars.focus.label, cssVar(base.blackPepper400, '#333333')),
color: cssVar(buttonVars.focus.label, base.blackPepper400),
'& span .wd-icon-fill': {
fill: cssVar(buttonVars.focus.icon, cssVar(base.blackPepper400, '#333333')),
fill: cssVar(buttonVars.focus.icon, base.blackPepper400),
},
'.wd-icon-background ~ .wd-icon-accent, .wd-icon-background ~ .wd-icon-accent2': {
fill: cssVar(buttonVars.focus.icon, cssVar(base.blackPepper400, '#333333')),
fill: cssVar(buttonVars.focus.icon, base.blackPepper400),
},
...focusRing({
width: 2,
separation: 2,
innerColor: cssVar(buttonVars.focus.boxShadowInner, cssVar(base.frenchVanilla100, '#fff')),
outerColor: cssVar(
buttonVars.focus.boxShadowOuter,
cssVar(brand.primary.base, 'rgba(0,92,184,1)')
),
innerColor: cssVar(buttonVars.focus.boxShadowInner, base.frenchVanilla100),
outerColor: cssVar(buttonVars.focus.boxShadowOuter, brand.primary.base),
}),
},
'&:hover, &.hover': {
backgroundColor: cssVar(buttonVars.hover.background, cssVar(base.blackPepper500, '#1e1e1e')),
backgroundColor: cssVar(buttonVars.hover.background, base.blackPepper500),
borderColor: cssVar(buttonVars.hover.border, 'transparent'),
color: cssVar(buttonVars.hover.label, cssVar(base.blackPepper500, '#1e1e1e')),
color: cssVar(buttonVars.hover.label, base.blackPepper500),
'& span .wd-icon-fill': {
fill: cssVar(buttonVars.hover.icon, cssVar(base.blackPepper500, '#1e1e1e')),
fill: cssVar(buttonVars.hover.icon, base.blackPepper500),
},
'.wd-icon-background ~ .wd-icon-accent, .wd-icon-background ~ .wd-icon-accent2': {
fill: cssVar(buttonVars.hover.icon, cssVar(base.blackPepper500, '#1e1e1e')),
fill: cssVar(buttonVars.hover.icon, base.blackPepper500),
},
},
'&:hover:active': {transitionDuration: '40ms'},
'&:active, &.active': {
backgroundColor: cssVar(buttonVars.active.background, 'transparent'),
borderColor: cssVar(buttonVars.active.border, 'transparent'),
color: cssVar(buttonVars.active.label, cssVar(base.blackPepper400, '#333333')),
color: cssVar(buttonVars.active.label, base.blackPepper400),
'& span .wd-icon-fill': {
fill: cssVar(buttonVars.active.icon, cssVar(base.blackPepper400, '#333333')),
fill: cssVar(buttonVars.active.icon, base.blackPepper400),
},
'.wd-icon-background ~ .wd-icon-accent, .wd-icon-background ~ .wd-icon-accent2': {
fill: cssVar(buttonVars.active.icon),
fill: cssVar(buttonVars.active.icon, base.blackPepper400),
},
},
'&:disabled, &.disabled': {
backgroundColor: cssVar(buttonVars.disabled.background, 'transparent'),
borderColor: cssVar(buttonVars.disabled.border, 'transparent'),
color: cssVar(buttonVars.disabled.label, cssVar(base.blackPepper400, '#333333')),
color: cssVar(buttonVars.disabled.label, base.blackPepper400),
'& span .wd-icon-fill': {
fill: cssVar(buttonVars.disabled.icon, cssVar(base.blackPepper400, '#333333')),
fill: cssVar(buttonVars.disabled.icon, base.blackPepper400),
},
'.wd-icon-background ~ .wd-icon-accent, .wd-icon-background ~ .wd-icon-accent2': {
fill: cssVar(buttonVars.disabled.icon, cssVar(base.blackPepper400, '#333333')),
fill: cssVar(buttonVars.disabled.icon, base.blackPepper400),
},
},
});
Expand All @@ -219,77 +216,77 @@ const baseButtonStyles = createStyles({
export const buttonModifiers = createModifiers({
size: {
large: createStyles({
fontSize: cssVar(system.space.x4, '1rem'),
lineHeight: cssVar(system.space.x6, '1.5rem'),
fontSize: system.space.x4,
lineHeight: system.space.x6,
letterSpacing: '0.01rem',
height: '48px',
paddingInline: cssVar(system.space.x8, '2rem'),
paddingInline: system.space.x8,
minWidth: '112px',
}),
medium: createStyles({
fontSize: '0.875rem',
letterSpacing: '0.015rem',
minWidth: '96px',
paddingInline: cssVar(system.space.x6, '1.5rem'),
height: cssVar(system.space.x10, '2.5rem'),
paddingInline: system.space.x6,
height: system.space.x10,
}),
small: createStyles({
fontSize: '0.875rem',
letterSpacing: '0.015rem',
height: cssVar(system.space.x8, '2rem'),
minWidth: cssVar(system.space.x20, '5rem'),
paddingInline: cssVar(system.space.x4, '1rem'),
gap: cssVar(system.space.x1, '0.25rem'),
height: system.space.x8,
minWidth: system.space.x20,
paddingInline: system.space.x4,
gap: system.space.x1,
}),
extraSmall: createStyles({
fontSize: '0.75rem',
lineHeight: cssVar(system.space.x4, '1rem'),
lineHeight: system.space.x4,
letterSpacing: '0.02rem',
height: cssVar(system.space.x6, '1.5rem'),
height: system.space.x6,
minWidth: 'auto',
paddingInline: cssVar(system.space.x3, '0.75rem'),
gap: cssVar(system.space.x1, '0.25rem'),
paddingInline: system.space.x3,
gap: system.space.x1,
}),
},
iconPosition: {
largeOnly: createStyles({
padding: '0',
minWidth: `calc(${cssVar(system.space.x4, '1rem')} * 3)`,
minWidth: `calc(${system.space.x4} * 3)`,
}),
largeStart: createStyles({
paddingInlineStart: cssVar(system.space.x6, '1.5rem'),
paddingInlineEnd: cssVar(system.space.x8, '2rem'),
paddingInlineStart: system.space.x6,
paddingInlineEnd: system.space.x8,
}),
largeEnd: createStyles({
paddingInlineStart: cssVar(system.space.x8, '2rem'),
paddingInlineEnd: cssVar(system.space.x6, '1.5rem'),
paddingInlineStart: system.space.x8,
paddingInlineEnd: system.space.x6,
}),
mediumOnly: createStyles({padding: '0', minWidth: cssVar(system.space.x10, '2.5rem')}),
mediumOnly: createStyles({padding: '0', minWidth: system.space.x10}),
mediumStart: createStyles({
paddingInlineStart: `calc(${cssVar(system.space.x1, '0.25rem')} * 5)`,
paddingInlineEnd: cssVar(system.space.x6, '1.5rem'),
paddingInlineStart: `calc(${system.space.x1} * 5)`,
paddingInlineEnd: system.space.x6,
}),
mediumEnd: createStyles({
paddingInlineStart: cssVar(system.space.x6, '1.5rem'),
paddingInlineEnd: `calc(${cssVar(system.space.x1, '0.25rem')} * 5)`,
paddingInlineStart: system.space.x6,
paddingInlineEnd: `calc(${system.space.x1} * 5)`,
}),
smallOnly: createStyles({padding: '0', minWidth: cssVar(system.space.x8, '2rem')}),
smallOnly: createStyles({padding: '0', minWidth: system.space.x8}),
smallStart: createStyles({
paddingInlineStart: cssVar(system.space.x3, '0.75rem'),
paddingInlineEnd: cssVar(system.space.x4, '1rem'),
paddingInlineStart: system.space.x3,
paddingInlineEnd: system.space.x4,
}),
smallEnd: createStyles({
paddingInlineStart: cssVar(system.space.x4, '1rem'),
paddingInlineEnd: cssVar(system.space.x3, '0.75rem'),
paddingInlineStart: system.space.x4,
paddingInlineEnd: system.space.x3,
}),
extraSmallOnly: createStyles({padding: '0', minWidth: cssVar(system.space.x6, '1.5rem')}),
extraSmallOnly: createStyles({padding: '0', minWidth: system.space.x6}),
extraSmallStart: createStyles({
paddingInlineStart: cssVar(system.space.x2, '0.5rem'),
paddingInlineEnd: cssVar(system.space.x3, '0.75rem'),
paddingInlineStart: system.space.x2,
paddingInlineEnd: system.space.x3,
}),
extraSmallEnd: createStyles({
paddingInlineStart: cssVar(system.space.x3, '0.75rem'),
paddingInlineEnd: cssVar(system.space.x2, '0.5rem'),
paddingInlineStart: system.space.x3,
paddingInlineEnd: system.space.x2,
}),
},
});
Expand Down
38 changes: 19 additions & 19 deletions modules/react/button/lib/DeleteButton.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import * as React from 'react';

import {buttonVars} from './BaseButton';
import {createComponent} from '@workday/canvas-kit-react/common';
import {createStyles, cssVar} from '@workday/canvas-kit-styling';
import {createStyles} from '@workday/canvas-kit-styling';
import {mergeStyles} from '@workday/canvas-kit-react/layout';
import {base, brand, system} from '@workday/canvas-tokens-web';
import {Button, ButtonProps} from './Button';
Expand All @@ -15,35 +15,35 @@ import {Button, ButtonProps} from './Button';
export interface DeleteButtonProps extends ButtonProps {}

const deleteStyles = createStyles({
[buttonVars.default.background]: cssVar(brand.error.base, '#de2e21'),
[buttonVars.default.background]: brand.error.base,
[buttonVars.default.border]: 'transparent',
[buttonVars.default.borderRadius]: cssVar(system.shape.round, '62.5rem'),
[buttonVars.default.label]: cssVar(brand.error.accent, '#ffffff'),
[buttonVars.default.icon]: cssVar(brand.error.accent, '#ffffff'),
[buttonVars.default.borderRadius]: system.shape.round,
[buttonVars.default.label]: brand.error.accent,
[buttonVars.default.icon]: brand.error.accent,
'&:hover, &.hover': {
[buttonVars.hover.background]: cssVar(brand.error.dark, '#a31b12'),
[buttonVars.hover.background]: brand.error.dark,
[buttonVars.hover.border]: 'transparent',
[buttonVars.hover.label]: cssVar(brand.error.accent, '#ffffff'),
[buttonVars.hover.icon]: cssVar(brand.error.accent, '#ffffff'),
[buttonVars.hover.label]: brand.error.accent,
[buttonVars.hover.icon]: brand.error.accent,
},
'&:focus-visible, &.focus': {
[buttonVars.focus.background]: cssVar(brand.error.base, '#de2e21'),
[buttonVars.focus.background]: brand.error.base,
[buttonVars.focus.border]: 'transparent',
[buttonVars.focus.label]: cssVar(brand.error.accent, '#ffffff'),
[buttonVars.focus.icon]: cssVar(brand.error.accent, '#ffffff'),
[buttonVars.focus.boxShadowInner]: cssVar(base.frenchVanilla100, '#ffffff'),
[buttonVars.focus.boxShadowOuter]: cssVar(brand.common.focusOutline, '#0875e1'),
[buttonVars.focus.label]: brand.error.accent,
[buttonVars.focus.icon]: brand.error.accent,
[buttonVars.focus.boxShadowInner]: base.frenchVanilla100,
[buttonVars.focus.boxShadowOuter]: brand.common.focusOutline,
},
'&:active, &.active': {
[buttonVars.active.background]: cssVar(brand.error.darkest, 'rgba(128,22,14,1)'),
[buttonVars.active.background]: brand.error.darkest,
[buttonVars.active.border]: 'transparent',
[buttonVars.active.label]: cssVar(brand.error.accent, '#ffffff'),
[buttonVars.active.icon]: cssVar(brand.error.accent, '#ffffff'),
[buttonVars.active.label]: brand.error.accent,
[buttonVars.active.icon]: brand.error.accent,
},
'&:disabled, &:active:disabled, &:focus:disabled, &:hover:disabled': {
[buttonVars.disabled.background]: cssVar(brand.error.light, '#fcc9c5'),
[buttonVars.disabled.label]: cssVar(brand.error.accent, '#ffffff'),
[buttonVars.disabled.icon]: cssVar(brand.error.accent, '#ffffff'),
[buttonVars.disabled.background]: brand.error.light,
[buttonVars.disabled.label]: brand.error.accent,
[buttonVars.disabled.icon]: brand.error.accent,
opacity: 1,
},
});
Expand Down
Loading
Loading