@bubltec/uiux 0.0.0-stage → 0.0.1

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 (49) hide show
  1. package/dist/button.d.ts +20 -0
  2. package/dist/button.d.ts.map +1 -0
  3. package/dist/button.js +15 -0
  4. package/dist/button.js.map +1 -0
  5. package/dist/chrome.d.ts +36 -0
  6. package/dist/chrome.d.ts.map +1 -0
  7. package/dist/chrome.js +48 -0
  8. package/dist/chrome.js.map +1 -0
  9. package/dist/cx.d.ts +2 -0
  10. package/dist/cx.d.ts.map +1 -0
  11. package/dist/cx.js +4 -0
  12. package/dist/cx.js.map +1 -0
  13. package/dist/form.d.ts +59 -0
  14. package/dist/form.d.ts.map +1 -0
  15. package/dist/form.js +39 -0
  16. package/dist/form.js.map +1 -0
  17. package/dist/icons.d.ts +8 -0
  18. package/dist/icons.d.ts.map +1 -0
  19. package/dist/icons.js +7 -0
  20. package/dist/icons.js.map +1 -0
  21. package/dist/index.d.ts +11 -0
  22. package/dist/index.d.ts.map +1 -0
  23. package/dist/index.js +11 -0
  24. package/dist/index.js.map +1 -0
  25. package/dist/overlay.d.ts +33 -0
  26. package/dist/overlay.d.ts.map +1 -0
  27. package/dist/overlay.js +61 -0
  28. package/dist/overlay.js.map +1 -0
  29. package/dist/page-window.d.ts +4 -0
  30. package/dist/page-window.d.ts.map +1 -0
  31. package/dist/page-window.js +14 -0
  32. package/dist/page-window.js.map +1 -0
  33. package/dist/status.d.ts +18 -0
  34. package/dist/status.d.ts.map +1 -0
  35. package/dist/status.js +17 -0
  36. package/dist/status.js.map +1 -0
  37. package/dist/surface.d.ts +15 -0
  38. package/dist/surface.d.ts.map +1 -0
  39. package/dist/surface.js +12 -0
  40. package/dist/surface.js.map +1 -0
  41. package/dist/text.d.ts +15 -0
  42. package/dist/text.d.ts.map +1 -0
  43. package/dist/text.js +8 -0
  44. package/dist/text.js.map +1 -0
  45. package/package.json +52 -3
  46. package/src/theme.css +571 -0
  47. package/src/themes/nes.css +49 -0
  48. package/src/themes/paw.css +66 -0
  49. package/README.md +0 -3
