@northstar-js/react 0.0.0-stage → 0.1.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 (104) hide show
  1. package/LICENSE +21 -0
  2. package/dist/actions.d.ts +32 -0
  3. package/dist/actions.d.ts.map +1 -0
  4. package/dist/actions.js +15 -0
  5. package/dist/actions.js.map +1 -0
  6. package/dist/data.d.ts +80 -0
  7. package/dist/data.d.ts.map +1 -0
  8. package/dist/data.js +60 -0
  9. package/dist/data.js.map +1 -0
  10. package/dist/feedback.d.ts +50 -0
  11. package/dist/feedback.d.ts.map +1 -0
  12. package/dist/feedback.js +60 -0
  13. package/dist/feedback.js.map +1 -0
  14. package/dist/forms.d.ts +130 -0
  15. package/dist/forms.d.ts.map +1 -0
  16. package/dist/forms.js +241 -0
  17. package/dist/forms.js.map +1 -0
  18. package/dist/illustrations/data.d.ts +103 -0
  19. package/dist/illustrations/data.d.ts.map +1 -0
  20. package/dist/illustrations/data.js +3 -0
  21. package/dist/illustrations/data.js.map +1 -0
  22. package/dist/illustrations/index.d.ts +110 -0
  23. package/dist/illustrations/index.d.ts.map +1 -0
  24. package/dist/illustrations/index.js +54 -0
  25. package/dist/illustrations/index.js.map +1 -0
  26. package/dist/illustrations/types.d.ts +30 -0
  27. package/dist/illustrations/types.d.ts.map +1 -0
  28. package/dist/illustrations/types.js +2 -0
  29. package/dist/illustrations/types.js.map +1 -0
  30. package/dist/index.d.ts +18 -0
  31. package/dist/index.d.ts.map +1 -0
  32. package/dist/index.js +9 -0
  33. package/dist/index.js.map +1 -0
  34. package/dist/internal/icons.d.ts +9 -0
  35. package/dist/internal/icons.d.ts.map +1 -0
  36. package/dist/internal/icons.js +12 -0
  37. package/dist/internal/icons.js.map +1 -0
  38. package/dist/internal/layers.d.ts +12 -0
  39. package/dist/internal/layers.d.ts.map +1 -0
  40. package/dist/internal/layers.js +108 -0
  41. package/dist/internal/layers.js.map +1 -0
  42. package/dist/internal/util.d.ts +9 -0
  43. package/dist/internal/util.d.ts.map +1 -0
  44. package/dist/internal/util.js +33 -0
  45. package/dist/internal/util.js.map +1 -0
  46. package/dist/layout.d.ts +34 -0
  47. package/dist/layout.d.ts.map +1 -0
  48. package/dist/layout.js +27 -0
  49. package/dist/layout.js.map +1 -0
  50. package/dist/navigation.d.ts +63 -0
  51. package/dist/navigation.d.ts.map +1 -0
  52. package/dist/navigation.js +87 -0
  53. package/dist/navigation.js.map +1 -0
  54. package/dist/northstar/BriefForm.d.ts +23 -0
  55. package/dist/northstar/BriefForm.d.ts.map +1 -0
  56. package/dist/northstar/BriefForm.js +40 -0
  57. package/dist/northstar/BriefForm.js.map +1 -0
  58. package/dist/northstar/ExportMenu.d.ts +14 -0
  59. package/dist/northstar/ExportMenu.d.ts.map +1 -0
  60. package/dist/northstar/ExportMenu.js +11 -0
  61. package/dist/northstar/ExportMenu.js.map +1 -0
  62. package/dist/northstar/PopulationPanel.d.ts +30 -0
  63. package/dist/northstar/PopulationPanel.d.ts.map +1 -0
  64. package/dist/northstar/PopulationPanel.js +18 -0
  65. package/dist/northstar/PopulationPanel.js.map +1 -0
  66. package/dist/northstar/ResearchBuilder.d.ts +26 -0
  67. package/dist/northstar/ResearchBuilder.d.ts.map +1 -0
  68. package/dist/northstar/ResearchBuilder.js +81 -0
  69. package/dist/northstar/ResearchBuilder.js.map +1 -0
  70. package/dist/northstar/ResponsesView.d.ts +20 -0
  71. package/dist/northstar/ResponsesView.d.ts.map +1 -0
  72. package/dist/northstar/ResponsesView.js +42 -0
  73. package/dist/northstar/ResponsesView.js.map +1 -0
  74. package/dist/northstar/Run.d.ts +35 -0
  75. package/dist/northstar/Run.d.ts.map +1 -0
  76. package/dist/northstar/Run.js +31 -0
  77. package/dist/northstar/Run.js.map +1 -0
  78. package/dist/northstar/StudyShell.d.ts +28 -0
  79. package/dist/northstar/StudyShell.d.ts.map +1 -0
  80. package/dist/northstar/StudyShell.js +14 -0
  81. package/dist/northstar/StudyShell.js.map +1 -0
  82. package/dist/northstar/StudyStatus.d.ts +15 -0
  83. package/dist/northstar/StudyStatus.d.ts.map +1 -0
  84. package/dist/northstar/StudyStatus.js +24 -0
  85. package/dist/northstar/StudyStatus.js.map +1 -0
  86. package/dist/northstar/index.d.ts +10 -0
  87. package/dist/northstar/index.d.ts.map +1 -0
  88. package/dist/northstar/index.js +10 -0
  89. package/dist/northstar/index.js.map +1 -0
  90. package/dist/northstar/messages.d.ts +84 -0
  91. package/dist/northstar/messages.d.ts.map +1 -0
  92. package/dist/northstar/messages.js +107 -0
  93. package/dist/northstar/messages.js.map +1 -0
  94. package/dist/overlays.d.ts +111 -0
  95. package/dist/overlays.d.ts.map +1 -0
  96. package/dist/overlays.js +421 -0
  97. package/dist/overlays.js.map +1 -0
  98. package/dist/provider.d.ts +53 -0
  99. package/dist/provider.d.ts.map +1 -0
  100. package/dist/provider.js +114 -0
  101. package/dist/provider.js.map +1 -0
  102. package/dist/styles.css +971 -0
  103. package/package.json +71 -3
  104. package/README.md +0 -3
