@nsaa/core 0.1.0-alpha.1 → 0.1.0-alpha.2
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/dist/accordion/accordion.d.ts +7 -0
- package/dist/accordion/accordion.js +54 -0
- package/dist/accordion/index.d.ts +3 -0
- package/dist/alert/alert.d.ts +18 -0
- package/dist/alert/alert.js +53 -0
- package/dist/alert/index.d.ts +3 -0
- package/dist/alert-dialog/alert-dialog.d.ts +19 -0
- package/dist/alert-dialog/alert-dialog.js +100 -0
- package/dist/alert-dialog/index.d.ts +3 -0
- package/dist/avatar/avatar.d.ts +12 -0
- package/dist/avatar/avatar.js +50 -0
- package/dist/avatar/index.d.ts +3 -0
- package/dist/badge/badge.d.ts +8 -0
- package/dist/badge/badge.js +29 -0
- package/dist/badge/index.d.ts +3 -0
- package/dist/button/button.d.ts +25 -0
- package/dist/button/button.js +136 -0
- package/dist/button/index.d.ts +3 -0
- package/dist/calendar/calendar.d.ts +11 -0
- package/dist/calendar/calendar.js +131 -0
- package/dist/calendar/index.d.ts +3 -0
- package/dist/card/card.d.ts +12 -0
- package/dist/card/card.js +55 -0
- package/dist/card/index.d.ts +3 -0
- package/dist/checkbox/checkbox.d.ts +4 -0
- package/dist/checkbox/checkbox.js +35 -0
- package/dist/checkbox/index.d.ts +3 -0
- package/dist/collapsible/collapsible.d.ts +6 -0
- package/dist/collapsible/collapsible.js +24 -0
- package/dist/collapsible/index.d.ts +3 -0
- package/dist/combobox/combobox.d.ts +27 -0
- package/dist/combobox/combobox.js +226 -0
- package/dist/combobox/index.d.ts +3 -0
- package/dist/command/command.d.ts +20 -0
- package/dist/command/command.js +116 -0
- package/dist/command/index.d.ts +3 -0
- package/dist/context-menu/context-menu.d.ts +30 -0
- package/dist/context-menu/context-menu.js +173 -0
- package/dist/context-menu/index.d.ts +3 -0
- package/dist/dialog/dialog.d.ts +18 -0
- package/dist/dialog/dialog.js +106 -0
- package/dist/dialog/index.d.ts +3 -0
- package/dist/direction.d.ts +3 -0
- package/dist/direction.js +2 -0
- package/dist/drawer/drawer.d.ts +17 -0
- package/dist/drawer/drawer.js +136 -0
- package/dist/drawer/index.d.ts +3 -0
- package/dist/dropdown-menu/dropdown-menu.d.ts +30 -0
- package/dist/dropdown-menu/dropdown-menu.js +177 -0
- package/dist/dropdown-menu/index.d.ts +3 -0
- package/dist/empty/empty.d.ts +35 -0
- package/dist/empty/empty.js +93 -0
- package/dist/empty/index.d.ts +3 -0
- package/dist/field/field.d.ts +26 -0
- package/dist/field/field.js +109 -0
- package/dist/field/index.d.ts +3 -0
- package/dist/index.d.ts +89 -674
- package/dist/index.js +48 -3876
- package/dist/input/index.d.ts +3 -0
- package/dist/input/input.d.ts +4 -0
- package/dist/input/input.js +14 -0
- package/dist/input-group/index.d.ts +3 -0
- package/dist/input-group/input-group.d.ts +19 -0
- package/dist/input-group/input-group.js +78 -0
- package/dist/input-otp/index.d.ts +3 -0
- package/dist/input-otp/input-otp.d.ts +12 -0
- package/dist/input-otp/input-otp.js +73 -0
- package/dist/kbd/index.d.ts +3 -0
- package/dist/kbd/kbd.d.ts +5 -0
- package/dist/kbd/kbd.js +19 -0
- package/dist/label/index.d.ts +3 -0
- package/dist/label/label.d.ts +4 -0
- package/dist/label/label.js +13 -0
- package/dist/legacy/icon-button/icon-swap.js +58 -0
- package/dist/lib/cn.d.ts +3 -0
- package/dist/{cn-DxFBFdwT.js → lib/cn.js} +1 -1
- package/dist/lib/control-defaults.js +8 -0
- package/dist/lib/icon-swap.d.ts +15 -0
- package/dist/lib/icon-swap.js +26 -0
- package/dist/lib/input-modality.js +39 -0
- package/dist/lib/merge-refs.js +21 -0
- package/dist/lib/shortcut.js +50 -0
- package/dist/lib/track-input-modality.d.ts +2 -0
- package/dist/lib/track-input-modality.js +4 -0
- package/dist/lib/tv.js +7 -0
- package/dist/lib/use-press.js +48 -0
- package/dist/lib/user-action.js +13 -0
- package/dist/loaders/arc.d.ts +6 -0
- package/dist/loaders/arc.js +31 -0
- package/dist/loaders/atom.d.ts +5 -0
- package/dist/loaders/atom.js +70 -0
- package/dist/loaders/blocks.d.ts +8 -0
- package/dist/loaders/blocks.js +74 -0
- package/dist/loaders/bouncing-dots.d.ts +3 -0
- package/dist/loaders/bouncing-dots.js +45 -0
- package/dist/loaders/cap.d.ts +6 -0
- package/dist/loaders/cap.js +7 -0
- package/dist/loaders/cascade.d.ts +5 -0
- package/dist/loaders/cascade.js +50 -0
- package/dist/loaders/circular-dots.d.ts +3 -0
- package/dist/loaders/circular-dots.js +40 -0
- package/dist/loaders/classic-v2.d.ts +3 -0
- package/dist/loaders/classic-v2.js +41 -0
- package/dist/loaders/classic.d.ts +3 -0
- package/dist/loaders/classic.js +48 -0
- package/dist/loaders/clock.d.ts +5 -0
- package/dist/loaders/clock.js +31 -0
- package/dist/loaders/comet.d.ts +5 -0
- package/dist/loaders/comet.js +52 -0
- package/dist/loaders/compass.d.ts +3 -0
- package/dist/loaders/compass.js +39 -0
- package/dist/loaders/dual.d.ts +6 -0
- package/dist/loaders/dual.js +47 -0
- package/dist/loaders/easing.d.ts +6 -0
- package/dist/loaders/easing.js +34 -0
- package/dist/loaders/eclipse.d.ts +3 -0
- package/dist/loaders/eclipse.js +69 -0
- package/dist/loaders/fade.js +28 -0
- package/dist/loaders/flip.d.ts +3 -0
- package/dist/loaders/flip.js +41 -0
- package/dist/{frame-CK9IBOZB.js → loaders/frame.js} +2 -50
- package/dist/loaders/gather.d.ts +3 -0
- package/dist/loaders/gather.js +85 -0
- package/dist/loaders/leap.d.ts +3 -0
- package/dist/loaders/leap.js +67 -0
- package/dist/loaders/linear-dots.d.ts +3 -0
- package/dist/loaders/linear-dots.js +54 -0
- package/dist/loaders/loading.d.ts +3 -0
- package/dist/loaders/loading.js +64 -0
- package/dist/loaders/morph.d.ts +3 -0
- package/dist/loaders/morph.js +40 -0
- package/dist/loaders/motion.d.ts +35 -0
- package/dist/loaders/motion.js +51 -0
- package/dist/loaders/orbit.d.ts +5 -0
- package/dist/loaders/orbit.js +44 -0
- package/dist/loaders/pulse.d.ts +3 -0
- package/dist/loaders/pulse.js +52 -0
- package/dist/loaders/radar.d.ts +5 -0
- package/dist/loaders/radar.js +64 -0
- package/dist/loaders/ring.d.ts +6 -0
- package/dist/loaders/ring.js +38 -0
- package/dist/loaders/ripple.d.ts +8 -0
- package/dist/loaders/ripple.js +57 -0
- package/dist/loaders/slide.d.ts +3 -0
- package/dist/loaders/slide.js +74 -0
- package/dist/loaders/snake.d.ts +6 -0
- package/dist/loaders/snake.js +59 -0
- package/dist/loaders/spinners.d.ts +61 -0
- package/dist/loaders/spinners.js +63 -0
- package/dist/loaders/swirl.d.ts +3 -0
- package/dist/loaders/swirl.js +50 -0
- package/dist/loaders/text/shared.js +25 -0
- package/dist/loaders/text/text-loaders.d.ts +48 -0
- package/dist/loaders/text/text-loaders.js +723 -0
- package/dist/loaders/trace.d.ts +6 -0
- package/dist/loaders/trace.js +46 -0
- package/dist/loaders/types.d.ts +10 -0
- package/dist/loaders/wave.d.ts +8 -0
- package/dist/loaders/wave.js +59 -0
- package/dist/loaders-text.d.ts +2 -47
- package/dist/loaders-text.js +1 -743
- package/dist/loaders.d.ts +36 -132
- package/dist/loaders.js +35 -1096
- package/dist/native-select/index.d.ts +3 -0
- package/dist/native-select/native-select.d.ts +9 -0
- package/dist/native-select/native-select.js +44 -0
- package/dist/pagination/index.d.ts +3 -0
- package/dist/pagination/pagination.d.ts +18 -0
- package/dist/pagination/pagination.js +134 -0
- package/dist/popover/index.d.ts +3 -0
- package/dist/popover/popover.d.ts +10 -0
- package/dist/popover/popover.js +54 -0
- package/dist/radio-group/index.d.ts +3 -0
- package/dist/radio-group/radio-group.d.ts +6 -0
- package/dist/radio-group/radio-group.js +33 -0
- package/dist/select/index.d.ts +3 -0
- package/dist/select/select.d.ts +16 -0
- package/dist/select/select.js +148 -0
- package/dist/separator/index.d.ts +3 -0
- package/dist/separator/separator.d.ts +4 -0
- package/dist/separator/separator.js +15 -0
- package/dist/skeleton/index.d.ts +3 -0
- package/dist/skeleton/skeleton.d.ts +10 -0
- package/dist/skeleton/skeleton.js +24 -0
- package/dist/slider/index.d.ts +3 -0
- package/dist/slider/slider.d.ts +4 -0
- package/dist/slider/slider.js +39 -0
- package/dist/sound/sound-map.d.ts +70 -0
- package/dist/sound/sound-map.js +72 -0
- package/dist/sound/sound.d.ts +38 -0
- package/dist/sound/sound.js +136 -0
- package/dist/sound/uisfx.d.ts +37 -0
- package/dist/sound/uisfx.js +59 -0
- package/dist/sound-uisfx.d.ts +2 -37
- package/dist/sound-uisfx.js +1 -58
- package/dist/spinner/index.d.ts +5 -0
- package/dist/spinner/loader-provider.d.ts +16 -0
- package/dist/spinner/loader-provider.js +28 -0
- package/dist/spinner/registry.d.ts +9 -0
- package/dist/spinner/registry.js +15 -0
- package/dist/spinner/spinner.d.ts +26 -0
- package/dist/spinner/spinner.js +143 -0
- package/dist/switch/index.d.ts +3 -0
- package/dist/switch/switch.d.ts +6 -0
- package/dist/switch/switch.js +25 -0
- package/dist/table/index.d.ts +3 -0
- package/dist/table/table.d.ts +17 -0
- package/dist/table/table.js +66 -0
- package/dist/tabs/index.d.ts +3 -0
- package/dist/tabs/tabs.d.ts +11 -0
- package/dist/tabs/tabs.js +46 -0
- package/dist/textarea/index.d.ts +3 -0
- package/dist/textarea/textarea.d.ts +4 -0
- package/dist/textarea/textarea.js +12 -0
- package/dist/toast/index.d.ts +3 -0
- package/dist/toast/toast.d.ts +17 -0
- package/dist/toast/toast.js +211 -0
- package/dist/toggle-group/index.d.ts +3 -0
- package/dist/toggle-group/toggle-group.d.ts +64 -0
- package/dist/toggle-group/toggle-group.js +95 -0
- package/dist/tokens/dist/motion.d.ts +24 -0
- package/dist/{motion-NQq2BA78.js → tokens/dist/motion.js} +1 -1
- package/dist/toolbar/index.d.ts +3 -0
- package/dist/toolbar/overflow.d.ts +4 -0
- package/dist/toolbar/overflow.js +242 -0
- package/dist/toolbar/toolbar-item.d.ts +29 -0
- package/dist/toolbar/toolbar-item.js +71 -0
- package/dist/toolbar/toolbar.d.ts +73 -0
- package/dist/toolbar/toolbar.js +250 -0
- package/dist/tooltip/index.d.ts +3 -0
- package/dist/tooltip/tooltip.d.ts +7 -0
- package/dist/tooltip/tooltip.js +41 -0
- package/package.json +4 -3
- package/dist/registry-2PyPW9Xw.js +0 -390
- package/dist/registry-DjfWNw3R.d.ts +0 -18
- package/dist/sound-DiYNAnR_.d.ts +0 -61
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { STEP_VAR, animation, stagger } from "./motion.js";
|
|
3
|
+
import { SpinnerStyle, reducedMotion, spinnerRoot, step } from "./frame.js";
|
|
4
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
5
|
+
// src/loaders/eclipse.tsx
|
|
6
|
+
const DOTS = [0, 1];
|
|
7
|
+
const css = `
|
|
8
|
+
.nsaa-loader-eclipse {
|
|
9
|
+
position: relative;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
.nsaa-loader-eclipse-dot {
|
|
13
|
+
position: absolute;
|
|
14
|
+
top: 30%;
|
|
15
|
+
left: 30%;
|
|
16
|
+
width: 40%;
|
|
17
|
+
height: 40%;
|
|
18
|
+
background: currentColor;
|
|
19
|
+
border-radius: 50%;
|
|
20
|
+
${animation("eclipse", ["nsaa-loader-eclipse-slide", "nsaa-loader-eclipse-depth"], "ease-in-out")}
|
|
21
|
+
animation-delay: ${stagger("eclipse", DOTS.length)};
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
@keyframes nsaa-loader-eclipse-slide {
|
|
25
|
+
0%,
|
|
26
|
+
100% {
|
|
27
|
+
translate: 75% 0;
|
|
28
|
+
}
|
|
29
|
+
50% {
|
|
30
|
+
translate: -75% 0;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
@keyframes nsaa-loader-eclipse-depth {
|
|
35
|
+
0%,
|
|
36
|
+
50%,
|
|
37
|
+
100% {
|
|
38
|
+
opacity: 0.75;
|
|
39
|
+
scale: 1;
|
|
40
|
+
}
|
|
41
|
+
25% {
|
|
42
|
+
opacity: 1;
|
|
43
|
+
scale: 1.3;
|
|
44
|
+
}
|
|
45
|
+
75% {
|
|
46
|
+
opacity: 0.5;
|
|
47
|
+
scale: 0.7;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
${reducedMotion(`
|
|
52
|
+
.nsaa-loader-eclipse-dot {
|
|
53
|
+
translate: calc(var(${STEP_VAR}) * 150% - 75%) 0;
|
|
54
|
+
}
|
|
55
|
+
`)}
|
|
56
|
+
`;
|
|
57
|
+
function Eclipse(props) {
|
|
58
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(SpinnerStyle, {
|
|
59
|
+
name: "eclipse",
|
|
60
|
+
children: css
|
|
61
|
+
}), /* @__PURE__ */ jsx("div", {
|
|
62
|
+
...spinnerRoot("eclipse", props),
|
|
63
|
+
children: DOTS.map((index) => /* @__PURE__ */ jsx("div", {
|
|
64
|
+
className: "nsaa-loader-eclipse-dot",
|
|
65
|
+
style: step(index)
|
|
66
|
+
}, index))
|
|
67
|
+
})] });
|
|
68
|
+
}
|
|
69
|
+
export { Eclipse };
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { animation, stagger } from "./motion.js";
|
|
3
|
+
import { reducedMotion } from "./frame.js";
|
|
4
|
+
// src/loaders/fade.ts
|
|
5
|
+
function fadeCss(name, element, count, { dim, rest }) {
|
|
6
|
+
return `
|
|
7
|
+
.nsaa-loader-${name}-${element} {
|
|
8
|
+
${animation(name, `nsaa-loader-${name}-fade`, "linear")}
|
|
9
|
+
animation-delay: ${stagger(name, count)};
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
@keyframes nsaa-loader-${name}-fade {
|
|
13
|
+
from {
|
|
14
|
+
opacity: 1;
|
|
15
|
+
}
|
|
16
|
+
to {
|
|
17
|
+
opacity: ${dim};
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
${reducedMotion(`
|
|
22
|
+
.nsaa-loader-${name}-${element} {
|
|
23
|
+
opacity: ${rest};
|
|
24
|
+
}
|
|
25
|
+
`)}
|
|
26
|
+
`;
|
|
27
|
+
}
|
|
28
|
+
export { fadeCss };
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { SIZE, animation } from "./motion.js";
|
|
3
|
+
import { SpinnerStyle, spinnerRoot } from "./frame.js";
|
|
4
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
5
|
+
// src/loaders/flip.tsx
|
|
6
|
+
const css = `
|
|
7
|
+
.nsaa-loader-flip {
|
|
8
|
+
perspective: calc(${SIZE} * 3);
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
.nsaa-loader-flip-face {
|
|
12
|
+
width: 64%;
|
|
13
|
+
height: 64%;
|
|
14
|
+
margin: 18%;
|
|
15
|
+
background: currentColor;
|
|
16
|
+
border-radius: calc(${SIZE} * 0.06);
|
|
17
|
+
${animation("flip", "nsaa-loader-flip-turn", "ease-in-out")}
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
@keyframes nsaa-loader-flip-turn {
|
|
21
|
+
0% {
|
|
22
|
+
transform: rotateX(0) rotateY(0);
|
|
23
|
+
}
|
|
24
|
+
50% {
|
|
25
|
+
transform: rotateX(-180deg) rotateY(0);
|
|
26
|
+
}
|
|
27
|
+
100% {
|
|
28
|
+
transform: rotateX(-180deg) rotateY(-180deg);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
`;
|
|
32
|
+
function Flip(props) {
|
|
33
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(SpinnerStyle, {
|
|
34
|
+
name: "flip",
|
|
35
|
+
children: css
|
|
36
|
+
}), /* @__PURE__ */ jsx("div", {
|
|
37
|
+
...spinnerRoot("flip", props),
|
|
38
|
+
children: /* @__PURE__ */ jsx("div", { className: "nsaa-loader-flip-face" })
|
|
39
|
+
})] });
|
|
40
|
+
}
|
|
41
|
+
export { Flip };
|
|
@@ -1,54 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import {
|
|
2
|
+
import { DURATION_VAR, PLAY_STATE_VAR, SIZE, SIZE_VAR, STEP_VAR } from "./motion.js";
|
|
3
3
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
4
|
-
// src/loaders/motion.ts
|
|
5
|
-
const DURATION_VAR = "--nsaa-loader-duration";
|
|
6
|
-
const PLAY_STATE_VAR = "--nsaa-loader-play-state";
|
|
7
|
-
const SIZE_VAR = "--nsaa-loader-size";
|
|
8
|
-
const STEP_VAR = "--nsaa-loader-step";
|
|
9
|
-
const SIZE = `var(${SIZE_VAR}, var(--nsaa-loader-size-md))`;
|
|
10
|
-
const SPINNER_MOTION = {
|
|
11
|
-
arc: loader.duration.arc,
|
|
12
|
-
atom: loader.duration.atom,
|
|
13
|
-
blocks: loader.duration.blocks,
|
|
14
|
-
"bouncing-dots": loader.duration["bouncing-dots"],
|
|
15
|
-
cascade: loader.duration.cascade,
|
|
16
|
-
"circular-dots": loader.duration["circular-dots"],
|
|
17
|
-
classic: loader.duration.classic,
|
|
18
|
-
"classic-v2": loader.duration["classic-v2"],
|
|
19
|
-
clock: loader.duration.clock,
|
|
20
|
-
comet: loader.duration.comet,
|
|
21
|
-
compass: loader.duration.compass,
|
|
22
|
-
dual: loader.duration.dual,
|
|
23
|
-
eclipse: loader.duration.eclipse,
|
|
24
|
-
flip: loader.duration.flip,
|
|
25
|
-
gather: loader.duration.gather,
|
|
26
|
-
leap: loader.duration.leap,
|
|
27
|
-
"linear-dots": loader.duration["linear-dots"],
|
|
28
|
-
loading: loader.duration.loading,
|
|
29
|
-
morph: loader.duration.morph,
|
|
30
|
-
orbit: loader.duration.orbit,
|
|
31
|
-
pulse: loader.duration.pulse,
|
|
32
|
-
radar: loader.duration.radar,
|
|
33
|
-
ring: loader.duration.ring,
|
|
34
|
-
ripple: loader.duration.ripple,
|
|
35
|
-
slide: loader.duration.slide,
|
|
36
|
-
snake: loader.duration.snake,
|
|
37
|
-
swirl: loader.duration.swirl,
|
|
38
|
-
trace: loader.duration.trace,
|
|
39
|
-
wave: loader.duration.wave
|
|
40
|
-
};
|
|
41
|
-
function duration(name) {
|
|
42
|
-
return `var(${DURATION_VAR}, var(--nsaa-loader-duration-${name}))`;
|
|
43
|
-
}
|
|
44
|
-
function stagger(name, count) {
|
|
45
|
-
return `calc(${duration(name)} * (var(${STEP_VAR}) - ${count}) / ${count})`;
|
|
46
|
-
}
|
|
47
|
-
const PLAY_STATE = `var(${PLAY_STATE_VAR}, running)`;
|
|
48
|
-
function animation(name, keyframes, timing) {
|
|
49
|
-
return `animation: ${[keyframes].flat().map((frames) => `${frames} ${duration(name)} ${timing} infinite`).join(", ")};
|
|
50
|
-
animation-play-state: ${PLAY_STATE};`;
|
|
51
|
-
}
|
|
52
4
|
// src/loaders/frame.tsx
|
|
53
5
|
/**
|
|
54
6
|
* Nsaa: a loader's reduced-motion rules apply under the OS setting (unless the app forces full
|
|
@@ -112,4 +64,4 @@ function spinnerRoot(name, { className, color, duration, playState, size }) {
|
|
|
112
64
|
})
|
|
113
65
|
};
|
|
114
66
|
}
|
|
115
|
-
export {
|
|
67
|
+
export { PauseStyle, SpinnerStyle, cssVars, reducedMotion, spinnerRoot, step };
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { SIZE, animation } from "./motion.js";
|
|
3
|
+
import { SpinnerStyle, cssVars, spinnerRoot } from "./frame.js";
|
|
4
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
5
|
+
// src/loaders/gather.tsx
|
|
6
|
+
const BLOCKS = [
|
|
7
|
+
{
|
|
8
|
+
x: 1,
|
|
9
|
+
y: 1
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
x: -1,
|
|
13
|
+
y: 1
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
x: 1,
|
|
17
|
+
y: -1
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
x: -1,
|
|
21
|
+
y: -1
|
|
22
|
+
}
|
|
23
|
+
];
|
|
24
|
+
const GAP = 24;
|
|
25
|
+
const PULL = `${(8 / 38 * 100).toFixed(1)}%`;
|
|
26
|
+
const css = `
|
|
27
|
+
.nsaa-loader-gather-group {
|
|
28
|
+
display: grid;
|
|
29
|
+
grid-template-columns: 1fr 1fr;
|
|
30
|
+
gap: ${GAP}%;
|
|
31
|
+
width: 100%;
|
|
32
|
+
height: 100%;
|
|
33
|
+
${animation("gather", "nsaa-loader-gather-turn", "ease-in-out")}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
.nsaa-loader-gather-block {
|
|
37
|
+
background: currentColor;
|
|
38
|
+
border-radius: calc(${SIZE} * 0.14);
|
|
39
|
+
${animation("gather", "nsaa-loader-gather-pull", "ease-in-out")}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
@keyframes nsaa-loader-gather-pull {
|
|
43
|
+
0%,
|
|
44
|
+
100% {
|
|
45
|
+
transform: translate(0, 0);
|
|
46
|
+
}
|
|
47
|
+
30%,
|
|
48
|
+
60% {
|
|
49
|
+
transform: translate(
|
|
50
|
+
calc(var(--nsaa-loader-gather-x) * ${PULL}),
|
|
51
|
+
calc(var(--nsaa-loader-gather-y) * ${PULL})
|
|
52
|
+
);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
@keyframes nsaa-loader-gather-turn {
|
|
57
|
+
0%,
|
|
58
|
+
30% {
|
|
59
|
+
transform: rotate(0);
|
|
60
|
+
}
|
|
61
|
+
60%,
|
|
62
|
+
100% {
|
|
63
|
+
transform: rotate(90deg);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
`;
|
|
67
|
+
function Gather(props) {
|
|
68
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(SpinnerStyle, {
|
|
69
|
+
name: "gather",
|
|
70
|
+
children: css
|
|
71
|
+
}), /* @__PURE__ */ jsx("div", {
|
|
72
|
+
...spinnerRoot("gather", props),
|
|
73
|
+
children: /* @__PURE__ */ jsx("div", {
|
|
74
|
+
className: "nsaa-loader-gather-group",
|
|
75
|
+
children: BLOCKS.map(({ x, y }) => /* @__PURE__ */ jsx("div", {
|
|
76
|
+
className: "nsaa-loader-gather-block",
|
|
77
|
+
style: cssVars({
|
|
78
|
+
"--nsaa-loader-gather-x": x,
|
|
79
|
+
"--nsaa-loader-gather-y": y
|
|
80
|
+
})
|
|
81
|
+
}, `${x}${y}`))
|
|
82
|
+
})
|
|
83
|
+
})] });
|
|
84
|
+
}
|
|
85
|
+
export { Gather };
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { SIZE, STEP_VAR, animation, stagger } from "./motion.js";
|
|
3
|
+
import { SpinnerStyle, reducedMotion, spinnerRoot, step } from "./frame.js";
|
|
4
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
5
|
+
import { createElement } from "react";
|
|
6
|
+
// src/loaders/leap.tsx
|
|
7
|
+
const DOTS = Array.from({ length: 3 }, (_, index) => index);
|
|
8
|
+
const css = `
|
|
9
|
+
.nsaa-loader-leap {
|
|
10
|
+
--nsaa-loader-leap-dot: round(calc(${SIZE} * 0.22), 1px);
|
|
11
|
+
--nsaa-loader-leap-gap: round(down, calc((${SIZE} - var(--nsaa-loader-leap-dot)) / 2), 1px);
|
|
12
|
+
position: relative;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
.nsaa-loader-leap-wrapper {
|
|
16
|
+
position: absolute;
|
|
17
|
+
top: round(calc((${SIZE} - var(--nsaa-loader-leap-dot)) / 2), 1px);
|
|
18
|
+
left: calc(${SIZE} - var(--nsaa-loader-leap-dot) - var(--nsaa-loader-leap-gap) * 2);
|
|
19
|
+
width: calc(var(--nsaa-loader-leap-gap) * 2 + var(--nsaa-loader-leap-dot));
|
|
20
|
+
height: var(--nsaa-loader-leap-dot);
|
|
21
|
+
${animation("leap", "nsaa-loader-leap-hop", "ease-in-out")}
|
|
22
|
+
animation-delay: ${stagger("leap", DOTS.length)};
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.nsaa-loader-leap-dot {
|
|
26
|
+
position: absolute;
|
|
27
|
+
inset: 0 auto 0 0;
|
|
28
|
+
width: var(--nsaa-loader-leap-dot);
|
|
29
|
+
background: currentColor;
|
|
30
|
+
border-radius: 50%;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
@keyframes nsaa-loader-leap-hop {
|
|
34
|
+
0% {
|
|
35
|
+
transform: translateX(0) rotate(0);
|
|
36
|
+
}
|
|
37
|
+
33.33% {
|
|
38
|
+
transform: translateX(0) rotate(180deg);
|
|
39
|
+
}
|
|
40
|
+
66.66% {
|
|
41
|
+
transform: translateX(calc(var(--nsaa-loader-leap-gap) * -1)) rotate(180deg);
|
|
42
|
+
}
|
|
43
|
+
100% {
|
|
44
|
+
transform: translateX(calc(var(--nsaa-loader-leap-gap) * -2)) rotate(180deg);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
${reducedMotion(`
|
|
49
|
+
.nsaa-loader-leap-wrapper {
|
|
50
|
+
transform: translateX(calc(var(${STEP_VAR}) * var(--nsaa-loader-leap-gap)));
|
|
51
|
+
}
|
|
52
|
+
`)}
|
|
53
|
+
`;
|
|
54
|
+
function Leap(props) {
|
|
55
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(SpinnerStyle, {
|
|
56
|
+
name: "leap",
|
|
57
|
+
children: css
|
|
58
|
+
}), /* @__PURE__ */ createElement("div", {
|
|
59
|
+
...spinnerRoot("leap", props),
|
|
60
|
+
key: props.size
|
|
61
|
+
}, DOTS.map((index) => /* @__PURE__ */ jsx("div", {
|
|
62
|
+
className: "nsaa-loader-leap-wrapper",
|
|
63
|
+
style: step(index),
|
|
64
|
+
children: /* @__PURE__ */ jsx("div", { className: "nsaa-loader-leap-dot" })
|
|
65
|
+
}, index)))] });
|
|
66
|
+
}
|
|
67
|
+
export { Leap };
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { SIZE, animation, stagger } from "./motion.js";
|
|
3
|
+
import { SpinnerStyle, reducedMotion, spinnerRoot, step } from "./frame.js";
|
|
4
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
5
|
+
// src/loaders/linear-dots.tsx
|
|
6
|
+
const DOTS = Array.from({ length: 3 }, (_, index) => index);
|
|
7
|
+
const css = `
|
|
8
|
+
.nsaa-loader-linear-dots {
|
|
9
|
+
display: flex;
|
|
10
|
+
align-items: center;
|
|
11
|
+
gap: calc(${SIZE} * 0.1875);
|
|
12
|
+
width: auto;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
.nsaa-loader-linear-dots-dot {
|
|
16
|
+
width: calc(${SIZE} * 0.1875);
|
|
17
|
+
height: calc(${SIZE} * 0.1875);
|
|
18
|
+
background: currentColor;
|
|
19
|
+
border-radius: 9999px;
|
|
20
|
+
${animation("linear-dots", "nsaa-loader-linear-dots-fade", "linear")}
|
|
21
|
+
animation-delay: ${stagger("linear-dots", DOTS.length)};
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
@keyframes nsaa-loader-linear-dots-fade {
|
|
25
|
+
0% {
|
|
26
|
+
opacity: 1;
|
|
27
|
+
}
|
|
28
|
+
66.67% {
|
|
29
|
+
opacity: 0.5;
|
|
30
|
+
}
|
|
31
|
+
100% {
|
|
32
|
+
opacity: 1;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
${reducedMotion(`
|
|
37
|
+
.nsaa-loader-linear-dots-dot {
|
|
38
|
+
opacity: 0.75;
|
|
39
|
+
}
|
|
40
|
+
`)}
|
|
41
|
+
`;
|
|
42
|
+
function LinearDots(props) {
|
|
43
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(SpinnerStyle, {
|
|
44
|
+
name: "linear-dots",
|
|
45
|
+
children: css
|
|
46
|
+
}), /* @__PURE__ */ jsx("div", {
|
|
47
|
+
...spinnerRoot("linear-dots", props),
|
|
48
|
+
children: DOTS.map((dot) => /* @__PURE__ */ jsx("div", {
|
|
49
|
+
className: "nsaa-loader-linear-dots-dot",
|
|
50
|
+
style: step(dot)
|
|
51
|
+
}, dot))
|
|
52
|
+
})] });
|
|
53
|
+
}
|
|
54
|
+
export { LinearDots };
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { SpinnerStyle, spinnerRoot, step } from "./frame.js";
|
|
3
|
+
import { fadeCss } from "./fade.js";
|
|
4
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
5
|
+
// src/loaders/loading.tsx
|
|
6
|
+
const BLOCK = "M0 0h1v1H0zM2 0h1v1H2zM0 2h1v1H0zM2 2h1v1H2z";
|
|
7
|
+
const SEGMENTS = [
|
|
8
|
+
{
|
|
9
|
+
x: 12,
|
|
10
|
+
y: 6
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
x: 10,
|
|
14
|
+
y: 10
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
x: 6,
|
|
18
|
+
y: 12
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
x: 2,
|
|
22
|
+
y: 10
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
x: 0,
|
|
26
|
+
y: 6
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
x: 2,
|
|
30
|
+
y: 2
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
x: 6,
|
|
34
|
+
y: 0
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
x: 10,
|
|
38
|
+
y: 2
|
|
39
|
+
}
|
|
40
|
+
];
|
|
41
|
+
const css = `
|
|
42
|
+
${fadeCss("loading", "segment", SEGMENTS.length, {
|
|
43
|
+
dim: .2,
|
|
44
|
+
rest: .6
|
|
45
|
+
})}
|
|
46
|
+
`;
|
|
47
|
+
function Loading(props) {
|
|
48
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(SpinnerStyle, {
|
|
49
|
+
name: "loading",
|
|
50
|
+
children: css
|
|
51
|
+
}), /* @__PURE__ */ jsx("svg", {
|
|
52
|
+
...spinnerRoot("loading", props),
|
|
53
|
+
fill: "currentColor",
|
|
54
|
+
role: "presentation",
|
|
55
|
+
viewBox: "0 0 15 15",
|
|
56
|
+
children: SEGMENTS.map(({ x, y }, segment) => /* @__PURE__ */ jsx("path", {
|
|
57
|
+
className: "nsaa-loader-loading-segment",
|
|
58
|
+
d: BLOCK,
|
|
59
|
+
style: step(segment),
|
|
60
|
+
transform: `translate(${x} ${y})`
|
|
61
|
+
}, `${x}-${y}`))
|
|
62
|
+
})] });
|
|
63
|
+
}
|
|
64
|
+
export { Loading };
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { SIZE, animation } from "./motion.js";
|
|
3
|
+
import { SpinnerStyle, spinnerRoot } from "./frame.js";
|
|
4
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
5
|
+
// src/loaders/morph.tsx
|
|
6
|
+
const css = `
|
|
7
|
+
.nsaa-loader-morph-shape {
|
|
8
|
+
width: 64%;
|
|
9
|
+
height: 64%;
|
|
10
|
+
margin: 18%;
|
|
11
|
+
background: currentColor;
|
|
12
|
+
border-radius: calc(${SIZE} * 0.08);
|
|
13
|
+
${animation("morph", "nsaa-loader-morph-round", "ease-in-out")}
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
@keyframes nsaa-loader-morph-round {
|
|
17
|
+
0% {
|
|
18
|
+
border-radius: calc(${SIZE} * 0.08);
|
|
19
|
+
transform: rotate(0);
|
|
20
|
+
}
|
|
21
|
+
50% {
|
|
22
|
+
border-radius: 50%;
|
|
23
|
+
transform: rotate(45deg);
|
|
24
|
+
}
|
|
25
|
+
100% {
|
|
26
|
+
border-radius: calc(${SIZE} * 0.08);
|
|
27
|
+
transform: rotate(90deg);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
`;
|
|
31
|
+
function Morph(props) {
|
|
32
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(SpinnerStyle, {
|
|
33
|
+
name: "morph",
|
|
34
|
+
children: css
|
|
35
|
+
}), /* @__PURE__ */ jsx("div", {
|
|
36
|
+
...spinnerRoot("morph", props),
|
|
37
|
+
children: /* @__PURE__ */ jsx("div", { className: "nsaa-loader-morph-shape" })
|
|
38
|
+
})] });
|
|
39
|
+
}
|
|
40
|
+
export { Morph };
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
|
|
2
|
+
export declare const DURATION_VAR = "--nsaa-loader-duration";
|
|
3
|
+
export declare const PLAY_STATE_VAR = "--nsaa-loader-play-state";
|
|
4
|
+
export declare const SPINNER_MOTION: {
|
|
5
|
+
readonly arc: 800;
|
|
6
|
+
readonly atom: 1000;
|
|
7
|
+
readonly blocks: 1300;
|
|
8
|
+
readonly "bouncing-dots": 500;
|
|
9
|
+
readonly cascade: 1500;
|
|
10
|
+
readonly "circular-dots": 800;
|
|
11
|
+
readonly classic: 1200;
|
|
12
|
+
readonly "classic-v2": 800;
|
|
13
|
+
readonly clock: 1200;
|
|
14
|
+
readonly comet: 700;
|
|
15
|
+
readonly compass: 500;
|
|
16
|
+
readonly dual: 1000;
|
|
17
|
+
readonly eclipse: 1200;
|
|
18
|
+
readonly flip: 1200;
|
|
19
|
+
readonly gather: 1600;
|
|
20
|
+
readonly leap: 1800;
|
|
21
|
+
readonly "linear-dots": 900;
|
|
22
|
+
readonly loading: 1000;
|
|
23
|
+
readonly morph: 1200;
|
|
24
|
+
readonly orbit: 750;
|
|
25
|
+
readonly pulse: 1200;
|
|
26
|
+
readonly radar: 1500;
|
|
27
|
+
readonly ring: 800;
|
|
28
|
+
readonly ripple: 1200;
|
|
29
|
+
readonly slide: 2400;
|
|
30
|
+
readonly snake: 1400;
|
|
31
|
+
readonly swirl: 1200;
|
|
32
|
+
readonly trace: 1200;
|
|
33
|
+
readonly wave: 900;
|
|
34
|
+
};
|
|
35
|
+
export type SpinnerName = keyof typeof SPINNER_MOTION;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { loader } from "../tokens/dist/motion.js";
|
|
3
|
+
// src/loaders/motion.ts
|
|
4
|
+
const DURATION_VAR = "--nsaa-loader-duration";
|
|
5
|
+
const PLAY_STATE_VAR = "--nsaa-loader-play-state";
|
|
6
|
+
const SIZE_VAR = "--nsaa-loader-size";
|
|
7
|
+
const STEP_VAR = "--nsaa-loader-step";
|
|
8
|
+
const SIZE = `var(${SIZE_VAR}, var(--nsaa-loader-size-md))`;
|
|
9
|
+
const SPINNER_MOTION = {
|
|
10
|
+
arc: loader.duration.arc,
|
|
11
|
+
atom: loader.duration.atom,
|
|
12
|
+
blocks: loader.duration.blocks,
|
|
13
|
+
"bouncing-dots": loader.duration["bouncing-dots"],
|
|
14
|
+
cascade: loader.duration.cascade,
|
|
15
|
+
"circular-dots": loader.duration["circular-dots"],
|
|
16
|
+
classic: loader.duration.classic,
|
|
17
|
+
"classic-v2": loader.duration["classic-v2"],
|
|
18
|
+
clock: loader.duration.clock,
|
|
19
|
+
comet: loader.duration.comet,
|
|
20
|
+
compass: loader.duration.compass,
|
|
21
|
+
dual: loader.duration.dual,
|
|
22
|
+
eclipse: loader.duration.eclipse,
|
|
23
|
+
flip: loader.duration.flip,
|
|
24
|
+
gather: loader.duration.gather,
|
|
25
|
+
leap: loader.duration.leap,
|
|
26
|
+
"linear-dots": loader.duration["linear-dots"],
|
|
27
|
+
loading: loader.duration.loading,
|
|
28
|
+
morph: loader.duration.morph,
|
|
29
|
+
orbit: loader.duration.orbit,
|
|
30
|
+
pulse: loader.duration.pulse,
|
|
31
|
+
radar: loader.duration.radar,
|
|
32
|
+
ring: loader.duration.ring,
|
|
33
|
+
ripple: loader.duration.ripple,
|
|
34
|
+
slide: loader.duration.slide,
|
|
35
|
+
snake: loader.duration.snake,
|
|
36
|
+
swirl: loader.duration.swirl,
|
|
37
|
+
trace: loader.duration.trace,
|
|
38
|
+
wave: loader.duration.wave
|
|
39
|
+
};
|
|
40
|
+
function duration(name) {
|
|
41
|
+
return `var(${DURATION_VAR}, var(--nsaa-loader-duration-${name}))`;
|
|
42
|
+
}
|
|
43
|
+
function stagger(name, count) {
|
|
44
|
+
return `calc(${duration(name)} * (var(${STEP_VAR}) - ${count}) / ${count})`;
|
|
45
|
+
}
|
|
46
|
+
const PLAY_STATE = `var(${PLAY_STATE_VAR}, running)`;
|
|
47
|
+
function animation(name, keyframes, timing) {
|
|
48
|
+
return `animation: ${[keyframes].flat().map((frames) => `${frames} ${duration(name)} ${timing} infinite`).join(", ")};
|
|
49
|
+
animation-play-state: ${PLAY_STATE};`;
|
|
50
|
+
}
|
|
51
|
+
export { DURATION_VAR, PLAY_STATE, PLAY_STATE_VAR, SIZE, SIZE_VAR, SPINNER_MOTION, STEP_VAR, animation, duration, stagger };
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { SIZE } from "./motion.js";
|
|
3
|
+
import { rotationCss, spinClass } from "./easing.js";
|
|
4
|
+
import { SpinnerStyle, spinnerRoot } from "./frame.js";
|
|
5
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
6
|
+
// src/loaders/orbit.tsx
|
|
7
|
+
const css = `
|
|
8
|
+
.nsaa-loader-orbit {
|
|
9
|
+
--nsaa-loader-orbit-stroke: calc(${SIZE} * 0.0625);
|
|
10
|
+
position: relative;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
.nsaa-loader-orbit-track {
|
|
14
|
+
position: absolute;
|
|
15
|
+
inset: 8%;
|
|
16
|
+
border-radius: 9999px;
|
|
17
|
+
background: conic-gradient(from 180deg, transparent 0deg, currentColor 180deg, transparent 180deg);
|
|
18
|
+
-webkit-mask: radial-gradient(farthest-side, transparent calc(100% - var(--nsaa-loader-orbit-stroke)), #000 0);
|
|
19
|
+
mask: radial-gradient(farthest-side, transparent calc(100% - var(--nsaa-loader-orbit-stroke)), #000 0);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
.nsaa-loader-orbit-dot {
|
|
23
|
+
position: absolute;
|
|
24
|
+
top: 50%;
|
|
25
|
+
left: 50%;
|
|
26
|
+
width: 25%;
|
|
27
|
+
height: 25%;
|
|
28
|
+
background: currentColor;
|
|
29
|
+
border-radius: 9999px;
|
|
30
|
+
transform: translate(-50%, -50%);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
${rotationCss("orbit")}
|
|
34
|
+
`;
|
|
35
|
+
function Orbit({ easing, ...rest }) {
|
|
36
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(SpinnerStyle, {
|
|
37
|
+
name: "orbit",
|
|
38
|
+
children: css
|
|
39
|
+
}), /* @__PURE__ */ jsxs("div", {
|
|
40
|
+
...spinnerRoot("orbit", rest),
|
|
41
|
+
children: [/* @__PURE__ */ jsx("div", { className: "nsaa-loader-orbit-dot" }), /* @__PURE__ */ jsx("div", { className: `nsaa-loader-orbit-track ${spinClass("orbit", easing)}` })]
|
|
42
|
+
})] });
|
|
43
|
+
}
|
|
44
|
+
export { Orbit };
|