From 63728204c0abccd401e4c7329e3ada58be3e5929 Mon Sep 17 00:00:00 2001 From: sdejonge Date: Fri, 21 Mar 2025 10:27:11 +1100 Subject: [PATCH 1/2] feat(DesignTokens): add feedback border design tokens Generate design token output --- bin/build_tokens.mjs | 3 + src/tokens/build/css/tokens.css | 6 + src/tokens/build/css/tokens.dark.css | 6 + src/tokens/build/figma/semantic.tokens.json | 57 +++++++ src/tokens/build/js/tokens.dark.js | 6 + src/tokens/build/js/tokens.js | 6 + src/tokens/build/json/tokens.dark.json | 147 ++++++++++++++++++ src/tokens/build/json/tokens.json | 147 ++++++++++++++++++ src/tokens/build/scss/_tokens.dark.scss | 6 + src/tokens/build/scss/_tokens.scss | 6 + .../build/scss/_tokens_custom_properties.scss | 6 + src/tokens/build/tailwind/tokens.cjs | 11 ++ src/tokens/semantic/feedback.tokens.json | 57 +++++++ .../semantic/feedback.tokens.stories.js | 12 +- 14 files changed, 470 insertions(+), 6 deletions(-) diff --git a/bin/build_tokens.mjs b/bin/build_tokens.mjs index b6286efb68..4a22f36273 100755 --- a/bin/build_tokens.mjs +++ b/bin/build_tokens.mjs @@ -183,6 +183,7 @@ StyleDictionary.registerFormat({ feedbackVariants, 'background' ); + const feedbackBorderColors = generateColorObject('feedback', feedbackVariants, 'border'); const feedbackTextColors = generateColorObject('feedback', feedbackVariants, 'text'); const feedbackIconColors = generateColorObject('feedback', feedbackVariants, 'icon'); @@ -202,6 +203,7 @@ StyleDictionary.registerFormat({ const statusTextColors = ${JSON.stringify(statusTextColors)}; const statusIconColors = ${JSON.stringify(statusIconColors)}; const feedbackBackgroundColors = ${JSON.stringify(feedbackBackgroundColors)}; + const feedbackBorderColors = ${JSON.stringify(feedbackBorderColors)}; const feedbackTextColors = ${JSON.stringify(feedbackTextColors)}; const feedbackIconColors = ${JSON.stringify(feedbackIconColors)}; @@ -233,6 +235,7 @@ StyleDictionary.registerFormat({ const borderColor = { ...colors, ...borderColors, + ...feedbackBorderColors, dropdown: '${f.cssCustomPropertyWithValue(COMPILED_TOKENS.dropdown.border.color)}', 'dropdown-divider': '${f.cssCustomPropertyWithValue(COMPILED_TOKENS.dropdown.divider.color)}', }; diff --git a/src/tokens/build/css/tokens.css b/src/tokens/build/css/tokens.css index 4ce28e4abd..10cc625b99 100644 --- a/src/tokens/build/css/tokens.css +++ b/src/tokens/build/css/tokens.css @@ -812,22 +812,28 @@ --gl-control-indicator-color-selected: var(--gl-color-neutral-0); /* Used for checkbox and radio button state indicators. */ --gl-control-indicator-color-disabled: var(--gl-color-neutral-500); /* Used for disabled checkbox and radio button state indicators. */ --gl-feedback-strong-background-color: var(--gl-color-neutral-800); /* Used for a background associated with strong feedback like a tooltip or toast message. */ + --gl-feedback-strong-border-color: var(--gl-color-alpha-0); /* Used for a border associated with strong feedback like a tooltip or toast message. */ --gl-feedback-strong-text-color: var(--gl-color-neutral-0); /* Used for text on a strong feedback background. */ --gl-feedback-strong-icon-color: var(--gl-color-neutral-0); /* Used for an icon on a strong feedback background. */ --gl-feedback-strong-link-color: var(--gl-color-blue-300); /* Used for a link on a strong feedback background. */ --gl-feedback-neutral-background-color: var(--gl-color-neutral-50); /* Used for the background of a neutral feedback item when there isn't a specific meaning or urgency. */ + --gl-feedback-neutral-border-color: var(--gl-color-neutral-300); /* Used for the border of a neutral feedback item when there isn't a specific meaning or urgency. */ --gl-feedback-neutral-text-color: var(--gl-color-neutral-700); /* Used for the text of a neutral feedback item when there isn't a specific meaning or urgency. */ --gl-feedback-neutral-icon-color: var(--gl-color-neutral-600); /* Used for the icon of a neutral feedback item when there isn't a specific meaning or urgency. */ --gl-feedback-info-background-color: var(--gl-color-blue-50); /* Used for the background of an informational feedback item when highlighting new information or a change that doesn't require immediate action. */ + --gl-feedback-info-border-color: var(--gl-color-blue-300); /* Used for the border of an informational feedback item when highlighting new information or a change that doesn't require immediate action. */ --gl-feedback-info-text-color: var(--gl-color-blue-700); /* Used for the text of an informational feedback item when highlighting new information or a change that doesn't require immediate action. */ --gl-feedback-info-icon-color: var(--gl-color-blue-600); /* Used for the icon of an informational feedback item when highlighting new information or a change that doesn't require immediate action. */ --gl-feedback-success-background-color: var(--gl-color-green-50); /* Used for the background of a success feedback item when confirming the successful completion of a user-initiated action. */ + --gl-feedback-success-border-color: var(--gl-color-green-300); /* Used for the border of a success feedback item when confirming the successful completion of a user-initiated action. */ --gl-feedback-success-text-color: var(--gl-color-green-700); /* Used for the text of a success feedback item when confirming the successful completion of a user-initiated action. */ --gl-feedback-success-icon-color: var(--gl-color-green-600); /* Used for the icon of a success feedback item when confirming the successful completion of a user-initiated action. */ --gl-feedback-warning-background-color: var(--gl-color-orange-50); /* Used for the background of a warning feedback item when notifying about a potential issue or sensitive information. */ + --gl-feedback-warning-border-color: var(--gl-color-orange-300); /* Used for the border of a warning feedback item when notifying about a potential issue or sensitive information. */ --gl-feedback-warning-text-color: var(--gl-color-orange-700); /* Used for the text of a warning feedback item when notifying about a potential issue or sensitive information. */ --gl-feedback-warning-icon-color: var(--gl-color-orange-600); /* Used for the icon of a warning feedback item when notifying about a potential issue or sensitive information. */ --gl-feedback-danger-background-color: var(--gl-color-red-50); /* Used for the background of a danger feedback item when notifying about a critical issue that has just occurred and requires immediate attention. */ + --gl-feedback-danger-border-color: var(--gl-color-red-300); /* Used for the border of a danger feedback item when notifying about a critical issue that has just occurred and requires immediate attention. */ --gl-feedback-danger-text-color: var(--gl-color-red-700); /* Used for the text of a danger feedback item when notifying about a critical issue that has just occurred and requires immediate attention. */ --gl-feedback-danger-icon-color: var(--gl-color-red-600); /* Used for the icon of a danger feedback item when notifying about a critical issue that has just occurred and requires immediate attention. */ --gl-focus-ring-outer-color: var(--gl-color-blue-500); /* Used for the outer color portion of the focus ring. */ diff --git a/src/tokens/build/css/tokens.dark.css b/src/tokens/build/css/tokens.dark.css index bb31a90056..6c1f0a3003 100644 --- a/src/tokens/build/css/tokens.dark.css +++ b/src/tokens/build/css/tokens.dark.css @@ -812,22 +812,28 @@ --gl-control-indicator-color-selected: var(--gl-color-neutral-950); /* Used for checkbox and radio button state indicators. */ --gl-control-indicator-color-disabled: var(--gl-color-neutral-400); /* Used for disabled checkbox and radio button state indicators. */ --gl-feedback-strong-background-color: var(--gl-color-neutral-800); /* Used for a background associated with strong feedback like a tooltip or toast message. */ + --gl-feedback-strong-border-color: var(--gl-color-alpha-0); /* Used for a border associated with strong feedback like a tooltip or toast message. */ --gl-feedback-strong-text-color: var(--gl-color-neutral-0); /* Used for text on a strong feedback background. */ --gl-feedback-strong-icon-color: var(--gl-color-neutral-0); /* Used for an icon on a strong feedback background. */ --gl-feedback-strong-link-color: var(--gl-color-blue-300); /* Used for a link on a strong feedback background. */ --gl-feedback-neutral-background-color: var(--gl-color-neutral-900); /* Used for the background of a neutral feedback item when there isn't a specific meaning or urgency. */ + --gl-feedback-neutral-border-color: var(--gl-color-neutral-800); /* Used for the border of a neutral feedback item when there isn't a specific meaning or urgency. */ --gl-feedback-neutral-text-color: var(--gl-color-neutral-200); /* Used for the text of a neutral feedback item when there isn't a specific meaning or urgency. */ --gl-feedback-neutral-icon-color: var(--gl-color-neutral-300); /* Used for the icon of a neutral feedback item when there isn't a specific meaning or urgency. */ --gl-feedback-info-background-color: var(--gl-color-blue-950); /* Used for the background of an informational feedback item when highlighting new information or a change that doesn't require immediate action. */ + --gl-feedback-info-border-color: var(--gl-color-blue-800); /* Used for the border of an informational feedback item when highlighting new information or a change that doesn't require immediate action. */ --gl-feedback-info-text-color: var(--gl-color-blue-200); /* Used for the text of an informational feedback item when highlighting new information or a change that doesn't require immediate action. */ --gl-feedback-info-icon-color: var(--gl-color-blue-300); /* Used for the icon of an informational feedback item when highlighting new information or a change that doesn't require immediate action. */ --gl-feedback-success-background-color: var(--gl-color-green-900); /* Used for the background of a success feedback item when confirming the successful completion of a user-initiated action. */ + --gl-feedback-success-border-color: var(--gl-color-green-800); /* Used for the border of a success feedback item when confirming the successful completion of a user-initiated action. */ --gl-feedback-success-text-color: var(--gl-color-green-200); /* Used for the text of a success feedback item when confirming the successful completion of a user-initiated action. */ --gl-feedback-success-icon-color: var(--gl-color-green-300); /* Used for the icon of a success feedback item when confirming the successful completion of a user-initiated action. */ --gl-feedback-warning-background-color: var(--gl-color-orange-900); /* Used for the background of a warning feedback item when notifying about a potential issue or sensitive information. */ + --gl-feedback-warning-border-color: var(--gl-color-orange-800); /* Used for the border of a warning feedback item when notifying about a potential issue or sensitive information. */ --gl-feedback-warning-text-color: var(--gl-color-orange-200); /* Used for the text of a warning feedback item when notifying about a potential issue or sensitive information. */ --gl-feedback-warning-icon-color: var(--gl-color-orange-300); /* Used for the icon of a warning feedback item when notifying about a potential issue or sensitive information. */ --gl-feedback-danger-background-color: var(--gl-color-red-900); /* Used for the background of a danger feedback item when notifying about a critical issue that has just occurred and requires immediate attention. */ + --gl-feedback-danger-border-color: var(--gl-color-red-800); /* Used for the border of a danger feedback item when notifying about a critical issue that has just occurred and requires immediate attention. */ --gl-feedback-danger-text-color: var(--gl-color-red-200); /* Used for the text of a danger feedback item when notifying about a critical issue that has just occurred and requires immediate attention. */ --gl-feedback-danger-icon-color: var(--gl-color-red-300); /* Used for the icon of a danger feedback item when notifying about a critical issue that has just occurred and requires immediate attention. */ --gl-focus-ring-outer-color: var(--gl-color-blue-400); /* Used for the outer color portion of the focus ring. */ diff --git a/src/tokens/build/figma/semantic.tokens.json b/src/tokens/build/figma/semantic.tokens.json index c8f5f5fd7b..e3edda544e 100644 --- a/src/tokens/build/figma/semantic.tokens.json +++ b/src/tokens/build/figma/semantic.tokens.json @@ -857,6 +857,13 @@ "$description": "Used for a background associated with strong feedback like a tooltip or toast message." } }, + "border": { + "color": { + "$value": "{color.alpha.0}", + "$type": "color", + "$description": "Used for a border associated with strong feedback like a tooltip or toast message." + } + }, "text": { "color": { "$value": "{color.neutral.0}", @@ -890,6 +897,16 @@ "$description": "Used for the background of a neutral feedback item when there isn't a specific meaning or urgency." } }, + "border": { + "color": { + "$value": { + "default": "{color.neutral.300}", + "dark": "{color.neutral.800}" + }, + "$type": "color", + "$description": "Used for the border of a neutral feedback item when there isn't a specific meaning or urgency." + } + }, "text": { "color": { "$value": { @@ -922,6 +939,16 @@ "$description": "Used for the background of an informational feedback item when highlighting new information or a change that doesn't require immediate action." } }, + "border": { + "color": { + "$value": { + "default": "{color.blue.300}", + "dark": "{color.blue.800}" + }, + "$type": "color", + "$description": "Used for the border of an informational feedback item when highlighting new information or a change that doesn't require immediate action." + } + }, "text": { "color": { "$value": { @@ -954,6 +981,16 @@ "$description": "Used for the background of a success feedback item when confirming the successful completion of a user-initiated action." } }, + "border": { + "color": { + "$value": { + "default": "{color.green.300}", + "dark": "{color.green.800}" + }, + "$type": "color", + "$description": "Used for the border of a success feedback item when confirming the successful completion of a user-initiated action." + } + }, "text": { "color": { "$value": { @@ -986,6 +1023,16 @@ "$description": "Used for the background of a warning feedback item when notifying about a potential issue or sensitive information." } }, + "border": { + "color": { + "$value": { + "default": "{color.orange.300}", + "dark": "{color.orange.800}" + }, + "$type": "color", + "$description": "Used for the border of a warning feedback item when notifying about a potential issue or sensitive information." + } + }, "text": { "color": { "$value": { @@ -1018,6 +1065,16 @@ "$description": "Used for the background of a danger feedback item when notifying about a critical issue that has just occurred and requires immediate attention." } }, + "border": { + "color": { + "$value": { + "default": "{color.red.300}", + "dark": "{color.red.800}" + }, + "$type": "color", + "$description": "Used for the border of a danger feedback item when notifying about a critical issue that has just occurred and requires immediate attention." + } + }, "text": { "color": { "$value": { diff --git a/src/tokens/build/js/tokens.dark.js b/src/tokens/build/js/tokens.dark.js index 39bebd2bff..119a45a3be 100644 --- a/src/tokens/build/js/tokens.dark.js +++ b/src/tokens/build/js/tokens.dark.js @@ -985,22 +985,28 @@ export const GL_CONTROL_PLACEHOLDER_COLOR = '#89888d'; export const GL_CONTROL_INDICATOR_COLOR_SELECTED = '#18171d'; export const GL_CONTROL_INDICATOR_COLOR_DISABLED = '#89888d'; export const GL_FEEDBACK_STRONG_BACKGROUND_COLOR = '#3a383f'; +export const GL_FEEDBACK_STRONG_BORDER_COLOR = 'transparent'; export const GL_FEEDBACK_STRONG_TEXT_COLOR = '#fff'; export const GL_FEEDBACK_STRONG_ICON_COLOR = '#fff'; export const GL_FEEDBACK_STRONG_LINK_COLOR = '#63a6e9'; export const GL_FEEDBACK_NEUTRAL_BACKGROUND_COLOR = '#28272d'; +export const GL_FEEDBACK_NEUTRAL_BORDER_COLOR = '#3a383f'; export const GL_FEEDBACK_NEUTRAL_TEXT_COLOR = '#bfbfc3'; export const GL_FEEDBACK_NEUTRAL_ICON_COLOR = '#a4a3a8'; export const GL_FEEDBACK_INFO_BACKGROUND_COLOR = '#002850'; +export const GL_FEEDBACK_INFO_BORDER_COLOR = '#064787'; export const GL_FEEDBACK_INFO_TEXT_COLOR = '#9dc7f1'; export const GL_FEEDBACK_INFO_ICON_COLOR = '#63a6e9'; export const GL_FEEDBACK_SUCCESS_BACKGROUND_COLOR = '#0a4020'; +export const GL_FEEDBACK_SUCCESS_BORDER_COLOR = '#0d532a'; export const GL_FEEDBACK_SUCCESS_TEXT_COLOR = '#91d4a8'; export const GL_FEEDBACK_SUCCESS_ICON_COLOR = '#52b87a'; export const GL_FEEDBACK_WARNING_BACKGROUND_COLOR = '#5c2900'; +export const GL_FEEDBACK_WARNING_BORDER_COLOR = '#703800'; export const GL_FEEDBACK_WARNING_TEXT_COLOR = '#e9be74'; export const GL_FEEDBACK_WARNING_ICON_COLOR = '#d99530'; export const GL_FEEDBACK_DANGER_BACKGROUND_COLOR = '#660e00'; +export const GL_FEEDBACK_DANGER_BORDER_COLOR = '#8d1300'; export const GL_FEEDBACK_DANGER_TEXT_COLOR = '#fcb5aa'; export const GL_FEEDBACK_DANGER_ICON_COLOR = '#f6806d'; export const GL_FOCUS_RING_OUTER_COLOR = '#428fdc'; diff --git a/src/tokens/build/js/tokens.js b/src/tokens/build/js/tokens.js index 1b5e5b84f9..166e634716 100644 --- a/src/tokens/build/js/tokens.js +++ b/src/tokens/build/js/tokens.js @@ -985,22 +985,28 @@ export const GL_CONTROL_PLACEHOLDER_COLOR = '#89888d'; export const GL_CONTROL_INDICATOR_COLOR_SELECTED = '#fff'; export const GL_CONTROL_INDICATOR_COLOR_DISABLED = '#737278'; export const GL_FEEDBACK_STRONG_BACKGROUND_COLOR = '#3a383f'; +export const GL_FEEDBACK_STRONG_BORDER_COLOR = 'transparent'; export const GL_FEEDBACK_STRONG_TEXT_COLOR = '#fff'; export const GL_FEEDBACK_STRONG_ICON_COLOR = '#fff'; export const GL_FEEDBACK_STRONG_LINK_COLOR = '#63a6e9'; export const GL_FEEDBACK_NEUTRAL_BACKGROUND_COLOR = '#ececef'; +export const GL_FEEDBACK_NEUTRAL_BORDER_COLOR = '#a4a3a8'; export const GL_FEEDBACK_NEUTRAL_TEXT_COLOR = '#4c4b51'; export const GL_FEEDBACK_NEUTRAL_ICON_COLOR = '#626168'; export const GL_FEEDBACK_INFO_BACKGROUND_COLOR = '#e9f3fc'; +export const GL_FEEDBACK_INFO_BORDER_COLOR = '#63a6e9'; export const GL_FEEDBACK_INFO_TEXT_COLOR = '#0b5cad'; export const GL_FEEDBACK_INFO_ICON_COLOR = '#1068bf'; export const GL_FEEDBACK_SUCCESS_BACKGROUND_COLOR = '#ecf4ee'; +export const GL_FEEDBACK_SUCCESS_BORDER_COLOR = '#52b87a'; export const GL_FEEDBACK_SUCCESS_TEXT_COLOR = '#24663b'; export const GL_FEEDBACK_SUCCESS_ICON_COLOR = '#217645'; export const GL_FEEDBACK_WARNING_BACKGROUND_COLOR = '#fdf1dd'; +export const GL_FEEDBACK_WARNING_BORDER_COLOR = '#d99530'; export const GL_FEEDBACK_WARNING_TEXT_COLOR = '#8f4700'; export const GL_FEEDBACK_WARNING_ICON_COLOR = '#9e5400'; export const GL_FEEDBACK_DANGER_BACKGROUND_COLOR = '#fcf1ef'; +export const GL_FEEDBACK_DANGER_BORDER_COLOR = '#f6806d'; export const GL_FEEDBACK_DANGER_TEXT_COLOR = '#ae1800'; export const GL_FEEDBACK_DANGER_ICON_COLOR = '#c91c00'; export const GL_FOCUS_RING_OUTER_COLOR = '#1f75cb'; diff --git a/src/tokens/build/json/tokens.dark.json b/src/tokens/build/json/tokens.dark.json index 48297799d7..609c9d3eae 100644 --- a/src/tokens/build/json/tokens.dark.json +++ b/src/tokens/build/json/tokens.dark.json @@ -22560,6 +22560,28 @@ ] } }, + "border": { + "color": { + "$value": "transparent", + "$type": "color", + "$description": "Used for a border associated with strong feedback like a tooltip or toast message.", + "filePath": "src/tokens/semantic/feedback.tokens.json", + "isSource": true, + "original": { + "$value": "{color.alpha.0}", + "$type": "color", + "$description": "Used for a border associated with strong feedback like a tooltip or toast message." + }, + "name": "FEEDBACK_STRONG_BORDER_COLOR", + "attributes": {}, + "path": [ + "feedback", + "strong", + "border", + "color" + ] + } + }, "text": { "color": { "$value": "#fff", @@ -22653,6 +22675,31 @@ ] } }, + "border": { + "color": { + "$value": "#3a383f", + "$type": "color", + "$description": "Used for the border of a neutral feedback item when there isn't a specific meaning or urgency.", + "filePath": "src/tokens/semantic/feedback.tokens.json", + "isSource": true, + "original": { + "$value": { + "default": "{color.neutral.300}", + "dark": "{color.neutral.800}" + }, + "$type": "color", + "$description": "Used for the border of a neutral feedback item when there isn't a specific meaning or urgency." + }, + "name": "FEEDBACK_NEUTRAL_BORDER_COLOR", + "attributes": {}, + "path": [ + "feedback", + "neutral", + "border", + "color" + ] + } + }, "text": { "color": { "$value": "#bfbfc3", @@ -22730,6 +22777,31 @@ ] } }, + "border": { + "color": { + "$value": "#064787", + "$type": "color", + "$description": "Used for the border of an informational feedback item when highlighting new information or a change that doesn't require immediate action.", + "filePath": "src/tokens/semantic/feedback.tokens.json", + "isSource": true, + "original": { + "$value": { + "default": "{color.blue.300}", + "dark": "{color.blue.800}" + }, + "$type": "color", + "$description": "Used for the border of an informational feedback item when highlighting new information or a change that doesn't require immediate action." + }, + "name": "FEEDBACK_INFO_BORDER_COLOR", + "attributes": {}, + "path": [ + "feedback", + "info", + "border", + "color" + ] + } + }, "text": { "color": { "$value": "#9dc7f1", @@ -22807,6 +22879,31 @@ ] } }, + "border": { + "color": { + "$value": "#0d532a", + "$type": "color", + "$description": "Used for the border of a success feedback item when confirming the successful completion of a user-initiated action.", + "filePath": "src/tokens/semantic/feedback.tokens.json", + "isSource": true, + "original": { + "$value": { + "default": "{color.green.300}", + "dark": "{color.green.800}" + }, + "$type": "color", + "$description": "Used for the border of a success feedback item when confirming the successful completion of a user-initiated action." + }, + "name": "FEEDBACK_SUCCESS_BORDER_COLOR", + "attributes": {}, + "path": [ + "feedback", + "success", + "border", + "color" + ] + } + }, "text": { "color": { "$value": "#91d4a8", @@ -22884,6 +22981,31 @@ ] } }, + "border": { + "color": { + "$value": "#703800", + "$type": "color", + "$description": "Used for the border of a warning feedback item when notifying about a potential issue or sensitive information.", + "filePath": "src/tokens/semantic/feedback.tokens.json", + "isSource": true, + "original": { + "$value": { + "default": "{color.orange.300}", + "dark": "{color.orange.800}" + }, + "$type": "color", + "$description": "Used for the border of a warning feedback item when notifying about a potential issue or sensitive information." + }, + "name": "FEEDBACK_WARNING_BORDER_COLOR", + "attributes": {}, + "path": [ + "feedback", + "warning", + "border", + "color" + ] + } + }, "text": { "color": { "$value": "#e9be74", @@ -22961,6 +23083,31 @@ ] } }, + "border": { + "color": { + "$value": "#8d1300", + "$type": "color", + "$description": "Used for the border of a danger feedback item when notifying about a critical issue that has just occurred and requires immediate attention.", + "filePath": "src/tokens/semantic/feedback.tokens.json", + "isSource": true, + "original": { + "$value": { + "default": "{color.red.300}", + "dark": "{color.red.800}" + }, + "$type": "color", + "$description": "Used for the border of a danger feedback item when notifying about a critical issue that has just occurred and requires immediate attention." + }, + "name": "FEEDBACK_DANGER_BORDER_COLOR", + "attributes": {}, + "path": [ + "feedback", + "danger", + "border", + "color" + ] + } + }, "text": { "color": { "$value": "#fcb5aa", diff --git a/src/tokens/build/json/tokens.json b/src/tokens/build/json/tokens.json index 10e00a0bb3..8c809d0e1c 100644 --- a/src/tokens/build/json/tokens.json +++ b/src/tokens/build/json/tokens.json @@ -22560,6 +22560,28 @@ ] } }, + "border": { + "color": { + "$value": "transparent", + "$type": "color", + "$description": "Used for a border associated with strong feedback like a tooltip or toast message.", + "filePath": "src/tokens/semantic/feedback.tokens.json", + "isSource": true, + "original": { + "$value": "{color.alpha.0}", + "$type": "color", + "$description": "Used for a border associated with strong feedback like a tooltip or toast message." + }, + "name": "FEEDBACK_STRONG_BORDER_COLOR", + "attributes": {}, + "path": [ + "feedback", + "strong", + "border", + "color" + ] + } + }, "text": { "color": { "$value": "#fff", @@ -22653,6 +22675,31 @@ ] } }, + "border": { + "color": { + "$value": "#a4a3a8", + "$type": "color", + "$description": "Used for the border of a neutral feedback item when there isn't a specific meaning or urgency.", + "filePath": "src/tokens/semantic/feedback.tokens.json", + "isSource": true, + "original": { + "$value": { + "default": "{color.neutral.300}", + "dark": "{color.neutral.800}" + }, + "$type": "color", + "$description": "Used for the border of a neutral feedback item when there isn't a specific meaning or urgency." + }, + "name": "FEEDBACK_NEUTRAL_BORDER_COLOR", + "attributes": {}, + "path": [ + "feedback", + "neutral", + "border", + "color" + ] + } + }, "text": { "color": { "$value": "#4c4b51", @@ -22730,6 +22777,31 @@ ] } }, + "border": { + "color": { + "$value": "#63a6e9", + "$type": "color", + "$description": "Used for the border of an informational feedback item when highlighting new information or a change that doesn't require immediate action.", + "filePath": "src/tokens/semantic/feedback.tokens.json", + "isSource": true, + "original": { + "$value": { + "default": "{color.blue.300}", + "dark": "{color.blue.800}" + }, + "$type": "color", + "$description": "Used for the border of an informational feedback item when highlighting new information or a change that doesn't require immediate action." + }, + "name": "FEEDBACK_INFO_BORDER_COLOR", + "attributes": {}, + "path": [ + "feedback", + "info", + "border", + "color" + ] + } + }, "text": { "color": { "$value": "#0b5cad", @@ -22807,6 +22879,31 @@ ] } }, + "border": { + "color": { + "$value": "#52b87a", + "$type": "color", + "$description": "Used for the border of a success feedback item when confirming the successful completion of a user-initiated action.", + "filePath": "src/tokens/semantic/feedback.tokens.json", + "isSource": true, + "original": { + "$value": { + "default": "{color.green.300}", + "dark": "{color.green.800}" + }, + "$type": "color", + "$description": "Used for the border of a success feedback item when confirming the successful completion of a user-initiated action." + }, + "name": "FEEDBACK_SUCCESS_BORDER_COLOR", + "attributes": {}, + "path": [ + "feedback", + "success", + "border", + "color" + ] + } + }, "text": { "color": { "$value": "#24663b", @@ -22884,6 +22981,31 @@ ] } }, + "border": { + "color": { + "$value": "#d99530", + "$type": "color", + "$description": "Used for the border of a warning feedback item when notifying about a potential issue or sensitive information.", + "filePath": "src/tokens/semantic/feedback.tokens.json", + "isSource": true, + "original": { + "$value": { + "default": "{color.orange.300}", + "dark": "{color.orange.800}" + }, + "$type": "color", + "$description": "Used for the border of a warning feedback item when notifying about a potential issue or sensitive information." + }, + "name": "FEEDBACK_WARNING_BORDER_COLOR", + "attributes": {}, + "path": [ + "feedback", + "warning", + "border", + "color" + ] + } + }, "text": { "color": { "$value": "#8f4700", @@ -22961,6 +23083,31 @@ ] } }, + "border": { + "color": { + "$value": "#f6806d", + "$type": "color", + "$description": "Used for the border of a danger feedback item when notifying about a critical issue that has just occurred and requires immediate attention.", + "filePath": "src/tokens/semantic/feedback.tokens.json", + "isSource": true, + "original": { + "$value": { + "default": "{color.red.300}", + "dark": "{color.red.800}" + }, + "$type": "color", + "$description": "Used for the border of a danger feedback item when notifying about a critical issue that has just occurred and requires immediate attention." + }, + "name": "FEEDBACK_DANGER_BORDER_COLOR", + "attributes": {}, + "path": [ + "feedback", + "danger", + "border", + "color" + ] + } + }, "text": { "color": { "$value": "#ae1800", diff --git a/src/tokens/build/scss/_tokens.dark.scss b/src/tokens/build/scss/_tokens.dark.scss index 5ae5e00927..c6a21cb16a 100644 --- a/src/tokens/build/scss/_tokens.dark.scss +++ b/src/tokens/build/scss/_tokens.dark.scss @@ -810,22 +810,28 @@ $gl-control-border-color-selected-focus: $gl-color-blue-200; // Used for checked $gl-control-indicator-color-selected: $gl-color-neutral-950; // Used for checkbox and radio button state indicators. $gl-control-indicator-color-disabled: $gl-color-neutral-400; // Used for disabled checkbox and radio button state indicators. $gl-feedback-strong-background-color: $gl-color-neutral-800; // Used for a background associated with strong feedback like a tooltip or toast message. +$gl-feedback-strong-border-color: $gl-color-alpha-0; // Used for a border associated with strong feedback like a tooltip or toast message. $gl-feedback-strong-text-color: $gl-color-neutral-0; // Used for text on a strong feedback background. $gl-feedback-strong-icon-color: $gl-color-neutral-0; // Used for an icon on a strong feedback background. $gl-feedback-strong-link-color: $gl-color-blue-300; // Used for a link on a strong feedback background. $gl-feedback-neutral-background-color: $gl-color-neutral-900; // Used for the background of a neutral feedback item when there isn't a specific meaning or urgency. +$gl-feedback-neutral-border-color: $gl-color-neutral-800; // Used for the border of a neutral feedback item when there isn't a specific meaning or urgency. $gl-feedback-neutral-text-color: $gl-color-neutral-200; // Used for the text of a neutral feedback item when there isn't a specific meaning or urgency. $gl-feedback-neutral-icon-color: $gl-color-neutral-300; // Used for the icon of a neutral feedback item when there isn't a specific meaning or urgency. $gl-feedback-info-background-color: $gl-color-blue-950; // Used for the background of an informational feedback item when highlighting new information or a change that doesn't require immediate action. +$gl-feedback-info-border-color: $gl-color-blue-800; // Used for the border of an informational feedback item when highlighting new information or a change that doesn't require immediate action. $gl-feedback-info-text-color: $gl-color-blue-200; // Used for the text of an informational feedback item when highlighting new information or a change that doesn't require immediate action. $gl-feedback-info-icon-color: $gl-color-blue-300; // Used for the icon of an informational feedback item when highlighting new information or a change that doesn't require immediate action. $gl-feedback-success-background-color: $gl-color-green-900; // Used for the background of a success feedback item when confirming the successful completion of a user-initiated action. +$gl-feedback-success-border-color: $gl-color-green-800; // Used for the border of a success feedback item when confirming the successful completion of a user-initiated action. $gl-feedback-success-text-color: $gl-color-green-200; // Used for the text of a success feedback item when confirming the successful completion of a user-initiated action. $gl-feedback-success-icon-color: $gl-color-green-300; // Used for the icon of a success feedback item when confirming the successful completion of a user-initiated action. $gl-feedback-warning-background-color: $gl-color-orange-900; // Used for the background of a warning feedback item when notifying about a potential issue or sensitive information. +$gl-feedback-warning-border-color: $gl-color-orange-800; // Used for the border of a warning feedback item when notifying about a potential issue or sensitive information. $gl-feedback-warning-text-color: $gl-color-orange-200; // Used for the text of a warning feedback item when notifying about a potential issue or sensitive information. $gl-feedback-warning-icon-color: $gl-color-orange-300; // Used for the icon of a warning feedback item when notifying about a potential issue or sensitive information. $gl-feedback-danger-background-color: $gl-color-red-900; // Used for the background of a danger feedback item when notifying about a critical issue that has just occurred and requires immediate attention. +$gl-feedback-danger-border-color: $gl-color-red-800; // Used for the border of a danger feedback item when notifying about a critical issue that has just occurred and requires immediate attention. $gl-feedback-danger-text-color: $gl-color-red-200; // Used for the text of a danger feedback item when notifying about a critical issue that has just occurred and requires immediate attention. $gl-feedback-danger-icon-color: $gl-color-red-300; // Used for the icon of a danger feedback item when notifying about a critical issue that has just occurred and requires immediate attention. $gl-focus-ring-outer-color: $gl-color-blue-400; // Used for the outer color portion of the focus ring. diff --git a/src/tokens/build/scss/_tokens.scss b/src/tokens/build/scss/_tokens.scss index c00ed7b39e..ebff489a18 100644 --- a/src/tokens/build/scss/_tokens.scss +++ b/src/tokens/build/scss/_tokens.scss @@ -810,22 +810,28 @@ $gl-control-border-color-selected-focus: $gl-color-blue-700; // Used for checked $gl-control-indicator-color-selected: $gl-color-neutral-0; // Used for checkbox and radio button state indicators. $gl-control-indicator-color-disabled: $gl-color-neutral-500; // Used for disabled checkbox and radio button state indicators. $gl-feedback-strong-background-color: $gl-color-neutral-800; // Used for a background associated with strong feedback like a tooltip or toast message. +$gl-feedback-strong-border-color: $gl-color-alpha-0; // Used for a border associated with strong feedback like a tooltip or toast message. $gl-feedback-strong-text-color: $gl-color-neutral-0; // Used for text on a strong feedback background. $gl-feedback-strong-icon-color: $gl-color-neutral-0; // Used for an icon on a strong feedback background. $gl-feedback-strong-link-color: $gl-color-blue-300; // Used for a link on a strong feedback background. $gl-feedback-neutral-background-color: $gl-color-neutral-50; // Used for the background of a neutral feedback item when there isn't a specific meaning or urgency. +$gl-feedback-neutral-border-color: $gl-color-neutral-300; // Used for the border of a neutral feedback item when there isn't a specific meaning or urgency. $gl-feedback-neutral-text-color: $gl-color-neutral-700; // Used for the text of a neutral feedback item when there isn't a specific meaning or urgency. $gl-feedback-neutral-icon-color: $gl-color-neutral-600; // Used for the icon of a neutral feedback item when there isn't a specific meaning or urgency. $gl-feedback-info-background-color: $gl-color-blue-50; // Used for the background of an informational feedback item when highlighting new information or a change that doesn't require immediate action. +$gl-feedback-info-border-color: $gl-color-blue-300; // Used for the border of an informational feedback item when highlighting new information or a change that doesn't require immediate action. $gl-feedback-info-text-color: $gl-color-blue-700; // Used for the text of an informational feedback item when highlighting new information or a change that doesn't require immediate action. $gl-feedback-info-icon-color: $gl-color-blue-600; // Used for the icon of an informational feedback item when highlighting new information or a change that doesn't require immediate action. $gl-feedback-success-background-color: $gl-color-green-50; // Used for the background of a success feedback item when confirming the successful completion of a user-initiated action. +$gl-feedback-success-border-color: $gl-color-green-300; // Used for the border of a success feedback item when confirming the successful completion of a user-initiated action. $gl-feedback-success-text-color: $gl-color-green-700; // Used for the text of a success feedback item when confirming the successful completion of a user-initiated action. $gl-feedback-success-icon-color: $gl-color-green-600; // Used for the icon of a success feedback item when confirming the successful completion of a user-initiated action. $gl-feedback-warning-background-color: $gl-color-orange-50; // Used for the background of a warning feedback item when notifying about a potential issue or sensitive information. +$gl-feedback-warning-border-color: $gl-color-orange-300; // Used for the border of a warning feedback item when notifying about a potential issue or sensitive information. $gl-feedback-warning-text-color: $gl-color-orange-700; // Used for the text of a warning feedback item when notifying about a potential issue or sensitive information. $gl-feedback-warning-icon-color: $gl-color-orange-600; // Used for the icon of a warning feedback item when notifying about a potential issue or sensitive information. $gl-feedback-danger-background-color: $gl-color-red-50; // Used for the background of a danger feedback item when notifying about a critical issue that has just occurred and requires immediate attention. +$gl-feedback-danger-border-color: $gl-color-red-300; // Used for the border of a danger feedback item when notifying about a critical issue that has just occurred and requires immediate attention. $gl-feedback-danger-text-color: $gl-color-red-700; // Used for the text of a danger feedback item when notifying about a critical issue that has just occurred and requires immediate attention. $gl-feedback-danger-icon-color: $gl-color-red-600; // Used for the icon of a danger feedback item when notifying about a critical issue that has just occurred and requires immediate attention. $gl-focus-ring-outer-color: $gl-color-blue-500; // Used for the outer color portion of the focus ring. diff --git a/src/tokens/build/scss/_tokens_custom_properties.scss b/src/tokens/build/scss/_tokens_custom_properties.scss index f3751eaf0b..59d82e70e7 100644 --- a/src/tokens/build/scss/_tokens_custom_properties.scss +++ b/src/tokens/build/scss/_tokens_custom_properties.scss @@ -985,22 +985,28 @@ $gl-control-placeholder-color: var(--gl-control-placeholder-color); $gl-control-indicator-color-selected: var(--gl-control-indicator-color-selected); $gl-control-indicator-color-disabled: var(--gl-control-indicator-color-disabled); $gl-feedback-strong-background-color: var(--gl-feedback-strong-background-color); +$gl-feedback-strong-border-color: var(--gl-feedback-strong-border-color); $gl-feedback-strong-text-color: var(--gl-feedback-strong-text-color); $gl-feedback-strong-icon-color: var(--gl-feedback-strong-icon-color); $gl-feedback-strong-link-color: var(--gl-feedback-strong-link-color); $gl-feedback-neutral-background-color: var(--gl-feedback-neutral-background-color); +$gl-feedback-neutral-border-color: var(--gl-feedback-neutral-border-color); $gl-feedback-neutral-text-color: var(--gl-feedback-neutral-text-color); $gl-feedback-neutral-icon-color: var(--gl-feedback-neutral-icon-color); $gl-feedback-info-background-color: var(--gl-feedback-info-background-color); +$gl-feedback-info-border-color: var(--gl-feedback-info-border-color); $gl-feedback-info-text-color: var(--gl-feedback-info-text-color); $gl-feedback-info-icon-color: var(--gl-feedback-info-icon-color); $gl-feedback-success-background-color: var(--gl-feedback-success-background-color); +$gl-feedback-success-border-color: var(--gl-feedback-success-border-color); $gl-feedback-success-text-color: var(--gl-feedback-success-text-color); $gl-feedback-success-icon-color: var(--gl-feedback-success-icon-color); $gl-feedback-warning-background-color: var(--gl-feedback-warning-background-color); +$gl-feedback-warning-border-color: var(--gl-feedback-warning-border-color); $gl-feedback-warning-text-color: var(--gl-feedback-warning-text-color); $gl-feedback-warning-icon-color: var(--gl-feedback-warning-icon-color); $gl-feedback-danger-background-color: var(--gl-feedback-danger-background-color); +$gl-feedback-danger-border-color: var(--gl-feedback-danger-border-color); $gl-feedback-danger-text-color: var(--gl-feedback-danger-text-color); $gl-feedback-danger-icon-color: var(--gl-feedback-danger-icon-color); $gl-focus-ring-outer-color: var(--gl-focus-ring-outer-color); diff --git a/src/tokens/build/tailwind/tokens.cjs b/src/tokens/build/tailwind/tokens.cjs index 1333e1179c..cea6ab729a 100644 --- a/src/tokens/build/tailwind/tokens.cjs +++ b/src/tokens/build/tailwind/tokens.cjs @@ -336,6 +336,16 @@ const feedbackBackgroundColors = { 'var(--gl-feedback-warning-background-color, var(--gl-color-orange-50, #fdf1dd))', 'feedback-danger': 'var(--gl-feedback-danger-background-color, var(--gl-color-red-50, #fcf1ef))', }; +const feedbackBorderColors = { + 'feedback-strong': 'var(--gl-feedback-strong-border-color, var(--gl-color-alpha-0, transparent))', + 'feedback-neutral': + 'var(--gl-feedback-neutral-border-color, var(--gl-color-neutral-300, #a4a3a8))', + 'feedback-info': 'var(--gl-feedback-info-border-color, var(--gl-color-blue-300, #63a6e9))', + 'feedback-success': 'var(--gl-feedback-success-border-color, var(--gl-color-green-300, #52b87a))', + 'feedback-warning': + 'var(--gl-feedback-warning-border-color, var(--gl-color-orange-300, #d99530))', + 'feedback-danger': 'var(--gl-feedback-danger-border-color, var(--gl-color-red-300, #f6806d))', +}; const feedbackTextColors = { 'feedback-strong': 'var(--gl-feedback-strong-text-color, var(--gl-color-neutral-0, #fff))', 'feedback-neutral': 'var(--gl-feedback-neutral-text-color, var(--gl-color-neutral-700, #4c4b51))', @@ -381,6 +391,7 @@ const backgroundColor = { const borderColor = { ...colors, ...borderColors, + ...feedbackBorderColors, dropdown: 'var(--gl-dropdown-border-color, var(--gl-border-color-strong, #bfbfc3))', 'dropdown-divider': 'var(--gl-dropdown-divider-color, var(--gl-border-color-default, #dcdcde))', }; diff --git a/src/tokens/semantic/feedback.tokens.json b/src/tokens/semantic/feedback.tokens.json index 671df3822e..d8e6430ee9 100644 --- a/src/tokens/semantic/feedback.tokens.json +++ b/src/tokens/semantic/feedback.tokens.json @@ -8,6 +8,13 @@ "$description": "Used for a background associated with strong feedback like a tooltip or toast message." } }, + "border": { + "color": { + "$value": "{color.alpha.0}", + "$type": "color", + "$description": "Used for a border associated with strong feedback like a tooltip or toast message." + } + }, "text": { "color": { "$value": "{color.neutral.0}", @@ -41,6 +48,16 @@ "$description": "Used for the background of a neutral feedback item when there isn't a specific meaning or urgency." } }, + "border": { + "color": { + "$value": { + "default": "{color.neutral.300}", + "dark": "{color.neutral.800}" + }, + "$type": "color", + "$description": "Used for the border of a neutral feedback item when there isn't a specific meaning or urgency." + } + }, "text": { "color": { "$value": { @@ -73,6 +90,16 @@ "$description": "Used for the background of an informational feedback item when highlighting new information or a change that doesn't require immediate action." } }, + "border": { + "color": { + "$value": { + "default": "{color.blue.300}", + "dark": "{color.blue.800}" + }, + "$type": "color", + "$description": "Used for the border of an informational feedback item when highlighting new information or a change that doesn't require immediate action." + } + }, "text": { "color": { "$value": { @@ -105,6 +132,16 @@ "$description": "Used for the background of a success feedback item when confirming the successful completion of a user-initiated action." } }, + "border": { + "color": { + "$value": { + "default": "{color.green.300}", + "dark": "{color.green.800}" + }, + "$type": "color", + "$description": "Used for the border of a success feedback item when confirming the successful completion of a user-initiated action." + } + }, "text": { "color": { "$value": { @@ -137,6 +174,16 @@ "$description": "Used for the background of a warning feedback item when notifying about a potential issue or sensitive information." } }, + "border": { + "color": { + "$value": { + "default": "{color.orange.300}", + "dark": "{color.orange.800}" + }, + "$type": "color", + "$description": "Used for the border of a warning feedback item when notifying about a potential issue or sensitive information." + } + }, "text": { "color": { "$value": { @@ -169,6 +216,16 @@ "$description": "Used for the background of a danger feedback item when notifying about a critical issue that has just occurred and requires immediate attention." } }, + "border": { + "color": { + "$value": { + "default": "{color.red.300}", + "dark": "{color.red.800}" + }, + "$type": "color", + "$description": "Used for the border of a danger feedback item when notifying about a critical issue that has just occurred and requires immediate attention." + } + }, "text": { "color": { "$value": { diff --git a/src/tokens/semantic/feedback.tokens.stories.js b/src/tokens/semantic/feedback.tokens.stories.js index 19033baa9d..fb8d984587 100644 --- a/src/tokens/semantic/feedback.tokens.stories.js +++ b/src/tokens/semantic/feedback.tokens.stories.js @@ -4,27 +4,27 @@ export const Default = () => ({ components: { GlIcon }, template: `
-
+
-
+
-
+
-
+
-
+
-
+
-- GitLab From 9f24bff5142fe77a3674b45a1394cb25f8d631b3 Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Fri, 28 Mar 2025 05:37:29 +0000 Subject: [PATCH 2/2] chore: update snapshots --- ...ryshots-tokens-feedback-default-1-snap.png | Bin 29620 -> 31444 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/tests/__image_snapshots__/storyshots-spec-js-image-storyshots-tokens-feedback-default-1-snap.png b/tests/__image_snapshots__/storyshots-spec-js-image-storyshots-tokens-feedback-default-1-snap.png index 130dcf42c8c83387b4bc3e46b354f5c9be3dc6ba..73243b8d9a8f5edd73782949915c75fe03e68d8f 100644 GIT binary patch literal 31444 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 n$O0Y~qeB)$XvpHhe}bP0l+XkK{ZAEn literal 29620 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