@n3rd-ai/ui 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/dist/index.css ADDED
@@ -0,0 +1,281 @@
1
+ /* src/components/layout/Box.module.css */
2
+ .box {
3
+ font-family: var(--n3rd-font);
4
+ color: var(--box-border-color, var(--n3rd-border-default));
5
+ width: 100%;
6
+ }
7
+ .borderTop,
8
+ .borderBottom {
9
+ display: flex;
10
+ align-items: center;
11
+ white-space: nowrap;
12
+ overflow: hidden;
13
+ }
14
+ .borderChar {
15
+ flex-shrink: 0;
16
+ }
17
+ .borderLine {
18
+ flex: 1;
19
+ overflow: hidden;
20
+ white-space: nowrap;
21
+ }
22
+ .borderLine::before {
23
+ content: "\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500\2500";
24
+ display: block;
25
+ overflow: hidden;
26
+ }
27
+ .title {
28
+ flex-shrink: 0;
29
+ color: var(--n3rd-text-secondary);
30
+ font-size: var(--n3rd-text-sm);
31
+ }
32
+ .content {
33
+ display: flex;
34
+ }
35
+ .borderSide {
36
+ flex-shrink: 0;
37
+ }
38
+ .inner {
39
+ flex: 1;
40
+ padding: var(--box-padding, var(--n3rd-space-4));
41
+ color: var(--n3rd-text-primary);
42
+ }
43
+
44
+ /* src/components/display/Footer.module.css */
45
+ .footer {
46
+ font-family: var(--n3rd-font);
47
+ text-align: center;
48
+ padding: var(--n3rd-space-8) 0 var(--n3rd-space-6);
49
+ overflow: hidden;
50
+ }
51
+ .branding {
52
+ color: var(--n3rd-text-tertiary);
53
+ font-size: var(--n3rd-text-xs);
54
+ margin-bottom: var(--n3rd-space-6);
55
+ letter-spacing: 0.1em;
56
+ }
57
+ .starfield {
58
+ color: var(--n3rd-accent-lavender);
59
+ font-size: var(--n3rd-text-sm);
60
+ line-height: 1.8;
61
+ opacity: 0.4;
62
+ margin-bottom: var(--n3rd-space-4);
63
+ }
64
+ .starRow {
65
+ white-space: pre;
66
+ }
67
+ .sunset {
68
+ display: flex;
69
+ flex-direction: column;
70
+ align-items: center;
71
+ margin-bottom: 0;
72
+ }
73
+ .sunLine {
74
+ height: 6px;
75
+ border-radius: 0;
76
+ margin: 1px 0;
77
+ }
78
+ .sunGap {
79
+ height: 2px;
80
+ }
81
+ .horizon {
82
+ display: flex;
83
+ flex-direction: column;
84
+ align-items: center;
85
+ margin-bottom: var(--n3rd-space-6);
86
+ }
87
+ .horizonBright {
88
+ width: 100%;
89
+ height: 1px;
90
+ background: var(--n3rd-accent-rose);
91
+ opacity: 0.8;
92
+ margin-bottom: var(--n3rd-space-2);
93
+ }
94
+ .reflection {
95
+ width: 80%;
96
+ height: 1px;
97
+ background: var(--n3rd-accent-pink);
98
+ opacity: 0.3;
99
+ margin-bottom: var(--n3rd-space-2);
100
+ }
101
+ .reflectionDashed {
102
+ width: 70%;
103
+ height: 1px;
104
+ background:
105
+ repeating-linear-gradient(
106
+ 90deg,
107
+ var(--n3rd-accent-pink) 0px,
108
+ var(--n3rd-accent-pink) 8px,
109
+ transparent 8px,
110
+ transparent 16px);
111
+ opacity: 0.2;
112
+ margin-bottom: var(--n3rd-space-3);
113
+ }
114
+ .tagline {
115
+ color: var(--n3rd-text-secondary);
116
+ font-size: var(--n3rd-text-sm);
117
+ font-weight: 700;
118
+ letter-spacing: 0.15em;
119
+ margin-bottom: var(--n3rd-space-4);
120
+ }
121
+ .links {
122
+ font-size: var(--n3rd-text-xs);
123
+ }
124
+ .link {
125
+ color: var(--n3rd-text-tertiary);
126
+ text-decoration: none;
127
+ }
128
+ .link:hover {
129
+ color: var(--n3rd-accent-cyan);
130
+ }
131
+ .sep {
132
+ color: var(--n3rd-border-muted);
133
+ }
134
+
135
+ /* src/components/input/Button.module.css */
136
+ .button {
137
+ display: inline-flex;
138
+ align-items: center;
139
+ gap: var(--n3rd-space-1);
140
+ font-family: var(--n3rd-font);
141
+ font-size: var(--n3rd-text-base);
142
+ font-weight: 700;
143
+ text-transform: uppercase;
144
+ letter-spacing: 0.05em;
145
+ cursor: pointer;
146
+ transition: color 0.15s, background-color 0.15s;
147
+ text-decoration: none;
148
+ border: none;
149
+ background: none;
150
+ padding: var(--n3rd-space-1) var(--n3rd-space-2);
151
+ }
152
+ .primary {
153
+ color: var(--n3rd-accent-primary);
154
+ }
155
+ .primary:hover {
156
+ background: var(--n3rd-accent-primary);
157
+ color: var(--n3rd-bg-primary);
158
+ }
159
+ .secondary {
160
+ color: var(--n3rd-text-secondary);
161
+ }
162
+ .secondary:hover {
163
+ color: var(--n3rd-text-primary);
164
+ }
165
+ .danger {
166
+ color: var(--n3rd-accent-danger);
167
+ }
168
+ .danger:hover {
169
+ background: var(--n3rd-accent-danger);
170
+ color: var(--n3rd-bg-primary);
171
+ }
172
+ .ghost {
173
+ color: var(--n3rd-text-secondary);
174
+ padding: var(--n3rd-space-1) 0;
175
+ }
176
+ .ghost:hover {
177
+ color: var(--n3rd-text-primary);
178
+ }
179
+ .disabled {
180
+ opacity: 0.4;
181
+ cursor: not-allowed;
182
+ pointer-events: none;
183
+ }
184
+ .loading {
185
+ cursor: wait;
186
+ }
187
+ .spinner {
188
+ display: inline-block;
189
+ animation: n3rd-spin 0.8s steps(10) infinite;
190
+ margin-right: var(--n3rd-space-1);
191
+ }
192
+ @keyframes n3rd-spin {
193
+ to {
194
+ transform: rotate(360deg);
195
+ }
196
+ }
197
+
198
+ /* src/components/input/Input.module.css */
199
+ .wrapper {
200
+ font-family: var(--n3rd-font);
201
+ }
202
+ .label {
203
+ display: block;
204
+ color: var(--n3rd-text-secondary);
205
+ font-size: var(--n3rd-text-sm);
206
+ margin-bottom: var(--n3rd-space-1);
207
+ }
208
+ .field {
209
+ display: flex;
210
+ align-items: center;
211
+ gap: var(--n3rd-space-2);
212
+ padding: var(--n3rd-space-2);
213
+ background: var(--n3rd-bg-secondary);
214
+ border: 1px solid var(--n3rd-border-default);
215
+ cursor: text;
216
+ }
217
+ .focused {
218
+ border-color: var(--n3rd-border-focus);
219
+ }
220
+ .disabled {
221
+ opacity: 0.5;
222
+ cursor: not-allowed;
223
+ }
224
+ .prefix {
225
+ color: var(--n3rd-accent-primary);
226
+ flex-shrink: 0;
227
+ user-select: none;
228
+ }
229
+ .inputWrap {
230
+ flex: 1;
231
+ display: flex;
232
+ align-items: center;
233
+ }
234
+ .input {
235
+ flex: 1;
236
+ font-family: var(--n3rd-font);
237
+ font-size: var(--n3rd-text-base);
238
+ color: var(--n3rd-text-primary);
239
+ background: transparent;
240
+ border: none;
241
+ outline: none;
242
+ padding: 0;
243
+ caret-color: transparent;
244
+ }
245
+ .input::placeholder {
246
+ color: var(--n3rd-text-tertiary);
247
+ }
248
+
249
+ /* src/components/nav/Nav.module.css */
250
+ .nav {
251
+ display: flex;
252
+ align-items: center;
253
+ padding: var(--n3rd-space-3) var(--n3rd-space-4);
254
+ font-family: var(--n3rd-font);
255
+ font-size: var(--n3rd-text-sm);
256
+ border-bottom: 1px solid var(--n3rd-border-muted);
257
+ }
258
+ .items {
259
+ display: flex;
260
+ align-items: center;
261
+ gap: var(--n3rd-space-2);
262
+ flex-wrap: wrap;
263
+ }
264
+ .item {
265
+ color: var(--n3rd-text-secondary);
266
+ text-decoration: none;
267
+ transition: color 0.15s;
268
+ white-space: nowrap;
269
+ }
270
+ .item:hover {
271
+ color: var(--n3rd-text-primary);
272
+ }
273
+ .active {
274
+ color: var(--n3rd-accent-primary);
275
+ }
276
+ .active:hover {
277
+ color: var(--n3rd-accent-primary);
278
+ }
279
+ .indicator {
280
+ color: var(--n3rd-accent-primary);
281
+ }
@@ -0,0 +1,290 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { ReactNode, CSSProperties, MouseEvent } from 'react';
3
+ import { B as BorderStyle } from './ascii-border-DpKIQMLP.js';
4
+ export { a as BORDER_CHARS, g as getBorderChars } from './ascii-border-DpKIQMLP.js';
5
+ export { T as ToastProvider, u as useToast } from './Toast-qHlZE8FW.js';
6
+ import * as next_dist_compiled__next_font from 'next/dist/compiled/@next/font';
7
+
8
+ type Accent$3 = 'primary' | 'success' | 'warning' | 'danger' | 'info';
9
+ type Padding = 'none' | 'sm' | 'md' | 'lg';
10
+ interface BoxProps {
11
+ children: ReactNode;
12
+ border?: BorderStyle;
13
+ title?: string;
14
+ accent?: Accent$3;
15
+ padding?: Padding;
16
+ className?: string;
17
+ style?: CSSProperties;
18
+ }
19
+ declare function Box({ children, border, title, accent, padding, className, style, }: BoxProps): react_jsx_runtime.JSX.Element;
20
+
21
+ type Gap$2 = 'none' | 'sm' | 'md' | 'lg' | 'xl';
22
+ interface StackProps {
23
+ children: ReactNode;
24
+ gap?: Gap$2;
25
+ align?: 'start' | 'center' | 'end' | 'stretch';
26
+ className?: string;
27
+ style?: CSSProperties;
28
+ }
29
+ declare function Stack({ children, gap, align, className, style }: StackProps): react_jsx_runtime.JSX.Element;
30
+
31
+ type Gap$1 = 'none' | 'sm' | 'md' | 'lg' | 'xl';
32
+ interface RowProps {
33
+ children: ReactNode;
34
+ gap?: Gap$1;
35
+ align?: 'start' | 'center' | 'end' | 'stretch' | 'baseline';
36
+ justify?: 'start' | 'center' | 'end' | 'between' | 'around';
37
+ wrap?: boolean;
38
+ className?: string;
39
+ style?: CSSProperties;
40
+ }
41
+ declare function Row({ children, gap, align, justify, wrap, className, style, }: RowProps): react_jsx_runtime.JSX.Element;
42
+
43
+ type Gap = 'none' | 'sm' | 'md' | 'lg' | 'xl';
44
+ interface GridProps {
45
+ children: ReactNode;
46
+ columns?: number | string;
47
+ gap?: Gap;
48
+ className?: string;
49
+ style?: CSSProperties;
50
+ }
51
+ declare function Grid({ children, columns, gap, className, style }: GridProps): react_jsx_runtime.JSX.Element;
52
+
53
+ interface DividerProps {
54
+ variant?: 'single' | 'double' | 'dashed';
55
+ label?: string;
56
+ className?: string;
57
+ style?: CSSProperties;
58
+ }
59
+ declare function Divider({ variant, label, className, style }: DividerProps): react_jsx_runtime.JSX.Element;
60
+
61
+ interface PageProps {
62
+ children: ReactNode;
63
+ maxWidth?: string;
64
+ className?: string;
65
+ style?: CSSProperties;
66
+ }
67
+ declare function Page({ children, maxWidth, className, style }: PageProps): react_jsx_runtime.JSX.Element;
68
+
69
+ type Size = 'xs' | 'sm' | 'base' | 'lg' | 'xl' | '2xl';
70
+ type Color = 'primary' | 'secondary' | 'tertiary' | 'accent' | 'success' | 'warning' | 'danger' | 'info';
71
+ interface TextProps {
72
+ children: ReactNode;
73
+ size?: Size;
74
+ color?: Color;
75
+ bold?: boolean;
76
+ prefix?: string;
77
+ gradient?: boolean;
78
+ as?: 'span' | 'p' | 'div';
79
+ className?: string;
80
+ style?: CSSProperties;
81
+ }
82
+ declare function Text({ children, size, color, bold, prefix, gradient, as: Tag, className, style, }: TextProps): react_jsx_runtime.JSX.Element;
83
+
84
+ type Level = 1 | 2 | 3 | 4 | 5 | 6;
85
+ interface HeadingProps {
86
+ children: ReactNode;
87
+ level?: Level;
88
+ prefix?: boolean;
89
+ gradient?: boolean;
90
+ className?: string;
91
+ style?: CSSProperties;
92
+ }
93
+ declare function Heading({ children, level, prefix, gradient, className, style, }: HeadingProps): react_jsx_runtime.JSX.Element;
94
+
95
+ type Variant$2 = 'default' | 'success' | 'warning' | 'danger' | 'info';
96
+ interface BadgeProps {
97
+ children: string;
98
+ variant?: Variant$2;
99
+ className?: string;
100
+ style?: CSSProperties;
101
+ }
102
+ declare function Badge({ children, variant, className, style }: BadgeProps): react_jsx_runtime.JSX.Element;
103
+
104
+ type Accent$2 = 'primary' | 'success' | 'warning' | 'danger' | 'info';
105
+ interface MetricProps {
106
+ value: string | number;
107
+ label: string;
108
+ suffix?: string;
109
+ prefix?: string;
110
+ accent?: Accent$2;
111
+ className?: string;
112
+ style?: CSSProperties;
113
+ }
114
+ declare function Metric({ value, label, suffix, prefix, accent, className, style }: MetricProps): react_jsx_runtime.JSX.Element;
115
+
116
+ type Accent$1 = 'primary' | 'success' | 'warning' | 'danger' | 'info';
117
+ type CellValue = string | {
118
+ text: string;
119
+ accent?: Accent$1;
120
+ };
121
+ interface TableProps {
122
+ columns: string[];
123
+ rows: CellValue[][];
124
+ border?: BorderStyle;
125
+ className?: string;
126
+ style?: CSSProperties;
127
+ }
128
+ declare function Table({ columns, rows, border, className, style }: TableProps): react_jsx_runtime.JSX.Element;
129
+
130
+ interface CodeProps {
131
+ children: string;
132
+ title?: string;
133
+ prompt?: string;
134
+ showLineNumbers?: boolean;
135
+ border?: BorderStyle;
136
+ className?: string;
137
+ style?: CSSProperties;
138
+ }
139
+ declare function Code({ children, title, prompt, showLineNumbers, border, className, style, }: CodeProps): react_jsx_runtime.JSX.Element;
140
+
141
+ type Bullet = '>' | '-' | '*' | 'numbered' | 'none';
142
+ interface ListProps {
143
+ items: ReactNode[];
144
+ bullet?: Bullet;
145
+ className?: string;
146
+ style?: CSSProperties;
147
+ }
148
+ declare function List({ items, bullet, className, style }: ListProps): react_jsx_runtime.JSX.Element;
149
+
150
+ type Accent = 'primary' | 'success' | 'warning' | 'danger' | 'info' | 'violet' | 'purple' | 'lavender' | 'pink' | 'rose' | 'cyan' | 'aqua';
151
+ interface LogoProps {
152
+ text: string;
153
+ gradient?: boolean | string;
154
+ accent?: Accent;
155
+ className?: string;
156
+ style?: CSSProperties;
157
+ }
158
+ declare function Logo({ text, gradient, accent, className, style }: LogoProps): react_jsx_runtime.JSX.Element;
159
+
160
+ interface StatusLineProps {
161
+ left?: ReactNode;
162
+ center?: ReactNode;
163
+ right?: ReactNode;
164
+ className?: string;
165
+ style?: CSSProperties;
166
+ }
167
+ declare function StatusLine({ left, center, right, className, style }: StatusLineProps): react_jsx_runtime.JSX.Element;
168
+
169
+ interface FooterLink {
170
+ label: string;
171
+ href: string;
172
+ external?: boolean;
173
+ }
174
+ interface FooterProps {
175
+ tagline?: string;
176
+ links?: FooterLink[];
177
+ branding?: string;
178
+ className?: string;
179
+ style?: CSSProperties;
180
+ }
181
+ declare function Footer({ tagline, links, branding, className, style, }: FooterProps): react_jsx_runtime.JSX.Element;
182
+
183
+ type Variant$1 = 'primary' | 'secondary' | 'danger' | 'ghost';
184
+ interface ButtonProps {
185
+ children: ReactNode;
186
+ variant?: Variant$1;
187
+ href?: string;
188
+ external?: boolean;
189
+ loading?: boolean;
190
+ disabled?: boolean;
191
+ onClick?: (e: MouseEvent<HTMLButtonElement | HTMLAnchorElement>) => void;
192
+ className?: string;
193
+ style?: CSSProperties;
194
+ type?: 'button' | 'submit' | 'reset';
195
+ }
196
+ declare function Button({ children, variant, href, external, loading, disabled, onClick, className, style, type, }: ButtonProps): react_jsx_runtime.JSX.Element;
197
+
198
+ type CursorStyle = 'block' | 'line' | 'underscore';
199
+ interface CursorProps {
200
+ style?: CursorStyle;
201
+ className?: string;
202
+ }
203
+ declare function Cursor({ style, className }: CursorProps): react_jsx_runtime.JSX.Element;
204
+
205
+ interface InputProps {
206
+ label?: string;
207
+ placeholder?: string;
208
+ value?: string;
209
+ defaultValue?: string;
210
+ onChange?: (value: string) => void;
211
+ onSubmit?: (value: string) => void;
212
+ prefix?: string;
213
+ cursor?: CursorStyle;
214
+ type?: 'text' | 'email' | 'password' | 'url' | 'number';
215
+ disabled?: boolean;
216
+ className?: string;
217
+ style?: CSSProperties;
218
+ name?: string;
219
+ id?: string;
220
+ }
221
+ declare function Input({ label, placeholder, value: controlledValue, defaultValue, onChange, onSubmit, prefix, cursor, type, disabled, className, style, name, id, }: InputProps): react_jsx_runtime.JSX.Element;
222
+
223
+ type Variant = 'success' | 'warning' | 'error' | 'info';
224
+ interface AlertProps {
225
+ children: ReactNode;
226
+ variant?: Variant;
227
+ className?: string;
228
+ style?: CSSProperties;
229
+ }
230
+ declare function Alert({ children, variant, className, style }: AlertProps): react_jsx_runtime.JSX.Element;
231
+
232
+ interface ProgressProps {
233
+ value: number;
234
+ max?: number;
235
+ width?: number;
236
+ showLabel?: boolean;
237
+ accent?: 'primary' | 'success' | 'warning' | 'danger' | 'info';
238
+ className?: string;
239
+ style?: CSSProperties;
240
+ }
241
+ declare function Progress({ value, max, width, showLabel, accent, className, style, }: ProgressProps): react_jsx_runtime.JSX.Element;
242
+
243
+ interface SkeletonProps {
244
+ width?: number;
245
+ lines?: number;
246
+ className?: string;
247
+ style?: CSSProperties;
248
+ }
249
+ declare function Skeleton({ width, lines, className, style }: SkeletonProps): react_jsx_runtime.JSX.Element;
250
+
251
+ interface NavItem {
252
+ label: string;
253
+ href: string;
254
+ active?: boolean;
255
+ external?: boolean;
256
+ }
257
+ interface NavProps {
258
+ items: NavItem[];
259
+ className?: string;
260
+ style?: CSSProperties;
261
+ }
262
+ declare function Nav({ items, className, style }: NavProps): react_jsx_runtime.JSX.Element;
263
+
264
+ interface TypewriterProps {
265
+ text: string;
266
+ speed?: number;
267
+ delay?: number;
268
+ cursor?: CursorStyle | false;
269
+ onComplete?: () => void;
270
+ className?: string;
271
+ }
272
+ declare function Typewriter({ text, speed, delay, cursor, onComplete, className, }: TypewriterProps): react_jsx_runtime.JSX.Element;
273
+
274
+ interface ScanlineProps {
275
+ opacity?: number;
276
+ }
277
+ declare function Scanline({ opacity }: ScanlineProps): react_jsx_runtime.JSX.Element;
278
+
279
+ interface N3rdProviderProps {
280
+ children: ReactNode;
281
+ theme?: 'unicorn' | 'classic' | 'retro' | 'paper';
282
+ scanlines?: boolean;
283
+ toastDuration?: number;
284
+ }
285
+ declare function N3rdProvider({ children, scanlines, toastDuration, }: N3rdProviderProps): react_jsx_runtime.JSX.Element;
286
+
287
+ declare const jetbrainsMono: next_dist_compiled__next_font.NextFontWithVariable;
288
+ declare const N3rdFonts: next_dist_compiled__next_font.NextFontWithVariable;
289
+
290
+ export { Alert, type AlertProps, Badge, type BadgeProps, BorderStyle, Box, type BoxProps, Button, type ButtonProps, Code, type CodeProps, Cursor, type CursorProps, type CursorStyle, Divider, type DividerProps, Footer, type FooterProps, Grid, type GridProps, Heading, type HeadingProps, Input, type InputProps, List, type ListProps, Logo, type LogoProps, Metric, type MetricProps, N3rdFonts, N3rdProvider, type N3rdProviderProps, Nav, type NavProps, Page, type PageProps, Progress, type ProgressProps, Row, type RowProps, Scanline, type ScanlineProps, Skeleton, type SkeletonProps, Stack, type StackProps, StatusLine, type StatusLineProps, Table, type TableProps, Text, type TextProps, Typewriter, type TypewriterProps, jetbrainsMono };