Skip to content

feat: Add Sana styles to Canvas Switch, Radio & Checkbox#4017

Open
RayRedGoose wants to merge 11 commits into
Workday:prerelease/majorfrom
RayRedGoose:issue3984-checkbox-radio
Open

feat: Add Sana styles to Canvas Switch, Radio & Checkbox#4017
RayRedGoose wants to merge 11 commits into
Workday:prerelease/majorfrom
RayRedGoose:issue3984-checkbox-radio

Conversation

@RayRedGoose

@RayRedGoose RayRedGoose commented Jun 22, 2026

Copy link
Copy Markdown
Contributor

Summary

Fixes: #3984

Added Sana styles to Canvas Switch, Radio & Checkbox

Release Category

Components


Checklist

For the Reviewer

  • PR title is short and descriptive
  • PR summary describes the change (Fixes/Resolves linked correctly)
  • PR Release Notes describes additional information useful to call out in a release message or removed if not applicable
  • Breaking Changes provides useful information to upgrade to this code or removed if not applicable

Where Should the Reviewer Start?

Areas for Feedback? (optional)

  • Code
  • Documentation
  • Testing
  • Codemods

Testing Manually

Screenshots or GIFs (if applicable)

Thank You Gif (optional)

Summary by CodeRabbit

Release Notes

  • Refactor

    • Updated Radio, Switch, and Checkbox to use the latest token sources for consistent sizing, spacing, and color behavior.
  • Style

    • Refined Radio group and controls: border radius/padding cleanup, adjusted hover/ripple sizing, and updated checked-state accent color behavior.
    • Refined Switch: updated thumb translation/geometry and background/checked color tokens.
    • Refined Checkbox: updated icon/check spacing, inverse colors, and improved error vs caution visuals; disabled label styling now follows the component’s disabled state.
  • Documentation

    • Expanded the v16 upgrade guide with Sana theme setup and visual update notes.
  • Tests

    • Updated visual testing stories to render under data-theme="sana-canvas".

@RayRedGoose RayRedGoose requested a review from a team as a code owner June 22, 2026 20:26
Copilot AI review requested due to automatic review settings June 22, 2026 20:26
@coderabbitai

coderabbitai Bot commented Jun 22, 2026

Copy link
Copy Markdown

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Radio, Switch, and Checkbox stencils update token sources, sizes, colors, and selected state styles. Related visual testing stories add data-theme="sana-canvas" wrappers. The v16 upgrade guide adds Sana Canvas theming instructions and component update notes.

Changes

Radio, Switch, and Checkbox styling

Layer / File(s) Summary
Radio stencil updates
modules/preview-react/radio/lib/RadioGroup.tsx, modules/preview-react/radio/lib/RadioLabel.tsx, modules/preview-react/radio/lib/StyledRadioButton.tsx
RadioGroup updates border radius, padding, and error modifier styling; RadioLabel changes minHeight and token imports; StyledRadioButton updates sizes, accent colors, and ripple styling.
Switch stencil updates
modules/preview-react/switch/lib/SwitchBackground.tsx, modules/preview-react/switch/lib/SwitchCircle.tsx, modules/preview-react/switch/lib/SwitchContainer.tsx, modules/preview-react/switch/lib/SwitchIcon.tsx, modules/preview-react/switch/lib/SwitchInput.tsx
SwitchBackground, SwitchCircle, SwitchContainer, SwitchIcon, and SwitchInput update token imports, sizing, offsets, background color, and checked-state color values.
Checkbox stencil updates
modules/react/checkbox/lib/CheckBackground.tsx, modules/react/checkbox/lib/CheckboxCheck.tsx, modules/react/checkbox/lib/CheckboxInput.tsx, modules/react/checkbox/lib/CheckboxRipple.tsx
CheckBackground, CheckboxCheck, CheckboxInput, and CheckboxRipple update token imports, sizing, colors, focus rings, ripple sizing, and error-state shadow composition.
CheckboxContainer label and disabled handling
modules/react/checkbox/lib/CheckboxContainer.tsx
CheckboxContainer replaces LabelText with Subtext, adds label-part styling and a disabled modifier, and renders the label through the stencil part selector.