@@ -0,0 +1,421 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import { cloneElement, createContext, isValidElement, useContext, useEffect, useId, useLayoutEffect, useRef, useState } from 'react';
4
+ import { Portal, useNorthstar } from './provider.js';
5
+ import { useDismiss, useFocusTrap, rovingKeyDown } from './internal/layers.js';
6
+ import { cx, mergeRefs, useControllable } from './internal/util.js';
7
+ import { Close as CloseGlyph } from './internal/icons.js';
8
+ const useIsoLayoutEffect = typeof window === 'undefined' ? useEffect : useLayoutEffect;
9
+ function useLayerState({ open, defaultOpen, onOpenChange }) {
10
+ const [isOpen, setOpen] = useControllable(open, defaultOpen ?? false, onOpenChange);
11
+ const id = useId().replace(/:/g, '');
12
+ const [described, setDescribed] = useState(false);
13
+ return {
14
+ described,
15
+ setDescribed,
16
+ open: isOpen,
17
+ setOpen,
18
+ triggerRef: useRef(null),
19
+ contentRef: useRef(null),
20
+ contentId: `ns-layer-${id}`,
21
+ titleId: `ns-layer-${id}-title`,
22
+ descriptionId: `ns-layer-${id}-desc`,
23
+ };
24
+ }
25
+ function useLayer(ctx, name) {
26
+ const v = useContext(ctx);
27
+ if (!v)
28
+ throw new Error(`<${name}> must be used inside its Root`);
29
+ return v;
30
+ }
31
+ function renderTrigger(props, extra, ref) {
32
+ const { asChild, children, ...rest } = props;
33
+ if (asChild && isValidElement(children)) {
34
+ const child = children;
35
+ const childOnClick = child.props.onClick;
36
+ const extraOnClick = extra.onClick;
37
+ return cloneElement(child, {
38
+ ...rest,
39
+ ...extra,
40
+ ref,
41
+ onClick: (e) => {
42
+ childOnClick?.(e);
43
+ extraOnClick?.(e);
44
+ },
45
+ });
46
+ }
47
+ return (_jsx("button", { type: "button", ...rest, ...extra, ref: ref, children: children }));
48
+ }
49
+ /* ----------------------------------------------------------------- Dialog */
50
+ const DialogContext = createContext(null);
51
+ function DialogRoot(props) {
52
+ const state = useLayerState(props);
53
+ return _jsx(DialogContext.Provider, { value: state, children: props.children });
54
+ }
55
+ function DialogTrigger(props) {
56
+ const ctx = useLayer(DialogContext, 'Dialog.Trigger');
57
+ return renderTrigger(props, {
58
+ 'aria-haspopup': 'dialog',
59
+ 'aria-expanded': ctx.open,
60
+ 'aria-controls': ctx.open ? ctx.contentId : undefined,
61
+ onClick: (e) => {
62
+ props.onClick?.(e);
63
+ ctx.setOpen(true);
64
+ },
65
+ }, mergeRefs(props.ref, ctx.triggerRef));
66
+ }
67
+ function ModalSurface({ ctx, kind, side = 'right', dismissOnOutside = true, size = 'md', className, children, ...rest }) {
68
+ useDismiss(ctx.open, [ctx.contentRef], () => ctx.setOpen(false), { outside: dismissOnOutside });
69
+ useFocusTrap(ctx.open, ctx.contentRef);
70
+ useEffect(() => {
71
+ if (!ctx.open)
72
+ return;
73
+ const prev = document.body.style.overflow;
74
+ document.body.style.overflow = 'hidden';
75
+ return () => {
76
+ document.body.style.overflow = prev;
77
+ };
78
+ }, [ctx.open]);
79
+ if (!ctx.open)
80
+ return null;
81
+ return (_jsxs(Portal, { children: [_jsx("div", { className: cx('ns-overlay', `ns-overlay--${kind}`), "aria-hidden": "true" }), _jsx("div", { role: "dialog", "aria-modal": "true", "aria-labelledby": ctx.titleId, "aria-describedby": ctx.described ? ctx.descriptionId : undefined, tabIndex: -1, id: ctx.contentId, ...rest, ref: ctx.contentRef, className: cx(kind === 'dialog' ? 'ns-dialog' : 'ns-sheet', kind === 'dialog' ? `ns-dialog--${size}` : `ns-sheet--${side}`, className), children: children })] }));
82
+ }
83
+ function DialogContent(props) {
84
+ const ctx = useLayer(DialogContext, 'Dialog.Content');
85
+ return _jsx(ModalSurface, { ...props, ctx: ctx, kind: "dialog" });
86
+ }
87
+ function makeTitle(context, name) {
88
+ return function Title({ className, ...rest }) {
89
+ const ctx = useLayer(context, name);
90
+ return _jsx("h2", { id: ctx.titleId, ...rest, className: cx('ns-layer__title', className) });
91
+ };
92
+ }
93
+ function makeDescription(context, name) {
94
+ return function Description({ className, ...rest }) {
95
+ const ctx = useLayer(context, name);
96
+ const { setDescribed } = ctx;
97
+ useEffect(() => {
98
+ setDescribed(true);
99
+ return () => setDescribed(false);
100
+ }, [setDescribed]);
101
+ return _jsx("p", { id: ctx.descriptionId, ...rest, className: cx('ns-layer__description', className) });
102
+ };
103
+ }
104
+ function makeClose(context, name) {
105
+ return function Close(props) {
106
+ const ctx = useLayer(context, name);
107
+ const { messages } = useNorthstar();
108
+ const { children, className, ...rest } = props;
109
+ if (children === undefined) {
110
+ return (_jsx("button", { type: "button", "aria-label": messages.close, ...rest, className: cx('ns-layer__close ns-button ns-button--ghost ns-size-sm ns-icon-button', className), onClick: (e) => {
111
+ props.onClick?.(e);
112
+ ctx.setOpen(false);
113
+ }, children: _jsx(CloseGlyph, {}) }));
114
+ }
115
+ return renderTrigger({ ...rest, className, children }, {
116
+ onClick: (e) => {
117
+ props.onClick?.(e);
118
+ ctx.setOpen(false);
119
+ },
120
+ }, props.ref ?? null);
121
+ };
122
+ }
123
+ function Footer({ className, ...rest }) {
124
+ return _jsx("div", { ...rest, className: cx('ns-layer__footer', className) });
125
+ }
126
+ function Body({ className, ...rest }) {
127
+ return _jsx("div", { ...rest, className: cx('ns-layer__body', className) });
128
+ }
129
+ function Header({ className, ...rest }) {
130
+ return _jsx("div", { ...rest, className: cx('ns-layer__header', className) });
131
+ }
132
+ /** Modal dialog: focus trap, Escape and overlay dismiss, focus restored to the trigger. */
133
+ export const Dialog = {
134
+ Root: DialogRoot,
135
+ Trigger: DialogTrigger,
136
+ Content: DialogContent,
137
+ Header,
138
+ Title: makeTitle(DialogContext, 'Dialog.Title'),
139
+ Description: makeDescription(DialogContext, 'Dialog.Description'),
140
+ Body,
141
+ Footer,
142
+ Close: makeClose(DialogContext, 'Dialog.Close'),
143
+ };
144
+ /* ------------------------------------------------------------------ Sheet */
145
+ const SheetContext = createContext(null);
146
+ function SheetRoot(props) {
147
+ const state = useLayerState(props);
148
+ return _jsx(SheetContext.Provider, { value: state, children: props.children });
149
+ }
150
+ function SheetTrigger(props) {
151
+ const ctx = useLayer(SheetContext, 'Sheet.Trigger');
152
+ return renderTrigger(props, {
153
+ 'aria-haspopup': 'dialog',
154
+ 'aria-expanded': ctx.open,
155
+ onClick: (e) => {
156
+ props.onClick?.(e);
157
+ ctx.setOpen(true);
158
+ },
159
+ }, mergeRefs(props.ref, ctx.triggerRef));
160
+ }
161
+ function SheetContent(props) {
162
+ const ctx = useLayer(SheetContext, 'Sheet.Content');
163
+ return _jsx(ModalSurface, { ...props, ctx: ctx, kind: "sheet" });
164
+ }
165
+ /** A modal panel from the edge of the screen. Same behaviour as Dialog. */
166
+ export const Sheet = {
167
+ Root: SheetRoot,
168
+ Trigger: SheetTrigger,
169
+ Content: SheetContent,
170
+ Header,
171
+ Title: makeTitle(SheetContext, 'Sheet.Title'),
172
+ Description: makeDescription(SheetContext, 'Sheet.Description'),
173
+ Body,
174
+ Footer,
175
+ Close: makeClose(SheetContext, 'Sheet.Close'),
176
+ };
177
+ function usePosition(open, anchor, floating, side, align, offset = 6) {
178
+ const [pos, setPos] = useState(null);
179
+ useIsoLayoutEffect(() => {
180
+ if (!open)
181
+ return;
182
+ const update = () => {
183
+ const a = anchor.current?.getBoundingClientRect();
184
+ const f = floating.current?.getBoundingClientRect();
185
+ if (!a || !f)
186
+ return;
187
+ let top = 0;
188
+ let left = 0;
189
+ const vertical = side === 'top' || side === 'bottom';
190
+ if (vertical) {
191
+ top = side === 'bottom' ? a.bottom + offset : a.top - f.height - offset;
192
+ left = align === 'start' ? a.left : align === 'end' ? a.right - f.width : a.left + (a.width - f.width) / 2;
193
+ }
194
+ else {
195
+ left = side === 'right' ? a.right + offset : a.left - f.width - offset;
196
+ top = align === 'start' ? a.top : align === 'end' ? a.bottom - f.height : a.top + (a.height - f.height) / 2;
197
+ }
198
+ const vw = window.innerWidth;
199
+ const vh = window.innerHeight;
200
+ left = Math.max(8, Math.min(left, vw - f.width - 8));
201
+ top = Math.max(8, Math.min(top, vh - f.height - 8));
202
+ setPos({ top, left });
203
+ };
204
+ update();
205
+ window.addEventListener('resize', update);
206
+ window.addEventListener('scroll', update, true);
207
+ return () => {
208
+ window.removeEventListener('resize', update);
209
+ window.removeEventListener('scroll', update, true);
210
+ };
211
+ }, [open, side, align, offset]);
212
+ return pos;
213
+ }
214
+ /* ---------------------------------------------------------------- Popover */
215
+ const PopoverContext = createContext(null);
216
+ function PopoverRoot(props) {
217
+ const state = useLayerState(props);
218
+ return _jsx(PopoverContext.Provider, { value: state, children: props.children });
219
+ }
220
+ function PopoverTrigger(props) {
221
+ const ctx = useLayer(PopoverContext, 'Popover.Trigger');
222
+ return renderTrigger(props, {
223
+ 'aria-haspopup': 'dialog',
224
+ 'aria-expanded': ctx.open,
225
+ 'aria-controls': ctx.open ? ctx.contentId : undefined,
226
+ onClick: (e) => {
227
+ props.onClick?.(e);
228
+ ctx.setOpen(!ctx.open);
229
+ },
230
+ }, mergeRefs(props.ref, ctx.triggerRef));
231
+ }
232
+ function PopoverContent({ side = 'bottom', align = 'start', label, className, style, children, ...rest }) {
233
+ const ctx = useLayer(PopoverContext, 'Popover.Content');
234
+ const close = () => {
235
+ ctx.setOpen(false);
236
+ ctx.triggerRef.current?.focus();
237
+ };
238
+ useDismiss(ctx.open, [ctx.contentRef, ctx.triggerRef], close);
239
+ const pos = usePosition(ctx.open, ctx.triggerRef, ctx.contentRef, side, align);
240
+ useEffect(() => {
241
+ if (!ctx.open)
242
+ return;
243
+ const el = ctx.contentRef.current;
244
+ (el?.querySelector('[data-autofocus]') ?? el)?.focus();
245
+ }, [ctx.open]);
246
+ if (!ctx.open)
247
+ return null;
248
+ return (_jsx(Portal, { children: _jsx("div", { role: "dialog", "aria-label": label, "aria-labelledby": label ? undefined : ctx.titleId, tabIndex: -1, id: ctx.contentId, ...rest, ref: ctx.contentRef, "data-side": side, className: cx('ns-popover ns-pop', className), style: { ...style, top: pos?.top ?? 0, left: pos?.left ?? 0, visibility: pos ? undefined : 'hidden' }, onKeyDown: (e) => {
249
+ rest.onKeyDown?.(e);
250
+ // Tabbing out of a non-modal popover closes it.
251
+ if (e.key === 'Tab') {
252
+ const items = Array.from(e.currentTarget.querySelectorAll('a[href],button:not([disabled]),input,select,textarea,[tabindex="0"]'));
253
+ const last = items[items.length - 1];
254
+ if ((!e.shiftKey && document.activeElement === last) || items.length === 0) {
255
+ e.preventDefault();
256
+ close();
257
+ }
258
+ }
259
+ }, children: children }) }));
260
+ }
261
+ /** Non-modal floating panel anchored to its trigger. */
262
+ export const Popover = {
263
+ Root: PopoverRoot,
264
+ Trigger: PopoverTrigger,
265
+ Content: PopoverContent,
266
+ Title: makeTitle(PopoverContext, 'Popover.Title'),
267
+ Description: makeDescription(PopoverContext, 'Popover.Description'),
268
+ Close: makeClose(PopoverContext, 'Popover.Close'),
269
+ };
270
+ /* ------------------------------------------------------------------- Menu */
271
+ const MenuContext = createContext(null);
272
+ const ITEM = '[role="menuitem"],[role="menuitemcheckbox"],[role="menuitemradio"]';
273
+ function MenuRoot(props) {
274
+ const state = useLayerState(props);
275
+ return _jsx(MenuContext.Provider, { value: state, children: props.children });
276
+ }
277
+ // Which item gets focus when the menu opens.
278
+ let openFocus = 'first';
279
+ function MenuTrigger(props) {
280
+ const ctx = useLayer(MenuContext, 'Menu.Trigger');
281
+ return renderTrigger(props, {
282
+ 'aria-haspopup': 'menu',
283
+ 'aria-expanded': ctx.open,
284
+ 'aria-controls': ctx.open ? ctx.contentId : undefined,
285
+ onClick: (e) => {
286
+ props.onClick?.(e);
287
+ openFocus = 'first';
288
+ ctx.setOpen(!ctx.open);
289
+ },
290
+ onKeyDown: (e) => {
291
+ props.onKeyDown?.(e);
292
+ if (e.key === 'ArrowDown' || e.key === 'ArrowUp') {
293
+ e.preventDefault();
294
+ openFocus = e.key === 'ArrowUp' ? 'last' : 'first';
295
+ ctx.setOpen(true);
296
+ }
297
+ },
298
+ }, mergeRefs(props.ref, ctx.triggerRef));
299
+ }
300
+ function MenuContent({ side = 'bottom', align = 'start', className, style, children, ...rest }) {
301
+ const ctx = useLayer(MenuContext, 'Menu.Content');
302
+ const close = () => {
303
+ ctx.setOpen(false);
304
+ ctx.triggerRef.current?.focus();
305
+ };
306
+ useDismiss(ctx.open, [ctx.contentRef, ctx.triggerRef], close);
307
+ const pos = usePosition(ctx.open, ctx.triggerRef, ctx.contentRef, side, align, 4);
308
+ const typed = useRef({ text: '', at: 0 });
309
+ useEffect(() => {
310
+ if (!ctx.open)
311
+ return;
312
+ const items = Array.from(ctx.contentRef.current?.querySelectorAll(ITEM) ?? []).filter((el) => el.getAttribute('aria-disabled') !== 'true');
313
+ const which = openFocus;
314
+ openFocus = 'first';
315
+ (which === 'last' ? items[items.length - 1] : items[0])?.focus();
316
+ }, [ctx.open]);
317
+ if (!ctx.open)
318
+ return null;
319
+ return (_jsx(Portal, { children: _jsx("div", { role: "menu", "aria-labelledby": ctx.triggerRef.current?.id || undefined, "aria-orientation": "vertical", id: ctx.contentId, tabIndex: -1, ...rest, ref: ctx.contentRef, className: cx('ns-menu ns-pop', className), style: { ...style, top: pos?.top ?? 0, left: pos?.left ?? 0, visibility: pos ? undefined : 'hidden' }, onKeyDown: (e) => {
320
+ rest.onKeyDown?.(e);
321
+ if (rovingKeyDown(e, ITEM, 'vertical'))
322
+ return;
323
+ if (e.key === 'Tab') {
324
+ e.preventDefault();
325
+ close();
326
+ return;
327
+ }
328
+ if (e.key.length === 1 && /\S/.test(e.key)) {
329
+ const now = Date.now();
330
+ typed.current.text = now - typed.current.at > 600 ? e.key : typed.current.text + e.key;
331
+ typed.current.at = now;
332
+ const q = typed.current.text.toLowerCase();
333
+ const items = Array.from(e.currentTarget.querySelectorAll(ITEM));
334
+ items.find((el) => el.getAttribute('aria-disabled') !== 'true' && (el.textContent ?? '').trim().toLowerCase().startsWith(q))?.focus();
335
+ }
336
+ }, children: children }) }));
337
+ }
338
+ function MenuItem({ onSelect, disabled = false, shortcut, icon, className, children, ...rest }) {
339
+ const ctx = useLayer(MenuContext, 'Menu.Item');
340
+ const select = () => {
341
+ if (disabled)
342
+ return;
343
+ onSelect?.();
344
+ ctx.setOpen(false);
345
+ ctx.triggerRef.current?.focus();
346
+ };
347
+ return (_jsxs("div", { role: "menuitem", tabIndex: -1, "aria-disabled": disabled || undefined, ...rest, className: cx('ns-menu__item', className), onClick: (e) => {
348
+ rest.onClick?.(e);
349
+ select();
350
+ }, onKeyDown: (e) => {
351
+ rest.onKeyDown?.(e);
352
+ if (e.key === 'Enter' || e.key === ' ') {
353
+ e.preventDefault();
354
+ select();
355
+ }
356
+ }, onPointerMove: (e) => {
357
+ if (!disabled && document.activeElement !== e.currentTarget)
358
+ e.currentTarget.focus();
359
+ }, children: [icon && _jsx("span", { className: "ns-menu__icon", "aria-hidden": "true", children: icon }), _jsx("span", { className: "ns-menu__text", children: children }), shortcut && _jsx("span", { className: "ns-menu__shortcut", children: shortcut })] }));
360
+ }
361
+ function MenuSeparator({ className, ...rest }) {
362
+ return _jsx("div", { role: "separator", ...rest, className: cx('ns-menu__separator', className) });
363
+ }
364
+ function MenuLabel({ className, ...rest }) {
365
+ return _jsx("div", { role: "presentation", ...rest, className: cx('ns-menu__label', className) });
366
+ }
367
+ /** Action menu: arrow keys, Home/End, typeahead, Enter/Space to select, Escape to close. */
368
+ export const Menu = {
369
+ Root: MenuRoot,
370
+ Trigger: MenuTrigger,
371
+ Content: MenuContent,
372
+ Item: MenuItem,
373
+ Separator: MenuSeparator,
374
+ Label: MenuLabel,
375
+ };
376
+ /** Supplementary text on hover and focus; Escape hides it. Never the only label of a control. */
377
+ export function Tooltip({ content, children, side = 'top', align = 'center', delay = 400 }) {
378
+ const [open, setOpen] = useState(false);
379
+ const anchor = useRef(null);
380
+ const floating = useRef(null);
381
+ const timer = useRef(undefined);
382
+ const id = `ns-tooltip-${useId().replace(/:/g, '')}`;
383
+ const pos = usePosition(open, anchor, floating, side, align);
384
+ useDismiss(open, [], () => setOpen(false), { outside: false });
385
+ useEffect(() => () => clearTimeout(timer.current), []);
386
+ const show = (wait) => {
387
+ clearTimeout(timer.current);
388
+ if (wait <= 0)
389
+ setOpen(true);
390
+ else
391
+ timer.current = setTimeout(() => setOpen(true), wait);
392
+ };
393
+ const hide = () => {
394
+ clearTimeout(timer.current);
395
+ setOpen(false);
396
+ };
397
+ const child = children;
398
+ const p = child.props;
399
+ const call = (name, e) => p[name]?.(e);
400
+ return (_jsxs(_Fragment, { children: [cloneElement(child, {
401
+ ref: mergeRefs(p.ref, anchor),
402
+ 'aria-describedby': [p['aria-describedby'], open ? id : undefined].filter(Boolean).join(' ') || undefined,
403
+ onPointerEnter: (e) => {
404
+ call('onPointerEnter', e);
405
+ show(delay);
406
+ },
407
+ onPointerLeave: (e) => {
408
+ call('onPointerLeave', e);
409
+ hide();
410
+ },
411
+ onFocus: (e) => {
412
+ call('onFocus', e);
413
+ show(0);
414
+ },
415
+ onBlur: (e) => {
416
+ call('onBlur', e);
417
+ hide();
418
+ },
419
+ }), open && (_jsx(Portal, { children: _jsx("div", { id: id, role: "tooltip", ref: floating, className: "ns-tooltip", "data-side": side, style: { top: pos?.top ?? 0, left: pos?.left ?? 0, visibility: pos ? undefined : 'hidden' }, children: content }) }))] }));
420
+ }
421
+ //# sourceMappingURL=overlays.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"overlays.js","sourceRoot":"","sources":["../src/overlays.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ export type ThemeSetting = 'night' | 'day' | 'system';
2
+ export type ResolvedTheme = 'night' | 'day';
3
+ export type Density = 'compact' | 'default' | 'comfortable';
4
+ /** Every user-visible string the basic components render. English is the default. */
5
+ export interface Messages {
6
+ close: string;
7
+ dismiss: string;
8
+ loading: string;
9
+ clear: string;
10
+ search: string;
11
+ increment: string;
12
+ decrement: string;
13
+ breadcrumbs: string;
14
+ pagination: string;
15
+ previousPage: string;
16
+ nextPage: string;
17
+ page: (n: number) => string;
18
+ noResults: string;
19
+ stale: string;
20
+ notifications: string;
21
+ remove: (label: string) => string;
22
+ sidebar: string;
23
+ }
24
+ export declare const en: Messages;
25
+ export interface NorthstarContextValue {
26
+ theme: ThemeSetting;
27
+ resolvedTheme: ResolvedTheme;
28
+ density: Density;
29
+ messages: Messages;
30
+ setTheme: (theme: ThemeSetting) => void;
31
+ }
32
+ /** Theme, density and messages. Works without a provider (Night, default, English). */
33
+ export declare function useNorthstar(): NorthstarContextValue;
34
+ export interface NorthstarProviderProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'children'> {
35
+ theme?: ThemeSetting;
36
+ density?: Density;
37
+ messages?: Partial<Messages>;
38
+ /** Also write data-theme/data-density on <html> (for full-page apps). */
39
+ applyToDocument?: boolean;
40
+ onThemeChange?: (theme: ThemeSetting) => void;
41
+ children?: React.ReactNode;
42
+ }
43
+ /**
44
+ * Sets `data-theme` and `data-density` on its root element. For an explicit
45
+ * theme the attribute is in the server HTML, so there is no flash. For
46
+ * `system` the server omits it and tokens.css follows prefers-color-scheme.
47
+ */
48
+ export declare function NorthstarProvider({ theme: themeProp, density, messages, applyToDocument, onThemeChange, className, children, ...rest }: NorthstarProviderProps): import("react/jsx-runtime").JSX.Element;
49
+ /** Renders into document.body, carrying the provider's theme and density. */
50
+ export declare function Portal({ children }: {
51
+ children: React.ReactNode;
52
+ }): import("react").ReactPortal | null;
53
+ //# sourceMappingURL=provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.tsx"],"names":[],"mappings":"AAOA,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,KAAK,GAAG,QAAQ,CAAC;AACtD,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,KAAK,CAAC;AAC5C,MAAM,MAAM,OAAO,GAAG,SAAS,GAAG,SAAS,GAAG,aAAa,CAAC;AAE5D,qFAAqF;AACrF,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IAClC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,eAAO,MAAM,EAAE,EAAE,QAkBhB,CAAC;AAEF,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,YAAY,CAAC;IACpB,aAAa,EAAE,aAAa,CAAC;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,QAAQ,CAAC;IACnB,QAAQ,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;CACzC;AAYD,uFAAuF;AACvF,wBAAgB,YAAY,IAAI,qBAAqB,CAEpD;AAED,MAAM,WAAW,sBAAuB,SAAQ,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,UAAU,CAAC;IACpG,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC7B,yEAAyE;IACzE,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IAC9C,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AAOD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,EAChC,KAAK,EAAE,SAAoB,EAC3B,OAAmB,EACnB,QAAQ,EACR,eAAuB,EACvB,aAAa,EACb,SAAS,EACT,QAAQ,EACR,GAAG,IAAI,EACR,EAAE,sBAAsB,2CA8CxB;AAED,6EAA6E;AAC7E,wBAAgB,MAAM,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAAE,sCAwBjE"}
@@ -0,0 +1,114 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { createContext, useContext, useEffect, useLayoutEffect, useMemo, useState } from 'react';
4
+ import { createPortal } from 'react-dom';
5
+ import { cx } from './internal/util.js';
6
+ const useIsoLayoutEffect = typeof window === 'undefined' ? useEffect : useLayoutEffect;
7
+ export const en = {
8
+ close: 'Close',
9
+ dismiss: 'Dismiss',
10
+ loading: 'Loading',
11
+ clear: 'Clear',
12
+ search: 'Search',
13
+ increment: 'Increase',
14
+ decrement: 'Decrease',
15
+ breadcrumbs: 'Breadcrumbs',
16
+ pagination: 'Pagination',
17
+ previousPage: 'Previous page',
18
+ nextPage: 'Next page',
19
+ page: (n) => `Page ${n}`,
20
+ noResults: 'No results',
21
+ stale: 'Stale',
22
+ notifications: 'Notifications',
23
+ remove: (label) => `Remove ${label}`,
24
+ sidebar: 'Sidebar',
25
+ };
26
+ const fallback = {
27
+ theme: 'night',
28
+ resolvedTheme: 'night',
29
+ density: 'default',
30
+ messages: en,
31
+ setTheme: () => { },
32
+ };
33
+ const NorthstarContext = createContext(fallback);
34
+ /** Theme, density and messages. Works without a provider (Night, default, English). */
35
+ export function useNorthstar() {
36
+ return useContext(NorthstarContext);
37
+ }
38
+ function systemTheme() {
39
+ if (typeof window === 'undefined' || !window.matchMedia)
40
+ return 'night';
41
+ return window.matchMedia('(prefers-color-scheme: light)').matches ? 'day' : 'night';
42
+ }
43
+ /**
44
+ * Sets `data-theme` and `data-density` on its root element. For an explicit
45
+ * theme the attribute is in the server HTML, so there is no flash. For
46
+ * `system` the server omits it and tokens.css follows prefers-color-scheme.
47
+ */
48
+ export function NorthstarProvider({ theme: themeProp = 'system', density = 'default', messages, applyToDocument = false, onThemeChange, className, children, ...rest }) {
49
+ const [theme, setThemeState] = useState(themeProp);
50
+ useEffect(() => setThemeState(themeProp), [themeProp]);
51
+ const [system, setSystem] = useState(null);
52
+ useEffect(() => {
53
+ if (theme !== 'system' || typeof window === 'undefined' || !window.matchMedia)
54
+ return;
55
+ const mq = window.matchMedia('(prefers-color-scheme: light)');
56
+ const update = () => setSystem(mq.matches ? 'day' : 'night');
57
+ update();
58
+ mq.addEventListener?.('change', update);
59
+ return () => mq.removeEventListener?.('change', update);
60
+ }, [theme]);
61
+ const resolvedTheme = theme === 'system' ? (system ?? systemTheme()) : theme;
62
+ const attrTheme = theme === 'system' ? (system ?? undefined) : theme;
63
+ useEffect(() => {
64
+ if (!applyToDocument)
65
+ return;
66
+ const html = document.documentElement;
67
+ if (attrTheme)
68
+ html.setAttribute('data-theme', attrTheme);
69
+ else
70
+ html.removeAttribute('data-theme');
71
+ html.setAttribute('data-density', density);
72
+ }, [applyToDocument, attrTheme, density]);
73
+ const value = useMemo(() => ({
74
+ theme,
75
+ resolvedTheme,
76
+ density,
77
+ messages: { ...en, ...messages },
78
+ setTheme: (t) => {
79
+ setThemeState(t);
80
+ onThemeChange?.(t);
81
+ },
82
+ }), [theme, resolvedTheme, density, messages, onThemeChange]);
83
+ return (_jsx(NorthstarContext.Provider, { value: value, children: _jsx("div", { ...rest, className: cx('ns-root', className), "data-theme": attrTheme, "data-density": density, children: children }) }));
84
+ }
85
+ /** Renders into document.body, carrying the provider's theme and density. */
86
+ export function Portal({ children }) {
87
+ const { theme, resolvedTheme, density } = useNorthstar();
88
+ // The host exists from the first client render and is attached in a layout
89
+ // effect, so by the time any passive effect (focus trap, initial focus) runs
90
+ // the content is in the document. On the server nothing is rendered.
91
+ const [host] = useState(() => {
92
+ if (typeof document === 'undefined')
93
+ return null;
94
+ const el = document.createElement('div');
95
+ el.className = 'ns-root ns-portal';
96
+ return el;
97
+ });
98
+ useIsoLayoutEffect(() => {
99
+ if (!host)
100
+ return;
101
+ host.setAttribute('data-theme', theme === 'system' ? resolvedTheme : theme);
102
+ host.setAttribute('data-density', density);
103
+ }, [host, theme, resolvedTheme, density]);
104
+ useIsoLayoutEffect(() => {
105
+ if (!host)
106
+ return;
107
+ document.body.appendChild(host);
108
+ return () => {
109
+ host.remove();
110
+ };
111
+ }, [host]);
112
+ return host ? createPortal(children, host) : null;
113
+ }
114
+ //# sourceMappingURL=provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.js","sourceRoot":"","sources":["../src/provider.tsx"],"names":[],"mappings":"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"}