@djangocfg/ui-core 2.1.394 → 2.1.395
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 +14 -0
- package/package.json +4 -4
- package/src/components/effects/GlowBackground.tsx +1 -1
- package/src/components/navigation/sidebar/sidebar.tsx +4 -4
- package/src/hooks/index.ts +1 -0
- package/src/hooks/tabs/activeTabStore.ts +167 -0
- package/src/hooks/tabs/index.ts +17 -0
- package/src/hooks/tabs/tabId.ts +44 -0
- package/src/hooks/tabs/useActiveTab.ts +64 -0
- package/src/styles/README.md +149 -123
- package/src/styles/base.css +3 -3
- package/src/styles/presets/presets.ts +0 -9
- package/src/styles/presets/themes/dense.ts +10 -10
- package/src/styles/presets/themes/django-cfg.ts +13 -13
- package/src/styles/presets/themes/high-contrast.ts +11 -11
- package/src/styles/presets/themes/index.ts +0 -18
- package/src/styles/presets/themes/ios.ts +64 -64
- package/src/styles/presets/themes/macos.ts +64 -64
- package/src/styles/presets/themes/soft.ts +25 -25
- package/src/styles/presets/themes/windows.ts +64 -64
- package/src/styles/presets/types.ts +26 -12
- package/src/styles/theme/dark.css +47 -53
- package/src/styles/theme/light.css +47 -53
- package/src/styles/theme/tokens.css +128 -113
- package/src/styles/utilities.css +44 -6
- package/src/styles/presets/themes/catppuccin.ts +0 -38
- package/src/styles/presets/themes/dracula.ts +0 -38
- package/src/styles/presets/themes/github.ts +0 -38
- package/src/styles/presets/themes/gruvbox.ts +0 -38
- package/src/styles/presets/themes/material.ts +0 -38
- package/src/styles/presets/themes/nord.ts +0 -38
- package/src/styles/presets/themes/one-dark.ts +0 -38
- package/src/styles/presets/themes/solarized.ts +0 -38
- package/src/styles/presets/themes/tokyo-night.ts +0 -38
package/src/styles/README.md
CHANGED
|
@@ -1,55 +1,68 @@
|
|
|
1
1
|
# Tailwind CSS v4 Styles Guide
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
CSS architecture for `@djangocfg/ui-core` — **Tailwind v4** with semantic tokens, presets, and macOS-style glass utilities.
|
|
4
4
|
|
|
5
|
-
## Directory
|
|
5
|
+
## Directory layout
|
|
6
6
|
|
|
7
7
|
```
|
|
8
8
|
styles/
|
|
9
|
-
├── index.css # Main entry
|
|
10
|
-
├── theme.css #
|
|
11
|
-
├── base.css #
|
|
12
|
-
├── utilities.css # Custom
|
|
13
|
-
├── sources.css #
|
|
14
|
-
├── palette/ #
|
|
15
|
-
│ ├── index.ts # Exports
|
|
16
|
-
│ ├── types.ts # ThemePalette, StylePresets, BoxColors interfaces
|
|
17
|
-
│ ├── useThemePalette.ts # useThemePalette, useStylePresets, useBoxColors, alpha
|
|
18
|
-
│ └── utils.ts # hslToHex, hslToRgbString, hslToRgba
|
|
9
|
+
├── index.css # Main entry — imports the chain below
|
|
10
|
+
├── theme.css # Imports tokens.css → animations → light → dark
|
|
11
|
+
├── base.css # Resets + `*` border-color + body bg/color
|
|
12
|
+
├── utilities.css # Custom utilities (.glass-*, .step, animations)
|
|
13
|
+
├── sources.css # @source directives for monorepo class detection
|
|
14
|
+
├── palette/ # JS-readable color access (Canvas/SVG/Mermaid)
|
|
19
15
|
└── theme/
|
|
20
|
-
├── tokens.css # @theme
|
|
21
|
-
├── light.css # :root —
|
|
22
|
-
├── dark.css # .dark —
|
|
23
|
-
|
|
24
|
-
|
|
16
|
+
├── tokens.css # @theme inline { --color-X: var(--X) } + @theme { spacing/blur/z }
|
|
17
|
+
├── light.css # :root — full hsl(...) values
|
|
18
|
+
├── dark.css # .dark — full hsl(...) values
|
|
19
|
+
└── animations.css # @keyframes (float, blob, morph, …)
|
|
20
|
+
|
|
21
|
+
presets/
|
|
22
|
+
├── build.ts # buildThemeStyleSheet({preset}) → CSS string
|
|
23
|
+
├── types.ts # ThemeStylePresetId, ThemeCssVarMap
|
|
24
|
+
├── presets.ts # THEME_STYLE_PRESETS, THEME_STYLE_PRESET_ORDER
|
|
25
|
+
└── themes/ # 8 preset definitions (see Presets section)
|
|
25
26
|
```
|
|
26
27
|
|
|
27
|
-
##
|
|
28
|
+
## Token format (Tailwind v4 `@theme inline` pattern)
|
|
28
29
|
|
|
29
|
-
|
|
30
|
-
registered in `tokens.css` so Tailwind generates utility classes.
|
|
30
|
+
Tokens live in `:root` / `.dark` as **fully-wrapped CSS colors**, and `@theme inline` maps them by reference:
|
|
31
31
|
|
|
32
|
-
|
|
33
|
-
|
|
32
|
+
```css
|
|
33
|
+
:root { --background: hsl(0 0% 94%); }
|
|
34
|
+
.dark { --background: hsl(0 0% 4%); }
|
|
34
35
|
|
|
35
|
-
|
|
36
|
+
@theme inline { --color-background: var(--background); }
|
|
37
|
+
```
|
|
36
38
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
| `text-muted-foreground` | `--muted-foreground` | Secondary / hint text |
|
|
43
|
-
| `bg-muted` | `--muted` | Subtle surface (inputs, chips) |
|
|
44
|
-
| `bg-card` | `--card` | Card surface |
|
|
45
|
-
| `bg-accent` | `--accent` | Hover surface |
|
|
46
|
-
| `bg-border` / `border-border` | `--border` | Dividers & rings |
|
|
47
|
-
| `bg-primary` / `text-primary` | `--primary` | Brand CTA color |
|
|
48
|
-
| `bg-destructive` / `text-destructive` | `--destructive` | Error / delete |
|
|
39
|
+
This makes opacity modifiers (`bg-card/40`, `border-foreground/20`) resolve through `color-mix(in oklab, …)` — they work for every semantic token, no helpers needed.
|
|
40
|
+
|
|
41
|
+
> **Do NOT wrap tokens in `hsl(var(--X))`.** Tokens are already full colors, so `hsl(hsl(...))` is invalid and falls back to the default. Use `var(--X)` or `color-mix(in oklab, var(--X) N%, transparent)` for manual opacity.
|
|
42
|
+
|
|
43
|
+
## Semantic tokens — never use raw color scales
|
|
49
44
|
|
|
50
|
-
|
|
45
|
+
**Rule:** never write `bg-amber-500`, `text-green-700`, `border-gray-200`. Use semantic tokens — they adapt to both themes and to whatever preset is active.
|
|
51
46
|
|
|
52
|
-
|
|
47
|
+
### Base tokens
|
|
48
|
+
|
|
49
|
+
| Class | Token | Purpose |
|
|
50
|
+
|---|---|---|
|
|
51
|
+
| `bg-background` / `text-foreground` | `--background` / `--foreground` | Page surface + body text |
|
|
52
|
+
| `bg-card` / `text-card-foreground` | `--card` | Card surface (elevated over background) |
|
|
53
|
+
| `bg-popover` / `text-popover-foreground` | `--popover` | Floating menus, tooltips, dropdowns |
|
|
54
|
+
| `bg-muted` / `text-muted-foreground` | `--muted` | Subtle surface (input rest, chips, secondary text) |
|
|
55
|
+
| `bg-accent` / `text-accent-foreground` | `--accent` | Hover surface |
|
|
56
|
+
| `bg-primary` / `text-primary-foreground` | `--primary` | Brand CTA (filled buttons, links) |
|
|
57
|
+
| `bg-secondary` / `text-secondary-foreground` | `--secondary` | Neutral filled controls |
|
|
58
|
+
| `bg-destructive` / `text-destructive-foreground` | `--destructive` | Error / delete filled controls |
|
|
59
|
+
| `border-border` | `--border` | Dividers, card outlines, separators |
|
|
60
|
+
| `bg-input` | `--input` | Input field border / fill (theme dependent) |
|
|
61
|
+
| `ring-ring` | `--ring` | Focus rings, selected outlines |
|
|
62
|
+
|
|
63
|
+
### Status surface tokens (default + dark themes only)
|
|
64
|
+
|
|
65
|
+
Each status has 4 tokens for banners and alerts:
|
|
53
66
|
|
|
54
67
|
| Role | Class | Token |
|
|
55
68
|
|---|---|---|
|
|
@@ -58,9 +71,7 @@ Each status has **4 tokens** for building banners and alerts:
|
|
|
58
71
|
| Readable text | `text-warning-foreground` | `--warning-foreground` |
|
|
59
72
|
| Border ring | `border-warning-border` | `--warning-border` |
|
|
60
73
|
|
|
61
|
-
Available statuses: **`warning`** · **`success`** · **`destructive`** · **`info
|
|
62
|
-
|
|
63
|
-
#### Banner pattern
|
|
74
|
+
Available statuses: **`warning`** · **`success`** · **`destructive`** · **`info`**.
|
|
64
75
|
|
|
65
76
|
```tsx
|
|
66
77
|
<div className="flex items-center gap-3 rounded-md border border-warning-border/40
|
|
@@ -70,126 +81,142 @@ Available statuses: **`warning`** · **`success`** · **`destructive`** · **`in
|
|
|
70
81
|
</div>
|
|
71
82
|
```
|
|
72
83
|
|
|
73
|
-
|
|
84
|
+
Most presets don't override `*-background` / `*-border` / `*-foreground`. For preset-agnostic banners, use opacity-derived surfaces:
|
|
74
85
|
|
|
75
|
-
|
|
86
|
+
```tsx
|
|
87
|
+
<div className="rounded-md border border-warning/30 bg-warning/10 text-warning">…</div>
|
|
88
|
+
```
|
|
76
89
|
|
|
77
|
-
|
|
90
|
+
### Code & sidebar tokens
|
|
91
|
+
|
|
92
|
+
| Class | Purpose |
|
|
78
93
|
|---|---|
|
|
79
|
-
| `bg-code` / `text-code-foreground` | Code block
|
|
80
|
-
| `border-code-border` | Code block border |
|
|
94
|
+
| `bg-code` / `text-code-foreground` / `border-code-border` | Code block panels (markdown fences, terminal blocks) |
|
|
81
95
|
| `bg-code-inline` / `text-code-inline-foreground` | Inline `<code>` chips |
|
|
96
|
+
| `bg-sidebar` / `text-sidebar-foreground` / `border-sidebar-border` | App sidebar chrome |
|
|
97
|
+
| `bg-sidebar-accent` / `text-sidebar-accent-foreground` | Sidebar hover state |
|
|
82
98
|
|
|
83
|
-
|
|
99
|
+
## Theme presets — 8 production-ready
|
|
84
100
|
|
|
85
|
-
|
|
86
|
-
|
|
101
|
+
| ID | Use case |
|
|
102
|
+
|---|---|
|
|
103
|
+
| `default` | Default ui-core theme — cyan brand |
|
|
104
|
+
| `django-cfg` | Brand override (deeper cyan-blue primary) |
|
|
105
|
+
| `macos` | Pixel-accurate Apple HIG (Sequoia / Tahoe 26) — Wails/Electron desktop |
|
|
106
|
+
| `ios` | iOS app feel — 0.75rem radius, systemBlue |
|
|
107
|
+
| `windows` | Microsoft Fluent 2 — Segoe UI Variable, 0.375rem radius |
|
|
108
|
+
| `soft` | Larger radius (1rem) — friendly marketing surfaces |
|
|
109
|
+
| `dense` | Smaller radius (0.25rem) — data-heavy admin UIs |
|
|
110
|
+
| `high-contrast` | A11y boost — stronger borders, harder text |
|
|
87
111
|
|
|
88
|
-
|
|
112
|
+
### Apply a preset
|
|
89
113
|
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
114
|
+
```tsx
|
|
115
|
+
import { buildThemeStyleSheet } from '@djangocfg/ui-core/styles/presets';
|
|
116
|
+
|
|
117
|
+
// Static: bake into your app's CSS at build time
|
|
118
|
+
const css = buildThemeStyleSheet({ preset: 'macos' });
|
|
119
|
+
// then write `css` to a file and `@import` it after ui-core/styles
|
|
120
|
+
|
|
121
|
+
// Runtime: inject into <head> (use case: settings picker)
|
|
122
|
+
useEffect(() => {
|
|
123
|
+
const el = document.createElement('style');
|
|
124
|
+
el.textContent = buildThemeStyleSheet({ preset });
|
|
125
|
+
document.head.appendChild(el);
|
|
126
|
+
return () => el.remove();
|
|
127
|
+
}, [preset]);
|
|
128
|
+
```
|
|
94
129
|
|
|
95
|
-
|
|
130
|
+
### Override individual tokens
|
|
96
131
|
|
|
97
|
-
|
|
132
|
+
To re-tint only a couple of variables without copying a whole preset:
|
|
98
133
|
|
|
99
134
|
```css
|
|
100
|
-
|
|
101
|
-
|
|
135
|
+
:root.my-brand {
|
|
136
|
+
--primary: hsl(280 80% 55%);
|
|
137
|
+
--ring: hsl(280 80% 55%);
|
|
138
|
+
}
|
|
139
|
+
```
|
|
102
140
|
|
|
103
|
-
|
|
104
|
-
@import "@djangocfg/layouts/styles";
|
|
105
|
-
@import "@djangocfg/ui-tools/styles";
|
|
141
|
+
Toggle `<html class="my-brand">` and the override applies on top of whichever preset is active.
|
|
106
142
|
|
|
107
|
-
|
|
108
|
-
@import "tailwindcss";
|
|
143
|
+
## Glass utilities — macOS / Windows / Liquid
|
|
109
144
|
|
|
110
|
-
|
|
111
|
-
@plugin "tailwindcss-animate";
|
|
112
|
-
```
|
|
145
|
+
`utilities.css` ships four backdrop-blur classes. Each is built with `color-mix` over a token, so they work in any preset / theme.
|
|
113
146
|
|
|
114
|
-
|
|
147
|
+
| Class | Recipe | When |
|
|
148
|
+
|---|---|---|
|
|
149
|
+
| `.glass-macos` | `blur(20px) saturate(180%)` · 72% `--background` | Sidebar, popovers, sheet headers |
|
|
150
|
+
| `.glass-liquid` | `blur(12px) saturate(180%)` · 60% `--card` + inner highlight + border | Floating chrome (macOS 26 Dock, FAB) |
|
|
151
|
+
| `.glass-header` | `blur(8px) saturate(160%)` · 80% `--background` | Nav bars, status strips |
|
|
152
|
+
| `.glass-win11` | `blur(60px) saturate(125%)` · 85% `--background` | Windows Mica / Acrylic |
|
|
115
153
|
|
|
116
|
-
|
|
117
|
-
Each package with Tailwind classes needs either:
|
|
154
|
+
Each requires a **non-transparent parent** (something for the blur to chew on). Avoid stacking — blur compounds.
|
|
118
155
|
|
|
119
|
-
|
|
120
|
-
2. Or a `sources.css` file in the package imported via the styles entry point
|
|
156
|
+
## App setup
|
|
121
157
|
|
|
122
|
-
|
|
158
|
+
In your consuming app's `globals.css`:
|
|
123
159
|
|
|
124
|
-
|
|
125
|
-
|
|
160
|
+
```css
|
|
161
|
+
/* 1. ui-core theme tokens FIRST (they define every --color-*) */
|
|
162
|
+
@import "@djangocfg/ui-core/styles";
|
|
126
163
|
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
164
|
+
/* 2. Other package styles after */
|
|
165
|
+
@import "@djangocfg/layouts/styles";
|
|
166
|
+
@import "@djangocfg/ui-tools/styles";
|
|
130
167
|
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
cp "$SRC/tokens.css" "$CONSUMER/node_modules/@djangocfg/ui-core/src/styles/theme/tokens.css"
|
|
168
|
+
/* 3. Tailwind v4 core LAST so it sees the @theme tokens */
|
|
169
|
+
@import "tailwindcss";
|
|
134
170
|
```
|
|
135
171
|
|
|
136
|
-
|
|
172
|
+
> **No `@plugin "tailwindcss-animate"` needed** in v4 — the keyframes ship via `theme/animations.css`. Use `tw-animate-css` instead if you need extra utilities.
|
|
137
173
|
|
|
138
|
-
|
|
174
|
+
### Why `@source` is required
|
|
139
175
|
|
|
140
|
-
|
|
141
|
-
/* 1. Theme variables MUST come first */
|
|
142
|
-
@import "./theme.css";
|
|
143
|
-
|
|
144
|
-
/* 2. Source detection for Tailwind v4 monorepo */
|
|
145
|
-
@import "./sources.css";
|
|
176
|
+
Tailwind v4 doesn't scan across npm packages automatically. Each consumer needs either a `@source` directive or to import a `sources.css` from the package — `@djangocfg/ui-core/styles` already chains its own `sources.css`, so importing `…/styles` is enough.
|
|
146
177
|
|
|
147
|
-
|
|
148
|
-
@import "./base.css";
|
|
178
|
+
## Theme Showcase story
|
|
149
179
|
|
|
150
|
-
|
|
151
|
-
@import "./utilities.css";
|
|
152
|
-
```
|
|
180
|
+
The `UI Core/Theme Showcase` story in djangocfg storybook renders every base token, status surface, button variant, card, form control, glass utility, and opacity sanity-check on one page. Switch the `preset` control to flip across all 8 themes; flip light/dark from the toolbar.
|
|
153
181
|
|
|
154
|
-
|
|
182
|
+
Use it to validate any token change before publishing — every regression shows up on one screen.
|
|
155
183
|
|
|
156
|
-
|
|
184
|
+
## Local edits → consumer sync (debugging only)
|
|
157
185
|
|
|
158
|
-
|
|
186
|
+
These packages are usually consumed via pinned npm versions. To hot-test a change without publishing:
|
|
159
187
|
|
|
160
|
-
```
|
|
161
|
-
|
|
162
|
-
|
|
188
|
+
```bash
|
|
189
|
+
CONSUMER=/path/to/consumer/frontend/node_modules/.pnpm/@djangocfg+ui-core@…/node_modules/@djangocfg/ui-core/src/styles/theme
|
|
190
|
+
SRC=./src/styles/theme
|
|
163
191
|
|
|
164
|
-
|
|
165
|
-
|
|
192
|
+
cp "$SRC/light.css" "$CONSUMER/light.css"
|
|
193
|
+
cp "$SRC/dark.css" "$CONSUMER/dark.css"
|
|
194
|
+
cp "$SRC/tokens.css" "$CONSUMER/tokens.css"
|
|
166
195
|
```
|
|
167
196
|
|
|
168
|
-
|
|
169
|
-
to a full `hsl()` value, making the `/` opacity modifier valid.
|
|
197
|
+
Restart the consumer's dev server (Next.js / Vite cache module resolution). Revert before committing — `file:` paths in `package.json` cause `@types/react` dedup failures.
|
|
170
198
|
|
|
171
|
-
|
|
199
|
+
## Gotchas
|
|
172
200
|
|
|
173
|
-
Arbitrary values
|
|
201
|
+
### Arbitrary Tailwind values
|
|
174
202
|
|
|
175
|
-
|
|
176
|
-
@theme {
|
|
177
|
-
--spacing-80: 20rem;
|
|
178
|
-
--z-index-100: 100;
|
|
179
|
-
}
|
|
180
|
-
```
|
|
203
|
+
`h-[80px]`, `z-[100]` etc. may not work in v4. Prefer scaled tokens (`h-20`, `z-100`) — they're already registered in `tokens.css` under `--spacing-*` / `--z-index-*`.
|
|
181
204
|
|
|
182
|
-
|
|
205
|
+
### Opacity in arbitrary classes
|
|
183
206
|
|
|
184
|
-
|
|
207
|
+
`shadow-[0_0_0_1px_var(--ring)]` works (underscores get parsed as spaces). For nested `color-mix`, use underscores everywhere:
|
|
185
208
|
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
209
|
+
```tsx
|
|
210
|
+
className="bg-[color-mix(in_oklab,var(--primary)_30%,transparent)]"
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
### Glass over transparent background
|
|
214
|
+
|
|
215
|
+
`.glass-*` needs an opaque parent to blur. On a fully transparent canvas (e.g. Wails translucent window) put a base layer first or the blur is invisible.
|
|
189
216
|
|
|
190
|
-
##
|
|
217
|
+
## Programmatic palette access (JS / Canvas / SVG)
|
|
191
218
|
|
|
192
|
-
For Canvas
|
|
219
|
+
For contexts that can't read CSS vars (Canvas 2D, Mermaid, react-pdf, SVG fill attrs):
|
|
193
220
|
|
|
194
221
|
```tsx
|
|
195
222
|
import {
|
|
@@ -200,12 +227,11 @@ import {
|
|
|
200
227
|
} from '@djangocfg/ui-core/styles/palette';
|
|
201
228
|
|
|
202
229
|
const palette = useThemePalette();
|
|
203
|
-
ctx.fillStyle = palette.primary;
|
|
204
|
-
ctx.fillStyle = alpha(palette.warning, 0.15); // 'rgba(
|
|
230
|
+
ctx.fillStyle = palette.primary; // '#0989aa'
|
|
231
|
+
ctx.fillStyle = alpha(palette.warning, 0.15); // 'rgba(…, 0.15)'
|
|
205
232
|
|
|
206
233
|
const presets = useStylePresets();
|
|
207
|
-
presets.success // { fill: '
|
|
208
|
-
|
|
209
|
-
const boxes = useBoxColors();
|
|
210
|
-
boxes.primary // semi-transparent brand, adapts to light/dark
|
|
234
|
+
presets.success // { fill: '#…', stroke: '#…', color: '#fff' }
|
|
211
235
|
```
|
|
236
|
+
|
|
237
|
+
These hooks resolve the live CSS values via `getComputedStyle` and re-run on theme changes.
|
package/src/styles/base.css
CHANGED
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
|
|
27
27
|
/* Base element styles */
|
|
28
28
|
* {
|
|
29
|
-
border-color:
|
|
29
|
+
border-color: var(--border);
|
|
30
30
|
}
|
|
31
31
|
|
|
32
32
|
html {
|
|
@@ -34,8 +34,8 @@ html {
|
|
|
34
34
|
}
|
|
35
35
|
|
|
36
36
|
body {
|
|
37
|
-
background-color:
|
|
38
|
-
color:
|
|
37
|
+
background-color: var(--background);
|
|
38
|
+
color: var(--foreground);
|
|
39
39
|
font-family: var(--font-sans);
|
|
40
40
|
font-size: var(--font-size-base);
|
|
41
41
|
line-height: var(--line-height-base);
|
|
@@ -10,15 +10,6 @@ export const THEME_STYLE_PRESET_ORDER = [
|
|
|
10
10
|
'soft',
|
|
11
11
|
'dense',
|
|
12
12
|
'high-contrast',
|
|
13
|
-
'catppuccin',
|
|
14
|
-
'dracula',
|
|
15
|
-
'github',
|
|
16
|
-
'gruvbox',
|
|
17
|
-
'material',
|
|
18
|
-
'nord',
|
|
19
|
-
'one-dark',
|
|
20
|
-
'solarized',
|
|
21
|
-
'tokyo-night',
|
|
22
13
|
] as const satisfies readonly ThemeStylePresetId[];
|
|
23
14
|
|
|
24
15
|
export const THEME_STYLE_PRESETS = THEME_PRESETS;
|
|
@@ -3,18 +3,18 @@ import type { ThemePreset } from './types';
|
|
|
3
3
|
export const densePreset: ThemePreset = {
|
|
4
4
|
light: {
|
|
5
5
|
radius: '0.25rem',
|
|
6
|
-
border: '0 0% 82%',
|
|
7
|
-
input: '0 0% 82%',
|
|
8
|
-
muted: '0 0% 94%',
|
|
9
|
-
card: '0 0% 100%',
|
|
10
|
-
accent: '0 0% 93%',
|
|
6
|
+
border: 'hsl(0 0% 82%)',
|
|
7
|
+
input: 'hsl(0 0% 82%)',
|
|
8
|
+
muted: 'hsl(0 0% 94%)',
|
|
9
|
+
card: 'hsl(0 0% 100%)',
|
|
10
|
+
accent: 'hsl(0 0% 93%)',
|
|
11
11
|
},
|
|
12
12
|
dark: {
|
|
13
13
|
radius: '0.25rem',
|
|
14
|
-
border: '0 0% 24%',
|
|
15
|
-
input: '0 0% 24%',
|
|
16
|
-
muted: '0 0% 12%',
|
|
17
|
-
card: '0 0% 10%',
|
|
18
|
-
accent: '0 0% 14%',
|
|
14
|
+
border: 'hsl(0 0% 24%)',
|
|
15
|
+
input: 'hsl(0 0% 24%)',
|
|
16
|
+
muted: 'hsl(0 0% 12%)',
|
|
17
|
+
card: 'hsl(0 0% 10%)',
|
|
18
|
+
accent: 'hsl(0 0% 14%)',
|
|
19
19
|
},
|
|
20
20
|
};
|
|
@@ -2,20 +2,20 @@ import type { ThemePreset } from './types';
|
|
|
2
2
|
|
|
3
3
|
export const djangoCfgPreset: ThemePreset = {
|
|
4
4
|
light: {
|
|
5
|
-
primary: '192 90% 35%',
|
|
6
|
-
'primary-foreground': '0 0% 100%',
|
|
7
|
-
ring: '192 90% 35%',
|
|
8
|
-
'sidebar-primary': '192 90% 35%',
|
|
9
|
-
'sidebar-ring': '192 90% 35%',
|
|
10
|
-
'chart-1': '192 90% 35%',
|
|
5
|
+
primary: 'hsl(192 90% 35%)',
|
|
6
|
+
'primary-foreground': 'hsl(0 0% 100%)',
|
|
7
|
+
ring: 'hsl(192 90% 35%)',
|
|
8
|
+
'sidebar-primary': 'hsl(192 90% 35%)',
|
|
9
|
+
'sidebar-ring': 'hsl(192 90% 35%)',
|
|
10
|
+
'chart-1': 'hsl(192 90% 35%)',
|
|
11
11
|
},
|
|
12
12
|
dark: {
|
|
13
|
-
primary: '189 100% 50%',
|
|
14
|
-
'primary-foreground': '0 0% 9%',
|
|
15
|
-
ring: '189 100% 50%',
|
|
16
|
-
'sidebar-primary': '189 100% 50%',
|
|
17
|
-
'sidebar-primary-foreground': '0 0% 9%',
|
|
18
|
-
'sidebar-ring': '189 100% 50%',
|
|
19
|
-
'chart-1': '189 100% 50%',
|
|
13
|
+
primary: 'hsl(189 100% 50%)',
|
|
14
|
+
'primary-foreground': 'hsl(0 0% 9%)',
|
|
15
|
+
ring: 'hsl(189 100% 50%)',
|
|
16
|
+
'sidebar-primary': 'hsl(189 100% 50%)',
|
|
17
|
+
'sidebar-primary-foreground': 'hsl(0 0% 9%)',
|
|
18
|
+
'sidebar-ring': 'hsl(189 100% 50%)',
|
|
19
|
+
'chart-1': 'hsl(189 100% 50%)',
|
|
20
20
|
},
|
|
21
21
|
};
|
|
@@ -2,18 +2,18 @@ import type { ThemePreset } from './types';
|
|
|
2
2
|
|
|
3
3
|
export const highContrastPreset: ThemePreset = {
|
|
4
4
|
light: {
|
|
5
|
-
border: '0 0% 72%',
|
|
6
|
-
input: '0 0% 72%',
|
|
7
|
-
'muted-foreground': '0 0% 32%',
|
|
8
|
-
foreground: '0 0% 6%',
|
|
9
|
-
ring: '0 0% 20%',
|
|
5
|
+
border: 'hsl(0 0% 72%)',
|
|
6
|
+
input: 'hsl(0 0% 72%)',
|
|
7
|
+
'muted-foreground': 'hsl(0 0% 32%)',
|
|
8
|
+
foreground: 'hsl(0 0% 6%)',
|
|
9
|
+
ring: 'hsl(0 0% 20%)',
|
|
10
10
|
},
|
|
11
11
|
dark: {
|
|
12
|
-
border: '0 0% 38%',
|
|
13
|
-
input: '0 0% 38%',
|
|
14
|
-
'muted-foreground': '0 0% 78%',
|
|
15
|
-
foreground: '0 0% 100%',
|
|
16
|
-
background: '0 0% 6%',
|
|
17
|
-
ring: '0 0% 85%',
|
|
12
|
+
border: 'hsl(0 0% 38%)',
|
|
13
|
+
input: 'hsl(0 0% 38%)',
|
|
14
|
+
'muted-foreground': 'hsl(0 0% 78%)',
|
|
15
|
+
foreground: 'hsl(0 0% 100%)',
|
|
16
|
+
background: 'hsl(0 0% 6%)',
|
|
17
|
+
ring: 'hsl(0 0% 85%)',
|
|
18
18
|
},
|
|
19
19
|
};
|
|
@@ -9,15 +9,6 @@ import { windowsPreset } from './windows';
|
|
|
9
9
|
import { softPreset } from './soft';
|
|
10
10
|
import { densePreset } from './dense';
|
|
11
11
|
import { highContrastPreset } from './high-contrast';
|
|
12
|
-
import { catppuccinPreset } from './catppuccin';
|
|
13
|
-
import { draculaPreset } from './dracula';
|
|
14
|
-
import { githubPreset } from './github';
|
|
15
|
-
import { gruvboxPreset } from './gruvbox';
|
|
16
|
-
import { materialPreset } from './material';
|
|
17
|
-
import { nordPreset } from './nord';
|
|
18
|
-
import { oneDarkPreset } from './one-dark';
|
|
19
|
-
import { solarizedPreset } from './solarized';
|
|
20
|
-
import { tokyoNightPreset } from './tokyo-night';
|
|
21
12
|
|
|
22
13
|
export type { ThemePreset };
|
|
23
14
|
|
|
@@ -30,13 +21,4 @@ export const THEME_PRESETS: Record<ThemeStylePresetId, ThemePreset> = {
|
|
|
30
21
|
'soft': softPreset,
|
|
31
22
|
'dense': densePreset,
|
|
32
23
|
'high-contrast': highContrastPreset,
|
|
33
|
-
'catppuccin': catppuccinPreset,
|
|
34
|
-
'dracula': draculaPreset,
|
|
35
|
-
'github': githubPreset,
|
|
36
|
-
'gruvbox': gruvboxPreset,
|
|
37
|
-
'material': materialPreset,
|
|
38
|
-
'nord': nordPreset,
|
|
39
|
-
'one-dark': oneDarkPreset,
|
|
40
|
-
'solarized': solarizedPreset,
|
|
41
|
-
'tokyo-night': tokyoNightPreset,
|
|
42
24
|
};
|