Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore(styles/common): add borders to makeSdsSemanticAppTheme util #924

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
208 changes: 85 additions & 123 deletions packages/components/src/core/styles/common/SDSAppTheme.ts
Original file line number Diff line number Diff line change
Expand Up @@ -729,20 +729,6 @@ const sharedAppTheme: Omit<AppTheme, "colors" | "mode"> = {
},
};

/**
* Create a SDS App Theme with custom colors that follows the SDS color model.
*/
export const makeSdsSemanticAppTheme = (colors: Colors): AppTheme => ({
...sharedAppTheme,
colors,
});

export const SDSLightAppTheme: AppTheme =
makeSdsSemanticAppTheme(SDSLightThemeColors);

export const SDSDarkAppTheme: AppTheme =
makeSdsSemanticAppTheme(SDSDarkThemeColors);

// (mlila) whenever our theme uses colors, we need to make sure we allow consuming
// applications to override those colors using their own custom theme.
// By defining borders using SDSAppTheme.colors instead of defaultThemeColors,
Expand All @@ -752,118 +738,94 @@ export const SDSDarkAppTheme: AppTheme =
//
// (masoudmanson): We need to define borders separately for light and dark themes
// because the border colors are different for each theme.
SDSLightAppTheme.borders = {
accent: {
default: `1px solid ${SDSLightThemeColors.blue[500]}`,
focused: `1px solid ${SDSLightThemeColors.blue[500]}`,
hover: `1px solid ${SDSLightThemeColors.blue[600]}`,
open: `1px solid ${SDSLightThemeColors.blue[500]}`,
pressed: `1px solid ${SDSLightThemeColors.blue[700]}`,
selected: `1px solid ${SDSLightThemeColors.blue[500]}`,
},
base: {
default: `1px solid ${SDSLightThemeColors.gray[500]}`,
disabled: `1px solid ${SDSLightThemeColors.gray[300]}`,
divider: `1px solid ${SDSLightThemeColors.gray[200]}`,
dividerInverse: `1px solid ${SDSLightThemeColors.gray[600]}`,
hover: `1px solid ${SDSLightThemeColors.gray[900]}`,
inverse: `1px solid ${SDSLightThemeColors.gray[50]}`,
pressed: `1px solid ${SDSLightThemeColors.gray[900]}`,
table: `1px solid ${SDSLightThemeColors.gray[300]}`,
},
beta: {
default: `1px solid ${SDSLightThemeColors.purple[600]}`,
extraThick: `4px solid ${SDSLightThemeColors.purple[600]}`,
thick: `2px solid ${SDSLightThemeColors.purple[600]}`,
},
info: {
default: `1px solid ${SDSLightThemeColors.blue[600]}`,
extraThick: `4px solid ${SDSLightThemeColors.blue[600]}`,
thick: `2px solid ${SDSLightThemeColors.blue[600]}`,
},
link: {
dashed: `1px dashed`,
solid: `1px solid`,
},
negative: {
default: `1px solid ${SDSLightThemeColors.red[600]}`,
extraThick: `4px solid ${SDSLightThemeColors.red[600]}`,
thick: `2px solid ${SDSLightThemeColors.red[600]}`,
},
neutral: {
default: `1px solid ${SDSLightThemeColors.gray[500]}`,
extraThick: `4px solid ${SDSLightThemeColors.gray[500]}`,
thick: `2px solid ${SDSLightThemeColors.gray[500]}`,
},
none: "none",
notice: {
default: `1px solid ${SDSLightThemeColors.yellow[600]}`,
extraThick: `4px solid ${SDSLightThemeColors.yellow[600]}`,
thick: `2px solid ${SDSLightThemeColors.yellow[600]}`,
},
positive: {
default: `1px solid ${SDSLightThemeColors.green[600]}`,
extraThick: `4px solid ${SDSLightThemeColors.green[600]}`,
thick: `2px solid ${SDSLightThemeColors.green[600]}`,
},
};
const BorderThickness = {
default: 1,
thick: 2,
extraThick: 4,
} as const;

