From 8ad3aff8958dbf54b8a6923783bf4aeb5c211cc1 Mon Sep 17 00:00:00 2001 From: James Fan Date: Mon, 15 Jun 2026 13:16:53 -0500 Subject: [PATCH 01/21] feat: Update TextInput border radius --- modules/react/text-input/lib/TextInput.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/react/text-input/lib/TextInput.tsx b/modules/react/text-input/lib/TextInput.tsx index 5cb1be52ef..1ecfb96a6e 100644 --- a/modules/react/text-input/lib/TextInput.tsx +++ b/modules/react/text-input/lib/TextInput.tsx @@ -27,7 +27,7 @@ export const textInputStencil = createStencil({ display: 'block', border: `${px2rem(1)} solid ${system.color.border.input.default}`, backgroundColor: system.legacy.color.surface.default, - borderRadius: system.legacy.shape.md, + borderRadius: system.shape.lg, height: system.legacy.size.md, transition: '0.2s box-shadow, 0.2s border-color', padding: system.legacy.padding.xs, // Compensate for border From b3f1b31b790d7a4ee33146c49198e4d6e5dc4f69 Mon Sep 17 00:00:00 2001 From: James Fan Date: Mon, 15 Jun 2026 13:26:44 -0500 Subject: [PATCH 02/21] feat: Remove background color from Caution and Error states for TextInput/Area --- modules/react/text-input/lib/TextInput.tsx | 2 -- 1 file changed, 2 deletions(-) diff --git a/modules/react/text-input/lib/TextInput.tsx b/modules/react/text-input/lib/TextInput.tsx index 1ecfb96a6e..82345c444c 100644 --- a/modules/react/text-input/lib/TextInput.tsx +++ b/modules/react/text-input/lib/TextInput.tsx @@ -74,7 +74,6 @@ export const textInputStencil = createStencil({ borderColor: system.legacy.color.brand.border.critical, // borderWidth: px2rem(2), boxShadow: `inset 0 0 0 ${px2rem(2)} ${system.legacy.color.brand.border.critical}`, - backgroundColor: system.legacy.color.brand.surface.critical.default, '&:is(:hover, .hover, :disabled, .disabled, :focus-visible:not([disabled]), .focus:not([disabled]))': { borderColor: system.legacy.color.brand.border.critical, @@ -89,7 +88,6 @@ export const textInputStencil = createStencil({ caution: { borderColor: system.legacy.color.brand.border.caution, boxShadow: `inset 0 0 0 ${px2rem(2)} ${system.legacy.color.brand.focus.caution.inner}`, - backgroundColor: system.legacy.color.brand.surface.caution.default, '&:is(:hover, .hover, :disabled, .disabled, :focus-visible:not([disabled]), .focus:not([disabled]))': { borderColor: system.legacy.color.brand.border.caution, From bf299e6d3671553d0e2a7672aa2acf638fddded6 Mon Sep 17 00:00:00 2001 From: James Fan Date: Tue, 16 Jun 2026 13:04:09 -0500 Subject: [PATCH 03/21] fix: Preserve use of legacy tokens for TextInput --- modules/react/text-input/lib/TextInput.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/react/text-input/lib/TextInput.tsx b/modules/react/text-input/lib/TextInput.tsx index 82345c444c..bb9a0421e2 100644 --- a/modules/react/text-input/lib/TextInput.tsx +++ b/modules/react/text-input/lib/TextInput.tsx @@ -27,7 +27,7 @@ export const textInputStencil = createStencil({ display: 'block', border: `${px2rem(1)} solid ${system.color.border.input.default}`, backgroundColor: system.legacy.color.surface.default, - borderRadius: system.shape.lg, + borderRadius: system.legacy.shape.lg, height: system.legacy.size.md, transition: '0.2s box-shadow, 0.2s border-color', padding: system.legacy.padding.xs, // Compensate for border From cfea945805575ade891a55e3af5c0084a4e3f8c6 Mon Sep 17 00:00:00 2001 From: James Fan Date: Mon, 22 Jun 2026 16:49:55 -0500 Subject: [PATCH 04/21] feat: Update styles for FormFieldGroupList --- modules/react/form-field/lib/FormFieldGroupList.tsx | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/modules/react/form-field/lib/FormFieldGroupList.tsx b/modules/react/form-field/lib/FormFieldGroupList.tsx index a8e8a64fc7..802539eb6d 100644 --- a/modules/react/form-field/lib/FormFieldGroupList.tsx +++ b/modules/react/form-field/lib/FormFieldGroupList.tsx @@ -11,9 +11,9 @@ const formFieldGroupListStencil = createStencil({ base: { display: 'flex', flexDirection: 'column', - borderRadius: system.legacy.shape.md, + borderRadius: system.legacy.shape.lg, gap: system.legacy.gap.sm, - padding: `${px2rem(10)} ${base.legacy.size150} ${system.legacy.padding.xs}`, + padding: `${system.legacy.padding.xs} ${system.legacy.padding.xxs}`, margin: `0 ${calc.negate(base.legacy.size150)}`, transition: '100ms box-shadow', width: 'fit-content', @@ -21,11 +21,9 @@ const formFieldGroupListStencil = createStencil({ modifiers: { error: { error: { - backgroundColor: system.legacy.color.brand.surface.critical.default, boxShadow: `inset 0 0 0 ${px2rem(2)} ${system.legacy.color.brand.border.critical}`, }, caution: { - backgroundColor: system.legacy.color.brand.surface.caution.default, boxShadow: `inset 0 0 0 ${px2rem(1)} ${system.legacy.color.brand.border.caution}, inset 0 0 0 ${px2rem(3)} ${system.legacy.color.brand.focus.caution.inner}`, }, }, From f07ad88c203d132ff9729e868c1a36667a7b7df3 Mon Sep 17 00:00:00 2001 From: James Fan Date: Wed, 24 Jun 2026 14:07:32 -0500 Subject: [PATCH 05/21] docs: Add visual changes to v16 Upgrade Guide --- modules/docs/mdx/16.0-UPGRADE-GUIDE.mdx | 44 +++++++++++++++++++++++-- 1 file changed, 42 insertions(+), 2 deletions(-) diff --git a/modules/docs/mdx/16.0-UPGRADE-GUIDE.mdx b/modules/docs/mdx/16.0-UPGRADE-GUIDE.mdx index 2ae1d3c43e..16534bed12 100644 --- a/modules/docs/mdx/16.0-UPGRADE-GUIDE.mdx +++ b/modules/docs/mdx/16.0-UPGRADE-GUIDE.mdx @@ -86,11 +86,51 @@ yarn remove @workday/canvas-kit-codemod ## New Components -[Content will be added] +> **Note:** All visual updates apply to both the Default Canvas theme and new Sana Canvas theme +> unless specified otherwise. ## Component Updates -[Content will be added] +### Color Picker + +**PR:** [#3992](https://github.com/Workday/canvas-kit/pull/3992) + +#### Visual Updates + +- **Sana Canvas:** swatch shape is now **6px** (previously **4px**). + +### Form Field + +**PR:** [#3992](https://github.com/Workday/canvas-kit/pull/3992) + +#### Visual Updates + +- Shape for grouped inputs (Radio groups and Checkbox groups) is now **12px** (previously 8px). As + in v15, this shape is primarily visible for error and caution states. +- Block-level padding and inline-level padding for grouped inputs is now **8px** and **4px**, + respectively. Again, this padding is primarily visible for error and caution states. +- Error and caution states no longer display a status background color; only the standard background + is shown. + +### Text Area + +**PR:** [#3992](https://github.com/Workday/canvas-kit/pull/3992) + +#### Visual Updates + +- Shape is now **12px** (previously 8px). +- Error and caution states no longer display a status background color; only the standard background + is shown. + +### Text Input + +**PR:** [#3992](https://github.com/Workday/canvas-kit/pull/3992) + +#### Visual Updates + +- Shape is now **12px** (previously 8px). +- Error and caution states no longer display a status background color; only the standard background + is shown. ## Deprecations From bcdef56bee5ffc3b6ab12e847a1c465833583a6c Mon Sep 17 00:00:00 2001 From: James Fan Date: Wed, 24 Jun 2026 15:12:55 -0500 Subject: [PATCH 06/21] feat: Add cornerShapeStencil to TextInput, FormFieldGroupList, and ColorSwatch --- .../react/color-picker/lib/parts/ColorSwatch.tsx | 7 ++++--- .../react/form-field/lib/FormFieldGroupList.tsx | 5 +++-- modules/react/text-input/lib/TextInput.tsx | 16 +++++++++++++--- 3 files changed, 20 insertions(+), 8 deletions(-) diff --git a/modules/react/color-picker/lib/parts/ColorSwatch.tsx b/modules/react/color-picker/lib/parts/ColorSwatch.tsx index c924b998d2..a885facd17 100644 --- a/modules/react/color-picker/lib/parts/ColorSwatch.tsx +++ b/modules/react/color-picker/lib/parts/ColorSwatch.tsx @@ -1,6 +1,6 @@ import * as React from 'react'; -import {pickForegroundColor} from '@workday/canvas-kit-react/common'; +import {cornerShapeStencil, pickForegroundColor} from '@workday/canvas-kit-react/common'; import {SystemIcon, systemIconStencil} from '@workday/canvas-kit-react/icon'; import {calc, createStencil, handleCsProp, px2rem} from '@workday/canvas-kit-styling'; import {checkSmallIcon} from '@workday/canvas-system-icons-web'; @@ -12,15 +12,16 @@ export interface ColorSwatchProps extends React.HTMLAttributes { } export const colorPickerColorSwatchStencil = createStencil({ + extends: cornerShapeStencil, vars: { color: '', iconColor: '', }, base: ({color, iconColor}) => ({ [systemIconStencil.vars.color]: iconColor, + [cornerShapeStencil.vars.shape]: system.legacy.shape.sm, width: system.legacy.size.xxs, height: system.legacy.size.xxs, - borderRadius: system.legacy.shape.sm, backgroundColor: color, display: 'flex', alignItems: 'center', @@ -50,7 +51,7 @@ export const ColorSwatch = ({color, showCheck = false, ...elemProps}: ColorSwatc colorPickerColorSwatchStencil({ color, iconColor: pickForegroundColor(color), - withShadow: showCheck || lowerCasedColor === '#ffffff', + withShadow: showCheck || lowerCasedColor === '#ffffff' ? 'true' : undefined, }) )} > diff --git a/modules/react/form-field/lib/FormFieldGroupList.tsx b/modules/react/form-field/lib/FormFieldGroupList.tsx index 802539eb6d..ecbc4da6ae 100644 --- a/modules/react/form-field/lib/FormFieldGroupList.tsx +++ b/modules/react/form-field/lib/FormFieldGroupList.tsx @@ -1,4 +1,4 @@ -import {createSubcomponent} from '@workday/canvas-kit-react/common'; +import {cornerShapeStencil, createSubcomponent} from '@workday/canvas-kit-react/common'; import {FlexProps} from '@workday/canvas-kit-react/layout'; import {CSProps, calc, createStencil, handleCsProp, px2rem} from '@workday/canvas-kit-styling'; import {base, system} from '@workday/canvas-tokens-web'; @@ -8,10 +8,11 @@ import {useFormFieldModel} from './hooks'; export interface FormFieldGroupListProps extends CSProps, FlexProps {} const formFieldGroupListStencil = createStencil({ + extends: cornerShapeStencil, base: { + [cornerShapeStencil.vars.shape]: system.legacy.shape.lg, display: 'flex', flexDirection: 'column', - borderRadius: system.legacy.shape.lg, gap: system.legacy.gap.sm, padding: `${system.legacy.padding.xs} ${system.legacy.padding.xxs}`, margin: `0 ${calc.negate(base.legacy.size150)}`, diff --git a/modules/react/text-input/lib/TextInput.tsx b/modules/react/text-input/lib/TextInput.tsx index bb9a0421e2..db6e2c7eff 100644 --- a/modules/react/text-input/lib/TextInput.tsx +++ b/modules/react/text-input/lib/TextInput.tsx @@ -1,4 +1,9 @@ -import {ErrorType, GrowthBehavior, createComponent} from '@workday/canvas-kit-react/common'; +import { + ErrorType, + GrowthBehavior, + cornerShapeStencil, + createComponent, +} from '@workday/canvas-kit-react/common'; import {mergeStyles} from '@workday/canvas-kit-react/layout'; import {CSProps, createStencil, cssVar, px2rem} from '@workday/canvas-kit-styling'; import {system} from '@workday/canvas-tokens-web'; @@ -15,10 +20,12 @@ export interface TextInputProps extends GrowthBehavior, CSProps { } export const textInputStencil = createStencil({ + extends: cornerShapeStencil, vars: { width: '', }, base: ({width}) => ({ + [cornerShapeStencil.vars.shape]: system.legacy.shape.lg, fontFamily: system.fontFamily.default, fontSize: system.legacy.fontSize.subtext.lg, fontWeight: system.fontWeight.normal, @@ -27,7 +34,6 @@ export const textInputStencil = createStencil({ display: 'block', border: `${px2rem(1)} solid ${system.color.border.input.default}`, backgroundColor: system.legacy.color.surface.default, - borderRadius: system.legacy.shape.lg, height: system.legacy.size.md, transition: '0.2s box-shadow, 0.2s border-color', padding: system.legacy.padding.xs, // Compensate for border @@ -115,7 +121,11 @@ export const TextInput = createComponent('input')({ ref={ref} {...mergeStyles( elemProps, - textInputStencil({width: typeof width === 'number' ? px2rem(width) : width, grow, error}) + textInputStencil({ + width: typeof width === 'number' ? px2rem(width) : width, + grow: grow === true ? 'true' : grow === false ? 'false' : undefined, + error, + }) )} /> ); From 37afba81035f9cee640ea7bd9cd30f5c39a671fe Mon Sep 17 00:00:00 2001 From: James Fan Date: Wed, 24 Jun 2026 15:39:56 -0500 Subject: [PATCH 07/21] docs: Update Upgrade Guide --- modules/docs/mdx/16.0-UPGRADE-GUIDE.mdx | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/modules/docs/mdx/16.0-UPGRADE-GUIDE.mdx b/modules/docs/mdx/16.0-UPGRADE-GUIDE.mdx index 463b06e10e..c1baaa0c40 100644 --- a/modules/docs/mdx/16.0-UPGRADE-GUIDE.mdx +++ b/modules/docs/mdx/16.0-UPGRADE-GUIDE.mdx @@ -93,6 +93,14 @@ yarn remove @workday/canvas-kit-codemod ## Component Updates +### Color Input + +**PR:** [#3992](https://github.com/Workday/canvas-kit/pull/3992) + +#### Visual Updates + +- Shape is now **12px** (previously 8px). + ### Color Picker **PR:** [#3992](https://github.com/Workday/canvas-kit/pull/3992) @@ -111,6 +119,9 @@ yarn remove @workday/canvas-kit-codemod in v15, this shape is primarily visible for error and caution states. - Block-level padding and inline-level padding for grouped inputs is now **8px** and **4px**, respectively. Again, this padding is primarily visible for error and caution states. +- Block padding for grouped inputs is now **8px** (previously **10px** and **8px**). Inline padding + for grouped inputs is now **4px** (previously **12px**). Again, this padding is primarily visible + for error and caution states. - Error and caution states no longer display a status background color; only the standard background is shown. From f7805ddcd64592e4ceb94ad1058fb6f04e12627e Mon Sep 17 00:00:00 2001 From: James Fan Date: Wed, 24 Jun 2026 16:07:27 -0500 Subject: [PATCH 08/21] chore: Add Sana Theme Color Picker visual tests --- .../visual-testing/ColorPicker.stories.tsx | 63 ++++++++++--------- 1 file changed, 35 insertions(+), 28 deletions(-) diff --git a/modules/preview-react/color-picker/stories/visual-testing/ColorPicker.stories.tsx b/modules/preview-react/color-picker/stories/visual-testing/ColorPicker.stories.tsx index 08138ac104..5e326eea5c 100644 --- a/modules/preview-react/color-picker/stories/visual-testing/ColorPicker.stories.tsx +++ b/modules/preview-react/color-picker/stories/visual-testing/ColorPicker.stories.tsx @@ -24,33 +24,40 @@ export const ColorPickerStates = { }, }, render: () => ( - - - {props => } - - + <> + {[undefined, 'sana-canvas'].map(theme => ( + <> + {theme &&

{theme}

} + + + {props => } + + + + ))} + ), }; From 92518ad1bb0621e15e5eaa09b1879219873bbd54 Mon Sep 17 00:00:00 2001 From: James Fan Date: Wed, 24 Jun 2026 17:32:02 -0500 Subject: [PATCH 09/21] docs: Fix Upgrade Guide --- modules/docs/mdx/16.0-UPGRADE-GUIDE.mdx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/modules/docs/mdx/16.0-UPGRADE-GUIDE.mdx b/modules/docs/mdx/16.0-UPGRADE-GUIDE.mdx index c1baaa0c40..4dfb75917b 100644 --- a/modules/docs/mdx/16.0-UPGRADE-GUIDE.mdx +++ b/modules/docs/mdx/16.0-UPGRADE-GUIDE.mdx @@ -88,11 +88,13 @@ yarn remove @workday/canvas-kit-codemod ## New Components -> **Note:** All visual updates apply to both the Default Canvas theme and new Sana Canvas theme -> unless specified otherwise. +[Content will be added] ## Component Updates +> **Note:** All visual updates apply to both the Default Canvas theme and new Sana Canvas theme +> unless specified otherwise. + ### Color Input **PR:** [#3992](https://github.com/Workday/canvas-kit/pull/3992) @@ -117,8 +119,6 @@ yarn remove @workday/canvas-kit-codemod - Shape for grouped inputs (Radio groups and Checkbox groups) is now **12px** (previously 8px). As in v15, this shape is primarily visible for error and caution states. -- Block-level padding and inline-level padding for grouped inputs is now **8px** and **4px**, - respectively. Again, this padding is primarily visible for error and caution states. - Block padding for grouped inputs is now **8px** (previously **10px** and **8px**). Inline padding for grouped inputs is now **4px** (previously **12px**). Again, this padding is primarily visible for error and caution states. From ae9ae1efd961deec629d475aee3091b777318b59 Mon Sep 17 00:00:00 2001 From: James Fan Date: Wed, 24 Jun 2026 17:35:16 -0500 Subject: [PATCH 10/21] chore: Revert update to Color Picker visual testing stories --- .../visual-testing/ColorPicker.stories.tsx | 63 +++++++++---------- 1 file changed, 28 insertions(+), 35 deletions(-) diff --git a/modules/preview-react/color-picker/stories/visual-testing/ColorPicker.stories.tsx b/modules/preview-react/color-picker/stories/visual-testing/ColorPicker.stories.tsx index 5e326eea5c..08138ac104 100644 --- a/modules/preview-react/color-picker/stories/visual-testing/ColorPicker.stories.tsx +++ b/modules/preview-react/color-picker/stories/visual-testing/ColorPicker.stories.tsx @@ -24,40 +24,33 @@ export const ColorPickerStates = { }, }, render: () => ( - <> - {[undefined, 'sana-canvas'].map(theme => ( - <> - {theme &&

{theme}

} - - - {props => } - - - - ))} - + + + {props => } + + ), }; From 6f6ed4b2e42958de6751068e71fbb8db8978355d Mon Sep 17 00:00:00 2001 From: James Fan Date: Wed, 24 Jun 2026 17:42:33 -0500 Subject: [PATCH 11/21] chore: Default Color Picker stories to Sana Canvas theme --- .../color-picker/stories/examples/InputInteraction.tsx | 2 +- .../color-picker/stories/visual-testing/ColorPicker.stories.tsx | 2 +- modules/react/color-picker/stories/visualTesting.stories.tsx | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/preview-react/color-picker/stories/examples/InputInteraction.tsx b/modules/preview-react/color-picker/stories/examples/InputInteraction.tsx index 65d26b4733..5c85495024 100644 --- a/modules/preview-react/color-picker/stories/examples/InputInteraction.tsx +++ b/modules/preview-react/color-picker/stories/examples/InputInteraction.tsx @@ -10,7 +10,7 @@ export const InputInteraction = () => { textAreaRef.current?.focus(); }; return ( -
+