@nukleas/cyberdesign 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 +38 -0
- package/build.ts +286 -0
- package/dist/cyberdesign-vars-only.css +116 -0
- package/dist/cyberdesign.css +8377 -0
- package/dist/fonts/JetBrainsMono-Variable.woff2 +0 -0
- package/dist/fonts/OFL.txt +93 -0
- package/dist/react/Accordion.d.ts +34 -0
- package/dist/react/Accordion.js +13 -0
- package/dist/react/Alert.d.ts +19 -0
- package/dist/react/Alert.js +6 -0
- package/dist/react/AugButton.d.ts +12 -0
- package/dist/react/AugButton.js +6 -0
- package/dist/react/AugPanel.d.ts +10 -0
- package/dist/react/AugPanel.js +6 -0
- package/dist/react/Avatar.d.ts +28 -0
- package/dist/react/Avatar.js +11 -0
- package/dist/react/Badge.d.ts +10 -0
- package/dist/react/Badge.js +6 -0
- package/dist/react/Breadcrumb.d.ts +19 -0
- package/dist/react/Breadcrumb.js +10 -0
- package/dist/react/Button.d.ts +12 -0
- package/dist/react/Button.js +6 -0
- package/dist/react/Checkbox.d.ts +9 -0
- package/dist/react/Checkbox.js +9 -0
- package/dist/react/Dropdown.d.ts +35 -0
- package/dist/react/Dropdown.js +20 -0
- package/dist/react/Field.d.ts +13 -0
- package/dist/react/Field.js +6 -0
- package/dist/react/Gauge.d.ts +19 -0
- package/dist/react/Gauge.js +6 -0
- package/dist/react/GlowCard.d.ts +12 -0
- package/dist/react/GlowCard.js +4 -0
- package/dist/react/HudBar.d.ts +34 -0
- package/dist/react/HudBar.js +10 -0
- package/dist/react/HudFrame.d.ts +19 -0
- package/dist/react/HudFrame.js +6 -0
- package/dist/react/Input.d.ts +11 -0
- package/dist/react/Input.js +6 -0
- package/dist/react/Interference.d.ts +18 -0
- package/dist/react/Interference.js +6 -0
- package/dist/react/Kbd.d.ts +18 -0
- package/dist/react/Kbd.js +11 -0
- package/dist/react/Label.d.ts +8 -0
- package/dist/react/Label.js +6 -0
- package/dist/react/Modal.d.ts +19 -0
- package/dist/react/Modal.js +9 -0
- package/dist/react/Pagination.d.ts +23 -0
- package/dist/react/Pagination.js +28 -0
- package/dist/react/PanelHeader.d.ts +9 -0
- package/dist/react/PanelHeader.js +6 -0
- package/dist/react/Progress.d.ts +13 -0
- package/dist/react/Progress.js +6 -0
- package/dist/react/Radio.d.ts +9 -0
- package/dist/react/Radio.js +9 -0
- package/dist/react/Scanner.d.ts +11 -0
- package/dist/react/Scanner.js +6 -0
- package/dist/react/Select.d.ts +13 -0
- package/dist/react/Select.js +6 -0
- package/dist/react/Separator.d.ts +11 -0
- package/dist/react/Separator.js +7 -0
- package/dist/react/Skeleton.d.ts +11 -0
- package/dist/react/Skeleton.js +13 -0
- package/dist/react/Slider.d.ts +9 -0
- package/dist/react/Slider.js +9 -0
- package/dist/react/Spinner.d.ts +11 -0
- package/dist/react/Spinner.js +6 -0
- package/dist/react/Stat.d.ts +20 -0
- package/dist/react/Stat.js +11 -0
- package/dist/react/Switch.d.ts +9 -0
- package/dist/react/Switch.js +6 -0
- package/dist/react/Table.d.ts +55 -0
- package/dist/react/Table.js +36 -0
- package/dist/react/Tabs.d.ts +28 -0
- package/dist/react/Tabs.js +16 -0
- package/dist/react/Terminal.d.ts +33 -0
- package/dist/react/Terminal.js +6 -0
- package/dist/react/Textarea.d.ts +7 -0
- package/dist/react/Textarea.js +6 -0
- package/dist/react/Ticker.d.ts +13 -0
- package/dist/react/Ticker.js +7 -0
- package/dist/react/Toast.d.ts +15 -0
- package/dist/react/Toast.js +6 -0
- package/dist/react/Tooltip.d.ts +11 -0
- package/dist/react/Tooltip.js +6 -0
- package/dist/react/index.d.ts +39 -0
- package/dist/react/index.js +46 -0
- package/dist/tailwind-theme.css +171 -0
- package/dist/tokens/base.d.ts +33 -0
- package/dist/tokens/base.js +41 -0
- package/dist/tokens/index.d.ts +7 -0
- package/dist/tokens/index.js +7 -0
- package/dist/tokens/semantic.d.ts +1 -0
- package/dist/tokens/semantic.js +54 -0
- package/dist/tokens/themes/cyan.d.ts +1 -0
- package/dist/tokens/themes/cyan.js +15 -0
- package/dist/tokens/themes/green.d.ts +1 -0
- package/dist/tokens/themes/green.js +15 -0
- package/dist/tokens/themes/orange.d.ts +1 -0
- package/dist/tokens/themes/orange.js +15 -0
- package/dist/tokens/themes/red.d.ts +1 -0
- package/dist/tokens/themes/red.js +15 -0
- package/dist/tokens/themes/steel.d.ts +1 -0
- package/dist/tokens/themes/steel.js +15 -0
- package/package.json +73 -0
- package/src/css/a11y.css +67 -0
- package/src/css/animations.css +111 -0
- package/src/css/base.css +34 -0
- package/src/css/components/accordion.css +148 -0
- package/src/css/components/alert.css +116 -0
- package/src/css/components/app-patterns.css +894 -0
- package/src/css/components/augmented.css +474 -0
- package/src/css/components/avatar.css +105 -0
- package/src/css/components/badge.css +46 -0
- package/src/css/components/breadcrumb.css +75 -0
- package/src/css/components/button.css +130 -0
- package/src/css/components/calendar.css +135 -0
- package/src/css/components/card.css +68 -0
- package/src/css/components/carousel.css +69 -0
- package/src/css/components/charts.css +464 -0
- package/src/css/components/checkbox.css +136 -0
- package/src/css/components/command.css +162 -0
- package/src/css/components/dropdown.css +187 -0
- package/src/css/components/form.css +280 -0
- package/src/css/components/gauge.css +156 -0
- package/src/css/components/glow-card.css +32 -0
- package/src/css/components/hud.css +165 -0
- package/src/css/components/image.css +164 -0
- package/src/css/components/input-otp.css +53 -0
- package/src/css/components/input.css +182 -0
- package/src/css/components/interference.css +217 -0
- package/src/css/components/kbd.css +54 -0
- package/src/css/components/layout-extras.css +256 -0
- package/src/css/components/modal.css +146 -0
- package/src/css/components/navigation-extras.css +280 -0
- package/src/css/components/pagination.css +122 -0
- package/src/css/components/panel-header.css +55 -0
- package/src/css/components/popover.css +112 -0
- package/src/css/components/scanner.css +125 -0
- package/src/css/components/select.css +99 -0
- package/src/css/components/sheet.css +149 -0
- package/src/css/components/skeleton.css +77 -0
- package/src/css/components/slider.css +116 -0
- package/src/css/components/spinner.css +101 -0
- package/src/css/components/spreadsheet.css +314 -0
- package/src/css/components/svg.css +104 -0
- package/src/css/components/switch.css +114 -0
- package/src/css/components/table.css +115 -0
- package/src/css/components/tabs.css +159 -0
- package/src/css/components/terminal.css +259 -0
- package/src/css/components/ticker.css +100 -0
- package/src/css/components/toast.css +137 -0
- package/src/css/components/toaster.css +48 -0
- package/src/css/components/toggle.css +99 -0
- package/src/css/components/typography.css +122 -0
- package/src/css/components/vectorbg.css +57 -0
- package/src/css/utilities.css +165 -0
- package/src/fonts/JetBrainsMono-Variable.woff2 +0 -0
- package/src/fonts/OFL.txt +93 -0
- package/src/js/charts.js +533 -0
- package/src/react/Accordion.tsx +85 -0
- package/src/react/Alert.tsx +58 -0
- package/src/react/AugButton.tsx +40 -0
- package/src/react/AugPanel.tsx +36 -0
- package/src/react/Avatar.tsx +69 -0
- package/src/react/Badge.tsx +28 -0
- package/src/react/Breadcrumb.tsx +63 -0
- package/src/react/Button.tsx +39 -0
- package/src/react/Checkbox.tsx +31 -0
- package/src/react/Dropdown.tsx +104 -0
- package/src/react/Field.tsx +36 -0
- package/src/react/Gauge.tsx +57 -0
- package/src/react/GlowCard.tsx +25 -0
- package/src/react/HudBar.tsx +86 -0
- package/src/react/HudFrame.tsx +52 -0
- package/src/react/Input.tsx +38 -0
- package/src/react/Interference.tsx +53 -0
- package/src/react/Kbd.tsx +62 -0
- package/src/react/Label.tsx +31 -0
- package/src/react/Modal.tsx +63 -0
- package/src/react/Pagination.tsx +113 -0
- package/src/react/PanelHeader.tsx +28 -0
- package/src/react/Progress.tsx +47 -0
- package/src/react/Radio.tsx +31 -0
- package/src/react/Scanner.tsx +37 -0
- package/src/react/Select.tsx +43 -0
- package/src/react/Separator.tsx +40 -0
- package/src/react/Skeleton.tsx +50 -0
- package/src/react/Slider.tsx +28 -0
- package/src/react/Spinner.tsx +39 -0
- package/src/react/Stat.tsx +52 -0
- package/src/react/Switch.tsx +25 -0
- package/src/react/Table.tsx +144 -0
- package/src/react/Tabs.tsx +97 -0
- package/src/react/Terminal.tsx +95 -0
- package/src/react/Textarea.tsx +20 -0
- package/src/react/Ticker.tsx +46 -0
- package/src/react/Toast.tsx +43 -0
- package/src/react/Tooltip.tsx +32 -0
- package/src/react/index.ts +52 -0
- package/src/tokens/base.ts +48 -0
- package/src/tokens/index.ts +7 -0
- package/src/tokens/semantic.ts +63 -0
- package/src/tokens/themes/cyan.ts +16 -0
- package/src/tokens/themes/green.ts +16 -0
- package/src/tokens/themes/orange.ts +16 -0
- package/src/tokens/themes/red.ts +16 -0
- package/src/tokens/themes/steel.ts +16 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
const cx = (...parts) => parts.filter(Boolean).join(' ');
|
|
3
|
+
/** Auto-scrolling data ticker / feed — pauses on hover, respects reduced motion. */
|
|
4
|
+
export function Ticker({ items, speed, fast = false, vertical = false, className = '', ...rest }) {
|
|
5
|
+
const resolvedSpeed = fast ? 'fast' : speed;
|
|
6
|
+
return (_jsx("div", { className: cx('cd-ticker', resolvedSpeed && `cd-ticker--${resolvedSpeed}`, vertical && 'cd-ticker--vertical', className), ...rest, children: _jsx("div", { className: "cd-ticker__inner", children: items.map((item, i) => (_jsx("span", { className: "cd-ticker__item", children: item }, i))) }) }));
|
|
7
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { HTMLAttributes, ReactNode } from 'react';
|
|
2
|
+
export interface ToastProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {
|
|
3
|
+
/** Semantic color. `accent` follows the active theme accent. */
|
|
4
|
+
variant?: 'info' | 'success' | 'warning' | 'error' | 'accent';
|
|
5
|
+
/** Leading glyph (e.g. ℹ ✓ ⚠ ✕ ⬡). */
|
|
6
|
+
icon?: ReactNode;
|
|
7
|
+
/** Bold uppercase heading line. */
|
|
8
|
+
title?: ReactNode;
|
|
9
|
+
/** When provided, renders a dismiss ✕ that calls this on click. */
|
|
10
|
+
onDismiss?: () => void;
|
|
11
|
+
/** Message body. */
|
|
12
|
+
children?: ReactNode;
|
|
13
|
+
}
|
|
14
|
+
/** Single notification toast — semantic color, icon, title/body and optional dismiss. */
|
|
15
|
+
export declare function Toast({ variant, icon, title, onDismiss, className, children, ...rest }: ToastProps): import("react").JSX.Element;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
const cx = (...parts) => parts.filter(Boolean).join(' ');
|
|
3
|
+
/** Single notification toast — semantic color, icon, title/body and optional dismiss. */
|
|
4
|
+
export function Toast({ variant = 'info', icon, title, onDismiss, className = '', children, ...rest }) {
|
|
5
|
+
return (_jsxs("div", { className: cx('cd-toast', `cd-toast--${variant}`, className), ...rest, children: [icon != null && _jsx("span", { className: "cd-toast__icon", children: icon }), _jsxs("div", { className: "cd-toast__content", children: [title != null && _jsx("div", { className: "cd-toast__title", children: title }), children != null && _jsx("div", { className: "cd-toast__body", children: children })] }), onDismiss && (_jsx("button", { className: "cd-toast__dismiss", onClick: onDismiss, "aria-label": "Dismiss", children: "\u2715" }))] }));
|
|
6
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { HTMLAttributes, ReactNode } from 'react';
|
|
2
|
+
export interface TooltipProps extends Omit<HTMLAttributes<HTMLSpanElement>, 'content'> {
|
|
3
|
+
/** Tooltip text shown on hover (rendered via the `data-tip` attribute). */
|
|
4
|
+
tip: string;
|
|
5
|
+
/** Show the tooltip below the trigger instead of above. */
|
|
6
|
+
below?: boolean;
|
|
7
|
+
/** The trigger content the tooltip wraps. */
|
|
8
|
+
children?: ReactNode;
|
|
9
|
+
}
|
|
10
|
+
/** CSS-only tooltip — wraps a trigger and reveals `tip` text on hover. */
|
|
11
|
+
export declare function Tooltip({ tip, below, className, children, ...rest }: TooltipProps): import("react").JSX.Element;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
const cx = (...parts) => parts.filter(Boolean).join(' ');
|
|
3
|
+
/** CSS-only tooltip — wraps a trigger and reveals `tip` text on hover. */
|
|
4
|
+
export function Tooltip({ tip, below = false, className = '', children, ...rest }) {
|
|
5
|
+
return (_jsx("span", { className: cx('cd-tooltip', below && 'cd-tooltip--below', className), "data-tip": tip, ...rest, children: children }));
|
|
6
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
export * from './GlowCard';
|
|
2
|
+
export * from './Button';
|
|
3
|
+
export * from './AugButton';
|
|
4
|
+
export * from './Badge';
|
|
5
|
+
export * from './Kbd';
|
|
6
|
+
export * from './Spinner';
|
|
7
|
+
export * from './Skeleton';
|
|
8
|
+
export * from './Avatar';
|
|
9
|
+
export * from './Input';
|
|
10
|
+
export * from './Textarea';
|
|
11
|
+
export * from './Select';
|
|
12
|
+
export * from './Checkbox';
|
|
13
|
+
export * from './Radio';
|
|
14
|
+
export * from './Switch';
|
|
15
|
+
export * from './Slider';
|
|
16
|
+
export * from './Label';
|
|
17
|
+
export * from './Field';
|
|
18
|
+
export * from './Alert';
|
|
19
|
+
export * from './Toast';
|
|
20
|
+
export * from './Tooltip';
|
|
21
|
+
export * from './Progress';
|
|
22
|
+
export * from './Separator';
|
|
23
|
+
export * from './PanelHeader';
|
|
24
|
+
export * from './Stat';
|
|
25
|
+
export * from './Tabs';
|
|
26
|
+
export * from './Accordion';
|
|
27
|
+
export * from './Breadcrumb';
|
|
28
|
+
export * from './Pagination';
|
|
29
|
+
export * from './Dropdown';
|
|
30
|
+
export * from './Modal';
|
|
31
|
+
export * from './Table';
|
|
32
|
+
export * from './AugPanel';
|
|
33
|
+
export * from './Terminal';
|
|
34
|
+
export * from './HudFrame';
|
|
35
|
+
export * from './HudBar';
|
|
36
|
+
export * from './Gauge';
|
|
37
|
+
export * from './Ticker';
|
|
38
|
+
export * from './Scanner';
|
|
39
|
+
export * from './Interference';
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
// cyberdesign React bindings — thin wrappers over the cd-* CSS contract.
|
|
2
|
+
// The look comes from dist/cyberdesign.css; these components only apply classes.
|
|
3
|
+
export * from './GlowCard';
|
|
4
|
+
// Primitives
|
|
5
|
+
export * from './Button';
|
|
6
|
+
export * from './AugButton';
|
|
7
|
+
export * from './Badge';
|
|
8
|
+
export * from './Kbd';
|
|
9
|
+
export * from './Spinner';
|
|
10
|
+
export * from './Skeleton';
|
|
11
|
+
export * from './Avatar';
|
|
12
|
+
// Form controls
|
|
13
|
+
export * from './Input';
|
|
14
|
+
export * from './Textarea';
|
|
15
|
+
export * from './Select';
|
|
16
|
+
export * from './Checkbox';
|
|
17
|
+
export * from './Radio';
|
|
18
|
+
export * from './Switch';
|
|
19
|
+
export * from './Slider';
|
|
20
|
+
export * from './Label';
|
|
21
|
+
export * from './Field';
|
|
22
|
+
// Feedback & display
|
|
23
|
+
export * from './Alert';
|
|
24
|
+
export * from './Toast';
|
|
25
|
+
export * from './Tooltip';
|
|
26
|
+
export * from './Progress';
|
|
27
|
+
export * from './Separator';
|
|
28
|
+
export * from './PanelHeader';
|
|
29
|
+
export * from './Stat';
|
|
30
|
+
// Navigation & layout
|
|
31
|
+
export * from './Tabs';
|
|
32
|
+
export * from './Accordion';
|
|
33
|
+
export * from './Breadcrumb';
|
|
34
|
+
export * from './Pagination';
|
|
35
|
+
export * from './Dropdown';
|
|
36
|
+
export * from './Modal';
|
|
37
|
+
export * from './Table';
|
|
38
|
+
export * from './AugPanel';
|
|
39
|
+
// Cyber / terminal
|
|
40
|
+
export * from './Terminal';
|
|
41
|
+
export * from './HudFrame';
|
|
42
|
+
export * from './HudBar';
|
|
43
|
+
export * from './Gauge';
|
|
44
|
+
export * from './Ticker';
|
|
45
|
+
export * from './Scanner';
|
|
46
|
+
export * from './Interference';
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
/* cyberdesign v0.1.0 — generated by build.ts, DO NOT EDIT */
|
|
2
|
+
|
|
3
|
+
/* Import this in your globals.css after @import "tailwindcss" */
|
|
4
|
+
|
|
5
|
+
/* 1. Load CSS variables */
|
|
6
|
+
:root {
|
|
7
|
+
--cd-bg: #05060a;
|
|
8
|
+
--cd-bg-panel: #0b0f18;
|
|
9
|
+
--cd-bg-panel-hover: #111827;
|
|
10
|
+
--cd-bg-surface: rgba(11, 15, 24, 0.94);
|
|
11
|
+
--cd-border: #26324c;
|
|
12
|
+
--cd-border-dim: #1e1e24;
|
|
13
|
+
--cd-text: #e8e4e0;
|
|
14
|
+
--cd-text-alt: #f2f7ff;
|
|
15
|
+
--cd-text-secondary: #a7b7d6;
|
|
16
|
+
--cd-text-muted: #8a8078;
|
|
17
|
+
--cd-text-muted-alt: #7a8599;
|
|
18
|
+
--cd-text-dim: #6a625c;
|
|
19
|
+
--cd-accent-secondary: #ff2bd6;
|
|
20
|
+
--cd-accent-secondary-glow: rgba(255, 43, 214, 0.32);
|
|
21
|
+
--cd-accent-secondary-subtle: rgba(255, 43, 214, 0.12);
|
|
22
|
+
--cd-neon-green: #52ff9f;
|
|
23
|
+
--cd-neon-red: #ff456c;
|
|
24
|
+
--cd-neon-blue: #6aa8ff;
|
|
25
|
+
--cd-neon-purple: #9d7cff;
|
|
26
|
+
--cd-neon-yellow: #f7ff5a;
|
|
27
|
+
--cd-neon-amber: #ffaa00;
|
|
28
|
+
--cd-neon-orange: #ff8800;
|
|
29
|
+
--cd-neon-cyan: #47f6ff;
|
|
30
|
+
--cd-neon-magenta: #ff2bd6;
|
|
31
|
+
--cd-orange: #ff8800;
|
|
32
|
+
--cd-amber: #ffaa00;
|
|
33
|
+
--cd-gold: #ffcc00;
|
|
34
|
+
--cd-cyan: #47f6ff;
|
|
35
|
+
--cd-magenta: #ff2bd6;
|
|
36
|
+
--cd-purple: #9d7cff;
|
|
37
|
+
--cd-green: #52ff9f;
|
|
38
|
+
--cd-red: #ff456c;
|
|
39
|
+
--cd-blue: #6aa8ff;
|
|
40
|
+
--cd-yellow: #f7ff5a;
|
|
41
|
+
--cd-scanline-color: rgba(0, 0, 0, 0.18);
|
|
42
|
+
--cd-pixel-grid-color: rgba(71, 246, 255, 0.055);
|
|
43
|
+
--cd-font-mono: "JetBrains Mono", ui-monospace, "SF Mono", Consolas, monospace;
|
|
44
|
+
--cd-text-xs: 0.6875rem;
|
|
45
|
+
--cd-text-sm: 0.75rem;
|
|
46
|
+
--cd-text-base: 0.8125rem;
|
|
47
|
+
--cd-text-md: 0.875rem;
|
|
48
|
+
--cd-text-lg: 0.9375rem;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
.theme-orange {
|
|
52
|
+
--cd-accent: #ff8800;
|
|
53
|
+
--cd-accent-bright: #ffaa00;
|
|
54
|
+
--cd-accent-subtle: rgba(255, 136, 0, 0.12);
|
|
55
|
+
--cd-accent-glow: rgba(255, 136, 0, 0.40);
|
|
56
|
+
--cd-accent-subtle-glow: rgba(255, 136, 0, 0.20);
|
|
57
|
+
--cd-border-glow: rgba(255, 136, 0, 0.20);
|
|
58
|
+
--cd-scrollbar-thumb: rgba(255, 136, 0, 0.20);
|
|
59
|
+
--cd-panel-shadow: inset 0 0 0 1px rgba(255, 136, 0, 0.04), 0 0 24px rgba(255, 136, 0, 0.07);
|
|
60
|
+
--cd-accent-secondary: #ff2bd6;
|
|
61
|
+
--cd-accent-secondary-glow: rgba(255, 43, 214, 0.32);
|
|
62
|
+
--cd-accent-secondary-subtle: rgba(255, 43, 214, 0.12);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
.theme-cyan {
|
|
66
|
+
--cd-accent: #47f6ff;
|
|
67
|
+
--cd-accent-bright: #bdffff;
|
|
68
|
+
--cd-accent-subtle: rgba(71, 246, 255, 0.12);
|
|
69
|
+
--cd-accent-glow: rgba(71, 246, 255, 0.34);
|
|
70
|
+
--cd-accent-subtle-glow: rgba(71, 246, 255, 0.20);
|
|
71
|
+
--cd-border-glow: rgba(71, 246, 255, 0.20);
|
|
72
|
+
--cd-scrollbar-thumb: rgba(71, 246, 255, 0.20);
|
|
73
|
+
--cd-panel-shadow: inset 0 0 0 1px rgba(71, 246, 255, 0.04), 0 0 24px rgba(71, 246, 255, 0.07);
|
|
74
|
+
--cd-accent-secondary: #ff2bd6;
|
|
75
|
+
--cd-accent-secondary-glow: rgba(255, 43, 214, 0.32);
|
|
76
|
+
--cd-accent-secondary-subtle: rgba(255, 43, 214, 0.12);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
.theme-green {
|
|
80
|
+
--cd-accent: #00ff00;
|
|
81
|
+
--cd-accent-bright: #52ff9f;
|
|
82
|
+
--cd-accent-subtle: rgba(0, 255, 0, 0.12);
|
|
83
|
+
--cd-accent-glow: rgba(0, 255, 0, 0.34);
|
|
84
|
+
--cd-accent-subtle-glow: rgba(0, 255, 0, 0.20);
|
|
85
|
+
--cd-border-glow: rgba(0, 255, 0, 0.20);
|
|
86
|
+
--cd-scrollbar-thumb: rgba(0, 255, 0, 0.20);
|
|
87
|
+
--cd-panel-shadow: inset 0 0 0 1px rgba(0, 255, 0, 0.04), 0 0 24px rgba(0, 255, 0, 0.07);
|
|
88
|
+
--cd-accent-secondary: #9d7cff;
|
|
89
|
+
--cd-accent-secondary-glow: rgba(157, 124, 255, 0.32);
|
|
90
|
+
--cd-accent-secondary-subtle: rgba(157, 124, 255, 0.12);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
.theme-red {
|
|
94
|
+
--cd-accent: #ff4444;
|
|
95
|
+
--cd-accent-bright: #ff7777;
|
|
96
|
+
--cd-accent-subtle: rgba(255, 68, 68, 0.12);
|
|
97
|
+
--cd-accent-glow: rgba(255, 68, 68, 0.34);
|
|
98
|
+
--cd-accent-subtle-glow: rgba(255, 68, 68, 0.20);
|
|
99
|
+
--cd-border-glow: rgba(255, 68, 68, 0.20);
|
|
100
|
+
--cd-scrollbar-thumb: rgba(255, 68, 68, 0.20);
|
|
101
|
+
--cd-panel-shadow: inset 0 0 0 1px rgba(255, 68, 68, 0.04), 0 0 24px rgba(255, 68, 68, 0.07);
|
|
102
|
+
--cd-accent-secondary: #6aa8ff;
|
|
103
|
+
--cd-accent-secondary-glow: rgba(106, 168, 255, 0.32);
|
|
104
|
+
--cd-accent-secondary-subtle: rgba(106, 168, 255, 0.12);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
.theme-steel {
|
|
108
|
+
--cd-accent: #9aafc4;
|
|
109
|
+
--cd-accent-bright: #c8d8e8;
|
|
110
|
+
--cd-accent-subtle: rgba(154, 175, 196, 0.12);
|
|
111
|
+
--cd-accent-glow: rgba(154, 175, 196, 0.28);
|
|
112
|
+
--cd-accent-subtle-glow: rgba(154, 175, 196, 0.16);
|
|
113
|
+
--cd-border-glow: rgba(154, 175, 196, 0.18);
|
|
114
|
+
--cd-scrollbar-thumb: rgba(154, 175, 196, 0.20);
|
|
115
|
+
--cd-panel-shadow: inset 0 0 0 1px rgba(154, 175, 196, 0.06), 0 0 24px rgba(154, 175, 196, 0.06);
|
|
116
|
+
--cd-accent-secondary: #ffaa00;
|
|
117
|
+
--cd-accent-secondary-glow: rgba(255, 170, 0, 0.28);
|
|
118
|
+
--cd-accent-secondary-subtle: rgba(255, 170, 0, 0.12);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/* 2. Expose tokens to Tailwind v4 */
|
|
122
|
+
@theme inline {
|
|
123
|
+
--color-cd-bg: var(--cd-bg);
|
|
124
|
+
--color-cd-bg-panel: var(--cd-bg-panel);
|
|
125
|
+
--color-cd-bg-panel-hover: var(--cd-bg-panel-hover);
|
|
126
|
+
--color-cd-bg-surface: var(--cd-bg-surface);
|
|
127
|
+
--color-cd-border: var(--cd-border);
|
|
128
|
+
--color-cd-border-dim: var(--cd-border-dim);
|
|
129
|
+
--color-cd-text: var(--cd-text);
|
|
130
|
+
--color-cd-text-alt: var(--cd-text-alt);
|
|
131
|
+
--color-cd-text-secondary: var(--cd-text-secondary);
|
|
132
|
+
--color-cd-text-muted: var(--cd-text-muted);
|
|
133
|
+
--color-cd-text-muted-alt: var(--cd-text-muted-alt);
|
|
134
|
+
--color-cd-text-dim: var(--cd-text-dim);
|
|
135
|
+
--color-cd-accent-secondary: var(--cd-accent-secondary);
|
|
136
|
+
--color-cd-accent-secondary-glow: var(--cd-accent-secondary-glow);
|
|
137
|
+
--color-cd-accent-secondary-subtle: var(--cd-accent-secondary-subtle);
|
|
138
|
+
--color-cd-neon-green: var(--cd-neon-green);
|
|
139
|
+
--color-cd-neon-red: var(--cd-neon-red);
|
|
140
|
+
--color-cd-neon-blue: var(--cd-neon-blue);
|
|
141
|
+
--color-cd-neon-purple: var(--cd-neon-purple);
|
|
142
|
+
--color-cd-neon-yellow: var(--cd-neon-yellow);
|
|
143
|
+
--color-cd-neon-amber: var(--cd-neon-amber);
|
|
144
|
+
--color-cd-neon-orange: var(--cd-neon-orange);
|
|
145
|
+
--color-cd-neon-cyan: var(--cd-neon-cyan);
|
|
146
|
+
--color-cd-neon-magenta: var(--cd-neon-magenta);
|
|
147
|
+
--color-cd-orange: var(--cd-orange);
|
|
148
|
+
--color-cd-amber: var(--cd-amber);
|
|
149
|
+
--color-cd-gold: var(--cd-gold);
|
|
150
|
+
--color-cd-cyan: var(--cd-cyan);
|
|
151
|
+
--color-cd-magenta: var(--cd-magenta);
|
|
152
|
+
--color-cd-purple: var(--cd-purple);
|
|
153
|
+
--color-cd-green: var(--cd-green);
|
|
154
|
+
--color-cd-red: var(--cd-red);
|
|
155
|
+
--color-cd-blue: var(--cd-blue);
|
|
156
|
+
--color-cd-yellow: var(--cd-yellow);
|
|
157
|
+
--color-cd-text-xs: var(--cd-text-xs);
|
|
158
|
+
--color-cd-text-sm: var(--cd-text-sm);
|
|
159
|
+
--color-cd-text-base: var(--cd-text-base);
|
|
160
|
+
--color-cd-text-md: var(--cd-text-md);
|
|
161
|
+
--color-cd-text-lg: var(--cd-text-lg);
|
|
162
|
+
--color-cd-accent: var(--cd-accent);
|
|
163
|
+
--color-cd-accent-bright: var(--cd-accent-bright);
|
|
164
|
+
--color-cd-accent-subtle: var(--cd-accent-subtle);
|
|
165
|
+
--color-cd-accent-glow: var(--cd-accent-glow);
|
|
166
|
+
--color-cd-accent-subtle-glow: var(--cd-accent-subtle-glow);
|
|
167
|
+
--color-cd-border-glow: var(--cd-border-glow);
|
|
168
|
+
--color-cd-scrollbar-thumb: var(--cd-scrollbar-thumb);
|
|
169
|
+
--color-cd-panel-shadow: var(--cd-panel-shadow);
|
|
170
|
+
--font-cd-mono: var(--cd-font-mono);
|
|
171
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
export declare const palette: {
|
|
2
|
+
readonly bgBase: "#05060a";
|
|
3
|
+
readonly bgPanel: "#0b0f18";
|
|
4
|
+
readonly bgPanelHover: "#111827";
|
|
5
|
+
readonly bgDark: "#0a0a0c";
|
|
6
|
+
readonly borderDim: "#1e1e24";
|
|
7
|
+
readonly borderMid: "#26324c";
|
|
8
|
+
readonly textPrimary: "#e8e4e0";
|
|
9
|
+
readonly textPrimaryAlt: "#f2f7ff";
|
|
10
|
+
readonly textSecondary: "#a7b7d6";
|
|
11
|
+
readonly textMuted: "#8a8078";
|
|
12
|
+
readonly textMutedAlt: "#7a8599";
|
|
13
|
+
readonly textDim: "#6a625c";
|
|
14
|
+
readonly orange: "#ff8800";
|
|
15
|
+
readonly amber: "#ffaa00";
|
|
16
|
+
readonly gold: "#ffcc00";
|
|
17
|
+
readonly cyan: "#47f6ff";
|
|
18
|
+
readonly cyanBright: "#bdffff";
|
|
19
|
+
readonly magenta: "#ff2bd6";
|
|
20
|
+
readonly magentaAlt: "#ff00ff";
|
|
21
|
+
readonly purple: "#9d7cff";
|
|
22
|
+
readonly green: "#00ff00";
|
|
23
|
+
readonly greenBright: "#52ff9f";
|
|
24
|
+
readonly red: "#ff4444";
|
|
25
|
+
readonly redAlt: "#ff456c";
|
|
26
|
+
readonly redBright: "#ff7777";
|
|
27
|
+
readonly blue: "#4488ff";
|
|
28
|
+
readonly blueAlt: "#6aa8ff";
|
|
29
|
+
readonly yellow: "#f7ff5a";
|
|
30
|
+
readonly steel: "#9aafc4";
|
|
31
|
+
readonly steelBright: "#c8d8e8";
|
|
32
|
+
readonly surfaceGlass: "rgba(11, 15, 24, 0.94)";
|
|
33
|
+
};
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
export const palette = {
|
|
2
|
+
// Backgrounds — unified range from both source apps
|
|
3
|
+
bgBase: '#05060a', // AI-shell app's darkest
|
|
4
|
+
bgPanel: '#0b0f18', // AI-shell app bg-light / dashboard app panel midpoint
|
|
5
|
+
bgPanelHover: '#111827', // AI-shell app bg-lighter / dashboard app hover midpoint
|
|
6
|
+
bgDark: '#0a0a0c', // dashboard app's darkest (kept for compat)
|
|
7
|
+
// Borders
|
|
8
|
+
borderDim: '#1e1e24', // dashboard app --color-border-dim
|
|
9
|
+
borderMid: '#26324c', // AI-shell app --border
|
|
10
|
+
// Text — warm (dashboard app) and cool (AI-shell app) variants both exposed
|
|
11
|
+
textPrimary: '#e8e4e0', // dashboard app warm off-white
|
|
12
|
+
textPrimaryAlt: '#f2f7ff', // AI-shell app cool white
|
|
13
|
+
textSecondary: '#a7b7d6', // AI-shell app --text-secondary
|
|
14
|
+
textMuted: '#8a8078', // bumped for WCAG AA 4.5:1+ (was #706860)
|
|
15
|
+
textMutedAlt: '#7a8599', // bumped for WCAG AA (was #687797, cooler variant)
|
|
16
|
+
textDim: '#6a625c', // bumped for ~3.3:1 large/decorative text (was #4a4440)
|
|
17
|
+
// Orange family (dashboard app primary accent)
|
|
18
|
+
orange: '#ff8800', // normalized from #f80
|
|
19
|
+
amber: '#ffaa00', // normalized from #fa0
|
|
20
|
+
gold: '#ffcc00', // normalized from #fc0
|
|
21
|
+
// Cyan family (AI-shell app primary accent)
|
|
22
|
+
cyan: '#47f6ff',
|
|
23
|
+
cyanBright: '#bdffff',
|
|
24
|
+
// Shared secondary accents
|
|
25
|
+
magenta: '#ff2bd6', // AI-shell app; close to dashboard app's #f0f
|
|
26
|
+
magentaAlt: '#ff00ff', // dashboard app pure magenta (kept as alias)
|
|
27
|
+
purple: '#9d7cff', // AI-shell app --purple / --violet
|
|
28
|
+
green: '#00ff00', // dashboard app pure green
|
|
29
|
+
greenBright: '#52ff9f', // AI-shell app --green-bright
|
|
30
|
+
red: '#ff4444', // dashboard app #f44
|
|
31
|
+
redAlt: '#ff456c', // AI-shell app --red
|
|
32
|
+
redBright: '#ff7777', // lighter red for accent-bright
|
|
33
|
+
blue: '#4488ff', // dashboard app #48f
|
|
34
|
+
blueAlt: '#6aa8ff', // AI-shell app --ai-blue
|
|
35
|
+
yellow: '#f7ff5a', // AI-shell app --viz-active
|
|
36
|
+
// Steel / metallic family
|
|
37
|
+
steel: '#9aafc4', // blue-grey steel
|
|
38
|
+
steelBright: '#c8d8e8', // chrome highlight
|
|
39
|
+
// Surface
|
|
40
|
+
surfaceGlass: 'rgba(11, 15, 24, 0.94)',
|
|
41
|
+
};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { palette } from './base.js';
|
|
2
|
+
export { semanticTokens } from './semantic.js';
|
|
3
|
+
export { orangeTheme } from './themes/orange.js';
|
|
4
|
+
export { cyanTheme } from './themes/cyan.js';
|
|
5
|
+
export { greenTheme } from './themes/green.js';
|
|
6
|
+
export { redTheme } from './themes/red.js';
|
|
7
|
+
export { steelTheme } from './themes/steel.js';
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { palette } from './base.js';
|
|
2
|
+
export { semanticTokens } from './semantic.js';
|
|
3
|
+
export { orangeTheme } from './themes/orange.js';
|
|
4
|
+
export { cyanTheme } from './themes/cyan.js';
|
|
5
|
+
export { greenTheme } from './themes/green.js';
|
|
6
|
+
export { redTheme } from './themes/red.js';
|
|
7
|
+
export { steelTheme } from './themes/steel.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const semanticTokens: Record<string, string>;
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { palette } from './base.js';
|
|
2
|
+
export const semanticTokens = {
|
|
3
|
+
// Backgrounds
|
|
4
|
+
'bg': palette.bgBase,
|
|
5
|
+
'bg-panel': palette.bgPanel,
|
|
6
|
+
'bg-panel-hover': palette.bgPanelHover,
|
|
7
|
+
'bg-surface': palette.surfaceGlass,
|
|
8
|
+
// Borders
|
|
9
|
+
'border': palette.borderMid,
|
|
10
|
+
'border-dim': palette.borderDim,
|
|
11
|
+
// Text
|
|
12
|
+
'text': palette.textPrimary,
|
|
13
|
+
'text-alt': palette.textPrimaryAlt,
|
|
14
|
+
'text-secondary': palette.textSecondary,
|
|
15
|
+
'text-muted': palette.textMuted,
|
|
16
|
+
'text-muted-alt': palette.textMutedAlt,
|
|
17
|
+
'text-dim': palette.textDim,
|
|
18
|
+
// Secondary accent — magenta, consistent across all themes
|
|
19
|
+
'accent-secondary': palette.magenta,
|
|
20
|
+
'accent-secondary-glow': 'rgba(255, 43, 214, 0.32)',
|
|
21
|
+
'accent-secondary-subtle': 'rgba(255, 43, 214, 0.12)',
|
|
22
|
+
// Supporting neon palette (for explicit color-coded categories)
|
|
23
|
+
'neon-green': palette.greenBright,
|
|
24
|
+
'neon-red': palette.redAlt,
|
|
25
|
+
'neon-blue': palette.blueAlt,
|
|
26
|
+
'neon-purple': palette.purple,
|
|
27
|
+
'neon-yellow': palette.yellow,
|
|
28
|
+
'neon-amber': palette.amber,
|
|
29
|
+
'neon-orange': palette.orange,
|
|
30
|
+
'neon-cyan': palette.cyan,
|
|
31
|
+
'neon-magenta': palette.magenta,
|
|
32
|
+
// Raw palette exposed for explicit use (category color maps, etc.)
|
|
33
|
+
'orange': palette.orange,
|
|
34
|
+
'amber': palette.amber,
|
|
35
|
+
'gold': palette.gold,
|
|
36
|
+
'cyan': palette.cyan,
|
|
37
|
+
'magenta': palette.magenta,
|
|
38
|
+
'purple': palette.purple,
|
|
39
|
+
'green': palette.greenBright,
|
|
40
|
+
'red': palette.redAlt,
|
|
41
|
+
'blue': palette.blueAlt,
|
|
42
|
+
'yellow': palette.yellow,
|
|
43
|
+
// CRT / effects
|
|
44
|
+
'scanline-color': 'rgba(0, 0, 0, 0.18)',
|
|
45
|
+
'pixel-grid-color': 'rgba(71, 246, 255, 0.055)',
|
|
46
|
+
// Font
|
|
47
|
+
'font-mono': '"JetBrains Mono", ui-monospace, "SF Mono", Consolas, monospace',
|
|
48
|
+
// Typography scale (rem-based for accessibility + user font scaling)
|
|
49
|
+
'text-xs': '0.6875rem', // ~11px — dense labels, badges, kbd
|
|
50
|
+
'text-sm': '0.75rem', // ~12px — current "body"/inputs (transition)
|
|
51
|
+
'text-base': '0.8125rem', // ~13px — improved readable body, modals
|
|
52
|
+
'text-md': '0.875rem', // ~14px — larger headings/titles
|
|
53
|
+
'text-lg': '0.9375rem', // ~15px — prominent display
|
|
54
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const cyanTheme: Record<string, string>;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { palette } from '../base.js';
|
|
2
|
+
export const cyanTheme = {
|
|
3
|
+
'accent': palette.cyan,
|
|
4
|
+
'accent-bright': palette.cyanBright,
|
|
5
|
+
'accent-subtle': 'rgba(71, 246, 255, 0.12)',
|
|
6
|
+
'accent-glow': 'rgba(71, 246, 255, 0.34)',
|
|
7
|
+
'accent-subtle-glow': 'rgba(71, 246, 255, 0.20)',
|
|
8
|
+
'border-glow': 'rgba(71, 246, 255, 0.20)',
|
|
9
|
+
'scrollbar-thumb': 'rgba(71, 246, 255, 0.20)',
|
|
10
|
+
'panel-shadow': 'inset 0 0 0 1px rgba(71, 246, 255, 0.04), 0 0 24px rgba(71, 246, 255, 0.07)',
|
|
11
|
+
// complement: magenta — CMY pairing
|
|
12
|
+
'accent-secondary': '#ff2bd6',
|
|
13
|
+
'accent-secondary-glow': 'rgba(255, 43, 214, 0.32)',
|
|
14
|
+
'accent-secondary-subtle': 'rgba(255, 43, 214, 0.12)',
|
|
15
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const greenTheme: Record<string, string>;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { palette } from '../base.js';
|
|
2
|
+
export const greenTheme = {
|
|
3
|
+
'accent': palette.green,
|
|
4
|
+
'accent-bright': palette.greenBright,
|
|
5
|
+
'accent-subtle': 'rgba(0, 255, 0, 0.12)',
|
|
6
|
+
'accent-glow': 'rgba(0, 255, 0, 0.34)',
|
|
7
|
+
'accent-subtle-glow': 'rgba(0, 255, 0, 0.20)',
|
|
8
|
+
'border-glow': 'rgba(0, 255, 0, 0.20)',
|
|
9
|
+
'scrollbar-thumb': 'rgba(0, 255, 0, 0.20)',
|
|
10
|
+
'panel-shadow': 'inset 0 0 0 1px rgba(0, 255, 0, 0.04), 0 0 24px rgba(0, 255, 0, 0.07)',
|
|
11
|
+
// complement: purple — avoids green+magenta clash
|
|
12
|
+
'accent-secondary': '#9d7cff',
|
|
13
|
+
'accent-secondary-glow': 'rgba(157, 124, 255, 0.32)',
|
|
14
|
+
'accent-secondary-subtle': 'rgba(157, 124, 255, 0.12)',
|
|
15
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const orangeTheme: Record<string, string>;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { palette } from '../base.js';
|
|
2
|
+
export const orangeTheme = {
|
|
3
|
+
'accent': palette.orange,
|
|
4
|
+
'accent-bright': palette.amber,
|
|
5
|
+
'accent-subtle': 'rgba(255, 136, 0, 0.12)',
|
|
6
|
+
'accent-glow': 'rgba(255, 136, 0, 0.40)',
|
|
7
|
+
'accent-subtle-glow': 'rgba(255, 136, 0, 0.20)',
|
|
8
|
+
'border-glow': 'rgba(255, 136, 0, 0.20)',
|
|
9
|
+
'scrollbar-thumb': 'rgba(255, 136, 0, 0.20)',
|
|
10
|
+
'panel-shadow': 'inset 0 0 0 1px rgba(255, 136, 0, 0.04), 0 0 24px rgba(255, 136, 0, 0.07)',
|
|
11
|
+
// complement: magenta (default — no override needed but explicit for clarity)
|
|
12
|
+
'accent-secondary': '#ff2bd6',
|
|
13
|
+
'accent-secondary-glow': 'rgba(255, 43, 214, 0.32)',
|
|
14
|
+
'accent-secondary-subtle': 'rgba(255, 43, 214, 0.12)',
|
|
15
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const redTheme: Record<string, string>;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { palette } from '../base.js';
|
|
2
|
+
export const redTheme = {
|
|
3
|
+
'accent': palette.red,
|
|
4
|
+
'accent-bright': palette.redBright,
|
|
5
|
+
'accent-subtle': 'rgba(255, 68, 68, 0.12)',
|
|
6
|
+
'accent-glow': 'rgba(255, 68, 68, 0.34)',
|
|
7
|
+
'accent-subtle-glow': 'rgba(255, 68, 68, 0.20)',
|
|
8
|
+
'border-glow': 'rgba(255, 68, 68, 0.20)',
|
|
9
|
+
'scrollbar-thumb': 'rgba(255, 68, 68, 0.20)',
|
|
10
|
+
'panel-shadow': 'inset 0 0 0 1px rgba(255, 68, 68, 0.04), 0 0 24px rgba(255, 68, 68, 0.07)',
|
|
11
|
+
// complement: blue — cool contrast against hot red
|
|
12
|
+
'accent-secondary': '#6aa8ff',
|
|
13
|
+
'accent-secondary-glow': 'rgba(106, 168, 255, 0.32)',
|
|
14
|
+
'accent-secondary-subtle': 'rgba(106, 168, 255, 0.12)',
|
|
15
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const steelTheme: Record<string, string>;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { palette } from '../base.js';
|
|
2
|
+
export const steelTheme = {
|
|
3
|
+
'accent': palette.steel,
|
|
4
|
+
'accent-bright': palette.steelBright,
|
|
5
|
+
'accent-subtle': 'rgba(154, 175, 196, 0.12)',
|
|
6
|
+
'accent-glow': 'rgba(154, 175, 196, 0.28)',
|
|
7
|
+
'accent-subtle-glow': 'rgba(154, 175, 196, 0.16)',
|
|
8
|
+
'border-glow': 'rgba(154, 175, 196, 0.18)',
|
|
9
|
+
'scrollbar-thumb': 'rgba(154, 175, 196, 0.20)',
|
|
10
|
+
'panel-shadow': 'inset 0 0 0 1px rgba(154, 175, 196, 0.06), 0 0 24px rgba(154, 175, 196, 0.06)',
|
|
11
|
+
// complement: amber — warm tension against cool steel
|
|
12
|
+
'accent-secondary': '#ffaa00',
|
|
13
|
+
'accent-secondary-glow': 'rgba(255, 170, 0, 0.28)',
|
|
14
|
+
'accent-secondary-subtle': 'rgba(255, 170, 0, 0.12)',
|
|
15
|
+
};
|
package/package.json
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@nukleas/cyberdesign",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Unified cyber/terminal design system — shared tokens, glow utilities, and component primitives",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"author": "Nader Heidari <nukleas2001@gmail.com>",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "git+https://github.com/nukleas/cyberdesign.git",
|
|
10
|
+
"directory": "packages/cyberdesign"
|
|
11
|
+
},
|
|
12
|
+
"bugs": {
|
|
13
|
+
"url": "https://github.com/nukleas/cyberdesign/issues"
|
|
14
|
+
},
|
|
15
|
+
"homepage": "https://github.com/nukleas/cyberdesign/tree/master/packages/cyberdesign#readme",
|
|
16
|
+
"publishConfig": {
|
|
17
|
+
"access": "public"
|
|
18
|
+
},
|
|
19
|
+
"keywords": [
|
|
20
|
+
"design-system",
|
|
21
|
+
"css",
|
|
22
|
+
"cyberpunk",
|
|
23
|
+
"tokens",
|
|
24
|
+
"tailwind"
|
|
25
|
+
],
|
|
26
|
+
"type": "module",
|
|
27
|
+
"files": [
|
|
28
|
+
"src/",
|
|
29
|
+
"dist/",
|
|
30
|
+
"build.ts"
|
|
31
|
+
],
|
|
32
|
+
"types": "./dist/react/index.d.ts",
|
|
33
|
+
"exports": {
|
|
34
|
+
".": "./dist/cyberdesign.css",
|
|
35
|
+
"./css": "./dist/cyberdesign.css",
|
|
36
|
+
"./vars": "./dist/cyberdesign-vars-only.css",
|
|
37
|
+
"./tailwind": "./dist/tailwind-theme.css",
|
|
38
|
+
"./react": {
|
|
39
|
+
"types": "./dist/react/index.d.ts",
|
|
40
|
+
"default": "./dist/react/index.js"
|
|
41
|
+
},
|
|
42
|
+
"./tokens": {
|
|
43
|
+
"types": "./dist/tokens/index.d.ts",
|
|
44
|
+
"default": "./dist/tokens/index.js"
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
"devDependencies": {
|
|
48
|
+
"@types/node": "^20",
|
|
49
|
+
"@types/react": "^19.2.17",
|
|
50
|
+
"@types/react-dom": "^19.2.3",
|
|
51
|
+
"react": "19.2.7",
|
|
52
|
+
"react-dom": "19.2.7",
|
|
53
|
+
"tsx": "^4",
|
|
54
|
+
"typescript": "^5"
|
|
55
|
+
},
|
|
56
|
+
"peerDependencies": {
|
|
57
|
+
"react": ">=18",
|
|
58
|
+
"tailwindcss": ">=4"
|
|
59
|
+
},
|
|
60
|
+
"peerDependenciesMeta": {
|
|
61
|
+
"react": {
|
|
62
|
+
"optional": true
|
|
63
|
+
},
|
|
64
|
+
"tailwindcss": {
|
|
65
|
+
"optional": true
|
|
66
|
+
}
|
|
67
|
+
},
|
|
68
|
+
"scripts": {
|
|
69
|
+
"build": "tsx build.ts && tsc -p tsconfig.build.json",
|
|
70
|
+
"dev": "tsx --watch build.ts",
|
|
71
|
+
"demo": "npx --yes serve . -p 4980"
|
|
72
|
+
}
|
|
73
|
+
}
|