SDSDarkAppTheme.borders = {
accent: {
default: `1px solid ${SDSDarkThemeColors.blue[600]}`,
focused: `1px solid ${SDSDarkThemeColors.blue[600]}`,
hover: `1px solid ${SDSDarkThemeColors.blue[700]}`,
open: `1px solid ${SDSDarkThemeColors.blue[600]}`,
pressed: `1px solid ${SDSDarkThemeColors.blue[800]}`,
selected: `1px solid ${SDSDarkThemeColors.blue[600]}`,
},
base: {
default: `1px solid ${SDSDarkThemeColors.gray[500]}`,
disabled: `1px solid ${SDSDarkThemeColors.gray[300]}`,
divider: `1px solid ${SDSDarkThemeColors.gray[200]}`,
dividerInverse: `1px solid ${SDSDarkThemeColors.gray[600]}`,
hover: `1px solid ${SDSDarkThemeColors.gray[900]}`,
inverse: `1px solid ${SDSDarkThemeColors.gray[50]}`,
pressed: `1px solid ${SDSDarkThemeColors.gray[900]}`,
table: `1px solid ${SDSDarkThemeColors.gray[300]}`,
},
beta: {
default: `1px solid ${SDSDarkThemeColors.purple[600]}`,
extraThick: `4px solid ${SDSDarkThemeColors.purple[600]}`,
thick: `2px solid ${SDSDarkThemeColors.purple[600]}`,
},
info: {
default: `1px solid ${SDSDarkThemeColors.blue[600]}`,
extraThick: `4px solid ${SDSDarkThemeColors.blue[600]}`,
thick: `2px solid ${SDSDarkThemeColors.blue[600]}`,
},
link: {
dashed: `1px dashed`,
solid: `1px solid`,
},
negative: {
default: `1px solid ${SDSDarkThemeColors.red[600]}`,
extraThick: `4px solid ${SDSDarkThemeColors.red[600]}`,
thick: `2px solid ${SDSDarkThemeColors.red[600]}`,
},
neutral: {
default: `1px solid ${SDSDarkThemeColors.gray[500]}`,
extraThick: `4px solid ${SDSDarkThemeColors.gray[500]}`,
thick: `2px solid ${SDSDarkThemeColors.gray[500]}`,
},
none: "none",
notice: {
default: `1px solid ${SDSDarkThemeColors.yellow[600]}`,
extraThick: `4px solid ${SDSDarkThemeColors.yellow[600]}`,
thick: `2px solid ${SDSDarkThemeColors.yellow[600]}`,
},
positive: {
default: `1px solid ${SDSDarkThemeColors.green[600]}`,
extraThick: `4px solid ${SDSDarkThemeColors.green[600]}`,
thick: `2px solid ${SDSDarkThemeColors.green[600]}`,
},
export const createAppThemeBorders = (colors: Colors, isDarkMode: boolean) => {
const createSolidBorder = (
color: keyof Colors,
level: keyof Colors[keyof Colors],
thickness: keyof typeof BorderThickness
) => `${BorderThickness[thickness]}px solid ${colors[color][level]}`;

const createDashedBorder = () => `1px dashed`;

return {
accent: {
default: createSolidBorder('blue', isDarkMode ? 600 : 500, 'default'),
focused: createSolidBorder('blue', isDarkMode ? 600 : 500, 'default'),
hover: createSolidBorder('blue', isDarkMode ? 700 : 600, 'default'),
open: createSolidBorder('blue', isDarkMode ? 600 : 500, 'default'),
pressed: createSolidBorder('blue', isDarkMode ? 800 : 700, 'default'),
selected: createSolidBorder('blue', isDarkMode ? 600 : 500, 'default'),
},
base: {
default: createSolidBorder('gray', 500, 'default'),
disabled: createSolidBorder('gray', 300, 'default'),
divider: createSolidBorder('gray', 200, 'default'),
dividerInverse: createSolidBorder('gray', 600, 'default'),
hover: createSolidBorder('gray', 900, 'default'),
inverse: createSolidBorder('gray', 50, 'default'),
pressed: createSolidBorder('gray', 900, 'default'),
table: createSolidBorder('gray', 300, 'default'),
},
beta: {
default: createSolidBorder('purple', 600, 'default'),
extraThick: createSolidBorder('purple', 600, 'extraThick'),
thick: createSolidBorder('purple', 600, 'thick'),
},
info: {
default: createSolidBorder('blue', 600, 'default'),
extraThick: createSolidBorder('blue', 600, 'extraThick'),
thick: createSolidBorder('blue', 600, 'thick'),
},
link: {
dashed: createDashedBorder(),
solid: createSolidBorder('blue', 500, 'default'),
},
negative: {
default: createSolidBorder('red', 600, 'default'),
extraThick: createSolidBorder('red', 600, 'extraThick'),
thick: createSolidBorder('red', 600, 'thick'),
},
neutral: {
default: createSolidBorder('gray', 500, 'default'),
extraThick: createSolidBorder('gray', 500, 'extraThick'),
thick: createSolidBorder('gray', 500, 'thick'),
},
none: 'none',
notice: {
default: createSolidBorder('yellow', 600, 'default'),
extraThick: createSolidBorder('yellow', 600, 'extraThick'),
thick: createSolidBorder('yellow', 600, 'thick'),
},
positive: {
default: createSolidBorder('green', 600, 'default'),
extraThick: createSolidBorder('green', 600, 'extraThick'),
thick: createSolidBorder('green', 600, 'thick'),
},
};
};


/**
* Create a SDS App Theme with custom colors that follows the SDS color model.
*/
export const makeSdsSemanticAppTheme = (colors: Colors, isDarkTheme = false): AppTheme => ({
...sharedAppTheme,
colors,
borders: createAppThemeBorders(colors, isDarkTheme),
});

export const SDSLightAppTheme: AppTheme =
makeSdsSemanticAppTheme(SDSLightThemeColors);

export const SDSDarkAppTheme: AppTheme =
makeSdsSemanticAppTheme(SDSDarkThemeColors, true);

/**
* Helper function to select the appropriate theme settings.
*
Expand Down