@a4ui/core 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +52 -0
- package/dist/index.d.ts +53 -0
- package/dist/index.js +2157 -0
- package/dist/layout/AppShell.d.ts +18 -0
- package/dist/layout/EffectsToggle.d.ts +1 -0
- package/dist/layout/NavGroup.d.ts +6 -0
- package/dist/layout/SpaceBackground.d.ts +1 -0
- package/dist/layout/ThemeToggle.d.ts +2 -0
- package/dist/lib/cn.d.ts +3 -0
- package/dist/lib/effects.d.ts +4 -0
- package/dist/lib/media.d.ts +1 -0
- package/dist/lib/motion.d.ts +24 -0
- package/dist/lib/theme.d.ts +10 -0
- package/dist/lib/virtual.d.ts +2 -0
- package/dist/styles.css +305 -0
- package/dist/ui/Accordion.d.ts +13 -0
- package/dist/ui/Alert.d.ts +9 -0
- package/dist/ui/AlertDialog.d.ts +9 -0
- package/dist/ui/Avatar.d.ts +9 -0
- package/dist/ui/Badge.d.ts +8 -0
- package/dist/ui/Breadcrumb.d.ts +11 -0
- package/dist/ui/Button.d.ts +10 -0
- package/dist/ui/Card.d.ts +18 -0
- package/dist/ui/Checkbox.d.ts +9 -0
- package/dist/ui/Combobox.d.ts +10 -0
- package/dist/ui/ContextMenu.d.ts +13 -0
- package/dist/ui/DateField.d.ts +10 -0
- package/dist/ui/Drawer.d.ts +10 -0
- package/dist/ui/Dropdown.d.ts +17 -0
- package/dist/ui/Dropzone.d.ts +13 -0
- package/dist/ui/HoverCard.d.ts +7 -0
- package/dist/ui/Input.d.ts +8 -0
- package/dist/ui/Meter.d.ts +9 -0
- package/dist/ui/Modal.d.ts +10 -0
- package/dist/ui/NumberInput.d.ts +10 -0
- package/dist/ui/PageHeader.d.ts +9 -0
- package/dist/ui/Pagination.d.ts +9 -0
- package/dist/ui/Popover.d.ts +7 -0
- package/dist/ui/Progress.d.ts +9 -0
- package/dist/ui/RadioGroup.d.ts +15 -0
- package/dist/ui/SegmentedControl.d.ts +13 -0
- package/dist/ui/Select.d.ts +8 -0
- package/dist/ui/Separator.d.ts +7 -0
- package/dist/ui/Skeleton.d.ts +6 -0
- package/dist/ui/Slider.d.ts +12 -0
- package/dist/ui/Spinner.d.ts +7 -0
- package/dist/ui/Stat.d.ts +16 -0
- package/dist/ui/Switch.d.ts +10 -0
- package/dist/ui/Table.d.ts +11 -0
- package/dist/ui/Tabs.d.ts +14 -0
- package/dist/ui/Textarea.d.ts +8 -0
- package/dist/ui/Toast.d.ts +9 -0
- package/dist/ui/Toggle.d.ts +8 -0
- package/dist/ui/ToggleGroup.d.ts +13 -0
- package/dist/ui/Tooltip.d.ts +7 -0
- package/dist/ui/VirtualList.d.ts +15 -0
- package/package.json +82 -0
- package/preset.js +166 -0
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { JSX } from 'solid-js';
|
|
2
|
+
export interface RadioOption {
|
|
3
|
+
value: string;
|
|
4
|
+
label: string;
|
|
5
|
+
disabled?: boolean;
|
|
6
|
+
}
|
|
7
|
+
interface RadioGroupProps {
|
|
8
|
+
value: string;
|
|
9
|
+
onChange: (value: string) => void;
|
|
10
|
+
options: RadioOption[];
|
|
11
|
+
label?: string;
|
|
12
|
+
class?: string;
|
|
13
|
+
}
|
|
14
|
+
export declare function RadioGroup(props: RadioGroupProps): JSX.Element;
|
|
15
|
+
export {};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { JSX } from 'solid-js';
|
|
2
|
+
export interface SegmentedOption {
|
|
3
|
+
value: string;
|
|
4
|
+
label: string;
|
|
5
|
+
}
|
|
6
|
+
interface SegmentedControlProps {
|
|
7
|
+
value: string;
|
|
8
|
+
onChange: (value: string) => void;
|
|
9
|
+
options: SegmentedOption[];
|
|
10
|
+
class?: string;
|
|
11
|
+
}
|
|
12
|
+
export declare function SegmentedControl(props: SegmentedControlProps): JSX.Element;
|
|
13
|
+
export {};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { JSX, ParentProps } from 'solid-js';
|
|
2
|
+
interface SelectProps extends ParentProps, Omit<JSX.SelectHTMLAttributes<HTMLSelectElement>, 'value' | 'onChange'> {
|
|
3
|
+
value: string;
|
|
4
|
+
onChange: (value: string) => void;
|
|
5
|
+
class?: string;
|
|
6
|
+
}
|
|
7
|
+
export declare function Select(props: SelectProps): JSX.Element;
|
|
8
|
+
export {};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { JSX } from 'solid-js';
|
|
2
|
+
interface SliderProps {
|
|
3
|
+
value: number;
|
|
4
|
+
onChange: (value: number) => void;
|
|
5
|
+
min?: number;
|
|
6
|
+
max?: number;
|
|
7
|
+
step?: number;
|
|
8
|
+
label?: string;
|
|
9
|
+
class?: string;
|
|
10
|
+
}
|
|
11
|
+
export declare function Slider(props: SliderProps): JSX.Element;
|
|
12
|
+
export {};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { JSX } from 'solid-js';
|
|
2
|
+
export type StatTone = 'primary' | 'success' | 'danger' | 'neutral';
|
|
3
|
+
interface StatProps {
|
|
4
|
+
label: string;
|
|
5
|
+
/** Numeric value — count-up tweens toward it on mount and on change. */
|
|
6
|
+
value: number;
|
|
7
|
+
/** Format the (animating) number for display. Default: rounded integer. */
|
|
8
|
+
format?: (n: number) => string;
|
|
9
|
+
icon?: JSX.Element;
|
|
10
|
+
tone?: StatTone;
|
|
11
|
+
/** Entrance stagger delay in seconds (for a row of stats). */
|
|
12
|
+
delay?: number;
|
|
13
|
+
class?: string;
|
|
14
|
+
}
|
|
15
|
+
export declare function Stat(props: StatProps): JSX.Element;
|
|
16
|
+
export {};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { JSX, ParentProps } from 'solid-js';
|
|
2
|
+
interface TableProps extends ParentProps {
|
|
3
|
+
class?: string;
|
|
4
|
+
}
|
|
5
|
+
export declare function Table(props: TableProps): JSX.Element;
|
|
6
|
+
export declare function TableHead(props: TableProps): JSX.Element;
|
|
7
|
+
export declare function TableBody(props: TableProps): JSX.Element;
|
|
8
|
+
export declare function TableRow(props: TableProps): JSX.Element;
|
|
9
|
+
export declare function TableHeadCell(props: TableProps): JSX.Element;
|
|
10
|
+
export declare function TableCell(props: TableProps): JSX.Element;
|
|
11
|
+
export {};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { JSX } from 'solid-js';
|
|
2
|
+
export interface TabItem {
|
|
3
|
+
value: string;
|
|
4
|
+
label: string;
|
|
5
|
+
content: JSX.Element;
|
|
6
|
+
}
|
|
7
|
+
interface TabsProps {
|
|
8
|
+
items: TabItem[];
|
|
9
|
+
value: string;
|
|
10
|
+
onChange: (value: string) => void;
|
|
11
|
+
class?: string;
|
|
12
|
+
}
|
|
13
|
+
export declare function Tabs(props: TabsProps): JSX.Element;
|
|
14
|
+
export {};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { JSX } from 'solid-js';
|
|
2
|
+
interface TextareaProps extends Omit<JSX.TextareaHTMLAttributes<HTMLTextAreaElement>, 'value' | 'onInput'> {
|
|
3
|
+
value: string;
|
|
4
|
+
onInput: (value: string) => void;
|
|
5
|
+
class?: string;
|
|
6
|
+
}
|
|
7
|
+
export declare function Textarea(props: TextareaProps): JSX.Element;
|
|
8
|
+
export {};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { JSX } from 'solid-js';
|
|
2
|
+
export type ToastTone = 'success' | 'error' | 'info';
|
|
3
|
+
export declare const toast: {
|
|
4
|
+
success: (title: string, description?: string) => void;
|
|
5
|
+
error: (title: string, description?: string) => void;
|
|
6
|
+
info: (title: string, description?: string) => void;
|
|
7
|
+
};
|
|
8
|
+
/** Mount once near the app root — hosts the toast viewport. */
|
|
9
|
+
export declare function Toaster(): JSX.Element;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { JSX } from 'solid-js';
|
|
2
|
+
export interface ToggleGroupOption {
|
|
3
|
+
value: string;
|
|
4
|
+
label: string;
|
|
5
|
+
}
|
|
6
|
+
interface ToggleGroupProps {
|
|
7
|
+
value: string | null;
|
|
8
|
+
onChange: (value: string | null) => void;
|
|
9
|
+
options: ToggleGroupOption[];
|
|
10
|
+
class?: string;
|
|
11
|
+
}
|
|
12
|
+
export declare function ToggleGroup(props: ToggleGroupProps): JSX.Element;
|
|
13
|
+
export {};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Accessor, JSX } from 'solid-js';
|
|
2
|
+
interface VirtualListProps<T> {
|
|
3
|
+
/** The full data set. Only the visible slice is rendered. */
|
|
4
|
+
each: T[];
|
|
5
|
+
/** Estimated row size in px — a number, or a per-index function. */
|
|
6
|
+
estimateSize: number | ((index: number) => number);
|
|
7
|
+
/** Rows to render beyond the viewport on each side. Default 10. */
|
|
8
|
+
overscan?: number;
|
|
9
|
+
/** Scroll-container classes. MUST constrain height (e.g. "h-[65vh]"). */
|
|
10
|
+
class?: string;
|
|
11
|
+
/** Row renderer. `index` is an accessor so it stays reactive as rows recycle. */
|
|
12
|
+
children: (item: T, index: Accessor<number>) => JSX.Element;
|
|
13
|
+
}
|
|
14
|
+
export declare function VirtualList<T>(props: VirtualListProps<T>): JSX.Element;
|
|
15
|
+
export {};
|
package/package.json
ADDED
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@a4ui/core",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "A4ui — Spatial Glass design system & component library for SolidJS (Kobalte behavior + Tailwind glass tokens + motion).",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"author": "Luis Alfredo Rivera Acuña <1alfredorivera@gmail.com>",
|
|
8
|
+
"homepage": "https://a4uikit.github.io/a4ui/",
|
|
9
|
+
"repository": {
|
|
10
|
+
"type": "git",
|
|
11
|
+
"url": "git+https://github.com/A4uikit/a4ui.git"
|
|
12
|
+
},
|
|
13
|
+
"bugs": {
|
|
14
|
+
"url": "https://github.com/A4uikit/a4ui/issues"
|
|
15
|
+
},
|
|
16
|
+
"keywords": [
|
|
17
|
+
"solid-js",
|
|
18
|
+
"solidjs",
|
|
19
|
+
"components",
|
|
20
|
+
"component-library",
|
|
21
|
+
"design-system",
|
|
22
|
+
"ui-kit",
|
|
23
|
+
"tailwindcss",
|
|
24
|
+
"kobalte",
|
|
25
|
+
"glassmorphism"
|
|
26
|
+
],
|
|
27
|
+
"sideEffects": [
|
|
28
|
+
"**/*.css"
|
|
29
|
+
],
|
|
30
|
+
"files": [
|
|
31
|
+
"dist",
|
|
32
|
+
"preset.js"
|
|
33
|
+
],
|
|
34
|
+
"main": "./dist/index.js",
|
|
35
|
+
"module": "./dist/index.js",
|
|
36
|
+
"types": "./dist/index.d.ts",
|
|
37
|
+
"exports": {
|
|
38
|
+
".": {
|
|
39
|
+
"types": "./dist/index.d.ts",
|
|
40
|
+
"import": "./dist/index.js"
|
|
41
|
+
},
|
|
42
|
+
"./preset": "./preset.js",
|
|
43
|
+
"./styles.css": "./dist/styles.css"
|
|
44
|
+
},
|
|
45
|
+
"publishConfig": {
|
|
46
|
+
"access": "public"
|
|
47
|
+
},
|
|
48
|
+
"scripts": {
|
|
49
|
+
"build": "vite build",
|
|
50
|
+
"dev": "vite build --watch",
|
|
51
|
+
"preview": "vite --config vite.preview.config.ts",
|
|
52
|
+
"preview:build": "vite build --config vite.preview.config.ts",
|
|
53
|
+
"typecheck": "tsc --noEmit",
|
|
54
|
+
"lint": "eslint src",
|
|
55
|
+
"test": "playwright test",
|
|
56
|
+
"test:ui": "playwright test --ui",
|
|
57
|
+
"test:report": "playwright show-report",
|
|
58
|
+
"prepublishOnly": "npm run build"
|
|
59
|
+
},
|
|
60
|
+
"peerDependencies": {
|
|
61
|
+
"solid-js": "^1.9.13"
|
|
62
|
+
},
|
|
63
|
+
"dependencies": {
|
|
64
|
+
"@kobalte/core": "^0.13.12",
|
|
65
|
+
"@tanstack/solid-virtual": "^3.13.33",
|
|
66
|
+
"clsx": "^2.1.1",
|
|
67
|
+
"lucide-solid": "^1.23.0",
|
|
68
|
+
"solid-motionone": "^1.0.4",
|
|
69
|
+
"solid-transition-group": "^0.3.0",
|
|
70
|
+
"tailwind-merge": "^3.6.0"
|
|
71
|
+
},
|
|
72
|
+
"devDependencies": {
|
|
73
|
+
"@playwright/test": "^1.61.1",
|
|
74
|
+
"eslint-plugin-solid": "^0.14.5",
|
|
75
|
+
"playwright-core": "^1.61.1",
|
|
76
|
+
"tailwindcss": "^3.4.19",
|
|
77
|
+
"typescript": "^5.6.0",
|
|
78
|
+
"vite": "^6.0.0",
|
|
79
|
+
"vite-plugin-dts": "^4.3.0",
|
|
80
|
+
"vite-plugin-solid": "^2.11.12"
|
|
81
|
+
}
|
|
82
|
+
}
|
package/preset.js
ADDED
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
// A4ui — Spatial Glass Tailwind preset.
|
|
2
|
+
//
|
|
3
|
+
// Spread into a consumer's Tailwind config so the semantic color names resolve
|
|
4
|
+
// to the CSS variables shipped in `@a4ui/core/styles.css`, Tailwind alpha modifiers
|
|
5
|
+
// (`bg-primary/90`, `ring-emerald-500/30`, …) keep working, and the glass
|
|
6
|
+
// surface classes (.card / .bg-glass / .tile-glass / .glow-edge) are generated
|
|
7
|
+
// by Tailwind — so ALL surface styling decisions live here, not in a hand-rolled
|
|
8
|
+
// stylesheet. (The CSS variables, motion keyframes and starfield still ship as
|
|
9
|
+
// `@a4ui/core/styles.css` — vars and @keyframes can't be Tailwind utilities.)
|
|
10
|
+
//
|
|
11
|
+
// import a4ui from '@a4ui/core/preset'
|
|
12
|
+
// export default {
|
|
13
|
+
// presets: [a4ui],
|
|
14
|
+
// content: ['./src/**/*.{ts,tsx}', './node_modules/@a4ui/core/dist/**/*.js'],
|
|
15
|
+
// }
|
|
16
|
+
|
|
17
|
+
import plugin from 'tailwindcss/plugin'
|
|
18
|
+
|
|
19
|
+
// Frosted "space glass" surfaces. addComponents so they tree-shake like any
|
|
20
|
+
// utility (emitted only when the class is found in scanned content — a4ui's own
|
|
21
|
+
// components use them, so scanning ./node_modules/@a4ui/core/dist covers it).
|
|
22
|
+
const glass = plugin(({ addComponents }) => {
|
|
23
|
+
addComponents({
|
|
24
|
+
// ---- Primary glass surface ----
|
|
25
|
+
'.card': {
|
|
26
|
+
position: 'relative',
|
|
27
|
+
background: 'hsl(var(--card) / 0.55)',
|
|
28
|
+
backdropFilter: 'blur(8px) saturate(150%)',
|
|
29
|
+
WebkitBackdropFilter: 'blur(8px) saturate(150%)',
|
|
30
|
+
border: '1px solid hsl(var(--foreground) / 0.16)',
|
|
31
|
+
borderRadius: 'var(--radius-xl, 1rem)',
|
|
32
|
+
boxShadow: '0 1px 2px hsl(var(--shadow) / 0.05), 0 4px 12px hsl(var(--shadow) / 0.1)',
|
|
33
|
+
transition: 'transform .25s cubic-bezier(.16,1,.3,1), box-shadow .25s ease, border-color .2s ease',
|
|
34
|
+
},
|
|
35
|
+
"[data-theme='light'] .card": {
|
|
36
|
+
background: 'hsl(var(--card) / 0.72)',
|
|
37
|
+
border: '1px solid hsl(var(--border))',
|
|
38
|
+
},
|
|
39
|
+
|
|
40
|
+
// Cursor-following border glow (SpaceBackground updates --mx/--my on move).
|
|
41
|
+
'.card.glow-edge::before': {
|
|
42
|
+
content: "''",
|
|
43
|
+
position: 'absolute',
|
|
44
|
+
inset: '0',
|
|
45
|
+
borderRadius: 'inherit',
|
|
46
|
+
padding: '1px',
|
|
47
|
+
background:
|
|
48
|
+
'radial-gradient(220px circle at var(--mx, 50%) var(--my, 50%), hsl(199 89% 65% / .9), hsl(217 91% 60% / .25) 45%, transparent 70%)',
|
|
49
|
+
WebkitMask: 'linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0)',
|
|
50
|
+
WebkitMaskComposite: 'xor',
|
|
51
|
+
maskComposite: 'exclude',
|
|
52
|
+
opacity: '0',
|
|
53
|
+
transition: 'opacity .35s ease',
|
|
54
|
+
pointerEvents: 'none',
|
|
55
|
+
},
|
|
56
|
+
'.card.glow-edge:hover::before': { opacity: '1' },
|
|
57
|
+
'@media (prefers-reduced-motion: reduce)': {
|
|
58
|
+
'.card.glow-edge::before': { display: 'none' },
|
|
59
|
+
},
|
|
60
|
+
// Light theme: the cyan glow is faint on white — thicker + more vivid.
|
|
61
|
+
"[data-theme='light'] .card.glow-edge::before": {
|
|
62
|
+
padding: '1.5px',
|
|
63
|
+
background:
|
|
64
|
+
'radial-gradient(240px circle at var(--mx, 50%) var(--my, 50%), hsl(199 98% 48% / 1), hsl(275 90% 58% / 0.55) 42%, transparent 72%)',
|
|
65
|
+
},
|
|
66
|
+
|
|
67
|
+
// ---- Floating overlay glass (menus, modals, drawers, toasts) ----
|
|
68
|
+
'.bg-glass': {
|
|
69
|
+
background: 'hsl(var(--card) / 0.72)',
|
|
70
|
+
backdropFilter: 'blur(14px) saturate(160%)',
|
|
71
|
+
WebkitBackdropFilter: 'blur(14px) saturate(160%)',
|
|
72
|
+
border: '1px solid hsl(var(--foreground) / 0.14)',
|
|
73
|
+
},
|
|
74
|
+
"[data-theme='light'] .bg-glass": {
|
|
75
|
+
background: 'hsl(var(--card) / 0.85)',
|
|
76
|
+
border: '1px solid hsl(var(--border))',
|
|
77
|
+
},
|
|
78
|
+
|
|
79
|
+
// ---- Nested tile inside an existing .card — tint only, no second blur ----
|
|
80
|
+
'.tile-glass': {
|
|
81
|
+
background: 'hsl(var(--foreground) / 0.055)',
|
|
82
|
+
border: '1px solid hsl(var(--foreground) / 0.09)',
|
|
83
|
+
},
|
|
84
|
+
"[data-theme='light'] .tile-glass": {
|
|
85
|
+
background: 'hsl(var(--foreground) / 0.035)',
|
|
86
|
+
borderColor: 'hsl(var(--foreground) / 0.09)',
|
|
87
|
+
},
|
|
88
|
+
|
|
89
|
+
// ---- CALM MODE (html.calm — visual effects OFF, or ?calm=1): opaque
|
|
90
|
+
// surfaces, no blur. High-contrast / low-power / contrast-checkable. ----
|
|
91
|
+
'html.calm .glow-edge::before': { display: 'none !important' },
|
|
92
|
+
'html.calm .badge': {
|
|
93
|
+
backgroundColor: 'hsl(var(--muted)) !important',
|
|
94
|
+
color: 'hsl(var(--foreground)) !important',
|
|
95
|
+
'--tw-ring-color': 'hsl(var(--border)) !important',
|
|
96
|
+
},
|
|
97
|
+
'html.calm .card, html.calm .bg-glass': {
|
|
98
|
+
background: 'hsl(var(--card))',
|
|
99
|
+
backdropFilter: 'none',
|
|
100
|
+
WebkitBackdropFilter: 'none',
|
|
101
|
+
},
|
|
102
|
+
'html.calm .tile-glass': {
|
|
103
|
+
background: 'hsl(var(--muted))',
|
|
104
|
+
borderColor: 'hsl(var(--border))',
|
|
105
|
+
},
|
|
106
|
+
|
|
107
|
+
// ---- Fallback when backdrop-filter isn't applied (old browsers, macOS
|
|
108
|
+
// "Reduce transparency"): make the glass opaque enough to read. ----
|
|
109
|
+
'@supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px)))': {
|
|
110
|
+
'.card': { background: 'hsl(var(--card) / 0.92)' },
|
|
111
|
+
"[data-theme='light'] .card": { background: 'hsl(var(--card) / 0.96)' },
|
|
112
|
+
'.bg-glass': { background: 'hsl(var(--card) / 0.95)' },
|
|
113
|
+
"[data-theme='light'] .bg-glass": { background: 'hsl(var(--card) / 0.97)' },
|
|
114
|
+
},
|
|
115
|
+
'@media (prefers-reduced-transparency: reduce)': {
|
|
116
|
+
'.card': { background: 'hsl(var(--card) / 0.92)' },
|
|
117
|
+
"[data-theme='light'] .card": { background: 'hsl(var(--card) / 0.96)' },
|
|
118
|
+
'.bg-glass': { background: 'hsl(var(--card) / 0.95)' },
|
|
119
|
+
"[data-theme='light'] .bg-glass": { background: 'hsl(var(--card) / 0.97)' },
|
|
120
|
+
},
|
|
121
|
+
})
|
|
122
|
+
})
|
|
123
|
+
|
|
124
|
+
/** @type {import('tailwindcss').Config} */
|
|
125
|
+
export default {
|
|
126
|
+
theme: {
|
|
127
|
+
extend: {
|
|
128
|
+
colors: {
|
|
129
|
+
background: 'hsl(var(--background) / <alpha-value>)',
|
|
130
|
+
foreground: 'hsl(var(--foreground) / <alpha-value>)',
|
|
131
|
+
card: {
|
|
132
|
+
DEFAULT: 'hsl(var(--card) / <alpha-value>)',
|
|
133
|
+
foreground: 'hsl(var(--card-foreground) / <alpha-value>)',
|
|
134
|
+
},
|
|
135
|
+
muted: {
|
|
136
|
+
DEFAULT: 'hsl(var(--muted) / <alpha-value>)',
|
|
137
|
+
foreground: 'hsl(var(--muted-foreground) / <alpha-value>)',
|
|
138
|
+
},
|
|
139
|
+
border: 'hsl(var(--border) / <alpha-value>)',
|
|
140
|
+
input: 'hsl(var(--input) / <alpha-value>)',
|
|
141
|
+
primary: {
|
|
142
|
+
DEFAULT: 'hsl(var(--primary) / <alpha-value>)',
|
|
143
|
+
foreground: 'hsl(var(--primary-foreground) / <alpha-value>)',
|
|
144
|
+
},
|
|
145
|
+
accent: {
|
|
146
|
+
DEFAULT: 'hsl(var(--accent) / <alpha-value>)',
|
|
147
|
+
foreground: 'hsl(var(--accent-foreground) / <alpha-value>)',
|
|
148
|
+
},
|
|
149
|
+
ring: 'hsl(var(--ring) / <alpha-value>)',
|
|
150
|
+
destructive: {
|
|
151
|
+
DEFAULT: 'hsl(var(--destructive) / <alpha-value>)',
|
|
152
|
+
foreground: 'hsl(var(--destructive-foreground) / <alpha-value>)',
|
|
153
|
+
},
|
|
154
|
+
'data-emit': 'hsl(var(--data-emit) / <alpha-value>)',
|
|
155
|
+
'data-received': 'hsl(var(--data-received) / <alpha-value>)',
|
|
156
|
+
'data-net': 'hsl(var(--data-net) / <alpha-value>)',
|
|
157
|
+
},
|
|
158
|
+
fontFamily: {
|
|
159
|
+
sans: ['"IBM Plex Sans"', 'ui-sans-serif', 'system-ui', 'sans-serif'],
|
|
160
|
+
mono: ['"IBM Plex Mono"', 'ui-monospace', 'monospace'],
|
|
161
|
+
},
|
|
162
|
+
borderRadius: { xl: '1rem' },
|
|
163
|
+
},
|
|
164
|
+
},
|
|
165
|
+
plugins: [glass],
|
|
166
|
+
}
|