@northstar-js/react 0.0.0-stage → 0.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/LICENSE +21 -0
- package/dist/actions.d.ts +99 -0
- package/dist/actions.d.ts.map +1 -0
- package/dist/actions.js +61 -0
- package/dist/actions.js.map +1 -0
- package/dist/backdrops/StarBackdrop.d.ts +31 -0
- package/dist/backdrops/StarBackdrop.d.ts.map +1 -0
- package/dist/backdrops/StarBackdrop.js +84 -0
- package/dist/backdrops/StarBackdrop.js.map +1 -0
- package/dist/backdrops/index.d.ts +7 -0
- package/dist/backdrops/index.d.ts.map +1 -0
- package/dist/backdrops/index.js +8 -0
- package/dist/backdrops/index.js.map +1 -0
- package/dist/backdrops/math.d.ts +39 -0
- package/dist/backdrops/math.d.ts.map +1 -0
- package/dist/backdrops/math.js +44 -0
- package/dist/backdrops/math.js.map +1 -0
- package/dist/backdrops/scenes.d.ts +20 -0
- package/dist/backdrops/scenes.d.ts.map +1 -0
- package/dist/backdrops/scenes.js +417 -0
- package/dist/backdrops/scenes.js.map +1 -0
- package/dist/backdrops.css +141 -0
- package/dist/data.d.ts +91 -0
- package/dist/data.d.ts.map +1 -0
- package/dist/data.js +69 -0
- package/dist/data.js.map +1 -0
- package/dist/effects/actions.d.ts +48 -0
- package/dist/effects/actions.d.ts.map +1 -0
- package/dist/effects/actions.js +80 -0
- package/dist/effects/actions.js.map +1 -0
- package/dist/effects/controls.d.ts +84 -0
- package/dist/effects/controls.d.ts.map +1 -0
- package/dist/effects/controls.js +121 -0
- package/dist/effects/controls.js.map +1 -0
- package/dist/effects/display.d.ts +92 -0
- package/dist/effects/display.d.ts.map +1 -0
- package/dist/effects/display.js +138 -0
- package/dist/effects/display.js.map +1 -0
- package/dist/effects/hooks.d.ts +13 -0
- package/dist/effects/hooks.d.ts.map +1 -0
- package/dist/effects/hooks.js +68 -0
- package/dist/effects/hooks.js.map +1 -0
- package/dist/effects/index.d.ts +14 -0
- package/dist/effects/index.d.ts.map +1 -0
- package/dist/effects/index.js +12 -0
- package/dist/effects/index.js.map +1 -0
- package/dist/effects/loaders.d.ts +67 -0
- package/dist/effects/loaders.d.ts.map +1 -0
- package/dist/effects/loaders.js +73 -0
- package/dist/effects/loaders.js.map +1 -0
- package/dist/effects/math.d.ts +23 -0
- package/dist/effects/math.d.ts.map +1 -0
- package/dist/effects/math.js +56 -0
- package/dist/effects/math.js.map +1 -0
- package/dist/effects/navigation.d.ts +55 -0
- package/dist/effects/navigation.d.ts.map +1 -0
- package/dist/effects/navigation.js +103 -0
- package/dist/effects/navigation.js.map +1 -0
- package/dist/effects/overlays.d.ts +34 -0
- package/dist/effects/overlays.d.ts.map +1 -0
- package/dist/effects/overlays.js +56 -0
- package/dist/effects/overlays.js.map +1 -0
- package/dist/effects.css +1659 -0
- package/dist/feedback.d.ts +55 -0
- package/dist/feedback.d.ts.map +1 -0
- package/dist/feedback.js +60 -0
- package/dist/feedback.js.map +1 -0
- package/dist/flow.d.ts +70 -0
- package/dist/flow.d.ts.map +1 -0
- package/dist/flow.js +118 -0
- package/dist/flow.js.map +1 -0
- package/dist/forms.d.ts +130 -0
- package/dist/forms.d.ts.map +1 -0
- package/dist/forms.js +241 -0
- package/dist/forms.js.map +1 -0
- package/dist/glass.d.ts +74 -0
- package/dist/glass.d.ts.map +1 -0
- package/dist/glass.js +139 -0
- package/dist/glass.js.map +1 -0
- package/dist/illustrations/data.d.ts +103 -0
- package/dist/illustrations/data.d.ts.map +1 -0
- package/dist/illustrations/data.js +3 -0
- package/dist/illustrations/data.js.map +1 -0
- package/dist/illustrations/index.d.ts +110 -0
- package/dist/illustrations/index.d.ts.map +1 -0
- package/dist/illustrations/index.js +54 -0
- package/dist/illustrations/index.js.map +1 -0
- package/dist/illustrations/types.d.ts +30 -0
- package/dist/illustrations/types.d.ts.map +1 -0
- package/dist/illustrations/types.js +2 -0
- package/dist/illustrations/types.js.map +1 -0
- package/dist/index.d.ts +27 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -0
- package/dist/internal/expand.d.ts +17 -0
- package/dist/internal/expand.d.ts.map +1 -0
- package/dist/internal/expand.js +23 -0
- package/dist/internal/expand.js.map +1 -0
- package/dist/internal/icons.d.ts +9 -0
- package/dist/internal/icons.d.ts.map +1 -0
- package/dist/internal/icons.js +12 -0
- package/dist/internal/icons.js.map +1 -0
- package/dist/internal/interaction.d.ts +21 -0
- package/dist/internal/interaction.d.ts.map +1 -0
- package/dist/internal/interaction.js +129 -0
- package/dist/internal/interaction.js.map +1 -0
- package/dist/internal/layers.d.ts +12 -0
- package/dist/internal/layers.d.ts.map +1 -0
- package/dist/internal/layers.js +108 -0
- package/dist/internal/layers.js.map +1 -0
- package/dist/internal/util.d.ts +9 -0
- package/dist/internal/util.d.ts.map +1 -0
- package/dist/internal/util.js +33 -0
- package/dist/internal/util.js.map +1 -0
- package/dist/layout.d.ts +34 -0
- package/dist/layout.d.ts.map +1 -0
- package/dist/layout.js +27 -0
- package/dist/layout.js.map +1 -0
- package/dist/motion.d.ts +36 -0
- package/dist/motion.d.ts.map +1 -0
- package/dist/motion.js +80 -0
- package/dist/motion.js.map +1 -0
- package/dist/navigation.d.ts +100 -0
- package/dist/navigation.d.ts.map +1 -0
- package/dist/navigation.js +154 -0
- package/dist/navigation.js.map +1 -0
- package/dist/northstar/BriefForm.d.ts +23 -0
- package/dist/northstar/BriefForm.d.ts.map +1 -0
- package/dist/northstar/BriefForm.js +40 -0
- package/dist/northstar/BriefForm.js.map +1 -0
- package/dist/northstar/ExportMenu.d.ts +16 -0
- package/dist/northstar/ExportMenu.d.ts.map +1 -0
- package/dist/northstar/ExportMenu.js +11 -0
- package/dist/northstar/ExportMenu.js.map +1 -0
- package/dist/northstar/PopulationPanel.d.ts +30 -0
- package/dist/northstar/PopulationPanel.d.ts.map +1 -0
- package/dist/northstar/PopulationPanel.js +18 -0
- package/dist/northstar/PopulationPanel.js.map +1 -0
- package/dist/northstar/ResearchBuilder.d.ts +26 -0
- package/dist/northstar/ResearchBuilder.d.ts.map +1 -0
- package/dist/northstar/ResearchBuilder.js +81 -0
- package/dist/northstar/ResearchBuilder.js.map +1 -0
- package/dist/northstar/ResponsesView.d.ts +20 -0
- package/dist/northstar/ResponsesView.d.ts.map +1 -0
- package/dist/northstar/ResponsesView.js +42 -0
- package/dist/northstar/ResponsesView.js.map +1 -0
- package/dist/northstar/Run.d.ts +37 -0
- package/dist/northstar/Run.d.ts.map +1 -0
- package/dist/northstar/Run.js +32 -0
- package/dist/northstar/Run.js.map +1 -0
- package/dist/northstar/StudyShell.d.ts +50 -0
- package/dist/northstar/StudyShell.d.ts.map +1 -0
- package/dist/northstar/StudyShell.js +18 -0
- package/dist/northstar/StudyShell.js.map +1 -0
- package/dist/northstar/StudyStatus.d.ts +17 -0
- package/dist/northstar/StudyStatus.d.ts.map +1 -0
- package/dist/northstar/StudyStatus.js +26 -0
- package/dist/northstar/StudyStatus.js.map +1 -0
- package/dist/northstar/index.d.ts +10 -0
- package/dist/northstar/index.d.ts.map +1 -0
- package/dist/northstar/index.js +10 -0
- package/dist/northstar/index.js.map +1 -0
- package/dist/northstar/messages.d.ts +84 -0
- package/dist/northstar/messages.d.ts.map +1 -0
- package/dist/northstar/messages.js +107 -0
- package/dist/northstar/messages.js.map +1 -0
- package/dist/overlays.d.ts +136 -0
- package/dist/overlays.d.ts.map +1 -0
- package/dist/overlays.js +447 -0
- package/dist/overlays.js.map +1 -0
- package/dist/provider.d.ts +82 -0
- package/dist/provider.d.ts.map +1 -0
- package/dist/provider.js +128 -0
- package/dist/provider.js.map +1 -0
- package/dist/styles.css +2033 -0
- package/dist/surface.d.ts +58 -0
- package/dist/surface.d.ts.map +1 -0
- package/dist/surface.js +39 -0
- package/dist/surface.js.map +1 -0
- package/package.json +81 -3
- package/README.md +0 -3
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
export interface RollingNumberProps extends Omit<React.HTMLAttributes<HTMLSpanElement>, 'children'> {
|
|
2
|
+
value: number;
|
|
3
|
+
/** BCP 47 locale for formatting. Default "en-US". */
|
|
4
|
+
locale?: string;
|
|
5
|
+
format?: Intl.NumberFormatOptions;
|
|
6
|
+
/** Announce changes politely to screen readers. Default false. */
|
|
7
|
+
live?: boolean;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* An odometer: each digit is a reel of 0–9 that rolls to its figure, the
|
|
11
|
+
* units first and each higher place a beat later. Plex Mono, tabular. The
|
|
12
|
+
* full value is in the text for assistive technology; the reels are hidden.
|
|
13
|
+
*/
|
|
14
|
+
export declare function RollingNumber({ value, locale, format, live, className, ...rest }: RollingNumberProps): import("react/jsx-runtime").JSX.Element;
|
|
15
|
+
export interface CountUpProps extends RollingNumberProps {
|
|
16
|
+
/** Starting figure shown on first paint. Default 0. */
|
|
17
|
+
from?: number;
|
|
18
|
+
}
|
|
19
|
+
/** A RollingNumber that starts at `from` and rolls up to `value` after mount (immediately under reduced motion). */
|
|
20
|
+
export declare function CountUp({ value, from, ...rest }: CountUpProps): import("react/jsx-runtime").JSX.Element;
|
|
21
|
+
export interface HorizonDividerProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
22
|
+
/** Text in the middle of the rule. */
|
|
23
|
+
label?: React.ReactNode;
|
|
24
|
+
/** Draws the rule out from the centre once, on mount. Default true. */
|
|
25
|
+
rise?: boolean;
|
|
26
|
+
}
|
|
27
|
+
/** A hairline with a Glacier glow at its centre, the way the sky brightens at the horizon before sunrise, and a single star above the midpoint. */
|
|
28
|
+
export declare function HorizonDivider({ label, rise, className, ...rest }: HorizonDividerProps): import("react/jsx-runtime").JSX.Element;
|
|
29
|
+
export interface StarfieldEmptyStateProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {
|
|
30
|
+
title: React.ReactNode;
|
|
31
|
+
description?: React.ReactNode;
|
|
32
|
+
action?: React.ReactNode;
|
|
33
|
+
/** Number of background stars. Default 64. */
|
|
34
|
+
stars?: number;
|
|
35
|
+
seed?: number;
|
|
36
|
+
headingLevel?: 2 | 3 | 4;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* An empty state set on a calm field of stars. The stars sit on a golden
|
|
40
|
+
* (Fibonacci) lattice, so they spread evenly without clumping; three depth
|
|
41
|
+
* layers drift on prime-length periods and a few stars twinkle. Seeded, so
|
|
42
|
+
* every render is the same sky. Still under reduced motion.
|
|
43
|
+
*/
|
|
44
|
+
export declare function StarfieldEmptyState({ title, description, action, stars, seed, headingLevel, className, ...rest }: StarfieldEmptyStateProps): import("react/jsx-runtime").JSX.Element;
|
|
45
|
+
export declare function initialsOf(name: string): string;
|
|
46
|
+
export interface OrbitAvatarProps extends Omit<React.HTMLAttributes<HTMLSpanElement>, 'children'> {
|
|
47
|
+
/** Full name; used for initials and the accessible name. */
|
|
48
|
+
name: string;
|
|
49
|
+
size?: 24 | 32 | 40 | 48;
|
|
50
|
+
}
|
|
51
|
+
/** An initials avatar with an orbit ring; on hover or focus of the avatar (or a parent with `.ns-fx-orbit-host`) a moon makes one turn. */
|
|
52
|
+
export declare function OrbitAvatar({ name, size, className, style, ...rest }: OrbitAvatarProps): import("react/jsx-runtime").JSX.Element;
|
|
53
|
+
export interface TagOrbitProps extends Omit<React.HTMLAttributes<HTMLSpanElement>, 'children'> {
|
|
54
|
+
label: string;
|
|
55
|
+
/** Called after the star has faded out (at once under reduced motion). Omit for a tag that cannot be removed. */
|
|
56
|
+
onRemove?: () => void;
|
|
57
|
+
removeLabel?: (label: string) => string;
|
|
58
|
+
}
|
|
59
|
+
/** A tag led by a small star; removing it lets the star fade out and the tag fold away before `onRemove` fires. */
|
|
60
|
+
export declare function TagOrbit({ label, onRemove, removeLabel, className, ...rest }: TagOrbitProps): import("react/jsx-runtime").JSX.Element;
|
|
61
|
+
export interface SineDisclosureProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {
|
|
62
|
+
title: React.ReactNode;
|
|
63
|
+
open?: boolean;
|
|
64
|
+
defaultOpen?: boolean;
|
|
65
|
+
onOpenChange?: (open: boolean) => void;
|
|
66
|
+
headingLevel?: 2 | 3 | 4 | 5;
|
|
67
|
+
disabled?: boolean;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* A disclosure whose content arrives on a sine ease (the curve is exactly half
|
|
71
|
+
* a cosine): each block fades and rises a few pixels, staggered by a quarter
|
|
72
|
+
* period. The marker is a small meridian that turns a quarter as it opens.
|
|
73
|
+
*/
|
|
74
|
+
export declare function SineDisclosure({ title, open, defaultOpen, onOpenChange, headingLevel, disabled, className, children, ...rest }: SineDisclosureProps): import("react/jsx-runtime").JSX.Element;
|
|
75
|
+
export interface SineAccordionItem {
|
|
76
|
+
value: string;
|
|
77
|
+
title: React.ReactNode;
|
|
78
|
+
content: React.ReactNode;
|
|
79
|
+
disabled?: boolean;
|
|
80
|
+
}
|
|
81
|
+
export interface SineAccordionProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'defaultValue'> {
|
|
82
|
+
items: SineAccordionItem[];
|
|
83
|
+
/** `single` keeps at most one item open. Default `single`. */
|
|
84
|
+
type?: 'single' | 'multiple';
|
|
85
|
+
value?: string[];
|
|
86
|
+
defaultValue?: string[];
|
|
87
|
+
onValueChange?: (value: string[]) => void;
|
|
88
|
+
headingLevel?: 2 | 3 | 4 | 5;
|
|
89
|
+
}
|
|
90
|
+
/** A set of SineDisclosures. Up/Down, Home and End move between headers. */
|
|
91
|
+
export declare function SineAccordion({ items, type, value, defaultValue, onValueChange, headingLevel, className, ...rest }: SineAccordionProps): import("react/jsx-runtime").JSX.Element;
|
|
92
|
+
//# sourceMappingURL=display.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"display.d.ts","sourceRoot":"","sources":["../../src/effects/display.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useEffect, useId, useMemo, useRef, useState } from 'react';
|
|
4
|
+
import { cx, reducedMotionNow, useControllable, useTimers } from './hooks.js';
|
|
5
|
+
import { PRIMES, r2, seeded, starPath } from './math.js';
|
|
6
|
+
const STAR = starPath(6, 6, 5.5, 1.2);
|
|
7
|
+
const DIGITS = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'];
|
|
8
|
+
/**
|
|
9
|
+
* An odometer: each digit is a reel of 0–9 that rolls to its figure, the
|
|
10
|
+
* units first and each higher place a beat later. Plex Mono, tabular. The
|
|
11
|
+
* full value is in the text for assistive technology; the reels are hidden.
|
|
12
|
+
*/
|
|
13
|
+
export function RollingNumber({ value, locale = 'en-US', format, live = false, className, ...rest }) {
|
|
14
|
+
const text = useMemo(() => new Intl.NumberFormat(locale, format).format(value), [value, locale, format]);
|
|
15
|
+
const chars = [...text];
|
|
16
|
+
let place = 0;
|
|
17
|
+
const cells = chars
|
|
18
|
+
.map((ch, i) => ({ ch, i }))
|
|
19
|
+
.reverse()
|
|
20
|
+
.map(({ ch, i }) => {
|
|
21
|
+
const d = DIGITS.indexOf(ch);
|
|
22
|
+
const key = d >= 0 ? `d${place}` : `s${chars.length - i}`;
|
|
23
|
+
const node = d >= 0 ? (_jsx("span", { className: "ns-fx-roll__col", children: _jsx("span", { className: "ns-fx-roll__reel", style: { '--ns-fx-d': d, '--ns-fx-place': place }, children: DIGITS.map((n) => (_jsx("span", { children: n }, n))) }) }, key)) : (_jsx("span", { className: "ns-fx-roll__sym", children: ch }, key));
|
|
24
|
+
if (d >= 0)
|
|
25
|
+
place++;
|
|
26
|
+
return node;
|
|
27
|
+
})
|
|
28
|
+
.reverse();
|
|
29
|
+
return (_jsxs("span", { ...rest, className: cx('ns-fx-roll', className), "aria-live": live ? 'polite' : undefined, "aria-atomic": live || undefined, children: [_jsx("span", { className: "ns-fx-roll__reels", "aria-hidden": "true", children: cells }), _jsx("span", { className: "ns-fx-sr", children: text })] }));
|
|
30
|
+
}
|
|
31
|
+
/** A RollingNumber that starts at `from` and rolls up to `value` after mount (immediately under reduced motion). */
|
|
32
|
+
export function CountUp({ value, from = 0, ...rest }) {
|
|
33
|
+
const [shown, setShown] = useState(from);
|
|
34
|
+
useEffect(() => {
|
|
35
|
+
if (reducedMotionNow())
|
|
36
|
+
return setShown(value);
|
|
37
|
+
const id = requestAnimationFrame(() => setShown(value));
|
|
38
|
+
return () => cancelAnimationFrame(id);
|
|
39
|
+
}, [value]);
|
|
40
|
+
return _jsx(RollingNumber, { ...rest, value: shown });
|
|
41
|
+
}
|
|
42
|
+
/** A hairline with a Glacier glow at its centre, the way the sky brightens at the horizon before sunrise, and a single star above the midpoint. */
|
|
43
|
+
export function HorizonDivider({ label, rise = true, className, ...rest }) {
|
|
44
|
+
return (_jsxs("div", { ...rest, role: "separator", "aria-orientation": "horizontal", className: cx('ns-fx-horizon', rise && 'ns-fx-horizon--rise', label ? 'ns-fx-horizon--label' : null, className), children: [_jsx("span", { className: "ns-fx-horizon__line", "aria-hidden": "true" }), label ? (_jsx("span", { className: "ns-fx-horizon__label", children: label })) : (_jsx("svg", { className: "ns-fx-horizon__star", viewBox: "0 0 12 12", "aria-hidden": "true", focusable: "false", children: _jsx("path", { d: STAR }) })), _jsx("span", { className: "ns-fx-horizon__line ns-fx-horizon__line--end", "aria-hidden": "true" })] }));
|
|
45
|
+
}
|
|
46
|
+
const PHI_INV = 0.6180339887498949;
|
|
47
|
+
/**
|
|
48
|
+
* An empty state set on a calm field of stars. The stars sit on a golden
|
|
49
|
+
* (Fibonacci) lattice, so they spread evenly without clumping; three depth
|
|
50
|
+
* layers drift on prime-length periods and a few stars twinkle. Seeded, so
|
|
51
|
+
* every render is the same sky. Still under reduced motion.
|
|
52
|
+
*/
|
|
53
|
+
export function StarfieldEmptyState({ title, description, action, stars = 64, seed = 11, headingLevel = 3, className, ...rest }) {
|
|
54
|
+
const field = useMemo(() => {
|
|
55
|
+
const rnd = seeded(seed);
|
|
56
|
+
return Array.from({ length: stars }, (_, i) => {
|
|
57
|
+
const x = ((i * PHI_INV + rnd() * 0.04) % 1) * 400;
|
|
58
|
+
const y = ((i + 0.5) / stars) * 220;
|
|
59
|
+
const m = rnd();
|
|
60
|
+
return { x: r2(x), y: r2(y), r: r2(m > 0.93 ? 1.5 : m > 0.7 ? 1 : 0.6), o: r2(0.35 + m * 0.6), layer: i % 3, twinkle: i % 7 === 3, t: PRIMES[(i % 5) + 2] ?? 5 };
|
|
61
|
+
});
|
|
62
|
+
}, [stars, seed]);
|
|
63
|
+
// A small constellation in the upper-right corner, clear of the text: the five brightest stars there, joined in order of height.
|
|
64
|
+
const bright = useMemo(() => field
|
|
65
|
+
.filter((s) => s.x > 290 && s.y < 150)
|
|
66
|
+
.sort((a, b) => b.r - a.r || b.o - a.o)
|
|
67
|
+
.slice(0, 5)
|
|
68
|
+
.sort((a, b) => a.y - b.y), [field]);
|
|
69
|
+
const H = `h${headingLevel}`;
|
|
70
|
+
const titleId = useId();
|
|
71
|
+
return (_jsxs("div", { ...rest, className: cx('ns-fx-starfield', className), role: "group", "aria-labelledby": titleId, children: [_jsxs("svg", { className: "ns-fx-starfield__sky", viewBox: "0 0 400 220", preserveAspectRatio: "xMidYMid slice", "aria-hidden": "true", focusable: "false", children: [_jsx("polyline", { className: "ns-fx-starfield__lines", points: bright.map((s) => `${s.x},${s.y}`).join(' ') }), [0, 1, 2].map((layer) => (_jsx("g", { className: `ns-fx-starfield__layer ns-fx-starfield__layer--${layer}`, children: field
|
|
72
|
+
.filter((s) => s.layer === layer)
|
|
73
|
+
.map((s, i) => (_jsx("circle", { className: cx('ns-fx-starfield__star', s.twinkle && 'ns-fx-starfield__star--twinkle'), cx: s.x, cy: s.y, r: s.r, style: { opacity: s.o, '--ns-fx-t': `${s.t}s` } }, i))) }, layer)))] }), _jsxs("div", { className: "ns-fx-starfield__body", children: [_jsx("svg", { className: "ns-fx-starfield__north", viewBox: "0 0 12 12", "aria-hidden": "true", focusable: "false", children: _jsx("path", { d: STAR }) }), _jsx(H, { id: titleId, className: "ns-fx-starfield__title", children: title }), description ? _jsx("p", { className: "ns-fx-starfield__desc", children: description }) : null, action ? _jsx("div", { className: "ns-fx-starfield__action", children: action }) : null] })] }));
|
|
74
|
+
}
|
|
75
|
+
/* ------------------------------------------------------------ OrbitAvatar */
|
|
76
|
+
export function initialsOf(name) {
|
|
77
|
+
const parts = name.trim().split(/\s+/).filter(Boolean);
|
|
78
|
+
const first = parts[0]?.[0] ?? '';
|
|
79
|
+
const last = parts.length > 1 ? (parts[parts.length - 1]?.[0] ?? '') : '';
|
|
80
|
+
return (first + last).toUpperCase();
|
|
81
|
+
}
|
|
82
|
+
/** An initials avatar with an orbit ring; on hover or focus of the avatar (or a parent with `.ns-fx-orbit-host`) a moon makes one turn. */
|
|
83
|
+
export function OrbitAvatar({ name, size = 32, className, style, ...rest }) {
|
|
84
|
+
return (_jsxs("span", { ...rest, role: "img", "aria-label": name, className: cx('ns-fx-oavatar', className), style: { ...style, '--ns-fx-s': `${size}px` }, children: [_jsx("span", { className: "ns-fx-oavatar__face", "aria-hidden": "true", children: initialsOf(name) }), _jsxs("svg", { className: "ns-fx-oavatar__orbit", viewBox: "0 0 40 40", "aria-hidden": "true", focusable: "false", children: [_jsx("circle", { className: "ns-fx-oavatar__ring", cx: "20", cy: "20", r: "19" }), _jsx("g", { className: "ns-fx-oavatar__arm", children: _jsx("circle", { className: "ns-fx-oavatar__moon", cx: "20", cy: "1", r: "1.8" }) })] })] }));
|
|
85
|
+
}
|
|
86
|
+
/** A tag led by a small star; removing it lets the star fade out and the tag fold away before `onRemove` fires. */
|
|
87
|
+
export function TagOrbit({ label, onRemove, removeLabel = (l) => `Remove ${l}`, className, ...rest }) {
|
|
88
|
+
const [leaving, setLeaving] = useState(false);
|
|
89
|
+
const after = useTimers();
|
|
90
|
+
return (_jsxs("span", { ...rest, className: cx('ns-fx-tag', className), "data-leaving": leaving || undefined, children: [_jsx("svg", { className: "ns-fx-tag__star", viewBox: "0 0 12 12", "aria-hidden": "true", focusable: "false", children: _jsx("path", { d: STAR }) }), _jsx("span", { className: "ns-fx-tag__label", children: label }), onRemove ? (_jsx("button", { type: "button", className: "ns-fx-tag__remove", "aria-label": removeLabel(label), disabled: leaving, onClick: () => {
|
|
91
|
+
if (reducedMotionNow())
|
|
92
|
+
return onRemove();
|
|
93
|
+
setLeaving(true);
|
|
94
|
+
after(onRemove, 360);
|
|
95
|
+
}, children: _jsx("svg", { viewBox: "0 0 12 12", width: "10", height: "10", "aria-hidden": "true", focusable: "false", children: _jsx("path", { d: "M3 3 9 9M9 3 3 9", stroke: "currentColor", strokeWidth: "1.4", strokeLinecap: "round" }) }) })) : null] }));
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* A disclosure whose content arrives on a sine ease (the curve is exactly half
|
|
99
|
+
* a cosine): each block fades and rises a few pixels, staggered by a quarter
|
|
100
|
+
* period. The marker is a small meridian that turns a quarter as it opens.
|
|
101
|
+
*/
|
|
102
|
+
export function SineDisclosure({ title, open, defaultOpen = false, onOpenChange, headingLevel = 3, disabled, className, children, ...rest }) {
|
|
103
|
+
const id = useId();
|
|
104
|
+
const [isOpen, setOpen] = useControllable(open, defaultOpen, onOpenChange);
|
|
105
|
+
const H = `h${headingLevel}`;
|
|
106
|
+
return (_jsxs("div", { ...rest, className: cx('ns-fx-sine', className), "data-state": isOpen ? 'open' : 'closed', children: [_jsx(H, { className: "ns-fx-sine__heading", children: _jsxs("button", { type: "button", id: `${id}-h`, className: "ns-fx-sine__trigger", "aria-expanded": isOpen, "aria-controls": `${id}-p`, disabled: disabled, onClick: () => setOpen(!isOpen), children: [_jsx("span", { className: "ns-fx-sine__title", children: title }), _jsxs("svg", { className: "ns-fx-sine__mark", viewBox: "0 0 16 16", "aria-hidden": "true", focusable: "false", children: [_jsx("circle", { cx: "8", cy: "8", r: "6" }), _jsx("ellipse", { className: "ns-fx-sine__meridian", cx: "8", cy: "8", rx: "2.6", ry: "6" }), _jsx("line", { x1: "2", y1: "8", x2: "14", y2: "8" })] })] }) }), _jsx("div", { id: `${id}-p`, role: "region", "aria-labelledby": `${id}-h`, className: "ns-fx-sine__panel", hidden: !isOpen, children: _jsx("div", { className: "ns-fx-sine__inner", children: children }) })] }));
|
|
107
|
+
}
|
|
108
|
+
/** A set of SineDisclosures. Up/Down, Home and End move between headers. */
|
|
109
|
+
export function SineAccordion({ items, type = 'single', value, defaultValue = [], onValueChange, headingLevel = 3, className, ...rest }) {
|
|
110
|
+
const [openSet, setOpenSet] = useControllable(value, defaultValue, onValueChange);
|
|
111
|
+
const root = useRef(null);
|
|
112
|
+
function onKeyDown(e) {
|
|
113
|
+
const triggers = Array.from(root.current?.querySelectorAll('.ns-fx-sine__trigger:not(:disabled)') ?? []);
|
|
114
|
+
const i = triggers.indexOf(document.activeElement);
|
|
115
|
+
if (i < 0)
|
|
116
|
+
return;
|
|
117
|
+
let n = -1;
|
|
118
|
+
if (e.key === 'ArrowDown')
|
|
119
|
+
n = (i + 1) % triggers.length;
|
|
120
|
+
else if (e.key === 'ArrowUp')
|
|
121
|
+
n = (i - 1 + triggers.length) % triggers.length;
|
|
122
|
+
else if (e.key === 'Home')
|
|
123
|
+
n = 0;
|
|
124
|
+
else if (e.key === 'End')
|
|
125
|
+
n = triggers.length - 1;
|
|
126
|
+
if (n < 0)
|
|
127
|
+
return;
|
|
128
|
+
e.preventDefault();
|
|
129
|
+
triggers[n]?.focus();
|
|
130
|
+
}
|
|
131
|
+
return (_jsx("div", { ...rest, ref: root, className: cx('ns-fx-accordion', className), onKeyDown: onKeyDown, children: items.map((item) => (_jsx(SineDisclosure, { title: item.title, headingLevel: headingLevel, ...(item.disabled ? { disabled: true } : null), open: openSet.includes(item.value), onOpenChange: (o) => {
|
|
132
|
+
if (type === 'single')
|
|
133
|
+
setOpenSet(o ? [item.value] : []);
|
|
134
|
+
else
|
|
135
|
+
setOpenSet(o ? [...openSet, item.value] : openSet.filter((v) => v !== item.value));
|
|
136
|
+
}, children: item.content }, item.value))) }));
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=display.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"display.js","sourceRoot":"","sources":["../../src/effects/display.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { useEffect } from 'react';
|
|
2
|
+
export declare const useIsoLayoutEffect: typeof useEffect;
|
|
3
|
+
export declare function cx(...parts: Array<string | false | null | undefined>): string;
|
|
4
|
+
/** Read once, now. Safe on the server (returns false). */
|
|
5
|
+
export declare function reducedMotionNow(): boolean;
|
|
6
|
+
/** Live `prefers-reduced-motion`. CSS handles the visuals; this gates JS-spawned motion. */
|
|
7
|
+
export declare function useReducedMotion(): boolean;
|
|
8
|
+
/** Controlled/uncontrolled state: `value` wins when defined. */
|
|
9
|
+
export declare function useControllable<T>(value: T | undefined, defaultValue: T, onChange?: (next: T) => void): [T, (next: T) => void];
|
|
10
|
+
export declare function mergeRefs<T>(...refs: Array<React.Ref<T> | undefined>): React.RefCallback<T>;
|
|
11
|
+
/** Cancels pending timers on unmount. */
|
|
12
|
+
export declare function useTimers(): (fn: () => void, ms: number) => void;
|
|
13
|
+
//# sourceMappingURL=hooks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../src/effects/hooks.ts"],"names":[],"mappings":"AACA,OAAO,EAAe,SAAS,EAAqC,MAAM,OAAO,CAAC;AAElF,eAAO,MAAM,kBAAkB,kBAA8D,CAAC;AAE9F,wBAAgB,EAAE,CAAC,GAAG,KAAK,EAAE,KAAK,CAAC,MAAM,GAAG,KAAK,GAAG,IAAI,GAAG,SAAS,CAAC,GAAG,MAAM,CAE7E;AAID,0DAA0D;AAC1D,wBAAgB,gBAAgB,IAAI,OAAO,CAE1C;AAED,4FAA4F;AAC5F,wBAAgB,gBAAgB,IAAI,OAAO,CAW1C;AAED,gEAAgE;AAChE,wBAAgB,eAAe,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,SAAS,EAAE,YAAY,EAAE,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,CAAC,CAa9H;AAED,wBAAgB,SAAS,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAO3F;AAED,yCAAyC;AACzC,wBAAgB,SAAS,IAAI,CAAC,EAAE,EAAE,MAAM,IAAI,EAAE,EAAE,EAAE,MAAM,KAAK,IAAI,CAgBhE"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { useCallback, useEffect, useLayoutEffect, useRef, useState } from 'react';
|
|
3
|
+
export const useIsoLayoutEffect = typeof window === 'undefined' ? useEffect : useLayoutEffect;
|
|
4
|
+
export function cx(...parts) {
|
|
5
|
+
return parts.filter(Boolean).join(' ');
|
|
6
|
+
}
|
|
7
|
+
const QUERY = '(prefers-reduced-motion: reduce)';
|
|
8
|
+
/** Read once, now. Safe on the server (returns false). */
|
|
9
|
+
export function reducedMotionNow() {
|
|
10
|
+
return typeof window !== 'undefined' && typeof window.matchMedia === 'function' && window.matchMedia(QUERY).matches;
|
|
11
|
+
}
|
|
12
|
+
/** Live `prefers-reduced-motion`. CSS handles the visuals; this gates JS-spawned motion. */
|
|
13
|
+
export function useReducedMotion() {
|
|
14
|
+
const [reduced, setReduced] = useState(false);
|
|
15
|
+
useEffect(() => {
|
|
16
|
+
if (typeof window.matchMedia !== 'function')
|
|
17
|
+
return;
|
|
18
|
+
const mq = window.matchMedia(QUERY);
|
|
19
|
+
setReduced(mq.matches);
|
|
20
|
+
const on = () => setReduced(mq.matches);
|
|
21
|
+
mq.addEventListener?.('change', on);
|
|
22
|
+
return () => mq.removeEventListener?.('change', on);
|
|
23
|
+
}, []);
|
|
24
|
+
return reduced;
|
|
25
|
+
}
|
|
26
|
+
/** Controlled/uncontrolled state: `value` wins when defined. */
|
|
27
|
+
export function useControllable(value, defaultValue, onChange) {
|
|
28
|
+
const [inner, setInner] = useState(defaultValue);
|
|
29
|
+
const controlled = value !== undefined;
|
|
30
|
+
const ref = useRef(onChange);
|
|
31
|
+
ref.current = onChange;
|
|
32
|
+
const set = useCallback((next) => {
|
|
33
|
+
if (!controlled)
|
|
34
|
+
setInner(next);
|
|
35
|
+
ref.current?.(next);
|
|
36
|
+
}, [controlled]);
|
|
37
|
+
return [controlled ? value : inner, set];
|
|
38
|
+
}
|
|
39
|
+
export function mergeRefs(...refs) {
|
|
40
|
+
return (node) => {
|
|
41
|
+
for (const ref of refs) {
|
|
42
|
+
if (typeof ref === 'function')
|
|
43
|
+
ref(node);
|
|
44
|
+
else if (ref)
|
|
45
|
+
ref.current = node;
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
/** Cancels pending timers on unmount. */
|
|
50
|
+
export function useTimers() {
|
|
51
|
+
const ids = useRef(new Set());
|
|
52
|
+
useEffect(() => {
|
|
53
|
+
const set = ids.current;
|
|
54
|
+
return () => {
|
|
55
|
+
for (const id of set)
|
|
56
|
+
clearTimeout(id);
|
|
57
|
+
set.clear();
|
|
58
|
+
};
|
|
59
|
+
}, []);
|
|
60
|
+
return useCallback((fn, ms) => {
|
|
61
|
+
const id = setTimeout(() => {
|
|
62
|
+
ids.current.delete(id);
|
|
63
|
+
fn();
|
|
64
|
+
}, ms);
|
|
65
|
+
ids.current.add(id);
|
|
66
|
+
}, []);
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=hooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../src/effects/hooks.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export { StarLink, ConstellationButton, KbdKeycap } from './actions.js';
|
|
2
|
+
export type { StarLinkProps, ConstellationButtonProps, KbdKeycapProps } from './actions.js';
|
|
3
|
+
export { OrbitSpinner, FibonacciLoader, LissajousLoader, PrimeSkeleton, ProgressSextant } from './loaders.js';
|
|
4
|
+
export type { LoaderProps, FibonacciLoaderProps, LissajousLoaderProps, PrimeSkeletonProps, ProgressSextantProps } from './loaders.js';
|
|
5
|
+
export { CompassSwitch, SextantSlider, ConstellationCheckbox, RadioOrbitGroup, RadioOrbit, GraticuleInput } from './controls.js';
|
|
6
|
+
export type { CompassSwitchProps, SextantSliderProps, ConstellationCheckboxProps, RadioOrbitGroupProps, RadioOrbitProps, GraticuleInputProps, } from './controls.js';
|
|
7
|
+
export { MeridianTabs, StarPagination, ConstellationBreadcrumb } from './navigation.js';
|
|
8
|
+
export type { MeridianTab, MeridianTabsProps, StarPaginationProps, ConstellationCrumb, ConstellationBreadcrumbProps } from './navigation.js';
|
|
9
|
+
export { RollingNumber, CountUp, HorizonDivider, StarfieldEmptyState, OrbitAvatar, initialsOf, TagOrbit, SineDisclosure, SineAccordion } from './display.js';
|
|
10
|
+
export type { RollingNumberProps, CountUpProps, HorizonDividerProps, StarfieldEmptyStateProps, OrbitAvatarProps, TagOrbitProps, SineDisclosureProps, SineAccordionItem, SineAccordionProps, } from './display.js';
|
|
11
|
+
export { TooltipCompass, ToastComet } from './overlays.js';
|
|
12
|
+
export type { TooltipCompassProps, ToastCometProps } from './overlays.js';
|
|
13
|
+
export { GOLDEN_ANGLE, PRIMES, fibonacci, seeded, vogel, lissajousPath, starPath } from './math.js';
|
|
14
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/effects/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,QAAQ,EAAE,mBAAmB,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACxE,YAAY,EAAE,aAAa,EAAE,wBAAwB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE5F,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC9G,YAAY,EAAE,WAAW,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAEtI,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,qBAAqB,EAAE,eAAe,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACjI,YAAY,EACV,kBAAkB,EAAE,kBAAkB,EAAE,0BAA0B,EAAE,oBAAoB,EAAE,eAAe,EAAE,mBAAmB,GAC/H,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AACxF,YAAY,EAAE,WAAW,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,4BAA4B,EAAE,MAAM,iBAAiB,CAAC;AAE7I,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7J,YAAY,EACV,kBAAkB,EAAE,YAAY,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,aAAa,EAAE,mBAAmB,EACrI,iBAAiB,EAAE,kBAAkB,GACtC,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3D,YAAY,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAE1E,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
// @northstar-js/react/effects — opt-in Northstar variants: stars, orbits,
|
|
2
|
+
// instruments and a little arithmetic. Styles ship in `effects.css`; load it
|
|
3
|
+
// after `styles.css`. Every effect is transform/opacity only, seeded rather
|
|
4
|
+
// than random, and still (with its state visible) under reduced motion.
|
|
5
|
+
export { StarLink, ConstellationButton, KbdKeycap } from './actions.js';
|
|
6
|
+
export { OrbitSpinner, FibonacciLoader, LissajousLoader, PrimeSkeleton, ProgressSextant } from './loaders.js';
|
|
7
|
+
export { CompassSwitch, SextantSlider, ConstellationCheckbox, RadioOrbitGroup, RadioOrbit, GraticuleInput } from './controls.js';
|
|
8
|
+
export { MeridianTabs, StarPagination, ConstellationBreadcrumb } from './navigation.js';
|
|
9
|
+
export { RollingNumber, CountUp, HorizonDivider, StarfieldEmptyState, OrbitAvatar, initialsOf, TagOrbit, SineDisclosure, SineAccordion } from './display.js';
|
|
10
|
+
export { TooltipCompass, ToastComet } from './overlays.js';
|
|
11
|
+
export { GOLDEN_ANGLE, PRIMES, fibonacci, seeded, vogel, lissajousPath, starPath } from './math.js';
|
|
12
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/effects/index.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,6EAA6E;AAC7E,4EAA4E;AAC5E,wEAAwE;AACxE,OAAO,EAAE,QAAQ,EAAE,mBAAmB,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAGxE,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAG9G,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,qBAAqB,EAAE,eAAe,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAKjI,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAGxF,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAM7J,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAG3D,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
export interface LoaderProps extends Omit<React.HTMLAttributes<HTMLSpanElement>, 'children'> {
|
|
2
|
+
/** Pixel size of the square mark. */
|
|
3
|
+
size?: number;
|
|
4
|
+
/** Announced to screen readers, and shown beside the still mark under reduced motion. Default "Loading". */
|
|
5
|
+
label?: string;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* A north star with two planets on circular orbits. Their periods follow
|
|
9
|
+
* Kepler's third law (T ∝ a^1.5), so the inner planet laps the outer one and
|
|
10
|
+
* the pair never repeats the same picture on a short cycle.
|
|
11
|
+
*/
|
|
12
|
+
export declare function OrbitSpinner({ size, label, ...rest }: LoaderProps): import("react/jsx-runtime").JSX.Element;
|
|
13
|
+
export interface FibonacciLoaderProps extends LoaderProps {
|
|
14
|
+
/** Number of seeds in the head. A Fibonacci number reads best. Default 21. */
|
|
15
|
+
seeds?: number;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* A sunflower head of seeds placed at the golden angle (Vogel's model). Each
|
|
19
|
+
* seed's pulse is offset by its index times 1/φ, so the brightness travels
|
|
20
|
+
* outward along the spiral arms (the parastichies).
|
|
21
|
+
*/
|
|
22
|
+
export declare function FibonacciLoader({ size, label, seeds, ...rest }: FibonacciLoaderProps): import("react/jsx-runtime").JSX.Element;
|
|
23
|
+
export interface LissajousLoaderProps extends LoaderProps {
|
|
24
|
+
/** Frequency ratio a:b. Default [3, 2]. */
|
|
25
|
+
ratio?: [number, number];
|
|
26
|
+
/** Seconds for one full figure. Default 3.6. */
|
|
27
|
+
period?: number;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* A point tracing x = cos(a·t), y = sin(b·t) over its own faint figure. Two
|
|
31
|
+
* nested translations with sine easing give the exact curve using transforms
|
|
32
|
+
* only: half a cosine is precisely the ease-in-out-sine curve.
|
|
33
|
+
*/
|
|
34
|
+
export declare function LissajousLoader({ size, label, ratio, period, ...rest }: LissajousLoaderProps): import("react/jsx-runtime").JSX.Element;
|
|
35
|
+
export interface PrimeSkeletonProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'children'> {
|
|
36
|
+
/** Number of placeholder lines. Default 3. */
|
|
37
|
+
lines?: number;
|
|
38
|
+
/** Line widths in percent; cycled. */
|
|
39
|
+
widths?: number[];
|
|
40
|
+
/** Line height in pixels. Default 12. */
|
|
41
|
+
lineHeight?: number;
|
|
42
|
+
/** Announced to screen readers. Default "Loading". */
|
|
43
|
+
label?: string;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Skeleton lines whose shimmers run on prime-numbered periods (3, 5, 7, 11 …
|
|
47
|
+
* × 0.5 s). No two lines ever fall into step, so the block never pulses as
|
|
48
|
+
* one. Under reduced motion the lines are still.
|
|
49
|
+
*/
|
|
50
|
+
export declare function PrimeSkeleton({ lines, widths, lineHeight, label, className, style, ...rest }: PrimeSkeletonProps): import("react/jsx-runtime").JSX.Element;
|
|
51
|
+
export interface ProgressSextantProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'children'> {
|
|
52
|
+
value: number;
|
|
53
|
+
max?: number;
|
|
54
|
+
/** Accessible name. Required unless `aria-labelledby` is given. */
|
|
55
|
+
label?: string;
|
|
56
|
+
/** Pixel width; height follows. Default 160. */
|
|
57
|
+
width?: number;
|
|
58
|
+
/** Formats the readout. Default whole percent. */
|
|
59
|
+
format?: (value: number, max: number) => string;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Arc progress drawn like a sextant's limb: 24 graduations, a major one
|
|
63
|
+
* every quarter, and an index arm that swings to the reading. Only the arm's
|
|
64
|
+
* rotation and the ticks' opacity change.
|
|
65
|
+
*/
|
|
66
|
+
export declare function ProgressSextant({ value, max, label, width, format, className, style, ...rest }: ProgressSextantProps): import("react/jsx-runtime").JSX.Element;
|
|
67
|
+
//# sourceMappingURL=loaders.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loaders.d.ts","sourceRoot":"","sources":["../../src/effects/loaders.tsx"],"names":[],"mappings":"AAGA,MAAM,WAAW,WAAY,SAAQ,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,eAAe,CAAC,EAAE,UAAU,CAAC;IAC1F,qCAAqC;IACrC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,4GAA4G;IAC5G,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAaD;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,EAAE,IAAS,EAAE,KAAiB,EAAE,GAAG,IAAI,EAAE,EAAE,WAAW,2CAkBlF;AAID,MAAM,WAAW,oBAAqB,SAAQ,WAAW;IACvD,8EAA8E;IAC9E,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,EAAE,IAAS,EAAE,KAAiB,EAAE,KAAU,EAAE,GAAG,IAAI,EAAE,EAAE,oBAAoB,2CAqB1G;AAID,MAAM,WAAW,oBAAqB,SAAQ,WAAW;IACvD,2CAA2C;IAC3C,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzB,gDAAgD;IAChD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,EAAE,IAAS,EAAE,KAAiB,EAAE,KAAc,EAAE,MAAY,EAAE,GAAG,IAAI,EAAE,EAAE,oBAAoB,2CAsB5H;AAID,MAAM,WAAW,kBAAmB,SAAQ,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,UAAU,CAAC;IAChG,8CAA8C;IAC9C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sCAAsC;IACtC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,yCAAyC;IACzC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,sDAAsD;IACtD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,EAAE,KAAS,EAAE,MAA8B,EAAE,UAAe,EAAE,KAAiB,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,EAAE,kBAAkB,2CAc7J;AAID,MAAM,WAAW,oBAAqB,SAAQ,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,UAAU,CAAC;IAClG,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,mEAAmE;IACnE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gDAAgD;IAChD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kDAAkD;IAClD,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC;CACjD;AAMD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,EAAE,KAAK,EAAE,GAAS,EAAE,KAAK,EAAE,KAAW,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,EAAE,oBAAoB,2CA0ChI"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { cx } from './hooks.js';
|
|
3
|
+
import { PRIMES, clamp, lissajousPath, r2, starPath, vogel } from './math.js';
|
|
4
|
+
function Loader({ kind, size, label, className, style, children, ...rest }) {
|
|
5
|
+
return (_jsxs("span", { ...rest, role: "status", className: cx('ns-fx-loader', `ns-fx-loader--${kind}`, className), style: { ...style, '--ns-fx-size': `${size}px` }, children: [children, _jsx("span", { className: "ns-fx-loader__label", children: label })] }));
|
|
6
|
+
}
|
|
7
|
+
/* ---------------------------------------------------------- OrbitSpinner */
|
|
8
|
+
/**
|
|
9
|
+
* A north star with two planets on circular orbits. Their periods follow
|
|
10
|
+
* Kepler's third law (T ∝ a^1.5), so the inner planet laps the outer one and
|
|
11
|
+
* the pair never repeats the same picture on a short cycle.
|
|
12
|
+
*/
|
|
13
|
+
export function OrbitSpinner({ size = 32, label = 'Loading', ...rest }) {
|
|
14
|
+
const inner = 1.2;
|
|
15
|
+
const outer = r2(inner * Math.pow(12 / 7, 1.5));
|
|
16
|
+
return (_jsx(Loader, { kind: "orbit", size: size, label: label, ...rest, children: _jsxs("svg", { viewBox: "0 0 32 32", "aria-hidden": "true", focusable: "false", children: [_jsx("circle", { className: "ns-fx-orbit__ring", cx: "16", cy: "16", r: "7" }), _jsx("circle", { className: "ns-fx-orbit__ring", cx: "16", cy: "16", r: "12" }), _jsx("path", { className: "ns-fx-orbit__star", d: starPath(16, 16, 4, 0.9) }), _jsx("g", { className: "ns-fx-orbit__arm", style: { '--ns-fx-t': `${inner}s` }, children: _jsx("circle", { className: "ns-fx-orbit__planet", cx: "16", cy: "9", r: "1.9" }) }), _jsx("g", { className: "ns-fx-orbit__arm", style: { '--ns-fx-t': `${outer}s` }, children: _jsx("circle", { className: "ns-fx-orbit__planet ns-fx-orbit__planet--far", cx: "16", cy: "4", r: "1.5" }) })] }) }));
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* A sunflower head of seeds placed at the golden angle (Vogel's model). Each
|
|
20
|
+
* seed's pulse is offset by its index times 1/φ, so the brightness travels
|
|
21
|
+
* outward along the spiral arms (the parastichies).
|
|
22
|
+
*/
|
|
23
|
+
export function FibonacciLoader({ size = 32, label = 'Loading', seeds = 21, ...rest }) {
|
|
24
|
+
const n = Math.max(5, Math.min(89, Math.round(seeds)));
|
|
25
|
+
return (_jsx(Loader, { kind: "fibonacci", size: size, label: label, ...rest, children: _jsx("svg", { viewBox: "0 0 40 40", "aria-hidden": "true", focusable: "false", children: Array.from({ length: n }, (_, i) => {
|
|
26
|
+
const p = vogel(i, n);
|
|
27
|
+
return (_jsx("circle", { className: "ns-fx-seed", cx: r2(20 + p.x * 17), cy: r2(20 + p.y * 17), r: r2(0.9 + p.r * 1.3), style: { '--ns-fx-k': r2((i * 0.618034) % 1) } }, i));
|
|
28
|
+
}) }) }));
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* A point tracing x = cos(a·t), y = sin(b·t) over its own faint figure. Two
|
|
32
|
+
* nested translations with sine easing give the exact curve using transforms
|
|
33
|
+
* only: half a cosine is precisely the ease-in-out-sine curve.
|
|
34
|
+
*/
|
|
35
|
+
export function LissajousLoader({ size = 32, label = 'Loading', ratio = [3, 2], period = 3.6, ...rest }) {
|
|
36
|
+
const [a, b] = ratio;
|
|
37
|
+
const px = r2(period / (2 * a));
|
|
38
|
+
const py = r2(period / (2 * b));
|
|
39
|
+
return (_jsx(Loader, { kind: "lissajous", size: size, label: label, ...rest, children: _jsxs("svg", { viewBox: "0 0 40 40", "aria-hidden": "true", focusable: "false", children: [_jsx("path", { className: "ns-fx-liss__track", d: lissajousPath(a, b, 32), transform: "translate(4 4)" }), [0, 1, 2, 3].map((k) => (_jsx("g", { className: "ns-fx-liss__x", style: { '--ns-fx-d': `${px}s`, '--ns-fx-lag': `${-r2(period - k * period * 0.018)}s` }, children: _jsx("g", { className: "ns-fx-liss__y", style: { '--ns-fx-d': `${py}s`, '--ns-fx-lag': `${-r2(period + py / 2 - k * period * 0.018)}s` }, children: _jsx("circle", { className: "ns-fx-liss__dot", cx: "20", cy: "20", r: r2(2 - k * 0.35), style: { opacity: r2(1 - k * 0.24) } }) }) }, k)))] }) }));
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Skeleton lines whose shimmers run on prime-numbered periods (3, 5, 7, 11 …
|
|
43
|
+
* × 0.5 s). No two lines ever fall into step, so the block never pulses as
|
|
44
|
+
* one. Under reduced motion the lines are still.
|
|
45
|
+
*/
|
|
46
|
+
export function PrimeSkeleton({ lines = 3, widths = [100, 88, 72, 94, 64], lineHeight = 12, label = 'Loading', className, style, ...rest }) {
|
|
47
|
+
return (_jsxs("div", { ...rest, role: "status", className: cx('ns-fx-pskel', className), style: { ...style, '--ns-fx-h': `${lineHeight}px` }, children: [Array.from({ length: Math.max(1, lines) }, (_, i) => (_jsx("span", { className: "ns-fx-pskel__line", "aria-hidden": "true", style: { width: `${widths[i % widths.length]}%`, '--ns-fx-t': `${(PRIMES[(i % (PRIMES.length - 1)) + 1] ?? 3) * 0.5}s` } }, i))), _jsx("span", { className: "ns-fx-sr", children: label })] }));
|
|
48
|
+
}
|
|
49
|
+
const ARC_FROM = -150;
|
|
50
|
+
const ARC_SPAN = 120;
|
|
51
|
+
const TICKS = 25;
|
|
52
|
+
/**
|
|
53
|
+
* Arc progress drawn like a sextant's limb: 24 graduations, a major one
|
|
54
|
+
* every quarter, and an index arm that swings to the reading. Only the arm's
|
|
55
|
+
* rotation and the ticks' opacity change.
|
|
56
|
+
*/
|
|
57
|
+
export function ProgressSextant({ value, max = 100, label, width = 160, format, className, style, ...rest }) {
|
|
58
|
+
const f = max > 0 ? clamp(value / max, 0, 1) : 0;
|
|
59
|
+
const text = format ? format(value, max) : `${Math.round(f * 100)}%`;
|
|
60
|
+
const pt = (deg, rad) => {
|
|
61
|
+
const t = (deg * Math.PI) / 180;
|
|
62
|
+
return [r2(60 + rad * Math.cos(t)), r2(66 + rad * Math.sin(t))];
|
|
63
|
+
};
|
|
64
|
+
return (_jsxs("div", { ...rest, role: "progressbar", "aria-label": rest['aria-labelledby'] ? undefined : label, "aria-valuemin": 0, "aria-valuemax": max, "aria-valuenow": clamp(value, 0, max), "aria-valuetext": text, className: cx('ns-fx-sextant', className), style: { ...style, width, '--ns-fx-rot': `${r2(ARC_SPAN * f - ARC_SPAN / 2)}deg` }, children: [_jsxs("svg", { viewBox: "0 0 120 76", "aria-hidden": "true", focusable: "false", children: [Array.from({ length: TICKS }, (_, i) => {
|
|
65
|
+
const deg = ARC_FROM + (ARC_SPAN * i) / (TICKS - 1);
|
|
66
|
+
const major = i % 6 === 0;
|
|
67
|
+
const [x1, y1] = pt(deg, major ? 45 : 48);
|
|
68
|
+
const [x2, y2] = pt(deg, 54);
|
|
69
|
+
const on = i / (TICKS - 1) <= f + 1e-9 && f > 0;
|
|
70
|
+
return (_jsxs("g", { children: [_jsx("line", { className: cx('ns-fx-sextant__tick', major && 'ns-fx-sextant__tick--major'), x1: x1, y1: y1, x2: x2, y2: y2 }), _jsx("line", { className: "ns-fx-sextant__lit", "data-on": on || undefined, x1: x1, y1: y1, x2: x2, y2: y2, style: { '--ns-fx-i': i } })] }, i));
|
|
71
|
+
}), _jsxs("g", { className: "ns-fx-sextant__arm", children: [_jsx("line", { x1: "60", y1: "66", x2: "60", y2: "14" }), _jsx("path", { d: starPath(60, 12, 3.4, 0.8) })] }), _jsx("circle", { className: "ns-fx-sextant__pivot", cx: "60", cy: "66", r: "2.5" })] }), _jsx("span", { className: "ns-fx-sextant__readout", "aria-hidden": "true", children: text })] }));
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=loaders.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loaders.js","sourceRoot":"","sources":["../../src/effects/loaders.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/** The golden angle in degrees: 360 × (1 − 1/φ). Vogel's sunflower spacing. */
|
|
2
|
+
export declare const GOLDEN_ANGLE = 137.50776405003785;
|
|
3
|
+
/** The first primes, used for timings that should never fall into step. */
|
|
4
|
+
export declare const PRIMES: readonly [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37];
|
|
5
|
+
/** First Fibonacci numbers (1, 1, 2, 3, 5, …). */
|
|
6
|
+
export declare function fibonacci(n: number): number[];
|
|
7
|
+
/** Mulberry32: a tiny seeded PRNG, uniform in [0, 1). */
|
|
8
|
+
export declare function seeded(seed: number): () => number;
|
|
9
|
+
/** Vogel's spiral: point `i` of `n` on a unit disc, golden-angle spaced. */
|
|
10
|
+
export declare function vogel(i: number, n: number): {
|
|
11
|
+
x: number;
|
|
12
|
+
y: number;
|
|
13
|
+
r: number;
|
|
14
|
+
a: number;
|
|
15
|
+
};
|
|
16
|
+
/** Points of a Lissajous figure x = sin(a·t + δ), y = sin(b·t), as an SVG path on a box of `size`. */
|
|
17
|
+
export declare function lissajousPath(a: number, b: number, size: number, delta?: number, steps?: number): string;
|
|
18
|
+
/** Round to 2 dp for stable SVG/CSS output. */
|
|
19
|
+
export declare const r2: (n: number) => number;
|
|
20
|
+
/** The four-point north star, centred on (x, y) with outer radius `o` and waist `w`. */
|
|
21
|
+
export declare function starPath(x: number, y: number, o: number, w?: number): string;
|
|
22
|
+
export declare const clamp: (n: number, lo: number, hi: number) => number;
|
|
23
|
+
//# sourceMappingURL=math.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"math.d.ts","sourceRoot":"","sources":["../../src/effects/math.ts"],"names":[],"mappings":"AAIA,+EAA+E;AAC/E,eAAO,MAAM,YAAY,qBAAqB,CAAC;AAG/C,2EAA2E;AAC3E,eAAO,MAAM,MAAM,uDAAwD,CAAC;AAE5E,kDAAkD;AAClD,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAS7C;AAED,yDAAyD;AACzD,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,MAAM,CAQjD;AAED,4EAA4E;AAC5E,wBAAgB,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAI1F;AAED,sGAAsG;AACtG,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,SAAc,EAAE,KAAK,SAAM,GAAG,MAAM,CAU1G;AAED,+CAA+C;AAC/C,eAAO,MAAM,EAAE,GAAI,GAAG,MAAM,KAAG,MAAmC,CAAC;AAEnE,wFAAwF;AACxF,wBAAgB,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,SAAU,GAAG,MAAM,CAG7E;AAED,eAAO,MAAM,KAAK,GAAI,GAAG,MAAM,EAAE,IAAI,MAAM,EAAE,IAAI,MAAM,KAAG,MAAuC,CAAC"}
|