diff --git a/canon-docs/src/app/(docs)/theme/theming/page.mdx b/canon-docs/src/app/(docs)/theme/theming/page.mdx
index 4cb03859f9..ec09405cac 100644
--- a/canon-docs/src/app/(docs)/theme/theming/page.mdx
+++ b/canon-docs/src/app/(docs)/theme/theming/page.mdx
@@ -186,7 +186,7 @@ are prefixed with `fg` to make it easier to identify.
- --canon-fg-text-primary
+ --canon-fg-primary
It should be used on top of `--canon-bg-app` or `--canon-bg-elevated`.
diff --git a/canon-docs/src/components/HeadlessBanners/styles.module.css b/canon-docs/src/components/HeadlessBanners/styles.module.css
index 31d08aedb4..c87787634e 100644
--- a/canon-docs/src/components/HeadlessBanners/styles.module.css
+++ b/canon-docs/src/components/HeadlessBanners/styles.module.css
@@ -10,7 +10,7 @@
}
.icon path {
- fill: var(--canon-fg-text-primary);
+ fill: var(--canon-fg-primary);
}
.content {
diff --git a/packages/canon/.storybook/preview.tsx b/packages/canon/.storybook/preview.tsx
index fbc319ccea..8ffa2e55df 100644
--- a/packages/canon/.storybook/preview.tsx
+++ b/packages/canon/.storybook/preview.tsx
@@ -1,15 +1,12 @@
import React from 'react';
import type { Preview, ReactRenderer } from '@storybook/react';
import { withThemeByDataAttribute } from '@storybook/addon-themes';
+import { CanonProvider } from '../src/contexts/canon';
// Canon specific styles
import '../src/css/core.css';
import '../src/css/components.css';
-// Custom themes
-import './themes/backstage.css';
-import { CanonProvider } from '../src/contexts/canon';
-
const preview: Preview = {
parameters: {
controls: {
@@ -79,8 +76,6 @@ const preview: Preview = {
themes: {
Light: 'light',
Dark: 'dark',
- 'Backstage Light': 'backstage-light',
- 'Backstage Dark': 'backstage-dark',
},
defaultTheme: 'Light',
}),
diff --git a/packages/canon/.storybook/themes/backstage.css b/packages/canon/.storybook/themes/backstage.css
deleted file mode 100644
index 653836c558..0000000000
--- a/packages/canon/.storybook/themes/backstage.css
+++ /dev/null
@@ -1,88 +0,0 @@
-[data-theme-name='legacy'][data-theme='light'],
-[data-theme-name='legacy'][data-theme='dark'] {
- --canon-font-regular: 'Helvetica Neue', Helvetica, Roboto, Arial, sans-serif;
-
- .canon-Button {
- border-radius: 60px;
- font-weight: 400;
- text-transform: uppercase;
- font-size: 0.875rem;
- transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,
- box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,
- border 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;
- line-height: 1.75;
- border-radius: 4px;
- background-color: #1f5493;
- padding: 6px 16px;
- box-shadow: none;
-
- &:hover {
- box-shadow: none;
- }
-
- &.canon-Button--variant-primary {
- color: #fff;
- background-color: rgb(21, 58, 102);
- box-shadow: 0px 3px 1px -2px rgba(0, 0, 0, 0.2),
- 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12);
-
- &:hover {
- box-shadow: 0px 2px 4px -1px rgba(0, 0, 0, 0.2),
- 0px 4px 5px 0px rgba(0, 0, 0, 0.14),
- 0px 1px 10px 0px rgba(0, 0, 0, 0.12);
- }
- }
-
- &.canon-Button--variant-secondary {
- background-color: transparent;
- border: 1px solid rgba(31, 84, 147, 0.5);
- color: #1f5493;
-
- &:hover {
- border: 1px solid #1f5493;
- background-color: rgba(31, 84, 147, 0.04);
- }
- }
-
- &.canon-Button--variant-tertiary {
- background-color: transparent;
- border: none;
- color: #1f5493;
- }
- }
-}
-
-[data-theme-name='legacy'][data-theme='light'] {
- /* Colors */
- --canon-bg-accent: #2e77d0;
- --canon-bg: #f8f8f8;
- --canon-bg-elevated: #fff;
- --canon-bg: #f4f4f4;
-
- /* Text colors */
- --canon-fg-text-primary: #000;
- --canon-fg-accent: #fff;
- --canon-fg-text-secondary: #646464;
-}
-
-[data-theme-name='legacy'][data-theme='dark'] {
- /* Colors */
- --canon-bg-accent: #fff;
- --canon-bg: #000;
- --canon-bg-elevated: #121212;
- --canon-bg: #1a1a1a;
-
- /* Borders */
- --canon-border: rgba(255, 255, 255, 0.2);
- --canon-border-warning: #f50000;
- --canon-border-danger: #f87503;
- --canon-border-focus: #25d262;
-
- /* States - Add more states */
- --canon-fg-danger: #f50000;
-
- /* Text colors */
- --canon-fg-text-primary: #fff;
- --canon-fg-accent: #000;
- --canon-fg-text-secondary: #b3b3b3;
-}
diff --git a/packages/canon/src/components/Box/styles.css b/packages/canon/src/components/Box/styles.css
index 229f322343..f3b24793cf 100644
--- a/packages/canon/src/components/Box/styles.css
+++ b/packages/canon/src/components/Box/styles.css
@@ -1,4 +1,4 @@
.canon-Box {
font-family: var(--canon-font-regular);
- color: var(--canon-fg-text-primary);
+ color: var(--canon-fg-primary);
}
diff --git a/packages/canon/src/components/Button/Button.stories.tsx b/packages/canon/src/components/Button/Button.stories.tsx
index cd52c7fdba..f0b8bc5ece 100644
--- a/packages/canon/src/components/Button/Button.stories.tsx
+++ b/packages/canon/src/components/Button/Button.stories.tsx
@@ -137,6 +137,12 @@ export const Playground: Story = {
{variant}
{['small', 'medium'].map(size => (
+
+ Button
+
Button
+
+ Button
+
+
+ Button
+
+
+ Button
+
))}
diff --git a/packages/canon/src/components/Button/Button.tsx b/packages/canon/src/components/Button/Button.tsx
index abdd027bf0..97e9ec8fe5 100644
--- a/packages/canon/src/components/Button/Button.tsx
+++ b/packages/canon/src/components/Button/Button.tsx
@@ -42,7 +42,6 @@ export const Button = forwardRef(
return (
(
className,
)}
style={style}
+ {...rest}
>
-
- {iconStart && }
- {children}
-
- {iconEnd && }
+ {iconStart && }
+ {children}
+ {iconEnd && }
);
},
diff --git a/packages/canon/src/components/Button/styles.css b/packages/canon/src/components/Button/styles.css
index 6bfd93a8ea..b496ebecc6 100644
--- a/packages/canon/src/components/Button/styles.css
+++ b/packages/canon/src/components/Button/styles.css
@@ -22,62 +22,82 @@
user-select: none;
font-family: var(--canon-font-regular);
font-weight: var(--canon-font-weight-bold);
- font-size: var(--canon-font-size-3);
padding: 0;
- transition: all 150ms ease;
cursor: pointer;
border-radius: var(--canon-radius-2);
+ gap: var(--canon-space-1_5);
+
+ &:disabled {
+ cursor: not-allowed;
+ }
}
.canon-Button--variant-primary {
- background-color: var(--canon-bg-accent);
- color: var(--canon-fg-accent);
+ background-color: var(--canon-bg-solid);
+ color: var(--canon-fg-solid);
+ transition: background-color 150ms ease;
&:hover {
- background-color: transparent;
- box-shadow: inset 0 0 0 1px var(--canon-border-focus);
- color: var(--canon-fg-text-primary);
+ background-color: var(--canon-bg-solid-hover);
+ }
+
+ &:active {
+ background-color: var(--canon-bg-solid-pressed);
+ }
+
+ &:disabled {
+ background-color: var(--canon-bg-solid-disabled);
+ color: var(--canon-fg-solid-disabled);
}
}
.canon-Button--variant-secondary {
- background-color: transparent;
+ background-color: var(--canon-bg-elevated);
box-shadow: inset 0 0 0 1px var(--canon-border);
- color: var(--canon-fg-text-primary);
+ color: var(--canon-fg-primary);
+ transition: box-shadow 150ms ease;
&:hover {
box-shadow: inset 0 0 0 1px var(--canon-border-hover);
}
+
+ &:active {
+ box-shadow: inset 0 0 0 1px var(--canon-border-focus);
+ }
+
+ &:disabled {
+ box-shadow: inset 0 0 0 1px var(--canon-border-disabled);
+ color: var(--canon-fg-disabled);
+ }
}
.canon-Button--variant-tertiary {
background-color: transparent;
- color: var(--canon-fg-text-primary);
+ color: var(--canon-fg-primary);
&:hover {
color: var(--canon-fg-text-secondary);
}
}
-.canon-Button--size-small {
- padding-left: 6px;
- padding-right: 6px;
- height: 32px;
-}
-
.canon-Button--size-medium {
- padding-left: 8px;
- padding-right: 8px;
+ font-size: var(--canon-font-size-4);
+ padding: 0 var(--canon-space-3);
height: 40px;
}
-.canon-Button--content {
- display: flex;
- align-items: center;
- gap: var(--canon-space-3);
- font-weight: var(--canon-font-weight-bold);
+.canon-Button--size-small {
+ font-size: var(--canon-font-size-3);
+ padding: 0 var(--canon-space-2);
+ height: 32px;
}
-.canon-Button--icon-start-end {
- flex: 1;
+.canon-Button--size-small .canon-Button--icon {
+ width: 1rem;
+ height: 1rem;
+}
+
+.canon-Button--size-medium .canon-Button--icon {
+ width: 1.5rem;
+ height: 1.5rem;
}
diff --git a/packages/canon/src/components/Checkbox/styles.css b/packages/canon/src/components/Checkbox/styles.css
index 1da96e8344..38bd9c2748 100644
--- a/packages/canon/src/components/Checkbox/styles.css
+++ b/packages/canon/src/components/Checkbox/styles.css
@@ -11,7 +11,7 @@
transition: all 0.2s ease-in-out;
&[data-checked] {
- background-color: var(--canon-bg-accent);
+ background-color: var(--canon-bg-solid);
}
}
@@ -23,7 +23,7 @@
gap: var(--canon-space-2);
font-size: var(--canon-font-size-xs);
font-family: var(--canon-font-regular);
- color: var(--canon-fg-text-primary);
+ color: var(--canon-fg-primary);
user-select: none;
&:hover {
diff --git a/packages/canon/src/components/Field/Field.styles.css b/packages/canon/src/components/Field/Field.styles.css
index 6bf695fc97..13ed8a4d48 100644
--- a/packages/canon/src/components/Field/Field.styles.css
+++ b/packages/canon/src/components/Field/Field.styles.css
@@ -24,7 +24,7 @@
.canon-FieldLabel {
font-size: var(--canon-font-size-2);
font-weight: var(--canon-font-weight-regular);
- color: var(--canon-fg-text-primary);
+ color: var(--canon-fg-primary);
margin-bottom: var(--canon-space-1_5);
}
diff --git a/packages/canon/src/components/Heading/styles.css b/packages/canon/src/components/Heading/styles.css
index a730afe9f0..2db11d7eb2 100644
--- a/packages/canon/src/components/Heading/styles.css
+++ b/packages/canon/src/components/Heading/styles.css
@@ -16,7 +16,7 @@
.canon-Heading {
font-family: var(--canon-font-regular);
- color: var(--canon-fg-text-primary);
+ color: var(--canon-fg-primary);
line-height: 100%;
padding: 0;
margin: 0;
diff --git a/packages/canon/src/components/Icon/Icon.tsx b/packages/canon/src/components/Icon/Icon.tsx
index c761d0d104..4c7b55680a 100644
--- a/packages/canon/src/components/Icon/Icon.tsx
+++ b/packages/canon/src/components/Icon/Icon.tsx
@@ -21,7 +21,7 @@ import clsx from 'clsx';
/** @public */
export const Icon = (props: IconProps) => {
- const { name, size = 16, className, style, ...restProps } = props;
+ const { name, size, className, style, ...restProps } = props;
const { icons } = useCanon();
const CanonIcon = icons[name] as React.ComponentType>;
@@ -34,7 +34,10 @@ export const Icon = (props: IconProps) => {
return (
);
diff --git a/packages/canon/src/components/Input/Input.styles.css b/packages/canon/src/components/Input/Input.styles.css
index cfeed27b48..b31a93749c 100644
--- a/packages/canon/src/components/Input/Input.styles.css
+++ b/packages/canon/src/components/Input/Input.styles.css
@@ -21,7 +21,7 @@
background-color: var(--canon-bg-elevated);
font-size: var(--canon-font-size-3);
font-weight: var(--canon-font-weight-regular);
- color: var(--canon-fg-text-primary);
+ color: var(--canon-fg-primary);
transition: border-color 0.2s ease-in-out, outline-color 0.2s ease-in-out;
width: 100%;
}
diff --git a/packages/canon/src/components/Text/styles.css b/packages/canon/src/components/Text/styles.css
index 9cf8c884fb..871960b8db 100644
--- a/packages/canon/src/components/Text/styles.css
+++ b/packages/canon/src/components/Text/styles.css
@@ -16,7 +16,7 @@
.canon-Text {
font-family: var(--canon-font-regular);
- color: var(--canon-fg-text-primary);
+ color: var(--canon-fg-primary);
padding: 0;
margin: 0;
}
diff --git a/packages/canon/src/css/core.css b/packages/canon/src/css/core.css
index d744d468d0..f871a08ada 100644
--- a/packages/canon/src/css/core.css
+++ b/packages/canon/src/css/core.css
@@ -62,81 +62,90 @@
--canon-space-14: calc(var(--canon-space) * 14); /* 56px */
/* Radius */
- --canon-radius-factor: 1.5;
- --canon-radius-1: calc(3px * var(--canon-radius-factor));
- --canon-radius-2: calc(4px * var(--canon-radius-factor));
- --canon-radius-3: calc(6px * var(--canon-radius-factor));
- --canon-radius-4: calc(8px * var(--canon-radius-factor));
- --canon-radius-5: calc(12px * var(--canon-radius-factor));
- --canon-radius-6: calc(16px * var(--canon-radius-factor));
+ --canon-radius-1: calc(0.125rem);
+ --canon-radius-2: calc(0.25rem);
+ --canon-radius-3: calc(0.5rem);
+ --canon-radius-4: calc(0.75rem);
+ --canon-radius-5: calc(1rem);
+ --canon-radius-6: calc(1.25rem);
--canon-radius-full: 9999px;
- /* Colors */
+ /* Background Colors */
--canon-bg: #f8f8f8;
--canon-bg-elevated: #fff;
- --canon-bg-accent: #000;
- --canon-bg-accent-focus: #000;
- --canon-bg-accent-disabled: #000;
- --canon-bg-accent-hover: #000;
- --canon-bg-tint: #edf2fe;
- --canon-bg-tint-active: #c7d7ff;
- --canon-bg-tint-disabled: #f8f8f8;
- --canon-bg-tint-hover: #dbe4ff;
- --canon-bg-danger: #f8f8f8;
- --canon-bg-elevated: #fff;
- --canon-bg-success: #f8f8f8;
- --canon-bg-warning: #f8f8f8;
- --canon-border: rgba(0, 0, 0, 0.1);
- --canon-border-accent: #000;
- --canon-border-accent-focus: #000;
- --canon-border-accent-hover: #000;
- --canon-border-danger: #e22b2b;
- --canon-border-focus: rgba(0, 0, 0, 0.4);
- --canon-border-hover: rgba(0, 0, 0, 0.2);
- --canon-border-success: #008000;
- --canon-border-warning: #e36d05;
- --canon-fg-text-primary: #000;
- --canon-fg-text-secondary: #646464;
- --canon-fg-link: #fff;
- --canon-fg-link-hover: #fff;
- --canon-fg-accent: #fff;
- --canon-fg-tint: #000;
+ --canon-bg-solid: #1f5493;
+ --canon-bg-solid-hover: #163a66;
+ --canon-bg-solid-pressed: #0f2b4e;
+ --canon-bg-solid-disabled: #ebebeb;
+ --canon-bg-tint: transparent;
+ --canon-bg-tint-hover: rgba(31, 84, 147, 0.4);
+ --canon-bg-tint-pressed: rgba(31, 84, 147, 0.6);
+ --canon-bg-tint-disabled: #ebebeb;
+ --canon-bg-danger: #feebe7;
+ --canon-bg-warning: #fff2b2;
+ --canon-bg-success: #e6f6eb;
+
+ /* Foreground Colors */
+ --canon-fg-primary: #000000;
+ --canon-fg-secondary: #757575;
+ --canon-fg-link: #1f5493;
+ --canon-fg-link-hover: #1f2d5c;
+ --canon-fg-disabled: #9e9e9e;
+ --canon-fg-solid: #ffffff;
+ --canon-fg-solid-disabled: #9c9c9c;
+ --canon-fg-tint: #1f5493;
+ --canon-fg-tint-disabled: #9e9e9e;
--canon-fg-danger: #e22b2b;
--canon-fg-warning: #e36d05;
- --canon-fg-success: #008000;
+ --canon-fg-success: #1db954;
+
+ /* Border Colors */
+ --canon-border: rgba(0, 0, 0, 0.1);
+ --canon-border-hover: rgba(0, 0, 0, 0.2);
+ --canon-border-focus: rgba(0, 0, 0, 0.4);
+ --canon-border-disabled: rgba(0, 0, 0, 0.1);
+ --canon-border-danger: #f87a7a;
+ --canon-border-warning: #e36d05;
+ --canon-border-success: #53db83;
}
/* Dark theme tokens */
[data-theme='dark'] {
- --canon-bg: #f8f8f8;
- --canon-bg-elevated: #fff;
- --canon-bg-accent: #000;
- --canon-bg-accent-focus: #000;
- --canon-bg-accent-disabled: #000;
- --canon-bg-accent-hover: #000;
- --canon-bg-tint: #edf2fe;
- --canon-bg-tint-active: #c7d7ff;
- --canon-bg-tint-disabled: #f8f8f8;
- --canon-bg-tint-hover: #dbe4ff;
- --canon-bg-danger: #f8f8f8;
- --canon-bg-elevated: #fff;
- --canon-bg-success: #f8f8f8;
- --canon-bg-warning: #f8f8f8;
- --canon-border: rgba(0, 0, 0, 0.1);
- --canon-border-accent: #000;
- --canon-border-accent-focus: #000;
- --canon-border-accent-hover: #000;
- --canon-border-danger: #e22b2b;
- --canon-border-focus: rgba(0, 0, 0, 0.4);
- --canon-border-hover: rgba(0, 0, 0, 0.2);
- --canon-border-success: #008000;
- --canon-border-warning: #e36d05;
- --canon-fg-accent: #000;
+ /* Background Colors */
+ --canon-bg: #000000;
+ --canon-bg-elevated: #191919;
+ --canon-bg-solid: #9cc9ff;
+ --canon-bg-solid-hover: #83b9fd;
+ --canon-bg-solid-pressed: #83b9fd;
+ --canon-bg-solid-disabled: #222222;
+ --canon-bg-tint: transparent;
+ --canon-bg-tint-hover: rgba(156, 201, 255, 0.12);
+ --canon-bg-tint-pressed: rgba(156, 201, 255, 0.16);
+ --canon-bg-tint-disabled: transparent;
+ --canon-bg-danger: #3b1219;
+ --canon-bg-warning: #302008;
+ --canon-bg-success: #132d21;
+
+ /* Foreground Colors */
+ --canon-fg-primary: #ffffff;
+ --canon-fg-secondary: #9e9e9e;
+ --canon-fg-link: #9cc9ff;
+ --canon-fg-link-hover: #7eb5f7;
+ --canon-fg-disabled: #9e9e9e;
+ --canon-fg-solid: #101821;
+ --canon-fg-solid-disabled: #575757;
+ --canon-fg-tint: #9cc9ff;
+ --canon-fg-tint-disabled: #575757;
--canon-fg-danger: #e22b2b;
- --canon-fg-success: #008000;
--canon-fg-warning: #e36d05;
- --canon-fg-link: #fff;
- --canon-fg-link-hover: #fff;
- --canon-fg-text-primary: #000;
- --canon-fg-text-secondary: #646464;
+ --canon-fg-success: #1db954;
+
+ /* Border Colors */
+ --canon-border: rgba(255, 255, 255, 0.2);
+ --canon-border-hover: rgba(255, 255, 255, 0.4);
+ --canon-border-focus: rgba(255, 255, 255, 0.5);
+ --canon-border-disabled: rgba(255, 255, 255, 0.2);
+ --canon-border-danger: #f87a7a;
+ --canon-border-warning: #e36d05;
+ --canon-border-success: #53db83;
}
diff --git a/plugins/user-settings/src/components/General/UserSettingsIdentityCard.tsx b/plugins/user-settings/src/components/General/UserSettingsIdentityCard.tsx
index d8d3f677aa..fac560762d 100644
--- a/plugins/user-settings/src/components/General/UserSettingsIdentityCard.tsx
+++ b/plugins/user-settings/src/components/General/UserSettingsIdentityCard.tsx
@@ -20,6 +20,7 @@ import Grid from '@material-ui/core/Grid';
import Typography from '@material-ui/core/Typography';
import React from 'react';
import { useUserProfile } from '../useUserProfileInfo';
+import Button from '@material-ui/core/Button';
const Contents = () => {
const { backstageIdentity } = useUserProfile();
@@ -49,6 +50,9 @@ const Contents = () => {
/** @public */
export const UserSettingsIdentityCard = () => (
+
+ werfg
+
);