@nexub/themes 2.1.0 → 2.3.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 (2) hide show
  1. package/package.json +2 -2
  2. package/src/base.css +88 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nexub/themes",
3
- "version": "2.1.0",
3
+ "version": "2.3.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",
@@ -37,7 +37,7 @@
37
37
  "./founderub": "./src/founderub.css"
38
38
  },
39
39
  "dependencies": {
40
- "@nexub/tokens": "2.1.0"
40
+ "@nexub/tokens": "2.3.0"
41
41
  },
42
42
  "devDependencies": {
43
43
  "@fontsource-variable/inter": "5.3.0",
package/src/base.css CHANGED
@@ -153,6 +153,13 @@ button, input, select, textarea, optgroup {
153
153
  font-family: inherit;
154
154
  }
155
155
 
156
+ /* Pointer cursor on buttons. Tailwind v3's preflight set it; v4's doesn't, so
157
+ this keeps Nexub buttons the same on both. Zero specificity (:where), so any
158
+ cursor-* utility and v3's preflight still win. */
159
+ :where(button:not(:disabled), [role='button']:not(:disabled)) {
160
+ cursor: pointer;
161
+ }
162
+
156
163
  body {
157
164
  min-height: 100vh;
158
165
  margin: 0;
@@ -320,6 +327,62 @@ code, kbd, pre, samp {
320
327
  .nx-motion { --nx-x: 0px !important; --nx-y: 0px !important; --nx-scale: 1 !important; }
321
328
  }
322
329
 
330
+ /* Stagger: children of .nx-stagger rise in one after another (40ms apart, up
331
+ to the 12th; later ones arrive with the 12th). Set --nx-stagger to change
332
+ the step. Re-key the parent to replay. */
333
+ .nx-stagger > * {
334
+ --nx-y: 8px;
335
+ animation:
336
+ nx-fade-in var(--motion-spring-effects-default-duration) var(--motion-spring-effects-default-easing) both,
337
+ nx-move-in var(--motion-spring-spatial-default-duration) var(--motion-spring-spatial-default-easing) both;
338
+ animation-delay: calc(var(--nx-i, 0) * var(--nx-stagger, 40ms));
339
+ }
340
+ .nx-stagger > :nth-child(2) { --nx-i: 1; }
341
+ .nx-stagger > :nth-child(3) { --nx-i: 2; }
342
+ .nx-stagger > :nth-child(4) { --nx-i: 3; }
343
+ .nx-stagger > :nth-child(5) { --nx-i: 4; }
344
+ .nx-stagger > :nth-child(6) { --nx-i: 5; }
345
+ .nx-stagger > :nth-child(7) { --nx-i: 6; }
346
+ .nx-stagger > :nth-child(8) { --nx-i: 7; }
347
+ .nx-stagger > :nth-child(9) { --nx-i: 8; }
348
+ .nx-stagger > :nth-child(10) { --nx-i: 9; }
349
+ .nx-stagger > :nth-child(11) { --nx-i: 10; }
350
+ .nx-stagger > :nth-child(n + 12) { --nx-i: 11; }
351
+
352
+ /* ListTransition items: grow in from zero height and fade in; exit collapses
353
+ and fades (quicker, no overshoot). Rows animate via grid-template-rows so
354
+ the item needs no measured height. */
355
+ .nx-list-item { display: grid; grid-template-rows: 1fr; }
356
+ .nx-list-item-inner { min-height: 0; overflow: hidden; }
357
+ @keyframes nx-rows-in { from { grid-template-rows: 0fr; } }
358
+ @keyframes nx-rows-out { to { grid-template-rows: 0fr; } }
359
+ .nx-list-item[data-state='enter'] {
360
+ animation:
361
+ nx-rows-in var(--motion-spring-spatial-default-duration) var(--motion-spring-spatial-default-easing),
362
+ nx-fade-in var(--motion-spring-effects-default-duration) var(--motion-spring-effects-default-easing);
363
+ }
364
+ .nx-list-item[data-state='exit'] {
365
+ pointer-events: none;
366
+ animation:
367
+ nx-rows-out var(--motion-spring-effects-default-duration) var(--motion-spring-effects-default-easing) forwards,
368
+ nx-fade-out var(--motion-spring-effects-fast-duration) var(--motion-spring-effects-fast-easing) forwards;
369
+ }
370
+
371
+ /* SkeletonSwap: skeleton and content share one grid cell and crossfade. */
372
+ .nx-swap { display: grid; }
373
+ .nx-swap > * { grid-area: 1 / 1; min-width: 0; }
374
+ .nx-swap-in { animation: nx-fade-in var(--motion-spring-effects-default-duration) var(--motion-spring-effects-default-easing) both; }
375
+ .nx-swap-out {
376
+ pointer-events: none;
377
+ animation: nx-fade-out var(--motion-spring-effects-default-duration) var(--motion-spring-effects-default-easing) forwards;
378
+ }
379
+
380
+ @media (prefers-reduced-motion: reduce) {
381
+ .nx-stagger > * { --nx-y: 0px; animation-delay: 0s; }
382
+ .nx-list-item[data-state='enter'] { animation: nx-fade-in var(--motion-spring-effects-default-duration) var(--motion-spring-effects-default-easing); }
383
+ .nx-list-item[data-state='exit'] { animation: nx-fade-out var(--motion-spring-effects-fast-duration) var(--motion-spring-effects-fast-easing) forwards; }
384
+ }
385
+
323
386
  /* ─── Cards: lift, press, sheen ──────────────────────────────────────────────
324
387
  Lift: hover raises 2px on the spatial spring with elevation 1 → 2; leaving
325
388
  settles faster on the effects spring (a transition uses the *destination*
@@ -589,3 +652,28 @@ html.nexub-scroll-lock.nexub-scroll-gutter { scrollbar-gutter: stable; }
589
652
  [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(
590
653
  [data-state=closed]
591
654
  ){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)}}
655
+
656
+ /* Drawer / Sheet on our springs. vaul's copy above stays verbatim (tsup checks
657
+ it); these override its .5s iOS curve. Enter rides spatial, exit is quicker
658
+ on effects and never overshoots. Placed after vaul's rules so ties win. */
659
+ .nx-drawer[data-vaul-drawer][data-vaul-snap-points='false'] {
660
+ animation-duration: var(--motion-spring-spatial-default-duration);
661
+ animation-timing-function: var(--motion-spring-spatial-default-easing);
662
+ }
663
+ .nx-drawer[data-vaul-drawer][data-vaul-snap-points='false'][data-state='closed'] {
664
+ animation-duration: var(--motion-spring-effects-default-duration);
665
+ animation-timing-function: var(--motion-spring-effects-default-easing);
666
+ }
667
+ .nx-drawer-overlay[data-vaul-overlay][data-vaul-snap-points='false'] {
668
+ animation-duration: var(--motion-spring-effects-default-duration);
669
+ animation-timing-function: var(--motion-spring-effects-default-easing);
670
+ }
671
+ .nx-drawer-overlay[data-vaul-overlay][data-state='closed'] {
672
+ animation-duration: var(--motion-spring-effects-fast-duration);
673
+ animation-timing-function: var(--motion-spring-effects-fast-easing);
674
+ }
675
+ /* Reduced motion: the panel fades instead of sliding. */
676
+ @media (prefers-reduced-motion: reduce) {
677
+ .nx-drawer[data-vaul-drawer][data-vaul-snap-points='false'][data-state='open'] { animation-name: fadeIn; }
678
+ .nx-drawer[data-vaul-drawer][data-vaul-snap-points='false'][data-state='closed'] { animation-name: fadeOut; }
679
+ }