@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.
Files changed (182) hide show
  1. package/LICENSE +21 -0
  2. package/dist/actions.d.ts +99 -0
  3. package/dist/actions.d.ts.map +1 -0
  4. package/dist/actions.js +61 -0
  5. package/dist/actions.js.map +1 -0
  6. package/dist/backdrops/StarBackdrop.d.ts +31 -0
  7. package/dist/backdrops/StarBackdrop.d.ts.map +1 -0
  8. package/dist/backdrops/StarBackdrop.js +84 -0
  9. package/dist/backdrops/StarBackdrop.js.map +1 -0
  10. package/dist/backdrops/index.d.ts +7 -0
  11. package/dist/backdrops/index.d.ts.map +1 -0
  12. package/dist/backdrops/index.js +8 -0
  13. package/dist/backdrops/index.js.map +1 -0
  14. package/dist/backdrops/math.d.ts +39 -0
  15. package/dist/backdrops/math.d.ts.map +1 -0
  16. package/dist/backdrops/math.js +44 -0
  17. package/dist/backdrops/math.js.map +1 -0
  18. package/dist/backdrops/scenes.d.ts +20 -0
  19. package/dist/backdrops/scenes.d.ts.map +1 -0
  20. package/dist/backdrops/scenes.js +417 -0
  21. package/dist/backdrops/scenes.js.map +1 -0
  22. package/dist/backdrops.css +141 -0
  23. package/dist/data.d.ts +91 -0
  24. package/dist/data.d.ts.map +1 -0
  25. package/dist/data.js +69 -0
  26. package/dist/data.js.map +1 -0
  27. package/dist/effects/actions.d.ts +48 -0
  28. package/dist/effects/actions.d.ts.map +1 -0
  29. package/dist/effects/actions.js +80 -0
  30. package/dist/effects/actions.js.map +1 -0
  31. package/dist/effects/controls.d.ts +84 -0
  32. package/dist/effects/controls.d.ts.map +1 -0
  33. package/dist/effects/controls.js +121 -0
  34. package/dist/effects/controls.js.map +1 -0
  35. package/dist/effects/display.d.ts +92 -0
  36. package/dist/effects/display.d.ts.map +1 -0
  37. package/dist/effects/display.js +138 -0
  38. package/dist/effects/display.js.map +1 -0
  39. package/dist/effects/hooks.d.ts +13 -0
  40. package/dist/effects/hooks.d.ts.map +1 -0
  41. package/dist/effects/hooks.js +68 -0
  42. package/dist/effects/hooks.js.map +1 -0
  43. package/dist/effects/index.d.ts +14 -0
  44. package/dist/effects/index.d.ts.map +1 -0
  45. package/dist/effects/index.js +12 -0
  46. package/dist/effects/index.js.map +1 -0
  47. package/dist/effects/loaders.d.ts +67 -0
  48. package/dist/effects/loaders.d.ts.map +1 -0
  49. package/dist/effects/loaders.js +73 -0
  50. package/dist/effects/loaders.js.map +1 -0
  51. package/dist/effects/math.d.ts +23 -0
  52. package/dist/effects/math.d.ts.map +1 -0
  53. package/dist/effects/math.js +56 -0
  54. package/dist/effects/math.js.map +1 -0
  55. package/dist/effects/navigation.d.ts +55 -0
  56. package/dist/effects/navigation.d.ts.map +1 -0
  57. package/dist/effects/navigation.js +103 -0
  58. package/dist/effects/navigation.js.map +1 -0
  59. package/dist/effects/overlays.d.ts +34 -0
  60. package/dist/effects/overlays.d.ts.map +1 -0
  61. package/dist/effects/overlays.js +56 -0
  62. package/dist/effects/overlays.js.map +1 -0
  63. package/dist/effects.css +1659 -0
  64. package/dist/feedback.d.ts +55 -0
  65. package/dist/feedback.d.ts.map +1 -0
  66. package/dist/feedback.js +60 -0
  67. package/dist/feedback.js.map +1 -0
  68. package/dist/flow.d.ts +70 -0
  69. package/dist/flow.d.ts.map +1 -0
  70. package/dist/flow.js +118 -0
  71. package/dist/flow.js.map +1 -0
  72. package/dist/forms.d.ts +130 -0
  73. package/dist/forms.d.ts.map +1 -0
  74. package/dist/forms.js +241 -0
  75. package/dist/forms.js.map +1 -0
  76. package/dist/glass.d.ts +74 -0
  77. package/dist/glass.d.ts.map +1 -0
  78. package/dist/glass.js +139 -0
  79. package/dist/glass.js.map +1 -0
  80. package/dist/illustrations/data.d.ts +103 -0
  81. package/dist/illustrations/data.d.ts.map +1 -0
  82. package/dist/illustrations/data.js +3 -0
  83. package/dist/illustrations/data.js.map +1 -0
  84. package/dist/illustrations/index.d.ts +110 -0
  85. package/dist/illustrations/index.d.ts.map +1 -0
  86. package/dist/illustrations/index.js +54 -0
  87. package/dist/illustrations/index.js.map +1 -0
  88. package/dist/illustrations/types.d.ts +30 -0
  89. package/dist/illustrations/types.d.ts.map +1 -0
  90. package/dist/illustrations/types.js +2 -0
  91. package/dist/illustrations/types.js.map +1 -0
  92. package/dist/index.d.ts +27 -0
  93. package/dist/index.d.ts.map +1 -0
  94. package/dist/index.js +13 -0
  95. package/dist/index.js.map +1 -0
  96. package/dist/internal/expand.d.ts +17 -0
  97. package/dist/internal/expand.d.ts.map +1 -0
  98. package/dist/internal/expand.js +23 -0
  99. package/dist/internal/expand.js.map +1 -0
  100. package/dist/internal/icons.d.ts +9 -0
  101. package/dist/internal/icons.d.ts.map +1 -0
  102. package/dist/internal/icons.js +12 -0
  103. package/dist/internal/icons.js.map +1 -0
  104. package/dist/internal/interaction.d.ts +21 -0
  105. package/dist/internal/interaction.d.ts.map +1 -0
  106. package/dist/internal/interaction.js +129 -0
  107. package/dist/internal/interaction.js.map +1 -0
  108. package/dist/internal/layers.d.ts +12 -0
  109. package/dist/internal/layers.d.ts.map +1 -0
  110. package/dist/internal/layers.js +108 -0
  111. package/dist/internal/layers.js.map +1 -0
  112. package/dist/internal/util.d.ts +9 -0
  113. package/dist/internal/util.d.ts.map +1 -0
  114. package/dist/internal/util.js +33 -0
  115. package/dist/internal/util.js.map +1 -0
  116. package/dist/layout.d.ts +34 -0
  117. package/dist/layout.d.ts.map +1 -0
  118. package/dist/layout.js +27 -0
  119. package/dist/layout.js.map +1 -0
  120. package/dist/motion.d.ts +36 -0
  121. package/dist/motion.d.ts.map +1 -0
  122. package/dist/motion.js +80 -0
  123. package/dist/motion.js.map +1 -0
  124. package/dist/navigation.d.ts +100 -0
  125. package/dist/navigation.d.ts.map +1 -0
  126. package/dist/navigation.js +154 -0
  127. package/dist/navigation.js.map +1 -0
  128. package/dist/northstar/BriefForm.d.ts +23 -0
  129. package/dist/northstar/BriefForm.d.ts.map +1 -0
  130. package/dist/northstar/BriefForm.js +40 -0
  131. package/dist/northstar/BriefForm.js.map +1 -0
  132. package/dist/northstar/ExportMenu.d.ts +16 -0
  133. package/dist/northstar/ExportMenu.d.ts.map +1 -0
  134. package/dist/northstar/ExportMenu.js +11 -0
  135. package/dist/northstar/ExportMenu.js.map +1 -0
  136. package/dist/northstar/PopulationPanel.d.ts +30 -0
  137. package/dist/northstar/PopulationPanel.d.ts.map +1 -0
  138. package/dist/northstar/PopulationPanel.js +18 -0
  139. package/dist/northstar/PopulationPanel.js.map +1 -0
  140. package/dist/northstar/ResearchBuilder.d.ts +26 -0
  141. package/dist/northstar/ResearchBuilder.d.ts.map +1 -0
  142. package/dist/northstar/ResearchBuilder.js +81 -0
  143. package/dist/northstar/ResearchBuilder.js.map +1 -0
  144. package/dist/northstar/ResponsesView.d.ts +20 -0
  145. package/dist/northstar/ResponsesView.d.ts.map +1 -0
  146. package/dist/northstar/ResponsesView.js +42 -0
  147. package/dist/northstar/ResponsesView.js.map +1 -0
  148. package/dist/northstar/Run.d.ts +37 -0
  149. package/dist/northstar/Run.d.ts.map +1 -0
  150. package/dist/northstar/Run.js +32 -0
  151. package/dist/northstar/Run.js.map +1 -0
  152. package/dist/northstar/StudyShell.d.ts +50 -0
  153. package/dist/northstar/StudyShell.d.ts.map +1 -0
  154. package/dist/northstar/StudyShell.js +18 -0
  155. package/dist/northstar/StudyShell.js.map +1 -0
  156. package/dist/northstar/StudyStatus.d.ts +17 -0
  157. package/dist/northstar/StudyStatus.d.ts.map +1 -0
  158. package/dist/northstar/StudyStatus.js +26 -0
  159. package/dist/northstar/StudyStatus.js.map +1 -0
  160. package/dist/northstar/index.d.ts +10 -0
  161. package/dist/northstar/index.d.ts.map +1 -0
  162. package/dist/northstar/index.js +10 -0
  163. package/dist/northstar/index.js.map +1 -0
  164. package/dist/northstar/messages.d.ts +84 -0
  165. package/dist/northstar/messages.d.ts.map +1 -0
  166. package/dist/northstar/messages.js +107 -0
  167. package/dist/northstar/messages.js.map +1 -0
  168. package/dist/overlays.d.ts +136 -0
  169. package/dist/overlays.d.ts.map +1 -0
  170. package/dist/overlays.js +447 -0
  171. package/dist/overlays.js.map +1 -0
  172. package/dist/provider.d.ts +82 -0
  173. package/dist/provider.d.ts.map +1 -0
  174. package/dist/provider.js +128 -0
  175. package/dist/provider.js.map +1 -0
  176. package/dist/styles.css +2033 -0
  177. package/dist/surface.d.ts +58 -0
  178. package/dist/surface.d.ts.map +1 -0
  179. package/dist/surface.js +39 -0
  180. package/dist/surface.js.map +1 -0
  181. package/package.json +81 -3
  182. package/README.md +0 -3
