diff --git a/packages/base-tailwind/src/index.js b/packages/base-tailwind/src/index.js index 71a8f2c911..afd2d8b481 100644 --- a/packages/base-tailwind/src/index.js +++ b/packages/base-tailwind/src/index.js @@ -1,4 +1,34 @@ /** @type {import('tailwindcss').Config} */ module.exports = { - theme: {}, + // Place for base semantic tokens + theme: { + colors: { + white: '#FFFFFF', + black: '#000000', + blue: { + 100: '#EDF1FD', + 150: '#D5DEFA', + }, + }, + blur: { + 4: '4px', + 8: '8px', + 12: '12px', + 32: '32px', + }, + borderWidth: { + 0: '0px', + 1: '1px', + 2: '2px', + 4: '4px', + }, + borderRadius: { + 0: '0px', + 1: '4px', + 2: '8px', + 3: '12px', + 25: '100px', + 999: '999px', + }, + }, } diff --git a/packages/base/Avatar/src/Avatar/AvatarWrapper/AvatarWrapper.tsx b/packages/base/Avatar/src/Avatar/AvatarWrapper/AvatarWrapper.tsx index b8f6a6db9a..906adb5e21 100644 --- a/packages/base/Avatar/src/Avatar/AvatarWrapper/AvatarWrapper.tsx +++ b/packages/base/Avatar/src/Avatar/AvatarWrapper/AvatarWrapper.tsx @@ -56,6 +56,40 @@ export const AvatarWrapper = (props: Props) => {
+
+

Test text white

+

Test text blue 100

+

Test text blue 150

+

Test text blue 200

+
+
+
+ Color from Base preset, should be blue +
+
+ Color from Picasso preset, should be red +
+
+ Color from Caliber preset, should be pink +
+
+
+
+ Opacity 1 (from Caliber) +
+
+ Opacity 10 (from Picasso) +
+
+ } +> diff --git a/packages/caliber-tailwind/src/index.js b/packages/caliber-tailwind/src/index.js new file mode 100644 index 0000000000..39380bfe88 --- /dev/null +++ b/packages/caliber-tailwind/src/index.js @@ -0,0 +1,11 @@ +/** @type {import('tailwindcss').Config} */ +module.exports = { + presets: [], + theme: { + colors: { + custom: { + 9000: 'pink', + }, + }, + }, +} diff --git a/packages/caliber-tailwind/tsconfig.json b/packages/caliber-tailwind/tsconfig.json new file mode 100644 index 0000000000..372e8d6c53 --- /dev/null +++ b/packages/caliber-tailwind/tsconfig.json @@ -0,0 +1,6 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { "outDir": "dist-package" }, + "include": ["src"], + "references": [] +} diff --git a/packages/picasso-tailwind/src/index.js b/packages/picasso-tailwind/src/index.js index 9098a8312d..1ae552cf26 100644 --- a/packages/picasso-tailwind/src/index.js +++ b/packages/picasso-tailwind/src/index.js @@ -12,160 +12,129 @@ module.exports = { }), ], theme: { - screens: { - xs: '0px', - sm: '480px', - md: '768px', - lg: '1024px', - xl: '1440px', - }, - // https://toptal-core.atlassian.net/wiki/spaces/Base/pages/3217031216/Spacing - spacing: { - 0: '0', - 1: '0.25rem', - 2: '0.5rem', - 3: '0.75rem', - 4: '1rem', - 6: '1.5rem', - 8: '2rem', - 10: '2.5rem', - 12: '3rem', - }, - borderRadius: { - none: '0px', - sm: '4px', - md: '8px', - // to support fully rounded corners, use the same approach as TailwindCSS proposes - full: '9999px', - }, - borderWidth: { - DEFAULT: '1px', - 0: '0px', - }, - fontFamily: { - sans: ['proxima-nova', 'Arial', 'sans-serif'], - mono: [ - 'ui-monospace', - 'SFMono-Regular', - 'Menlo', - 'Monaco', - 'Consolas', - 'Liberation Mono', - 'Courier New', - 'monospace', - ], - }, - fontWeight: { - inherit: 'inherit', - thin: '100', - light: '300', - regular: '400', - semibold: '600', - }, - // NOTE: If adding new font sizes, make sure to update @toptal/picasso-tailwind-merge - fontSize: { - '2xs': ['0.688rem', { lineHeight: '1rem' }], - xxs: ['0.75rem', { lineHeight: '1.125rem' }], - sm: ['0.8125rem', { lineHeight: '1.25rem' }], - md: ['0.875rem', { lineHeight: '1.375rem' }], - lg: ['1rem', { lineHeight: '1.5rem' }], - xl: ['1.25rem', { lineHeight: '1.875rem' }], - '2xl': ['1.75rem', { lineHeight: '2.625rem' }], - xxl: ['1.75rem', { lineHeight: '2.625rem' }], - 'button-small': ['12px', { lineHeight: '15px' }], - 'button-medium': ['13px', { lineHeight: '16px' }], - 'button-large': ['15px', { lineHeight: '18px' }], - }, - // TODO: [FX-5003] Deprecate legacy shadow classes - // Shadows 0-5 correspond to BASE design https://www.figma.com/file/9xnyixadrhlHe9UuXBMRlT/Foundations?type=design&node-id=22%3A21&mode=design&t=8d8TKUUuHKWosUtX-1 - // Shadows 6-24 correspond to Material UI v4 shadows @material-ui/core/styles/shadows.js - boxShadow: { - 0: 'none', - /** notification center, paper */ - 1: '0 0 8px 0 rgba(0,0,0, 0.08)', - /** modal */ - 2: '0 4px 8px 0 rgba(0,0,0, 0.08)', + extend: { + opacity: { + 0: '0', + 10: '0.1', + 20: '0.2', + }, + screens: { + xs: '0px', + sm: '480px', + md: '768px', + lg: '1024px', + xl: '1440px', + }, + // https://toptal-core.atlassian.net/wiki/spaces/Base/pages/3217031216/Spacing + spacing: { + 0: '0', + 1: '0.25rem', + 2: '0.5rem', + 3: '0.75rem', + 4: '1rem', + 6: '1.5rem', + 8: '2rem', + 10: '2.5rem', + 12: '3rem', + }, + colors: { + red: { + 100: 'red', + }, + }, + borderRadius: { + none: '0px', + sm: '4px', + md: '8px', + // to support fully rounded corners, use the same approach as TailwindCSS proposes + full: '9999px', + }, + borderWidth: { + DEFAULT: '1px', + 0: '0px', + }, + fontFamily: { + sans: ['proxima-nova', 'Arial', 'sans-serif'], + mono: [ + 'ui-monospace', + 'SFMono-Regular', + 'Menlo', + 'Monaco', + 'Consolas', + 'Liberation Mono', + 'Courier New', + 'monospace', + ], + }, + fontWeight: { + inherit: 'inherit', + thin: '100', + light: '300', + regular: '400', + semibold: '600', + }, + // NOTE: If adding new font sizes, make sure to update @toptal/picasso-tailwind-merge + fontSize: { + '2xs': ['0.688rem', { lineHeight: '1rem' }], + xxs: ['0.75rem', { lineHeight: '1.125rem' }], + sm: ['0.8125rem', { lineHeight: '1.25rem' }], + md: ['0.875rem', { lineHeight: '1.375rem' }], + lg: ['1rem', { lineHeight: '1.5rem' }], + xl: ['1.25rem', { lineHeight: '1.875rem' }], + '2xl': ['1.75rem', { lineHeight: '2.625rem' }], + xxl: ['1.75rem', { lineHeight: '2.625rem' }], + 'button-small': ['12px', { lineHeight: '15px' }], + 'button-medium': ['13px', { lineHeight: '16px' }], + 'button-large': ['15px', { lineHeight: '18px' }], + }, + // TODO: [FX-5003] Deprecate legacy shadow classes + // Shadows 0-5 correspond to BASE design https://www.figma.com/file/9xnyixadrhlHe9UuXBMRlT/Foundations?type=design&node-id=22%3A21&mode=design&t=8d8TKUUuHKWosUtX-1 + // Shadows 6-24 correspond to Material UI v4 shadows @material-ui/core/styles/shadows.js + boxShadow: { + 0: 'none', + /** notification center, paper */ + 1: '0 0 8px 0 rgba(0,0,0, 0.08)', + /** modal */ + 2: '0 4px 8px 0 rgba(0,0,0, 0.08)', - /** nofication growl */ - 3: '0 0 0 1px rgba(0, 0, 0, 0.04), 0 0 8px 0 rgba(0, 0, 0, 0.16)', + /** nofication growl */ + 3: '0 0 0 1px rgba(0, 0, 0, 0.04), 0 0 8px 0 rgba(0, 0, 0, 0.16)', - /** tooltip */ - 4: '0 0 4px 0 rgba(0,0,0, 0.24), 0 0 32px 0 rgba(0,0,0, 0.12)', + /** tooltip */ + 4: '0 0 4px 0 rgba(0,0,0, 0.24), 0 0 32px 0 rgba(0,0,0, 0.12)', - /** scroll menu */ - 5: '0 0 0 1px rgba(0, 0, 0, 0.04), 0 8px 12px -3px rgba(0, 0, 0, 0.08), 0 4px 8px -2px rgba(0, 0, 0, 0.04)', + /** scroll menu */ + 5: '0 0 0 1px rgba(0, 0, 0, 0.04), 0 8px 12px -3px rgba(0, 0, 0, 0.08), 0 4px 8px -2px rgba(0, 0, 0, 0.04)', - /** elevations for paper */ - 6: '0px 3px 5px -1px rgba(0,0,0,0.2),0px 6px 10px 0px rgba(0,0,0,0.14),0px 1px 18px 0px rgba(0,0,0,0.12)', - 7: '0px 4px 5px -2px rgba(0,0,0,0.2),0px 7px 10px 1px rgba(0,0,0,0.14),0px 2px 16px 1px rgba(0,0,0,0.12)', - 8: '0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12)', - 9: '0px 5px 6px -3px rgba(0,0,0,0.2),0px 9px 12px 1px rgba(0,0,0,0.14),0px 3px 16px 2px rgba(0,0,0,0.12)', - 10: '0px 6px 6px -3px rgba(0,0,0,0.2),0px 10px 14px 1px rgba(0,0,0,0.14),0px 4px 18px 3px rgba(0,0,0,0.12)', - 11: '0px 6px 7px -4px rgba(0,0,0,0.2),0px 11px 15px 1px rgba(0,0,0,0.14),0px 4px 20px 3px rgba(0,0,0,0.12)', - 12: '0px 7px 8px -4px rgba(0,0,0,0.2),0px 12px 17px 2px rgba(0,0,0,0.14),0px 5px 22px 4px rgba(0,0,0,0.12)', - 13: '0px 7px 8px -4px rgba(0,0,0,0.2),0px 13px 19px 2px rgba(0,0,0,0.14),0px 5px 24px 4px rgba(0,0,0,0.12)', - 14: '0px 7px 9px -4px rgba(0,0,0,0.2),0px 14px 21px 2px rgba(0,0,0,0.14),0px 5px 26px 4px rgba(0,0,0,0.12)', - 15: '0px 8px 9px -5px rgba(0,0,0,0.2),0px 15px 22px 2px rgba(0,0,0,0.14),0px 6px 28px 5px rgba(0,0,0,0.12)', - 16: '0px 8px 10px -5px rgba(0,0,0,0.2),0px 16px 24px 2px rgba(0,0,0,0.14),0px 6px 30px 5px rgba(0,0,0,0.12)', - 17: '0px 8px 11px -5px rgba(0,0,0,0.2),0px 17px 26px 2px rgba(0,0,0,0.14),0px 6px 32px 5px rgba(0,0,0,0.12)', - 18: '0px 9px 11px -5px rgba(0,0,0,0.2),0px 18px 28px 2px rgba(0,0,0,0.14),0px 7px 34px 6px rgba(0,0,0,0.12)', - 19: '0px 9px 12px -6px rgba(0,0,0,0.2),0px 19px 29px 2px rgba(0,0,0,0.14),0px 7px 36px 6px rgba(0,0,0,0.12)', - 20: '0px 10px 13px -6px rgba(0,0,0,0.2),0px 20px 31px 3px rgba(0,0,0,0.14),0px 8px 38px 7px rgba(0,0,0,0.12)', - 21: '0px 10px 13px -6px rgba(0,0,0,0.2),0px 21px 33px 3px rgba(0,0,0,0.14),0px 8px 40px 7px rgba(0,0,0,0.12)', - 22: '0px 10px 14px -6px rgba(0,0,0,0.2),0px 22px 35px 3px rgba(0,0,0,0.14),0px 8px 42px 7px rgba(0,0,0,0.12)', - 23: '0px 11px 14px -7px rgba(0,0,0,0.2),0px 23px 36px 3px rgba(0,0,0,0.14),0px 9px 44px 8px rgba(0,0,0,0.12)', - 24: '0px 11px 15px -7px rgba(0,0,0,0.2),0px 24px 38px 3px rgba(0,0,0,0.14),0px 9px 46px 8px rgba(0,0,0,0.12)', - }, - colors: { - white: '#FFFFFF', - black: '#000000', - transparent: 'transparent', - current: 'currentColor', - blue: { - 100: '#EDF1FD', - 150: '#D5DEFA', - 400: '#25A9EF', - 500: '#204ECF', - 600: '#183A9E', - 700: '#0F256E', - }, - green: { - 100: '#EAFBF5', - 150: '#D7F3E9', - 500: '#00CC83', - 600: '#03B080', - 700: '#05947C', - }, - gray: { - 50: '#FCFCFC', - 100: '#F3F4F6', - 200: '#EBECED', - 300: '#E5E7EA', - 400: '#D8D9DC', - 500: '#C4C6CA', - 600: '#84888E', - }, - graphite: { - 700: '#455065', - 800: '#262D3D', - 900: '#191E28', - }, - red: { - 100: '#FBEDF1', - 150: '#F5D8E0', - 500: '#D42551', - }, - yellow: { - 100: '#FFF5E3', - 150: '#F8E7C8', - 500: '#E59C01', - }, - purple: { - 500: '#6727CF', - }, - inheritColor: 'inherit', - }, - extend: { + /** elevations for paper */ + 6: '0px 3px 5px -1px rgba(0,0,0,0.2),0px 6px 10px 0px rgba(0,0,0,0.14),0px 1px 18px 0px rgba(0,0,0,0.12)', + 7: '0px 4px 5px -2px rgba(0,0,0,0.2),0px 7px 10px 1px rgba(0,0,0,0.14),0px 2px 16px 1px rgba(0,0,0,0.12)', + 8: '0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12)', + 9: '0px 5px 6px -3px rgba(0,0,0,0.2),0px 9px 12px 1px rgba(0,0,0,0.14),0px 3px 16px 2px rgba(0,0,0,0.12)', + 10: '0px 6px 6px -3px rgba(0,0,0,0.2),0px 10px 14px 1px rgba(0,0,0,0.14),0px 4px 18px 3px rgba(0,0,0,0.12)', + 11: '0px 6px 7px -4px rgba(0,0,0,0.2),0px 11px 15px 1px rgba(0,0,0,0.14),0px 4px 20px 3px rgba(0,0,0,0.12)', + 12: '0px 7px 8px -4px rgba(0,0,0,0.2),0px 12px 17px 2px rgba(0,0,0,0.14),0px 5px 22px 4px rgba(0,0,0,0.12)', + 13: '0px 7px 8px -4px rgba(0,0,0,0.2),0px 13px 19px 2px rgba(0,0,0,0.14),0px 5px 24px 4px rgba(0,0,0,0.12)', + 14: '0px 7px 9px -4px rgba(0,0,0,0.2),0px 14px 21px 2px rgba(0,0,0,0.14),0px 5px 26px 4px rgba(0,0,0,0.12)', + 15: '0px 8px 9px -5px rgba(0,0,0,0.2),0px 15px 22px 2px rgba(0,0,0,0.14),0px 6px 28px 5px rgba(0,0,0,0.12)', + 16: '0px 8px 10px -5px rgba(0,0,0,0.2),0px 16px 24px 2px rgba(0,0,0,0.14),0px 6px 30px 5px rgba(0,0,0,0.12)', + 17: '0px 8px 11px -5px rgba(0,0,0,0.2),0px 17px 26px 2px rgba(0,0,0,0.14),0px 6px 32px 5px rgba(0,0,0,0.12)', + 18: '0px 9px 11px -5px rgba(0,0,0,0.2),0px 18px 28px 2px rgba(0,0,0,0.14),0px 7px 34px 6px rgba(0,0,0,0.12)', + 19: '0px 9px 12px -6px rgba(0,0,0,0.2),0px 19px 29px 2px rgba(0,0,0,0.14),0px 7px 36px 6px rgba(0,0,0,0.12)', + 20: '0px 10px 13px -6px rgba(0,0,0,0.2),0px 20px 31px 3px rgba(0,0,0,0.14),0px 8px 38px 7px rgba(0,0,0,0.12)', + 21: '0px 10px 13px -6px rgba(0,0,0,0.2),0px 21px 33px 3px rgba(0,0,0,0.14),0px 8px 40px 7px rgba(0,0,0,0.12)', + 22: '0px 10px 14px -6px rgba(0,0,0,0.2),0px 22px 35px 3px rgba(0,0,0,0.14),0px 8px 42px 7px rgba(0,0,0,0.12)', + 23: '0px 11px 14px -7px rgba(0,0,0,0.2),0px 23px 36px 3px rgba(0,0,0,0.14),0px 9px 44px 8px rgba(0,0,0,0.12)', + 24: '0px 11px 15px -7px rgba(0,0,0,0.2),0px 24px 38px 3px rgba(0,0,0,0.14),0px 9px 46px 8px rgba(0,0,0,0.12)', + }, + textColor: ({ theme }) => ({ + white: theme.colors.white, + blue: { + 100: theme.colors.blue['100'], + // To check if it properly assigns the value from the base theme + 200: theme.colors.black, + }, + }), zIndex: { drawer: 1200, modal: 1300, diff --git a/tailwind.config.js b/tailwind.config.js index 58e795b015..cc1935bfbb 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -1,12 +1,10 @@ -// Ignore missing imports as packages are definitely present in the project -/* eslint-disable import/no-extraneous-dependencies */ - /** @type {import('tailwindcss').Config} */ module.exports = { content: ['packages/**/*.{ts,tsx}'], presets: [ require('@toptal/base-tailwind'), require('@toptal/picasso-tailwind'), + require('@toptal/caliber-tailwind'), ], corePlugins: { preflight: false, diff --git a/tsconfig.pkgsrc.json b/tsconfig.pkgsrc.json index ed5302bde9..00b5d1fa7d 100644 --- a/tsconfig.pkgsrc.json +++ b/tsconfig.pkgsrc.json @@ -11,6 +11,7 @@ { "path": "packages/picasso-provider" }, { "path": "packages/picasso-query-builder" }, { "path": "packages/picasso-rich-text-editor" }, + { "path": "packages/caliber-tailwind" }, { "path": "packages/picasso-tailwind" }, { "path": "packages/picasso-tailwind-merge" }, { "path": "packages/shared" }, diff --git a/yarn.lock b/yarn.lock index 10b1b1adb1..b1e79f7ac8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -23498,9 +23498,9 @@ tailwind-merge@^2.2.2: "@babel/runtime" "^7.24.1" tailwindcss@^3.4.10: - version "3.4.10" - resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.4.10.tgz#70442d9aeb78758d1f911af29af8255ecdb8ffef" - integrity sha512-KWZkVPm7yJRhdu4SRSl9d4AK2wM3a50UsvgHZO7xY77NQr2V+fIrEuoDGQcbvswWvFGbS2f6e+jC/6WJm1Dl0w== + version "3.4.12" + resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.4.12.tgz#fd3b67c6d2c04d9d7bfa13e3fc70ccef9fef0455" + integrity sha512-Htf/gHj2+soPb9UayUNci/Ja3d8pTmu9ONTfh4QY8r3MATTZOzmv6UYWF7ZwikEIC8okpfqmGqrmDehua8mF8w== dependencies: "@alloc/quick-lru" "^5.2.0" arg "^5.0.2"