Story updates

Layer / File(s) Summary
Radio visual testing theme wrappers
modules/preview-react/radio/stories/testing.stories.tsx
Radio visual testing stories render the states inside data-theme="sana-canvas" wrappers.
Switch visual testing theme wrappers
modules/preview-react/switch/stories/visualTesting.stories.tsx
Switch visual testing stories render the states inside data-theme="sana-canvas" wrappers, including the RTL variant.
Checkbox visual testing theme wrappers
modules/react/checkbox/stories/visualTesting.stories.tsx
Checkbox visual testing stories render the states inside data-theme="sana-canvas" wrappers.

Upgrade guide documentation

Layer / File(s) Summary
Upgrade guide theming and component notes
modules/docs/mdx/16.0-UPGRADE-GUIDE.mdx
The v16 upgrade guide adds theming entries and a Sana Canvas Theme section, and replaces the component placeholder with Checkbox, Radio, and Switch update notes.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~28 minutes

Possibly related issues

Possibly related PRs

  • Workday/canvas-kit#3999: Both PRs update modules/docs/mdx/16.0-UPGRADE-GUIDE.mdx, with this PR adding Sana theming and component-update details.
  • Workday/canvas-kit#3960: Both PRs involve Sana Canvas theming setup that the updated visual-testing stories rely on.

Poem