@@ -0,0 +1,56 @@
1
+ // Deterministic maths for the effects layer. Nothing here calls Math.random:
2
+ // every "scatter" is seeded, so a server render, a client render and a
3
+ // screenshot all agree.
4
+ /** The golden angle in degrees: 360 × (1 − 1/φ). Vogel's sunflower spacing. */
5
+ export const GOLDEN_ANGLE = 137.50776405003785;
6
+ const GOLDEN_RAD = (GOLDEN_ANGLE * Math.PI) / 180;
7
+ /** The first primes, used for timings that should never fall into step. */
8
+ export const PRIMES = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37];
9
+ /** First Fibonacci numbers (1, 1, 2, 3, 5, …). */
10
+ export function fibonacci(n) {
11
+ const out = [];
12
+ let a = 1;
13
+ let b = 1;
14
+ for (let i = 0; i < n; i++) {
15
+ out.push(a);
16
+ [a, b] = [b, a + b];
17
+ }
18
+ return out;
19
+ }
20
+ /** Mulberry32: a tiny seeded PRNG, uniform in [0, 1). */
21
+ export function seeded(seed) {
22
+ let t = seed >>> 0;
23
+ return () => {
24
+ t = (t + 0x6d2b79f5) >>> 0;
25
+ let r = Math.imul(t ^ (t >>> 15), 1 | t);
26
+ r = (r + Math.imul(r ^ (r >>> 7), 61 | r)) ^ r;
27
+ return ((r ^ (r >>> 14)) >>> 0) / 4294967296;
28
+ };
29
+ }
30
+ /** Vogel's spiral: point `i` of `n` on a unit disc, golden-angle spaced. */
31
+ export function vogel(i, n) {
32
+ const r = Math.sqrt((i + 0.5) / n);
33
+ const a = i * GOLDEN_RAD;
34
+ return { x: r * Math.cos(a), y: r * Math.sin(a), r, a };
35
+ }
36
+ /** Points of a Lissajous figure x = sin(a·t + δ), y = sin(b·t), as an SVG path on a box of `size`. */
37
+ export function lissajousPath(a, b, size, delta = Math.PI / 2, steps = 160) {
38
+ const h = size / 2;
39
+ let d = '';
40
+ for (let i = 0; i <= steps; i++) {
41
+ const t = (i / steps) * Math.PI * 2;
42
+ const x = h + h * Math.sin(a * t + delta);
43
+ const y = h + h * Math.sin(b * t);
44
+ d += `${i ? 'L' : 'M'}${x.toFixed(2)} ${y.toFixed(2)}`;
45
+ }
46
+ return `${d}Z`;
47
+ }
48
+ /** Round to 2 dp for stable SVG/CSS output. */
49
+ export const r2 = (n) => Math.round(n * 100) / 100;
50
+ /** The four-point north star, centred on (x, y) with outer radius `o` and waist `w`. */
51
+ export function starPath(x, y, o, w = o * 0.2) {
52
+ const p = (a, b) => `${r2(a)} ${r2(b)}`;
53
+ return `M${p(x, y - o)} L${p(x + w, y - w)} L${p(x + o, y)} L${p(x + w, y + w)} L${p(x, y + o)} L${p(x - w, y + w)} L${p(x - o, y)} L${p(x - w, y - w)}Z`;
54
+ }
55
+ export const clamp = (n, lo, hi) => Math.min(hi, Math.max(lo, n));
56
+ //# sourceMappingURL=math.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"math.js","sourceRoot":"","sources":["../../src/effects/math.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ export interface MeridianTab {
2
+ value: string;
3
+ label: React.ReactNode;
4
+ content: React.ReactNode;
5
+ disabled?: boolean;
6
+ }
7
+ export interface MeridianTabsProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange' | 'defaultValue'> {
8
+ tabs: MeridianTab[];
9
+ value?: string;
10
+ defaultValue?: string;
11
+ onValueChange?: (value: string) => void;
12
+ /** Accessible name of the tab list. */
13
+ label: string;
14
+ }
15
+ /**
16
+ * Tabs whose indicator is a star that travels to the chosen tab along a short
17
+ * arc (a meridian seen edge-on), while the rule under the tab stretches to
18
+ * fit. Arrow keys, Home and End move and select, as in the WAI-ARIA pattern.
19
+ */
20
+ export declare function MeridianTabs({ tabs, value, defaultValue, onValueChange, label, className, ...rest }: MeridianTabsProps): import("react/jsx-runtime").JSX.Element;
21
+ export interface StarPaginationProps extends Omit<React.HTMLAttributes<HTMLElement>, 'onChange'> {
22
+ count: number;
23
+ page?: number;
24
+ defaultPage?: number;
25
+ onPageChange?: (page: number) => void;
26
+ /** Accessible name. Default "Pagination". */
27
+ label?: string;
28
+ /** Dots shown at once when there are many pages. Default 7. */
29
+ window?: number;
30
+ pageLabel?: (n: number) => string;
31
+ previousLabel?: string;
32
+ nextLabel?: string;
33
+ }
34
+ /**
35
+ * Pagination as a row of stars: the current page is a four-point star, the
36
+ * others are points of light, and the dots at the edge of a long run dim and
37
+ * shrink, the way a field thins toward the horizon.
38
+ */
39
+ export declare function StarPagination({ count, page, defaultPage, onPageChange, label, window: shown, pageLabel, previousLabel, nextLabel, className, ...rest }: StarPaginationProps): import("react/jsx-runtime").JSX.Element;
40
+ export interface ConstellationCrumb {
41
+ label: React.ReactNode;
42
+ href?: string;
43
+ }
44
+ export interface ConstellationBreadcrumbProps extends React.HTMLAttributes<HTMLElement> {
45
+ items: ConstellationCrumb[];
46
+ /** Accessible name. Default "Breadcrumbs". */
47
+ label?: string;
48
+ }
49
+ /**
50
+ * Breadcrumbs as a constellation path: each level is a star joined to the
51
+ * next by a line, magnitudes brightening toward the current page. Hovering
52
+ * or focusing a crumb lights its star.
53
+ */
54
+ export declare function ConstellationBreadcrumb({ items, label, className, ...rest }: ConstellationBreadcrumbProps): import("react/jsx-runtime").JSX.Element;
55
+ //# sourceMappingURL=navigation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"navigation.d.ts","sourceRoot":"","sources":["../../src/effects/navigation.tsx"],"names":[],"mappings":"AASA,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,iBAAkB,SAAQ,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,UAAU,GAAG,cAAc,CAAC;IAChH,IAAI,EAAE,WAAW,EAAE,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,uCAAuC;IACvC,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,EAAE,iBAAiB,2CAqGtH;AAID,MAAM,WAAW,mBAAoB,SAAQ,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,UAAU,CAAC;IAC9F,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,6CAA6C;IAC7C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+DAA+D;IAC/D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IAClC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,EAC7B,KAAK,EACL,IAAI,EACJ,WAAe,EACf,YAAY,EACZ,KAAoB,EACpB,MAAM,EAAE,KAAS,EACjB,SAA8B,EAC9B,aAA+B,EAC/B,SAAuB,EACvB,SAAS,EACT,GAAG,IAAI,EACR,EAAE,mBAAmB,2CA8CrB;AAID,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,4BAA6B,SAAQ,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC;IACrF,KAAK,EAAE,kBAAkB,EAAE,CAAC;IAC5B,8CAA8C;IAC9C,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,EAAE,KAAK,EAAE,KAAqB,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,EAAE,4BAA4B,2CA2BzH"}
@@ -0,0 +1,103 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useCallback, useEffect, useId, useRef, useState } from 'react';
4
+ import { cx, useControllable, useIsoLayoutEffect } from './hooks.js';
5
+ import { clamp, starPath } from './math.js';
6
+ const STAR = starPath(6, 6, 5.5, 1.2);
7
+ /**
8
+ * Tabs whose indicator is a star that travels to the chosen tab along a short
9
+ * arc (a meridian seen edge-on), while the rule under the tab stretches to
10
+ * fit. Arrow keys, Home and End move and select, as in the WAI-ARIA pattern.
11
+ */
12
+ export function MeridianTabs({ tabs, value, defaultValue, onValueChange, label, className, ...rest }) {
13
+ const base = useId();
14
+ const [current, setCurrent] = useControllable(value, defaultValue ?? tabs[0]?.value ?? '', onValueChange);
15
+ const list = useRef(null);
16
+ const buttons = useRef(new Map());
17
+ const [box, setBox] = useState(null);
18
+ const [ready, setReady] = useState(false);
19
+ const [hops, setHops] = useState(0);
20
+ const last = useRef(current);
21
+ useEffect(() => {
22
+ if (last.current !== current)
23
+ setHops((h) => h + 1);
24
+ last.current = current;
25
+ }, [current]);
26
+ const measure = useCallback(() => {
27
+ const el = buttons.current.get(current);
28
+ if (el)
29
+ setBox({ x: el.offsetLeft, w: el.offsetWidth });
30
+ }, [current]);
31
+ useIsoLayoutEffect(() => {
32
+ measure();
33
+ }, [measure]);
34
+ useEffect(() => {
35
+ const id = requestAnimationFrame(() => setReady(true));
36
+ if (typeof ResizeObserver === 'undefined' || !list.current)
37
+ return () => cancelAnimationFrame(id);
38
+ const ro = new ResizeObserver(() => measure());
39
+ ro.observe(list.current);
40
+ return () => {
41
+ cancelAnimationFrame(id);
42
+ ro.disconnect();
43
+ };
44
+ }, [measure]);
45
+ const enabled = tabs.filter((t) => !t.disabled);
46
+ function onKeyDown(e) {
47
+ const i = enabled.findIndex((t) => t.value === current);
48
+ let next;
49
+ if (e.key === 'ArrowRight')
50
+ next = enabled[(i + 1) % enabled.length];
51
+ else if (e.key === 'ArrowLeft')
52
+ next = enabled[(i - 1 + enabled.length) % enabled.length];
53
+ else if (e.key === 'Home')
54
+ next = enabled[0];
55
+ else if (e.key === 'End')
56
+ next = enabled[enabled.length - 1];
57
+ if (!next)
58
+ return;
59
+ e.preventDefault();
60
+ setCurrent(next.value);
61
+ buttons.current.get(next.value)?.focus();
62
+ }
63
+ return (_jsxs("div", { ...rest, className: cx('ns-fx-mtabs', className), "data-ready": ready || undefined, children: [_jsxs("div", { ref: list, role: "tablist", "aria-label": label, className: "ns-fx-mtabs__list", onKeyDown: onKeyDown, children: [tabs.map((t) => {
64
+ const selected = t.value === current;
65
+ return (_jsx("button", { type: "button", role: "tab", id: `${base}-tab-${t.value}`, "aria-controls": `${base}-panel-${t.value}`, "aria-selected": selected, tabIndex: selected ? 0 : -1, disabled: t.disabled, ref: (el) => {
66
+ if (el)
67
+ buttons.current.set(t.value, el);
68
+ else
69
+ buttons.current.delete(t.value);
70
+ }, className: "ns-fx-mtabs__tab", onClick: () => setCurrent(t.value), children: t.label }, t.value));
71
+ }), box ? (_jsxs("span", { className: "ns-fx-mtabs__track", "aria-hidden": "true", style: { '--ns-fx-x': `${box.x}px`, '--ns-fx-w': box.w }, children: [_jsx("span", { className: "ns-fx-mtabs__bar" }), _jsx("span", { className: "ns-fx-mtabs__carrier", children: _jsx("span", { className: cx('ns-fx-mtabs__hop', hops > 0 && 'ns-fx-mtabs__hop--go'), children: _jsx("svg", { viewBox: "0 0 12 12", width: "10", height: "10", focusable: "false", children: _jsx("path", { d: STAR }) }) }, hops) })] })) : null] }), tabs.map((t) => (_jsx("div", { role: "tabpanel", id: `${base}-panel-${t.value}`, "aria-labelledby": `${base}-tab-${t.value}`, hidden: t.value !== current, tabIndex: 0, className: "ns-fx-mtabs__panel", children: t.value === current ? t.content : null }, t.value)))] }));
72
+ }
73
+ /**
74
+ * Pagination as a row of stars: the current page is a four-point star, the
75
+ * others are points of light, and the dots at the edge of a long run dim and
76
+ * shrink, the way a field thins toward the horizon.
77
+ */
78
+ export function StarPagination({ count, page, defaultPage = 1, onPageChange, label = 'Pagination', window: shown = 7, pageLabel = (n) => `Page ${n}`, previousLabel = 'Previous page', nextLabel = 'Next page', className, ...rest }) {
79
+ const [p, setP] = useControllable(page, defaultPage, onPageChange);
80
+ const cur = clamp(p, 1, Math.max(1, count));
81
+ const size = Math.min(count, Math.max(3, shown));
82
+ const start = clamp(cur - Math.floor(size / 2), 1, Math.max(1, count - size + 1));
83
+ const pages = Array.from({ length: size }, (_, i) => start + i);
84
+ const go = (n) => setP(clamp(n, 1, count));
85
+ const arrow = (d) => (_jsx("svg", { viewBox: "0 0 16 16", width: "14", height: "14", "aria-hidden": "true", focusable: "false", children: _jsx("path", { d: d, fill: "none", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" }) }));
86
+ return (_jsxs("nav", { ...rest, "aria-label": label, className: cx('ns-fx-spage', className), children: [_jsx("button", { type: "button", className: "ns-fx-spage__step", "aria-label": previousLabel, disabled: cur <= 1, onClick: () => go(cur - 1), children: arrow('M10 3.5 5.5 8 10 12.5') }), _jsx("ul", { className: "ns-fx-spage__dots", children: pages.map((n) => {
87
+ const edge = count > size && ((n === start && start > 1) || (n === start + size - 1 && n < count));
88
+ return (_jsx("li", { children: _jsxs("button", { type: "button", className: cx('ns-fx-spage__dot', edge && 'ns-fx-spage__dot--edge'), "aria-label": pageLabel(n), "aria-current": n === cur ? 'page' : undefined, onClick: () => go(n), children: [_jsx("i", { className: "ns-fx-spage__point" }), _jsx("svg", { className: "ns-fx-spage__star", viewBox: "0 0 12 12", focusable: "false", "aria-hidden": "true", children: _jsx("path", { d: STAR }) })] }) }, n));
89
+ }) }), _jsx("button", { type: "button", className: "ns-fx-spage__step", "aria-label": nextLabel, disabled: cur >= count, onClick: () => go(cur + 1), children: arrow('M6 3.5 10.5 8 6 12.5') }), _jsxs("span", { className: "ns-fx-spage__readout", "aria-hidden": "true", children: [cur, " / ", count] })] }));
90
+ }
91
+ /**
92
+ * Breadcrumbs as a constellation path: each level is a star joined to the
93
+ * next by a line, magnitudes brightening toward the current page. Hovering
94
+ * or focusing a crumb lights its star.
95
+ */
96
+ export function ConstellationBreadcrumb({ items, label = 'Breadcrumbs', className, ...rest }) {
97
+ return (_jsx("nav", { ...rest, "aria-label": label, className: cx('ns-fx-crumbs', className), children: _jsx("ol", { className: "ns-fx-crumbs__list", children: items.map((item, i) => {
98
+ const last = i === items.length - 1;
99
+ const mag = items.length > 1 ? 0.55 + (0.45 * i) / (items.length - 1) : 1;
100
+ return (_jsxs("li", { className: "ns-fx-crumbs__item", style: { '--ns-fx-mag': mag.toFixed(2), '--ns-fx-i': i }, children: [_jsx("svg", { className: "ns-fx-crumbs__star", viewBox: "0 0 12 12", "aria-hidden": "true", focusable: "false", children: _jsx("path", { d: STAR }) }), last || !item.href ? (_jsx("span", { className: "ns-fx-crumbs__current", "aria-current": last ? 'page' : undefined, children: item.label })) : (_jsx("a", { className: "ns-fx-crumbs__link", href: item.href, children: item.label }))] }, i));
101
+ }) }) }));
102
+ }
103
+ //# sourceMappingURL=navigation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"navigation.js","sourceRoot":"","sources":["../../src/effects/navigation.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ export interface TooltipCompassProps {
2
+ content: React.ReactNode;
3
+ /** The trigger: one focusable element. It receives `aria-describedby` while the tooltip shows. */
4
+ children: React.ReactElement<{
5
+ 'aria-describedby'?: string | undefined;
6
+ }>;
7
+ side?: 'top' | 'bottom';
8
+ /** Hover delay in ms before showing. Default 250. Focus shows at once. */
9
+ delay?: number;
10
+ className?: string;
11
+ }
12
+ /**
13
+ * A tooltip whose arrow is a compass needle: it swings in and settles
14
+ * pointing at its trigger, Glacier end toward the thing described. Shows on
15
+ * hover and keyboard focus, hides on leave, blur and Escape.
16
+ */
17
+ export declare function TooltipCompass({ content, children, side, delay, className }: TooltipCompassProps): import("react/jsx-runtime").JSX.Element;
18
+ export interface ToastCometProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {
19
+ title: React.ReactNode;
20
+ description?: React.ReactNode;
21
+ /** Optional action, such as a Button. */
22
+ action?: React.ReactNode;
23
+ /** Visibility. When it turns false the toast leaves, then unmounts. Default true. */
24
+ open?: boolean;
25
+ onDismiss?: () => void;
26
+ dismissLabel?: string;
27
+ }
28
+ /**
29
+ * A toast that arrives like a comet: it comes in along a short arc (two
30
+ * axes on different curves) with a tail of light that thins and fades as it
31
+ * settles. Announced politely as a status. Reduced motion: it just appears.
32
+ */
33
+ export declare function ToastComet({ title, description, action, open, onDismiss, dismissLabel, className, ...rest }: ToastCometProps): import("react/jsx-runtime").JSX.Element | null;
34
+ //# sourceMappingURL=overlays.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"overlays.d.ts","sourceRoot":"","sources":["../../src/effects/overlays.tsx"],"names":[],"mappings":"AAMA,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,kGAAkG;IAClG,QAAQ,EAAE,KAAK,CAAC,YAAY,CAAC;QAAE,kBAAkB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAAE,CAAC,CAAC;IAC1E,IAAI,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC;IACxB,0EAA0E;IAC1E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAY,EAAE,KAAW,EAAE,SAAS,EAAE,EAAE,mBAAmB,2CAyC9G;AAID,MAAM,WAAW,eAAgB,SAAQ,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IAC1F,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,yCAAyC;IACzC,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,qFAAqF;IACrF,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,IAAW,EAAE,SAAS,EAAE,YAAwB,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,EAAE,eAAe,kDAuC/I"}
@@ -0,0 +1,56 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { cloneElement, useEffect, useId, useRef, useState } from 'react';
4
+ import { cx, reducedMotionNow, useTimers } from './hooks.js';
5
+ /**
6
+ * A tooltip whose arrow is a compass needle: it swings in and settles
7
+ * pointing at its trigger, Glacier end toward the thing described. Shows on
8
+ * hover and keyboard focus, hides on leave, blur and Escape.
9
+ */
10
+ export function TooltipCompass({ content, children, side = 'top', delay = 250, className }) {
11
+ const id = useId();
12
+ const [open, setOpen] = useState(false);
13
+ const timer = useRef(undefined);
14
+ useEffect(() => () => clearTimeout(timer.current), []);
15
+ const show = (ms) => {
16
+ clearTimeout(timer.current);
17
+ timer.current = setTimeout(() => setOpen(true), ms);
18
+ };
19
+ const hide = () => {
20
+ clearTimeout(timer.current);
21
+ setOpen(false);
22
+ };
23
+ const described = [children.props['aria-describedby'], open ? id : null].filter(Boolean).join(' ') || undefined;
24
+ return (_jsxs("span", { className: cx('ns-fx-tipc', className), "data-side": side, onPointerEnter: (e) => e.pointerType !== 'touch' && show(delay), onPointerLeave: hide, onFocus: () => show(0), onBlur: hide, onKeyDown: (e) => {
25
+ if (e.key === 'Escape' && open) {
26
+ e.stopPropagation();
27
+ hide();
28
+ }
29
+ }, children: [cloneElement(children, { 'aria-describedby': described }), open ? (_jsxs("span", { role: "tooltip", id: id, className: "ns-fx-tipc__bubble", children: [content, _jsxs("svg", { className: "ns-fx-tipc__needle", viewBox: "0 0 10 16", "aria-hidden": "true", focusable: "false", children: [_jsx("path", { className: "ns-fx-tipc__tail", d: "M5 0 7.2 8H2.8Z" }), _jsx("path", { className: "ns-fx-tipc__head", d: "M5 16 2.8 8H7.2Z" })] })] })) : null] }));
30
+ }
31
+ /**
32
+ * A toast that arrives like a comet: it comes in along a short arc (two
33
+ * axes on different curves) with a tail of light that thins and fades as it
34
+ * settles. Announced politely as a status. Reduced motion: it just appears.
35
+ */
36
+ export function ToastComet({ title, description, action, open = true, onDismiss, dismissLabel = 'Dismiss', className, ...rest }) {
37
+ const [present, setPresent] = useState(open);
38
+ const [leaving, setLeaving] = useState(false);
39
+ const after = useTimers();
40
+ useEffect(() => {
41
+ if (open) {
42
+ setPresent(true);
43
+ setLeaving(false);
44
+ }
45
+ else if (present) {
46
+ if (reducedMotionNow())
47
+ return setPresent(false);
48
+ setLeaving(true);
49
+ after(() => setPresent(false), 220);
50
+ }
51
+ }, [open]);
52
+ if (!present)
53
+ return null;
54
+ return (_jsx("div", { ...rest, role: "status", className: cx('ns-fx-comet', className), "data-leaving": leaving || undefined, children: _jsx("div", { className: "ns-fx-comet__x", children: _jsxs("div", { className: "ns-fx-comet__y", children: [_jsx("span", { className: "ns-fx-comet__tail", "aria-hidden": "true" }), _jsxs("div", { className: "ns-fx-comet__card", children: [_jsx("span", { className: "ns-fx-comet__head", "aria-hidden": "true" }), _jsxs("div", { className: "ns-fx-comet__text", children: [_jsx("div", { className: "ns-fx-comet__title", children: title }), description ? _jsx("div", { className: "ns-fx-comet__desc", children: description }) : null] }), action ? _jsx("div", { className: "ns-fx-comet__action", children: action }) : null, onDismiss ? (_jsx("button", { type: "button", className: "ns-fx-comet__close", "aria-label": dismissLabel, onClick: onDismiss, 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] })] }) }) }));
55
+ }
56
+ //# sourceMappingURL=overlays.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"overlays.js","sourceRoot":"","sources":["../../src/effects/overlays.tsx"],"names":[],"mappings":"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"}