@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
package/dist/forms.js ADDED
@@ -0,0 +1,241 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { createContext, useContext, useEffect, useId, useMemo, useRef, useState } from 'react';
4
+ import { useNorthstar } from './provider.js';
5
+ import { cx, mergeRefs, useControllable } from './internal/util.js';
6
+ import { Check, ChevronDown, Close, Minus, Plus, Search } from './internal/icons.js';
7
+ const FieldContext = createContext(null);
8
+ /** Label, description and error for one control; wires ids and aria-* to the control inside. */
9
+ export function Field({ label, description, error, required = false, disabled = false, id, className, children, ...rest }) {
10
+ const auto = useId();
11
+ const controlId = id ?? `ns-field-${auto}`;
12
+ const descId = description ? `${controlId}-desc` : undefined;
13
+ const errId = error ? `${controlId}-err` : undefined;
14
+ const describedBy = [descId, errId].filter(Boolean).join(' ') || undefined;
15
+ const value = useMemo(() => ({ id: controlId, describedBy, invalid: Boolean(error), required, disabled }), [controlId, describedBy, error, required, disabled]);
16
+ return (_jsxs("div", { ...rest, className: cx('ns-field', className), "data-invalid": error ? true : undefined, children: [_jsxs("label", { className: "ns-field__label", htmlFor: controlId, children: [label, required && (_jsx("span", { className: "ns-field__required", "aria-hidden": "true", children: ' *' }))] }), _jsx(FieldContext.Provider, { value: value, children: children }), description && (_jsx("p", { id: descId, className: "ns-field__description", children: description })), error && (_jsxs("p", { id: errId, className: "ns-field__error", children: [_jsx("span", { "aria-hidden": "true", children: '! ' }), error] }))] }));
17
+ }
18
+ /** Field wiring for a control: id, aria-describedby, aria-invalid, required, disabled. */
19
+ export function useFieldProps(props) {
20
+ const field = useContext(FieldContext);
21
+ const invalid = props.invalid ?? field?.invalid ?? false;
22
+ return {
23
+ aria: {
24
+ id: props.id ?? field?.id,
25
+ disabled: props.disabled ?? field?.disabled,
26
+ required: props.required ?? field?.required,
27
+ 'aria-describedby': [props['aria-describedby'], field?.describedBy].filter(Boolean).join(' ') || undefined,
28
+ 'aria-invalid': invalid || undefined,
29
+ },
30
+ invalid,
31
+ };
32
+ }
33
+ export function Input({ size = 'md', invalid, start, end, className, value, defaultValue, onValueChange, onChange, style, ...rest }) {
34
+ const { aria, invalid: isInvalid } = useFieldProps({ ...rest, invalid });
35
+ const [v, setV] = useControllable(value, defaultValue ?? '', onValueChange);
36
+ return (_jsxs("div", { className: cx('ns-input', `ns-size-${size}`, isInvalid && 'ns-invalid', aria.disabled && 'ns-disabled', className), style: style, children: [start && _jsx("span", { className: "ns-input__adornment", children: start }), _jsx("input", { ...rest, ...aria, className: "ns-input__control", value: v, onChange: (e) => {
37
+ onChange?.(e);
38
+ setV(e.target.value);
39
+ } }), end && _jsx("span", { className: "ns-input__adornment", children: end })] }));
40
+ }
41
+ export function Textarea({ invalid, className, value, defaultValue, onValueChange, onChange, ...rest }) {
42
+ const { aria, invalid: isInvalid } = useFieldProps({ ...rest, invalid });
43
+ const [v, setV] = useControllable(value, defaultValue ?? '', onValueChange);
44
+ return (_jsx("textarea", { ...rest, ...aria, className: cx('ns-textarea', isInvalid && 'ns-invalid', className), value: v, onChange: (e) => {
45
+ onChange?.(e);
46
+ setV(e.target.value);
47
+ } }));
48
+ }
49
+ /** A styled native select: platform keyboard and screen-reader behaviour for free. */
50
+ export function Select({ options, placeholder, size = 'md', invalid, className, value, defaultValue, onValueChange, onChange, style, ...rest }) {
51
+ const { aria, invalid: isInvalid } = useFieldProps({ ...rest, invalid });
52
+ const [v, setV] = useControllable(value, defaultValue ?? '', onValueChange);
53
+ return (_jsxs("div", { className: cx('ns-select', `ns-size-${size}`, isInvalid && 'ns-invalid', className), style: style, children: [_jsxs("select", { ...rest, ...aria, className: "ns-select__control", value: v, onChange: (e) => {
54
+ onChange?.(e);
55
+ setV(e.target.value);
56
+ }, children: [placeholder !== undefined && (_jsx("option", { value: "", disabled: true, children: placeholder })), options.map((o) => (_jsx("option", { value: o.value, disabled: o.disabled, children: o.label }, o.value)))] }), _jsx("span", { className: "ns-select__chevron", "aria-hidden": "true", children: _jsx(ChevronDown, {}) })] }));
57
+ }
58
+ export function Combobox({ options, placeholder, size = 'md', invalid, className, value, defaultValue, onValueChange, filter, ...rest }) {
59
+ const { messages } = useNorthstar();
60
+ const { aria, invalid: isInvalid } = useFieldProps({ ...rest, invalid });
61
+ const [selected, setSelected] = useControllable(value, defaultValue ?? null, onValueChange);
62
+ const selectedLabel = options.find((o) => o.value === selected)?.label ?? '';
63
+ const [query, setQuery] = useState(selectedLabel);
64
+ const [open, setOpen] = useState(false);
65
+ const [active, setActive] = useState(-1);
66
+ const listId = `ns-combobox-${useId().replace(/:/g, '')}`;
67
+ const rootRef = useRef(null);
68
+ useEffect(() => setQuery(selectedLabel), [selectedLabel]);
69
+ const match = filter ?? ((o, q) => o.label.toLowerCase().includes(q.toLowerCase()));
70
+ const visible = query === selectedLabel ? options : options.filter((o) => match(o, query));
71
+ const commit = (o) => {
72
+ if (!o || o.disabled)
73
+ return;
74
+ setSelected(o.value);
75
+ setQuery(o.label);
76
+ setOpen(false);
77
+ setActive(-1);
78
+ };
79
+ const move = (delta) => {
80
+ if (!open)
81
+ setOpen(true);
82
+ if (visible.length === 0)
83
+ return;
84
+ let i = active;
85
+ for (let n = 0; n < visible.length; n++) {
86
+ i = (i + delta + visible.length) % visible.length;
87
+ if (!visible[i]?.disabled)
88
+ break;
89
+ }
90
+ setActive(i);
91
+ };
92
+ return (_jsxs("div", { ref: rootRef, className: cx('ns-combobox', className), onBlur: (e) => {
93
+ if (!rootRef.current?.contains(e.relatedTarget)) {
94
+ setOpen(false);
95
+ setQuery(selectedLabel);
96
+ }
97
+ }, children: [_jsxs("div", { className: cx('ns-input', `ns-size-${size}`, isInvalid && 'ns-invalid', aria.disabled && 'ns-disabled'), children: [_jsx("input", { ...aria, "aria-label": rest['aria-label'], className: "ns-input__control", role: "combobox", "aria-expanded": open, "aria-controls": listId, "aria-autocomplete": "list", "aria-activedescendant": open && active >= 0 ? `${listId}-${active}` : undefined, autoComplete: "off", placeholder: placeholder, value: query, onChange: (e) => {
98
+ setQuery(e.target.value);
99
+ setOpen(true);
100
+ setActive(-1);
101
+ }, onClick: () => setOpen(true), onKeyDown: (e) => {
102
+ if (e.key === 'ArrowDown') {
103
+ e.preventDefault();
104
+ move(1);
105
+ }
106
+ else if (e.key === 'ArrowUp') {
107
+ e.preventDefault();
108
+ move(-1);
109
+ }
110
+ else if (e.key === 'Enter' && open && active >= 0) {
111
+ e.preventDefault();
112
+ commit(visible[active]);
113
+ }
114
+ else if (e.key === 'Escape' && open) {
115
+ e.preventDefault();
116
+ e.stopPropagation();
117
+ setOpen(false);
118
+ setQuery(selectedLabel);
119
+ }
120
+ } }), _jsx("span", { className: "ns-select__chevron", "aria-hidden": "true", children: _jsx(ChevronDown, {}) })] }), _jsx("ul", { id: listId, role: "listbox", className: "ns-combobox__list ns-pop", hidden: !open, "aria-label": rest['aria-label'], children: visible.map((o, i) => (_jsxs("li", { id: `${listId}-${i}`, role: "option", "aria-selected": o.value === selected, "aria-disabled": o.disabled || undefined, "data-active": i === active || undefined, className: "ns-option", onMouseDown: (e) => e.preventDefault(), onClick: () => commit(o), children: [_jsx("span", { children: o.label }), o.value === selected && _jsx(Check, {})] }, o.value))) }), open && visible.length === 0 && (_jsx("div", { className: "ns-combobox__empty ns-pop", role: "status", children: messages.noResults }))] }));
121
+ }
122
+ /** Native checkbox with rounded corners. */
123
+ export function Checkbox({ checked, defaultChecked, indeterminate = false, onCheckedChange, onChange, className, children, ref, style, ...rest }) {
124
+ const [on, setOn] = useControllable(checked, defaultChecked ?? false, onCheckedChange);
125
+ const inner = useRef(null);
126
+ useEffect(() => {
127
+ if (inner.current)
128
+ inner.current.indeterminate = indeterminate;
129
+ }, [indeterminate]);
130
+ return (_jsxs("label", { className: cx('ns-check', rest.disabled && 'ns-disabled', className), style: style, children: [_jsx("input", { ...rest, ref: mergeRefs(ref, inner), type: "checkbox", className: "ns-check__input", checked: on, onChange: (e) => {
131
+ onChange?.(e);
132
+ setOn(e.target.checked);
133
+ } }), _jsx("span", { className: "ns-check__box", "aria-hidden": "true", children: indeterminate ? _jsx(Minus, {}) : _jsx(Check, {}) }), children && _jsx("span", { className: "ns-check__label", children: children })] }));
134
+ }
135
+ const RadioContext = createContext(null);
136
+ export function RadioGroup({ name, value, defaultValue, onValueChange, disabled = false, orientation = 'vertical', label, className, children, ...rest }) {
137
+ const auto = useId();
138
+ const [v, setV] = useControllable(value, defaultValue ?? '', onValueChange);
139
+ return (_jsx("div", { role: "radiogroup", "aria-label": label, "aria-orientation": orientation, ...rest, className: cx('ns-radio-group', `ns-radio-group--${orientation}`, className), children: _jsx(RadioContext.Provider, { value: { name: name ?? `ns-radio-${auto}`, value: v, set: setV, disabled }, children: children }) }));
140
+ }
141
+ export function Radio({ value, children, className, disabled, style, onChange, ...rest }) {
142
+ const group = useContext(RadioContext);
143
+ const isDisabled = disabled ?? group?.disabled;
144
+ return (_jsxs("label", { className: cx('ns-check ns-radio', isDisabled && 'ns-disabled', className), style: style, children: [_jsx("input", { ...rest, type: "radio", className: "ns-check__input", name: group?.name ?? rest.name, value: value, disabled: isDisabled, checked: group ? group.value === value : rest.checked, onChange: (e) => {
145
+ onChange?.(e);
146
+ if (e.target.checked)
147
+ group?.set(value);
148
+ } }), _jsx("span", { className: "ns-check__box", "aria-hidden": "true" }), children && _jsx("span", { className: "ns-check__label", children: children })] }));
149
+ }
150
+ export function Switch({ checked, defaultChecked, onCheckedChange, className, children, onClick, ...rest }) {
151
+ const { aria } = useFieldProps(rest);
152
+ const ariaNoRequired = { ...aria, required: undefined };
153
+ const [on, setOn] = useControllable(checked, defaultChecked ?? false, onCheckedChange);
154
+ const button = (_jsx("button", { type: "button", ...rest, ...ariaNoRequired, role: "switch", "aria-checked": on, className: cx('ns-switch', !children && className), onClick: (e) => {
155
+ onClick?.(e);
156
+ if (!e.defaultPrevented)
157
+ setOn(!on);
158
+ }, children: _jsx("span", { className: "ns-switch__thumb", "aria-hidden": "true" }) }));
159
+ if (!children)
160
+ return button;
161
+ return (_jsxs("label", { className: cx('ns-switch-label', className), children: [button, _jsx("span", { children: children })] }));
162
+ }
163
+ /** Native range input: arrow keys, Page Up/Down, Home and End work as on the platform. */
164
+ export function Slider({ min = 0, max = 100, step = 1, value, defaultValue, onValueChange, onChange, className, style, ...rest }) {
165
+ const { aria } = useFieldProps(rest);
166
+ const [v, setV] = useControllable(value, defaultValue ?? min, onValueChange);
167
+ const pct = max > min ? ((v - min) / (max - min)) * 100 : 0;
168
+ return (_jsx("input", { ...rest, ...aria, type: "range", min: min, max: max, step: step, value: v, className: cx('ns-slider', className), style: { ...style, ['--ns-slider-fill']: `${pct}%` }, onChange: (e) => {
169
+ onChange?.(e);
170
+ setV(Number(e.target.value));
171
+ } }));
172
+ }
173
+ function clamp(n, min, max) {
174
+ if (min !== undefined && n < min)
175
+ return min;
176
+ if (max !== undefined && n > max)
177
+ return max;
178
+ return n;
179
+ }
180
+ export function NumberInput({ min, max, step = 1, size = 'md', invalid, value, defaultValue, onValueChange, className, style, onKeyDown, onBlur, ...rest }) {
181
+ const { messages } = useNorthstar();
182
+ const { aria, invalid: isInvalid } = useFieldProps({ ...rest, invalid });
183
+ const [v, setV] = useControllable(value, defaultValue ?? null, onValueChange);
184
+ const [draft, setDraft] = useState(v === null ? '' : String(v));
185
+ useEffect(() => setDraft(v === null ? '' : String(v)), [v]);
186
+ const bump = (dir) => setV(clamp((v ?? min ?? 0) + dir * step, min, max));
187
+ const commitDraft = () => {
188
+ if (draft.trim() === '')
189
+ return setV(null);
190
+ const n = Number(draft.replace(',', '.'));
191
+ if (Number.isFinite(n))
192
+ setV(clamp(n, min, max));
193
+ else
194
+ setDraft(v === null ? '' : String(v));
195
+ };
196
+ return (_jsxs("div", { className: cx('ns-input ns-number', `ns-size-${size}`, isInvalid && 'ns-invalid', aria.disabled && 'ns-disabled', className), style: style, children: [_jsx("input", { ...rest, ...aria, className: "ns-input__control", type: "text", inputMode: "decimal", role: "spinbutton", "aria-valuenow": v ?? undefined, "aria-valuemin": min, "aria-valuemax": max, value: draft, onChange: (e) => setDraft(e.target.value), onBlur: (e) => {
197
+ commitDraft();
198
+ onBlur?.(e);
199
+ }, onKeyDown: (e) => {
200
+ onKeyDown?.(e);
201
+ if (e.key === 'ArrowUp') {
202
+ e.preventDefault();
203
+ bump(1);
204
+ }
205
+ else if (e.key === 'ArrowDown') {
206
+ e.preventDefault();
207
+ bump(-1);
208
+ }
209
+ else if (e.key === 'Home' && min !== undefined) {
210
+ e.preventDefault();
211
+ setV(min);
212
+ }
213
+ else if (e.key === 'End' && max !== undefined) {
214
+ e.preventDefault();
215
+ setV(max);
216
+ }
217
+ else if (e.key === 'Enter')
218
+ commitDraft();
219
+ } }), _jsxs("span", { className: "ns-number__steppers", children: [_jsx("button", { type: "button", tabIndex: -1, "aria-label": messages.decrement, disabled: aria.disabled || (min !== undefined && v !== null && v <= min), onClick: () => bump(-1), children: _jsx(Minus, {}) }), _jsx("button", { type: "button", tabIndex: -1, "aria-label": messages.increment, disabled: aria.disabled || (max !== undefined && v !== null && v >= max), onClick: () => bump(1), children: _jsx(Plus, {}) })] })] }));
220
+ }
221
+ export function SearchInput({ value, defaultValue, onValueChange, onClear, placeholder, ref, onKeyDown, ...rest }) {
222
+ const { messages } = useNorthstar();
223
+ const [v, setV] = useControllable(value, defaultValue ?? '', onValueChange);
224
+ const inner = useRef(null);
225
+ const clear = () => {
226
+ setV('');
227
+ onClear?.();
228
+ };
229
+ return (_jsx(Input, { "aria-label": rest['aria-label'] ?? messages.search, placeholder: placeholder ?? messages.search, ...rest, ref: mergeRefs(ref, inner), type: "search", value: v, onValueChange: setV, onKeyDown: (e) => {
230
+ onKeyDown?.(e);
231
+ if (e.key === 'Escape' && v) {
232
+ e.preventDefault();
233
+ e.stopPropagation();
234
+ clear();
235
+ }
236
+ }, start: _jsx(Search, {}), end: v ? (_jsx("button", { type: "button", className: "ns-input__clear", "aria-label": messages.clear, onClick: () => {
237
+ clear();
238
+ inner.current?.focus();
239
+ }, children: _jsx(Close, {}) })) : undefined }));
240
+ }
241
+ //# sourceMappingURL=forms.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"forms.js","sourceRoot":"","sources":["../src/forms.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,74 @@
1
+ /** Mirrors `material.liquid.*` in @northstar-js/tokens (checked by a test). */
2
+ export declare const LIQUID: {
3
+ readonly scale: {
4
+ readonly sm: 14;
5
+ readonly md: 28;
6
+ readonly lg: 44;
7
+ };
8
+ readonly bevel: 0.16;
9
+ readonly aberration: 2;
10
+ readonly frost: 0.6;
11
+ /** Mirrors `radius.glass.*`: tight corners for precision, never fully round. */
12
+ readonly radius: {
13
+ readonly panel: 10;
14
+ readonly bar: 10;
15
+ readonly control: 7;
16
+ readonly inner: 6;
17
+ };
18
+ };
19
+ export type LiquidSize = keyof typeof LIQUID.scale;
20
+ /** A `radius.glass.*` step, `pill` (now the bar radius, not fully round) or `full` (a true circle or capsule). */
21
+ export type LiquidRadius = number | keyof typeof LIQUID.radius | 'pill' | 'full';
22
+ /**
23
+ * The displacement map as an SVG data URI. Red carries x, green carries y;
24
+ * each ramps from 1 to 0.5 across the rim and stays at 0.5 (no movement) in
25
+ * the body. With `w`/`h` the rim is in true pixels; without, it is a fraction
26
+ * of a stretched 100 × 100 box, which is close enough for small controls.
27
+ */
28
+ export declare function displacementMap(w?: number, h?: number, bevel?: number, radius?: number): string;
29
+ interface FilterProps {
30
+ id: string;
31
+ scale: number;
32
+ map: string;
33
+ aberration?: number;
34
+ frost?: number;
35
+ width?: number;
36
+ height?: number;
37
+ }
38
+ /** One refraction filter. Shared presets use a stretched map; LiquidGlass with a numeric scale renders its own, measured. */
39
+ export declare function LiquidFilter({ id, scale, map, aberration, frost, width, height }: FilterProps): import("react/jsx-runtime").JSX.Element;
40
+ /**
41
+ * The shared filter defs (`#ns-liquid-sm|md|lg`), inserted once into
42
+ * document.body however many providers mount, and removed with the last one.
43
+ * Also marks <html data-ns-liquid="refract"> where refraction is supported.
44
+ */
45
+ export declare function useLiquidDefs(enabled?: boolean): void;
46
+ type GlassTag = 'div' | 'section' | 'article' | 'aside' | 'header' | 'footer' | 'nav' | 'span' | 'li';
47
+ export interface LiquidGlassProps extends React.HTMLAttributes<HTMLElement> {
48
+ /**
49
+ * Refraction strength. A preset (`sm` for controls, `md` for cards and bars,
50
+ * `lg` for sheets and dialogs) uses the shared filter; a number (px of
51
+ * displacement) renders a filter measured to this element.
52
+ */
53
+ scale?: LiquidSize | number;
54
+ /**
55
+ * Corner radius: px, or a `radius.glass.*` step (`panel`, `bar`, `control`,
56
+ * `inner`). `pill` is the bar radius (glass is no longer fully round);
57
+ * `full` is a true capsule. Default `panel` (10px).
58
+ */
59
+ radius?: LiquidRadius;
60
+ /** Lift with a soft drop shadow. Default true. */
61
+ floating?: boolean;
62
+ /** Glacier tint strength. `none` keeps only the neutral body. */
63
+ tint?: 'none' | 'subtle' | 'signal';
64
+ as?: GlassTag;
65
+ ref?: React.Ref<HTMLElement>;
66
+ }
67
+ /**
68
+ * Thin, refractive glass in the iOS 26 manner: the backdrop bends at the rim,
69
+ * a specular highlight sits on the top-left, a rim of light runs round the
70
+ * edge with an inner glow under it, and the body carries a faint glacier tint.
71
+ */
72
+ export declare function LiquidGlass({ scale, radius, floating, tint, as: Tag, className, style, ref, children, ...rest }: LiquidGlassProps): import("react/jsx-runtime").JSX.Element;
73
+ export {};
74
+ //# sourceMappingURL=glass.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"glass.d.ts","sourceRoot":"","sources":["../src/glass.tsx"],"names":[],"mappings":"AAaA,+EAA+E;AAC/E,eAAO,MAAM,MAAM;;;;;;;;;IAKjB,gFAAgF;;;;;;;CAExE,CAAC;AACX,MAAM,MAAM,UAAU,GAAG,MAAM,OAAO,MAAM,CAAC,KAAK,CAAC;AACnD,kHAAkH;AAClH,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,MAAM,OAAO,MAAM,CAAC,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAEjF;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,CAAC,SAAM,EAAE,CAAC,SAAM,EAAE,KAAK,GAAE,MAAqB,EAAE,MAAM,SAAI,GAAG,MAAM,CAalG;AAOD,UAAU,WAAW;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,6HAA6H;AAC7H,wBAAgB,YAAY,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,UAA8B,EAAE,KAAoB,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,WAAW,2CAkBhI;AAYD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,OAAO,UAAO,QAoC3C;AAED,KAAK,QAAQ,GAAG,KAAK,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,KAAK,GAAG,MAAM,GAAG,IAAI,CAAC;AAEtG,MAAM,WAAW,gBAAiB,SAAQ,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC;IACzE;;;;OAIG;IACH,KAAK,CAAC,EAAE,UAAU,GAAG,MAAM,CAAC;IAC5B;;;;OAIG;IACH,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,kDAAkD;IAClD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,iEAAiE;IACjE,IAAI,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAC;IACpC,EAAE,CAAC,EAAE,QAAQ,CAAC;IACd,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;CAC9B;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,EAAE,KAAY,EAAE,MAAgB,EAAE,QAAe,EAAE,IAAe,EAAE,EAAE,EAAE,GAAW,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,EAAE,gBAAgB,2CAuC5K"}
package/dist/glass.js ADDED
@@ -0,0 +1,139 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ // Liquid glass. The refraction is an SVG filter used as a backdrop-filter:
4
+ // a displacement map that is neutral (50 % grey) in the body and ramps at the
5
+ // rim, so the backdrop bends inward at the edges like light through a thick
6
+ // lens; three displacements at slightly different scales split the colour at
7
+ // the rim (chromatic aberration), then a little frost and saturation.
8
+ // Only Chromium applies url() filters in backdrop-filter, so the root gets
9
+ // data-ns-liquid="refract" there; everywhere else the CSS falls back to blur
10
+ // plus the specular layers, and to the opaque solid under reduced
11
+ // transparency, in forced colours, and without backdrop-filter.
12
+ import { useEffect, useId, useRef, useState } from 'react';
13
+ import { cx, mergeRefs } from './internal/util.js';
14
+ /** Mirrors `material.liquid.*` in @northstar-js/tokens (checked by a test). */
15
+ export const LIQUID = {
16
+ scale: { sm: 14, md: 28, lg: 44 },
17
+ bevel: 0.16,
18
+ aberration: 2,
19
+ frost: 0.6,
20
+ /** Mirrors `radius.glass.*`: tight corners for precision, never fully round. */
21
+ radius: { panel: 10, bar: 10, control: 7, inner: 6 },
22
+ };
23
+ /**
24
+ * The displacement map as an SVG data URI. Red carries x, green carries y;
25
+ * each ramps from 1 to 0.5 across the rim and stays at 0.5 (no movement) in
26
+ * the body. With `w`/`h` the rim is in true pixels; without, it is a fraction
27
+ * of a stretched 100 × 100 box, which is close enough for small controls.
28
+ */
29
+ export function displacementMap(w = 100, h = 100, bevel = LIQUID.bevel, radius = 0) {
30
+ const b = Math.max(1, Math.min(w, h) * bevel);
31
+ const fx = Math.min(0.5, b / w);
32
+ const fy = Math.min(0.5, b / h);
33
+ const r = Math.min(radius, Math.min(w, h) / 2);
34
+ const svg = `<svg xmlns="http://www.w3.org/2000/svg" width="${w}" height="${h}" viewBox="0 0 ${w} ${h}" preserveAspectRatio="none">` +
35
+ `<defs><linearGradient id="x" x2="1"><stop offset="0" stop-color="#f00"/><stop offset="${fx}" stop-color="#800000"/><stop offset="${1 - fx}" stop-color="#800000"/><stop offset="1" stop-color="#000"/></linearGradient>` +
36
+ `<linearGradient id="y" x2="0" y2="1"><stop offset="0" stop-color="#0f0"/><stop offset="${fy}" stop-color="#008000"/><stop offset="${1 - fy}" stop-color="#008000"/><stop offset="1" stop-color="#000"/></linearGradient>` +
37
+ `<filter id="s"><feGaussianBlur stdDeviation="${(b / 3).toFixed(1)}"/></filter></defs>` +
38
+ `<rect width="${w}" height="${h}" fill="url(#x)"/><rect width="${w}" height="${h}" fill="url(#y)" style="mix-blend-mode:screen"/>` +
39
+ `<rect x="${b}" y="${b}" width="${Math.max(0, w - 2 * b)}" height="${Math.max(0, h - 2 * b)}" rx="${Math.max(0, r - b)}" fill="#808000" filter="url(#s)"/></svg>`;
40
+ return `data:image/svg+xml;utf8,${encodeURIComponent(svg)}`;
41
+ }
42
+ function channel(name) {
43
+ const m = { R: '1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0', G: '0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0', B: '0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0' };
44
+ return m[name];
45
+ }
46
+ /** One refraction filter. Shared presets use a stretched map; LiquidGlass with a numeric scale renders its own, measured. */
47
+ export function LiquidFilter({ id, scale, map, aberration = LIQUID.aberration, frost = LIQUID.frost, width, height }) {
48
+ const box = width && height ? { x: 0, y: 0, width, height, filterUnits: 'userSpaceOnUse' } : { x: '0%', y: '0%', width: '100%', height: '100%' };
49
+ const img = width && height ? { width, height } : { width: '100%', height: '100%' };
50
+ return (_jsxs("filter", { id: id, ...box, colorInterpolationFilters: "sRGB", children: [_jsx("feImage", { href: map, x: "0", y: "0", ...img, preserveAspectRatio: "none", result: "map" }), ['R', 'G', 'B'].map((c, i) => (_jsx("feDisplacementMap", { in: "SourceGraphic", in2: "map", scale: scale + (i - 1) * aberration * -1, xChannelSelector: "R", yChannelSelector: "G", result: `d${c}` }, c))), ['R', 'G', 'B'].map((c) => (_jsx("feColorMatrix", { in: `d${c}`, type: "matrix", values: channel(c), result: `c${c}` }, c))), _jsx("feBlend", { in: "cR", in2: "cG", mode: "screen", result: "rg" }), _jsx("feBlend", { in: "rg", in2: "cB", mode: "screen", result: "rgb" }), _jsx("feGaussianBlur", { in: "rgb", stdDeviation: frost, result: "frost" }), _jsx("feColorMatrix", { in: "frost", type: "saturate", values: "1.5" })] }));
51
+ }
52
+ let defsUsers = 0;
53
+ let defsHost = null;
54
+ function supportsRefraction() {
55
+ if (typeof navigator === 'undefined' || typeof CSS === 'undefined' || !CSS.supports?.('backdrop-filter', 'url(#a)'))
56
+ return false;
57
+ const brands = navigator.userAgentData?.brands;
58
+ if (brands)
59
+ return brands.some((b) => /Chromium|Chrome|Edge/.test(b.brand));
60
+ return /Chrome\/|Chromium\/|Edg\//.test(navigator.userAgent) && !/Firefox\//.test(navigator.userAgent);
61
+ }
62
+ /**
63
+ * The shared filter defs (`#ns-liquid-sm|md|lg`), inserted once into
64
+ * document.body however many providers mount, and removed with the last one.
65
+ * Also marks <html data-ns-liquid="refract"> where refraction is supported.
66
+ */
67
+ export function useLiquidDefs(enabled = true) {
68
+ useEffect(() => {
69
+ if (!enabled || typeof document === 'undefined')
70
+ return;
71
+ defsUsers++;
72
+ if (!defsHost) {
73
+ const ns = 'http://www.w3.org/2000/svg';
74
+ const svg = document.createElementNS(ns, 'svg');
75
+ svg.setAttribute('aria-hidden', 'true');
76
+ svg.setAttribute('focusable', 'false');
77
+ svg.setAttribute('width', '0');
78
+ svg.setAttribute('height', '0');
79
+ svg.setAttribute('style', 'position:absolute;width:0;height:0;overflow:hidden;pointer-events:none');
80
+ svg.setAttribute('data-ns-liquid-defs', '');
81
+ const map = displacementMap();
82
+ const parts = Object.keys(LIQUID.scale).map((size) => {
83
+ const s = LIQUID.scale[size];
84
+ const ch = ['R', 'G', 'B']
85
+ .map((c, i) => `<feDisplacementMap in="SourceGraphic" in2="map" scale="${s - (i - 1) * LIQUID.aberration}" xChannelSelector="R" yChannelSelector="G" result="d${c}"/><feColorMatrix in="d${c}" type="matrix" values="${channel(c)}" result="c${c}"/>`)
86
+ .join('');
87
+ return `<filter id="ns-liquid-${size}" x="0%" y="0%" width="100%" height="100%" color-interpolation-filters="sRGB"><feImage href="${map}" x="0" y="0" width="100%" height="100%" preserveAspectRatio="none" result="map"/>${ch}<feBlend in="cR" in2="cG" mode="screen" result="rg"/><feBlend in="rg" in2="cB" mode="screen" result="rgb"/><feGaussianBlur in="rgb" stdDeviation="${LIQUID.frost}" result="f"/><feColorMatrix in="f" type="saturate" values="1.5"/></filter>`;
88
+ });
89
+ svg.innerHTML = `<defs>${parts.join('')}</defs>`;
90
+ document.body.appendChild(svg);
91
+ defsHost = svg;
92
+ if (supportsRefraction())
93
+ document.documentElement.setAttribute('data-ns-liquid', 'refract');
94
+ }
95
+ return () => {
96
+ defsUsers--;
97
+ if (defsUsers <= 0 && defsHost) {
98
+ defsHost.remove();
99
+ defsHost = null;
100
+ defsUsers = 0;
101
+ document.documentElement.removeAttribute('data-ns-liquid');
102
+ }
103
+ };
104
+ }, [enabled]);
105
+ }
106
+ /**
107
+ * Thin, refractive glass in the iOS 26 manner: the backdrop bends at the rim,
108
+ * a specular highlight sits on the top-left, a rim of light runs round the
109
+ * edge with an inner glow under it, and the body carries a faint glacier tint.
110
+ */
111
+ export function LiquidGlass({ scale = 'md', radius = 'panel', floating = true, tint = 'subtle', as: Tag = 'div', className, style, ref, children, ...rest }) {
112
+ const custom = typeof scale === 'number';
113
+ const fid = `ns-lg-${useId().replace(/:/g, '')}`;
114
+ const node = useRef(null);
115
+ const [box, setBox] = useState(null);
116
+ useEffect(() => {
117
+ const el = node.current;
118
+ if (!custom || !el || typeof ResizeObserver === 'undefined')
119
+ return;
120
+ const ro = new ResizeObserver(() => {
121
+ const w = Math.round(el.offsetWidth);
122
+ const h = Math.round(el.offsetHeight);
123
+ setBox((b) => (b && b.w === w && b.h === h ? b : w > 0 && h > 0 ? { w, h } : b));
124
+ });
125
+ ro.observe(el);
126
+ return () => ro.disconnect();
127
+ }, [custom]);
128
+ const step = radius === 'pill' ? 'bar' : radius;
129
+ const r = typeof step === 'number' ? step : step === 'full' ? 9999 : LIQUID.radius[step];
130
+ const vars = {
131
+ '--ns-liquid-radius': typeof step === 'number' ? `${step}px` : step === 'full' ? '9999px' : `var(--ns-radius-glass-${step})`,
132
+ };
133
+ if (custom && box)
134
+ vars['--ns-liquid-filter'] = `url(#${fid})`;
135
+ return (_jsxs(Tag, { ...rest, ref: mergeRefs(ref, (el) => {
136
+ node.current = el;
137
+ }), className: cx('ns-liquid', !custom && `ns-liquid--${scale}`, floating && 'ns-liquid--floating', `ns-liquid--tint-${tint}`, className), style: { ...vars, ...style }, children: [custom && box && (_jsx("svg", { className: "ns-liquid__defs", "aria-hidden": "true", focusable: "false", width: "0", height: "0", children: _jsx(LiquidFilter, { id: fid, scale: scale, map: displacementMap(box.w, box.h, LIQUID.bevel, r), width: box.w, height: box.h }) })), children] }));
138
+ }
139
+ //# sourceMappingURL=glass.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"glass.js","sourceRoot":"","sources":["../src/glass.tsx"],"names":[],"mappings":"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"}