🐇 I hopped through Radio, Switch, and Checkbox bright,
With Sana Canvas wrappers set just right.
Tokens turned, and sizes tuned anew,
The upgrade guide got notes that ring true.
A tidy burrow of styles now gleams,
All stitched together in canvas dreams.

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Linked Issues check ⚠️ Warning The PR covers token/style and theme updates, but #3984 also requires Radio/Checkbox inverse deprecation and codemods, which are not shown. Add the Radio and Checkbox inverse deprecation/codemod changes and document them, then verify the remaining a11y acceptance items.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title matches the main change set: adding Sana styles to Switch, Radio, and Checkbox.
Out of Scope Changes check ✅ Passed The documented docs and story changes align with the Sana styling/theme work, with no clearly unrelated code introduced.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Adds Sana-aligned styling updates for the Switch, Radio, and Checkbox components to reflect updated token usage and visual specs (Issue #3984).

Changes:

  • Updated sizing tokens across Checkbox/Radio/Switch (moving several values from base.legacy.* to system.legacy.size.*) and adjusted spacing/offsets accordingly.
  • Updated accent colors (notably moving checked states toward brand.accent.positive) and refined hover/focus/error ring visuals.
  • Updated Checkbox label rendering/styling (LabelText → Subtext) and introduced part-based styling in the container stencil.

Reviewed changes

Copilot reviewed 13 out of 13 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
modules/react/checkbox/lib/CheckboxRipple.tsx Updates ripple sizing to new system.legacy.size.* tokens.
modules/react/checkbox/lib/CheckboxInput.tsx Adjusts checkbox dimensions, hover ripple size, checked colors, focus/error ring visuals.
modules/react/checkbox/lib/CheckboxContainer.tsx Updates label component/styling and adds stencil parts/modifiers for Sana spacing/disabled styling.
modules/react/checkbox/lib/CheckboxCheck.tsx Tunes checkmark sizing/alignment and inverse variant colors.
modules/react/checkbox/lib/CheckBackground.tsx Updates checkbox background shape/tokens and error styling variables.
modules/preview-react/switch/lib/SwitchInput.tsx Updates input height token to align with new spec sizing.
modules/preview-react/switch/lib/SwitchIcon.tsx Tweaks icon positioning to match updated switch geometry.
modules/preview-react/switch/lib/SwitchContainer.tsx Updates container height token for Sana sizing.
modules/preview-react/switch/lib/SwitchCircle.tsx Updates thumb sizing and checked translation distances.
modules/preview-react/switch/lib/SwitchBackground.tsx Updates background height, padding, and muted accent background token.
modules/preview-react/radio/lib/StyledRadioButton.tsx Updates radio sizing tokens, checked colors, and hover ripple sizing.
modules/preview-react/radio/lib/RadioLabel.tsx Updates label min-height token.
modules/preview-react/radio/lib/RadioGroup.tsx Adjusts group border radius/padding and simplifies error backgrounds.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread modules/react/checkbox/lib/CheckboxContainer.tsx
Comment thread modules/react/checkbox/lib/CheckboxInput.tsx
@cypress

cypress Bot commented Jun 22, 2026

Copy link
Copy Markdown

Workday/canvas-kit    Run #11093

Run Properties:  status check passed Passed #11093  •  git commit 6f08fc326f ℹ️: Merge f59969c9883502ac3917dee1424a82ab0943be95 into d6ad8e074e3198ed8ea07558a667...
Project Workday/canvas-kit
Branch Review issue3984-checkbox-radio
Run status status check passed Passed #11093
Run duration 02m 19s
Commit git commit 6f08fc326f ℹ️: Merge f59969c9883502ac3917dee1424a82ab0943be95 into d6ad8e074e3198ed8ea07558a667...
Committer Raisa Primerova
View all properties for this run ↗︎

Test results
Tests that failed  Failures 0
Tests that were flaky  Flaky 0
Tests that did not run due to a developer annotating a test with .skip  Pending 17
Tests that did not run due to a failure in a mocha hook  Skipped 0
Tests that passed  Passing 809
View all changes introduced in this branch ↗︎
UI Coverage  19.59%
  Untested elements 1533  
  Tested elements 371  
Accessibility  99.37%
  Failed rules  5 critical   5 serious   0 moderate   2 minor
  Failed elements 68  

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@modules/react/checkbox/lib/CheckboxContainer.tsx`:
- Around line 37-48: The disabled modifier in the modifiers object only
overrides the cursor for the container, but the labelPart still has cursor set
to 'pointer' from its base styles, causing the pointer cursor to remain visible
when the checkbox is disabled. Add a disabled true override within the modifiers
section for the labelPart that sets its cursor to 'default' to match the
disabled state behavior of the container.

In `@modules/react/checkbox/lib/CheckboxInput.tsx`:
- Around line 178-179: The error-ring box-shadow at lines 178-179 uses the same
px2rem(1) spread radius for both the errorRingColorOuter and errorRingColorInner
layers, causing the inner ring to paint over and hide the outer ring. Update the
spread radius values for each layer to use distinct values that preserve the
two-layer visual treatment. The first layer (errorRingColorOuter) and second
layer (errorRingColorInner) should each have different px2rem values to ensure
both rings are visible in the unchecked error state.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: d2e70c34-8bcc-40ec-b167-64a486cb0022

📥 Commits

Reviewing files that changed from the base of the PR and between b96217a and f7f2c24.

📒 Files selected for processing (13)
  • modules/preview-react/radio/lib/RadioGroup.tsx
  • modules/preview-react/radio/lib/RadioLabel.tsx
  • modules/preview-react/radio/lib/StyledRadioButton.tsx
  • modules/preview-react/switch/lib/SwitchBackground.tsx
  • modules/preview-react/switch/lib/SwitchCircle.tsx
  • modules/preview-react/switch/lib/SwitchContainer.tsx
  • modules/preview-react/switch/lib/SwitchIcon.tsx
  • modules/preview-react/switch/lib/SwitchInput.tsx
  • modules/react/checkbox/lib/CheckBackground.tsx
  • modules/react/checkbox/lib/CheckboxCheck.tsx
  • modules/react/checkbox/lib/CheckboxContainer.tsx
  • modules/react/checkbox/lib/CheckboxInput.tsx
  • modules/react/checkbox/lib/CheckboxRipple.tsx

Comment thread modules/react/checkbox/lib/CheckboxContainer.tsx Outdated
Comment thread modules/react/checkbox/lib/CheckboxInput.tsx

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 3

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@modules/docs/mdx/16.0-UPGRADE-GUIDE.mdx`:
- Line 145: Replace the word "team" with "theme" in the phrases that mention
"`sana-canvas` team" in the UPGRADE-GUIDE.mdx file. This typo appears in three
locations where it should read "`sana-canvas` theme" instead. Search for all
instances of "`sana-canvas` team" and change them to "`sana-canvas` theme" to
correct the terminology.
- Around line 97-119: Replace all instances of the attribute name
`data-attribute="sana-canvas"` with `data-theme="sana-canvas"` throughout this
upgrade guide section. The correct attribute name that the runtime wiring uses
is `data-theme`, not `data-attribute`. Update this in all code examples showing
both global application (in the body tag) and local scoped application (in the
div tag) to ensure users enable the Sana Canvas theme correctly.
- Around line 140-141: The migration guide contains incorrect token namespace
paths that are missing the `.legacy` prefix. Update all references to
`system.color.brand.accent.positive` and `system.color.brand.accent.primary` to
use `system.legacy.color.brand.accent.positive` and
`system.legacy.color.brand.accent.primary` respectively. This change is needed
in three locations: the Checkbox section (around lines 140-141), the Radio
section (around lines 154-155), and the Switch section (around lines 168-171).
Add the `.legacy` prefix between `system.color` and `.brand.accent` in each
occurrence to align the documentation with the actual component implementation.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: d8303dc8-fe87-4074-99f4-88a3b1bf9723

📥 Commits

Reviewing files that changed from the base of the PR and between f7f2c24 and e8d5dcf.

📒 Files selected for processing (1)
  • modules/docs/mdx/16.0-UPGRADE-GUIDE.mdx

Comment thread modules/docs/mdx/16.0-UPGRADE-GUIDE.mdx Outdated
Comment thread modules/docs/mdx/16.0-UPGRADE-GUIDE.mdx
Comment thread modules/docs/mdx/16.0-UPGRADE-GUIDE.mdx Outdated
@RayRedGoose RayRedGoose linked an issue Jun 22, 2026 that may be closed by this pull request
12 tasks
@RayRedGoose RayRedGoose added the ready for review Code is ready for review label Jun 22, 2026
@RayRedGoose RayRedGoose self-assigned this Jun 22, 2026

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🧹 Nitpick comments (1)
modules/docs/mdx/16.0-UPGRADE-GUIDE.mdx (1)

131-174: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Add migration guidance for inverse deprecation in Radio/Checkbox sections.

These component update blocks list visual changes, but they should also call out the inverse variant deprecation and codemod path so adopters don’t miss required migration work in v16.

Suggested doc addition
 ### Checkbox

 **PR:** [`#3984`](https://github.com/Workday/canvas-kit/pull/3984)

 #### Visual Updates
@@
 - The hover ring is smaller to better align with the smaller size. The hover ring background color
   uses neutral instead of slate in `sana-canvas` theme.
+
+#### Deprecations
+
+- `inverse` is deprecated in v16. Use the standard Sana theming approach with
+  `data-theme="sana-canvas"` instead.
+- 🤖 Codemod support: run the v16 codemod (`@workday/canvas-kit-codemod`) to apply supported
+  automatic migrations.
@@
 ### Radio
@@
 #### Visual Updates
@@
 - The hover ring is smaller to better align with the smaller size. The hover ring background color
   uses a neutral color instead of slate in `sana-canvas` theme.
+
+#### Deprecations
+
+- `inverse` is deprecated in v16. Use the standard Sana theming approach with
+  `data-theme="sana-canvas"` instead.
+- 🤖 Codemod support: run the v16 codemod (`@workday/canvas-kit-codemod`) to apply supported
+  automatic migrations.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@modules/docs/mdx/16.0-UPGRADE-GUIDE.mdx` around lines 131 - 174, The Checkbox
and Radio component update sections currently list only visual changes but omit
important migration guidance for the deprecated `inverse` variant. Add a
subsection under both the Checkbox and Radio sections that explicitly documents
the deprecation of the `inverse` variant and provides the codemod path or
migration instructions so adopters are aware of the required changes needed for
v16 upgrade.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Nitpick comments:
In `@modules/docs/mdx/16.0-UPGRADE-GUIDE.mdx`:
- Around line 131-174: The Checkbox and Radio component update sections
currently list only visual changes but omit important migration guidance for the
deprecated `inverse` variant. Add a subsection under both the Checkbox and Radio
sections that explicitly documents the deprecation of the `inverse` variant and
provides the codemod path or migration instructions so adopters are aware of the
required changes needed for v16 upgrade.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: f27f2c83-b298-44b3-aef4-df9adea8e543

📥 Commits

Reviewing files that changed from the base of the PR and between 47c0ab1 and 839f925.

📒 Files selected for processing (2)
  • modules/docs/mdx/16.0-UPGRADE-GUIDE.mdx
  • modules/react/checkbox/lib/CheckboxContainer.tsx
🚧 Files skipped from review as they are similar to previous changes (1)
  • modules/react/checkbox/lib/CheckboxContainer.tsx

@sheelah sheelah left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

LG - left just a few minor comments.

Comment thread modules/react/checkbox/lib/CheckboxContainer.tsx
Comment thread modules/preview-react/radio/lib/StyledRadioButton.tsx
Comment thread modules/docs/mdx/16.0-UPGRADE-GUIDE.mdx Outdated
</div>
```

Please ensure you are using Canvas Tokens v4.4.0 or later. The Sana theme will not be available with

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Nit: I think we should bold this text since this version note is important.

@RayRedGoose RayRedGoose added the needs-a11y Extra attention from accessibility is needed label Jun 24, 2026
cursor: 'pointer',
height: base.legacy.size225,
width: base.legacy.size225,
height: system.legacy.size.xxxs,

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Why are we using old system tokens here?

Medium: StyledRadioButton target is now below 24x24. The actual native input is reduced to system.legacy.size.xxxs for both width and height, while the 24px wrapper is not itself the interactive target. For the standalone StyledRadioButton, this likely regresses WCAG 2.2 target size expectations. Keep the visual radio at 20px if needed, but leave the invisible input target at least 24x24 and center the visual circle.

@@ -78,8 +84,8 @@

[`&:where(:checked, :indeterminate) ~ [data-part="${checkboxBackgroundStencil.parts.background['data-part']}"]`]:

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Medium: checked-state contrast now depends on success.main. Checkbox, radio, and switch checked states now use system.legacy.color.brand.accent.positive, while the icon/thumb foreground remains inverse/white. That is fine for dark success colors, but consumer themes may have light success colors. The visual test theme changing success.main to darkolivegreen helps the test pass, but does not protect consumers. Consider using a paired contrast token for the foreground, documenting a minimum contrast requirement for success.main, or adding themed contrast coverage with a light success color

'&:checked, &.checked': {
'& ~ div:first-of-type': {
backgroundColor: system.legacy.color.brand.accent.primary,
backgroundColor: system.legacy.color.brand.accent.positive,

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Might have the same potential contrast issue here if the branded positive color token is a light color?


#### Visual Updates

- The Switch thumb is now **20px** (was 18px). The icon-thumb container width remains unchanged.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Can we double check this is true? The xxxs token resolves to 16px I think.

export const switchCircleStencil = createStencil({
  base: {
    width: system.legacy.size.xxxs,
    height: system.legacy.size.xxxs,

outline: 'none',
},
// When not checked, the border is within the input
[`&:where(:focus-visible, .focus) ~ [data-part="${checkboxBackgroundStencil.parts.background['data-part']}"]`]:

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Medium: Checked/indeterminate Checkbox focus can lose its high-contrast fallback. The PR changes the checked focus border from 2px to 1px. Since the outer focus treatment is boxShadow, Windows High Contrast may omit it, leaving no visible focus difference from the normal checked state.


'&:focus-visible:checked + .cnvs-radio-check, &:focus-visible:hover:checked + .cnvs-radio-check, &.focus:checked + .cnvs-radio-check, &.focus:hover:checked + .cnvs-radio-check':
{
outline: 'transparent',

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Low/pre-existing but worth fixing while touched: Preview Radio’s focus fallback uses outline: 'transparent' without width/style. That does not create the high-contrast-safe outline pattern you described. The repo’s stronger pattern is 1px/2px solid transparent.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

needs-a11y Extra attention from accessibility is needed ready for review Code is ready for review

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat: Sana Canvas Switch, Radio & Checkbox

4 participants