@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.
Files changed (208) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +38 -0
  3. package/build.ts +286 -0
  4. package/dist/cyberdesign-vars-only.css +116 -0
  5. package/dist/cyberdesign.css +8377 -0
  6. package/dist/fonts/JetBrainsMono-Variable.woff2 +0 -0
  7. package/dist/fonts/OFL.txt +93 -0
  8. package/dist/react/Accordion.d.ts +34 -0
  9. package/dist/react/Accordion.js +13 -0
  10. package/dist/react/Alert.d.ts +19 -0
  11. package/dist/react/Alert.js +6 -0
  12. package/dist/react/AugButton.d.ts +12 -0
  13. package/dist/react/AugButton.js +6 -0
  14. package/dist/react/AugPanel.d.ts +10 -0
  15. package/dist/react/AugPanel.js +6 -0
  16. package/dist/react/Avatar.d.ts +28 -0
  17. package/dist/react/Avatar.js +11 -0
  18. package/dist/react/Badge.d.ts +10 -0
  19. package/dist/react/Badge.js +6 -0
  20. package/dist/react/Breadcrumb.d.ts +19 -0
  21. package/dist/react/Breadcrumb.js +10 -0
  22. package/dist/react/Button.d.ts +12 -0
  23. package/dist/react/Button.js +6 -0
  24. package/dist/react/Checkbox.d.ts +9 -0
  25. package/dist/react/Checkbox.js +9 -0
  26. package/dist/react/Dropdown.d.ts +35 -0
  27. package/dist/react/Dropdown.js +20 -0
  28. package/dist/react/Field.d.ts +13 -0
  29. package/dist/react/Field.js +6 -0
  30. package/dist/react/Gauge.d.ts +19 -0
  31. package/dist/react/Gauge.js +6 -0
  32. package/dist/react/GlowCard.d.ts +12 -0
  33. package/dist/react/GlowCard.js +4 -0
  34. package/dist/react/HudBar.d.ts +34 -0
  35. package/dist/react/HudBar.js +10 -0
  36. package/dist/react/HudFrame.d.ts +19 -0
  37. package/dist/react/HudFrame.js +6 -0
  38. package/dist/react/Input.d.ts +11 -0
  39. package/dist/react/Input.js +6 -0
  40. package/dist/react/Interference.d.ts +18 -0
  41. package/dist/react/Interference.js +6 -0
  42. package/dist/react/Kbd.d.ts +18 -0
  43. package/dist/react/Kbd.js +11 -0
  44. package/dist/react/Label.d.ts +8 -0
  45. package/dist/react/Label.js +6 -0
  46. package/dist/react/Modal.d.ts +19 -0
  47. package/dist/react/Modal.js +9 -0
  48. package/dist/react/Pagination.d.ts +23 -0
  49. package/dist/react/Pagination.js +28 -0
  50. package/dist/react/PanelHeader.d.ts +9 -0
  51. package/dist/react/PanelHeader.js +6 -0
  52. package/dist/react/Progress.d.ts +13 -0
  53. package/dist/react/Progress.js +6 -0
  54. package/dist/react/Radio.d.ts +9 -0
  55. package/dist/react/Radio.js +9 -0
  56. package/dist/react/Scanner.d.ts +11 -0
  57. package/dist/react/Scanner.js +6 -0
  58. package/dist/react/Select.d.ts +13 -0
  59. package/dist/react/Select.js +6 -0
  60. package/dist/react/Separator.d.ts +11 -0
  61. package/dist/react/Separator.js +7 -0
  62. package/dist/react/Skeleton.d.ts +11 -0
  63. package/dist/react/Skeleton.js +13 -0
  64. package/dist/react/Slider.d.ts +9 -0
  65. package/dist/react/Slider.js +9 -0
  66. package/dist/react/Spinner.d.ts +11 -0
  67. package/dist/react/Spinner.js +6 -0
  68. package/dist/react/Stat.d.ts +20 -0
  69. package/dist/react/Stat.js +11 -0
  70. package/dist/react/Switch.d.ts +9 -0
  71. package/dist/react/Switch.js +6 -0
  72. package/dist/react/Table.d.ts +55 -0
  73. package/dist/react/Table.js +36 -0
  74. package/dist/react/Tabs.d.ts +28 -0
  75. package/dist/react/Tabs.js +16 -0
  76. package/dist/react/Terminal.d.ts +33 -0
  77. package/dist/react/Terminal.js +6 -0
  78. package/dist/react/Textarea.d.ts +7 -0
  79. package/dist/react/Textarea.js +6 -0
  80. package/dist/react/Ticker.d.ts +13 -0
  81. package/dist/react/Ticker.js +7 -0
  82. package/dist/react/Toast.d.ts +15 -0
  83. package/dist/react/Toast.js +6 -0
  84. package/dist/react/Tooltip.d.ts +11 -0
  85. package/dist/react/Tooltip.js +6 -0
  86. package/dist/react/index.d.ts +39 -0
  87. package/dist/react/index.js +46 -0
  88. package/dist/tailwind-theme.css +171 -0
  89. package/dist/tokens/base.d.ts +33 -0
  90. package/dist/tokens/base.js +41 -0
  91. package/dist/tokens/index.d.ts +7 -0
  92. package/dist/tokens/index.js +7 -0
  93. package/dist/tokens/semantic.d.ts +1 -0
  94. package/dist/tokens/semantic.js +54 -0
  95. package/dist/tokens/themes/cyan.d.ts +1 -0
  96. package/dist/tokens/themes/cyan.js +15 -0
  97. package/dist/tokens/themes/green.d.ts +1 -0
  98. package/dist/tokens/themes/green.js +15 -0
  99. package/dist/tokens/themes/orange.d.ts +1 -0
  100. package/dist/tokens/themes/orange.js +15 -0
  101. package/dist/tokens/themes/red.d.ts +1 -0
  102. package/dist/tokens/themes/red.js +15 -0
  103. package/dist/tokens/themes/steel.d.ts +1 -0
  104. package/dist/tokens/themes/steel.js +15 -0
  105. package/package.json +73 -0
  106. package/src/css/a11y.css +67 -0
  107. package/src/css/animations.css +111 -0
  108. package/src/css/base.css +34 -0
  109. package/src/css/components/accordion.css +148 -0
  110. package/src/css/components/alert.css +116 -0
  111. package/src/css/components/app-patterns.css +894 -0
  112. package/src/css/components/augmented.css +474 -0
  113. package/src/css/components/avatar.css +105 -0
  114. package/src/css/components/badge.css +46 -0
  115. package/src/css/components/breadcrumb.css +75 -0
  116. package/src/css/components/button.css +130 -0
  117. package/src/css/components/calendar.css +135 -0
  118. package/src/css/components/card.css +68 -0
  119. package/src/css/components/carousel.css +69 -0
  120. package/src/css/components/charts.css +464 -0
  121. package/src/css/components/checkbox.css +136 -0
  122. package/src/css/components/command.css +162 -0
  123. package/src/css/components/dropdown.css +187 -0
  124. package/src/css/components/form.css +280 -0
  125. package/src/css/components/gauge.css +156 -0
  126. package/src/css/components/glow-card.css +32 -0
  127. package/src/css/components/hud.css +165 -0
  128. package/src/css/components/image.css +164 -0
  129. package/src/css/components/input-otp.css +53 -0
  130. package/src/css/components/input.css +182 -0
  131. package/src/css/components/interference.css +217 -0
  132. package/src/css/components/kbd.css +54 -0
  133. package/src/css/components/layout-extras.css +256 -0
  134. package/src/css/components/modal.css +146 -0
  135. package/src/css/components/navigation-extras.css +280 -0
  136. package/src/css/components/pagination.css +122 -0
  137. package/src/css/components/panel-header.css +55 -0
  138. package/src/css/components/popover.css +112 -0
  139. package/src/css/components/scanner.css +125 -0
  140. package/src/css/components/select.css +99 -0
  141. package/src/css/components/sheet.css +149 -0
  142. package/src/css/components/skeleton.css +77 -0
  143. package/src/css/components/slider.css +116 -0
  144. package/src/css/components/spinner.css +101 -0
  145. package/src/css/components/spreadsheet.css +314 -0
  146. package/src/css/components/svg.css +104 -0
  147. package/src/css/components/switch.css +114 -0
  148. package/src/css/components/table.css +115 -0
  149. package/src/css/components/tabs.css +159 -0
  150. package/src/css/components/terminal.css +259 -0
  151. package/src/css/components/ticker.css +100 -0
  152. package/src/css/components/toast.css +137 -0
  153. package/src/css/components/toaster.css +48 -0
  154. package/src/css/components/toggle.css +99 -0
  155. package/src/css/components/typography.css +122 -0
  156. package/src/css/components/vectorbg.css +57 -0
  157. package/src/css/utilities.css +165 -0
  158. package/src/fonts/JetBrainsMono-Variable.woff2 +0 -0
  159. package/src/fonts/OFL.txt +93 -0
  160. package/src/js/charts.js +533 -0
  161. package/src/react/Accordion.tsx +85 -0
  162. package/src/react/Alert.tsx +58 -0
  163. package/src/react/AugButton.tsx +40 -0
  164. package/src/react/AugPanel.tsx +36 -0
  165. package/src/react/Avatar.tsx +69 -0
  166. package/src/react/Badge.tsx +28 -0
  167. package/src/react/Breadcrumb.tsx +63 -0
  168. package/src/react/Button.tsx +39 -0
  169. package/src/react/Checkbox.tsx +31 -0
  170. package/src/react/Dropdown.tsx +104 -0
  171. package/src/react/Field.tsx +36 -0
  172. package/src/react/Gauge.tsx +57 -0
  173. package/src/react/GlowCard.tsx +25 -0
  174. package/src/react/HudBar.tsx +86 -0
  175. package/src/react/HudFrame.tsx +52 -0
  176. package/src/react/Input.tsx +38 -0
  177. package/src/react/Interference.tsx +53 -0
  178. package/src/react/Kbd.tsx +62 -0
  179. package/src/react/Label.tsx +31 -0
  180. package/src/react/Modal.tsx +63 -0
  181. package/src/react/Pagination.tsx +113 -0
  182. package/src/react/PanelHeader.tsx +28 -0
  183. package/src/react/Progress.tsx +47 -0
  184. package/src/react/Radio.tsx +31 -0
  185. package/src/react/Scanner.tsx +37 -0
  186. package/src/react/Select.tsx +43 -0
  187. package/src/react/Separator.tsx +40 -0
  188. package/src/react/Skeleton.tsx +50 -0
  189. package/src/react/Slider.tsx +28 -0
  190. package/src/react/Spinner.tsx +39 -0
  191. package/src/react/Stat.tsx +52 -0
  192. package/src/react/Switch.tsx +25 -0
  193. package/src/react/Table.tsx +144 -0
  194. package/src/react/Tabs.tsx +97 -0
  195. package/src/react/Terminal.tsx +95 -0
  196. package/src/react/Textarea.tsx +20 -0
  197. package/src/react/Ticker.tsx +46 -0
  198. package/src/react/Toast.tsx +43 -0
  199. package/src/react/Tooltip.tsx +32 -0
  200. package/src/react/index.ts +52 -0
  201. package/src/tokens/base.ts +48 -0
  202. package/src/tokens/index.ts +7 -0
  203. package/src/tokens/semantic.ts +63 -0
  204. package/src/tokens/themes/cyan.ts +16 -0
  205. package/src/tokens/themes/green.ts +16 -0
  206. package/src/tokens/themes/orange.ts +16 -0
  207. package/src/tokens/themes/red.ts +16 -0
  208. 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
+ }