@nexub/themes 1.0.0 → 1.2.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/package.json +3 -2
- package/src/base.css +63 -5
- package/src/bookub.css +2 -0
- package/src/dark.css +3 -2
- package/src/founderub.css +2 -0
- package/src/leap.css +2 -0
- package/src/light.css +1 -0
- package/src/payub.css +2 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nexub/themes",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"description": "CSS theme files for Nexub Design System — light, dark, and brand themes (Leap, Bookub, Payub, Founderub) as importable CSS.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"homepage": "https://github.com/Nexub-AI/nexub-ds#readme",
|
|
@@ -36,6 +36,7 @@
|
|
|
36
36
|
"./founderub": "./src/founderub.css"
|
|
37
37
|
},
|
|
38
38
|
"dependencies": {
|
|
39
|
-
"@
|
|
39
|
+
"@fontsource-variable/plus-jakarta-sans": "^5.3.0",
|
|
40
|
+
"@nexub/tokens": "1.2.0"
|
|
40
41
|
}
|
|
41
42
|
}
|
package/src/base.css
CHANGED
|
@@ -2,6 +2,11 @@
|
|
|
2
2
|
Global resets, focus ring, body, scrollbar, reduced-motion.
|
|
3
3
|
Import this once at the root of your app before light.css or dark.css. */
|
|
4
4
|
|
|
5
|
+
/* Plus Jakarta Sans — the Nexub DS typeface. Self-hosted (OFL-1.1) via
|
|
6
|
+
Fontsource; variable weights 200–800, normal + italic. Subsets load on
|
|
7
|
+
demand via unicode-range, so only the glyphs a page uses are fetched. */
|
|
8
|
+
@import '@fontsource-variable/plus-jakarta-sans/wght.css';
|
|
9
|
+
@import '@fontsource-variable/plus-jakarta-sans/wght-italic.css';
|
|
5
10
|
@import '@nexub/tokens/css';
|
|
6
11
|
|
|
7
12
|
/* ─── Semantic shorthand aliases ───────────────────────────────────────────
|
|
@@ -36,14 +41,49 @@
|
|
|
36
41
|
--color-info-bg: var(--color-semantic-info-bg);
|
|
37
42
|
--color-info-border: var(--color-semantic-info-border);
|
|
38
43
|
|
|
44
|
+
/* Focus ring follows the theme's ring tokens (the tokens default is a fixed
|
|
45
|
+
white/blue pair, wrong in dark mode and brand themes). */
|
|
46
|
+
--shadow-focus: 0 0 0 2px var(--color-ring-offset), 0 0 0 4px var(--color-ring-default);
|
|
47
|
+
|
|
48
|
+
/* Form-control boundaries (WCAG 1.4.11 needs >= 3:1 against the page).
|
|
49
|
+
Separate from --color-border-default, which cards/dividers keep light. */
|
|
50
|
+
--color-border-input: #848e9f;
|
|
51
|
+
|
|
39
52
|
/* placeholder text (PKG-B01) */
|
|
40
|
-
--color-text-placeholder: var(--color-text-
|
|
53
|
+
--color-text-placeholder: var(--color-text-muted);
|
|
41
54
|
|
|
42
55
|
/* tone text aliases — used by Heading tone prop + HelperText (PKG-H01) */
|
|
43
|
-
|
|
44
|
-
--color-text-
|
|
45
|
-
--color-text-
|
|
46
|
-
--color-text-
|
|
56
|
+
/* -strong passes WCAG AA as text in both light (dark shade) and dark (light shade). */
|
|
57
|
+
--color-text-info: var(--color-semantic-info-strong);
|
|
58
|
+
--color-text-success: var(--color-semantic-success-strong);
|
|
59
|
+
--color-text-warning: var(--color-semantic-warning-strong);
|
|
60
|
+
--color-text-danger: var(--color-semantic-error-strong);
|
|
61
|
+
|
|
62
|
+
/* Solid fills under white text. Fixed shades (they do NOT flip in dark mode)
|
|
63
|
+
chosen so white text is >= 4.5:1 (WCAG AA). Brand themes override accent. */
|
|
64
|
+
--color-fill-primary: var(--color-brand-primary-600);
|
|
65
|
+
--color-fill-primary-hover: var(--color-brand-primary-700);
|
|
66
|
+
--color-fill-info: var(--color-brand-primary-600);
|
|
67
|
+
--color-fill-info-hover: var(--color-brand-primary-700);
|
|
68
|
+
--color-fill-success: #047857;
|
|
69
|
+
--color-fill-success-hover: #065f46;
|
|
70
|
+
--color-fill-warning: #b45309;
|
|
71
|
+
--color-fill-warning-hover: #92400e;
|
|
72
|
+
--color-fill-danger: #b91c1c;
|
|
73
|
+
--color-fill-danger-hover: #991b1b;
|
|
74
|
+
--color-fill-leap: var(--color-accent-leap-600);
|
|
75
|
+
--color-fill-leap-hover: var(--color-accent-leap-700);
|
|
76
|
+
--color-fill-bookub: var(--color-accent-bookub-700);
|
|
77
|
+
--color-fill-bookub-hover: var(--color-accent-bookub-800);
|
|
78
|
+
--color-fill-payub: var(--color-accent-payub-600);
|
|
79
|
+
--color-fill-payub-hover: var(--color-accent-payub-700);
|
|
80
|
+
--color-fill-founderub: var(--color-accent-founderub-700);
|
|
81
|
+
--color-fill-founderub-hover: var(--color-accent-founderub-800);
|
|
82
|
+
--color-fill-accent: var(--color-fill-primary);
|
|
83
|
+
--color-fill-accent-hover: var(--color-fill-primary-hover);
|
|
84
|
+
|
|
85
|
+
/* scrim behind modal surfaces (Dialog, AlertDialog, Sheet/Drawer, CommandPalette) */
|
|
86
|
+
--color-overlay: rgb(0 0 0 / 0.5);
|
|
47
87
|
|
|
48
88
|
/* accent fallback — used without any brand theme applied (PKG-B03) */
|
|
49
89
|
--color-accent-500: var(--color-brand-primary-500);
|
|
@@ -100,6 +140,13 @@ html {
|
|
|
100
140
|
text-size-adjust: 100%;
|
|
101
141
|
}
|
|
102
142
|
|
|
143
|
+
/* Form controls don't inherit fonts by default — without this, apps that
|
|
144
|
+
don't use Tailwind's preflight would render buttons/inputs in the system UI
|
|
145
|
+
font instead of Plus Jakarta Sans. */
|
|
146
|
+
button, input, select, textarea, optgroup {
|
|
147
|
+
font-family: inherit;
|
|
148
|
+
}
|
|
149
|
+
|
|
103
150
|
body {
|
|
104
151
|
min-height: 100vh;
|
|
105
152
|
margin: 0;
|
|
@@ -189,3 +236,14 @@ code, kbd, pre, samp {
|
|
|
189
236
|
from { transform: translateX(0); }
|
|
190
237
|
to { transform: translateX(-50%); }
|
|
191
238
|
}
|
|
239
|
+
|
|
240
|
+
/* ─── Drawer / Sheet (vaul 1.1.2) ─────────────────────────────────────────────
|
|
241
|
+
vaul's own styles. vaul normally injects these in a <style> tag when
|
|
242
|
+
@nexub/react loads, which strict CSP pages block; @nexub/react strips that
|
|
243
|
+
and ships them here instead. Verbatim copy: the @nexub/react build fails if
|
|
244
|
+
it no longer matches vaul. One rule is left out: vaul's invalid
|
|
245
|
+
`[data-vaul-handle-hitarea]:{…}` media rule, which browsers ignore and strict
|
|
246
|
+
CSS parsers (lightningcss, Turbopack) reject. */
|
|
247
|
+
[data-vaul-drawer]{touch-action:none;will-change:transform;transition:transform .5s cubic-bezier(.32, .72, 0, 1);animation-duration:.5s;animation-timing-function:cubic-bezier(0.32,0.72,0,1)}[data-vaul-drawer][data-vaul-snap-points=false][data-vaul-drawer-direction=bottom][data-state=open]{animation-name:slideFromBottom}[data-vaul-drawer][data-vaul-snap-points=false][data-vaul-drawer-direction=bottom][data-state=closed]{animation-name:slideToBottom}[data-vaul-drawer][data-vaul-snap-points=false][data-vaul-drawer-direction=top][data-state=open]{animation-name:slideFromTop}[data-vaul-drawer][data-vaul-snap-points=false][data-vaul-drawer-direction=top][data-state=closed]{animation-name:slideToTop}[data-vaul-drawer][data-vaul-snap-points=false][data-vaul-drawer-direction=left][data-state=open]{animation-name:slideFromLeft}[data-vaul-drawer][data-vaul-snap-points=false][data-vaul-drawer-direction=left][data-state=closed]{animation-name:slideToLeft}[data-vaul-drawer][data-vaul-snap-points=false][data-vaul-drawer-direction=right][data-state=open]{animation-name:slideFromRight}[data-vaul-drawer][data-vaul-snap-points=false][data-vaul-drawer-direction=right][data-state=closed]{animation-name:slideToRight}[data-vaul-drawer][data-vaul-snap-points=true][data-vaul-drawer-direction=bottom]{transform:translate3d(0,var(--initial-transform,100%),0)}[data-vaul-drawer][data-vaul-snap-points=true][data-vaul-drawer-direction=top]{transform:translate3d(0,calc(var(--initial-transform,100%) * -1),0)}[data-vaul-drawer][data-vaul-snap-points=true][data-vaul-drawer-direction=left]{transform:translate3d(calc(var(--initial-transform,100%) * -1),0,0)}[data-vaul-drawer][data-vaul-snap-points=true][data-vaul-drawer-direction=right]{transform:translate3d(var(--initial-transform,100%),0,0)}[data-vaul-drawer][data-vaul-delayed-snap-points=true][data-vaul-drawer-direction=top]{transform:translate3d(0,var(--snap-point-height,0),0)}[data-vaul-drawer][data-vaul-delayed-snap-points=true][data-vaul-drawer-direction=bottom]{transform:translate3d(0,var(--snap-point-height,0),0)}[data-vaul-drawer][data-vaul-delayed-snap-points=true][data-vaul-drawer-direction=left]{transform:translate3d(var(--snap-point-height,0),0,0)}[data-vaul-drawer][data-vaul-delayed-snap-points=true][data-vaul-drawer-direction=right]{transform:translate3d(var(--snap-point-height,0),0,0)}[data-vaul-overlay][data-vaul-snap-points=false]{animation-duration:.5s;animation-timing-function:cubic-bezier(0.32,0.72,0,1)}[data-vaul-overlay][data-vaul-snap-points=false][data-state=open]{animation-name:fadeIn}[data-vaul-overlay][data-state=closed]{animation-name:fadeOut}[data-vaul-animate=false]{animation:none!important}[data-vaul-overlay][data-vaul-snap-points=true]{opacity:0;transition:opacity .5s cubic-bezier(.32, .72, 0, 1)}[data-vaul-overlay][data-vaul-snap-points=true]{opacity:1}[data-vaul-drawer]:not([data-vaul-custom-container=true])::after{content:'';position:absolute;background:inherit;background-color:inherit}[data-vaul-drawer][data-vaul-drawer-direction=top]::after{top:initial;bottom:100%;left:0;right:0;height:200%}[data-vaul-drawer][data-vaul-drawer-direction=bottom]::after{top:100%;bottom:initial;left:0;right:0;height:200%}[data-vaul-drawer][data-vaul-drawer-direction=left]::after{left:initial;right:100%;top:0;bottom:0;width:200%}[data-vaul-drawer][data-vaul-drawer-direction=right]::after{left:100%;right:initial;top:0;bottom:0;width:200%}[data-vaul-overlay][data-vaul-snap-points=true]:not([data-vaul-snap-points-overlay=true]):not(
|
|
248
|
+
[data-state=closed]
|
|
249
|
+
){opacity:0}[data-vaul-overlay][data-vaul-snap-points-overlay=true]{opacity:1}[data-vaul-handle]{display:block;position:relative;opacity:.7;background:#e2e2e4;margin-left:auto;margin-right:auto;height:5px;width:32px;border-radius:1rem;touch-action:pan-y}[data-vaul-handle]:active,[data-vaul-handle]:hover{opacity:1}[data-vaul-handle-hitarea]{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);width:max(100%,2.75rem);height:max(100%,2.75rem);touch-action:inherit}@media (hover:hover) and (pointer:fine){[data-vaul-drawer]{user-select:none}}@keyframes fadeIn{from{opacity:0}to{opacity:1}}@keyframes fadeOut{to{opacity:0}}@keyframes slideFromBottom{from{transform:translate3d(0,var(--initial-transform,100%),0)}to{transform:translate3d(0,0,0)}}@keyframes slideToBottom{to{transform:translate3d(0,var(--initial-transform,100%),0)}}@keyframes slideFromTop{from{transform:translate3d(0,calc(var(--initial-transform,100%) * -1),0)}to{transform:translate3d(0,0,0)}}@keyframes slideToTop{to{transform:translate3d(0,calc(var(--initial-transform,100%) * -1),0)}}@keyframes slideFromLeft{from{transform:translate3d(calc(var(--initial-transform,100%) * -1),0,0)}to{transform:translate3d(0,0,0)}}@keyframes slideToLeft{to{transform:translate3d(calc(var(--initial-transform,100%) * -1),0,0)}}@keyframes slideFromRight{from{transform:translate3d(var(--initial-transform,100%),0,0)}to{transform:translate3d(0,0,0)}}@keyframes slideToRight{to{transform:translate3d(var(--initial-transform,100%),0,0)}}
|
package/src/bookub.css
CHANGED
|
@@ -14,4 +14,6 @@
|
|
|
14
14
|
--color-accent-900: var(--color-accent-bookub-900);
|
|
15
15
|
--color-accent-950: var(--color-accent-bookub-950);
|
|
16
16
|
--color-ring-default: var(--color-accent-bookub-500);
|
|
17
|
+
--color-fill-accent: var(--color-fill-bookub);
|
|
18
|
+
--color-fill-accent-hover: var(--color-fill-bookub-hover);
|
|
17
19
|
}
|
package/src/dark.css
CHANGED
|
@@ -3,8 +3,7 @@
|
|
|
3
3
|
Apply via [data-theme='dark'] on an ancestor (typically <html>),
|
|
4
4
|
or automatically via prefers-color-scheme when no explicit theme is set. */
|
|
5
5
|
|
|
6
|
-
[data-theme='dark']
|
|
7
|
-
:root:not([data-theme]) {
|
|
6
|
+
[data-theme='dark'] {
|
|
8
7
|
/* ── Background ─────────────────────────────────────────────────────── */
|
|
9
8
|
--color-bg-default: #0b1220;
|
|
10
9
|
--color-bg-subtle: #0f172a;
|
|
@@ -26,6 +25,7 @@
|
|
|
26
25
|
--color-border-subtle: #162032;
|
|
27
26
|
--color-border-strong: #334155;
|
|
28
27
|
--color-border-inverse: #cbd5e1;
|
|
28
|
+
--color-border-input: #64748b;
|
|
29
29
|
|
|
30
30
|
/* ── Ring ────────────────────────────────────────────────────────────── */
|
|
31
31
|
--color-ring-default: #60a5fa;
|
|
@@ -86,6 +86,7 @@
|
|
|
86
86
|
--color-border-subtle: #162032;
|
|
87
87
|
--color-border-strong: #334155;
|
|
88
88
|
--color-border-inverse: #cbd5e1;
|
|
89
|
+
--color-border-input: #64748b;
|
|
89
90
|
|
|
90
91
|
--color-ring-default: #60a5fa;
|
|
91
92
|
--color-ring-offset: #0b1220;
|
package/src/founderub.css
CHANGED
|
@@ -14,4 +14,6 @@
|
|
|
14
14
|
--color-accent-900: var(--color-accent-founderub-900);
|
|
15
15
|
--color-accent-950: var(--color-accent-founderub-950);
|
|
16
16
|
--color-ring-default: var(--color-accent-founderub-500);
|
|
17
|
+
--color-fill-accent: var(--color-fill-founderub);
|
|
18
|
+
--color-fill-accent-hover: var(--color-fill-founderub-hover);
|
|
17
19
|
}
|
package/src/leap.css
CHANGED
|
@@ -14,4 +14,6 @@
|
|
|
14
14
|
--color-accent-900: var(--color-accent-leap-900);
|
|
15
15
|
--color-accent-950: var(--color-accent-leap-950);
|
|
16
16
|
--color-ring-default: var(--color-accent-leap-500);
|
|
17
|
+
--color-fill-accent: var(--color-fill-leap);
|
|
18
|
+
--color-fill-accent-hover: var(--color-fill-leap-hover);
|
|
17
19
|
}
|
package/src/light.css
CHANGED
package/src/payub.css
CHANGED
|
@@ -14,4 +14,6 @@
|
|
|
14
14
|
--color-accent-900: var(--color-accent-payub-900);
|
|
15
15
|
--color-accent-950: var(--color-accent-payub-950);
|
|
16
16
|
--color-ring-default: var(--color-accent-payub-500);
|
|
17
|
+
--color-fill-accent: var(--color-fill-payub);
|
|
18
|
+
--color-fill-accent-hover: var(--color-fill-payub-hover);
|
|
17
19
|
}
|