@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
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Ali Amaan
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,32 @@
1
+ import { type Size, type Tone } from './internal/util.js';
2
+ export type ButtonVariant = 'primary' | 'secondary' | 'ghost';
3
+ export interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {
4
+ variant?: ButtonVariant;
5
+ size?: Size;
6
+ tone?: Tone;
7
+ loading?: boolean;
8
+ /** Accessible text announced while loading. */
9
+ loadingLabel?: string;
10
+ ref?: React.Ref<HTMLButtonElement>;
11
+ }
12
+ export declare function Button({ variant, size, tone, loading, loadingLabel, disabled, className, children, type, ...rest }: ButtonProps): import("react/jsx-runtime").JSX.Element;
13
+ export interface IconButtonProps extends Omit<ButtonProps, 'children'> {
14
+ /** Required accessible name. */
15
+ label: string;
16
+ icon: React.ReactNode;
17
+ }
18
+ export declare function IconButton({ label, icon, className, title, ...rest }: IconButtonProps): import("react/jsx-runtime").JSX.Element;
19
+ export interface LinkProps extends React.AnchorHTMLAttributes<HTMLAnchorElement> {
20
+ tone?: Tone;
21
+ /** Adds rel="noreferrer" and target="_blank". */
22
+ external?: boolean;
23
+ ref?: React.Ref<HTMLAnchorElement>;
24
+ }
25
+ export declare function Link({ tone, external, className, ...rest }: LinkProps): import("react/jsx-runtime").JSX.Element;
26
+ export interface ButtonGroupProps extends React.HTMLAttributes<HTMLDivElement> {
27
+ /** Joined buttons share borders; spaced ones keep a gap. */
28
+ attached?: boolean;
29
+ label?: string;
30
+ }
31
+ export declare function ButtonGroup({ attached, label, className, ...rest }: ButtonGroupProps): import("react/jsx-runtime").JSX.Element;
32
+ //# sourceMappingURL=actions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../src/actions.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAM,KAAK,IAAI,EAAE,KAAK,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAE9D,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,WAAW,GAAG,OAAO,CAAC;AAE9D,MAAM,WAAW,WAAY,SAAQ,KAAK,CAAC,oBAAoB,CAAC,iBAAiB,CAAC;IAChF,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,+CAA+C;IAC/C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;CACpC;AAED,wBAAgB,MAAM,CAAC,EACrB,OAAqB,EACrB,IAAW,EACX,IAAgB,EAChB,OAAe,EACf,YAAwB,EACxB,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,IAAe,EACf,GAAG,IAAI,EACR,EAAE,WAAW,2CAeb;AAED,MAAM,WAAW,eAAgB,SAAQ,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC;IACpE,gCAAgC;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC;CACvB;AAED,wBAAgB,UAAU,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,EAAE,eAAe,2CAMrF;AAED,MAAM,WAAW,SAAU,SAAQ,KAAK,CAAC,oBAAoB,CAAC,iBAAiB,CAAC;IAC9E,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,iDAAiD;IACjD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;CACpC;AAED,wBAAgB,IAAI,CAAC,EAAE,IAAe,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,EAAE,SAAS,2CAQhF;AAED,MAAM,WAAW,gBAAiB,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;IAC5E,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,WAAW,CAAC,EAAE,QAAgB,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,EAAE,gBAAgB,2CAS5F"}
@@ -0,0 +1,15 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { cx } from './internal/util.js';
3
+ export function Button({ variant = 'secondary', size = 'md', tone = 'neutral', loading = false, loadingLabel = 'Loading', disabled, className, children, type = 'button', ...rest }) {
4
+ return (_jsxs("button", { ...rest, type: type, className: cx('ns-button', `ns-button--${variant}`, `ns-size-${size}`, tone === 'signal' && 'ns-tone-signal', className), disabled: disabled || loading, "aria-busy": loading || undefined, "data-loading": loading || undefined, children: [loading && _jsx("span", { className: "ns-spinner", "aria-hidden": "true" }), _jsx("span", { className: "ns-button__label", children: children }), loading && _jsx("span", { className: "ns-visually-hidden", children: loadingLabel })] }));
5
+ }
6
+ export function IconButton({ label, icon, className, title, ...rest }) {
7
+ return (_jsx(Button, { ...rest, "aria-label": label, title: title ?? label, className: cx('ns-icon-button', className), children: icon }));
8
+ }
9
+ export function Link({ tone = 'signal', external, className, ...rest }) {
10
+ return (_jsx("a", { ...(external ? { target: '_blank', rel: 'noreferrer' } : {}), ...rest, className: cx('ns-link', tone === 'neutral' && 'ns-link--neutral', className) }));
11
+ }
12
+ export function ButtonGroup({ attached = false, label, className, ...rest }) {
13
+ return (_jsx("div", { role: "group", "aria-label": label, ...rest, className: cx('ns-button-group', attached && 'ns-button-group--attached', className) }));
14
+ }
15
+ //# sourceMappingURL=actions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actions.js","sourceRoot":"","sources":["../src/actions.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,EAAE,EAAwB,MAAM,oBAAoB,CAAC;AAc9D,MAAM,UAAU,MAAM,CAAC,EACrB,OAAO,GAAG,WAAW,EACrB,IAAI,GAAG,IAAI,EACX,IAAI,GAAG,SAAS,EAChB,OAAO,GAAG,KAAK,EACf,YAAY,GAAG,SAAS,EACxB,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,IAAI,GAAG,QAAQ,EACf,GAAG,IAAI,EACK;IACZ,OAAO,CACL,qBACM,IAAI,EACR,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,EAAE,CAAC,WAAW,EAAE,cAAc,OAAO,EAAE,EAAE,WAAW,IAAI,EAAE,EAAE,IAAI,KAAK,QAAQ,IAAI,gBAAgB,EAAE,SAAS,CAAC,EACxH,QAAQ,EAAE,QAAQ,IAAI,OAAO,eAClB,OAAO,IAAI,SAAS,kBACjB,OAAO,IAAI,SAAS,aAEjC,OAAO,IAAI,eAAM,SAAS,EAAC,YAAY,iBAAa,MAAM,GAAG,EAC9D,eAAM,SAAS,EAAC,kBAAkB,YAAE,QAAQ,GAAQ,EACnD,OAAO,IAAI,eAAM,SAAS,EAAC,oBAAoB,YAAE,YAAY,GAAQ,IAC/D,CACV,CAAC;AACJ,CAAC;AAQD,MAAM,UAAU,UAAU,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,IAAI,EAAmB;IACpF,OAAO,CACL,KAAC,MAAM,OAAK,IAAI,gBAAc,KAAK,EAAE,KAAK,EAAE,KAAK,IAAI,KAAK,EAAE,SAAS,EAAE,EAAE,CAAC,gBAAgB,EAAE,SAAS,CAAC,YACnG,IAAI,GACE,CACV,CAAC;AACJ,CAAC;AASD,MAAM,UAAU,IAAI,CAAC,EAAE,IAAI,GAAG,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,IAAI,EAAa;IAC/E,OAAO,CACL,eACM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KACzD,IAAI,EACR,SAAS,EAAE,EAAE,CAAC,SAAS,EAAE,IAAI,KAAK,SAAS,IAAI,kBAAkB,EAAE,SAAS,CAAC,GAC7E,CACH,CAAC;AACJ,CAAC;AAQD,MAAM,UAAU,WAAW,CAAC,EAAE,QAAQ,GAAG,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,IAAI,EAAoB;IAC3F,OAAO,CACL,cACE,IAAI,EAAC,OAAO,gBACA,KAAK,KACb,IAAI,EACR,SAAS,EAAE,EAAE,CAAC,iBAAiB,EAAE,QAAQ,IAAI,2BAA2B,EAAE,SAAS,CAAC,GACpF,CACH,CAAC;AACJ,CAAC"}
package/dist/data.d.ts ADDED
@@ -0,0 +1,80 @@
1
+ import { type Tone } from './internal/util.js';
2
+ export interface TableProps extends React.TableHTMLAttributes<HTMLTableElement> {
3
+ density?: 'compact' | 'default' | 'comfortable';
4
+ /** Sticky header row. */
5
+ stickyHeader?: boolean;
6
+ caption?: React.ReactNode;
7
+ }
8
+ export declare function Table({ density, stickyHeader, caption, className, children, ...rest }: TableProps): import("react/jsx-runtime").JSX.Element;
9
+ export declare const TableHead: (p: React.HTMLAttributes<HTMLTableSectionElement>) => import("react/jsx-runtime").JSX.Element;
10
+ export declare const TableBody: (p: React.HTMLAttributes<HTMLTableSectionElement>) => import("react/jsx-runtime").JSX.Element;
11
+ export declare function TableRow({ selected, className, ...rest }: React.HTMLAttributes<HTMLTableRowElement> & {
12
+ selected?: boolean;
13
+ }): import("react/jsx-runtime").JSX.Element;
14
+ export type SortDirection = 'ascending' | 'descending' | 'none';
15
+ export interface TableHeaderCellProps extends React.ThHTMLAttributes<HTMLTableCellElement> {
16
+ numeric?: boolean;
17
+ /** Makes the header a sort button. */
18
+ sort?: SortDirection;
19
+ onSort?: () => void;
20
+ }
21
+ export declare function TableHeaderCell({ numeric, sort, onSort, className, children, scope, ...rest }: TableHeaderCellProps): import("react/jsx-runtime").JSX.Element;
22
+ export declare function TableCell({ numeric, className, ...rest }: React.TdHTMLAttributes<HTMLTableCellElement> & {
23
+ numeric?: boolean;
24
+ }): import("react/jsx-runtime").JSX.Element;
25
+ export interface ListProps extends React.HTMLAttributes<HTMLUListElement> {
26
+ divided?: boolean;
27
+ ordered?: boolean;
28
+ }
29
+ export declare function List({ divided, ordered, className, ...rest }: ListProps): import("react/jsx-runtime").JSX.Element;
30
+ export interface ListItemProps extends Omit<React.LiHTMLAttributes<HTMLLIElement>, 'title'> {
31
+ title?: React.ReactNode;
32
+ description?: React.ReactNode;
33
+ start?: React.ReactNode;
34
+ end?: React.ReactNode;
35
+ }
36
+ export declare function ListItem({ title, description, start, end, className, children, ...rest }: ListItemProps): import("react/jsx-runtime").JSX.Element;
37
+ export interface TagProps extends React.HTMLAttributes<HTMLSpanElement> {
38
+ tone?: Tone;
39
+ /** Shows a remove button with this accessible label. */
40
+ onRemove?: () => void;
41
+ removeLabel?: string;
42
+ }
43
+ export declare function Tag({ tone, onRemove, removeLabel, className, children, ...rest }: TagProps): import("react/jsx-runtime").JSX.Element;
44
+ export interface BadgeProps extends React.HTMLAttributes<HTMLSpanElement> {
45
+ tone?: Tone;
46
+ variant?: 'solid' | 'outline';
47
+ }
48
+ /** A short count or status word. */
49
+ export declare function Badge({ tone, variant, className, ...rest }: BadgeProps): import("react/jsx-runtime").JSX.Element;
50
+ export declare function initials(name: string): string;
51
+ export interface AvatarProps extends React.HTMLAttributes<HTMLSpanElement> {
52
+ /** A workspace person. Rendered as initials; stars are reserved for agents. */
53
+ name: string;
54
+ size?: 'sm' | 'md' | 'lg';
55
+ }
56
+ export declare function Avatar({ name, size, className, ...rest }: AvatarProps): import("react/jsx-runtime").JSX.Element;
57
+ export declare function Kbd({ className, ...rest }: React.HTMLAttributes<HTMLElement>): import("react/jsx-runtime").JSX.Element;
58
+ export interface EmptyStateProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {
59
+ title: React.ReactNode;
60
+ description?: React.ReactNode;
61
+ icon?: React.ReactNode;
62
+ action?: React.ReactNode;
63
+ }
64
+ export declare function EmptyState({ title, description, icon, action, className, ...rest }: EmptyStateProps): import("react/jsx-runtime").JSX.Element;
65
+ export interface SkeletonProps extends React.HTMLAttributes<HTMLSpanElement> {
66
+ width?: number | string;
67
+ height?: number | string;
68
+ shape?: 'line' | 'block' | 'circle';
69
+ }
70
+ /** Loading placeholder. Hidden from assistive tech; pair it with a busy region. */
71
+ export declare function Skeleton({ width, height, shape, className, style, ...rest }: SkeletonProps): import("react/jsx-runtime").JSX.Element;
72
+ export interface StaleProps extends React.HTMLAttributes<HTMLDivElement> {
73
+ /** Visible label. Default "Stale". */
74
+ label?: React.ReactNode;
75
+ /** Optional detail, e.g. when the data was last refreshed. */
76
+ detail?: React.ReactNode;
77
+ }
78
+ /** Marks out-of-date content with a label and a dashed edge — never opacity alone. */
79
+ export declare function Stale({ label, detail, className, children, ...rest }: StaleProps): import("react/jsx-runtime").JSX.Element;
80
+ //# sourceMappingURL=data.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../src/data.tsx"],"names":[],"mappings":"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"}
package/dist/data.js ADDED
@@ -0,0 +1,60 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ // Server-component safe: no state, no context.
3
+ import { cx } from './internal/util.js';
4
+ import { Close } from './internal/icons.js';
5
+ export function Table({ density, stickyHeader = false, caption, className, children, ...rest }) {
6
+ return (_jsx("div", { className: "ns-table-wrap", children: _jsxs("table", { ...rest, className: cx('ns-table', stickyHeader && 'ns-table--sticky', className), "data-density": density, children: [caption && _jsx("caption", { className: "ns-table__caption", children: caption }), children] }) }));
7
+ }
8
+ export const TableHead = (p) => _jsx("thead", { ...p });
9
+ export const TableBody = (p) => _jsx("tbody", { ...p });
10
+ export function TableRow({ selected, className, ...rest }) {
11
+ return _jsx("tr", { "aria-selected": selected, ...rest, className: cx('ns-table__row', className) });
12
+ }
13
+ export function TableHeaderCell({ numeric, sort, onSort, className, children, scope = 'col', ...rest }) {
14
+ return (_jsx("th", { scope: scope, "aria-sort": sort, ...rest, className: cx('ns-table__th', numeric && 'ns-numeric', className), children: onSort ? (_jsxs("button", { type: "button", className: "ns-table__sort", onClick: onSort, children: [children, _jsx("span", { "aria-hidden": "true", className: "ns-table__sort-mark", children: sort === 'ascending' ? '↑' : sort === 'descending' ? '↓' : '↕' })] })) : (children) }));
15
+ }
16
+ export function TableCell({ numeric, className, ...rest }) {
17
+ return _jsx("td", { ...rest, className: cx('ns-table__td', numeric && 'ns-numeric', className) });
18
+ }
19
+ export function List({ divided = true, ordered = false, className, ...rest }) {
20
+ const Tag = ordered ? 'ol' : 'ul';
21
+ return _jsx(Tag, { ...rest, className: cx('ns-list', divided && 'ns-list--divided', className) });
22
+ }
23
+ export function ListItem({ title, description, start, end, className, children, ...rest }) {
24
+ return (_jsxs("li", { ...rest, className: cx('ns-list__item', className), children: [start && _jsx("span", { className: "ns-list__start", children: start }), _jsxs("span", { className: "ns-list__text", children: [title && _jsx("span", { className: "ns-list__title", children: title }), description && _jsx("span", { className: "ns-list__description", children: description }), children] }), end && _jsx("span", { className: "ns-list__end", children: end })] }));
25
+ }
26
+ export function Tag({ tone = 'neutral', onRemove, removeLabel, className, children, ...rest }) {
27
+ return (_jsxs("span", { ...rest, className: cx('ns-tag', tone === 'signal' && 'ns-tone-signal', className), children: [children, onRemove && (_jsx("button", { type: "button", className: "ns-tag__remove", "aria-label": removeLabel ?? `Remove ${typeof children === 'string' ? children : ''}`.trim(), onClick: onRemove, children: _jsx(Close, {}) }))] }));
28
+ }
29
+ /** A short count or status word. */
30
+ export function Badge({ tone = 'neutral', variant = 'outline', className, ...rest }) {
31
+ return _jsx("span", { ...rest, className: cx('ns-badge', `ns-badge--${variant}`, tone === 'signal' && 'ns-tone-signal', className) });
32
+ }
33
+ /* ----------------------------------------------------------------- Avatar */
34
+ export function initials(name) {
35
+ const parts = name.trim().split(/[\s\-_.@]+/).filter(Boolean);
36
+ if (parts.length === 0)
37
+ return '?';
38
+ const first = parts[0] ?? '';
39
+ const last = parts.length > 1 ? (parts[parts.length - 1] ?? '') : '';
40
+ return ((first[0] ?? '') + (last[0] ?? first[1] ?? '')).toUpperCase();
41
+ }
42
+ export function Avatar({ name, size = 'md', className, ...rest }) {
43
+ return (_jsx("span", { role: "img", "aria-label": name, title: name, ...rest, className: cx('ns-avatar', `ns-avatar--${size}`, className), children: _jsx("span", { "aria-hidden": "true", children: initials(name) }) }));
44
+ }
45
+ /* -------------------------------------------------------------------- Kbd */
46
+ export function Kbd({ className, ...rest }) {
47
+ return _jsx("kbd", { ...rest, className: cx('ns-kbd', className) });
48
+ }
49
+ export function EmptyState({ title, description, icon, action, className, ...rest }) {
50
+ return (_jsxs("div", { ...rest, className: cx('ns-empty', className), children: [icon && (_jsx("div", { className: "ns-empty__icon", "aria-hidden": "true", children: icon })), _jsx("p", { className: "ns-empty__title", children: title }), description && _jsx("p", { className: "ns-empty__description", children: description }), action && _jsx("div", { className: "ns-empty__action", children: action })] }));
51
+ }
52
+ /** Loading placeholder. Hidden from assistive tech; pair it with a busy region. */
53
+ export function Skeleton({ width, height, shape = 'line', className, style, ...rest }) {
54
+ return _jsx("span", { "aria-hidden": "true", ...rest, className: cx('ns-skeleton', `ns-skeleton--${shape}`, className), style: { width, height, ...style } });
55
+ }
56
+ /** Marks out-of-date content with a label and a dashed edge — never opacity alone. */
57
+ export function Stale({ label = 'Stale', detail, className, children, ...rest }) {
58
+ return (_jsxs("div", { ...rest, className: cx('ns-stale', className), "data-stale": "", children: [_jsxs("span", { className: "ns-stale__label", children: [label, detail && _jsxs("span", { className: "ns-stale__detail", children: [" \u00B7 ", detail] })] }), children] }));
59
+ }
60
+ //# sourceMappingURL=data.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data.js","sourceRoot":"","sources":["../src/data.tsx"],"names":[],"mappings":";AAAA,+CAA+C;AAC/C,OAAO,EAAE,EAAE,EAAa,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAW5C,MAAM,UAAU,KAAK,CAAC,EAAE,OAAO,EAAE,YAAY,GAAG,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAc;IACxG,OAAO,CACL,cAAK,SAAS,EAAC,eAAe,YAC5B,oBAAW,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC,UAAU,EAAE,YAAY,IAAI,kBAAkB,EAAE,SAAS,CAAC,kBAAgB,OAAO,aAC7G,OAAO,IAAI,kBAAS,SAAS,EAAC,mBAAmB,YAAE,OAAO,GAAW,EACrE,QAAQ,IACH,GACJ,CACP,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,CAAgD,EAAE,EAAE,CAAC,mBAAW,CAAC,GAAI,CAAC;AAChG,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,CAAgD,EAAE,EAAE,CAAC,mBAAW,CAAC,GAAI,CAAC;AAChG,MAAM,UAAU,QAAQ,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,IAAI,EAAsE;IAC3H,OAAO,8BAAmB,QAAQ,KAAM,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC,eAAe,EAAE,SAAS,CAAC,GAAI,CAAC;AAC9F,CAAC;AAWD,MAAM,UAAU,eAAe,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,GAAG,KAAK,EAAE,GAAG,IAAI,EAAwB;IAC1H,OAAO,CACL,aAAI,KAAK,EAAE,KAAK,eAAa,IAAI,KAAM,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC,cAAc,EAAE,OAAO,IAAI,YAAY,EAAE,SAAS,CAAC,YAC3G,MAAM,CAAC,CAAC,CAAC,CACR,kBAAQ,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAC,gBAAgB,EAAC,OAAO,EAAE,MAAM,aAC7D,QAAQ,EACT,8BAAkB,MAAM,EAAC,SAAS,EAAC,qBAAqB,YACrD,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAC1D,IACA,CACV,CAAC,CAAC,CAAC,CACF,QAAQ,CACT,GACE,CACN,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,IAAI,EAAwE;IAC7H,OAAO,gBAAQ,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC,cAAc,EAAE,OAAO,IAAI,YAAY,EAAE,SAAS,CAAC,GAAI,CAAC;AAC7F,CAAC;AASD,MAAM,UAAU,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,EAAE,OAAO,GAAG,KAAK,EAAE,SAAS,EAAE,GAAG,IAAI,EAAa;IACrF,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IAClC,OAAO,KAAC,GAAG,OAAK,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC,SAAS,EAAE,OAAO,IAAI,kBAAkB,EAAE,SAAS,CAAC,GAAI,CAAC;AAC/F,CAAC;AASD,MAAM,UAAU,QAAQ,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAiB;IACtG,OAAO,CACL,iBAAQ,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC,eAAe,EAAE,SAAS,CAAC,aACpD,KAAK,IAAI,eAAM,SAAS,EAAC,gBAAgB,YAAE,KAAK,GAAQ,EACzD,gBAAM,SAAS,EAAC,eAAe,aAC5B,KAAK,IAAI,eAAM,SAAS,EAAC,gBAAgB,YAAE,KAAK,GAAQ,EACxD,WAAW,IAAI,eAAM,SAAS,EAAC,sBAAsB,YAAE,WAAW,GAAQ,EAC1E,QAAQ,IACJ,EACN,GAAG,IAAI,eAAM,SAAS,EAAC,cAAc,YAAE,GAAG,GAAQ,IAChD,CACN,CAAC;AACJ,CAAC;AAWD,MAAM,UAAU,GAAG,CAAC,EAAE,IAAI,GAAG,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAY;IACrG,OAAO,CACL,mBAAU,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC,QAAQ,EAAE,IAAI,KAAK,QAAQ,IAAI,gBAAgB,EAAE,SAAS,CAAC,aACtF,QAAQ,EACR,QAAQ,IAAI,CACX,iBAAQ,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAC,gBAAgB,gBAAa,WAAW,IAAI,UAAU,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,QAAQ,YAC5J,KAAC,KAAK,KAAG,GACF,CACV,IACI,CACR,CAAC;AACJ,CAAC;AAOD,oCAAoC;AACpC,MAAM,UAAU,KAAK,CAAC,EAAE,IAAI,GAAG,SAAS,EAAE,OAAO,GAAG,SAAS,EAAE,SAAS,EAAE,GAAG,IAAI,EAAc;IAC7F,OAAO,kBAAU,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC,UAAU,EAAE,aAAa,OAAO,EAAE,EAAE,IAAI,KAAK,QAAQ,IAAI,gBAAgB,EAAE,SAAS,CAAC,GAAI,CAAC;AACjI,CAAC;AAED,8EAA8E;AAE9E,MAAM,UAAU,QAAQ,CAAC,IAAY;IACnC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC9D,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,GAAG,CAAC;IACnC,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC7B,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACrE,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;AACxE,CAAC;AAQD,MAAM,UAAU,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE,SAAS,EAAE,GAAG,IAAI,EAAe;IAC3E,OAAO,CACL,eAAM,IAAI,EAAC,KAAK,gBAAa,IAAI,EAAE,KAAK,EAAE,IAAI,KAAM,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC,WAAW,EAAE,cAAc,IAAI,EAAE,EAAE,SAAS,CAAC,YACnH,8BAAkB,MAAM,YAAE,QAAQ,CAAC,IAAI,CAAC,GAAQ,GAC3C,CACR,CAAC;AACJ,CAAC;AAED,8EAA8E;AAE9E,MAAM,UAAU,GAAG,CAAC,EAAE,SAAS,EAAE,GAAG,IAAI,EAAqC;IAC3E,OAAO,iBAAS,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC,GAAI,CAAC;AAC/D,CAAC;AAWD,MAAM,UAAU,UAAU,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,EAAmB;IAClG,OAAO,CACL,kBAAS,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC,UAAU,EAAE,SAAS,CAAC,aAChD,IAAI,IAAI,CACP,cAAK,SAAS,EAAC,gBAAgB,iBAAa,MAAM,YAC/C,IAAI,GACD,CACP,EACD,YAAG,SAAS,EAAC,iBAAiB,YAAE,KAAK,GAAK,EACzC,WAAW,IAAI,YAAG,SAAS,EAAC,uBAAuB,YAAE,WAAW,GAAK,EACrE,MAAM,IAAI,cAAK,SAAS,EAAC,kBAAkB,YAAE,MAAM,GAAO,IACvD,CACP,CAAC;AACJ,CAAC;AAUD,mFAAmF;AACnF,MAAM,UAAU,QAAQ,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,GAAG,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,IAAI,EAAiB;IAClG,OAAO,8BAAkB,MAAM,KAAK,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC,aAAa,EAAE,gBAAgB,KAAK,EAAE,EAAE,SAAS,CAAC,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,KAAK,EAAE,GAAI,CAAC;AACrJ,CAAC;AAWD,sFAAsF;AACtF,MAAM,UAAU,KAAK,CAAC,EAAE,KAAK,GAAG,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAc;IACzF,OAAO,CACL,kBAAS,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC,UAAU,EAAE,SAAS,CAAC,gBAAa,EAAE,aAChE,gBAAM,SAAS,EAAC,iBAAiB,aAC9B,KAAK,EACL,MAAM,IAAI,gBAAM,SAAS,EAAC,kBAAkB,yBAAK,MAAM,IAAQ,IAC3D,EACN,QAAQ,IACL,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,50 @@
1
+ import { type Tone } from './internal/util.js';
2
+ export interface ToastOptions {
3
+ title: React.ReactNode;
4
+ description?: React.ReactNode;
5
+ tone?: Tone;
6
+ /** ms before auto-dismiss; 0 keeps it until dismissed. Default 5000. */
7
+ duration?: number;
8
+ action?: {
9
+ label: string;
10
+ onClick: () => void;
11
+ };
12
+ id?: string;
13
+ }
14
+ export interface ToastRecord extends ToastOptions {
15
+ id: string;
16
+ }
17
+ /** Imperative toaster. Render one <Toaster /> near the root. */
18
+ export declare const toast: ((options: ToastOptions) => string) & {
19
+ dismiss(id?: string): void;
20
+ };
21
+ export declare function useToasts(): ToastRecord[];
22
+ export interface ToastProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {
23
+ title: React.ReactNode;
24
+ description?: React.ReactNode;
25
+ tone?: Tone;
26
+ action?: {
27
+ label: string;
28
+ onClick: () => void;
29
+ };
30
+ onDismiss?: () => void;
31
+ }
32
+ /** One toast surface. Usually rendered by <Toaster />. */
33
+ export declare function Toast({ title, description, tone, action, onDismiss, className, ...rest }: ToastProps): import("react/jsx-runtime").JSX.Element;
34
+ export interface ToasterProps {
35
+ position?: 'bottom-right' | 'bottom-left' | 'top-right' | 'top-left' | 'bottom-center';
36
+ }
37
+ /** Polite live region that shows toasts queued with `toast()`. */
38
+ export declare function Toaster({ position }: ToasterProps): import("react/jsx-runtime").JSX.Element;
39
+ export interface BannerProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {
40
+ title?: React.ReactNode;
41
+ tone?: Tone;
42
+ /** Urgent banners interrupt the screen reader (role="alert"). */
43
+ urgent?: boolean;
44
+ icon?: React.ReactNode;
45
+ actions?: React.ReactNode;
46
+ onDismiss?: () => void;
47
+ }
48
+ /** Page- or section-level message. Status is told by label and shape, never by red or green. */
49
+ export declare function Banner({ title, tone, urgent, icon, actions, onDismiss, className, children, ...rest }: BannerProps): import("react/jsx-runtime").JSX.Element;
50
+ //# sourceMappingURL=feedback.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feedback.d.ts","sourceRoot":"","sources":["../src/feedback.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAM,KAAK,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAKnD,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,wEAAwE;IACxE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,IAAI,CAAA;KAAE,CAAC;IAChD,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,WAAY,SAAQ,YAAY;IAC/C,EAAE,EAAE,MAAM,CAAC;CACZ;AASD,gEAAgE;AAChE,eAAO,MAAM,KAAK,aACN,YAAY,KAAG,MAAM;iBAOhB,MAAM;CAKtB,CAAC;AAOF,wBAAgB,SAAS,IAAI,WAAW,EAAE,CAEzC;AAED,MAAM,WAAW,UAAW,SAAQ,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IACrF,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,MAAM,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,IAAI,CAAA;KAAE,CAAC;IAChD,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;CACxB;AAED,0DAA0D;AAC1D,wBAAgB,KAAK,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,IAAgB,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,EAAE,UAAU,2CAoBhH;AAmBD,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,cAAc,GAAG,aAAa,GAAG,WAAW,GAAG,UAAU,GAAG,eAAe,CAAC;CACxF;AAED,kEAAkE;AAClE,wBAAgB,OAAO,CAAC,EAAE,QAAyB,EAAE,EAAE,YAAY,2CAgBlE;AAID,MAAM,WAAW,WAAY,SAAQ,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IACtF,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,iEAAiE;IACjE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;CACxB;AAED,gGAAgG;AAChG,wBAAgB,MAAM,CAAC,EAAE,KAAK,EAAE,IAAgB,EAAE,MAAc,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,EAAE,WAAW,2CAiBtI"}
@@ -0,0 +1,60 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useEffect, useRef, useSyncExternalStore } from 'react';
4
+ import { Portal, useNorthstar } from './provider.js';
5
+ import { cx } from './internal/util.js';
6
+ import { Close } from './internal/icons.js';
7
+ let toasts = [];
8
+ const listeners = new Set();
9
+ let seq = 0;
10
+ const emit = () => listeners.forEach((l) => l());
11
+ const EMPTY = [];
12
+ /** Imperative toaster. Render one <Toaster /> near the root. */
13
+ export const toast = Object.assign((options) => {
14
+ const id = options.id ?? `ns-toast-${++seq}`;
15
+ toasts = [...toasts.filter((t) => t.id !== id), { ...options, id }];
16
+ emit();
17
+ return id;
18
+ }, {
19
+ dismiss(id) {
20
+ toasts = id ? toasts.filter((t) => t.id !== id) : [];
21
+ emit();
22
+ },
23
+ });
24
+ function subscribe(l) {
25
+ listeners.add(l);
26
+ return () => listeners.delete(l);
27
+ }
28
+ export function useToasts() {
29
+ return useSyncExternalStore(subscribe, () => toasts, () => EMPTY);
30
+ }
31
+ /** One toast surface. Usually rendered by <Toaster />. */
32
+ export function Toast({ title, description, tone = 'neutral', action, onDismiss, className, ...rest }) {
33
+ const { messages } = useNorthstar();
34
+ return (_jsxs("div", { ...rest, className: cx('ns-toast', tone === 'signal' && 'ns-tone-signal', className), children: [_jsxs("div", { className: "ns-toast__text", children: [_jsx("div", { className: "ns-toast__title", children: title }), description && _jsx("div", { className: "ns-toast__description", children: description })] }), action && (_jsx("button", { type: "button", className: "ns-button ns-button--secondary ns-size-sm", onClick: action.onClick, children: action.label })), onDismiss && (_jsx("button", { type: "button", className: "ns-button ns-button--ghost ns-size-sm ns-icon-button", "aria-label": messages.dismiss, onClick: onDismiss, children: _jsx(Close, {}) }))] }));
35
+ }
36
+ function TimedToast({ record }) {
37
+ const { id, duration = 5000, ...rest } = record;
38
+ const timer = useRef(undefined);
39
+ const start = () => {
40
+ if (duration > 0)
41
+ timer.current = setTimeout(() => toast.dismiss(id), duration);
42
+ };
43
+ useEffect(() => {
44
+ start();
45
+ return () => clearTimeout(timer.current);
46
+ }, [id, duration]);
47
+ return (_jsx("li", { className: "ns-toaster__item", onPointerEnter: () => clearTimeout(timer.current), onPointerLeave: start, children: _jsx(Toast, { ...rest, onDismiss: () => toast.dismiss(id) }) }));
48
+ }
49
+ /** Polite live region that shows toasts queued with `toast()`. */
50
+ export function Toaster({ position = 'bottom-right' }) {
51
+ const list = useToasts();
52
+ const { messages } = useNorthstar();
53
+ return (_jsx(Portal, { children: _jsx("section", { "aria-label": messages.notifications, className: cx('ns-toaster', `ns-toaster--${position}`), children: _jsx("div", { role: "status", "aria-live": "polite", children: _jsx("ol", { className: "ns-toaster__list", children: list.map((t) => (_jsx(TimedToast, { record: t }, t.id))) }) }) }) }));
54
+ }
55
+ /** Page- or section-level message. Status is told by label and shape, never by red or green. */
56
+ export function Banner({ title, tone = 'neutral', urgent = false, icon, actions, onDismiss, className, children, ...rest }) {
57
+ const { messages } = useNorthstar();
58
+ return (_jsxs("div", { role: urgent ? 'alert' : 'status', ...rest, className: cx('ns-banner', tone === 'signal' && 'ns-tone-signal', className), children: [icon && _jsx("span", { className: "ns-banner__icon", "aria-hidden": "true", children: icon }), _jsxs("div", { className: "ns-banner__text", children: [title && _jsx("strong", { className: "ns-banner__title", children: title }), children && _jsx("div", { className: "ns-banner__body", children: children })] }), actions && _jsx("div", { className: "ns-banner__actions", children: actions }), onDismiss && (_jsx("button", { type: "button", className: "ns-button ns-button--ghost ns-size-sm ns-icon-button", "aria-label": messages.dismiss, onClick: onDismiss, children: _jsx(Close, {}) }))] }));
59
+ }
60
+ //# sourceMappingURL=feedback.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feedback.js","sourceRoot":"","sources":["../src/feedback.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,130 @@
1
+ import { type Size } from './internal/util.js';
2
+ export interface FieldProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'children' | 'id'> {
3
+ label: React.ReactNode;
4
+ description?: React.ReactNode;
5
+ error?: React.ReactNode;
6
+ required?: boolean;
7
+ disabled?: boolean;
8
+ /** Override the generated control id. */
9
+ id?: string;
10
+ children: React.ReactNode;
11
+ }
12
+ /** Label, description and error for one control; wires ids and aria-* to the control inside. */
13
+ export declare function Field({ label, description, error, required, disabled, id, className, children, ...rest }: FieldProps): import("react/jsx-runtime").JSX.Element;
14
+ interface FieldInput {
15
+ id?: string | undefined;
16
+ disabled?: boolean | undefined;
17
+ required?: boolean | undefined;
18
+ invalid?: boolean | undefined;
19
+ 'aria-describedby'?: string | undefined;
20
+ }
21
+ /** Field wiring for a control: id, aria-describedby, aria-invalid, required, disabled. */
22
+ export declare function useFieldProps(props: FieldInput): {
23
+ aria: {
24
+ id: string | undefined;
25
+ disabled: boolean | undefined;
26
+ required: boolean | undefined;
27
+ 'aria-describedby': string | undefined;
28
+ 'aria-invalid': true | undefined;
29
+ };
30
+ invalid: boolean;
31
+ };
32
+ interface ValueProps<T> {
33
+ value?: T;
34
+ defaultValue?: T;
35
+ onValueChange?: (value: T) => void;
36
+ }
37
+ export interface InputProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size' | 'value' | 'defaultValue'>, ValueProps<string> {
38
+ size?: Size;
39
+ invalid?: boolean;
40
+ /** Content drawn inside the start edge (an icon, a unit). */
41
+ start?: React.ReactNode;
42
+ end?: React.ReactNode;
43
+ ref?: React.Ref<HTMLInputElement>;
44
+ }
45
+ export declare function Input({ size, invalid, start, end, className, value, defaultValue, onValueChange, onChange, style, ...rest }: InputProps): import("react/jsx-runtime").JSX.Element;
46
+ export interface TextareaProps extends Omit<React.TextareaHTMLAttributes<HTMLTextAreaElement>, 'value' | 'defaultValue'>, ValueProps<string> {
47
+ invalid?: boolean;
48
+ ref?: React.Ref<HTMLTextAreaElement>;
49
+ }
50
+ export declare function Textarea({ invalid, className, value, defaultValue, onValueChange, onChange, ...rest }: TextareaProps): import("react/jsx-runtime").JSX.Element;
51
+ export interface Option {
52
+ value: string;
53
+ label: string;
54
+ disabled?: boolean;
55
+ }
56
+ export interface SelectProps extends Omit<React.SelectHTMLAttributes<HTMLSelectElement>, 'size' | 'value' | 'defaultValue'>, ValueProps<string> {
57
+ options: Option[];
58
+ placeholder?: string;
59
+ size?: Size;
60
+ invalid?: boolean;
61
+ ref?: React.Ref<HTMLSelectElement>;
62
+ }
63
+ /** A styled native select: platform keyboard and screen-reader behaviour for free. */
64
+ export declare function Select({ options, placeholder, size, invalid, className, value, defaultValue, onValueChange, onChange, style, ...rest }: SelectProps): import("react/jsx-runtime").JSX.Element;
65
+ export interface ComboboxProps extends ValueProps<string | null> {
66
+ options: Option[];
67
+ placeholder?: string;
68
+ size?: Size;
69
+ invalid?: boolean;
70
+ disabled?: boolean;
71
+ required?: boolean;
72
+ id?: string;
73
+ className?: string;
74
+ 'aria-label'?: string;
75
+ 'aria-describedby'?: string;
76
+ /** Custom filter; defaults to a case-insensitive substring match on the label. */
77
+ filter?: (option: Option, query: string) => boolean;
78
+ }
79
+ export declare function Combobox({ options, placeholder, size, invalid, className, value, defaultValue, onValueChange, filter, ...rest }: ComboboxProps): import("react/jsx-runtime").JSX.Element;
80
+ export interface CheckboxProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'type' | 'checked' | 'defaultChecked'> {
81
+ checked?: boolean;
82
+ defaultChecked?: boolean;
83
+ indeterminate?: boolean;
84
+ onCheckedChange?: (checked: boolean) => void;
85
+ children?: React.ReactNode;
86
+ ref?: React.Ref<HTMLInputElement>;
87
+ }
88
+ /** Native checkbox with rounded corners. */
89
+ export declare function Checkbox({ checked, defaultChecked, indeterminate, onCheckedChange, onChange, className, children, ref, style, ...rest }: CheckboxProps): import("react/jsx-runtime").JSX.Element;
90
+ export interface RadioGroupProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'defaultValue' | 'onChange'>, ValueProps<string> {
91
+ name?: string;
92
+ disabled?: boolean;
93
+ orientation?: 'horizontal' | 'vertical';
94
+ label?: string;
95
+ }
96
+ export declare function RadioGroup({ name, value, defaultValue, onValueChange, disabled, orientation, label, className, children, ...rest }: RadioGroupProps): import("react/jsx-runtime").JSX.Element;
97
+ export interface RadioProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'type' | 'value'> {
98
+ value: string;
99
+ children?: React.ReactNode;
100
+ }
101
+ export declare function Radio({ value, children, className, disabled, style, onChange, ...rest }: RadioProps): import("react/jsx-runtime").JSX.Element;
102
+ export interface SwitchProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'onChange'> {
103
+ checked?: boolean;
104
+ defaultChecked?: boolean;
105
+ onCheckedChange?: (checked: boolean) => void;
106
+ children?: React.ReactNode;
107
+ }
108
+ export declare function Switch({ checked, defaultChecked, onCheckedChange, className, children, onClick, ...rest }: SwitchProps): import("react/jsx-runtime").JSX.Element;
109
+ export interface SliderProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'type' | 'value' | 'defaultValue' | 'min' | 'max' | 'step'>, ValueProps<number> {
110
+ min?: number;
111
+ max?: number;
112
+ step?: number;
113
+ ref?: React.Ref<HTMLInputElement>;
114
+ }
115
+ /** Native range input: arrow keys, Page Up/Down, Home and End work as on the platform. */
116
+ export declare function Slider({ min, max, step, value, defaultValue, onValueChange, onChange, className, style, ...rest }: SliderProps): import("react/jsx-runtime").JSX.Element;
117
+ export interface NumberInputProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size' | 'value' | 'defaultValue' | 'type' | 'min' | 'max' | 'step'>, ValueProps<number | null> {
118
+ min?: number;
119
+ max?: number;
120
+ step?: number;
121
+ size?: Size;
122
+ invalid?: boolean;
123
+ }
124
+ export declare function NumberInput({ min, max, step, size, invalid, value, defaultValue, onValueChange, className, style, onKeyDown, onBlur, ...rest }: NumberInputProps): import("react/jsx-runtime").JSX.Element;
125
+ export interface SearchInputProps extends Omit<InputProps, 'type' | 'start' | 'end'> {
126
+ onClear?: () => void;
127
+ }
128
+ export declare function SearchInput({ value, defaultValue, onValueChange, onClear, placeholder, ref, onKeyDown, ...rest }: SearchInputProps): import("react/jsx-runtime").JSX.Element;
129
+ export {};
130
+ //# sourceMappingURL=forms.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"forms.d.ts","sourceRoot":"","sources":["../src/forms.tsx"],"names":[],"mappings":"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"}