diff --git a/packages/ui/src/components/drawer/drawer.module.css b/packages/ui/src/components/drawer/drawer.module.css
index e88e84ae..dad03f6c 100644
--- a/packages/ui/src/components/drawer/drawer.module.css
+++ b/packages/ui/src/components/drawer/drawer.module.css
@@ -6,7 +6,7 @@
}
.drawer-content {
- @apply bg-popover-background border;
+ @apply bg-background-overlay border-border-overlay shadow-shadow-overlay border shadow-lg;
@apply mt-24 rounded-t-[10px];
@apply z-modal fixed inset-x-0 bottom-0 h-auto;
@appy flex flex-col;
diff --git a/packages/ui/src/components/dropdown-menu/dropdown-menu.module.css b/packages/ui/src/components/dropdown-menu/dropdown-menu.module.css
index abb17a50..4cfa987c 100644
--- a/packages/ui/src/components/dropdown-menu/dropdown-menu.module.css
+++ b/packages/ui/src/components/dropdown-menu/dropdown-menu.module.css
@@ -67,3 +67,60 @@
@apply text-text-secondary text-xs;
@apply ml-auto;
}
+
+/* ELEVATIONS */
+
+.dropdown-menu-content--sunken,
+.dropdown-menu-content--sunken .dropdown-menu-sub-content {
+ @apply bg-background-sunken shadow-shadow-sunken border-border-sunken;
+}
+.dropdown-menu-content--sunken .dropdown-menu-trigger,
+.dropdown-menu-content--sunken .dropdown-menu-item,
+.dropdown-menu-content--sunken .dropdown-menu-checkbox-item,
+.dropdown-menu-content--sunken .dropdown-menu-radio-item {
+ --mix-color: var(--color-background-sunken);
+}
+
+.dropdown-menu-content--base,
+.dropdown-menu-content--base .dropdown-menu-sub-content {
+ @apply bg-background shadow-shadow-base border-border-base;
+}
+.dropdown-menu-content--base .dropdown-menu-trigger,
+.dropdown-menu-content--base .dropdown-menu-item,
+.dropdown-menu-content--base .dropdown-menu-checkbox-item,
+.dropdown-menu-content--base .dropdown-menu-radio-item {
+ --mix-color: var(--color-background);
+}
+
+.dropdown-menu-content--raised,
+.dropdown-menu-content--raised .dropdown-menu-sub-content {
+ @apply bg-background-raised shadow-shadow-raised border-border-raised;
+}
+.dropdown-menu-content--raised .dropdown-menu-trigger,
+.dropdown-menu-content--raised .dropdown-menu-item,
+.dropdown-menu-content--raised .dropdown-menu-checkbox-item,
+.dropdown-menu-content--raised .dropdown-menu-radio-item {
+ --mix-color: var(--color-background-raised);
+}
+
+.dropdown-menu-content--overlay,
+.dropdown-menu-content--overlay .dropdown-menu-sub-content {
+ @apply bg-background-overlay shadow-shadow-overlay border-border-overlay;
+}
+.dropdown-menu-content--overlay .dropdown-menu-trigger,
+.dropdown-menu-content--overlay .dropdown-menu-item,
+.dropdown-menu-content--overlay .dropdown-menu-checkbox-item,
+.dropdown-menu-content--overlay .dropdown-menu-radio-item {
+ --mix-color: var(--color-background-overlay);
+}
+
+.dropdown-menu-content--floating,
+.dropdown-menu-content--floating .dropdown-menu-sub-content {
+ @apply bg-background-floating shadow-shadow-floating border-border-floating;
+}
+.dropdown-menu-content--floating .dropdown-menu-trigger,
+.dropdown-menu-content--floating .dropdown-menu-item,
+.dropdown-menu-content--floating .dropdown-menu-checkbox-item,
+.dropdown-menu-content--floating .dropdown-menu-radio-item {
+ --mix-color: var(--color-background-floating);
+}
diff --git a/packages/ui/src/components/dropdown-menu/dropdown-menu.tsx b/packages/ui/src/components/dropdown-menu/dropdown-menu.tsx
index 7dc187f9..61be1efb 100644
--- a/packages/ui/src/components/dropdown-menu/dropdown-menu.tsx
+++ b/packages/ui/src/components/dropdown-menu/dropdown-menu.tsx
@@ -1,8 +1,10 @@
import * as React from 'react';
import * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';
+import { VariantProps } from 'class-variance-authority';
import { Check, ChevronRight, Circle } from 'lucide-react';
import styles from '@/components/dropdown-menu/dropdown-menu.module.css';
+import { ELEVATION, generateElevationVariants } from '@/lib/elevations';
import { cn, getThemeProviderRoot } from '@/lib/utils';
const CheckIcon = Check as React.ComponentType<{ className?: string }>;
@@ -58,15 +60,26 @@ const DropdownMenuSubContent = React.forwardRef<
));
DropdownMenuSubContent.displayName = DropdownMenuPrimitive.SubContent.displayName;
+const dropdownMenuContentElevationVariants = generateElevationVariants(
+ styles,
+ 'dropdown-menu-content',
+ ELEVATION.OVERLAY
+);
+
const DropdownMenuContent = React.forwardRef<
React.ElementRef
,
- React.ComponentPropsWithoutRef
->(({ className, sideOffset = 4, ...props }, ref) => (
+ React.ComponentPropsWithoutRef &
+ VariantProps
+>(({ className, sideOffset = 4, elevation = ELEVATION.OVERLAY, ...props }, ref) => (
diff --git a/packages/ui/src/components/filter-dropdown/filter-dropdown.tsx b/packages/ui/src/components/filter-dropdown/filter-dropdown.tsx
index e8403350..924598d6 100644
--- a/packages/ui/src/components/filter-dropdown/filter-dropdown.tsx
+++ b/packages/ui/src/components/filter-dropdown/filter-dropdown.tsx
@@ -11,6 +11,7 @@ import {
DropdownMenuTrigger,
} from '@/components/dropdown-menu/dropdown-menu';
import styles from '@/components/filter-dropdown/filter-dropdown.module.css';
+import { ELEVATION, Elevation } from '@/lib/elevations';
import { cn } from '@/lib/utils';
const ChevronDownIcon = ChevronDown as React.ComponentType<{ className?: string }>;
@@ -24,6 +25,7 @@ interface FilterDropdownProps {
label: string;
options: FilterOption[];
selectedFilters: string[];
+ dropdownElevation?: Elevation;
onToggleFilter: (value: string) => void;
onClearAll: () => void;
buttonClassName?: string;
@@ -34,6 +36,7 @@ const FilterDropdown = ({
label,
options,
selectedFilters,
+ dropdownElevation = ELEVATION.OVERLAY,
onToggleFilter,
onClearAll,
buttonClassName,
@@ -63,6 +66,7 @@ const FilterDropdown = ({
Filters
diff --git a/packages/ui/src/components/icon/icon.module.css b/packages/ui/src/components/icon/icon.module.css
index 5e50db8f..7b812960 100644
--- a/packages/ui/src/components/icon/icon.module.css
+++ b/packages/ui/src/components/icon/icon.module.css
@@ -7,7 +7,7 @@
}
.icon-container:not(.background--transparent) {
- @apply bg-greyscale-800;
+ @apply shadow-sm;
}
.icon-container:not(.background--transparent):not(.size--xs) {
@@ -54,3 +54,25 @@
.background--circle {
@apply rounded-full;
}
+
+/* ELEVATION */
+
+.icon-container--sunken:not(.background--transparent) {
+ @apply bg-background-sunken shadow-shadow-sunken border-border-sunken;
+}
+
+.icon-container--base:not(.background--transparent) {
+ @apply bg-background-base shadow-shadow-base border-border-base;
+}
+
+.icon-container--raised:not(.background--transparent) {
+ @apply bg-background-raised shadow-shadow-raised border-border-raised;
+}
+
+.icon-container--overlay:not(.background--transparent) {
+ @apply bg-background-overlay shadow-shadow-overlay border-border-overlay;
+}
+
+.icon-container--floating:not(.background--transparent) {
+ @apply bg-background-floating shadow-shadow-floating border-border-floating;
+}
diff --git a/packages/ui/src/components/icon/icon.tsx b/packages/ui/src/components/icon/icon.tsx
index a177758d..86753d32 100644
--- a/packages/ui/src/components/icon/icon.tsx
+++ b/packages/ui/src/components/icon/icon.tsx
@@ -4,6 +4,7 @@ import { cva, type VariantProps } from 'class-variance-authority';
import * as LucideIcons from 'lucide-react';
import styles from '@/components/icon/icon.module.css';
+import { ELEVATION, generateElevationVariants } from '@/lib/elevations';
import { cn } from '@/lib/utils';
const iconVariants = cva(styles['icon-container'], {
@@ -26,15 +27,20 @@ const iconVariants = cva(styles['icon-container'], {
},
});
+const iconElevationVariants = generateElevationVariants(styles, 'icon-container', ELEVATION.SUNKEN);
+
export interface IconProps
- extends React.HTMLAttributes, VariantProps {
+ extends
+ React.HTMLAttributes,
+ VariantProps,
+ VariantProps {
icon: React.ReactElement | string;
size?: 'xs' | 'sm' | 'md' | 'lg';
background?: 'square' | 'circle' | 'transparent';
}
const Icon = forwardRef(
- ({ className, size, background, icon, ...props }, ref) => {
+ ({ className, size, background, icon, elevation = ELEVATION.SUNKEN, ...props }, ref) => {
let renderedIcon;
if (typeof icon === 'string') {
@@ -63,7 +69,15 @@ const Icon = forwardRef(
}
return (
-
+
{renderedIcon}
);
diff --git a/packages/ui/src/components/info-card/info-card.tsx b/packages/ui/src/components/info-card/info-card.tsx
index 45905e9a..19718f14 100644
--- a/packages/ui/src/components/info-card/info-card.tsx
+++ b/packages/ui/src/components/info-card/info-card.tsx
@@ -3,6 +3,7 @@ import * as React from 'react';
import { Card, CardContent } from '@/components/card/card';
import { Icon } from '@/components/icon/icon';
import styles from '@/components/info-card/info-card.module.css';
+import { Elevation, ELEVATION, getRelativeElevation } from '@/lib/elevations';
interface InfoCardProps {
label: string;
@@ -10,14 +11,30 @@ interface InfoCardProps {
icon: React.ReactElement | string;
className?: string;
onClick?: () => void;
+ elevation?: Elevation;
}
-const InfoCard = ({ label, description, icon, className, onClick, ...props }: InfoCardProps) => {
+const InfoCard = ({
+ label,
+ description,
+ icon,
+ elevation = ELEVATION.RAISED,
+ className,
+ onClick,
+ ...props
+}: InfoCardProps) => {
return (
-
+
-
+
{label}
{description}
diff --git a/packages/ui/src/components/pagination/pagination.tsx b/packages/ui/src/components/pagination/pagination.tsx
index 13badabf..2d6eb44f 100644
--- a/packages/ui/src/components/pagination/pagination.tsx
+++ b/packages/ui/src/components/pagination/pagination.tsx
@@ -10,6 +10,7 @@ import {
SelectTrigger,
SelectValue,
} from '@/components/select/select';
+import { ELEVATION, Elevation } from '@/lib/elevations';
import { cn } from '@/lib/utils';
const ChevronLeftIcon = ChevronLeft as React.ComponentType<{ className?: string }>;
@@ -25,6 +26,7 @@ interface PaginationProps {
itemsPerPageOptions?: number[];
showInfo?: boolean;
maxVisiblePages?: number;
+ dropdownElevation?: Elevation;
className?: string;
type?: string;
scrollTargetRef?: React.RefObject
| string;
@@ -40,6 +42,7 @@ const Pagination = ({
itemsPerPageOptions = [10, 25, 50, 100],
showInfo = true,
maxVisiblePages = 5,
+ dropdownElevation = ELEVATION.OVERLAY,
className = '',
type = '',
scrollTargetRef,
@@ -146,7 +149,7 @@ const Pagination = ({
-
+
{itemsPerPageOptions.map((option) => (
{option}
diff --git a/packages/ui/src/components/popover/popover.module.css b/packages/ui/src/components/popover/popover.module.css
index 9d72b7cb..608fc2e4 100644
--- a/packages/ui/src/components/popover/popover.module.css
+++ b/packages/ui/src/components/popover/popover.module.css
@@ -1,8 +1,9 @@
@reference '../../theme/theme.module.css';
.popover-content {
- @apply bg-popover-background text-text-primary outline-hidden;
- @apply border-border border;
+ @apply bg-background-overlay text-text-primary outline-hidden;
+ @apply border-border-overlay border;
+ @apply shadow-shadow-overlay shadow-sm;
@apply z-modal w-72 rounded-md p-4;
@apply origin-(--radix-popover-content-transform-origin);
@apply animate-popup-content;
diff --git a/packages/ui/src/components/radio-dropdown/radio-dropdown.tsx b/packages/ui/src/components/radio-dropdown/radio-dropdown.tsx
index e5128959..25cd3ea3 100644
--- a/packages/ui/src/components/radio-dropdown/radio-dropdown.tsx
+++ b/packages/ui/src/components/radio-dropdown/radio-dropdown.tsx
@@ -12,6 +12,7 @@ import {
DropdownMenuTrigger,
} from '@/components/dropdown-menu/dropdown-menu';
import styles from '@/components/radio-dropdown/radio-dropdown.module.css';
+import { ELEVATION, Elevation } from '@/lib/elevations';
const ChevronDownIcon = ChevronDown as React.ComponentType<{ className?: string }>;
@@ -25,6 +26,7 @@ interface RadioDropdownProps {
label: string;
options: FilterOption[];
selectedValue: string;
+ dropdownElevation?: Elevation;
onSelect: (value: string) => void;
className?: string;
}
@@ -33,6 +35,7 @@ const RadioDropdown = ({
label,
options,
selectedValue,
+ dropdownElevation = ELEVATION.OVERLAY,
onSelect,
className,
}: RadioDropdownProps) => {
@@ -57,7 +60,11 @@ const RadioDropdown = ({
-
+
{label}
diff --git a/packages/ui/src/components/select/select.module.css b/packages/ui/src/components/select/select.module.css
index 6b51e1d9..dada7d7b 100644
--- a/packages/ui/src/components/select/select.module.css
+++ b/packages/ui/src/components/select/select.module.css
@@ -60,3 +60,40 @@
@apply bg-border;
@apply -mx-1 my-1 h-px;
}
+
+/* ELEVATIONS */
+
+.select-content--sunken {
+ @apply bg-background-sunken shadow-shadow-sunken border-border-sunken;
+}
+.select-content--sunken .select-item {
+ --mix-color: var(--color-background-sunken);
+}
+
+.select-content--base {
+ @apply bg-background shadow-shadow-base border-border-base;
+}
+.select-content--base .select-item {
+ --mix-color: var(--color-background);
+}
+
+.select-content--raised {
+ @apply bg-background-raised shadow-shadow-raised border-border-raised;
+}
+.select-content--raised .select-item {
+ --mix-color: var(--color-background-raised);
+}
+
+.select-content--overlay {
+ @apply bg-background-overlay shadow-shadow-overlay border-border-overlay;
+}
+.select-content--overlay .select-item {
+ --mix-color: var(--color-background-overlay);
+}
+
+.select-content--floating {
+ @apply bg-background-floating shadow-shadow-floating border-border-floating;
+}
+.select-content--floating .select-item {
+ --mix-color: var(--color-background-floating);
+}
diff --git a/packages/ui/src/components/select/select.tsx b/packages/ui/src/components/select/select.tsx
index 4d0c7eaa..e8413d51 100644
--- a/packages/ui/src/components/select/select.tsx
+++ b/packages/ui/src/components/select/select.tsx
@@ -1,8 +1,10 @@
import * as React from 'react';
import * as SelectPrimitive from '@radix-ui/react-select';
+import { VariantProps } from 'class-variance-authority';
import { Check, ChevronDown, ChevronUp } from 'lucide-react';
import styles from '@/components/select/select.module.css';
+import { ELEVATION, generateElevationVariants } from '@/lib/elevations';
import { cn, getThemeProviderRoot } from '@/lib/utils';
const CheckIcon = Check as React.ComponentType<{ className?: string }>;
@@ -60,16 +62,24 @@ const SelectPortal = ({ children }: { children: React.ReactNode }) => (
{children}
);
+const selectContentElevationVariants = generateElevationVariants(
+ styles,
+ 'select-content',
+ ELEVATION.OVERLAY
+);
+
const SelectContent = React.forwardRef<
React.ElementRef,
- React.ComponentPropsWithoutRef
->(({ className, children, position = 'popper', ...props }, ref) => (
+ React.ComponentPropsWithoutRef &
+ VariantProps
+>(({ className, children, position = 'popper', elevation = ELEVATION.OVERLAY, ...props }, ref) => (
;
@@ -23,6 +24,7 @@ interface SortSelectorProps {
sortField: SortField;
defaultSortField?: SortField;
sortOrder: SortOrder;
+ dropdownElevation?: Elevation;
defaultSortOrder?: SortOrder;
sortMode?: SortMode;
setSortField: (field: SortField) => void;
@@ -36,6 +38,7 @@ function SortSelector({
sortField,
defaultSortField = 'name',
sortOrder,
+ dropdownElevation = ELEVATION.OVERLAY,
defaultSortOrder = 'asc',
sortMode = 'created',
setSortField,
@@ -90,7 +93,11 @@ function SortSelector({
-
+
Sort
{!isDefaultSort && (
diff --git a/packages/ui/src/components/table/table-components.module.css b/packages/ui/src/components/table/table-components.module.css
index 880ee5d3..9085a37c 100644
--- a/packages/ui/src/components/table/table-components.module.css
+++ b/packages/ui/src/components/table/table-components.module.css
@@ -11,7 +11,6 @@
}
.table-header {
- @apply bg-greyscale-800;
@apply [&_tr]:border-b;
}
@@ -20,7 +19,7 @@
}
.table-footer {
- @apply bg-greyscale-400 border-t last:[&>tr]:border-b-0;
+ @apply border-t last:[&>tr]:border-b-0;
@apply font-medium;
}
@@ -44,3 +43,45 @@
.table-caption {
@apply text-text-secondary mt-4 text-sm;
}
+
+/* ELEVATION */
+
+.table--sunken .table-header,
+.table--sunken .table-footer {
+ @apply bg-background-base;
+}
+.table--sunken .table-body {
+ @apply bg-background-sunken;
+}
+
+.table--base .table-header,
+.table--base .table-footer {
+ @apply bg-background-raised;
+}
+.table--base .table-body {
+ @apply bg-background-base;
+}
+
+.table--raised .table-header,
+.table--raised .table-footer {
+ @apply bg-background-overlay;
+}
+.table--raised .table-body {
+ @apply bg-background-raised;
+}
+
+.table--overlay .table-header,
+.table--overlay .table-footer {
+ @apply bg-background-floating;
+}
+.table--overlay .table-body {
+ @apply bg-background-overlay;
+}
+
+.table--floating .table-header,
+.table--floating .table-footer {
+ @apply bg-background-top;
+}
+.table--floating .table-body {
+ @apply bg-background-floating;
+}
diff --git a/packages/ui/src/components/table/table-components.tsx b/packages/ui/src/components/table/table-components.tsx
index 1d8992d7..93b483ff 100644
--- a/packages/ui/src/components/table/table-components.tsx
+++ b/packages/ui/src/components/table/table-components.tsx
@@ -1,15 +1,20 @@
import * as React from 'react';
+import { VariantProps } from 'class-variance-authority';
import styles from '@/components/table/table-components.module.css';
+import { ELEVATION, generateElevationVariants } from '@/lib/elevations';
import { cn } from '@/lib/utils';
-const TableContainer = React.forwardRef>(
- ({ className, ...props }, ref) => (
-
- )
-);
+const tableElevationVariants = generateElevationVariants(styles, 'table', ELEVATION.RAISED);
+
+const TableContainer = React.forwardRef<
+ HTMLTableElement,
+ React.HTMLAttributes & VariantProps
+>(({ className, elevation = ELEVATION.RAISED, ...props }, ref) => (
+
+));
TableContainer.displayName = 'Table';
const TableHeader = React.forwardRef<
diff --git a/packages/ui/src/components/table/table.module.css b/packages/ui/src/components/table/table.module.css
index 35b1a82a..b58d1b96 100644
--- a/packages/ui/src/components/table/table.module.css
+++ b/packages/ui/src/components/table/table.module.css
@@ -1,5 +1,9 @@
@reference '../../theme/theme.module.css';
+.table {
+ @apply shadow-sm;
+}
+
.table-row-clickable {
--mix-color: var(--color-brand-primary);
--hover-darken: 50%;
@@ -9,10 +13,43 @@
}
.table-border {
- @apply border-border border;
+ @apply border;
@apply overflow-hidden rounded-md;
}
-.table-background {
- @apply bg-card-background;
+/* ELEVATION */
+
+.table--sunken {
+ @apply shadow-shadow-sunken;
+}
+.table--sunken.table-border {
+ @apply border-border-sunken;
+}
+
+.table--base {
+ @apply shadow-shadow-base;
+}
+.table--base.table-border {
+ @apply border-border-base;
+}
+
+.table--raised {
+ @apply shadow-shadow-raised;
+}
+.table--raised.table-border {
+ @apply border-border-raised;
+}
+
+.table--overlay {
+ @apply shadow-shadow-overlay;
+}
+.table--overlay.table-border {
+ @apply border-border-overlay;
+}
+
+.table--floating {
+ @apply shadow-shadow-floating;
+}
+.table--floating.table-border {
+ @apply border-border-floating;
}
diff --git a/packages/ui/src/components/table/table.tsx b/packages/ui/src/components/table/table.tsx
index cccbff9a..668676af 100644
--- a/packages/ui/src/components/table/table.tsx
+++ b/packages/ui/src/components/table/table.tsx
@@ -1,4 +1,5 @@
import * as React from 'react';
+import { VariantProps } from 'class-variance-authority';
import {
TableBody,
@@ -8,6 +9,7 @@ import {
TableHeader,
TableRow,
} from '@/components/table/table-components';
+import { ELEVATION, generateElevationVariants } from '@/lib/elevations';
import { cn } from '@/lib/utils';
import styles from './table.module.css';
@@ -31,25 +33,32 @@ type TableCellData = {
className?: string;
};
-interface TableProps {
+interface TableProps extends VariantProps {
columns: TableColumn[];
rows: TableRowData[];
className?: string;
border?: boolean;
- background?: boolean;
}
-const Table = ({ columns, rows, className, border = false, background = false }: TableProps) => {
+const tableElevationVariants = generateElevationVariants(styles, 'table', ELEVATION.BASE);
+
+const Table = ({
+ columns,
+ rows,
+ className,
+ border = false,
+ elevation = ELEVATION.BASE,
+}: TableProps) => {
return (
-
+
{columns.map((column) => (
diff --git a/packages/ui/src/components/tooltip/tooltip.module.css b/packages/ui/src/components/tooltip/tooltip.module.css
index ac2373e3..53d3aeb6 100644
--- a/packages/ui/src/components/tooltip/tooltip.module.css
+++ b/packages/ui/src/components/tooltip/tooltip.module.css
@@ -3,7 +3,8 @@
.tooltip-content {
@apply z-highest;
@apply overflow-hidden rounded-md;
- @apply border-border bg-popover-background border;
+ @apply border-border-overlay bg-background-overlay border;
+ @apply shadow-shadow-overlay shadow-sm;
@apply text-text-primary text-sm;
@apply px-3 py-1.5;
@apply origin-(--radix-tooltip-content-transform-origin);
diff --git a/packages/ui/src/index.ts b/packages/ui/src/index.ts
index 82564049..943eed24 100644
--- a/packages/ui/src/index.ts
+++ b/packages/ui/src/index.ts
@@ -7,3 +7,7 @@ export * from './theme/hooks/use-theme';
/* HOOKS */
export * from './hooks';
+
+/* LIB */
+export { ELEVATION } from './lib/elevations';
+export type { Elevation } from './lib/elevations';
diff --git a/packages/ui/src/lib/elevations.ts b/packages/ui/src/lib/elevations.ts
new file mode 100644
index 00000000..e81e1a3f
--- /dev/null
+++ b/packages/ui/src/lib/elevations.ts
@@ -0,0 +1,43 @@
+import { cva } from 'class-variance-authority';
+
+export const ELEVATION = {
+ SUNKEN: 'sunken',
+ BASE: 'base',
+ RAISED: 'raised',
+ OVERLAY: 'overlay',
+ FLOATING: 'floating',
+};
+
+export type Elevation = (typeof ELEVATION)[keyof typeof ELEVATION];
+
+export const generateElevationVariants = (
+ styles: { [key: string]: string },
+ baseClassName: string,
+ defaultElevation: Elevation
+) => {
+ const classNames: { [key: string]: string } = {};
+ Object.values(ELEVATION).forEach((elevation) => {
+ classNames[elevation] = styles[`${baseClassName}--${elevation}`];
+ });
+
+ const variants = cva(styles[baseClassName], {
+ variants: {
+ elevation: classNames,
+ },
+ defaultVariants: {
+ elevation: defaultElevation,
+ },
+ });
+
+ return variants;
+};
+
+export const getRelativeElevation = (elevation: Elevation, offset: number) => {
+ const elevationIndex = Object.values(ELEVATION).indexOf(elevation);
+ const newElevationIndex = elevationIndex + offset;
+ const relativeElevation = Object.values(ELEVATION)[newElevationIndex];
+ if (!relativeElevation) {
+ console.warn(`Invalid elevation offset: from ${elevation} with offset ${offset}`);
+ }
+ return relativeElevation || elevation;
+};
diff --git a/packages/ui/src/theme/generated/color-vars.css b/packages/ui/src/theme/generated/color-vars.css
index 15580b26..119af1e8 100644
--- a/packages/ui/src/theme/generated/color-vars.css
+++ b/packages/ui/src/theme/generated/color-vars.css
@@ -9,7 +9,14 @@
--color-amber-700: color(display-p3 0.4327 0.2812 0.1347);
--color-amber-800: color(display-p3 0.2643 0.1753 0.09139);
--color-amber-900: color(display-p3 0.1121 0.07777 0.04646);
- --color-background: color(display-p3 0.9738 0.9799 0.9872);
+ --color-background-base: color(display-p3 0.8264 0.8324 0.8394);
+ --color-background-bottom: color(display-p3 0.7383 0.7441 0.751);
+ --color-background-floating: color(display-p3 0.9424 0.9485 0.9557);
+ --color-background-overlay: color(display-p3 0.9034 0.9095 0.9166);
+ --color-background-raised: color(display-p3 0.8648 0.8708 0.8779);
+ --color-background-sunken: color(display-p3 0.7758 0.7817 0.7887);
+ --color-background-top: color(display-p3 0.9817 0.9878 0.9951);
+ --color-background: color(display-p3 0.8264 0.8324 0.8394);
--color-badge-background-accepted: color(display-p3 0.795 0.7755 0.9866);
--color-badge-background-comment: color(display-p3 0.795 0.7755 0.9866);
--color-badge-background-compliant: color(display-p3 0.7403 0.8486 0.7417);
@@ -50,7 +57,13 @@
--color-blue-700: color(display-p3 0.1442 0.2013 0.4303);
--color-blue-800: color(display-p3 0.1017 0.1411 0.2832);
--color-blue-900: color(display-p3 0.06177 0.08243 0.1475);
- --color-border: color(display-p3 0.8698 0.8698 0.8698);
+ --color-border-base: color(display-p3 0.7432 0.7432 0.7432);
+ --color-border-floating: color(display-p3 0.8011 0.807 0.814);
+ --color-border-overlay: color(display-p3 0.8011 0.807 0.814);
+ --color-border-raised: color(display-p3 0.7383 0.7441 0.751);
+ --color-border-sunken: color(display-p3 0.7432 0.7432 0.7432);
+ --color-border-top: color(display-p3 0.8011 0.807 0.814);
+ --color-border: color(display-p3 0.7432 0.7432 0.7432);
--color-brand-green: color(display-p3 0.4374 0.6383 0.4134);
--color-brand-primary: color(display-p3 0.7319 0.6108 0.8873);
--color-brand-red: color(display-p3 0.8114 0.4167 0.3761);
@@ -235,7 +248,14 @@
--color-yellow-900: color(display-p3 0.1107 0.07879 0.04484);
/* Dark theme */
- --dark-color-background: color(display-p3 0.03547 0.03547 0.04268);
+ --dark-color-background-base: color(display-p3 0.06018 0.06019 0.06787);
+ --dark-color-background-bottom: color(display-p3 0.00001094 0.000005131 0.00006469);
+ --dark-color-background-floating: color(display-p3 0.1399 0.14 0.1485);
+ --dark-color-background-overlay: color(display-p3 0.1121 0.1122 0.1204);
+ --dark-color-background-raised: color(display-p3 0.08523 0.08526 0.09324);
+ --dark-color-background-sunken: color(display-p3 0.03547 0.03547 0.04268);
+ --dark-color-background-top: color(display-p3 0.1399 0.14 0.1485);
+ --dark-color-background: color(display-p3 0.06018 0.06019 0.06787);
--dark-color-badge-background-accepted: color(display-p3 0.2473 0.1645 0.5241);
--dark-color-badge-background-comment: color(display-p3 0.2473 0.1645 0.5241);
--dark-color-badge-background-compliant: color(display-p3 0.1689 0.3045 0.136);
@@ -266,6 +286,12 @@
--dark-color-badge-text-ready-for-review: color(display-p3 0.7289 0.7853 0.9401);
--dark-color-badge-text-success: color(display-p3 0.8698 0.8698 0.8698);
--dark-color-badge-text-warning: color(display-p3 0.9327 0.8528 0.7204);
+ --dark-color-border-base: color(display-p3 0.1792 0.1792 0.1792);
+ --dark-color-border-floating: color(display-p3 0.3328 0.3328 0.3426);
+ --dark-color-border-overlay: color(display-p3 0.2796 0.2796 0.2891);
+ --dark-color-border-raised: color(display-p3 0.228 0.2281 0.2372);
+ --dark-color-border-sunken: color(display-p3 0.1792 0.1792 0.1792);
+ --dark-color-border-top: color(display-p3 0.3328 0.3328 0.3426);
--dark-color-border: color(display-p3 0.1792 0.1792 0.1792);
--dark-color-button-danger-border: color(display-p3 0.7365 0.2216 0.2026);
--dark-color-button-danger-fill: color(display-p3 0.8114 0.4167 0.3761);
diff --git a/packages/ui/src/theme/generated/dark-tokens.css b/packages/ui/src/theme/generated/dark-tokens.css
index 51dd65c8..dfdd7002 100644
--- a/packages/ui/src/theme/generated/dark-tokens.css
+++ b/packages/ui/src/theme/generated/dark-tokens.css
@@ -1,6 +1,13 @@
[data-equality-theme='dark'] .root {
color-scheme: dark;
- --color-background: color(display-p3 0.03547 0.03547 0.04268);
+ --color-background-base: color(display-p3 0.06018 0.06019 0.06787);
+ --color-background-bottom: color(display-p3 0.00001094 0.000005131 0.00006469);
+ --color-background-floating: color(display-p3 0.1399 0.14 0.1485);
+ --color-background-overlay: color(display-p3 0.1121 0.1122 0.1204);
+ --color-background-raised: color(display-p3 0.08523 0.08526 0.09324);
+ --color-background-sunken: color(display-p3 0.03547 0.03547 0.04268);
+ --color-background-top: color(display-p3 0.1399 0.14 0.1485);
+ --color-background: color(display-p3 0.06018 0.06019 0.06787);
--color-badge-background-accepted: color(display-p3 0.2473 0.1645 0.5241);
--color-badge-background-comment: color(display-p3 0.2473 0.1645 0.5241);
--color-badge-background-compliant: color(display-p3 0.1689 0.3045 0.136);
@@ -31,6 +38,12 @@
--color-badge-text-ready-for-review: color(display-p3 0.7289 0.7853 0.9401);
--color-badge-text-success: color(display-p3 0.8698 0.8698 0.8698);
--color-badge-text-warning: color(display-p3 0.9327 0.8528 0.7204);
+ --color-border-base: color(display-p3 0.1792 0.1792 0.1792);
+ --color-border-floating: color(display-p3 0.3328 0.3328 0.3426);
+ --color-border-overlay: color(display-p3 0.2796 0.2796 0.2891);
+ --color-border-raised: color(display-p3 0.228 0.2281 0.2372);
+ --color-border-sunken: color(display-p3 0.1792 0.1792 0.1792);
+ --color-border-top: color(display-p3 0.3328 0.3328 0.3426);
--color-border: color(display-p3 0.1792 0.1792 0.1792);
--color-button-danger-border: color(display-p3 0.7365 0.2216 0.2026);
--color-button-danger-fill: color(display-p3 0.8114 0.4167 0.3761);
diff --git a/packages/ui/src/theme/generated/global-dark-tokens.css b/packages/ui/src/theme/generated/global-dark-tokens.css
index 123e710e..b2a9f864 100644
--- a/packages/ui/src/theme/generated/global-dark-tokens.css
+++ b/packages/ui/src/theme/generated/global-dark-tokens.css
@@ -1,6 +1,13 @@
html[data-equality-theme='dark'] {
color-scheme: dark;
- --color-background: color(display-p3 0.03547 0.03547 0.04268);
+ --color-background-base: color(display-p3 0.06018 0.06019 0.06787);
+ --color-background-bottom: color(display-p3 0.00001094 0.000005131 0.00006469);
+ --color-background-floating: color(display-p3 0.1399 0.14 0.1485);
+ --color-background-overlay: color(display-p3 0.1121 0.1122 0.1204);
+ --color-background-raised: color(display-p3 0.08523 0.08526 0.09324);
+ --color-background-sunken: color(display-p3 0.03547 0.03547 0.04268);
+ --color-background-top: color(display-p3 0.1399 0.14 0.1485);
+ --color-background: color(display-p3 0.06018 0.06019 0.06787);
--color-badge-background-accepted: color(display-p3 0.2473 0.1645 0.5241);
--color-badge-background-comment: color(display-p3 0.2473 0.1645 0.5241);
--color-badge-background-compliant: color(display-p3 0.1689 0.3045 0.136);
@@ -31,6 +38,12 @@ html[data-equality-theme='dark'] {
--color-badge-text-ready-for-review: color(display-p3 0.7289 0.7853 0.9401);
--color-badge-text-success: color(display-p3 0.8698 0.8698 0.8698);
--color-badge-text-warning: color(display-p3 0.9327 0.8528 0.7204);
+ --color-border-base: color(display-p3 0.1792 0.1792 0.1792);
+ --color-border-floating: color(display-p3 0.3328 0.3328 0.3426);
+ --color-border-overlay: color(display-p3 0.2796 0.2796 0.2891);
+ --color-border-raised: color(display-p3 0.228 0.2281 0.2372);
+ --color-border-sunken: color(display-p3 0.1792 0.1792 0.1792);
+ --color-border-top: color(display-p3 0.3328 0.3328 0.3426);
--color-border: color(display-p3 0.1792 0.1792 0.1792);
--color-button-danger-border: color(display-p3 0.7365 0.2216 0.2026);
--color-button-danger-fill: color(display-p3 0.8114 0.4167 0.3761);
diff --git a/packages/ui/src/theme/generated/global-light-tokens.css b/packages/ui/src/theme/generated/global-light-tokens.css
index d52746a8..657f7fd3 100644
--- a/packages/ui/src/theme/generated/global-light-tokens.css
+++ b/packages/ui/src/theme/generated/global-light-tokens.css
@@ -13,7 +13,14 @@ html {
--color-amber-700: color(display-p3 0.4327 0.2812 0.1347);
--color-amber-800: color(display-p3 0.2643 0.1753 0.09139);
--color-amber-900: color(display-p3 0.1121 0.07777 0.04646);
- --color-background: color(display-p3 0.9738 0.9799 0.9872);
+ --color-background-base: color(display-p3 0.8264 0.8324 0.8394);
+ --color-background-bottom: color(display-p3 0.7383 0.7441 0.751);
+ --color-background-floating: color(display-p3 0.9424 0.9485 0.9557);
+ --color-background-overlay: color(display-p3 0.9034 0.9095 0.9166);
+ --color-background-raised: color(display-p3 0.8648 0.8708 0.8779);
+ --color-background-sunken: color(display-p3 0.7758 0.7817 0.7887);
+ --color-background-top: color(display-p3 0.9817 0.9878 0.9951);
+ --color-background: color(display-p3 0.8264 0.8324 0.8394);
--color-badge-background-accepted: color(display-p3 0.795 0.7755 0.9866);
--color-badge-background-comment: color(display-p3 0.795 0.7755 0.9866);
--color-badge-background-compliant: color(display-p3 0.7403 0.8486 0.7417);
@@ -54,7 +61,13 @@ html {
--color-blue-700: color(display-p3 0.1442 0.2013 0.4303);
--color-blue-800: color(display-p3 0.1017 0.1411 0.2832);
--color-blue-900: color(display-p3 0.06177 0.08243 0.1475);
- --color-border: color(display-p3 0.8698 0.8698 0.8698);
+ --color-border-base: color(display-p3 0.7432 0.7432 0.7432);
+ --color-border-floating: color(display-p3 0.8011 0.807 0.814);
+ --color-border-overlay: color(display-p3 0.8011 0.807 0.814);
+ --color-border-raised: color(display-p3 0.7383 0.7441 0.751);
+ --color-border-sunken: color(display-p3 0.7432 0.7432 0.7432);
+ --color-border-top: color(display-p3 0.8011 0.807 0.814);
+ --color-border: color(display-p3 0.7432 0.7432 0.7432);
--color-brand-green: color(display-p3 0.4374 0.6383 0.4134);
--color-brand-primary: color(display-p3 0.7319 0.6108 0.8873);
--color-brand-red: color(display-p3 0.8114 0.4167 0.3761);
diff --git a/packages/ui/src/theme/generated/light-tokens.css b/packages/ui/src/theme/generated/light-tokens.css
index e8fa96f1..b7d92138 100644
--- a/packages/ui/src/theme/generated/light-tokens.css
+++ b/packages/ui/src/theme/generated/light-tokens.css
@@ -13,7 +13,14 @@
--color-amber-700: color(display-p3 0.4327 0.2812 0.1347);
--color-amber-800: color(display-p3 0.2643 0.1753 0.09139);
--color-amber-900: color(display-p3 0.1121 0.07777 0.04646);
- --color-background: color(display-p3 0.9738 0.9799 0.9872);
+ --color-background-base: color(display-p3 0.8264 0.8324 0.8394);
+ --color-background-bottom: color(display-p3 0.7383 0.7441 0.751);
+ --color-background-floating: color(display-p3 0.9424 0.9485 0.9557);
+ --color-background-overlay: color(display-p3 0.9034 0.9095 0.9166);
+ --color-background-raised: color(display-p3 0.8648 0.8708 0.8779);
+ --color-background-sunken: color(display-p3 0.7758 0.7817 0.7887);
+ --color-background-top: color(display-p3 0.9817 0.9878 0.9951);
+ --color-background: color(display-p3 0.8264 0.8324 0.8394);
--color-badge-background-accepted: color(display-p3 0.795 0.7755 0.9866);
--color-badge-background-comment: color(display-p3 0.795 0.7755 0.9866);
--color-badge-background-compliant: color(display-p3 0.7403 0.8486 0.7417);
@@ -54,7 +61,13 @@
--color-blue-700: color(display-p3 0.1442 0.2013 0.4303);
--color-blue-800: color(display-p3 0.1017 0.1411 0.2832);
--color-blue-900: color(display-p3 0.06177 0.08243 0.1475);
- --color-border: color(display-p3 0.8698 0.8698 0.8698);
+ --color-border-base: color(display-p3 0.7432 0.7432 0.7432);
+ --color-border-floating: color(display-p3 0.8011 0.807 0.814);
+ --color-border-overlay: color(display-p3 0.8011 0.807 0.814);
+ --color-border-raised: color(display-p3 0.7383 0.7441 0.751);
+ --color-border-sunken: color(display-p3 0.7432 0.7432 0.7432);
+ --color-border-top: color(display-p3 0.8011 0.807 0.814);
+ --color-border: color(display-p3 0.7432 0.7432 0.7432);
--color-brand-green: color(display-p3 0.4374 0.6383 0.4134);
--color-brand-primary: color(display-p3 0.7319 0.6108 0.8873);
--color-brand-red: color(display-p3 0.8114 0.4167 0.3761);
diff --git a/packages/ui/src/theme/generated/tailwind-tokens.css b/packages/ui/src/theme/generated/tailwind-tokens.css
index dd27cea4..7501cdfd 100644
--- a/packages/ui/src/theme/generated/tailwind-tokens.css
+++ b/packages/ui/src/theme/generated/tailwind-tokens.css
@@ -11,6 +11,13 @@
--color-amber-700: var(--color-amber-700);
--color-amber-800: var(--color-amber-800);
--color-amber-900: var(--color-amber-900);
+ --color-background-base: var(--color-background-base);
+ --color-background-bottom: var(--color-background-bottom);
+ --color-background-floating: var(--color-background-floating);
+ --color-background-overlay: var(--color-background-overlay);
+ --color-background-raised: var(--color-background-raised);
+ --color-background-sunken: var(--color-background-sunken);
+ --color-background-top: var(--color-background-top);
--color-background: var(--color-background);
--color-badge-background-accepted: var(--color-badge-background-accepted);
--color-badge-background-comment: var(--color-badge-background-comment);
@@ -52,6 +59,12 @@
--color-blue-700: var(--color-blue-700);
--color-blue-800: var(--color-blue-800);
--color-blue-900: var(--color-blue-900);
+ --color-border-base: var(--color-border-base);
+ --color-border-floating: var(--color-border-floating);
+ --color-border-overlay: var(--color-border-overlay);
+ --color-border-raised: var(--color-border-raised);
+ --color-border-sunken: var(--color-border-sunken);
+ --color-border-top: var(--color-border-top);
--color-border: var(--color-border);
--color-brand-green: var(--color-brand-green);
--color-brand-primary: var(--color-brand-primary);
diff --git a/packages/ui/src/theme/theme-base.css b/packages/ui/src/theme/theme-base.css
index 750b58a6..d6aa8f1e 100644
--- a/packages/ui/src/theme/theme-base.css
+++ b/packages/ui/src/theme/theme-base.css
@@ -21,6 +21,18 @@
--z-index-dropdown: 50;
--z-index-highest: 9999;
+ /* TODO: TEMP ELEVATION COLORS - NEEDS ADJUSTING AND TO BE PUT INTO TOKENS INSTEAD OF BEING PLACED HERE */
+ --color-background-bottom: var(--color-card-background);
+ /* Extra for further down subcomponents */
+
+ --color-border-bottom: transparent; /* Extra for further down subcomponents */
+
+ --color-shadow-sunken: transparent;
+ --color-shadow-base: transparent;
+ --color-shadow-raised: rgba(0, 0, 0, 0.05);
+ --color-shadow-overlay: rgba(0, 0, 0, 0.1);
+ --color-shadow-floating: rgba(0, 0, 0, 0.15);
+
/* Animation */
--animate-grow-in: grow-in 800ms ease-in-out backwards;
--animate-fade-in: fade-in 800ms ease-in-out backwards;