Skip to content

ECHOES-1446 [NO-JIRA] Apply Option 2 color migration - #745

Draft
marciopmoreira6 wants to merge 4 commits into
mainfrom
marcio/new-design-language
Draft

ECHOES-1446 [NO-JIRA] Apply Option 2 color migration#745
marciopmoreira6 wants to merge 4 commits into
mainfrom
marcio/new-design-language

Conversation

@marciopmoreira6

Copy link
Copy Markdown
Contributor

Part of

Summary

  • import the authoritative Option 2 light and dark palettes into independently owned Brand A and Brand B token sets
  • make routine actions, links, focus, navigation, and selection neutral while reserving Option 2 Blue for approved feature emphasis
  • preserve deprecated public accent aliases as neutral compatibility mappings
  • migrate Button, Input, Select, Link, navigation, selection, and issue-row/table styling through component tokens
  • update the focused color specimen and realistic product playground stories

Architecture

Preserves the intended token direction:

Brand primitives → light/dark semantics → component tokens → Echoes components

No echoes.color.roles layer is introduced, and migrated components do not consume primitive palette tokens directly.

Validation

  • Brand A and Brand B token generation
  • committed generated-token freshness check
  • 197 affected tests across 27 suites, including 25 color architecture and contrast tests
  • TypeScript source and declaration checks
  • ESLint and Prettier
  • library and Storybook production builds
  • WCAG 2.2 AA text contrast and 3:1 focus/control checks
  • eight-digit alpha preservation
  • live light/dark and constrained-width Storybook smoke checks

Review notes

  • The export is authoritative where DESIGN.md differs: dark Blue 9 is #73A7EC, light inverse neutral is #FAFBFC, and dark Gray 12 is #F4F6F8.
  • Existing information semantics still use the legacy Blue palette; this remains a documented follow-up collision.
  • Sentiment, rating, severity, information, and production data-visualization semantics remain protected and are not remapped by this migration.
  • New semantic and component token contracts require the normal designer/developer checkpoint before broader rollout.
  • A committed visual-regression baseline remains follow-up work.

Full implementation report: docs/new-design-language-color-pilot-summary.md

@netlify

netlify Bot commented Aug 6, 2026

Copy link
Copy Markdown

Deploy Preview for echoes-react ready!

Name Link
🔨 Latest commit a6b8dff
🔍 Latest deploy log https://app.netlify.com/projects/echoes-react/deploys/6a749aaa71786a0008728e47
😎 Deploy Preview https://deploy-preview-745--echoes-react.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.
🤖 Make changes Run an agent on this branch

To edit notification comments on pull requests, go to your Netlify project configuration.

@hashicorp-vault-sonar-prod hashicorp-vault-sonar-prod Bot changed the title [NO-JIRA] Apply Option 2 color migration ECHOES-1446 [NO-JIRA] Apply Option 2 color migration Aug 6, 2026
@hashicorp-vault-sonar-prod

hashicorp-vault-sonar-prod Bot commented Aug 6, 2026

Copy link
Copy Markdown

ECHOES-1446

@sonarqube-next

sonarqube-next Bot commented Aug 6, 2026

Copy link
Copy Markdown

Quality Gate failed Quality Gate failed

Failed conditions
2 New issues

See analysis details on SonarQube

Catch issues before they fail your Quality Gate with our IDE extension SonarQube for IDE SonarQube for IDE

'--table-header-background-color': cssVar('table-colors-background-header-default'),
border: `${cssVar('border-width-default')} solid ${cssVar('color-border-bold')}`,
'border-collapse': 'separate',
border: `${cssVar('border-width-default')} solid ${cssVar('issue-row-colors-border')}`,

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Quality: Generic Table styling bound to issue-row-specific tokens

In TableStyles.tsx, generic table primitives (StyledTable border, cellBaseStyle border-top, and StyledTableCell backgrounds) were migrated to issue-row-colors-* tokens (border, background-default/hover/selected/selected-hover). The Table component is generic, so coupling it to an issue-row semantic concept is a token-semantics mismatch: any non-issue table now inherits issue-row coloring and cannot diverge. Consider a generic component token (e.g. a table-colors-* / layer-3 table token) that maps to the same value, so the semantic name matches the component. Flagging as a designer+developer checkpoint rather than a blocker.

Was this helpful? React with 👍 / 👎

