@nexub/themes 2.1.0 → 2.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.
Files changed (2) hide show
  1. package/package.json +2 -2
  2. package/src/base.css +81 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nexub/themes",
3
- "version": "2.1.0",
3
+ "version": "2.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",
@@ -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.2.0"
41
41
  },
42
42
  "devDependencies": {
43
43
  "@fontsource-variable/inter": "5.3.0",
package/src/base.css CHANGED
@@ -320,6 +320,62 @@ code, kbd, pre, samp {
320
320
  .nx-motion { --nx-x: 0px !important; --nx-y: 0px !important; --nx-scale: 1 !important; }
321
321
  }
322
322
 
323
+ /* Stagger: children of .nx-stagger rise in one after another (40ms apart, up
324
+ to the 12th; later ones arrive with the 12th). Set --nx-stagger to change
325
+ the step. Re-key the parent to replay. */
326
+ .nx-stagger > * {
327
+ --nx-y: 8px;
328
+ animation:
329
+ nx-fade-in var(--motion-spring-effects-default-duration) var(--motion-spring-effects-default-easing) both,
330
+ nx-move-in var(--motion-spring-spatial-default-duration) var(--motion-spring-spatial-default-easing) both;
331
+ animation-delay: calc(var(--nx-i, 0) * var(--nx-stagger, 40ms));
332
+ }
333
+ .nx-stagger > :nth-child(2) { --nx-i: 1; }
334
+ .nx-stagger > :nth-child(3) { --nx-i: 2; }
335
+ .nx-stagger > :nth-child(4) { --nx-i: 3; }
336
+ .nx-stagger > :nth-child(5) { --nx-i: 4; }
337
+ .nx-stagger > :nth-child(6) { --nx-i: 5; }
338
+ .nx-stagger > :nth-child(7) { --nx-i: 6; }
339
+ .nx-stagger > :nth-child(8) { --nx-i: 7; }
340
+ .nx-stagger > :nth-child(9) { --nx-i: 8; }
341
+ .nx-stagger > :nth-child(10) { --nx-i: 9; }
342
+ .nx-stagger > :nth-child(11) { --nx-i: 10; }
343
+ .nx-stagger > :nth-child(n + 12) { --nx-i: 11; }
344
+
345
+ /* ListTransition items: grow in from zero height and fade in; exit collapses
346
+ and fades (quicker, no overshoot). Rows animate via grid-template-rows so
347
+ the item needs no measured height. */
348
+ .nx-list-item { display: grid; grid-template-rows: 1fr; }
349
+ .nx-list-item-inner { min-height: 0; overflow: hidden; }
350
+ @keyframes nx-rows-in { from { grid-template-rows: 0fr; } }
351
+ @keyframes nx-rows-out { to { grid-template-rows: 0fr; } }
352
+ .nx-list-item[data-state='enter'] {
353
+ animation:
354
+ nx-rows-in var(--motion-spring-spatial-default-duration) var(--motion-spring-spatial-default-easing),
355
+ nx-fade-in var(--motion-spring-effects-default-duration) var(--motion-spring-effects-default-easing);
356
+ }
357
+ .nx-list-item[data-state='exit'] {
358
+ pointer-events: none;
359
+ animation:
360
+ nx-rows-out var(--motion-spring-effects-default-duration) var(--motion-spring-effects-default-easing) forwards,
361
+ nx-fade-out var(--motion-spring-effects-fast-duration) var(--motion-spring-effects-fast-easing) forwards;
362
+ }
363
+
364
+ /* SkeletonSwap: skeleton and content share one grid cell and crossfade. */
365
+ .nx-swap { display: grid; }
366
+ .nx-swap > * { grid-area: 1 / 1; min-width: 0; }
367
+ .nx-swap-in { animation: nx-fade-in var(--motion-spring-effects-default-duration) var(--motion-spring-effects-default-easing) both; }
368
+ .nx-swap-out {
369
+ pointer-events: none;
370
+ animation: nx-fade-out var(--motion-spring-effects-default-duration) var(--motion-spring-effects-default-easing) forwards;
371
+ }
372
+
373
+ @media (prefers-reduced-motion: reduce) {
374
+ .nx-stagger > * { --nx-y: 0px; animation-delay: 0s; }
375
+ .nx-list-item[data-state='enter'] { animation: nx-fade-in var(--motion-spring-effects-default-duration) var(--motion-spring-effects-default-easing); }
376
+ .nx-list-item[data-state='exit'] { animation: nx-fade-out var(--motion-spring-effects-fast-duration) var(--motion-spring-effects-fast-easing) forwards; }
377
+ }
378
+
323
379
  /* ─── Cards: lift, press, sheen ──────────────────────────────────────────────
324
380
  Lift: hover raises 2px on the spatial spring with elevation 1 → 2; leaving
325
381
  settles faster on the effects spring (a transition uses the *destination*
@@ -589,3 +645,28 @@ html.nexub-scroll-lock.nexub-scroll-gutter { scrollbar-gutter: stable; }
589
645
  [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
646
  [data-state=closed]
591
647
  ){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)}}
648
+
649
+ /* Drawer / Sheet on our springs. vaul's copy above stays verbatim (tsup checks
650
+ it); these override its .5s iOS curve. Enter rides spatial, exit is quicker
651
+ on effects and never overshoots. Placed after vaul's rules so ties win. */
652
+ .nx-drawer[data-vaul-drawer][data-vaul-snap-points='false'] {
653
+ animation-duration: var(--motion-spring-spatial-default-duration);
654
+ animation-timing-function: var(--motion-spring-spatial-default-easing);
655
+ }
656
+ .nx-drawer[data-vaul-drawer][data-vaul-snap-points='false'][data-state='closed'] {
657
+ animation-duration: var(--motion-spring-effects-default-duration);
658
+ animation-timing-function: var(--motion-spring-effects-default-easing);
659
+ }
660
+ .nx-drawer-overlay[data-vaul-overlay][data-vaul-snap-points='false'] {
661
+ animation-duration: var(--motion-spring-effects-default-duration);
662
+ animation-timing-function: var(--motion-spring-effects-default-easing);
663
+ }
664
+ .nx-drawer-overlay[data-vaul-overlay][data-state='closed'] {
665
+ animation-duration: var(--motion-spring-effects-fast-duration);
666
+ animation-timing-function: var(--motion-spring-effects-fast-easing);
667
+ }
668
+ /* Reduced motion: the panel fades instead of sliding. */
669
+ @media (prefers-reduced-motion: reduce) {
670
+ .nx-drawer[data-vaul-drawer][data-vaul-snap-points='false'][data-state='open'] { animation-name: fadeIn; }
671
+ .nx-drawer[data-vaul-drawer][data-vaul-snap-points='false'][data-state='closed'] { animation-name: fadeOut; }
672
+ }