diff --git a/package.json b/package.json index d90317ae47..3994ed1c2f 100644 --- a/package.json +++ b/package.json @@ -181,7 +181,7 @@ { "path": "lib/components/internal/widget-exports.js", "brotli": false, - "limit": "1350 kB", + "limit": "1360 kB", "ignore": "react-dom" } ], diff --git a/pages/box/visual-accent.page.tsx b/pages/box/visual-accent.page.tsx new file mode 100644 index 0000000000..fca512442b --- /dev/null +++ b/pages/box/visual-accent.page.tsx @@ -0,0 +1,172 @@ +// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +// SPDX-License-Identifier: Apache-2.0 +import React from 'react'; + +import Box, { BoxProps } from '~components/box'; +import Container from '~components/container'; +import Header from '~components/header'; +import Icon from '~components/icon'; +import KeyValuePairs from '~components/key-value-pairs'; +import List from '~components/list'; +import SpaceBetween from '~components/space-between'; + +import ScreenshotArea from '../utils/screenshot-area'; + +// ─── Data ────────────────────────────────────────────────────────────────────── + +const ALL_VARIANTS: BoxProps.VisualAccent.Color[] = [ + 'red', + 'yellow', + 'indigo', + 'green', + 'orange', + 'purple', + 'mint', + 'lime', + 'grey', + 'teal', + 'cyan', + 'blue', + 'violet', + 'fuchsia', + 'magenta', + 'pink', + 'rose', + 'amber', +]; + +const BOX_VARIANTS: { variant: BoxProps['variant']; label: string; content: string }[] = [ + { variant: 'h3', label: 'h3', content: 'Heading 3' }, + { variant: 'p', label: 'p', content: 'Body paragraph text' }, +]; + +const LIST_ITEMS: { id: string; content: string; icon: string; color: BoxProps.VisualAccent.Color }[] = [ + { id: 'health', content: 'Health overview', icon: 'face-happy', color: 'green' }, + { id: 'functions', content: 'Functions', icon: 'script', color: 'indigo' }, + { id: 'network', content: 'Network configuration', icon: 'globe', color: 'grey' }, + { id: 'multi-session', content: 'Multi-session data', icon: 'multiscreen', color: 'purple' }, + { id: 'alert', content: 'Alert center', icon: 'security', color: 'red' }, + { id: 'communication', content: 'Communication', icon: 'contact', color: 'mint' }, +]; + +// ─── Page ────────────────────────────────────────────────────────────────────── + +export default function StyleBoxPage() { + return ( + +
+ + Box visualAccent + + + + Uses the existing Box component with a new visualAccent prop. No wrapper component or utility + classes needed. + + + {/* ── Box text variants × accent colors ─────────────────────────── */} + + Text inside accent boxes + + + {BOX_VARIANTS.map(({ variant, label, content }) => ( +
+ + Wrapping Box variant="{label}" + + + {ALL_VARIANTS.map(color => ( + + {content} + + ))} + +
+ ))} + + {/* ── Icons in accent boxes ─────────────────────────────────────── */} + + Icons in accent boxes + + + {ALL_VARIANTS.map(color => ( + + + + ))} + + + {/* ── Application in components ──────────────────────────────────── */} + + Application in components + + + KeyValuePairs}> + + 114 + + ), + }, + { + label: 'Patterns', + value: ( + + 81 + + ), + }, + { + label: 'Demos', + value: ( + + 35 + + ), + }, + ]} + /> + + + + List}> + ({ + id: item.id, + content: item.content, + icon: ( + + + + ), + })} + /> + +
+
+ ); +} diff --git a/src/__integ__/__snapshots__/themes.test.ts.snap b/src/__integ__/__snapshots__/themes.test.ts.snap index f538fa177a..79b91b092b 100644 --- a/src/__integ__/__snapshots__/themes.test.ts.snap +++ b/src/__integ__/__snapshots__/themes.test.ts.snap @@ -462,11 +462,14 @@ exports[`CSS Custom Properties match previous snapshot for mode "compact" 1`] = "color-dropzone-border-hover": "#002b66", "color-dropzone-text-default": "#545b64", "color-dropzone-text-hover": "#545b64", + "color-error-100": "#ffe0e0", "color-error-1000": "#270a11", "color-error-400": "#ff5d64", "color-error-50": "#fdf3f1", "color-error-600": "#d13212", + "color-error-800": "#990000", "color-error-900": "#700000", + "color-error-950": "#520000", "color-foreground-control-default": "#ffffff", "color-foreground-control-disabled": "#ffffff", "color-foreground-control-read-only": "#687078", @@ -483,11 +486,15 @@ exports[`CSS Custom Properties match previous snapshot for mode "compact" 1`] = "color-icon-action-card-default": "#0073bb", "color-icon-action-card-disabled": "#aab7b8", "color-icon-action-card-hover": "#002b66", + "color-info-100": "#d1f1ff", "color-info-1000": "#12293b", "color-info-300": "#44b9d6", "color-info-400": "#00a1c9", "color-info-50": "#f1faff", "color-info-600": "#0073bb", + "color-info-700": "#004a9e", + "color-info-800": "#003b8f", + "color-info-950": "#00204d", "color-item-selected": "#0073bb", "color-neutral-100": "#fafafa", "color-neutral-1000": "#06080a", @@ -520,6 +527,7 @@ exports[`CSS Custom Properties match previous snapshot for mode "compact" 1`] = "color-primary-700": "#0a4a74", "color-primary-800": "#003b8f", "color-primary-900": "#002b66", + "color-primary-950": "#00204d", "color-purple-400": "#bf80ff", "color-purple-700": "#7300e5", "color-severity-dark-red": "#870303", @@ -531,10 +539,14 @@ exports[`CSS Custom Properties match previous snapshot for mode "compact" 1`] = "color-shadow-side": "rgba(0, 28, 36, 0.15)", "color-shadow-toggle-handle": "rgba(0, 0, 0, 0.25)", "color-stroke-chart-line": "#879596", + "color-success-100": "#d9ffd6", "color-success-1000": "#172211", + "color-success-400": "#00e500", "color-success-50": "#f2f8f0", "color-success-500": "#6aaf35", "color-success-600": "#1d8102", + "color-success-800": "#005c26", + "color-success-950": "#003311", "color-text-accent": "#0073bb", "color-text-action-card-disabled": "#879596", "color-text-avatar": "#ffffff", @@ -667,11 +679,15 @@ exports[`CSS Custom Properties match previous snapshot for mode "compact" 1`] = "color-text-tutorial-hotspot-hover": "#0a4a74", "color-transparent": "transparent", "color-tree-view-connector-line": "#879596", + "color-warning-100": "#fffbbd", "color-warning-1000": "#191100", "color-warning-400": "#ffe347", "color-warning-50": "#fffef0", "color-warning-500": "#fbd332", + "color-warning-600": "#f2b100", + "color-warning-800": "#9e6900", "color-warning-900": "#906806", + "color-warning-950": "#573a00", "color-white": "#ffffff", "font-button-letter-spacing": "0.25px", "font-chart-detail-size": "14px", @@ -1389,11 +1405,14 @@ exports[`CSS Custom Properties match previous snapshot for mode "dark" 1`] = ` "color-dropzone-border-hover": "#44b9d6", "color-dropzone-text-default": "#c6c6cd", "color-dropzone-text-hover": "#c6c6cd", + "color-error-100": "#ffe0e0", "color-error-1000": "#270a11", "color-error-400": "#ff5d64", "color-error-50": "#fdf3f1", "color-error-600": "#d13212", + "color-error-800": "#990000", "color-error-900": "#700000", + "color-error-950": "#520000", "color-foreground-control-default": "#ffffff", "color-foreground-control-disabled": "#687078", "color-foreground-control-read-only": "#95a5a6", @@ -1410,11 +1429,15 @@ exports[`CSS Custom Properties match previous snapshot for mode "dark" 1`] = ` "color-icon-action-card-default": "#00a1c9", "color-icon-action-card-disabled": "#687078", "color-icon-action-card-hover": "#44b9d6", + "color-info-100": "#d1f1ff", "color-info-1000": "#12293b", "color-info-300": "#44b9d6", "color-info-400": "#00a1c9", "color-info-50": "#f1faff", "color-info-600": "#0073bb", + "color-info-700": "#004a9e", + "color-info-800": "#003b8f", + "color-info-950": "#00204d", "color-item-selected": "#44b9d6", "color-neutral-100": "#fafafa", "color-neutral-1000": "#06080a", @@ -1447,6 +1470,7 @@ exports[`CSS Custom Properties match previous snapshot for mode "dark" 1`] = ` "color-primary-700": "#0a4a74", "color-primary-800": "#003b8f", "color-primary-900": "#002b66", + "color-primary-950": "#00204d", "color-purple-400": "#bf80ff", "color-purple-700": "#7300e5", "color-severity-dark-red": "#d63f38", @@ -1458,10 +1482,14 @@ exports[`CSS Custom Properties match previous snapshot for mode "dark" 1`] = ` "color-shadow-side": "rgba(0, 0, 0, 0.3)", "color-shadow-toggle-handle": "rgba(0, 0, 0, 0.25)", "color-stroke-chart-line": "#879596", + "color-success-100": "#d9ffd6", "color-success-1000": "#172211", + "color-success-400": "#00e500", "color-success-50": "#f2f8f0", "color-success-500": "#6aaf35", "color-success-600": "#1d8102", + "color-success-800": "#005c26", + "color-success-950": "#003311", "color-text-accent": "#44b9d6", "color-text-action-card-disabled": "#879596", "color-text-avatar": "#ffffff", @@ -1594,11 +1622,15 @@ exports[`CSS Custom Properties match previous snapshot for mode "dark" 1`] = ` "color-text-tutorial-hotspot-hover": "#99cbe4", "color-transparent": "transparent", "color-tree-view-connector-line": "#d5dbdb", + "color-warning-100": "#fffbbd", "color-warning-1000": "#191100", "color-warning-400": "#ffe347", "color-warning-50": "#fffef0", "color-warning-500": "#fbd332", + "color-warning-600": "#f2b100", + "color-warning-800": "#9e6900", "color-warning-900": "#906806", + "color-warning-950": "#573a00", "color-white": "#ffffff", "font-button-letter-spacing": "0.25px", "font-chart-detail-size": "14px", @@ -2316,11 +2348,14 @@ exports[`CSS Custom Properties match previous snapshot for mode "light" 1`] = ` "color-dropzone-border-hover": "#002b66", "color-dropzone-text-default": "#545b64", "color-dropzone-text-hover": "#545b64", + "color-error-100": "#ffe0e0", "color-error-1000": "#270a11", "color-error-400": "#ff5d64", "color-error-50": "#fdf3f1", "color-error-600": "#d13212", + "color-error-800": "#990000", "color-error-900": "#700000", + "color-error-950": "#520000", "color-foreground-control-default": "#ffffff", "color-foreground-control-disabled": "#ffffff", "color-foreground-control-read-only": "#687078", @@ -2337,11 +2372,15 @@ exports[`CSS Custom Properties match previous snapshot for mode "light" 1`] = ` "color-icon-action-card-default": "#0073bb", "color-icon-action-card-disabled": "#aab7b8", "color-icon-action-card-hover": "#002b66", + "color-info-100": "#d1f1ff", "color-info-1000": "#12293b", "color-info-300": "#44b9d6", "color-info-400": "#00a1c9", "color-info-50": "#f1faff", "color-info-600": "#0073bb", + "color-info-700": "#004a9e", + "color-info-800": "#003b8f", + "color-info-950": "#00204d", "color-item-selected": "#0073bb", "color-neutral-100": "#fafafa", "color-neutral-1000": "#06080a", @@ -2374,6 +2413,7 @@ exports[`CSS Custom Properties match previous snapshot for mode "light" 1`] = ` "color-primary-700": "#0a4a74", "color-primary-800": "#003b8f", "color-primary-900": "#002b66", + "color-primary-950": "#00204d", "color-purple-400": "#bf80ff", "color-purple-700": "#7300e5", "color-severity-dark-red": "#870303", @@ -2385,10 +2425,14 @@ exports[`CSS Custom Properties match previous snapshot for mode "light" 1`] = ` "color-shadow-side": "rgba(0, 28, 36, 0.15)", "color-shadow-toggle-handle": "rgba(0, 0, 0, 0.25)", "color-stroke-chart-line": "#879596", + "color-success-100": "#d9ffd6", "color-success-1000": "#172211", + "color-success-400": "#00e500", "color-success-50": "#f2f8f0", "color-success-500": "#6aaf35", "color-success-600": "#1d8102", + "color-success-800": "#005c26", + "color-success-950": "#003311", "color-text-accent": "#0073bb", "color-text-action-card-disabled": "#879596", "color-text-avatar": "#ffffff", @@ -2521,11 +2565,15 @@ exports[`CSS Custom Properties match previous snapshot for mode "light" 1`] = ` "color-text-tutorial-hotspot-hover": "#0a4a74", "color-transparent": "transparent", "color-tree-view-connector-line": "#879596", + "color-warning-100": "#fffbbd", "color-warning-1000": "#191100", "color-warning-400": "#ffe347", "color-warning-50": "#fffef0", "color-warning-500": "#fbd332", + "color-warning-600": "#f2b100", + "color-warning-800": "#9e6900", "color-warning-900": "#906806", + "color-warning-950": "#573a00", "color-white": "#ffffff", "font-button-letter-spacing": "0.25px", "font-chart-detail-size": "14px", @@ -3243,11 +3291,14 @@ exports[`CSS Custom Properties match previous snapshot for mode "reduced-motion" "color-dropzone-border-hover": "#002b66", "color-dropzone-text-default": "#545b64", "color-dropzone-text-hover": "#545b64", + "color-error-100": "#ffe0e0", "color-error-1000": "#270a11", "color-error-400": "#ff5d64", "color-error-50": "#fdf3f1", "color-error-600": "#d13212", + "color-error-800": "#990000", "color-error-900": "#700000", + "color-error-950": "#520000", "color-foreground-control-default": "#ffffff", "color-foreground-control-disabled": "#ffffff", "color-foreground-control-read-only": "#687078", @@ -3264,11 +3315,15 @@ exports[`CSS Custom Properties match previous snapshot for mode "reduced-motion" "color-icon-action-card-default": "#0073bb", "color-icon-action-card-disabled": "#aab7b8", "color-icon-action-card-hover": "#002b66", + "color-info-100": "#d1f1ff", "color-info-1000": "#12293b", "color-info-300": "#44b9d6", "color-info-400": "#00a1c9", "color-info-50": "#f1faff", "color-info-600": "#0073bb", + "color-info-700": "#004a9e", + "color-info-800": "#003b8f", + "color-info-950": "#00204d", "color-item-selected": "#0073bb", "color-neutral-100": "#fafafa", "color-neutral-1000": "#06080a", @@ -3301,6 +3356,7 @@ exports[`CSS Custom Properties match previous snapshot for mode "reduced-motion" "color-primary-700": "#0a4a74", "color-primary-800": "#003b8f", "color-primary-900": "#002b66", + "color-primary-950": "#00204d", "color-purple-400": "#bf80ff", "color-purple-700": "#7300e5", "color-severity-dark-red": "#870303", @@ -3312,10 +3368,14 @@ exports[`CSS Custom Properties match previous snapshot for mode "reduced-motion" "color-shadow-side": "rgba(0, 28, 36, 0.15)", "color-shadow-toggle-handle": "rgba(0, 0, 0, 0.25)", "color-stroke-chart-line": "#879596", + "color-success-100": "#d9ffd6", "color-success-1000": "#172211", + "color-success-400": "#00e500", "color-success-50": "#f2f8f0", "color-success-500": "#6aaf35", "color-success-600": "#1d8102", + "color-success-800": "#005c26", + "color-success-950": "#003311", "color-text-accent": "#0073bb", "color-text-action-card-disabled": "#879596", "color-text-avatar": "#ffffff", @@ -3448,11 +3508,15 @@ exports[`CSS Custom Properties match previous snapshot for mode "reduced-motion" "color-text-tutorial-hotspot-hover": "#0a4a74", "color-transparent": "transparent", "color-tree-view-connector-line": "#879596", + "color-warning-100": "#fffbbd", "color-warning-1000": "#191100", "color-warning-400": "#ffe347", "color-warning-50": "#fffef0", "color-warning-500": "#fbd332", + "color-warning-600": "#f2b100", + "color-warning-800": "#9e6900", "color-warning-900": "#906806", + "color-warning-950": "#573a00", "color-white": "#ffffff", "font-button-letter-spacing": "0.25px", "font-chart-detail-size": "14px", @@ -4170,11 +4234,14 @@ exports[`CSS Custom Properties match previous snapshot for mode "visual-refresh" "color-dropzone-border-hover": "#002b66", "color-dropzone-text-default": "#424650", "color-dropzone-text-hover": "#424650", + "color-error-100": "#ffe0e0", "color-error-1000": "#1f0000", "color-error-400": "#ff7a7a", "color-error-50": "#fff5f5", "color-error-600": "#db0000", + "color-error-800": "#990000", "color-error-900": "#700000", + "color-error-950": "#520000", "color-foreground-control-default": "#ffffff", "color-foreground-control-disabled": "#ffffff", "color-foreground-control-read-only": "#656871", @@ -4191,11 +4258,15 @@ exports[`CSS Custom Properties match previous snapshot for mode "visual-refresh" "color-icon-action-card-default": "#006ce0", "color-icon-action-card-disabled": "#b4b4bb", "color-icon-action-card-hover": "#002b66", + "color-info-100": "#d1f1ff", "color-info-1000": "#001129", "color-info-300": "#75cfff", "color-info-400": "#42b4ff", "color-info-50": "#f0fbff", "color-info-600": "#006ce0", + "color-info-700": "#004a9e", + "color-info-800": "#003b8f", + "color-info-950": "#00204d", "color-item-selected": "#006ce0", "color-neutral-100": "#f9f9fa", "color-neutral-1000": "#06080a", @@ -4228,6 +4299,7 @@ exports[`CSS Custom Properties match previous snapshot for mode "visual-refresh" "color-primary-700": "#004a9e", "color-primary-800": "#003b8f", "color-primary-900": "#002b66", + "color-primary-950": "#00204d", "color-purple-400": "#bf80ff", "color-purple-700": "#7300e5", "color-severity-dark-red": "#870303", @@ -4239,10 +4311,14 @@ exports[`CSS Custom Properties match previous snapshot for mode "visual-refresh" "color-shadow-side": "rgba(15, 20, 26, 0.12)", "color-shadow-toggle-handle": "rgba(0, 0, 0, 0.25)", "color-stroke-chart-line": "#8c8c94", + "color-success-100": "#d9ffd6", "color-success-1000": "#001401", + "color-success-400": "#00e500", "color-success-50": "#effff1", "color-success-500": "#2bb534", "color-success-600": "#00802f", + "color-success-800": "#005c26", + "color-success-950": "#003311", "color-text-accent": "#006ce0", "color-text-action-card-disabled": "#8c8c94", "color-text-avatar": "#ffffff", @@ -4375,11 +4451,15 @@ exports[`CSS Custom Properties match previous snapshot for mode "visual-refresh" "color-text-tutorial-hotspot-hover": "#002b66", "color-transparent": "transparent", "color-tree-view-connector-line": "#8c8c94", + "color-warning-100": "#fffbbd", "color-warning-1000": "#191100", "color-warning-400": "#ffe347", "color-warning-50": "#fffef0", "color-warning-500": "#fbd332", + "color-warning-600": "#f2b100", + "color-warning-800": "#9e6900", "color-warning-900": "#855900", + "color-warning-950": "#573a00", "color-white": "#ffffff", "font-button-letter-spacing": "0.005em", "font-chart-detail-size": "12px", @@ -5097,11 +5177,14 @@ exports[`CSS Custom Properties match previous snapshot for mode "visual-refresh- "color-dropzone-border-hover": "#002b66", "color-dropzone-text-default": "#424650", "color-dropzone-text-hover": "#424650", + "color-error-100": "#ffe0e0", "color-error-1000": "#1f0000", "color-error-400": "#ff7a7a", "color-error-50": "#fff5f5", "color-error-600": "#db0000", + "color-error-800": "#990000", "color-error-900": "#700000", + "color-error-950": "#520000", "color-foreground-control-default": "#ffffff", "color-foreground-control-disabled": "#ffffff", "color-foreground-control-read-only": "#656871", @@ -5118,11 +5201,15 @@ exports[`CSS Custom Properties match previous snapshot for mode "visual-refresh- "color-icon-action-card-default": "#006ce0", "color-icon-action-card-disabled": "#b4b4bb", "color-icon-action-card-hover": "#002b66", + "color-info-100": "#d1f1ff", "color-info-1000": "#001129", "color-info-300": "#75cfff", "color-info-400": "#42b4ff", "color-info-50": "#f0fbff", "color-info-600": "#006ce0", + "color-info-700": "#004a9e", + "color-info-800": "#003b8f", + "color-info-950": "#00204d", "color-item-selected": "#006ce0", "color-neutral-100": "#f9f9fa", "color-neutral-1000": "#06080a", @@ -5155,6 +5242,7 @@ exports[`CSS Custom Properties match previous snapshot for mode "visual-refresh- "color-primary-700": "#004a9e", "color-primary-800": "#003b8f", "color-primary-900": "#002b66", + "color-primary-950": "#00204d", "color-purple-400": "#bf80ff", "color-purple-700": "#7300e5", "color-severity-dark-red": "#870303", @@ -5166,10 +5254,14 @@ exports[`CSS Custom Properties match previous snapshot for mode "visual-refresh- "color-shadow-side": "rgba(15, 20, 26, 0.12)", "color-shadow-toggle-handle": "rgba(0, 0, 0, 0.25)", "color-stroke-chart-line": "#8c8c94", + "color-success-100": "#d9ffd6", "color-success-1000": "#001401", + "color-success-400": "#00e500", "color-success-50": "#effff1", "color-success-500": "#2bb534", "color-success-600": "#00802f", + "color-success-800": "#005c26", + "color-success-950": "#003311", "color-text-accent": "#006ce0", "color-text-action-card-disabled": "#8c8c94", "color-text-avatar": "#ffffff", @@ -5302,11 +5394,15 @@ exports[`CSS Custom Properties match previous snapshot for mode "visual-refresh- "color-text-tutorial-hotspot-hover": "#002b66", "color-transparent": "transparent", "color-tree-view-connector-line": "#8c8c94", + "color-warning-100": "#fffbbd", "color-warning-1000": "#191100", "color-warning-400": "#ffe347", "color-warning-50": "#fffef0", "color-warning-500": "#fbd332", + "color-warning-600": "#f2b100", + "color-warning-800": "#9e6900", "color-warning-900": "#855900", + "color-warning-950": "#573a00", "color-white": "#ffffff", "font-button-letter-spacing": "0.005em", "font-chart-detail-size": "12px", @@ -6024,11 +6120,14 @@ exports[`CSS Custom Properties match previous snapshot for mode "visual-refresh- "color-dropzone-border-hover": "#75cfff", "color-dropzone-text-default": "#c6c6cd", "color-dropzone-text-hover": "#c6c6cd", + "color-error-100": "#ffe0e0", "color-error-1000": "#1f0000", "color-error-400": "#ff7a7a", "color-error-50": "#fff5f5", "color-error-600": "#db0000", + "color-error-800": "#990000", "color-error-900": "#700000", + "color-error-950": "#520000", "color-foreground-control-default": "#0f141a", "color-foreground-control-disabled": "#161d26", "color-foreground-control-read-only": "#a4a4ad", @@ -6045,11 +6144,15 @@ exports[`CSS Custom Properties match previous snapshot for mode "visual-refresh- "color-icon-action-card-default": "#42b4ff", "color-icon-action-card-disabled": "#656871", "color-icon-action-card-hover": "#75cfff", + "color-info-100": "#d1f1ff", "color-info-1000": "#001129", "color-info-300": "#75cfff", "color-info-400": "#42b4ff", "color-info-50": "#f0fbff", "color-info-600": "#006ce0", + "color-info-700": "#004a9e", + "color-info-800": "#003b8f", + "color-info-950": "#00204d", "color-item-selected": "#42b4ff", "color-neutral-100": "#f9f9fa", "color-neutral-1000": "#06080a", @@ -6082,6 +6185,7 @@ exports[`CSS Custom Properties match previous snapshot for mode "visual-refresh- "color-primary-700": "#004a9e", "color-primary-800": "#003b8f", "color-primary-900": "#002b66", + "color-primary-950": "#00204d", "color-purple-400": "#bf80ff", "color-purple-700": "#7300e5", "color-severity-dark-red": "#870303", @@ -6093,10 +6197,14 @@ exports[`CSS Custom Properties match previous snapshot for mode "visual-refresh- "color-shadow-side": "rgba(15, 20, 26, 1)", "color-shadow-toggle-handle": "rgba(0, 0, 0, 0.25)", "color-stroke-chart-line": "#8c8c94", + "color-success-100": "#d9ffd6", "color-success-1000": "#001401", + "color-success-400": "#00e500", "color-success-50": "#effff1", "color-success-500": "#2bb534", "color-success-600": "#00802f", + "color-success-800": "#005c26", + "color-success-950": "#003311", "color-text-accent": "#42b4ff", "color-text-action-card-disabled": "#8c8c94", "color-text-avatar": "#ffffff", @@ -6229,11 +6337,15 @@ exports[`CSS Custom Properties match previous snapshot for mode "visual-refresh- "color-text-tutorial-hotspot-hover": "#75cfff", "color-transparent": "transparent", "color-tree-view-connector-line": "#dedee3", + "color-warning-100": "#fffbbd", "color-warning-1000": "#191100", "color-warning-400": "#ffe347", "color-warning-50": "#fffef0", "color-warning-500": "#fbd332", + "color-warning-600": "#f2b100", + "color-warning-800": "#9e6900", "color-warning-900": "#855900", + "color-warning-950": "#573a00", "color-white": "#ffffff", "font-button-letter-spacing": "0.005em", "font-chart-detail-size": "12px", @@ -6951,11 +7063,14 @@ exports[`CSS Custom Properties match previous snapshot for mode "visual-refresh- "color-dropzone-border-hover": "#75cfff", "color-dropzone-text-default": "#c6c6cd", "color-dropzone-text-hover": "#c6c6cd", + "color-error-100": "#ffe0e0", "color-error-1000": "#1f0000", "color-error-400": "#ff7a7a", "color-error-50": "#fff5f5", "color-error-600": "#db0000", + "color-error-800": "#990000", "color-error-900": "#700000", + "color-error-950": "#520000", "color-foreground-control-default": "#0f141a", "color-foreground-control-disabled": "#161d26", "color-foreground-control-read-only": "#a4a4ad", @@ -6972,11 +7087,15 @@ exports[`CSS Custom Properties match previous snapshot for mode "visual-refresh- "color-icon-action-card-default": "#42b4ff", "color-icon-action-card-disabled": "#656871", "color-icon-action-card-hover": "#75cfff", + "color-info-100": "#d1f1ff", "color-info-1000": "#001129", "color-info-300": "#75cfff", "color-info-400": "#42b4ff", "color-info-50": "#f0fbff", "color-info-600": "#006ce0", + "color-info-700": "#004a9e", + "color-info-800": "#003b8f", + "color-info-950": "#00204d", "color-item-selected": "#42b4ff", "color-neutral-100": "#f9f9fa", "color-neutral-1000": "#06080a", @@ -7009,6 +7128,7 @@ exports[`CSS Custom Properties match previous snapshot for mode "visual-refresh- "color-primary-700": "#004a9e", "color-primary-800": "#003b8f", "color-primary-900": "#002b66", + "color-primary-950": "#00204d", "color-purple-400": "#bf80ff", "color-purple-700": "#7300e5", "color-severity-dark-red": "#d63f38", @@ -7020,10 +7140,14 @@ exports[`CSS Custom Properties match previous snapshot for mode "visual-refresh- "color-shadow-side": "rgba(15, 20, 26, 1)", "color-shadow-toggle-handle": "rgba(0, 0, 0, 0.25)", "color-stroke-chart-line": "#8c8c94", + "color-success-100": "#d9ffd6", "color-success-1000": "#001401", + "color-success-400": "#00e500", "color-success-50": "#effff1", "color-success-500": "#2bb534", "color-success-600": "#00802f", + "color-success-800": "#005c26", + "color-success-950": "#003311", "color-text-accent": "#42b4ff", "color-text-action-card-disabled": "#8c8c94", "color-text-avatar": "#ffffff", @@ -7156,11 +7280,15 @@ exports[`CSS Custom Properties match previous snapshot for mode "visual-refresh- "color-text-tutorial-hotspot-hover": "#75cfff", "color-transparent": "transparent", "color-tree-view-connector-line": "#dedee3", + "color-warning-100": "#fffbbd", "color-warning-1000": "#191100", "color-warning-400": "#ffe347", "color-warning-50": "#fffef0", "color-warning-500": "#fbd332", + "color-warning-600": "#f2b100", + "color-warning-800": "#9e6900", "color-warning-900": "#855900", + "color-warning-950": "#573a00", "color-white": "#ffffff", "font-button-letter-spacing": "0.005em", "font-chart-detail-size": "12px", diff --git a/src/__tests__/snapshot-tests/__snapshots__/documenter.test.ts.snap b/src/__tests__/snapshot-tests/__snapshots__/documenter.test.ts.snap index 348cce27f5..342ac6cb0d 100644 --- a/src/__tests__/snapshot-tests/__snapshots__/documenter.test.ts.snap +++ b/src/__tests__/snapshot-tests/__snapshots__/documenter.test.ts.snap @@ -5106,6 +5106,100 @@ Override the HTML tag by using property \`tagOverride\`.", "optional": true, "type": "string", }, + { + "description": "Renders the box as a visual accent wrapper to emphasize its content. + +Setting this property activates the accent styling: a coordinated background and content +color combination that works in both light and dark modes. A \`variant\` is not required to +activate the accent. The accent styling is applied on top of the element determined by +\`variant\` (or \`tagOverride\`), so the rendered HTML tag is unaffected. + +The object accepts the following fields: +- \`color\` (required) — the coordinated background and foreground color pair. The foreground + color is applied as the wrapper's CSS \`color\`, so it only affects content that inherits + the current color (for example an \`Icon\`, or a nested \`Box\` with \`color="inherit"\`). + Content that sets its own color is not overridden. +- \`aspectRatio\` — \`auto\` (default) lets the wrapper's width follow its content; + \`equal\` forces equal width and height, suitable for wrapping icons. +- \`borderRadius\` — the corner rounding applied to the wrapper, using a t-shirt size keyword + from the Box spacing scale (\`xxxs\`, \`xxs\`, \`xs\`, \`s\`, \`m\`, \`l\`, \`xl\`, \`xxl\`, \`xxxl\`), or + \`full\` for fully rounded corners. When not set, the wrapper has no border radius. Set it to + \`full\` together with \`aspectRatio: 'equal'\` to render a circle. + +Composes with existing Box props such as \`padding\` and \`margin\`.", + "inlineType": { + "name": "BoxProps.VisualAccent", + "properties": [ + { + "inlineType": { + "name": "BoxProps.VisualAccent.AspectRatio", + "type": "union", + "values": [ + "auto", + "equal", + ], + }, + "name": "aspectRatio", + "optional": true, + "type": "string", + }, + { + "inlineType": { + "name": "BoxProps.VisualAccent.BorderRadius", + "type": "union", + "values": [ + "s", + "full", + "m", + "xxxs", + "xxs", + "xs", + "l", + "xl", + "xxl", + "xxxl", + ], + }, + "name": "borderRadius", + "optional": true, + "type": "string", + }, + { + "inlineType": { + "name": "BoxProps.VisualAccent.Color", + "type": "union", + "values": [ + "blue", + "cyan", + "fuchsia", + "green", + "grey", + "indigo", + "lime", + "magenta", + "orange", + "pink", + "purple", + "red", + "teal", + "violet", + "yellow", + "mint", + "rose", + "amber", + ], + }, + "name": "color", + "optional": false, + "type": "string", + }, + ], + "type": "object", + }, + "name": "visualAccent", + "optional": true, + "type": "BoxProps.VisualAccent", + }, ], "regions": [ { diff --git a/src/box/__tests__/box.test.tsx b/src/box/__tests__/box.test.tsx index 1db48d5d10..47d9a9bb8b 100644 --- a/src/box/__tests__/box.test.tsx +++ b/src/box/__tests__/box.test.tsx @@ -174,4 +174,95 @@ describe('Box', () => { expect(container.firstChild).toHaveClass('additional-class'); }); }); + + describe('visualAccent property', () => { + test('renders the default div tag when no variant is set', () => { + const boxWrapper = renderBox({ visualAccent: { color: 'indigo' } }); + expect(boxWrapper.getElement().tagName).toBe('DIV'); + }); + + test('preserves the variant tag when combined with visualAccent', () => { + const boxWrapper = renderBox({ variant: 'h4', visualAccent: { color: 'indigo' } }); + expect(boxWrapper.getElement().tagName).toBe('H4'); + }); + + test('applies the base visual-accent class', () => { + const boxWrapper = renderBox({ visualAccent: { color: 'indigo' } }); + expect(boxWrapper.getElement()).toHaveClass(styles['visual-accent']); + }); + + test('applies the correct color class', () => { + const colors: Array = [ + 'red', + 'yellow', + 'indigo', + 'green', + 'orange', + 'purple', + 'mint', + 'lime', + 'grey', + ]; + colors.forEach(color => { + const boxWrapper = renderBox({ visualAccent: { color } }); + expect(boxWrapper.getElement()).toHaveClass(styles[`visual-accent-${color}`]); + }); + }); + + test('does not apply any accent class when visualAccent is not set', () => { + const boxWrapper = renderBox({}); + const element = boxWrapper.getElement(); + expect(element.className).not.toMatch(/visual-accent/); + expect(element.tagName).toBe('DIV'); + }); + + test('defaults to the auto aspect ratio', () => { + const boxWrapper = renderBox({ visualAccent: { color: 'indigo' } }); + expect(boxWrapper.getElement()).toHaveClass(styles['visual-accent-aspect-auto']); + }); + + test('applies the correct aspect ratio class', () => { + const aspectRatios: Array = ['auto', 'equal']; + aspectRatios.forEach(aspectRatio => { + const boxWrapper = renderBox({ visualAccent: { color: 'indigo', aspectRatio } }); + expect(boxWrapper.getElement()).toHaveClass(styles[`visual-accent-aspect-${aspectRatio}`]); + }); + }); + + test('applies the correct class for each borderRadius keyword', () => { + const keywords: Array = [ + 'xxxs', + 'xxs', + 'xs', + 's', + 'm', + 'l', + 'xl', + 'xxl', + 'xxxl', + 'full', + ]; + keywords.forEach(borderRadius => { + const boxWrapper = renderBox({ visualAccent: { color: 'indigo', borderRadius } }); + expect(boxWrapper.getElement()).toHaveClass(styles[`visual-accent-radius-${borderRadius}`]); + }); + }); + + test('does not set a borderRadius class when borderRadius is not set', () => { + const boxWrapper = renderBox({ visualAccent: { color: 'indigo' } }); + expect(boxWrapper.getElement().className).not.toMatch(/visual-accent-radius-/); + }); + + test('renders a circle when combining equal aspect ratio and full borderRadius', () => { + const boxWrapper = renderBox({ visualAccent: { color: 'indigo', aspectRatio: 'equal', borderRadius: 'full' } }); + const element = boxWrapper.getElement(); + expect(element).toHaveClass(styles['visual-accent-aspect-equal']); + expect(element).toHaveClass(styles['visual-accent-radius-full']); + }); + + test('tagOverride works with visualAccent', () => { + const boxWrapper = renderBox({ visualAccent: { color: 'indigo' }, tagOverride: 'div' }); + expect(boxWrapper.getElement().tagName).toBe('DIV'); + }); + }); }); diff --git a/src/box/interfaces.ts b/src/box/interfaces.ts index a6acb96ee9..ce250a3604 100644 --- a/src/box/interfaces.ts +++ b/src/box/interfaces.ts @@ -23,6 +23,29 @@ export interface BoxProps extends BaseComponentProps { * Override the HTML tag by using property `tagOverride`. */ variant?: BoxProps.Variant; + /** + * Renders the box as a visual accent wrapper to emphasize its content. + * + * Setting this property activates the accent styling: a coordinated background and content + * color combination that works in both light and dark modes. A `variant` is not required to + * activate the accent. The accent styling is applied on top of the element determined by + * `variant` (or `tagOverride`), so the rendered HTML tag is unaffected. + * + * The object accepts the following fields: + * - `color` (required) — the coordinated background and foreground color pair. The foreground + * color is applied as the wrapper's CSS `color`, so it only affects content that inherits + * the current color (for example an `Icon`, or a nested `Box` with `color="inherit"`). + * Content that sets its own color is not overridden. + * - `aspectRatio` — `auto` (default) lets the wrapper's width follow its content; + * `equal` forces equal width and height, suitable for wrapping icons. + * - `borderRadius` — the corner rounding applied to the wrapper, using a t-shirt size keyword + * from the Box spacing scale (`xxxs`, `xxs`, `xs`, `s`, `m`, `l`, `xl`, `xxl`, `xxxl`), or + * `full` for fully rounded corners. When not set, the wrapper has no border radius. Set it to + * `full` together with `aspectRatio: 'equal'` to render a circle. + * + * Composes with existing Box props such as `padding` and `margin`. + */ + visualAccent?: BoxProps.VisualAccent; /** * Overrides the default HTML tag provided by the variant. */ @@ -156,6 +179,62 @@ export namespace BoxProps { | 'awsui-value-large' | 'awsui-inline-code'; + export interface VisualAccent { + /** + * The coordinated background and foreground color pair applied to the accent wrapper. + * Each color works in both light and dark modes. + * + * The background color is applied directly to the wrapper. The foreground color is applied + * as the wrapper's CSS `color` and is therefore only picked up by content that inherits the + * current color, such as an `Icon` or a nested `Box` with `color="inherit"`. Content that + * defines its own color (for example a `Box` with an explicit `color`, or a `Link`) keeps that + * color and is not recolored by the accent. + */ + color: BoxProps.VisualAccent.Color; + /** + * Controls the aspect ratio of the accent wrapper. + * + * - `auto` (default) — the wrapper's width follows its content. + * - `equal` — the wrapper has equal width and height, suitable for wrapping icons. + * + * Combine `aspectRatio: 'equal'` with `borderRadius: 'full'` to render a circle. + */ + aspectRatio?: BoxProps.VisualAccent.AspectRatio; + /** + * The corner rounding applied to the accent wrapper. When not set, the wrapper has no + * border radius. + * + * Use one of the curated t-shirt size keywords, which map to the same spacing scale used by + * `padding` and `margin`: `xxxs`, `xxs`, `xs`, `s`, `m`, `l`, `xl`, `xxl`, or `xxxl`. Use + * `full` for fully rounded corners; combine it with `aspectRatio: 'equal'` to render a circle. + */ + borderRadius?: BoxProps.VisualAccent.BorderRadius; + } + + export namespace VisualAccent { + export type Color = + | 'red' + | 'yellow' + | 'indigo' + | 'green' + | 'orange' + | 'purple' + | 'mint' + | 'lime' + | 'grey' + | 'teal' + | 'cyan' + | 'blue' + | 'violet' + | 'fuchsia' + | 'magenta' + | 'pink' + | 'rose' + | 'amber'; + export type AspectRatio = 'auto' | 'equal'; + export type BorderRadius = 'xxxs' | 'xxs' | 'xs' | 's' | 'm' | 'l' | 'xl' | 'xxl' | 'xxxl' | 'full'; + } + export type Display = 'block' | 'inline' | 'inline-block' | 'none'; export type TextAlign = 'left' | 'center' | 'right'; export type Float = 'left' | 'right'; diff --git a/src/box/internal.tsx b/src/box/internal.tsx index b8391b6eb3..3b31a87011 100644 --- a/src/box/internal.tsx +++ b/src/box/internal.tsx @@ -23,6 +23,7 @@ export default function InternalBox({ fontSize, fontWeight, color, + visualAccent, children, nativeAttributes, __internalRootRef, @@ -32,11 +33,17 @@ export default function InternalBox({ const marginsClassNamesSuffices = getClassNamesSuffixes(margin); const paddingsClassNamesSuffices = getClassNamesSuffixes(padding); + const accentAspectRatio = visualAccent?.aspectRatio ?? 'auto'; + const className = clsx( baseProps.className, styles.root, styles.box, styles[`${variant.replace(/^awsui-/, '')}-variant`], + visualAccent && styles['visual-accent'], + visualAccent && styles[`visual-accent-${visualAccent.color}`], + visualAccent && styles[`visual-accent-aspect-${accentAspectRatio}`], + visualAccent?.borderRadius && styles[`visual-accent-radius-${visualAccent.borderRadius}`], marginsClassNamesSuffices.map(suffix => styles[`m-${suffix}`]), paddingsClassNamesSuffices.map(suffix => styles[`p-${suffix}`]), styles[`d-${display}`], diff --git a/src/box/styles.scss b/src/box/styles.scss index 02596c3049..789004f659 100644 --- a/src/box/styles.scss +++ b/src/box/styles.scss @@ -6,6 +6,7 @@ @use '../internal/styles' as styles; @use './text'; @use './layout'; +@use './visual-accent'; .root { @include styles.default-text-style; diff --git a/src/box/visual-accent.scss b/src/box/visual-accent.scss new file mode 100644 index 0000000000..7226c7c49e --- /dev/null +++ b/src/box/visual-accent.scss @@ -0,0 +1,117 @@ +/* + Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + SPDX-License-Identifier: Apache-2.0 +*/ + +@use 'sass:map'; +@use 'sass:meta'; +@use '../internal/styles/tokens' as awsui; + +// T-shirt size keywords mirror the Box spacing scale (see spacing.scss). +// `full` renders fully rounded corners (a circle when combined with `aspectRatio: 'equal'`). +$accent-radii: ( + 'xxxs': awsui.$space-xxxs, + 'xxs': awsui.$space-xxs, + 'xs': awsui.$space-xs, + 's': awsui.$space-s, + 'm': awsui.$space-m, + 'l': awsui.$space-l, + 'xl': awsui.$space-xl, + 'xxl': awsui.$space-xxl, + 'xxxl': awsui.$space-xxxl, + 'full': 50%, +); + +@mixin accent-radius($value) { + border-start-start-radius: $value; + border-start-end-radius: $value; + border-end-start-radius: $value; + border-end-end-radius: $value; +} + +// ─── Base visual accent container ───────────────────────────────────────────── +// Applied whenever the `visualAccent` prop is set. Provides the container layout. Corners are +// square by default; the `.visual-accent-radius-*` classes below apply corner rounding for the +// curated `borderRadius` keywords. +.visual-accent { + display: inline-flex; + align-items: center; + justify-content: center; + padding-block: awsui.$space-xxs; + padding-inline: awsui.$space-xs; + box-sizing: border-box; +} + +// ─── Accent border radius (t-shirt size keywords) ───────────────────────────── +// Mirror the Box spacing scale so `borderRadius` keywords align with `padding` / `margin`. +@each $name, $value in $accent-radii { + .visual-accent-radius-#{$name} { + @include accent-radius($value); + } +} + +// ─── Accent aspect ratio ────────────────────────────────────────────────────── +// `auto` — default; the container's width follows its content. +// `equal` — equal width and height, suitable for icon wrapping. Combine with +// `borderRadius: 'full'` to render a circle. + +.visual-accent-aspect-auto { + // Reset any square constraints so content can size the container naturally. + aspect-ratio: auto; + inline-size: auto; +} + +.visual-accent-aspect-equal { + // Equal padding on all sides. + padding-block: awsui.$space-xs; + padding-inline: awsui.$space-xs; + // Force the element to be a square regardless of content dimensions. + // The width is constrained to match the height (content + padding). + aspect-ratio: 1 / 1; + // Prevent content from stretching the box wider than tall. + overflow: hidden; + // Let the box shrink-wrap to its height, width follows via aspect-ratio. + inline-size: fit-content; +} + +// ─── Accent colors ────────────────────────────────────────────────────────────── +// Light/dark values are resolved by the design tokens, so no explicit dark-mode +// overrides are needed here. +// +// The selectors chain the `.visual-accent` base class with the `.visual-accent-{color}` +// modifier (both are always applied together whenever `visualAccent` is set) to reach a +// specificity of (0,3,0). This intentionally beats the `color` prop's `.box.color-*` +// selector (0,2,0) so the accent's coordinated foreground color always wins, regardless of +// stylesheet source order. Winning here preserves the guaranteed background/foreground color +// contrast of the accent pair. Descendants (nested Box, Icon) inherit this color. +// +// Token variables are looked up dynamically from the tokens module, so adding a color only +// requires extending `$accent-colors`. +$accent-colors: ( + 'red', + 'yellow', + 'indigo', + 'green', + 'orange', + 'purple', + 'mint', + 'lime', + 'grey', + 'teal', + 'cyan', + 'blue', + 'violet', + 'fuchsia', + 'magenta', + 'pink', + 'rose', + 'amber' +); +$tokens: meta.module-variables('awsui'); + +@each $accent in $accent-colors { + .box.visual-accent.visual-accent-#{$accent} { + background-color: map.get($tokens, 'color-background-accent-#{$accent}'); + color: map.get($tokens, 'color-text-accent-#{$accent}'); + } +} diff --git a/style-dictionary/utils/token-names.ts b/style-dictionary/utils/token-names.ts index 5106958a6e..54c95afe42 100644 --- a/style-dictionary/utils/token-names.ts +++ b/style-dictionary/utils/token-names.ts @@ -608,6 +608,24 @@ export type ColorsTokenName = | 'colorBackgroundNotificationStackBar' | 'colorBackgroundNotificationStackBarActive' | 'colorBackgroundNotificationStackBarHover' + | 'colorBackgroundAccentRed' + | 'colorBackgroundAccentYellow' + | 'colorBackgroundAccentIndigo' + | 'colorBackgroundAccentGreen' + | 'colorBackgroundAccentOrange' + | 'colorBackgroundAccentPurple' + | 'colorBackgroundAccentMint' + | 'colorBackgroundAccentLime' + | 'colorBackgroundAccentGrey' + | 'colorBackgroundAccentTeal' + | 'colorBackgroundAccentCyan' + | 'colorBackgroundAccentBlue' + | 'colorBackgroundAccentViolet' + | 'colorBackgroundAccentFuchsia' + | 'colorBackgroundAccentMagenta' + | 'colorBackgroundAccentPink' + | 'colorBackgroundAccentRose' + | 'colorBackgroundAccentAmber' | 'colorBackgroundPopover' | 'colorBackgroundProgressBarValueDefault' | 'colorBackgroundProgressBarDefault' @@ -732,6 +750,24 @@ export type ColorsTokenName = | 'colorStrokeCodeEditorGutterActiveLineDefault' | 'colorStrokeCodeEditorGutterActiveLineHover' | 'colorTextAccent' + | 'colorTextAccentRed' + | 'colorTextAccentYellow' + | 'colorTextAccentIndigo' + | 'colorTextAccentGreen' + | 'colorTextAccentOrange' + | 'colorTextAccentPurple' + | 'colorTextAccentMint' + | 'colorTextAccentLime' + | 'colorTextAccentGrey' + | 'colorTextAccentTeal' + | 'colorTextAccentCyan' + | 'colorTextAccentBlue' + | 'colorTextAccentViolet' + | 'colorTextAccentFuchsia' + | 'colorTextAccentMagenta' + | 'colorTextAccentPink' + | 'colorTextAccentRose' + | 'colorTextAccentAmber' | 'colorTextBodyDefault' | 'colorTextBodySecondary' | 'colorTextBreadcrumbCurrent' diff --git a/style-dictionary/visual-refresh/color-palette.ts b/style-dictionary/visual-refresh/color-palette.ts index b9c75b7770..d6a4dc1a4b 100644 --- a/style-dictionary/visual-refresh/color-palette.ts +++ b/style-dictionary/visual-refresh/color-palette.ts @@ -68,6 +68,87 @@ const tokens: StyleDictionary.ColorPaletteDictionary = { 'colorPurple700', 'colorAmber400', 'colorAmber500', + 'colorRed950', + 'colorOrange50', + 'colorOrange100', + 'colorOrange400', + 'colorOrange700', + 'colorOrange800', + 'colorOrange950', + 'colorYellow600', + 'colorYellow950', + 'colorLime50', + 'colorLime100', + 'colorLime400', + 'colorLime700', + 'colorLime800', + 'colorLime950', + 'colorGreen400', + 'colorGreen950', + 'colorMint50', + 'colorMint100', + 'colorMint400', + 'colorMint700', + 'colorMint800', + 'colorMint950', + 'colorIndigo50', + 'colorIndigo400', + 'colorIndigo600', + 'colorIndigo950', + 'colorPurple50', + 'colorPurple100', + 'colorPurple600', + 'colorPurple800', + 'colorPurple950', + // Additional visual accent hues (mirror base color primitives) + 'colorTeal50', + 'colorTeal100', + 'colorTeal400', + 'colorTeal700', + 'colorTeal800', + 'colorTeal950', + 'colorCyan50', + 'colorCyan100', + 'colorCyan400', + 'colorCyan700', + 'colorCyan800', + 'colorCyan950', + 'colorBlue950', + 'colorViolet50', + 'colorViolet100', + 'colorViolet400', + 'colorViolet700', + 'colorViolet800', + 'colorViolet950', + 'colorFuchsia50', + 'colorFuchsia100', + 'colorFuchsia400', + 'colorFuchsia700', + 'colorFuchsia800', + 'colorFuchsia950', + 'colorMagenta50', + 'colorMagenta100', + 'colorMagenta400', + 'colorMagenta700', + 'colorMagenta800', + 'colorMagenta950', + 'colorPink50', + 'colorPink100', + 'colorPink400', + 'colorPink700', + 'colorPink800', + 'colorPink950', + 'colorRose50', + 'colorRose100', + 'colorRose400', + 'colorRose700', + 'colorRose800', + 'colorRose950', + 'colorAmber50', + 'colorAmber100', + 'colorAmber700', + 'colorAmber800', + 'colorAmber950', 'colorAwsSquidInk', 'colorTransparent', 'colorBlack', @@ -89,6 +170,7 @@ const referenceTokens: ReferenceTokens = { 700: brand.colorBlue700, 800: brand.colorBlue800, 900: brand.colorBlue900, + 950: brand.colorBlue950, 1000: brand.colorBlue1000, }, neutral: { @@ -115,29 +197,44 @@ const referenceTokens: ReferenceTokens = { }, error: { 50: brand.colorRed50, + 100: brand.colorRed100, 400: brand.colorRed400, 600: brand.colorRed600, + 800: brand.colorRed800, 900: brand.colorRed900, + 950: brand.colorRed950, 1000: brand.colorRed1000, }, success: { 50: brand.colorGreen50, + 100: brand.colorGreen100, + 400: brand.colorGreen400, 500: brand.colorGreen500, 600: brand.colorGreen600, + 800: brand.colorGreen800, + 950: brand.colorGreen950, 1000: brand.colorGreen1000, }, warning: { 50: brand.colorYellow50, + 100: brand.colorYellow100, 400: brand.colorYellow400, 500: brand.colorYellow500, + 600: brand.colorYellow600, + 800: brand.colorYellow800, 900: brand.colorYellow900, + 950: brand.colorYellow950, 1000: brand.colorYellow1000, }, info: { 50: brand.colorBlue50, + 100: brand.colorBlue100, 300: brand.colorBlue300, 400: brand.colorBlue400, 600: brand.colorBlue600, + 700: brand.colorBlue700, + 800: brand.colorBlue800, + 950: brand.colorBlue950, 1000: brand.colorBlue1000, }, }, diff --git a/style-dictionary/visual-refresh/colors.ts b/style-dictionary/visual-refresh/colors.ts index 927657bff9..3ac0267871 100644 --- a/style-dictionary/visual-refresh/colors.ts +++ b/style-dictionary/visual-refresh/colors.ts @@ -370,6 +370,44 @@ const tokens: StyleDictionary.ColorsDictionary = { colorTextBadgeBlue: '{colorTextNotificationDefault}', colorTextBadgeRed: '{colorTextNotificationDefault}', colorBackgroundCodeView: { light: '#f8f8f8', dark: '#282c34' }, + + // ── Visual accent ─────────────────────────────────── + colorBackgroundAccentRed: { light: '{colorError100}', dark: 'rgba(255, 61, 61, 0.2)' }, + colorBackgroundAccentYellow: { light: '{colorWarning100}', dark: 'rgba(251, 211, 50, 0.2)' }, + colorBackgroundAccentIndigo: { light: '{colorInfo100}', dark: 'rgba(0, 153, 255, 0.2)' }, + colorBackgroundAccentGreen: { light: '{colorSuccess100}', dark: 'rgba(43, 181, 52, 0.2)' }, + colorBackgroundAccentOrange: { light: '{colorOrange100}', dark: 'rgba(255, 75, 20, 0.2)' }, + colorBackgroundAccentPurple: { light: '{colorPurple100}', dark: 'rgba(173, 92, 255, 0.2)' }, + colorBackgroundAccentMint: { light: '{colorMint100}', dark: 'rgba(0, 189, 107, 0.2)' }, + colorBackgroundAccentLime: { light: '{colorLime100}', dark: 'rgba(49, 184, 0, 0.2)' }, + colorBackgroundAccentGrey: { light: '{colorNeutral250}', dark: '{colorNeutral700}' }, + colorBackgroundAccentTeal: { light: '{colorTeal100}', dark: 'rgba(0, 173, 162, 0.2)' }, + colorBackgroundAccentCyan: { light: '{colorCyan100}', dark: 'rgba(0, 164, 189, 0.2)' }, + colorBackgroundAccentBlue: { light: '{colorInfo100}', dark: 'rgba(0, 153, 255, 0.2)' }, + colorBackgroundAccentViolet: { light: '{colorViolet100}', dark: 'rgba(133, 117, 255, 0.2)' }, + colorBackgroundAccentFuchsia: { light: '{colorFuchsia100}', dark: 'rgba(228, 51, 255, 0.2)' }, + colorBackgroundAccentMagenta: { light: '{colorMagenta100}', dark: 'rgba(255, 26, 224, 0.2)' }, + colorBackgroundAccentPink: { light: '{colorPink100}', dark: 'rgba(255, 51, 153, 0.2)' }, + colorBackgroundAccentRose: { light: '{colorRose100}', dark: 'rgba(255, 56, 106, 0.2)' }, + colorBackgroundAccentAmber: { light: '{colorAmber100}', dark: 'rgba(250, 111, 0, 0.2)' }, + colorTextAccentRed: { light: '{colorError800}', dark: '{colorError400}' }, + colorTextAccentYellow: { light: '{colorWarning900}', dark: '{colorWarning400}' }, + colorTextAccentIndigo: { light: '{colorInfo800}', dark: '{colorInfo400}' }, + colorTextAccentGreen: { light: '{colorSuccess800}', dark: '{colorSuccess400}' }, + colorTextAccentOrange: { light: '{colorOrange800}', dark: '{colorOrange400}' }, + colorTextAccentPurple: { light: '{colorPurple800}', dark: '{colorPurple400}' }, + colorTextAccentMint: { light: '{colorMint800}', dark: '{colorMint400}' }, + colorTextAccentLime: { light: '{colorLime800}', dark: '{colorLime400}' }, + colorTextAccentGrey: { light: '{colorNeutral800}', dark: '{colorNeutral300}' }, + colorTextAccentTeal: { light: '{colorTeal800}', dark: '{colorTeal400}' }, + colorTextAccentCyan: { light: '{colorCyan800}', dark: '{colorCyan400}' }, + colorTextAccentBlue: { light: '{colorInfo800}', dark: '{colorInfo400}' }, + colorTextAccentViolet: { light: '{colorViolet800}', dark: '{colorViolet400}' }, + colorTextAccentFuchsia: { light: '{colorFuchsia800}', dark: '{colorFuchsia400}' }, + colorTextAccentMagenta: { light: '{colorMagenta800}', dark: '{colorMagenta400}' }, + colorTextAccentPink: { light: '{colorPink800}', dark: '{colorPink400}' }, + colorTextAccentRose: { light: '{colorRose800}', dark: '{colorRose400}' }, + colorTextAccentAmber: { light: '{colorAmber800}', dark: '{colorAmber400}' }, }; const expandedTokens: StyleDictionary.ExpandedColorScopeDictionary = expandColorDictionary(tokens); diff --git a/style-dictionary/visual-refresh/metadata/colors.ts b/style-dictionary/visual-refresh/metadata/colors.ts index 35e79814da..eea88bad69 100644 --- a/style-dictionary/visual-refresh/metadata/colors.ts +++ b/style-dictionary/visual-refresh/metadata/colors.ts @@ -276,6 +276,186 @@ const metadata: StyleDictionary.MetadataIndex = { public: true, themeable: true, }, + colorBackgroundAccentRed: { + description: 'The background color of the red accent in the Box `awsui-accent` variant.', + public: false, + themeable: false, + }, + colorBackgroundAccentYellow: { + description: 'The background color of the yellow accent in the Box `awsui-accent` variant.', + public: false, + themeable: false, + }, + colorBackgroundAccentIndigo: { + description: 'The background color of the indigo accent in the Box `awsui-accent` variant.', + public: false, + themeable: false, + }, + colorBackgroundAccentGreen: { + description: 'The background color of the green accent in the Box `awsui-accent` variant.', + public: false, + themeable: false, + }, + colorBackgroundAccentOrange: { + description: 'The background color of the orange accent in the Box `awsui-accent` variant.', + public: false, + themeable: false, + }, + colorBackgroundAccentPurple: { + description: 'The background color of the purple accent in the Box `awsui-accent` variant.', + public: false, + themeable: false, + }, + colorBackgroundAccentMint: { + description: 'The background color of the mint accent in the Box `awsui-accent` variant.', + public: false, + themeable: false, + }, + colorBackgroundAccentLime: { + description: 'The background color of the lime accent in the Box `awsui-accent` variant.', + public: false, + themeable: false, + }, + colorBackgroundAccentGrey: { + description: 'The background color of the grey accent in the Box `awsui-accent` variant.', + public: false, + themeable: false, + }, + colorBackgroundAccentTeal: { + description: 'The background color of the teal accent in the Box `awsui-accent` variant.', + public: false, + themeable: false, + }, + colorBackgroundAccentCyan: { + description: 'The background color of the cyan accent in the Box `awsui-accent` variant.', + public: false, + themeable: false, + }, + colorBackgroundAccentBlue: { + description: 'The background color of the blue accent in the Box `awsui-accent` variant.', + public: false, + themeable: false, + }, + colorBackgroundAccentViolet: { + description: 'The background color of the violet accent in the Box `awsui-accent` variant.', + public: false, + themeable: false, + }, + colorBackgroundAccentFuchsia: { + description: 'The background color of the fuchsia accent in the Box `awsui-accent` variant.', + public: false, + themeable: false, + }, + colorBackgroundAccentMagenta: { + description: 'The background color of the magenta accent in the Box `awsui-accent` variant.', + public: false, + themeable: false, + }, + colorBackgroundAccentPink: { + description: 'The background color of the pink accent in the Box `awsui-accent` variant.', + public: false, + themeable: false, + }, + colorBackgroundAccentRose: { + description: 'The background color of the rose accent in the Box `awsui-accent` variant.', + public: false, + themeable: false, + }, + colorBackgroundAccentAmber: { + description: 'The background color of the amber accent in the Box `awsui-accent` variant.', + public: false, + themeable: false, + }, + colorTextAccentRed: { + description: 'The content color of the red accent in the Box `awsui-accent` variant.', + public: false, + themeable: false, + }, + colorTextAccentYellow: { + description: 'The content color of the yellow accent in the Box `awsui-accent` variant.', + public: false, + themeable: false, + }, + colorTextAccentIndigo: { + description: 'The content color of the indigo accent in the Box `awsui-accent` variant.', + public: false, + themeable: false, + }, + colorTextAccentGreen: { + description: 'The content color of the green accent in the Box `awsui-accent` variant.', + public: false, + themeable: false, + }, + colorTextAccentOrange: { + description: 'The content color of the orange accent in the Box `awsui-accent` variant.', + public: false, + themeable: false, + }, + colorTextAccentPurple: { + description: 'The content color of the purple accent in the Box `awsui-accent` variant.', + public: false, + themeable: false, + }, + colorTextAccentMint: { + description: 'The content color of the mint accent in the Box `awsui-accent` variant.', + public: false, + themeable: false, + }, + colorTextAccentLime: { + description: 'The content color of the lime accent in the Box `awsui-accent` variant.', + public: false, + themeable: false, + }, + colorTextAccentGrey: { + description: 'The content color of the grey accent in the Box `awsui-accent` variant.', + public: false, + themeable: false, + }, + colorTextAccentTeal: { + description: 'The content color of the teal accent in the Box `awsui-accent` variant.', + public: false, + themeable: false, + }, + colorTextAccentCyan: { + description: 'The content color of the cyan accent in the Box `awsui-accent` variant.', + public: false, + themeable: false, + }, + colorTextAccentBlue: { + description: 'The content color of the blue accent in the Box `awsui-accent` variant.', + public: false, + themeable: false, + }, + colorTextAccentViolet: { + description: 'The content color of the violet accent in the Box `awsui-accent` variant.', + public: false, + themeable: false, + }, + colorTextAccentFuchsia: { + description: 'The content color of the fuchsia accent in the Box `awsui-accent` variant.', + public: false, + themeable: false, + }, + colorTextAccentMagenta: { + description: 'The content color of the magenta accent in the Box `awsui-accent` variant.', + public: false, + themeable: false, + }, + colorTextAccentPink: { + description: 'The content color of the pink accent in the Box `awsui-accent` variant.', + public: false, + themeable: false, + }, + colorTextAccentRose: { + description: 'The content color of the rose accent in the Box `awsui-accent` variant.', + public: false, + themeable: false, + }, + colorTextAccentAmber: { + description: 'The content color of the amber accent in the Box `awsui-accent` variant.', + public: false, + themeable: false, + }, colorBackgroundPopover: { description: 'Background color for the popover container.', public: true,