diff --git a/CHANGELOG.md b/CHANGELOG.md
index 24c3dd1359..2a3449e6c3 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -3,6 +3,40 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [v14.2.9](https://github.com/Workday/canvas-kit/releases/tag/v14.2.9) (2026-01-16)
+
+### Components
+
+- fix: Fix default icon colors for ToolbarIconButton and ToolbarDropdownButton ([#3691](https://github.com/Workday/canvas-kit/pull/3691)) ([@adamtbui](https://github.com/adamtbui), Adam Bui)
+
+
+## [v14.2.8](https://github.com/Workday/canvas-kit/releases/tag/v14.2.8) (2026-01-15)
+
+### Components
+
+- fix: Add variant type to insights ([#3685](https://github.com/Workday/canvas-kit/pull/3685)) ([@mannycarrera4](https://github.com/mannycarrera4), manuel.carrera, Alan Smith)
+
+
+## [v13.2.51](https://github.com/Workday/canvas-kit/releases/tag/v13.2.51) (2026-01-15)
+
+### Components
+
+- fix: Add variant type to insights ([#3685](https://github.com/Workday/canvas-kit/pull/3685)) ([@mannycarrera4](https://github.com/mannycarrera4), manuel.carrera, Alan Smith)
+## [v14.2.7](https://github.com/Workday/canvas-kit/releases/tag/v14.2.7) (2026-01-15)
+
+### Documentation
+
+- chore: Add llm cursor rules mdc ([#3684](https://github.com/Workday/canvas-kit/pull/3684)) ([@youryss](https://github.com/youryss), Youry Stancatte)
+ Added `modules/docs/llm/canvas-kit.mdc` - a Cursor/Claude rules file containing Canvas Kit best practices. Teams can add this to their `.cursor/rules/` directory to have AI assistants follow Canvas Kit conventions automatically.
+
+
+## [v14.2.6](https://github.com/Workday/canvas-kit/releases/tag/v14.2.6) (2026-01-13)
+
+### Components
+
+- fix: Use getBoundingClientRect for popup width measurement ([#3686](https://github.com/Workday/canvas-kit/pull/3686)) ([@Zav39](https://github.com/Zav39))
+
+
## [v14.2.5](https://github.com/Workday/canvas-kit/releases/tag/v14.2.5) (2026-01-08)
diff --git a/lerna.json b/lerna.json
index 42b45de03a..0719e27e51 100644
--- a/lerna.json
+++ b/lerna.json
@@ -2,7 +2,7 @@
"packages": [
"modules/**"
],
- "version": "14.2.5",
+ "version": "14.2.9",
"npmClient": "yarn",
"command": {
"version": {
diff --git a/modules/codemod/package.json b/modules/codemod/package.json
index c3cca9eb0b..e8d15d9fe9 100644
--- a/modules/codemod/package.json
+++ b/modules/codemod/package.json
@@ -2,7 +2,7 @@
"name": "@workday/canvas-kit-codemod",
"author": "Workday, Inc. (https://www.workday.com)",
"license": "Apache-2.0",
- "version": "14.2.5",
+ "version": "14.2.9",
"description": "A collection of codemods for use on Workday Canvas Kit packages.",
"main": "dist/es6/index.js",
"sideEffects": false,
diff --git a/modules/css/package.json b/modules/css/package.json
index 72e51520b7..9748a0ba4a 100644
--- a/modules/css/package.json
+++ b/modules/css/package.json
@@ -1,6 +1,6 @@
{
"name": "@workday/canvas-kit-css",
- "version": "14.2.5",
+ "version": "14.2.9",
"description": "The parent module that contains all Workday Canvas Kit CSS components",
"author": "Workday, Inc. (https://www.workday.com)",
"license": "Apache-2.0",
diff --git a/modules/docs/llm/canvas-kit.mdc b/modules/docs/llm/canvas-kit.mdc
new file mode 100644
index 0000000000..a3ca5beaa7
--- /dev/null
+++ b/modules/docs/llm/canvas-kit.mdc
@@ -0,0 +1,580 @@
+---
+description: Best practices for Workday Canvas Kit - tokens, styling, components, and accessibility
+globs: ['**/*.tsx', '**/*.ts', '**/*.jsx', '**/*.js', '**/*.css']
+alwaysApply: true
+---
+
+# Canvas Kit Best Practices
+
+This file contains best practices for working with Workday Canvas Kit. Use these guidelines when
+building components, styling, and implementing accessibility features.
+
+## Token Usage Guidelines
+
+### Always Use Design Tokens
+
+- **Prefer system tokens** from `@workday/canvas-tokens-web` over raw CSS values
+- Use semantic token names (e.g., `system.color.bg.primary.default`) instead of hardcoded colors
+ (e.g., `#333`)
+- Token hierarchy: base tokens → brand tokens → system tokens
+- System tokens provide better theming support than base tokens
+
+### Token Import Pattern
+
+```tsx
+import {system, brand, base} from '@workday/canvas-tokens-web';
+
+// Import CSS variables once at app root level
+import '@workday/canvas-tokens-web/css/base/_variables.css';
+import '@workday/canvas-tokens-web/css/system/_variables.css';
+import '@workday/canvas-tokens-web/css/brand/_variables.css';
+```
+
+### Token Usage Examples
+
+```tsx
+// ✅ Good - Use system tokens
+const styles = createStyles({
+ color: system.color.text.default,
+ margin: system.space.x4,
+ backgroundColor: system.color.bg.primary.default,
+});
+
+// ❌ Avoid - Hardcoded values
+const styles = createStyles({
+ color: '#333',
+ margin: '16px',
+ backgroundColor: 'blue',
+});
+```
+
+## Styling Best Practices
+
+### Core Styling APIs
+
+Canvas Kit uses a custom CSS-in-JS solution for static CSS generation and token integration:
+
+- **`createStyles`** - Define reusable, static CSS objects
+- **`createStencil`** - Define reusable, dynamic component styles with parts, vars, and modifiers
+- **`cs` prop** - Apply multiple styles and handle merges consistently to Canvas Kit components
+
+### Define Styles Outside Render Functions
+
+**Critical:** Always declare styles at the module level. Creating styles inside render functions
+causes performance issues.
+
+```tsx
+// ✅ Good - Module level
+const buttonStyles = createStyles({
+ backgroundColor: system.color.bg.primary.default,
+ color: system.color.text.inverse,
+});
+
+export const MyButton = () => Click me ;
+
+// ❌ Bad - Inside render function
+export const MyButton = () => {
+ const buttonStyles = createStyles({backgroundColor: 'red'}); // Performance hit!
+ return Click me ;
+};
+```
+
+### When to Use `createStyles`
+
+Use `createStyles` for simple, reusable style objects that do **not** depend on dynamic data or
+props:
+
+- Defining base styles
+- Applying static overrides
+- Styling tokens-based components
+
+```tsx
+import {createStyles} from '@workday/canvas-kit-styling';
+import {system} from '@workday/canvas-tokens-web';
+import {Text} from '@workday/canvas-kit-react/text';
+
+const uppercaseTextStyles = createStyles({
+ textTransform: 'uppercase',
+ margin: system.space.x4,
+});
+
+My uppercased text ;
+```
+
+### When to Use `createStencil`
+
+Use `createStencil` when styles depend on **props**, **variants**, or **component parts**:
+
+- Size or color variants (`primary`, `secondary`)
+- Compound state combinations (`size=small`, `iconPosition=end`)
+- Multi-part components (e.g., `Button`, `Card`, `MenuItem`)
+
+```tsx
+const buttonStencil = createStencil({
+ vars: {color: '', backgroundColor: ''},
+ base: ({color, backgroundColor}) => ({
+ color: cssVar(color, system.color.text.default),
+ backgroundColor: cssVar(backgroundColor, system.color.bg.default),
+ }),
+ modifiers: {
+ variant: {
+ primary: {backgroundColor: system.color.bg.primary.default},
+ secondary: {backgroundColor: system.color.bg.muted.default},
+ },
+ },
+});
+```
+
+### Using the `cs` Prop
+
+The `cs` prop accepts styles created by `createStyles`, `createStencil`, or a class name. Canvas Kit
+components already handle style merging internally via `handleCsProp`:
+
+```tsx
+// ✅ Good - Pass styles to cs prop on Canvas Kit components
+
+
+// ✅ Good - Multiple styles via array
+
+```
+
+**Important:** When building custom components, use `handleCsProp` to properly merge `className`,
+`style`, and `cs` props. Do not manually concatenate class names:
+
+```tsx
+// ✅ Good - Use handleCsProp in custom components
+const MyComponent = elemProps => {
+ return
;
+};
+
+// ❌ Avoid - Manual className concatenation loses style merging
+
;
+```
+
+### CSS Logical Properties for RTL Support
+
+Use CSS logical properties instead of physical properties for RTL compatibility:
+
+```tsx
+// ✅ Good - Logical properties (adapt to RTL automatically)
+const styles = createStyles({
+ marginInlineStart: system.space.x4,
+ paddingInlineEnd: system.space.x2,
+ borderInlineStart: `1px solid ${system.color.border.default}`,
+});
+
+// ❌ Avoid - Physical properties (don't adapt to RTL)
+const styles = createStyles({
+ marginLeft: system.space.x4,
+ paddingRight: system.space.x2,
+ borderLeft: `1px solid ${system.color.border.default}`,
+});
+```
+
+### Utility Functions
+
+- **`px2rem()`** - Convert pixel values to rem units
+- **`cssVar()`** - Wrap tokens in CSS variable syntax with optional fallback
+- **`calc`** - Math operations with CSS calc() and variables
+
+```tsx
+import {px2rem, cssVar, calc} from '@workday/canvas-kit-styling';
+
+const styles = createStyles({
+ margin: px2rem(8), // Converts 8px to rem
+ padding: calc.add(system.space.x1, '0.125rem'),
+ color: cssVar(system.color.text.default, '#000'), // With fallback
+});
+```
+
+### Avoid Emotion Runtime APIs
+
+- Avoid `styled()` from `@emotion/styled` for new code
+- Avoid inline style objects in `cs` prop (use `createStyles` or `createStencil` instead)
+- Don't mix Emotion and static styling approaches
+
+## Component Patterns
+
+### Compound Components
+
+Prefer the compound component pattern for flexible, semantic component APIs:
+
+```tsx
+// ✅ Good - Compound component pattern
+
+
+ First Tab
+ Second Tab
+
+ First Tab Contents
+ Second Tab Contents
+
+
+// ❌ Avoid - Configuration component (less flexible)
+
+```
+
+### Controlled Components
+
+- Prefer controlled components wherever possible
+- Manage minimal state within components
+- Use standard event handlers: `value` and `onChange` for inputs, `checked` and `onChange` for
+ checkboxes
+
+```tsx
+// ✅ Good - Controlled component
+const [value, setValue] = useState('');
+ setValue(e.target.value)} />;
+```
+
+### Prop Spreading Pattern
+
+Use Canvas Kit utility functions to handle ref forwarding and HTML attribute extraction:
+
+**For simple components**, use `createComponent`:
+
+```tsx
+import {createComponent} from '@workday/canvas-kit-react/common';
+
+interface ButtonProps {
+ variant: 'primary' | 'secondary';
+ size: 'small' | 'medium' | 'large';
+ children: React.ReactNode;
+}
+
+export const Button = createComponent('button')({
+ displayName: 'Button',
+ Component: ({variant, size, children, ...elemProps}: ButtonProps, ref, Element) => {
+ return (
+
+ {children}
+
+ );
+ },
+});
+```
+
+`createComponent` automatically handles:
+
+- Ref forwarding
+- HTML attribute extraction based on the element type
+- The `as` prop for changing the rendered element
+- Proper TypeScript typing
+
+**For compound components with models**, use `createContainer` and `createSubComponent`:
+
+```tsx
+import {createContainer, createSubComponent} from '@workday/canvas-kit-react/common';
+
+// Container component
+export const Disclosure = createContainer()({
+ displayName: 'Disclosure',
+ modelHook: useDisclosureModel,
+ subComponents: {
+ Target: DisclosureTarget,
+ Content: DisclosureContent,
+ },
+})(({children}) => {
+ return <>{children}>;
+});
+
+// Sub-component
+export const DisclosureTarget = createSubComponent('button')({
+ modelHook: useDisclosureModel,
+})((elemProps, Element, model) => {
+ return model.events.toggle()} {...elemProps} />;
+});
+```
+
+These utilities handle ref forwarding, HTML attribute extraction, and model context automatically.
+
+### CanvasProvider
+
+Wrap your application in `` for proper styling context and Emotion cache:
+
+```tsx
+import {CanvasProvider} from '@workday/canvas-kit-react/common';
+
+
+
+ ;
+```
+
+### Using `handleCsProp`
+
+When building custom components with stencils, use `handleCsProp` to merge props:
+
+```tsx
+import {handleCsProp} from '@workday/canvas-kit-styling';
+
+const MyComponent = elemProps => {
+ return
;
+};
+```
+
+## Common Patterns
+
+### Style Definition Location
+
+**Always define styles at module level**, never inside render functions or component bodies:
+
+```tsx
+// ✅ Good
+const cardStyles = createStyles({
+ padding: system.space.x4,
+});
+
+export const Card = () => Content
;
+
+// ❌ Bad
+export const Card = () => {
+ const cardStyles = createStyles({padding: system.space.x4});
+ return Content
;
+};
+```
+
+### Modifiers Over Conditionals
+
+Use modifiers for variants/states instead of conditional logic:
+
+```tsx
+// ✅ Good - Use modifiers
+const badgeStencil = createStencil({
+ modifiers: {
+ status: {
+ success: {background: system.color.bg.success.default},
+ error: {background: system.color.bg.negative.default},
+ },
+ },
+});
+
+// ❌ Avoid - Conditional logic in styles
+const badgeStyles = status =>
+ createStyles({
+ background: status === 'success' ? 'green' : 'red', // Breaks static compilation
+ });
+```
+
+### CSS Variables for Dynamic Values
+
+Use CSS variables (via stencil vars) for dynamic values instead of inline styles:
+
+```tsx
+// ✅ Good - CSS variables
+const buttonStencil = createStencil({
+ vars: {backgroundColor: ''},
+ base: ({backgroundColor}) => ({
+ backgroundColor: cssVar(backgroundColor, system.color.bg.default),
+ }),
+});
+
+// ❌ Avoid - Inline styles
+ ;
+```
+
+### Extending Existing Stencils
+
+Extend existing stencils rather than creating from scratch:
+
+```tsx
+// ✅ Good - Extend existing stencil
+const customIconStencil = createStencil({
+ extends: systemIconStencil,
+ base: {
+ margin: system.space.x2,
+ },
+});
+
+// ❌ Avoid - Recreating from scratch
+const customIconStencil = createStencil({
+ base: {
+ // Re-implementing all systemIconStencil styles...
+ },
+});
+```
+
+### Unique IDs
+
+Use `useUniqueId()` hook for generating unique IDs for accessibility:
+
+```tsx
+import {useUniqueId} from '@workday/canvas-kit-react/common';
+
+const MyTable = () => {
+ const tableHeadingId = useUniqueId();
+
+ return (
+ <>
+ Pizza Toppings
+
+ >
+ );
+};
+```
+
+### Naming Conventions
+
+- Prop names should **never** include the component name (e.g., `type`, not `buttonType`)
+- Use the same props for the same concepts across components
+- Avoid names that reference color, position, and size (use semantic names instead)
+- Use T-shirt sizes: `xs, s, m, l, xl` (not `sm`)
+
+### Event Handlers
+
+- Always use standard `on{Descriptor}{Event}` naming (`onClick`, `onChange`, etc.)
+- Event handlers should receive an event unless there's a good reason otherwise
+- Use standard browser events wherever possible
+
+## Accessibility Guidelines
+
+### Core Principle
+
+**"No ARIA is better than Bad ARIA"**
+
+Canvas Kit components are built with semantic HTML and include required ARIA according to WAI-ARIA
+1.2 specification and ARIA Authoring Practices Guide.
+
+### Accessible Names
+
+Provide accessible names using this priority order:
+
+1. `aria-labelledby` (unique id)
+2. `aria-label` (string)
+3. `` and `for` attribute with unique `id` (for inputs)
+4. `placeholder` (for inputs)
+5. `alt` (for images)
+6. Text content (between opening and closing tags)
+7. `title` (string)
+
+**Best practices:**
+
+- Prefer visible text and native techniques (HTML labels)
+- Avoid browser fallback like `title` attribute or placeholder values
+- Keep names brief and useful
+- Always test thoroughly
+
+### Keyboard Navigation
+
+- Ensure full keyboard navigation for all interactive components
+- Check whether tabbing is sufficient or if additional keyboard navigation is required (e.g., arrow
+ keys)
+- Use semantic HTML elements (e.g., `` for actions) to get keyboard handling for free
+
+### Semantic HTML
+
+- Use the correct native element wherever possible (e.g., `` for actions, not ``)
+- This enables browser behavior for free (keyboard handling, focus management, etc.)
+
+### Screen Reader Support
+
+- Use `
` component for screen-reader-only content:
+
+```tsx
+import {AccessibleHide} from '@workday/canvas-kit-react/common';
+
+
+ This text is hidden using CSS and still available to screen readers.
+ ;
+```
+
+- Use `` for dynamic content announcements:
+
+```tsx
+import {AriaLiveRegion} from '@workday/canvas-kit-react/common';
+
+
+ When this text is updated, screen readers will announce it automatically.
+ ;
+```
+
+### Responsiveness and Reflow
+
+**WCAG 2.2 Success Criterion 1.4.10 Reflow:**
+
+- Content should be presented without loss of information or functionality at 320 CSS pixels width
+- Do not specify minimum width greater than `320px` to avoid horizontal scroll
+- Do not use sticky headers or footers at smallest responsive breakpoints
+- Test at 400% browser zoom (equivalent to 320px width)
+
+### Testing Accessibility
+
+- Test with screen readers
+- Test keyboard-only navigation
+- Test at 400% zoom for reflow compliance
+- Verify color contrast ratios meet WCAG standards
+- Use browser accessibility tools (Chrome DevTools Accessibility Tree)
+
+## Theming Guidelines
+
+### Global Theming (Recommended)
+
+Apply theming at the global level using CSS variables:
+
+```css
+/* index.css */
+@import '@workday/canvas-tokens-web/css/base/_variables.css';
+@import '@workday/canvas-tokens-web/css/system/_variables.css';
+@import '@workday/canvas-tokens-web/css/brand/_variables.css';
+
+:root {
+ --cnvs-brand-primary-base: var(--cnvs-base-palette-magenta-600);
+ --cnvs-brand-primary-dark: var(--cnvs-base-palette-magenta-700);
+}
+```
+
+### Scoped Theming
+
+Only use scoped theming when you intentionally need a different theme for a specific section:
+
+- Embedding Canvas Kit components in third-party applications
+- Creating preview panels with different themes
+- Multi-tenant applications with different branding
+
+**Warning:** Scoped theming creates a cascade barrier that will break global theming.
+
+### Token Selection for Theming
+
+Use semantic token names (brand tokens) instead of base tokens:
+
+```css
+/* ✅ Good - Semantic meaning */
+--cnvs-brand-primary-base: var(--cnvs-base-palette-blue-600);
+
+/* ❌ Avoid - Direct base token usage */
+--cnvs-base-palette-blue-600: blue;
+```
+
+### Theming Best Practices
+
+- Theming should be done at the app level or root level, not at component level
+- Test accessibility when overriding colors (ensure contrast ratios)
+- Import CSS variables only once at the root level of your application
+
+## Code Style
+
+### Default Props
+
+Use default props with destructuring:
+
+```tsx
+interface CheckboxProps {
+ /**
+ * If true, sets the Checkbox checked to true
+ * @default false
+ */
+ checked?: boolean;
+}
+
+const {checked = false, disabled = false} = props;
+```
+
+### Exports
+
+- Avoid default exports
+- Export everything else as named exports (`export * from ...`)
+- Consider naming of exports to avoid clashes
diff --git a/modules/docs/package.json b/modules/docs/package.json
index b9306a477b..139d832e33 100644
--- a/modules/docs/package.json
+++ b/modules/docs/package.json
@@ -1,6 +1,6 @@
{
"name": "@workday/canvas-kit-docs",
- "version": "14.2.5",
+ "version": "14.2.9",
"description": "Documentation components of Canvas Kit components",
"author": "Workday, Inc. (https://www.workday.com)",
"license": "Apache-2.0",
@@ -47,10 +47,10 @@
"@mdx-js/react": "^3.1.0",
"@stackblitz/sdk": "^1.11.0",
"@storybook/csf": "0.0.1",
- "@workday/canvas-kit-labs-react": "^14.2.5",
- "@workday/canvas-kit-preview-react": "^14.2.5",
- "@workday/canvas-kit-react": "^14.2.5",
- "@workday/canvas-kit-styling": "^14.2.5",
+ "@workday/canvas-kit-labs-react": "^14.2.9",
+ "@workday/canvas-kit-preview-react": "^14.2.9",
+ "@workday/canvas-kit-react": "^14.2.9",
+ "@workday/canvas-kit-styling": "^14.2.9",
"@workday/canvas-system-icons-web": "^3.0.36",
"@workday/canvas-tokens-web": "4.0.0-alpha.8",
"markdown-to-jsx": "^7.2.0",
diff --git a/modules/labs-css/package.json b/modules/labs-css/package.json
index 8cc59fb3d7..5e76e7e903 100644
--- a/modules/labs-css/package.json
+++ b/modules/labs-css/package.json
@@ -1,6 +1,6 @@
{
"name": "@workday/canvas-kit-labs-css",
- "version": "14.2.5",
+ "version": "14.2.9",
"description": "The parent module that contains all Workday Canvas Kit Labs CSS components",
"author": "Workday, Inc. (https://www.workday.com)",
"license": "Apache-2.0",
diff --git a/modules/labs-react/package.json b/modules/labs-react/package.json
index 609b1729bc..9645e977e6 100644
--- a/modules/labs-react/package.json
+++ b/modules/labs-react/package.json
@@ -1,6 +1,6 @@
{
"name": "@workday/canvas-kit-labs-react",
- "version": "14.2.5",
+ "version": "14.2.9",
"description": "Canvas Kit Labs is an incubator for new and experimental components. Since we have a rather rigorous process for getting components in at a production level, it can be valuable to make them available earlier while we continuously iterate on the API/functionality. The Labs modules allow us to do that as needed.",
"author": "Workday, Inc. (https://www.workday.com)",
"license": "Apache-2.0",
@@ -48,8 +48,8 @@
"dependencies": {
"@emotion/react": "^11.7.1",
"@emotion/styled": "^11.6.0",
- "@workday/canvas-kit-react": "^14.2.5",
- "@workday/canvas-kit-styling": "^14.2.5",
+ "@workday/canvas-kit-react": "^14.2.9",
+ "@workday/canvas-kit-styling": "^14.2.9",
"@workday/canvas-system-icons-web": "^3.0.36",
"@workday/canvas-tokens-web": "4.0.0-alpha.8",
"@workday/design-assets-types": "^0.2.10",
diff --git a/modules/mcp/package.json b/modules/mcp/package.json
index 3fa76eb3a9..f63044403b 100644
--- a/modules/mcp/package.json
+++ b/modules/mcp/package.json
@@ -1,6 +1,6 @@
{
"name": "@workday/canvas-kit-mcp",
- "version": "14.2.5",
+ "version": "14.2.9",
"description": "MCP package for Canvas Kit",
"author": "Workday, Inc. (https://www.workday.com)",
"license": "Apache-2.0",
diff --git a/modules/popup-stack/package.json b/modules/popup-stack/package.json
index b106edf2d2..8e474e52d6 100644
--- a/modules/popup-stack/package.json
+++ b/modules/popup-stack/package.json
@@ -1,6 +1,6 @@
{
"name": "@workday/canvas-kit-popup-stack",
- "version": "14.2.5",
+ "version": "14.2.9",
"description": "Stack for managing popup UIs to coordinate global concerns like escape key handling and rendering order",
"author": "Workday, Inc. (https://www.workday.com)",
"license": "Apache-2.0",
diff --git a/modules/preview-css/package.json b/modules/preview-css/package.json
index 4d31763f8a..72cb585f1d 100644
--- a/modules/preview-css/package.json
+++ b/modules/preview-css/package.json
@@ -1,6 +1,6 @@
{
"name": "@workday/canvas-kit-preview-css",
- "version": "14.2.5",
+ "version": "14.2.9",
"description": "The parent module that contains all Workday Canvas Kit Preview CSS components",
"author": "Workday, Inc. (https://www.workday.com)",
"license": "Apache-2.0",
diff --git a/modules/preview-react/package.json b/modules/preview-react/package.json
index bf68355555..836d1c8b63 100644
--- a/modules/preview-react/package.json
+++ b/modules/preview-react/package.json
@@ -1,6 +1,6 @@
{
"name": "@workday/canvas-kit-preview-react",
- "version": "14.2.5",
+ "version": "14.2.9",
"description": "Canvas Kit Preview is made up of components that have the full design and a11y review, are part of the DS ecosystem and are approved for use in product. The API's could be subject to change, but not without strong communication and migration strategies.",
"author": "Workday, Inc. (https://www.workday.com)",
"license": "Apache-2.0",
@@ -48,8 +48,8 @@
"dependencies": {
"@emotion/react": "^11.7.1",
"@emotion/styled": "^11.6.0",
- "@workday/canvas-kit-react": "^14.2.5",
- "@workday/canvas-kit-styling": "^14.2.5",
+ "@workday/canvas-kit-react": "^14.2.9",
+ "@workday/canvas-kit-styling": "^14.2.9",
"@workday/canvas-system-icons-web": "^3.0.36",
"@workday/canvas-tokens-web": "4.0.0-alpha.8",
"@workday/design-assets-types": "^0.2.10"
diff --git a/modules/react-fonts/package.json b/modules/react-fonts/package.json
index 9581482af2..362fa16d06 100644
--- a/modules/react-fonts/package.json
+++ b/modules/react-fonts/package.json
@@ -1,6 +1,6 @@
{
"name": "@workday/canvas-kit-react-fonts",
- "version": "14.2.5",
+ "version": "14.2.9",
"description": "Fonts for canvas-kit-react",
"author": "Workday, Inc. (https://www.workday.com)",
"license": "Apache-2.0",
diff --git a/modules/react/button/lib/ToolbarDropdownButton.tsx b/modules/react/button/lib/ToolbarDropdownButton.tsx
index ebccf84502..72cf6c6457 100644
--- a/modules/react/button/lib/ToolbarDropdownButton.tsx
+++ b/modules/react/button/lib/ToolbarDropdownButton.tsx
@@ -21,13 +21,13 @@ export const toolbarDropdownButtonStencil = createStencil({
minWidth: forwardFitTokens.system.size.md,
gap: forwardFitTokens.system.gap.none,
[buttonStencil.vars.borderRadius]: forwardFitTokens.system.shape.xs,
- [systemIconStencil.vars.color]: system.color.fg.muted.soft,
+ [systemIconStencil.vars.color]: system.color.fg.default,
'&:focus-visible, &.focus': {
[buttonStencil.vars.background]: system.color.bg.transparent.default,
[systemIconStencil.vars.color]: cssVar(
buttonColorPropVars.focus.icon,
- system.color.fg.muted.soft
+ system.color.fg.default
),
...focusRing({
width: 2,
diff --git a/modules/react/button/lib/ToolbarIconButton.tsx b/modules/react/button/lib/ToolbarIconButton.tsx
index 7f59e21978..c596fb7323 100644
--- a/modules/react/button/lib/ToolbarIconButton.tsx
+++ b/modules/react/button/lib/ToolbarIconButton.tsx
@@ -22,10 +22,10 @@ export const toolbarIconButtonStencil = createStencil({
padding: forwardFitTokens.system.padding.none,
height: forwardFitTokens.system.size.md,
[buttonStencil.vars.borderRadius]: forwardFitTokens.system.shape.xs,
- [systemIconStencil.vars.color]: system.color.fg.muted.soft,
+ [systemIconStencil.vars.color]: system.color.fg.default,
'&:focus-visible, &.focus': {
- [systemIconStencil.vars.color]: system.color.fg.muted.soft,
+ [systemIconStencil.vars.color]: system.color.fg.default,
...focusRing({
width: 2,
separation: 0,
diff --git a/modules/react/combobox/lib/hooks/useComboboxInput.ts b/modules/react/combobox/lib/hooks/useComboboxInput.ts
index af781952bc..d3c9c7ffee 100644
--- a/modules/react/combobox/lib/hooks/useComboboxInput.ts
+++ b/modules/react/combobox/lib/hooks/useComboboxInput.ts
@@ -60,7 +60,7 @@ export const useComboboxInput = composeHooks(
},
onClick(event: React.MouseEvent) {
if (model.state.visibility === 'hidden') {
- model.events.setWidth(event.currentTarget.clientWidth);
+ model.events.setWidth(event.currentTarget.getBoundingClientRect().width);
}
},
value: model.state.value,
diff --git a/modules/react/combobox/lib/hooks/useComboboxInputOpenWithArrowKeys.ts b/modules/react/combobox/lib/hooks/useComboboxInputOpenWithArrowKeys.ts
index fde5836f8e..a6556d87fb 100644
--- a/modules/react/combobox/lib/hooks/useComboboxInputOpenWithArrowKeys.ts
+++ b/modules/react/combobox/lib/hooks/useComboboxInputOpenWithArrowKeys.ts
@@ -14,7 +14,7 @@ export const useComboboxInputOpenWithArrowKeys = createElemPropsHook(useCombobox
(event.key === 'ArrowUp' && model.state.visibility !== 'visible')
) {
model.events.show(event);
- model.events.setWidth(event.currentTarget.clientWidth);
+ model.events.setWidth(event.currentTarget.getBoundingClientRect().width);
}
},
};
diff --git a/modules/react/combobox/lib/hooks/useSetPopupWidth.ts b/modules/react/combobox/lib/hooks/useSetPopupWidth.ts
index dc1d228039..3bfe226148 100644
--- a/modules/react/combobox/lib/hooks/useSetPopupWidth.ts
+++ b/modules/react/combobox/lib/hooks/useSetPopupWidth.ts
@@ -11,7 +11,7 @@ export const useSetPopupWidth = createElemPropsHook(useComboboxModel)(model => {
const visible = model.state.visibility !== 'hidden';
React.useLayoutEffect(() => {
if (visible) {
- model.events.setWidth(model.state.targetRef.current?.clientWidth || 0);
+ model.events.setWidth(model.state.targetRef.current?.getBoundingClientRect().width || 0);
}
}, [visible, model.events, model.state.targetRef]);
return {};
diff --git a/modules/react/combobox/stories/visual-testing/testing.stories.tsx b/modules/react/combobox/stories/visual-testing/testing.stories.tsx
index 8f6c57d1f6..cf3eadaa0e 100644
--- a/modules/react/combobox/stories/visual-testing/testing.stories.tsx
+++ b/modules/react/combobox/stories/visual-testing/testing.stories.tsx
@@ -39,7 +39,7 @@ export const ComboboxStates = {
React.useLayoutEffect(() => {
if (visibility === 'visible') {
- model.events.setWidth(model.state.inputRef.current.clientWidth);
+ model.events.setWidth(model.state.inputRef.current.getBoundingClientRect().width);
}
}, [visibility, model.events, model.state.inputRef]);
return (
diff --git a/modules/react/common/lib/utils/components.ts b/modules/react/common/lib/utils/components.ts
index 05ae39fcea..1b69b0bc6c 100644
--- a/modules/react/common/lib/utils/components.ts
+++ b/modules/react/common/lib/utils/components.ts
@@ -543,7 +543,7 @@ export const createComponent =
({as: asOverride, ...props}, ref) => {
return Component(
{
- ...setCanvasKitTags(displayName),
+ ...setCanvasKitTags(displayName, props),
...props,
} as any,
ref as ExtractRef,
diff --git a/modules/react/common/lib/utils/insights.ts b/modules/react/common/lib/utils/insights.ts
index ad5db981f3..4caf4f8816 100644
--- a/modules/react/common/lib/utils/insights.ts
+++ b/modules/react/common/lib/utils/insights.ts
@@ -9,14 +9,15 @@ const versionTag = process.env.NODE_ENV === 'production' ? version : version.spl
* This function returns data attributes for tagging
* We use this to track when and where our components render. It also allows us to see what version is rendering.
*/
-export function setCanvasKitTags(displayName = '') {
+export function setCanvasKitTags(displayName = '', props: any = {}) {
// Do not add tags for subcomponents. E.g. Card.Text
const shouldAddTag = displayName.length && !displayName.includes('.');
-
if (shouldAddTag) {
+ // Append variant name to tag, if available: `primary-button-inverse`
+ const componentTypeTag = props.variant ? `${displayName} ${props.variant}` : displayName;
return {
['data-uxi-canvas-kit-version']: versionTag,
- ['data-uxi-canvas-kit-component-type']: slugify(displayName),
+ ['data-uxi-canvas-kit-component-type']: slugify(componentTypeTag),
};
}
diff --git a/modules/react/package.json b/modules/react/package.json
index 06e60bc67d..6e33cb4157 100644
--- a/modules/react/package.json
+++ b/modules/react/package.json
@@ -1,6 +1,6 @@
{
"name": "@workday/canvas-kit-react",
- "version": "14.2.5",
+ "version": "14.2.9",
"description": "The parent module that contains all Workday Canvas Kit React components",
"author": "Workday, Inc. (https://www.workday.com)",
"license": "Apache-2.0",
@@ -52,9 +52,9 @@
"@popperjs/core": "^2.5.4",
"@tanstack/react-virtual": "^3.13.9",
"@workday/canvas-colors-web": "^2.0.0",
- "@workday/canvas-kit-popup-stack": "^14.2.5",
- "@workday/canvas-kit-preview-react": "^14.2.5",
- "@workday/canvas-kit-styling": "^14.2.5",
+ "@workday/canvas-kit-popup-stack": "^14.2.9",
+ "@workday/canvas-kit-preview-react": "^14.2.9",
+ "@workday/canvas-kit-styling": "^14.2.9",
"@workday/canvas-system-icons-web": "^3.0.36",
"@workday/canvas-tokens-web": "4.0.0-alpha.8",
"@workday/design-assets-types": "^0.2.10",
diff --git a/modules/styling-transform/package.json b/modules/styling-transform/package.json
index 7c2685a70a..d468f42d34 100644
--- a/modules/styling-transform/package.json
+++ b/modules/styling-transform/package.json
@@ -1,6 +1,6 @@
{
"name": "@workday/canvas-kit-styling-transform",
- "version": "14.2.5",
+ "version": "14.2.9",
"description": "The custom CSS in JS solution that takes JS styles and turns them into static CSS",
"author": "Workday, Inc. (https://www.workday.com)",
"license": "Apache-2.0",
@@ -36,7 +36,7 @@
],
"dependencies": {
"@emotion/serialize": "^1.0.2",
- "@workday/canvas-kit-styling": "^14.2.5",
+ "@workday/canvas-kit-styling": "^14.2.9",
"@workday/canvas-tokens-web": "4.0.0-alpha.8",
"stylis": "4.3.6",
"ts-node": "^10.9.1",
diff --git a/modules/styling/package.json b/modules/styling/package.json
index 9d9e361d0b..ae34d3a806 100644
--- a/modules/styling/package.json
+++ b/modules/styling/package.json
@@ -1,6 +1,6 @@
{
"name": "@workday/canvas-kit-styling",
- "version": "14.2.5",
+ "version": "14.2.9",
"description": "The custom CSS in JS solution that takes JS styles and turns them into static CSS",
"author": "Workday, Inc. (https://www.workday.com)",
"license": "Apache-2.0",
@@ -54,7 +54,7 @@
"@emotion/react": "^11.7.1",
"@emotion/serialize": "^1.0.2",
"@emotion/styled": "^11.6.0",
- "@workday/canvas-kit-react": "^14.2.5",
+ "@workday/canvas-kit-react": "^14.2.9",
"@workday/canvas-system-icons-web": "^3.0.36",
"@workday/canvas-tokens-web": "4.0.0-alpha.8",
"typescript": "5.0"