@@ -0,0 +1,20 @@
1
+ import type { AnchorHTMLAttributes, ButtonHTMLAttributes, ReactNode } from 'react';
2
+ export type ButtonVariant = 'solid' | 'ghost' | 'danger';
3
+ export type ButtonSize = 'sm' | 'md' | 'lg';
4
+ export declare function buttonClass(variant?: ButtonVariant, size?: ButtonSize, extra?: string): string;
5
+ type Common = {
6
+ variant?: ButtonVariant;
7
+ size?: ButtonSize;
8
+ loading?: boolean;
9
+ children?: ReactNode;
10
+ className?: string;
11
+ };
12
+ type AsButton = Common & ButtonHTMLAttributes<HTMLButtonElement> & {
13
+ href?: undefined;
14
+ };
15
+ type AsLink = Common & AnchorHTMLAttributes<HTMLAnchorElement> & {
16
+ href: string;
17
+ };
18
+ export declare function Button({ variant, size, loading, className, children, ...rest }: AsButton | AsLink): import("react").JSX.Element;
19
+ export {};
20
+ //# sourceMappingURL=button.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"button.d.ts","sourceRoot":"","sources":["../src/button.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGnF,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,OAAO,GAAG,QAAQ,CAAC;AACzD,MAAM,MAAM,UAAU,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAE5C,wBAAgB,WAAW,CAAC,OAAO,GAAE,aAAuB,EAAE,IAAI,GAAE,UAAiB,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAE7G;AAED,KAAK,MAAM,GAAG;IACZ,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,KAAK,QAAQ,GAAG,MAAM,GAAG,oBAAoB,CAAC,iBAAiB,CAAC,GAAG;IAAE,IAAI,CAAC,EAAE,SAAS,CAAA;CAAE,CAAC;AACxF,KAAK,MAAM,GAAG,MAAM,GAAG,oBAAoB,CAAC,iBAAiB,CAAC,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAElF,wBAAgB,MAAM,CAAC,EAAE,OAAiB,EAAE,IAAW,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,EAAE,QAAQ,GAAG,MAAM,+BAgBlH"}
package/dist/button.js ADDED
@@ -0,0 +1,15 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { cx } from './cx.js';
3
+ export function buttonClass(variant = 'solid', size = 'md', extra) {
4
+ return cx('btn', size === 'sm' && 'btn-sm', size === 'lg' && 'btn-lg', variant === 'ghost' && 'btn-ghost', variant === 'danger' && 'btn-danger', extra);
5
+ }
6
+ export function Button({ variant = 'solid', size = 'md', loading, className, children, ...rest }) {
7
+ const cls = buttonClass(variant, size, className);
8
+ if ('href' in rest && rest.href) {
9
+ const { href, ...link } = rest;
10
+ return (_jsx("a", { href: href, className: cls, "aria-busy": loading || undefined, ...link, children: loading ? '…' : children }));
11
+ }
12
+ const button = rest;
13
+ return (_jsx("button", { type: button.type ?? 'button', className: cls, disabled: button.disabled || loading, "aria-busy": loading || undefined, ...button, children: loading ? '…' : children }));
14
+ }
15
+ //# sourceMappingURL=button.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"button.js","sourceRoot":"","sources":["../src/button.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAK7B,MAAM,UAAU,WAAW,CAAC,OAAO,GAAkB,OAAO,EAAE,IAAI,GAAe,IAAI,EAAE,KAAc;IACnG,OAAO,EAAE,CAAC,KAAK,EAAE,IAAI,KAAK,IAAI,IAAI,QAAQ,EAAE,IAAI,KAAK,IAAI,IAAI,QAAQ,EAAE,OAAO,KAAK,OAAO,IAAI,WAAW,EAAE,OAAO,KAAK,QAAQ,IAAI,YAAY,EAAE,KAAK,CAAC,CAAC;AAC1J,CAAC;AAaD,MAAM,UAAU,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO,EAAE,IAAI,GAAG,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAqB;IACjH,MAAM,GAAG,GAAG,WAAW,CAAC,OAAO,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;IAClD,IAAI,MAAM,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QAChC,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC;QAC/B,OAAO,CACL,YAAG,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,eAAa,OAAO,IAAI,SAAS,KAAM,IAAI,YACrE,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,GACvB,CACL,CAAC;IACJ,CAAC;IACD,MAAM,MAAM,GAAG,IAA+C,CAAC;IAC/D,OAAO,CACL,iBAAQ,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,QAAQ,EAAE,SAAS,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,OAAO,eAAa,OAAO,IAAI,SAAS,KAAM,MAAM,YACrI,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,GAClB,CACV,CAAC;AACJ,CAAC"}
@@ -0,0 +1,36 @@
1
+ import { type HTMLAttributes, type ReactNode } from 'react';
2
+ export declare function Stack({ className, children, ...rest }: HTMLAttributes<HTMLDivElement>): import("react").JSX.Element;
3
+ export declare function Cluster({ className, children, ...rest }: HTMLAttributes<HTMLDivElement>): import("react").JSX.Element;
4
+ export declare function AppFrame({ banner, children, className }: {
5
+ banner?: ReactNode;
6
+ children: ReactNode;
7
+ className?: string;
8
+ }): import("react").JSX.Element;
9
+ export declare function AppHeader({ brand, nav, trailing, sticky, }: {
10
+ brand: ReactNode;
11
+ nav?: ReactNode;
12
+ trailing?: ReactNode;
13
+ sticky?: boolean;
14
+ }): import("react").JSX.Element;
15
+ export declare function AppFooter({ children }: {
16
+ children: ReactNode;
17
+ }): import("react").JSX.Element;
18
+ export declare function AppSection({ children, narrow, className }: {
19
+ children: ReactNode;
20
+ narrow?: boolean;
21
+ className?: string;
22
+ }): import("react").JSX.Element;
23
+ export declare function AppMain({ children, className }: {
24
+ children: ReactNode;
25
+ className?: string;
26
+ }): import("react").JSX.Element;
27
+ /** Side sheet. `open` is controlled. The trigger is optional. */
28
+ export declare function Drawer({ open, onOpenChange, title, description, trigger, children, }: {
29
+ open: boolean;
30
+ onOpenChange: (open: boolean) => void;
31
+ title: string;
32
+ description?: string;
33
+ trigger?: ReactNode;
34
+ children: ReactNode;
35
+ }): import("react").JSX.Element;
36
+ //# sourceMappingURL=chrome.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chrome.d.ts","sourceRoot":"","sources":["../src/chrome.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA4B,KAAK,cAAc,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAItF,wBAAgB,KAAK,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,EAAE,cAAc,CAAC,cAAc,CAAC,+BAMrF;AAED,wBAAgB,OAAO,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,EAAE,cAAc,CAAC,cAAc,CAAC,+BAMvF;AAED,wBAAgB,QAAQ,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE;IAAE,MAAM,CAAC,EAAE,SAAS,CAAC;IAAC,QAAQ,EAAE,SAAS,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,+BAOxH;AAED,wBAAgB,SAAS,CAAC,EACxB,KAAK,EACL,GAAG,EACH,QAAQ,EACR,MAAM,GACP,EAAE;IACD,KAAK,EAAE,SAAS,CAAC;IACjB,GAAG,CAAC,EAAE,SAAS,CAAC;IAChB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,+BAcA;AAED,wBAAgB,SAAS,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,+BAE9D;AAED,wBAAgB,UAAU,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,+BAExH;AAED,wBAAgB,OAAO,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,+BAE3F;AAED,iEAAiE;AACjE,wBAAgB,MAAM,CAAC,EACrB,IAAI,EACJ,YAAY,EACZ,KAAK,EACL,WAAW,EACX,OAAO,EACP,QAAQ,GACT,EAAE;IACD,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,QAAQ,EAAE,SAAS,CAAC;CACrB,+BA6CA"}
package/dist/chrome.js ADDED
@@ -0,0 +1,48 @@
1
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useEffect, useId, useRef } from 'react';
3
+ import { cx } from './cx.js';
4
+ import { Icon } from './icons.js';
5
+ export function Stack({ className, children, ...rest }) {
6
+ return (_jsx("div", { className: cx('stack', className), ...rest, children: children }));
7
+ }
8
+ export function Cluster({ className, children, ...rest }) {
9
+ return (_jsx("div", { className: cx('cluster', className), ...rest, children: children }));
10
+ }
11
+ export function AppFrame({ banner, children, className }) {
12
+ return (_jsxs(_Fragment, { children: [banner, _jsx("div", { className: cx('app-frame', className), children: children })] }));
13
+ }
14
+ export function AppHeader({ brand, nav, trailing, sticky, }) {
15
+ return (_jsxs("header", { className: cx('app-header', sticky && 'app-header-sticky'), children: [_jsx("div", { className: "app-header-brand", children: brand }), _jsxs("div", { className: "cluster", children: [nav ? (_jsx("nav", { className: "app-nav", "aria-label": "Main", children: nav })) : null, trailing] })] }));
16
+ }
17
+ export function AppFooter({ children }) {
18
+ return _jsx("footer", { className: "app-footer", children: children });
19
+ }
20
+ export function AppSection({ children, narrow, className }) {
21
+ return _jsx("section", { className: cx(narrow && 'app-section-narrow', className), children: children });
22
+ }
23
+ export function AppMain({ children, className }) {
24
+ return _jsx("main", { className: cx('app-main', className), children: children });
25
+ }
26
+ /** Side sheet. `open` is controlled. The trigger is optional. */
27
+ export function Drawer({ open, onOpenChange, title, description, trigger, children, }) {
28
+ const ref = useRef(null);
29
+ const titleId = useId();
30
+ useEffect(() => {
31
+ const el = ref.current;
32
+ if (!el)
33
+ return;
34
+ if (open && !el.open) {
35
+ if (typeof el.showModal === 'function')
36
+ el.showModal();
37
+ else
38
+ el.setAttribute('open', '');
39
+ }
40
+ if (!open && el.open)
41
+ el.close();
42
+ }, [open]);
43
+ return (_jsxs(_Fragment, { children: [trigger ? (_jsx("span", { className: "dialog-trigger", onClick: () => onOpenChange(true), children: trigger })) : null, _jsx("dialog", { ref: ref, className: "drawer", "aria-labelledby": titleId, onClose: () => onOpenChange(false), onClick: (e) => {
44
+ if (e.target === ref.current)
45
+ onOpenChange(false);
46
+ }, children: _jsxs("div", { className: "drawer-body", children: [_jsxs("div", { className: "dialog-head", children: [_jsxs("div", { children: [_jsx("h2", { id: titleId, className: "dialog-title", children: title }), description ? _jsx("p", { className: "dialog-desc", children: description }) : null] }), _jsx("button", { type: "button", className: "btn btn-ghost btn-sm", "aria-label": "Close", onClick: () => onOpenChange(false), children: _jsx(Icon, { name: "close" }) })] }), _jsx("div", { className: "dialog-body", children: children })] }) })] }));
47
+ }
48
+ //# sourceMappingURL=chrome.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chrome.js","sourceRoot":"","sources":["../src/chrome.tsx"],"names":[],"mappings":"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"}
package/dist/cx.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ export declare function cx(...parts: Array<string | false | null | undefined>): string;
2
+ //# sourceMappingURL=cx.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cx.d.ts","sourceRoot":"","sources":["../src/cx.ts"],"names":[],"mappings":"AAAA,wBAAgB,EAAE,CAAC,GAAG,KAAK,EAAE,KAAK,CAAC,MAAM,GAAG,KAAK,GAAG,IAAI,GAAG,SAAS,CAAC,GAAG,MAAM,CAE7E"}
package/dist/cx.js ADDED
@@ -0,0 +1,4 @@
1
+ export function cx(...parts) {
2
+ return parts.filter(Boolean).join(' ');
3
+ }
4
+ //# sourceMappingURL=cx.js.map
package/dist/cx.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cx.js","sourceRoot":"","sources":["../src/cx.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,EAAE,CAAC,GAAG,KAA+C;IACnE,OAAO,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzC,CAAC"}
package/dist/form.d.ts ADDED
@@ -0,0 +1,59 @@
1
+ import { type InputHTMLAttributes, type ReactNode, type SelectHTMLAttributes, type TextareaHTMLAttributes } from 'react';
2
+ type FieldChildProps = {
3
+ id: string;
4
+ 'aria-describedby': string | undefined;
5
+ 'aria-invalid': true | undefined;
6
+ };
7
+ export declare function Field({ label, hint, error, reserveHint, children, className, }: {
8
+ label: string;
9
+ hint?: ReactNode;
10
+ error?: string;
11
+ reserveHint?: boolean;
12
+ children: ReactNode | ((props: FieldChildProps) => ReactNode);
13
+ className?: string;
14
+ }): import("react").JSX.Element;
15
+ export declare function Input({ className, ...rest }: InputHTMLAttributes<HTMLInputElement>): import("react").JSX.Element;
16
+ export declare function Textarea({ className, ...rest }: TextareaHTMLAttributes<HTMLTextAreaElement>): import("react").JSX.Element;
17
+ export declare function Select({ options, className, ...rest }: SelectHTMLAttributes<HTMLSelectElement> & {
18
+ options: ReadonlyArray<{
19
+ value: string;
20
+ label: string;
21
+ }>;
22
+ }): import("react").JSX.Element;
23
+ export declare function FileInput({ className, ...rest }: InputHTMLAttributes<HTMLInputElement>): import("react").JSX.Element;
24
+ export declare function ChipSelect({ label, options, value, onChange, }: {
25
+ label: string;
26
+ options: ReadonlyArray<{
27
+ value: string;
28
+ label: string;
29
+ title?: string;
30
+ }>;
31
+ value: readonly string[];
32
+ onChange: (next: string[]) => void;
33
+ }): import("react").JSX.Element;
34
+ export declare function Switch({ checked, onCheckedChange, disabled, label, }: {
35
+ checked: boolean;
36
+ onCheckedChange: (next: boolean) => void;
37
+ disabled?: boolean;
38
+ label: string;
39
+ }): import("react").JSX.Element;
40
+ export declare function RadioGroup<T extends string>({ label, value, options, onChange, }: {
41
+ label: string;
42
+ value: T;
43
+ options: ReadonlyArray<{
44
+ value: T;
45
+ label: string;
46
+ }>;
47
+ onChange: (next: T) => void;
48
+ }): import("react").JSX.Element;
49
+ export declare function Segmented<T extends string>({ label, value, options, onChange, }: {
50
+ label: string;
51
+ value: T;
52
+ options: ReadonlyArray<{
53
+ value: T;
54
+ label: string;
55
+ }>;
56
+ onChange: (next: T) => void;
57
+ }): import("react").JSX.Element;
58
+ export {};
59
+ //# sourceMappingURL=form.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"form.d.ts","sourceRoot":"","sources":["../src/form.tsx"],"names":[],"mappings":"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"}
package/dist/form.js ADDED
@@ -0,0 +1,39 @@
1
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useId } from 'react';
3
+ import { cx } from './cx.js';
4
+ export function Field({ label, hint, error, reserveHint, children, className, }) {
5
+ const id = useId();
6
+ const describedBy = [hint ? `${id}-hint` : '', error ? `${id}-err` : ''].filter(Boolean).join(' ') || undefined;
7
+ const props = { id, 'aria-describedby': describedBy, 'aria-invalid': error ? true : undefined };
8
+ return (_jsxs("div", { className: cx('field', className), children: [typeof children === 'function' ? (_jsxs(_Fragment, { children: [_jsx("label", { htmlFor: id, className: "label", children: label }), children(props)] })) : (_jsxs("label", { children: [_jsx("span", { className: "label", children: label }), children] })), hint ? (_jsx("p", { id: `${id}-hint`, className: "field-hint", children: hint })) : null, !hint && !error && reserveHint ? (_jsx("p", { "aria-hidden": true, className: "field-hint field-reserve", children: "\u00A0" })) : null, error ? (_jsx("p", { id: `${id}-err`, role: "alert", className: "field-error", children: error })) : null] }));
9
+ }
10
+ export function Input({ className, ...rest }) {
11
+ return _jsx("input", { className: cx('control', className), ...rest });
12
+ }
13
+ export function Textarea({ className, ...rest }) {
14
+ return _jsx("textarea", { className: cx('control', className), ...rest });
15
+ }
16
+ export function Select({ options, className, ...rest }) {
17
+ return (_jsx("select", { className: cx('control', className), ...rest, children: options.map((o) => (_jsx("option", { value: o.value, children: o.label }, o.value))) }));
18
+ }
19
+ export function FileInput({ className, ...rest }) {
20
+ return _jsx("input", { type: "file", className: cx('control', className), ...rest });
21
+ }
22
+ export function ChipSelect({ label, options, value, onChange, }) {
23
+ return (_jsx("div", { className: "chips", role: "group", "aria-label": label, children: options.map((o) => {
24
+ const on = value.includes(o.value);
25
+ return (_jsx("button", { type: "button", className: "chip", title: o.title, "aria-pressed": on, onClick: () => onChange(on ? value.filter((v) => v !== o.value) : [...value, o.value]), children: o.label }, o.value));
26
+ }) }));
27
+ }
28
+ export function Switch({ checked, onCheckedChange, disabled, label, }) {
29
+ return (_jsxs("label", { className: "switch", children: [_jsx("input", { type: "checkbox", role: "switch", checked: checked, disabled: disabled, onChange: (e) => onCheckedChange(e.target.checked) }), _jsx("span", { children: label })] }));
30
+ }
31
+ export function RadioGroup({ label, value, options, onChange, }) {
32
+ const name = useId();
33
+ return (_jsxs("fieldset", { className: "field", children: [_jsx("legend", { className: "label", children: label }), options.map((o) => (_jsxs("label", { className: "switch", children: [_jsx("input", { type: "radio", name: name, value: o.value, checked: value === o.value, onChange: () => onChange(o.value) }), o.label] }, o.value)))] }));
34
+ }
35
+ export function Segmented({ label, value, options, onChange, }) {
36
+ const name = useId();
37
+ return (_jsxs("fieldset", { children: [_jsx("legend", { className: "label", children: label }), _jsx("div", { className: "segmented", role: "radiogroup", "aria-label": label, children: options.map((o) => (_jsxs("label", { children: [_jsx("input", { className: "sr-only", type: "radio", name: name, value: o.value, checked: value === o.value, onChange: () => onChange(o.value) }), o.label] }, o.value))) })] }));
38
+ }
39
+ //# sourceMappingURL=form.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"form.js","sourceRoot":"","sources":["../src/form.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export type IconName = 'play' | 'external' | 'close' | 'menu';
2
+ /** Crisp-edge marks. Pass `label` when the icon is the only content of a control. */
3
+ export declare function Icon({ name, label, className }: {
4
+ name: IconName;
5
+ label?: string;
6
+ className?: string;
7
+ }): import("react").JSX.Element;
8
+ //# sourceMappingURL=icons.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"icons.d.ts","sourceRoot":"","sources":["../src/icons.tsx"],"names":[],"mappings":"AAEA,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,UAAU,GAAG,OAAO,GAAG,MAAM,CAAC;AAE9D,qFAAqF;AACrF,wBAAgB,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,+BAuCtG"}
package/dist/icons.js ADDED
@@ -0,0 +1,7 @@
1
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { cx } from './cx.js';
3
+ /** Crisp-edge marks. Pass `label` when the icon is the only content of a control. */
4
+ export function Icon({ name, label, className }) {
5
+ return (_jsxs("svg", { viewBox: "0 0 16 16", className: cx('icon', className), shapeRendering: "crispEdges", "aria-hidden": label ? undefined : true, "aria-label": label, role: label ? 'img' : undefined, children: [name === 'play' && _jsx("polygon", { points: "4,2 14,8 4,14", fill: "currentColor" }), name === 'external' && (_jsxs(_Fragment, { children: [_jsx("rect", { x: "2", y: "4", width: "8", height: "10", fill: "none", stroke: "currentColor", strokeWidth: "2" }), _jsx("polygon", { points: "8,2 14,2 14,8 12,8 12,5 9,8 7,6 10,3 8,3", fill: "currentColor" })] })), name === 'close' && (_jsxs(_Fragment, { children: [_jsx("rect", { x: "3", y: "2", width: "2", height: "2", fill: "currentColor" }), _jsx("rect", { x: "5", y: "4", width: "2", height: "2", fill: "currentColor" }), _jsx("rect", { x: "7", y: "6", width: "2", height: "2", fill: "currentColor" }), _jsx("rect", { x: "9", y: "4", width: "2", height: "2", fill: "currentColor" }), _jsx("rect", { x: "11", y: "2", width: "2", height: "2", fill: "currentColor" }), _jsx("rect", { x: "3", y: "12", width: "2", height: "2", fill: "currentColor" }), _jsx("rect", { x: "5", y: "10", width: "2", height: "2", fill: "currentColor" }), _jsx("rect", { x: "9", y: "10", width: "2", height: "2", fill: "currentColor" }), _jsx("rect", { x: "11", y: "12", width: "2", height: "2", fill: "currentColor" })] })), name === 'menu' && (_jsxs(_Fragment, { children: [_jsx("rect", { x: "2", y: "3", width: "12", height: "2", fill: "currentColor" }), _jsx("rect", { x: "2", y: "7", width: "12", height: "2", fill: "currentColor" }), _jsx("rect", { x: "2", y: "11", width: "12", height: "2", fill: "currentColor" })] }))] }));
6
+ }
7
+ //# sourceMappingURL=icons.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"icons.js","sourceRoot":"","sources":["../src/icons.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ export { cx } from './cx.js';
2
+ export { pageWindow, PAGE_SIZES } from './page-window.js';
3
+ export { Icon, type IconName } from './icons.js';
4
+ export { Button, buttonClass, type ButtonSize, type ButtonVariant } from './button.js';
5
+ export { Text, type TextVariant } from './text.js';
6
+ export { AppFooter, AppFrame, AppHeader, AppMain, AppSection, Cluster, Drawer, Stack } from './chrome.js';
7
+ export { Badge, Card, Notice, type BadgeTone, type NoticeTone } from './surface.js';
8
+ export { ChipSelect, Field, FileInput, Input, RadioGroup, Segmented, Select, Switch, Textarea } from './form.js';
9
+ export { Dialog, Tab, Tabs, TabsList, TabsPanel, ToastProvider, useToast } from './overlay.js';
10
+ export { ErrorBox, Loading, Pagination } from './status.js';
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,IAAI,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,UAAU,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AACvF,OAAO,EAAE,IAAI,EAAE,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAC1G,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,SAAS,EAAE,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AACpF,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACjH,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAC/F,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,11 @@
1
+ export { cx } from './cx.js';
2
+ export { pageWindow, PAGE_SIZES } from './page-window.js';
3
+ export { Icon } from './icons.js';
4
+ export { Button, buttonClass } from './button.js';
5
+ export { Text } from './text.js';
6
+ export { AppFooter, AppFrame, AppHeader, AppMain, AppSection, Cluster, Drawer, Stack } from './chrome.js';
7
+ export { Badge, Card, Notice } from './surface.js';
8
+ export { ChipSelect, Field, FileInput, Input, RadioGroup, Segmented, Select, Switch, Textarea } from './form.js';
9
+ export { Dialog, Tab, Tabs, TabsList, TabsPanel, ToastProvider, useToast } from './overlay.js';
10
+ export { ErrorBox, Loading, Pagination } from './status.js';
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,IAAI,EAAiB,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,WAAW,EAAuC,MAAM,aAAa,CAAC;AACvF,OAAO,EAAE,IAAI,EAAoB,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAC1G,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAmC,MAAM,cAAc,CAAC;AACpF,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACjH,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAC/F,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,33 @@
1
+ import { type ReactNode } from 'react';
2
+ export declare function Dialog({ open, onOpenChange, title, description, children, wide, trigger, }: {
3
+ open: boolean;
4
+ onOpenChange: (open: boolean) => void;
5
+ title: string;
6
+ description?: string;
7
+ children: ReactNode;
8
+ wide?: boolean;
9
+ trigger?: ReactNode;
10
+ }): import("react").JSX.Element;
11
+ export declare function Tabs({ value, onValueChange, children }: {
12
+ value: string;
13
+ onValueChange: (value: string) => void;
14
+ children: ReactNode;
15
+ }): import("react").JSX.Element;
16
+ export declare function TabsList({ children }: {
17
+ children: ReactNode;
18
+ }): import("react").JSX.Element;
19
+ export declare function Tab({ value, children }: {
20
+ value: string;
21
+ children: ReactNode;
22
+ }): import("react").JSX.Element;
23
+ export declare function TabsPanel({ value, children }: {
24
+ value: string;
25
+ children: ReactNode;
26
+ }): import("react").JSX.Element | null;
27
+ type ToastTone = 'info' | 'error';
28
+ export declare function ToastProvider({ children }: {
29
+ children: ReactNode;
30
+ }): import("react").JSX.Element;
31
+ export declare function useToast(): (text: string, tone?: ToastTone) => void;
32
+ export {};
33
+ //# sourceMappingURL=overlay.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"overlay.d.ts","sourceRoot":"","sources":["../src/overlay.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAuF,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAI5H,wBAAgB,MAAM,CAAC,EACrB,IAAI,EACJ,YAAY,EACZ,KAAK,EACL,WAAW,EACX,QAAQ,EACR,IAAI,EACJ,OAAO,GACR,EAAE;IACD,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,SAAS,CAAC;IACpB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,SAAS,CAAC;CACrB,+BAmCA;AAKD,wBAAgB,IAAI,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAAC,QAAQ,EAAE,SAAS,CAAA;CAAE,+BAGtI;AAED,wBAAgB,QAAQ,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,+BAM7D;AAED,wBAAgB,GAAG,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,SAAS,CAAA;CAAE,+BAS9E;AAED,wBAAgB,SAAS,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,SAAS,CAAA;CAAE,sCAQpF;AAED,KAAK,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC;AAIlC,wBAAgB,aAAa,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,+BAoBlE;AAED,wBAAgB,QAAQ,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,SAAS,KAAK,IAAI,CAInE"}
@@ -0,0 +1,61 @@
1
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { createContext, useCallback, useContext, useEffect, useId, useMemo, useRef, useState } from 'react';
3
+ import { cx } from './cx.js';
4
+ import { Icon } from './icons.js';
5
+ export function Dialog({ open, onOpenChange, title, description, children, wide, trigger, }) {
6
+ const ref = useRef(null);
7
+ const titleId = useId();
8
+ useEffect(() => {
9
+ const el = ref.current;
10
+ if (!el)
11
+ return;
12
+ if (open && !el.open) {
13
+ if (typeof el.showModal === 'function')
14
+ el.showModal();
15
+ else
16
+ el.setAttribute('open', '');
17
+ }
18
+ if (!open && el.open)
19
+ el.close();
20
+ }, [open]);
21
+ return (_jsxs(_Fragment, { children: [trigger ? (_jsx("span", { className: "dialog-trigger", onClick: () => onOpenChange(true), children: trigger })) : null, _jsxs("dialog", { ref: ref, className: cx('dialog', wide && 'dialog-wide'), "aria-labelledby": titleId, onClose: () => onOpenChange(false), children: [_jsxs("div", { className: "dialog-head", children: [_jsxs("div", { children: [_jsx("h2", { id: titleId, className: "dialog-title", children: title }), description ? _jsx("p", { className: "dialog-desc", children: description }) : null] }), _jsx("button", { type: "button", className: "btn btn-ghost btn-sm", "aria-label": "Close", onClick: () => onOpenChange(false), children: _jsx(Icon, { name: "close" }) })] }), _jsx("div", { className: "dialog-body", children: children })] })] }));
22
+ }
23
+ const TabsState = createContext(null);
24
+ export function Tabs({ value, onValueChange, children }) {
25
+ const state = useMemo(() => ({ value, onValueChange }), [value, onValueChange]);
26
+ return _jsx(TabsState.Provider, { value: state, children: children });
27
+ }
28
+ export function TabsList({ children }) {
29
+ return (_jsx("div", { className: "tabs", role: "tablist", children: children }));
30
+ }
31
+ export function Tab({ value, children }) {
32
+ const state = useContext(TabsState);
33
+ if (!state)
34
+ throw new Error('Tab must be inside Tabs');
35
+ const selected = state.value === value;
36
+ return (_jsx("button", { type: "button", className: "tab", role: "tab", "aria-selected": selected, onClick: () => state.onValueChange(value), children: children }));
37
+ }
38
+ export function TabsPanel({ value, children }) {
39
+ const state = useContext(TabsState);
40
+ if (!state || state.value !== value)
41
+ return null;
42
+ return (_jsx("div", { className: "tab-panel", role: "tabpanel", children: children }));
43
+ }
44
+ const ToastPush = createContext(undefined);
45
+ export function ToastProvider({ children }) {
46
+ const [toasts, setToasts] = useState([]);
47
+ const next = useRef(0);
48
+ const push = useCallback((text, tone = 'info') => {
49
+ const id = next.current++;
50
+ setToasts((t) => [...t, { id, tone, text }]);
51
+ setTimeout(() => setToasts((t) => t.filter((x) => x.id !== id)), tone === 'error' ? 6000 : 3000);
52
+ }, []);
53
+ return (_jsxs(ToastPush.Provider, { value: push, children: [children, _jsx("div", { className: "toasts", role: "status", "aria-live": "polite", children: toasts.map((t) => (_jsx("div", { className: cx('toast', t.tone === 'error' && 'toast-error'), children: t.text }, t.id))) })] }));
54
+ }
55
+ export function useToast() {
56
+ const push = useContext(ToastPush);
57
+ if (!push)
58
+ throw new Error('useToast must be inside ToastProvider');
59
+ return push;
60
+ }
61
+ //# sourceMappingURL=overlay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"overlay.js","sourceRoot":"","sources":["../src/overlay.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ /** Page buttons: first, last, and a window around the current page. A gap never hides just one page. */
2
+ export declare function pageWindow(page: number, pages: number, span?: number): (number | '…')[];
3
+ export declare const PAGE_SIZES: readonly [10, 25, 50, 100];
4
+ //# sourceMappingURL=page-window.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page-window.d.ts","sourceRoot":"","sources":["../src/page-window.ts"],"names":[],"mappings":"AAAA,wGAAwG;AACxG,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,SAAI,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,EAAE,CAOlF;AAED,eAAO,MAAM,UAAU,YAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAU,CAAC"}
@@ -0,0 +1,14 @@
1
+ /** Page buttons: first, last, and a window around the current page. A gap never hides just one page. */
2
+ export function pageWindow(page, pages, span = 1) {
3
+ if (pages <= span * 2 + 5)
4
+ return Array.from({ length: pages }, (_, i) => i + 1);
5
+ let from = Math.max(2, Math.min(page - span, pages - span * 2 - 1));
6
+ let to = Math.min(pages - 1, Math.max(page + span, span * 2 + 2));
7
+ if (from === 3)
8
+ from = 2;
9
+ if (to === pages - 2)
10
+ to = pages - 1;
11
+ return [1, ...(from > 2 ? ['…'] : []), ...Array.from({ length: to - from + 1 }, (_, i) => from + i), ...(to < pages - 1 ? ['…'] : []), pages];
12
+ }
13
+ export const PAGE_SIZES = [10, 25, 50, 100];
14
+ //# sourceMappingURL=page-window.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page-window.js","sourceRoot":"","sources":["../src/page-window.ts"],"names":[],"mappings":"AAAA,wGAAwG;AACxG,MAAM,UAAU,UAAU,CAAC,IAAY,EAAE,KAAa,EAAE,IAAI,GAAG,CAAC;IAC9D,IAAI,KAAK,IAAI,IAAI,GAAG,CAAC,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACjF,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,EAAE,KAAK,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACpE,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,EAAE,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAClE,IAAI,IAAI,KAAK,CAAC;QAAE,IAAI,GAAG,CAAC,CAAC;IACzB,IAAI,EAAE,KAAK,KAAK,GAAG,CAAC;QAAE,EAAE,GAAG,KAAK,GAAG,CAAC,CAAC;IACrC,OAAO,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAY,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAY,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;AAClK,CAAC;AAED,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAU,CAAC"}
@@ -0,0 +1,18 @@
1
+ export declare function Loading({ label }: {
2
+ label?: string;
3
+ }): import("react").JSX.Element;
4
+ export declare function ErrorBox({ title, children }: {
5
+ title?: string;
6
+ children: string;
7
+ }): import("react").JSX.Element;
8
+ export declare function Pagination({ page, pages, total, size, noun, onPage, onSize, sizes, }: {
9
+ page: number;
10
+ pages: number;
11
+ total: number;
12
+ size: number;
13
+ noun: string;
14
+ onPage: (page: number) => void;
15
+ onSize?: (size: number) => void;
16
+ sizes?: readonly number[];
17
+ }): import("react").JSX.Element | null;
18
+ //# sourceMappingURL=status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../src/status.tsx"],"names":[],"mappings":"AAGA,wBAAgB,OAAO,CAAC,EAAE,KAAiB,EAAE,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,+BAMhE;AAED,wBAAgB,QAAQ,CAAC,EAAE,KAAe,EAAE,QAAQ,EAAE,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,+BAO3F;AAED,wBAAgB,UAAU,CAAC,EACzB,IAAI,EACJ,KAAK,EACL,KAAK,EACL,IAAI,EACJ,IAAI,EACJ,MAAM,EACN,MAAM,EACN,KAAkB,GACnB,EAAE;IACD,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC3B,sCAkDA"}
package/dist/status.js ADDED
@@ -0,0 +1,17 @@
1
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { PAGE_SIZES, pageWindow } from './page-window.js';
3
+ import { cx } from './cx.js';
4
+ export function Loading({ label = 'Loading' }) {
5
+ return (_jsxs("p", { className: "pixel text-label", role: "status", children: [label, "\u2026"] }));
6
+ }
7
+ export function ErrorBox({ title = 'Error', children }) {
8
+ return (_jsxs("div", { className: "notice notice-error", role: "alert", children: [_jsx("p", { className: "text-label", children: title }), _jsx("p", { className: "text-body", children: children })] }));
9
+ }
10
+ export function Pagination({ page, pages, total, size, noun, onPage, onSize, sizes = PAGE_SIZES, }) {
11
+ if (total === 0)
12
+ return null;
13
+ const from = (page - 1) * size + 1;
14
+ const to = Math.min(page * size, total);
15
+ return (_jsxs("nav", { "aria-label": `${noun} pages`, className: "pager", children: [_jsxs("p", { className: "pager-count", "aria-live": "polite", children: [from, "\u2013", to, " of ", total, " ", noun] }), _jsxs("div", { className: "cluster", children: [pages > 1 && (_jsxs(_Fragment, { children: [_jsx("button", { type: "button", className: "btn btn-ghost", disabled: page <= 1, onClick: () => onPage(page - 1), "aria-label": "Previous page", children: "\u2039 Prev" }), pageWindow(page, pages).map((p, i) => p === '…' ? (_jsx("span", { "aria-hidden": true, children: "\u2026" }, `gap-${i}`)) : (_jsx("button", { type: "button", className: cx('btn', p !== page && 'btn-ghost'), "aria-current": p === page ? 'page' : undefined, "aria-label": `Page ${p}`, onClick: () => onPage(p), children: p }, p))), _jsx("button", { type: "button", className: "btn btn-ghost", disabled: page >= pages, onClick: () => onPage(page + 1), "aria-label": "Next page", children: "Next \u203A" })] })), onSize && (_jsx("select", { className: "control control-auto", value: size, "aria-label": "Per page", onChange: (e) => onSize(Number(e.target.value)), children: sizes.map((n) => (_jsxs("option", { value: n, children: [n, " per page"] }, n))) }))] })] }));
16
+ }
17
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../src/status.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { HTMLAttributes, ReactNode } from 'react';
2
+ export declare function Card({ className, children, ...rest }: HTMLAttributes<HTMLDivElement>): import("react").JSX.Element;
3
+ export type NoticeTone = 'info' | 'warn' | 'error' | 'preview';
4
+ export declare function Notice({ tone, children, className }: {
5
+ tone?: NoticeTone;
6
+ children: ReactNode;
7
+ className?: string;
8
+ }): import("react").JSX.Element;
9
+ export type BadgeTone = 'neutral' | 'ok' | 'warn' | 'accent' | 'danger';
10
+ export declare function Badge({ tone, children, className }: {
11
+ tone?: BadgeTone;
12
+ children: ReactNode;
13
+ className?: string;
14
+ }): import("react").JSX.Element;
15
+ //# sourceMappingURL=surface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"surface.d.ts","sourceRoot":"","sources":["../src/surface.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvD,wBAAgB,IAAI,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,EAAE,cAAc,CAAC,cAAc,CAAC,+BAMpF;AAED,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;AAE/D,wBAAgB,MAAM,CAAC,EAAE,IAAa,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE;IAAE,IAAI,CAAC,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE,SAAS,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,+BAM5H;AAED,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,IAAI,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAExE,wBAAgB,KAAK,CAAC,EAAE,IAAgB,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE;IAAE,IAAI,CAAC,EAAE,SAAS,CAAC;IAAC,QAAQ,EAAE,SAAS,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,+BAE7H"}
@@ -0,0 +1,12 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { cx } from './cx.js';
3
+ export function Card({ className, children, ...rest }) {
4
+ return (_jsx("div", { className: cx('panel', 'card', className), ...rest, children: children }));
5
+ }
6
+ export function Notice({ tone = 'info', children, className }) {
7
+ return (_jsx("div", { role: tone === 'error' ? 'alert' : undefined, className: cx('notice', tone !== 'info' && `notice-${tone}`, className), children: children }));
8
+ }
9
+ export function Badge({ tone = 'neutral', children, className }) {
10
+ return _jsx("span", { className: cx('badge', tone !== 'neutral' && `badge-${tone}`, className), children: children });
11
+ }
12
+ //# sourceMappingURL=surface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"surface.js","sourceRoot":"","sources":["../src/surface.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAE7B,MAAM,UAAU,IAAI,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAkC;IACnF,OAAO,CACL,cAAK,SAAS,EAAE,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,KAAM,IAAI,YACrD,QAAQ,GACL,CACP,CAAC;AACJ,CAAC;AAID,MAAM,UAAU,MAAM,CAAC,EAAE,IAAI,GAAG,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAkE;IAC3H,OAAO,CACL,cAAK,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE,SAAS,EAAE,EAAE,CAAC,QAAQ,EAAE,IAAI,KAAK,MAAM,IAAI,UAAU,IAAI,EAAE,EAAE,SAAS,CAAC,YACvH,QAAQ,GACL,CACP,CAAC;AACJ,CAAC;AAID,MAAM,UAAU,KAAK,CAAC,EAAE,IAAI,GAAG,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAiE;IAC5H,OAAO,eAAM,SAAS,EAAE,EAAE,CAAC,OAAO,EAAE,IAAI,KAAK,SAAS,IAAI,SAAS,IAAI,EAAE,EAAE,SAAS,CAAC,YAAG,QAAQ,GAAQ,CAAC;AAC3G,CAAC"}
package/dist/text.d.ts ADDED
@@ -0,0 +1,15 @@
1
+ import type { HTMLAttributes, ReactNode } from 'react';
2
+ declare const TAG: {
3
+ readonly display: 'h1';
4
+ readonly title: 'h2';
5
+ readonly label: 'p';
6
+ readonly body: 'p';
7
+ readonly muted: 'p';
8
+ };
9
+ export type TextVariant = keyof typeof TAG;
10
+ export declare function Text({ variant, className, children, ...rest }: HTMLAttributes<HTMLElement> & {
11
+ variant?: TextVariant;
12
+ children?: ReactNode;
13
+ }): import("react").JSX.Element;
14
+ export {};
15
+ //# sourceMappingURL=text.d.ts.map