Design Tokens
Axiom uses CSS variables to declare design tokens and also conveniently exports the variable names in the theme
object.
#
Declaring tokens
#
#
CSS variables
#
All tokens are available as CSS variables under the --ax-*
prefix.
So given a tokens object like this:
{
"colors": {
"bg.accent": "#2e66f7",
"fg.success": "#03a65d"
},
"zIndex": {
"popover": "3000"
}
}
The following css custom properties will be available:
:root {
--ax-colors-bg-accent: #2e66f7;
--ax-colors-fg-success: #03a65d;
--ax-zIndex-popover: 3000;
}
And they can be accessed via the theme
object:
import { theme } from "@optiaxiom/react";
console.log(theme.colors["bg.accent"] === "var(--ax-colors-bg-accent)"); // true
console.log(theme.colors["fg.success"] === "var(--ax-colors-fg-success)"); // true
console.log(theme.zIndex.popover === "var(--ax-zIndex-popover)"); // true
#
Consuming tokens
#
#
Using style props
#
For all react components you can use the various style props to set the styles using tokens.
import { Box } from "@optiaxiom/react";
export function App() {
return (
<Box bg="bg.success.subtle" color="fg.success.strong" p="16">
Using component props
</Box>
);
}
#
Consuming variables from CSS
#
You can also directly use the CSS variable name in your .css
files.
import styles from "./App.module.css";
export function App() {
return <div className={styles.container}>Using CSS variables</div>;
}
#
Consuming variables from JS
#
Axiom exports a theme
contract that contains a map of all tokens to the corresponding CSS custom property name.
You can use this theme
object when implementing any CSS-in-JS solutions.
import { theme } from "@optiaxiom/react";
export function App() {
return (
<div
style={{
background: theme.colors["bg.success.subtle"],
color: theme.colors["fg.success.strong"],
padding: "16px",
}}
>
Using inline styles
</div>
);
}
#
Reference
#
#
borderRadius
#
Name | Value | Theme |
---|---|---|
xs | var(--ax-borderRadius-xs) | theme.borderRadius.xs |
sm | var(--ax-borderRadius-sm) | theme.borderRadius.sm |
md | var(--ax-borderRadius-md) | theme.borderRadius.md |
lg | var(--ax-borderRadius-lg) | theme.borderRadius.lg |
full | var(--ax-borderRadius-full) | theme.borderRadius.full |
#
boxShadow
#
Name | Value | Theme |
---|---|---|
sm | var(--ax-boxShadow-sm) | theme.boxShadow.sm |
md | var(--ax-boxShadow-md) | theme.boxShadow.md |
lg | var(--ax-boxShadow-lg) | theme.boxShadow.lg |
#
colors
#
Name | Value | Theme |
---|---|---|
bg.accent | var(--ax-colors-bg-accent) | theme.colors["bg.accent"] |
bg.accent.hovered | var(--ax-colors-bg-accent-hovered) | theme.colors["bg.accent.hovered"] |
bg.accent.light | var(--ax-colors-bg-accent-light) | theme.colors["bg.accent.light"] |
bg.accent.pressed | var(--ax-colors-bg-accent-pressed) | theme.colors["bg.accent.pressed"] |
bg.accent.subtle | var(--ax-colors-bg-accent-subtle) | theme.colors["bg.accent.subtle"] |
bg.avatar.neutral | var(--ax-colors-bg-avatar-neutral) | theme.colors["bg.avatar.neutral"] |
bg.avatar.purple | var(--ax-colors-bg-avatar-purple) | theme.colors["bg.avatar.purple"] |
bg.default | var(--ax-colors-bg-default) | theme.colors["bg.default"] |
bg.default.hovered | var(--ax-colors-bg-default-hovered) | theme.colors["bg.default.hovered"] |
bg.default.inverse | var(--ax-colors-bg-default-inverse) | theme.colors["bg.default.inverse"] |
bg.default.inverse.hovered | var(--ax-colors-bg-default-inverse-hovered) | theme.colors["bg.default.inverse.hovered"] |
bg.default.inverse.pressed | var(--ax-colors-bg-default-inverse-pressed) | theme.colors["bg.default.inverse.pressed"] |
bg.default.pressed | var(--ax-colors-bg-default-pressed) | theme.colors["bg.default.pressed"] |
bg.error | var(--ax-colors-bg-error) | theme.colors["bg.error"] |
bg.error.hovered | var(--ax-colors-bg-error-hovered) | theme.colors["bg.error.hovered"] |
bg.error.light | var(--ax-colors-bg-error-light) | theme.colors["bg.error.light"] |
bg.error.pressed | var(--ax-colors-bg-error-pressed) | theme.colors["bg.error.pressed"] |
bg.error.subtle | var(--ax-colors-bg-error-subtle) | theme.colors["bg.error.subtle"] |
bg.error.subtlest | var(--ax-colors-bg-error-subtlest) | theme.colors["bg.error.subtlest"] |
bg.information | var(--ax-colors-bg-information) | theme.colors["bg.information"] |
bg.information.light | var(--ax-colors-bg-information-light) | theme.colors["bg.information.light"] |
bg.information.subtle | var(--ax-colors-bg-information-subtle) | theme.colors["bg.information.subtle"] |
bg.overlay | var(--ax-colors-bg-overlay) | theme.colors["bg.overlay"] |
bg.page | var(--ax-colors-bg-page) | theme.colors["bg.page"] |
bg.secondary | var(--ax-colors-bg-secondary) | theme.colors["bg.secondary"] |
bg.secondary.hovered | var(--ax-colors-bg-secondary-hovered) | theme.colors["bg.secondary.hovered"] |
bg.spinner.default | var(--ax-colors-bg-spinner-default) | theme.colors["bg.spinner.default"] |
bg.spinner.inverse | var(--ax-colors-bg-spinner-inverse) | theme.colors["bg.spinner.inverse"] |
bg.success | var(--ax-colors-bg-success) | theme.colors["bg.success"] |
bg.success.hovered | var(--ax-colors-bg-success-hovered) | theme.colors["bg.success.hovered"] |
bg.success.light | var(--ax-colors-bg-success-light) | theme.colors["bg.success.light"] |
bg.success.subtle | var(--ax-colors-bg-success-subtle) | theme.colors["bg.success.subtle"] |
bg.tertiary | var(--ax-colors-bg-tertiary) | theme.colors["bg.tertiary"] |
bg.tertiary.hovered | var(--ax-colors-bg-tertiary-hovered) | theme.colors["bg.tertiary.hovered"] |
bg.warning | var(--ax-colors-bg-warning) | theme.colors["bg.warning"] |
bg.warning.hovered | var(--ax-colors-bg-warning-hovered) | theme.colors["bg.warning.hovered"] |
bg.warning.light | var(--ax-colors-bg-warning-light) | theme.colors["bg.warning.light"] |
bg.warning.subtle | var(--ax-colors-bg-warning-subtle) | theme.colors["bg.warning.subtle"] |
border.accent | var(--ax-colors-border-accent) | theme.colors["border.accent"] |
border.active | var(--ax-colors-border-active) | theme.colors["border.active"] |
border.active.hovered | var(--ax-colors-border-active-hovered) | theme.colors["border.active.hovered"] |
border.default | var(--ax-colors-border-default) | theme.colors["border.default"] |
border.default.hovered | var(--ax-colors-border-default-hovered) | theme.colors["border.default.hovered"] |
border.disabled | var(--ax-colors-border-disabled) | theme.colors["border.disabled"] |
border.error | var(--ax-colors-border-error) | theme.colors["border.error"] |
border.focus | var(--ax-colors-border-focus) | theme.colors["border.focus"] |
border.focus.error | var(--ax-colors-border-focus-error) | theme.colors["border.focus.error"] |
border.secondary | var(--ax-colors-border-secondary) | theme.colors["border.secondary"] |
border.success | var(--ax-colors-border-success) | theme.colors["border.success"] |
border.tertiary | var(--ax-colors-border-tertiary) | theme.colors["border.tertiary"] |
border.warning | var(--ax-colors-border-warning) | theme.colors["border.warning"] |
fg.accent | var(--ax-colors-fg-accent) | theme.colors["fg.accent"] |
fg.accent.hovered | var(--ax-colors-fg-accent-hovered) | theme.colors["fg.accent.hovered"] |
fg.accent.strong | var(--ax-colors-fg-accent-strong) | theme.colors["fg.accent.strong"] |
fg.avatar.neutral | var(--ax-colors-fg-avatar-neutral) | theme.colors["fg.avatar.neutral"] |
fg.avatar.purple | var(--ax-colors-fg-avatar-purple) | theme.colors["fg.avatar.purple"] |
fg.default | var(--ax-colors-fg-default) | theme.colors["fg.default"] |
fg.default.inverse | var(--ax-colors-fg-default-inverse) | theme.colors["fg.default.inverse"] |
fg.disabled | var(--ax-colors-fg-disabled) | theme.colors["fg.disabled"] |
fg.error | var(--ax-colors-fg-error) | theme.colors["fg.error"] |
fg.error.hovered | var(--ax-colors-fg-error-hovered) | theme.colors["fg.error.hovered"] |
fg.error.light | var(--ax-colors-fg-error-light) | theme.colors["fg.error.light"] |
fg.error.strong | var(--ax-colors-fg-error-strong) | theme.colors["fg.error.strong"] |
fg.information | var(--ax-colors-fg-information) | theme.colors["fg.information"] |
fg.information.light | var(--ax-colors-fg-information-light) | theme.colors["fg.information.light"] |
fg.information.strong | var(--ax-colors-fg-information-strong) | theme.colors["fg.information.strong"] |
fg.link.default | var(--ax-colors-fg-link-default) | theme.colors["fg.link.default"] |
fg.link.default.hovered | var(--ax-colors-fg-link-default-hovered) | theme.colors["fg.link.default.hovered"] |
fg.link.inverse | var(--ax-colors-fg-link-inverse) | theme.colors["fg.link.inverse"] |
fg.link.subtle | var(--ax-colors-fg-link-subtle) | theme.colors["fg.link.subtle"] |
fg.link.visited | var(--ax-colors-fg-link-visited) | theme.colors["fg.link.visited"] |
fg.secondary | var(--ax-colors-fg-secondary) | theme.colors["fg.secondary"] |
fg.spinner.default | var(--ax-colors-fg-spinner-default) | theme.colors["fg.spinner.default"] |
fg.spinner.inverse | var(--ax-colors-fg-spinner-inverse) | theme.colors["fg.spinner.inverse"] |
fg.success | var(--ax-colors-fg-success) | theme.colors["fg.success"] |
fg.success.hovered | var(--ax-colors-fg-success-hovered) | theme.colors["fg.success.hovered"] |
fg.success.light | var(--ax-colors-fg-success-light) | theme.colors["fg.success.light"] |
fg.success.strong | var(--ax-colors-fg-success-strong) | theme.colors["fg.success.strong"] |
fg.tertiary | var(--ax-colors-fg-tertiary) | theme.colors["fg.tertiary"] |
fg.warning | var(--ax-colors-fg-warning) | theme.colors["fg.warning"] |
fg.warning.hovered | var(--ax-colors-fg-warning-hovered) | theme.colors["fg.warning.hovered"] |
fg.warning.inverse | var(--ax-colors-fg-warning-inverse) | theme.colors["fg.warning.inverse"] |
fg.warning.light | var(--ax-colors-fg-warning-light) | theme.colors["fg.warning.light"] |
fg.warning.strong | var(--ax-colors-fg-warning-strong) | theme.colors["fg.warning.strong"] |
fg.white | var(--ax-colors-fg-white) | theme.colors["fg.white"] |
#
fontFamily
#
Name | Value | Theme |
---|---|---|
mono | var(--ax-fontFamily-mono) | theme.fontFamily.mono |
sans | var(--ax-fontFamily-sans) | theme.fontFamily.sans |
#
fontSize
#
Name | Value | Theme |
---|---|---|
xs | fontSize: var(--ax-fontSize-xs-fontSize) lineHeight: var(--ax-fontSize-xs-lineHeight) | fontSize: theme.fontSize.xs.fontSize lineHeight: theme.fontSize.xs.lineHeight |
sm | fontSize: var(--ax-fontSize-sm-fontSize) lineHeight: var(--ax-fontSize-sm-lineHeight) | fontSize: theme.fontSize.sm.fontSize lineHeight: theme.fontSize.sm.lineHeight |
md | fontSize: var(--ax-fontSize-md-fontSize) lineHeight: var(--ax-fontSize-md-lineHeight) | fontSize: theme.fontSize.md.fontSize lineHeight: theme.fontSize.md.lineHeight |
lg | fontSize: var(--ax-fontSize-lg-fontSize) lineHeight: var(--ax-fontSize-lg-lineHeight) | fontSize: theme.fontSize.lg.fontSize lineHeight: theme.fontSize.lg.lineHeight |
xl | fontSize: var(--ax-fontSize-xl-fontSize) lineHeight: var(--ax-fontSize-xl-lineHeight) | fontSize: theme.fontSize.xl.fontSize lineHeight: theme.fontSize.xl.lineHeight |
2xl | fontSize: var(--ax-fontSize-2xl-fontSize) lineHeight: var(--ax-fontSize-2xl-lineHeight) | fontSize: theme.fontSize["2xl"].fontSize lineHeight: theme.fontSize["2xl"].lineHeight |
3xl | fontSize: var(--ax-fontSize-3xl-fontSize) lineHeight: var(--ax-fontSize-3xl-lineHeight) | fontSize: theme.fontSize["3xl"].fontSize lineHeight: theme.fontSize["3xl"].lineHeight |
4xl | fontSize: var(--ax-fontSize-4xl-fontSize) lineHeight: var(--ax-fontSize-4xl-lineHeight) | fontSize: theme.fontSize["4xl"].fontSize lineHeight: theme.fontSize["4xl"].lineHeight |
5xl | fontSize: var(--ax-fontSize-5xl-fontSize) lineHeight: var(--ax-fontSize-5xl-lineHeight) | fontSize: theme.fontSize["5xl"].fontSize lineHeight: theme.fontSize["5xl"].lineHeight |
#
maxSize
#
Name | Value | Theme |
---|---|---|
xs | var(--ax-maxSize-xs) | theme.maxSize.xs |
sm | var(--ax-maxSize-sm) | theme.maxSize.sm |
md | var(--ax-maxSize-md) | theme.maxSize.md |
lg | var(--ax-maxSize-lg) | theme.maxSize.lg |
#
size
#
Name | Value | Theme |
---|---|---|
2xs | var(--ax-size-2xs) | theme.fontSize["2xs"] |
xs | var(--ax-size-xs) | theme.fontSize.xs |
sm | var(--ax-size-sm) | theme.fontSize.sm |
md | var(--ax-size-md) | theme.fontSize.md |
lg | var(--ax-size-lg) | theme.fontSize.lg |
xl | var(--ax-size-xl) | theme.fontSize.xl |
3xl | var(--ax-size-3xl) | theme.fontSize["3xl"] |
#
zIndex
#
Name | Value | Theme |
---|---|---|
popover | var(--ax-zIndex-popover) | theme.zIndex.popover |
toast | var(--ax-zIndex-toast) | theme.zIndex.toast |
tooltip | var(--ax-zIndex-tooltip) | theme.zIndex.tooltip |