ds-miagui 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/README.md +31 -0
- package/dist/components/glasmorph-navbar.d.ts +5 -0
- package/dist/components/glasmorph-navbar.d.ts.map +1 -0
- package/dist/components/glasmorph-navbar.js +9 -0
- package/dist/components/glow-button.d.ts +10 -0
- package/dist/components/glow-button.d.ts.map +1 -0
- package/dist/components/glow-button.js +25 -0
- package/dist/components/index.d.ts +3 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/index.js +4 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1 -0
- package/dist/lib/utils.d.ts +3 -0
- package/dist/lib/utils.d.ts.map +1 -0
- package/dist/lib/utils.js +5 -0
- package/guidelines/components/button.md +29 -0
- package/guidelines/components/overview.md +14 -0
- package/guidelines/foundations/color.md +74 -0
- package/guidelines/foundations/motion.md +33 -0
- package/guidelines/foundations/overview.md +7 -0
- package/guidelines/foundations/radius.md +14 -0
- package/guidelines/foundations/spacing.md +39 -0
- package/guidelines/foundations/typography.md +29 -0
- package/guidelines/overview.md +25 -0
- package/guidelines/setup.md +26 -0
- package/package.json +45 -0
- package/src/theme.css +182 -0
package/README.md
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# DS MiaGui Vision
|
|
2
|
+
|
|
3
|
+
Design system built with Tailwind CSS 4 + shadcn/ui.
|
|
4
|
+
|
|
5
|
+
## Install
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install ds-miagui
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Usage
|
|
12
|
+
|
|
13
|
+
```css
|
|
14
|
+
/* globals.css */
|
|
15
|
+
@import "tailwindcss";
|
|
16
|
+
@import "tw-animate-css";
|
|
17
|
+
@import "ds-miagui/theme";
|
|
18
|
+
|
|
19
|
+
@layer base {
|
|
20
|
+
* { @apply border-border outline-ring/50; }
|
|
21
|
+
body { @apply bg-background text-foreground; }
|
|
22
|
+
}
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Development
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
npm run generate # tokens.json → theme.css
|
|
29
|
+
npm run showcase # open showcase app
|
|
30
|
+
npm run build # build for npm
|
|
31
|
+
```
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export interface GlassmorphNavbarProps extends React.HTMLAttributes<HTMLElement> {
|
|
2
|
+
children: React.ReactNode;
|
|
3
|
+
}
|
|
4
|
+
export declare function GlassmorphNavbar({ children, className, ...props }: GlassmorphNavbarProps): import("react/jsx-runtime").JSX.Element;
|
|
5
|
+
//# sourceMappingURL=glasmorph-navbar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"glasmorph-navbar.d.ts","sourceRoot":"","sources":["../../src/components/glasmorph-navbar.tsx"],"names":[],"mappings":"AAEA,MAAM,WAAW,qBAAsB,SAAQ,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC;IAC9E,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAC1B;AAED,wBAAgB,gBAAgB,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,qBAAqB,2CAiBxF"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { cn } from '../lib/utils.js';
|
|
3
|
+
export function GlassmorphNavbar({ children, className, ...props }) {
|
|
4
|
+
return (_jsx("nav", { className: cn('fixed top-0 left-0 right-0 z-50 h-16 px-4 flex items-center border-b border-border', className), style: {
|
|
5
|
+
backgroundColor: 'rgba(26, 26, 26, 0.8)',
|
|
6
|
+
backdropFilter: 'blur(16px) saturate(180%)',
|
|
7
|
+
WebkitBackdropFilter: 'blur(16px) saturate(180%)',
|
|
8
|
+
}, ...props, children: children }));
|
|
9
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type VariantProps } from 'class-variance-authority';
|
|
2
|
+
declare const glowButtonVariants: (props?: ({
|
|
3
|
+
variant?: "primary" | "secondary" | "ghost" | "outline" | null | undefined;
|
|
4
|
+
size?: "default" | "sm" | "lg" | "xl" | null | undefined;
|
|
5
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
6
|
+
export interface GlowButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement>, VariantProps<typeof glowButtonVariants> {
|
|
7
|
+
}
|
|
8
|
+
export declare const GlowButton: import("react").ForwardRefExoticComponent<GlowButtonProps & import("react").RefAttributes<HTMLButtonElement>>;
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=glow-button.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"glow-button.d.ts","sourceRoot":"","sources":["../../src/components/glow-button.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,YAAY,EAAO,MAAM,0BAA0B,CAAA;AAGjE,QAAA,MAAM,kBAAkB;;;8EAmBvB,CAAA;AAED,MAAM,WAAW,eACf,SAAQ,KAAK,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,EACnD,YAAY,CAAC,OAAO,kBAAkB,CAAC;CAAG;AAE9C,eAAO,MAAM,UAAU,+GAQtB,CAAA"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { cn } from '../lib/utils.js';
|
|
3
|
+
import { cva } from 'class-variance-authority';
|
|
4
|
+
import { forwardRef } from 'react';
|
|
5
|
+
const glowButtonVariants = cva('inline-flex items-center justify-center gap-2 font-semibold transition-all disabled:opacity-50 disabled:pointer-events-none active:scale-[0.97]', {
|
|
6
|
+
variants: {
|
|
7
|
+
variant: {
|
|
8
|
+
primary: 'bg-primary text-primary-foreground border border-primary hover:shadow-glow',
|
|
9
|
+
secondary: 'bg-muted text-foreground border border-border hover:border-primary hover:shadow-glow',
|
|
10
|
+
ghost: 'bg-transparent text-muted-foreground hover:text-foreground hover:bg-muted',
|
|
11
|
+
outline: 'bg-transparent text-foreground border border-border hover:border-primary hover:text-primary',
|
|
12
|
+
},
|
|
13
|
+
size: {
|
|
14
|
+
sm: 'h-8 px-3 text-xs rounded-sm',
|
|
15
|
+
default: 'h-10 px-5 text-sm rounded-md',
|
|
16
|
+
lg: 'h-12 px-7 text-base rounded-lg',
|
|
17
|
+
xl: 'h-14 px-9 text-lg rounded-lg',
|
|
18
|
+
},
|
|
19
|
+
},
|
|
20
|
+
defaultVariants: { variant: 'primary', size: 'default' },
|
|
21
|
+
});
|
|
22
|
+
export const GlowButton = forwardRef(({ variant, size, className, children, ...props }, ref) => {
|
|
23
|
+
return (_jsx("button", { ref: ref, className: cn(glowButtonVariants({ variant, size }), className), ...props, children: children }));
|
|
24
|
+
});
|
|
25
|
+
GlowButton.displayName = 'GlowButton';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAA;AACnE,OAAO,EAAE,gBAAgB,EAAE,KAAK,qBAAqB,EAAE,MAAM,uBAAuB,CAAA"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAA"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './components/index.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/lib/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAQ,MAAM,MAAM,CAAA;AAG5C,wBAAgB,EAAE,CAAC,GAAG,MAAM,EAAE,UAAU,EAAE,UAEzC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# Button
|
|
2
|
+
|
|
3
|
+
## GlowButton (custom)
|
|
4
|
+
|
|
5
|
+
Primary CTA button with red glow shadow on hover.
|
|
6
|
+
|
|
7
|
+
### Variants
|
|
8
|
+
|
|
9
|
+
| Variant | Background | Border | Hover Effect |
|
|
10
|
+
|---------|-----------|--------|-------------|
|
|
11
|
+
| primary | primary-7 | primary-7 | Red glow shadow |
|
|
12
|
+
| secondary | grey-3 | grey-4 | Border → primary, red glow |
|
|
13
|
+
| ghost | transparent | none | Text highlight, muted bg |
|
|
14
|
+
| outline | transparent | grey-4 | Border → primary, text → primary |
|
|
15
|
+
|
|
16
|
+
### Sizes
|
|
17
|
+
|
|
18
|
+
| Size | Height | Radius | Use |
|
|
19
|
+
|------|--------|--------|-----|
|
|
20
|
+
| sm | 32px | radius-sm | Compact actions |
|
|
21
|
+
| default | 40px | radius-md | Standard buttons |
|
|
22
|
+
| lg | 48px | radius-lg | Prominent actions |
|
|
23
|
+
| xl | 56px | radius-lg | Hero CTAs |
|
|
24
|
+
|
|
25
|
+
### States
|
|
26
|
+
|
|
27
|
+
- Disabled: 50% opacity, no pointer events
|
|
28
|
+
- Active/pressed: scale(0.97)
|
|
29
|
+
- Focus: 2px outline primary-7, offset 2px
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# Components
|
|
2
|
+
|
|
3
|
+
This design system uses shadcn/ui components themed via CSS variables.
|
|
4
|
+
Custom components are documented individually below.
|
|
5
|
+
|
|
6
|
+
## shadcn/ui Components (themed automatically)
|
|
7
|
+
|
|
8
|
+
Button, Input, Card, Badge, Dialog, Dropdown, Tabs, Toast, Tooltip,
|
|
9
|
+
Checkbox, Switch, Select, Progress, Avatar, Skeleton, Separator,
|
|
10
|
+
Table, Popover, Navigation Menu, and more.
|
|
11
|
+
|
|
12
|
+
## Custom Components
|
|
13
|
+
|
|
14
|
+
Add your DS-specific component docs here.
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# Color
|
|
2
|
+
|
|
3
|
+
> Auto-generated from `tokens.json`. Do not edit manually.
|
|
4
|
+
|
|
5
|
+
## Raw Palette
|
|
6
|
+
|
|
7
|
+
| Token | Hex | OKLch |
|
|
8
|
+
| ----- | --- | ----- |
|
|
9
|
+
| `grey-1` | `#0d0d0d` | `oklch(0.159 0.002 119.126)` |
|
|
10
|
+
| `grey-2` | `#1a1a1a` | `oklch(0.218 0.003 119.126)` |
|
|
11
|
+
| `grey-3` | `#262626` | `oklch(0.269 0.004 119.126)` |
|
|
12
|
+
| `grey-4` | `#333333` | `oklch(0.321 0.005 119.126)` |
|
|
13
|
+
| `grey-5` | `#4d4d4d` | `oklch(0.420 0.007 119.126)` |
|
|
14
|
+
| `grey-6` | `#666666` | `oklch(0.510 0.008 119.126)` |
|
|
15
|
+
| `grey-7` | `#888888` | `oklch(0.627 0.010 119.126)` |
|
|
16
|
+
| `grey-8` | `#a4a4a4` | `oklch(0.719 0.011 119.126)` |
|
|
17
|
+
| `grey-9` | `#d4d4d4` | `oklch(0.870 0.014 119.126)` |
|
|
18
|
+
| `grey-10` | `#f6f6f6` | `oklch(0.973 0.015 119.126)` |
|
|
19
|
+
| `primary-1` | `#160104` | `oklch(0.132 0.047 11.824)` |
|
|
20
|
+
| `primary-2` | `#2b0208` | `oklch(0.188 0.069 16.674)` |
|
|
21
|
+
| `primary-3` | `#41030b` | `oklch(0.241 0.091 20.904)` |
|
|
22
|
+
| `primary-4` | `#6c0513` | `oklch(0.339 0.132 23.072)` |
|
|
23
|
+
| `primary-5` | `#97061b` | `oklch(0.429 0.170 23.838)` |
|
|
24
|
+
| `primary-6` | `#ac071e` | `oklch(0.472 0.188 24.387)` |
|
|
25
|
+
| `primary-7` | `#D70926` | `oklch(0.556 0.222 24.735)` |
|
|
26
|
+
| `primary-8` | `#df3a51` | `oklch(0.603 0.200 18.802)` |
|
|
27
|
+
| `primary-9` | `#eb8493` | `oklch(0.729 0.125 14.587)` |
|
|
28
|
+
| `primary-10` | `#f7ced4` | `oklch(0.888 0.044 23.516)` |
|
|
29
|
+
| `green-1` | `#012801` | `oklch(0.241 0.091 139.476)` |
|
|
30
|
+
| `green-5` | `#0b5e0b` | `oklch(0.420 0.154 139.576)` |
|
|
31
|
+
| `green-9` | `#30a14e` | `oklch(0.627 0.178 144.655)` |
|
|
32
|
+
| `green-10` | `#4db86a` | `oklch(0.701 0.170 145.793)` |
|
|
33
|
+
| `green-11` | `#6ecc84` | `oklch(0.769 0.157 145.554)` |
|
|
34
|
+
| `green-12` | `#e8fccf` | `oklch(0.965 0.082 125.132)` |
|
|
35
|
+
| `red-1` | `#290a11` | `oklch(0.201 0.052 10.428)` |
|
|
36
|
+
| `red-5` | `#8c1d30` | `oklch(0.424 0.145 17.469)` |
|
|
37
|
+
| `red-9` | `#e5484d` | `oklch(0.626 0.193 24.129)` |
|
|
38
|
+
| `red-10` | `#f06068` | `oklch(0.675 0.177 21.579)` |
|
|
39
|
+
| `red-11` | `#ff8f8f` | `oklch(0.770 0.135 24.404)` |
|
|
40
|
+
| `red-12` | `#ffd9d9` | `oklch(0.917 0.042 36.384)` |
|
|
41
|
+
| `orange-1` | `#3b1a02` | `oklch(0.261 0.065 57.434)` |
|
|
42
|
+
| `orange-5` | `#8d4a0a` | `oklch(0.482 0.118 60.482)` |
|
|
43
|
+
| `orange-9` | `#f76808` | `oklch(0.686 0.198 47.805)` |
|
|
44
|
+
| `orange-10` | `#ff8a30` | `oklch(0.749 0.178 57.446)` |
|
|
45
|
+
| `orange-11` | `#ffa85c` | `oklch(0.803 0.147 65.718)` |
|
|
46
|
+
| `orange-12` | `#ffe4c2` | `oklch(0.932 0.067 84.149)` |
|
|
47
|
+
| `yellow-1` | `#2c2202` | `oklch(0.257 0.057 95.299)` |
|
|
48
|
+
| `yellow-5` | `#7d6409` | `oklch(0.514 0.117 94.861)` |
|
|
49
|
+
| `yellow-9` | `#ffe066` | `oklch(0.910 0.168 98.763)` |
|
|
50
|
+
| `yellow-10` | `#ffe680` | `oklch(0.925 0.148 99.681)` |
|
|
51
|
+
| `yellow-11` | `#ffed99` | `oklch(0.942 0.128 101.389)` |
|
|
52
|
+
| `yellow-12` | `#fff1b9` | `oklch(0.956 0.092 100.747)` |
|
|
53
|
+
|
|
54
|
+
## Semantic Colors
|
|
55
|
+
|
|
56
|
+
| Token | Reference | Resolved Hex | OKLch |
|
|
57
|
+
| ----- | --------- | ------------ | ----- |
|
|
58
|
+
| `background` | `{color.raw.grey-1}` | `#0d0d0d` | `oklch(0.159 0.002 119.126)` |
|
|
59
|
+
| `background-secondary` | `{color.raw.grey-2}` | `#1a1a1a` | `oklch(0.218 0.003 119.126)` |
|
|
60
|
+
| `background-tertiary` | `{color.raw.grey-3}` | `#262626` | `oklch(0.269 0.004 119.126)` |
|
|
61
|
+
| `foreground` | `{color.raw.grey-10}` | `#f6f6f6` | `oklch(0.973 0.015 119.126)` |
|
|
62
|
+
| `foreground-strong` | `{color.raw.grey-10}` | `#f6f6f6` | `oklch(0.973 0.015 119.126)` |
|
|
63
|
+
| `foreground-muted` | `{color.raw.grey-7}` | `#888888` | `oklch(0.627 0.010 119.126)` |
|
|
64
|
+
| `primary` | `{color.raw.primary-7}` | `#D70926` | `oklch(0.556 0.222 24.735)` |
|
|
65
|
+
| `primary-hover` | `{color.raw.primary-8}` | `#df3a51` | `oklch(0.603 0.200 18.802)` |
|
|
66
|
+
| `primary-foreground` | `{color.raw.grey-1}` | `#0d0d0d` | `oklch(0.159 0.002 119.126)` |
|
|
67
|
+
| `border` | `{color.raw.grey-4}` | `#333333` | `oklch(0.321 0.005 119.126)` |
|
|
68
|
+
| `border-muted` | `{color.raw.grey-3}` | `#262626` | `oklch(0.269 0.004 119.126)` |
|
|
69
|
+
| `input` | `{color.raw.grey-4}` | `#333333` | `oklch(0.321 0.005 119.126)` |
|
|
70
|
+
| `ring` | `{color.raw.primary-7}` | `#D70926` | `oklch(0.556 0.222 24.735)` |
|
|
71
|
+
| `success` | `{color.raw.green-9}` | `#30a14e` | `oklch(0.627 0.178 144.655)` |
|
|
72
|
+
| `error` | `{color.raw.red-9}` | `#e5484d` | `oklch(0.626 0.193 24.129)` |
|
|
73
|
+
| `warning` | `{color.raw.orange-9}` | `#f76808` | `oklch(0.686 0.198 47.805)` |
|
|
74
|
+
| `info` | `{color.raw.grey-7}` | `#888888` | `oklch(0.627 0.010 119.126)` |
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Motion
|
|
2
|
+
|
|
3
|
+
## Easings
|
|
4
|
+
|
|
5
|
+
| Name | Value | Use |
|
|
6
|
+
|------|-------|-----|
|
|
7
|
+
| default | cubic-bezier(0.4, 0, 0.2, 1) | Standard transitions |
|
|
8
|
+
| in | cubic-bezier(0, 0, 0.2, 1) | Enter animations |
|
|
9
|
+
| out | cubic-bezier(0.4, 0, 1, 1) | Exit animations |
|
|
10
|
+
| smooth | cubic-bezier(0.16, 1, 0.3, 1) | Slide/smooth animations |
|
|
11
|
+
|
|
12
|
+
## Durations
|
|
13
|
+
|
|
14
|
+
| Name | Value | Use |
|
|
15
|
+
|------|-------|-----|
|
|
16
|
+
| fast | 100ms | Hovers, tooltips |
|
|
17
|
+
| normal | 200ms | Standard transitions |
|
|
18
|
+
| slow | 300ms | Complex animations |
|
|
19
|
+
| slower | 500ms | Page transitions |
|
|
20
|
+
|
|
21
|
+
## Key Animations
|
|
22
|
+
|
|
23
|
+
| Name | Duration | Use |
|
|
24
|
+
|------|----------|-----|
|
|
25
|
+
| shimmer | 2s infinite | Skeleton loading |
|
|
26
|
+
| pulse | 3s infinite | Status dots |
|
|
27
|
+
| glow | 2s infinite | Border accent pulse |
|
|
28
|
+
| spin | 1s infinite | Loading spinners |
|
|
29
|
+
| float | 3s infinite | Decorative elements |
|
|
30
|
+
| morph-blob | 8s infinite | Decorative blob shapes |
|
|
31
|
+
| scale-in | ease-smooth | Modal entry |
|
|
32
|
+
| slide-in-right | 500ms | Toast notifications |
|
|
33
|
+
| fade-in-up | 800ms | Default reveal on scroll |
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# Border Radius
|
|
2
|
+
|
|
3
|
+
## Values
|
|
4
|
+
|
|
5
|
+
| Token | Value | Components |
|
|
6
|
+
|-------|-------|-----------|
|
|
7
|
+
| radius-sm (6px) | calc(base * 0.6) | Badges, toggles, checkboxes, tooltips, small buttons |
|
|
8
|
+
| radius-md (8px) | calc(base * 0.8) | Buttons, inputs, selects, dropdowns, tabs, avatars, skeletons |
|
|
9
|
+
| radius-lg (8px) | base | Cards, modals, panels, navbars, tables, large buttons |
|
|
10
|
+
| radius-xl | calc(base * 1.4) | Modals, popovers |
|
|
11
|
+
|
|
12
|
+
## Usage
|
|
13
|
+
|
|
14
|
+
MiaGui uses rounded corners consistently. Unlike brutalist systems, every component has appropriate rounding.
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# Spacing
|
|
2
|
+
|
|
3
|
+
> Auto-generated from `tokens.json`. Do not edit manually.
|
|
4
|
+
|
|
5
|
+
## Scale
|
|
6
|
+
|
|
7
|
+
| Token | Value |
|
|
8
|
+
| ----- | ----- |
|
|
9
|
+
| `1` | 4px |
|
|
10
|
+
| `2` | 8px |
|
|
11
|
+
| `3` | 12px |
|
|
12
|
+
| `4` | 16px |
|
|
13
|
+
| `5` | 20px |
|
|
14
|
+
| `6` | 24px |
|
|
15
|
+
| `8` | 32px |
|
|
16
|
+
| `10` | 40px |
|
|
17
|
+
| `12` | 48px |
|
|
18
|
+
| `16` | 64px |
|
|
19
|
+
| `20` | 80px |
|
|
20
|
+
| `24` | 96px |
|
|
21
|
+
|
|
22
|
+
## Radius
|
|
23
|
+
|
|
24
|
+
| Token | Value | Description |
|
|
25
|
+
| ----- | ----- | ----------- |
|
|
26
|
+
| `base` | 0.5rem | Base radius, shadcn derives sm/md/lg from this |
|
|
27
|
+
|
|
28
|
+
## Shadows
|
|
29
|
+
|
|
30
|
+
| Token | Value |
|
|
31
|
+
| ----- | ----- |
|
|
32
|
+
| `sm` | `0 1px 2px 0 rgb(0 0 0 / 0.3)` |
|
|
33
|
+
| `md` | `0 4px 12px 0 rgb(0 0 0 / 0.25)` |
|
|
34
|
+
| `lg` | `0 8px 24px 0 rgb(0 0 0 / 0.35)` |
|
|
35
|
+
| `xl` | `0 20px 25px -5px rgb(0 0 0 / 0.4), 0 8px 10px -6px rgb(0 0 0 / 0.3)` |
|
|
36
|
+
| `2xl` | `0 25px 50px -12px rgb(0 0 0 / 0.5)` |
|
|
37
|
+
| `glow` | `0 0 20px rgba(215,9,38,0.25)` |
|
|
38
|
+
| `popover` | `0 0 0 1px rgb(0 0 0 / 0.2), 0 3px 6px 0 rgb(0 0 0 / 0.25), 0 9px 24px 0 rgb(0 0 0 / 0.35)` |
|
|
39
|
+
| `modal` | `0 8px 11px 0 transparent, 0 0 8px 0 rgb(0 0 0 / 0.3), 0 0 16px 0 rgb(0 0 0 / 0.4)` |
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# Typography
|
|
2
|
+
|
|
3
|
+
> Auto-generated from `tokens.json`. Do not edit manually.
|
|
4
|
+
|
|
5
|
+
## Font Families
|
|
6
|
+
|
|
7
|
+
| Role | Stack |
|
|
8
|
+
| ---- | ----- |
|
|
9
|
+
| `display` | `"Space Grotesk", sans-serif` |
|
|
10
|
+
| `body` | `"Space Grotesk", sans-serif` |
|
|
11
|
+
| `mono` | `"Space Mono", monospace` |
|
|
12
|
+
|
|
13
|
+
## Type Scale
|
|
14
|
+
|
|
15
|
+
| Name | Size | Weight | Line Height | Letter Spacing | Transform |
|
|
16
|
+
| ---- | ---- | ------ | ----------- | -------------- | --------- |
|
|
17
|
+
| `display-lg` | 56px | 600 | 1.05 | -0.022em | --- |
|
|
18
|
+
| `display` | 40px | 600 | 1.1 | -0.022em | --- |
|
|
19
|
+
| `heading-lg` | 32px | 600 | 1.2 | -0.016em | --- |
|
|
20
|
+
| `heading` | 24px | 600 | 1.25 | -0.012em | --- |
|
|
21
|
+
| `heading-sm` | 20px | 600 | 1.3 | -0.006em | --- |
|
|
22
|
+
| `body-lg` | 18px | 400 | 1.625 | 0 | --- |
|
|
23
|
+
| `body-md` | 16px | 600 | 1.375 | 0.01em | --- |
|
|
24
|
+
| `body` | 14px | 400 | 1.5 | 0 | --- |
|
|
25
|
+
| `body-sm` | 12px | 400 | 1.5 | 0.01em | --- |
|
|
26
|
+
| `label` | 13px | 600 | 1.3 | 0.01em | --- |
|
|
27
|
+
| `overline` | 12px | 600 | 1.3 | 0.05em | uppercase |
|
|
28
|
+
| `badge` | 11px | 700 | 1.6 | 0.04em | uppercase |
|
|
29
|
+
| `mono-sm` | 11px | 400 | 1.6 | 0 | --- |
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# DS MiaGui Vision
|
|
2
|
+
|
|
3
|
+
## Design Philosophy
|
|
4
|
+
|
|
5
|
+
Dark-mode design system for NVIDIA MiaGui. Minimal, focused, with a greyscale foundation and a single red accent color for emphasis and CTAs.
|
|
6
|
+
|
|
7
|
+
## Principles
|
|
8
|
+
|
|
9
|
+
1. **Dark mode only** — All surfaces are dark, text is light. No light mode.
|
|
10
|
+
2. **Greyscale + red accent** — Only primary-7 (#D70926) as color accent. No other hues in the UI except status colors (green/orange/yellow/red).
|
|
11
|
+
3. **Space Grotesk everywhere** — Display and body text. Space Mono only for code and technical metadata.
|
|
12
|
+
4. **4px spacing base** — Every spacing value is a multiple of 4.
|
|
13
|
+
5. **Elevation = surface color + optional shadow** — Darker surfaces are lower, lighter surfaces are higher.
|
|
14
|
+
|
|
15
|
+
## Rules
|
|
16
|
+
|
|
17
|
+
- **IMPORTANT:** Always use semantic tokens (bg-background, text-foreground), never raw hex values.
|
|
18
|
+
- Surface hierarchy: sunken (#0d0d0d) → base (#1a1a1a) → raised (#262626) → elevated (#333333).
|
|
19
|
+
- Text hierarchy: primary (#f6f6f6) → secondary (#d4d4d4) → tertiary (#888888) → disabled (#4d4d4d).
|
|
20
|
+
- Status colors use background (15% opacity) + text (bright) + border (medium) per status.
|
|
21
|
+
|
|
22
|
+
## Reading Order
|
|
23
|
+
|
|
24
|
+
1. **Foundations** — Colors, typography, spacing, motion
|
|
25
|
+
2. **Components** — shadcn/ui themed + custom (GlowButton, GlassmorphNavbar)
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# Setup
|
|
2
|
+
|
|
3
|
+
## Install
|
|
4
|
+
|
|
5
|
+
```bash
|
|
6
|
+
npm install ds-miagui
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
## Configure
|
|
10
|
+
|
|
11
|
+
```css
|
|
12
|
+
/* globals.css */
|
|
13
|
+
@import "tailwindcss";
|
|
14
|
+
@import "tw-animate-css";
|
|
15
|
+
@import "ds-miagui/theme";
|
|
16
|
+
|
|
17
|
+
@layer base {
|
|
18
|
+
* { @apply border-border outline-ring/50; }
|
|
19
|
+
body { @apply bg-background text-foreground; }
|
|
20
|
+
}
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Requirements
|
|
24
|
+
|
|
25
|
+
- Tailwind CSS 4+
|
|
26
|
+
- PostCSS with @tailwindcss/postcss plugin
|
package/package.json
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "ds-miagui",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "DS MiaGui Vision Design System - Tailwind 4 + shadcn/ui",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"import": "./dist/index.js",
|
|
11
|
+
"types": "./dist/index.d.ts"
|
|
12
|
+
},
|
|
13
|
+
"./theme": "./src/theme.css"
|
|
14
|
+
},
|
|
15
|
+
"files": ["dist", "src/theme.css", "guidelines"],
|
|
16
|
+
"scripts": {
|
|
17
|
+
"generate": "npx tsx scripts/generate-theme.ts",
|
|
18
|
+
"build": "npm run generate && tsc",
|
|
19
|
+
"dev": "tsc --watch",
|
|
20
|
+
"showcase": "cd showcase && npm run dev",
|
|
21
|
+
"prepublishOnly": "npm run build"
|
|
22
|
+
},
|
|
23
|
+
"peerDependencies": {
|
|
24
|
+
"tailwindcss": ">=4.0.0"
|
|
25
|
+
},
|
|
26
|
+
"peerDependenciesMeta": {
|
|
27
|
+
"react": { "optional": true },
|
|
28
|
+
"react-dom": { "optional": true }
|
|
29
|
+
},
|
|
30
|
+
"devDependencies": {
|
|
31
|
+
"@types/react": "^19",
|
|
32
|
+
"@types/react-dom": "^19",
|
|
33
|
+
"class-variance-authority": "^0.7",
|
|
34
|
+
"clsx": "^2",
|
|
35
|
+
"react": "^19",
|
|
36
|
+
"react-dom": "^19",
|
|
37
|
+
"tailwind-merge": "^3",
|
|
38
|
+
"tailwindcss": "^4.2",
|
|
39
|
+
"typescript": "^5.7",
|
|
40
|
+
"tsx": "^4"
|
|
41
|
+
},
|
|
42
|
+
"keywords": ["design-system", "tailwindcss", "shadcn"],
|
|
43
|
+
"author": "Leo Becker <leo@leobecker.com>",
|
|
44
|
+
"license": "MIT"
|
|
45
|
+
}
|
package/src/theme.css
ADDED
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
@custom-variant dark (&:is(.dark *));
|
|
2
|
+
|
|
3
|
+
@theme inline {
|
|
4
|
+
/* Semantic colors */
|
|
5
|
+
--color-background: var(--background);
|
|
6
|
+
--color-background-secondary: var(--background-secondary);
|
|
7
|
+
--color-background-tertiary: var(--background-tertiary);
|
|
8
|
+
--color-foreground: var(--foreground);
|
|
9
|
+
--color-foreground-strong: var(--foreground-strong);
|
|
10
|
+
--color-foreground-muted: var(--foreground-muted);
|
|
11
|
+
--color-primary: var(--primary);
|
|
12
|
+
--color-primary-hover: var(--primary-hover);
|
|
13
|
+
--color-primary-foreground: var(--primary-foreground);
|
|
14
|
+
--color-border: var(--border);
|
|
15
|
+
--color-border-muted: var(--border-muted);
|
|
16
|
+
--color-input: var(--input);
|
|
17
|
+
--color-ring: var(--ring);
|
|
18
|
+
--color-success: var(--success);
|
|
19
|
+
--color-error: var(--error);
|
|
20
|
+
--color-warning: var(--warning);
|
|
21
|
+
--color-info: var(--info);
|
|
22
|
+
|
|
23
|
+
/* Raw palette */
|
|
24
|
+
--color-raw-grey-1: oklch(0.159 0.002 119.126);
|
|
25
|
+
--color-raw-grey-2: oklch(0.218 0.003 119.126);
|
|
26
|
+
--color-raw-grey-3: oklch(0.269 0.004 119.126);
|
|
27
|
+
--color-raw-grey-4: oklch(0.321 0.005 119.126);
|
|
28
|
+
--color-raw-grey-5: oklch(0.420 0.007 119.126);
|
|
29
|
+
--color-raw-grey-6: oklch(0.510 0.008 119.126);
|
|
30
|
+
--color-raw-grey-7: oklch(0.627 0.010 119.126);
|
|
31
|
+
--color-raw-grey-8: oklch(0.719 0.011 119.126);
|
|
32
|
+
--color-raw-grey-9: oklch(0.870 0.014 119.126);
|
|
33
|
+
--color-raw-grey-10: oklch(0.973 0.015 119.126);
|
|
34
|
+
--color-raw-primary-1: oklch(0.132 0.047 11.824);
|
|
35
|
+
--color-raw-primary-2: oklch(0.188 0.069 16.674);
|
|
36
|
+
--color-raw-primary-3: oklch(0.241 0.091 20.904);
|
|
37
|
+
--color-raw-primary-4: oklch(0.339 0.132 23.072);
|
|
38
|
+
--color-raw-primary-5: oklch(0.429 0.170 23.838);
|
|
39
|
+
--color-raw-primary-6: oklch(0.472 0.188 24.387);
|
|
40
|
+
--color-raw-primary-7: oklch(0.556 0.222 24.735);
|
|
41
|
+
--color-raw-primary-8: oklch(0.603 0.200 18.802);
|
|
42
|
+
--color-raw-primary-9: oklch(0.729 0.125 14.587);
|
|
43
|
+
--color-raw-primary-10: oklch(0.888 0.044 23.516);
|
|
44
|
+
--color-raw-green-1: oklch(0.241 0.091 139.476);
|
|
45
|
+
--color-raw-green-5: oklch(0.420 0.154 139.576);
|
|
46
|
+
--color-raw-green-9: oklch(0.627 0.178 144.655);
|
|
47
|
+
--color-raw-green-10: oklch(0.701 0.170 145.793);
|
|
48
|
+
--color-raw-green-11: oklch(0.769 0.157 145.554);
|
|
49
|
+
--color-raw-green-12: oklch(0.965 0.082 125.132);
|
|
50
|
+
--color-raw-red-1: oklch(0.201 0.052 10.428);
|
|
51
|
+
--color-raw-red-5: oklch(0.424 0.145 17.469);
|
|
52
|
+
--color-raw-red-9: oklch(0.626 0.193 24.129);
|
|
53
|
+
--color-raw-red-10: oklch(0.675 0.177 21.579);
|
|
54
|
+
--color-raw-red-11: oklch(0.770 0.135 24.404);
|
|
55
|
+
--color-raw-red-12: oklch(0.917 0.042 36.384);
|
|
56
|
+
--color-raw-orange-1: oklch(0.261 0.065 57.434);
|
|
57
|
+
--color-raw-orange-5: oklch(0.482 0.118 60.482);
|
|
58
|
+
--color-raw-orange-9: oklch(0.686 0.198 47.805);
|
|
59
|
+
--color-raw-orange-10: oklch(0.749 0.178 57.446);
|
|
60
|
+
--color-raw-orange-11: oklch(0.803 0.147 65.718);
|
|
61
|
+
--color-raw-orange-12: oklch(0.932 0.067 84.149);
|
|
62
|
+
--color-raw-yellow-1: oklch(0.257 0.057 95.299);
|
|
63
|
+
--color-raw-yellow-5: oklch(0.514 0.117 94.861);
|
|
64
|
+
--color-raw-yellow-9: oklch(0.910 0.168 98.763);
|
|
65
|
+
--color-raw-yellow-10: oklch(0.925 0.148 99.681);
|
|
66
|
+
--color-raw-yellow-11: oklch(0.942 0.128 101.389);
|
|
67
|
+
--color-raw-yellow-12: oklch(0.956 0.092 100.747);
|
|
68
|
+
|
|
69
|
+
/* Typography */
|
|
70
|
+
--font-sans: "Space Grotesk", sans-serif;
|
|
71
|
+
--font-display: "Space Grotesk", sans-serif;
|
|
72
|
+
--font-mono: "Space Mono", monospace;
|
|
73
|
+
|
|
74
|
+
/* Radius */
|
|
75
|
+
--radius-sm: calc(var(--radius) - 4px);
|
|
76
|
+
--radius-md: calc(var(--radius) - 2px);
|
|
77
|
+
--radius-lg: var(--radius);
|
|
78
|
+
--radius-xl: calc(var(--radius) + 4px);
|
|
79
|
+
|
|
80
|
+
/* Shadows */
|
|
81
|
+
--shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.3);
|
|
82
|
+
--shadow-md: 0 4px 12px 0 rgb(0 0 0 / 0.25);
|
|
83
|
+
--shadow-lg: 0 8px 24px 0 rgb(0 0 0 / 0.35);
|
|
84
|
+
--shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.4), 0 8px 10px -6px rgb(0 0 0 / 0.3);
|
|
85
|
+
--shadow-2xl: 0 25px 50px -12px rgb(0 0 0 / 0.5);
|
|
86
|
+
--shadow-glow: 0 0 20px rgba(215,9,38,0.25);
|
|
87
|
+
--shadow-popover: 0 0 0 1px rgb(0 0 0 / 0.2), 0 3px 6px 0 rgb(0 0 0 / 0.25), 0 9px 24px 0 rgb(0 0 0 / 0.35);
|
|
88
|
+
--shadow-modal: 0 8px 11px 0 transparent, 0 0 8px 0 rgb(0 0 0 / 0.3), 0 0 16px 0 rgb(0 0 0 / 0.4);
|
|
89
|
+
|
|
90
|
+
/* Animations */
|
|
91
|
+
--animate-fade-in: fade-in 300ms ease-out;
|
|
92
|
+
--animate-fade-in-up: fade-in-up 800ms cubic-bezier(0.16, 1, 0.3, 1);
|
|
93
|
+
--animate-fade-in-down: fade-in-down 600ms cubic-bezier(0.16, 1, 0.3, 1);
|
|
94
|
+
--animate-scale-in: scale-in 200ms cubic-bezier(0.16, 1, 0.3, 1);
|
|
95
|
+
--animate-slide-in-right: slide-in-right 500ms cubic-bezier(0.16, 1, 0.3, 1);
|
|
96
|
+
--animate-shimmer: shimmer 2s cubic-bezier(0.14, 0.38, 0.89, 0.65) infinite;
|
|
97
|
+
--animate-pulse: pulse 3s ease-in-out infinite;
|
|
98
|
+
--animate-spin: spin 1s linear infinite;
|
|
99
|
+
--animate-float: float 3s ease-in-out infinite;
|
|
100
|
+
--animate-glow: glow 2s ease-in-out infinite;
|
|
101
|
+
--animate-morph-blob: morph-blob 8s ease-in-out infinite;
|
|
102
|
+
|
|
103
|
+
/* Keyframes */
|
|
104
|
+
@keyframes fade-in {
|
|
105
|
+
from { opacity: 0; }
|
|
106
|
+
to { opacity: 1; }
|
|
107
|
+
}
|
|
108
|
+
@keyframes fade-in-up {
|
|
109
|
+
from { opacity: 0; transform: translateY(16px); }
|
|
110
|
+
to { opacity: 1; transform: translateY(0); }
|
|
111
|
+
}
|
|
112
|
+
@keyframes fade-in-down {
|
|
113
|
+
from { opacity: 0; transform: translateY(-16px); }
|
|
114
|
+
to { opacity: 1; transform: translateY(0); }
|
|
115
|
+
}
|
|
116
|
+
@keyframes scale-in {
|
|
117
|
+
from { opacity: 0; transform: scale(0.92); }
|
|
118
|
+
to { opacity: 1; transform: scale(1); }
|
|
119
|
+
}
|
|
120
|
+
@keyframes slide-in-right {
|
|
121
|
+
from { opacity: 0; transform: translateX(100%); }
|
|
122
|
+
to { opacity: 1; transform: translateX(0); }
|
|
123
|
+
}
|
|
124
|
+
@keyframes shimmer {
|
|
125
|
+
from { background-position: -200% 0; }
|
|
126
|
+
to { background-position: 200% 0; }
|
|
127
|
+
}
|
|
128
|
+
@keyframes pulse {
|
|
129
|
+
0%, 100% { opacity: 1; }
|
|
130
|
+
50% { opacity: 0.5; }
|
|
131
|
+
}
|
|
132
|
+
@keyframes spin {
|
|
133
|
+
to { transform: rotate(360deg); }
|
|
134
|
+
}
|
|
135
|
+
@keyframes float {
|
|
136
|
+
0%, 100% { transform: translateY(0); }
|
|
137
|
+
50% { transform: translateY(-8px); }
|
|
138
|
+
}
|
|
139
|
+
@keyframes glow {
|
|
140
|
+
0%, 100% { box-shadow: 0 0 20px rgba(215,9,38,0.25); }
|
|
141
|
+
50% { box-shadow: 0 0 40px rgba(215,9,38,0.5); }
|
|
142
|
+
}
|
|
143
|
+
@keyframes morph-blob {
|
|
144
|
+
0%, 100% { border-radius: 60% 40% 30% 70% / 60% 30% 70% 40%; }
|
|
145
|
+
25% { border-radius: 30% 60% 70% 40% / 50% 60% 30% 60%; }
|
|
146
|
+
50% { border-radius: 50% 60% 30% 60% / 30% 40% 70% 60%; }
|
|
147
|
+
75% { border-radius: 60% 40% 60% 40% / 70% 30% 50% 60%; }
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
:root {
|
|
152
|
+
/* Semantic color tokens (OKLch) */
|
|
153
|
+
--background: oklch(0.159 0.002 119.126);
|
|
154
|
+
--background-secondary: oklch(0.218 0.003 119.126);
|
|
155
|
+
--background-tertiary: oklch(0.269 0.004 119.126);
|
|
156
|
+
--foreground: oklch(0.973 0.015 119.126);
|
|
157
|
+
--foreground-strong: oklch(0.973 0.015 119.126);
|
|
158
|
+
--foreground-muted: oklch(0.627 0.010 119.126);
|
|
159
|
+
--primary: oklch(0.556 0.222 24.735);
|
|
160
|
+
--primary-hover: oklch(0.603 0.200 18.802);
|
|
161
|
+
--primary-foreground: oklch(0.159 0.002 119.126);
|
|
162
|
+
--border: oklch(0.321 0.005 119.126);
|
|
163
|
+
--border-muted: oklch(0.269 0.004 119.126);
|
|
164
|
+
--input: oklch(0.321 0.005 119.126);
|
|
165
|
+
--ring: oklch(0.556 0.222 24.735);
|
|
166
|
+
--success: oklch(0.627 0.178 144.655);
|
|
167
|
+
--error: oklch(0.626 0.193 24.129);
|
|
168
|
+
--warning: oklch(0.686 0.198 47.805);
|
|
169
|
+
--info: oklch(0.627 0.010 119.126);
|
|
170
|
+
|
|
171
|
+
/* Radius */
|
|
172
|
+
--radius: 0.5rem;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
@layer base {
|
|
176
|
+
* {
|
|
177
|
+
@apply border-border outline-ring/50;
|
|
178
|
+
}
|
|
179
|
+
body {
|
|
180
|
+
@apply bg-background text-foreground;
|
|
181
|
+
}
|
|
182
|
+
}
|