background-color: ${cssVar('color-icon-on-color')};
border: 0.25rem solid ${cssVar('color-border-accent-default')};
background-color: ${cssVar('select-colors-indicator-foreground-selected')};
border: 0.25rem solid ${cssVar('select-colors-indicator-border-selected')};

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Quality: Hardcoded 0.25rem border width not routed through cssVar

The radio indicator inner border uses a raw 0.25rem value on a line modified in this diff, while the color was migrated to a token. Per the design-token guidance all dimension values should come from a token via cssVar. This pre-existed but is now on a touched line; route the width through the appropriate dimension token (with designer alignment on the exact token).

Was this helpful? React with 👍 / 👎


<Table
ariaLabel="Issues on new code"
gridTemplate="max-content minmax(280px, 1fr) minmax(180px, 0.6fr) max-content max-content"

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Quality: Hardcoded pixel values in Issues story gridTemplate

The Issues playground story passes raw pixel values (minmax(280px, 1fr), minmax(180px, 0.6fr)) in the gridTemplate prop instead of design tokens. Story files are lower-stakes, but per the styling guidance layout dimensions should come from cssVar dimension tokens. Consider composing the template from dimension tokens for consistency with the rest of the pilot stories.

Was this helpful? React with 👍 / 👎

Comment on lines +36 to +50
"action": {
"neutral": {
"default": {
"$type": "color",
"$value": "{echoes.color.palette.ui.gray.12}",
"$description": "Highest-contrast neutral fill for primary and routine actions."
},
"hover": {
"$type": "color",
"$value": "{echoes.color.palette.ui.gray.11}",
"$description": "Hover fill for primary and routine neutral actions."
},
"focus": {
"$type": "color",
"$value": "{echoes.color.palette.ui.gray.12}",

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Quality: Many new semantic/component tokens need designer+dev checkpoint

This PR introduces a large set of new semantic and component tokens (e.g. background.action.neutral.*, button-colors-*, select-colors-*, input-colors-*, navigation-item-colors-*, issue-row-colors-*, link-colors-*) and repurposes deprecated accent aliases as neutral mappings. All referenced tokens were verified present in both generated light and dark CSS, so this is not a breakage — but per the token-review policy these new contracts require the normal designer + developer checkpoint before rollout. Confirm token names, semantics, and WCAG contrast are signed off.

Was this helpful? React with 👍 / 👎

@gitar-bot

gitar-bot Bot commented Aug 6, 2026

Copy link
Copy Markdown
Code Review 👍 Approved with suggestions 0 resolved / 4 findings

Applies the Option 2 color migration by reorganizing palettes into brand token sets and updating component styling. Consider addressing minor findings such as the generic Table styling bound to issue-row-specific tokens, hardcoded border width and pixel values, and scheduling the required designer/developer token checkpoint.

💡 Quality: Generic Table styling bound to issue-row-specific tokens

📄 src/components/table/TableStyles.tsx:30 📄 src/components/table/TableStyles.tsx:90 📄 src/components/table/TableStyles.tsx:114 📄 src/components/table/TableStyles.tsx:117 📄 src/components/table/TableStyles.tsx:121 📄 src/components/table/TableStyles.tsx:125

In TableStyles.tsx, generic table primitives (StyledTable border, cellBaseStyle border-top, and StyledTableCell backgrounds) were migrated to issue-row-colors-* tokens (border, background-default/hover/selected/selected-hover). The Table component is generic, so coupling it to an issue-row semantic concept is a token-semantics mismatch: any non-issue table now inherits issue-row coloring and cannot diverge. Consider a generic component token (e.g. a table-colors-* / layer-3 table token) that maps to the same value, so the semantic name matches the component. Flagging as a designer+developer checkpoint rather than a blocker.

💡 Quality: Hardcoded 0.25rem border width not routed through cssVar

📄 src/components/select/SelectItemCommons.tsx:185

The radio indicator inner border uses a raw 0.25rem value on a line modified in this diff, while the color was migrated to a token. Per the design-token guidance all dimension values should come from a token via cssVar. This pre-existed but is now on a touched line; route the width through the appropriate dimension token (with designer alignment on the exact token).

💡 Quality: Hardcoded pixel values in Issues story gridTemplate

📄 stories/playground/Issues-stories.tsx:101

The Issues playground story passes raw pixel values (minmax(280px, 1fr), minmax(180px, 0.6fr)) in the gridTemplate prop instead of design tokens. Story files are lower-stakes, but per the styling guidance layout dimensions should come from cssVar dimension tokens. Consider composing the template from dimension tokens for consistency with the rest of the pilot stories.

💡 Quality: Many new semantic/component tokens need designer+dev checkpoint

📄 design-tokens/tokens/modes/light.json:36-50 📄 design-tokens/tokens/modes/dark.json:40-54 📄 src/components/buttons/ButtonStyles.tsx:113-127

This PR introduces a large set of new semantic and component tokens (e.g. background.action.neutral.*, button-colors-*, select-colors-*, input-colors-*, navigation-item-colors-*, issue-row-colors-*, link-colors-*) and repurposes deprecated accent aliases as neutral mappings. All referenced tokens were verified present in both generated light and dark CSS, so this is not a breakage — but per the token-review policy these new contracts require the normal designer + developer checkpoint before rollout. Confirm token names, semantics, and WCAG contrast are signed off.

🤖 Prompt for agents
Code Review: Applies the Option 2 color migration by reorganizing palettes into brand token sets and updating component styling. Consider addressing minor findings such as the generic Table styling bound to issue-row-specific tokens, hardcoded border width and pixel values, and scheduling the required designer/developer token checkpoint.

1. 💡 Quality: Generic Table styling bound to issue-row-specific tokens
   Files: src/components/table/TableStyles.tsx:30, src/components/table/TableStyles.tsx:90, src/components/table/TableStyles.tsx:114, src/components/table/TableStyles.tsx:117, src/components/table/TableStyles.tsx:121, src/components/table/TableStyles.tsx:125

   In TableStyles.tsx, generic table primitives (StyledTable border, cellBaseStyle border-top, and StyledTableCell backgrounds) were migrated to `issue-row-colors-*` tokens (border, background-default/hover/selected/selected-hover). The Table component is generic, so coupling it to an issue-row semantic concept is a token-semantics mismatch: any non-issue table now inherits issue-row coloring and cannot diverge. Consider a generic component token (e.g. a `table-colors-*` / layer-3 table token) that maps to the same value, so the semantic name matches the component. Flagging as a designer+developer checkpoint rather than a blocker.

2. 💡 Quality: Hardcoded 0.25rem border width not routed through cssVar
   Files: src/components/select/SelectItemCommons.tsx:185

   The radio indicator inner border uses a raw `0.25rem` value on a line modified in this diff, while the color was migrated to a token. Per the design-token guidance all dimension values should come from a token via cssVar. This pre-existed but is now on a touched line; route the width through the appropriate dimension token (with designer alignment on the exact token).

3. 💡 Quality: Hardcoded pixel values in Issues story gridTemplate
   Files: stories/playground/Issues-stories.tsx:101

   The Issues playground story passes raw pixel values (`minmax(280px, 1fr)`, `minmax(180px, 0.6fr)`) in the `gridTemplate` prop instead of design tokens. Story files are lower-stakes, but per the styling guidance layout dimensions should come from `cssVar` dimension tokens. Consider composing the template from dimension tokens for consistency with the rest of the pilot stories.

4. 💡 Quality: Many new semantic/component tokens need designer+dev checkpoint
   Files: design-tokens/tokens/modes/light.json:36-50, design-tokens/tokens/modes/dark.json:40-54, src/components/buttons/ButtonStyles.tsx:113-127

   This PR introduces a large set of new semantic and component tokens (e.g. `background.action.neutral.*`, `button-colors-*`, `select-colors-*`, `input-colors-*`, `navigation-item-colors-*`, `issue-row-colors-*`, `link-colors-*`) and repurposes deprecated accent aliases as neutral mappings. All referenced tokens were verified present in both generated light and dark CSS, so this is not a breakage — but per the token-review policy these new contracts require the normal designer + developer checkpoint before rollout. Confirm token names, semantics, and WCAG contrast are signed off.

Options

Auto-apply is off → Gitar will not commit updates to this branch.
Display: compact → Showing less information.

Comment with these commands to change the behavior for this request:

Auto-apply Compact
gitar auto-apply:on         
gitar display:verbose         

Was this helpful? React with 👍 / 👎 | Gitar

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant