@surflane/ui 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 (89) hide show
  1. package/LICENSE-APACHE +202 -0
  2. package/LICENSE-MIT +18 -0
  3. package/README.md +55 -2
  4. package/dist/advanced-forms.d.ts +115 -0
  5. package/dist/advanced-forms.js +93 -0
  6. package/dist/app-shell.d.ts +23 -0
  7. package/dist/app-shell.js +29 -0
  8. package/dist/button.d.ts +11 -0
  9. package/dist/button.js +16 -0
  10. package/dist/chart.d.ts +48 -0
  11. package/dist/chart.js +126 -0
  12. package/dist/commands.d.ts +47 -0
  13. package/dist/commands.js +27 -0
  14. package/dist/content.d.ts +59 -0
  15. package/dist/content.js +104 -0
  16. package/dist/context-overlays.d.ts +95 -0
  17. package/dist/context-overlays.js +50 -0
  18. package/dist/data.d.ts +95 -0
  19. package/dist/data.js +40 -0
  20. package/dist/date-picker.d.ts +23 -0
  21. package/dist/date-picker.js +39 -0
  22. package/dist/dialog-focus.d.ts +5 -0
  23. package/dist/dialog-focus.js +35 -0
  24. package/dist/dialog.d.ts +59 -0
  25. package/dist/dialog.js +49 -0
  26. package/dist/feedback.d.ts +76 -0
  27. package/dist/feedback.js +35 -0
  28. package/dist/file-upload.d.ts +77 -0
  29. package/dist/file-upload.js +344 -0
  30. package/dist/filter-bar.d.ts +17 -0
  31. package/dist/filter-bar.js +23 -0
  32. package/dist/form-state.d.ts +5 -0
  33. package/dist/form-state.js +63 -0
  34. package/dist/forms.d.ts +91 -0
  35. package/dist/forms.js +109 -0
  36. package/dist/foundations.d.ts +51 -0
  37. package/dist/foundations.js +55 -0
  38. package/dist/icon.d.ts +37 -0
  39. package/dist/icon.js +28 -0
  40. package/dist/index.d.ts +37 -0
  41. package/dist/index.js +38 -0
  42. package/dist/input-extensions.d.ts +117 -0
  43. package/dist/input-extensions.js +64 -0
  44. package/dist/input.d.ts +7 -0
  45. package/dist/input.js +10 -0
  46. package/dist/markdown.d.ts +15 -0
  47. package/dist/markdown.js +121 -0
  48. package/dist/menu.d.ts +79 -0
  49. package/dist/menu.js +44 -0
  50. package/dist/messages.d.ts +63 -0
  51. package/dist/messages.js +38 -0
  52. package/dist/navigation-menu.d.ts +52 -0
  53. package/dist/navigation-menu.js +31 -0
  54. package/dist/navigation.d.ts +107 -0
  55. package/dist/navigation.js +108 -0
  56. package/dist/otp-field.d.ts +12 -0
  57. package/dist/otp-field.js +46 -0
  58. package/dist/pagination.d.ts +23 -0
  59. package/dist/pagination.js +44 -0
  60. package/dist/panels.d.ts +66 -0
  61. package/dist/panels.js +99 -0
  62. package/dist/parts.d.ts +9 -0
  63. package/dist/parts.js +22 -0
  64. package/dist/popover.d.ts +21 -0
  65. package/dist/popover.js +13 -0
  66. package/dist/scroll-area.d.ts +8 -0
  67. package/dist/scroll-area.js +39 -0
  68. package/dist/select.d.ts +33 -0
  69. package/dist/select.js +97 -0
  70. package/dist/sizing.d.ts +13 -0
  71. package/dist/sizing.js +23 -0
  72. package/dist/slot.d.ts +2 -0
  73. package/dist/slot.js +10 -0
  74. package/dist/status.d.ts +22 -0
  75. package/dist/status.js +17 -0
  76. package/dist/syntax-engine.d.ts +5 -0
  77. package/dist/syntax-engine.js +129 -0
  78. package/dist/syntax-highlighter.d.ts +17 -0
  79. package/dist/syntax-highlighter.js +64 -0
  80. package/dist/toast.d.ts +59 -0
  81. package/dist/toast.js +99 -0
  82. package/dist/tone-transition.d.ts +4 -0
  83. package/dist/tone-transition.js +81 -0
  84. package/dist/tooltip.d.ts +11 -0
  85. package/dist/tooltip.js +13 -0
  86. package/dist/tree.d.ts +28 -0
  87. package/dist/tree.js +311 -0
  88. package/package.json +109 -4
  89. package/src/styles.css +3799 -0
package/dist/forms.js ADDED
@@ -0,0 +1,109 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import * as React from 'react';
4
+ import { useComponentSize } from './sizing.js';
5
+ import { Field as BaseField } from '@base-ui/react/field';
6
+ import { Fieldset as BaseFieldset } from '@base-ui/react/fieldset';
7
+ import { Form as BaseForm } from '@base-ui/react/form';
8
+ import { Checkbox as BaseCheckbox } from '@base-ui/react/checkbox';
9
+ import { CheckboxGroup as BaseCheckboxGroup } from '@base-ui/react/checkbox-group';
10
+ import { Radio as BaseRadio } from '@base-ui/react/radio';
11
+ import { RadioGroup as BaseRadioGroup } from '@base-ui/react/radio-group';
12
+ import { Switch as BaseSwitch } from '@base-ui/react/switch';
13
+ const ChoiceResetPaint = React.createContext(0);
14
+ import { skin, part } from './parts.js';
15
+ const FieldRoot = part(BaseField.Root, 'pui-field');
16
+ const FieldLabel = part(BaseField.Label, 'pui-field-label');
17
+ const FieldControl = part(BaseField.Control, 'pui-input');
18
+ const FieldDescription = part(BaseField.Description, 'pui-field-description');
19
+ const FieldError = part(BaseField.Error, 'pui-field-error');
20
+ const FieldItem = part(BaseField.Item, 'pui-field-item');
21
+ export const Field = {
22
+ ...BaseField,
23
+ Root: FieldRoot,
24
+ Label: FieldLabel,
25
+ Control: FieldControl,
26
+ Description: FieldDescription,
27
+ Error: FieldError,
28
+ Item: FieldItem,
29
+ };
30
+ export const Fieldset = {
31
+ ...BaseFieldset,
32
+ Root: part(BaseFieldset.Root, 'pui-fieldset'),
33
+ Legend: part(BaseFieldset.Legend, 'pui-fieldset-legend'),
34
+ };
35
+ export function Form({ className, ...props }) {
36
+ return _jsx(BaseForm, { ...props, className: skin('pui-form', className) });
37
+ }
38
+ export const Textarea = React.forwardRef(function Textarea({ className, size, ...props }, ref) {
39
+ const scheme = useComponentSize(size);
40
+ return (_jsx("textarea", { "data-ui-size": scheme, ...props, ref: ref, className: ['pui-input pui-textarea', className]
41
+ .filter(Boolean)
42
+ .join(' ') }));
43
+ });
44
+ import { useRootRef, useResetValue } from './form-state.js';
45
+ const CheckboxRoot = React.forwardRef(function CheckboxRoot({ checked, defaultChecked = false, onCheckedChange, className, form, ...props }, ref) {
46
+ React.useContext(ChoiceResetPaint);
47
+ const [element, attach] = useRootRef(ref);
48
+ const [selected, setSelected] = useResetValue(checked, defaultChecked, element, form);
49
+ return (_jsx(BaseCheckbox.Root, { ...props, form: form, ref: attach, checked: selected, className: skin('pui-checkbox', className), onCheckedChange: (next, event) => {
50
+ onCheckedChange?.(next, event);
51
+ if (checked === undefined && !event.isCanceled)
52
+ setSelected(next);
53
+ } }));
54
+ });
55
+ const CheckboxIndicator = React.forwardRef(function CheckboxIndicator({ className, children, ...props }, ref) {
56
+ return (_jsx(BaseCheckbox.Indicator, { ...props, ref: ref, className: skin('pui-checkbox-indicator', className), children: children ?? (_jsxs("svg", { width: '14', height: '14', viewBox: '0 0 20 20', fill: 'none', stroke: 'currentColor', strokeWidth: '2', "aria-hidden": 'true', children: [_jsx("path", { className: 'pui-checkbox-check', d: 'm4 10 4 4 8-8' }), _jsx("path", { className: 'pui-checkbox-mixed', d: 'M4 10h12' })] })) }));
57
+ });
58
+ export const Checkbox = {
59
+ ...BaseCheckbox,
60
+ Root: CheckboxRoot,
61
+ Indicator: CheckboxIndicator,
62
+ };
63
+ export const CheckboxGroup = React.forwardRef(function CheckboxGroup({ value, defaultValue = [], onValueChange, className, ...props }, ref) {
64
+ const [element, attach] = useRootRef(ref);
65
+ const [selected, setSelected, revision] = useResetValue(value, defaultValue, element);
66
+ return (_jsx(ChoiceResetPaint.Provider, { value: revision, children: _jsx(BaseCheckboxGroup, { ...props, ref: attach, value: selected, className: skin('pui-choice-group', className), onValueChange: (next, event) => {
67
+ onValueChange?.(next, event);
68
+ if (value === undefined && !event.isCanceled)
69
+ setSelected(next);
70
+ } }) }));
71
+ });
72
+ export function RadioGroup({ value, defaultValue, onValueChange, className, form, ref, ...props }) {
73
+ const [element, attach] = useRootRef(ref);
74
+ const [selected, setSelected, revision] = useResetValue(value, defaultValue ?? null, element, form);
75
+ return (_jsx(ChoiceResetPaint.Provider, { value: revision, children: _jsx(BaseRadioGroup, { ...props, form: form, ref: attach, value: selected, className: skin('pui-choice-group', className), onValueChange: (next, event) => {
76
+ onValueChange?.(next, event);
77
+ if (value === undefined && !event.isCanceled)
78
+ setSelected(next);
79
+ } }) }));
80
+ }
81
+ const RadioRoot = React.forwardRef(function RadioRoot({ className, ...props }, ref) {
82
+ React.useContext(ChoiceResetPaint);
83
+ return (_jsx(BaseRadio.Root, { ...props, ref: ref, className: skin('pui-radio', className) }));
84
+ });
85
+ export const Radio = {
86
+ ...BaseRadio,
87
+ Root: RadioRoot,
88
+ Indicator: part(BaseRadio.Indicator, 'pui-radio-indicator'),
89
+ };
90
+ const SwitchRoot = React.forwardRef(function SwitchRoot({ checked, defaultChecked = false, onCheckedChange, className, form, ...props }, ref) {
91
+ const [element, attach] = useRootRef(ref);
92
+ const [selected, setSelected] = useResetValue(checked, defaultChecked, element, form);
93
+ return (_jsx(BaseSwitch.Root, { ...props, form: form, ref: attach, checked: selected, className: skin('pui-switch', className), onCheckedChange: (next, event) => {
94
+ onCheckedChange?.(next, event);
95
+ if (checked === undefined && !event.isCanceled)
96
+ setSelected(next);
97
+ } }));
98
+ });
99
+ export const Switch = {
100
+ ...BaseSwitch,
101
+ Root: SwitchRoot,
102
+ Thumb: part(BaseSwitch.Thumb, 'pui-switch-thumb'),
103
+ };
104
+ // Flat names for React Server Components, which cannot dot into client exports.
105
+ export { CheckboxIndicator, CheckboxRoot, FieldControl, FieldDescription, FieldError, FieldItem, FieldLabel, FieldRoot, RadioRoot, SwitchRoot, };
106
+ export const { Validity: FieldValidity } = Field;
107
+ export const { Legend: FieldsetLegend, Root: FieldsetRoot } = Fieldset;
108
+ export const { Indicator: RadioIndicator } = Radio;
109
+ export const { Thumb: SwitchThumb } = Switch;
@@ -0,0 +1,51 @@
1
+ import * as React from 'react';
2
+ export type Space = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 8 | 10 | 12 | 16 | 20;
3
+ export declare const Container: React.ForwardRefExoticComponent<Omit<React.ClassAttributes<HTMLDivElement> & React.HTMLAttributes<HTMLDivElement> & {
4
+ width?: "workspace" | "reading" | "wide" | "full";
5
+ }, "ref"> & React.RefAttributes<HTMLDivElement>>;
6
+ export declare const Stack: React.ForwardRefExoticComponent<Omit<React.ClassAttributes<HTMLDivElement> & React.HTMLAttributes<HTMLDivElement> & {
7
+ gap?: Space;
8
+ }, "ref"> & React.RefAttributes<HTMLDivElement>>;
9
+ export declare const Inline: React.ForwardRefExoticComponent<Omit<React.ClassAttributes<HTMLDivElement> & React.HTMLAttributes<HTMLDivElement> & {
10
+ gap?: Space;
11
+ justify?: "start" | "between" | "end";
12
+ }, "ref"> & React.RefAttributes<HTMLDivElement>>;
13
+ export declare const Grid: React.ForwardRefExoticComponent<Omit<React.ClassAttributes<HTMLDivElement> & React.HTMLAttributes<HTMLDivElement> & {
14
+ gap?: Space;
15
+ /** Extend inline edges by the matching child content inset (card padding or table cell inset). The parent
16
+ * must reserve this space for the card surface and focus outline. */
17
+ bleed?: Space;
18
+ columns?: 1 | 2 | 3 | 4 | "layout";
19
+ }, "ref"> & React.RefAttributes<HTMLDivElement>>;
20
+ /** Spans are explicit at each viewport breakpoint; placement follows DOM order. */
21
+ export declare const GridItem: React.ForwardRefExoticComponent<Omit<React.ClassAttributes<HTMLDivElement> & React.HTMLAttributes<HTMLDivElement> & {
22
+ span?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12;
23
+ mediumSpan?: 1 | 2 | 3 | 4 | 5 | 6;
24
+ smallSpan?: 1 | 2 | 3 | 4;
25
+ }, "ref"> & React.RefAttributes<HTMLDivElement>>;
26
+ export declare const Surface: React.ForwardRefExoticComponent<Omit<React.ClassAttributes<HTMLDivElement> & React.HTMLAttributes<HTMLDivElement> & {
27
+ tone?: "canvas" | "subtle";
28
+ padding?: Space;
29
+ }, "ref"> & React.RefAttributes<HTMLDivElement>>;
30
+ export declare function Heading({ level, size, className, ...props }: React.HTMLAttributes<HTMLHeadingElement> & {
31
+ level?: 1 | 2 | 3 | 4 | 5 | 6;
32
+ size?: 'display' | 'title' | 'page' | 'section' | 'subsection' | 'workspace' | 'document';
33
+ }): React.JSX.Element;
34
+ export declare function Text({ as: Tag, variant, color, weight, className, ...props }: React.HTMLAttributes<HTMLElement> & {
35
+ as?: 'p' | 'span' | 'div';
36
+ variant?: 'body' | 'reading' | 'table' | 'caption' | 'label' | 'mono' | 'metric';
37
+ color?: 'primary' | 'secondary' | 'muted';
38
+ weight?: 'regular' | 'medium';
39
+ }): React.JSX.Element;
40
+ export declare function PageHeader({ as: Root, headingProps, actionsLabel, title, description, breadcrumb, actions, level, size, className, ...props }: Omit<React.ComponentProps<'div'>, 'title'> & {
41
+ as?: 'div' | 'header';
42
+ headingProps?: Omit<React.HTMLAttributes<HTMLHeadingElement>, 'children' | 'dangerouslySetInnerHTML'>;
43
+ actionsLabel?: string;
44
+ title: React.ReactNode;
45
+ description?: React.ReactNode;
46
+ breadcrumb?: React.ReactNode;
47
+ actions?: React.ReactNode;
48
+ level?: 1 | 2 | 3 | 4 | 5 | 6;
49
+ size?: 'title' | 'page' | 'workspace' | 'document';
50
+ }): React.JSX.Element;
51
+ export declare const Prose: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
@@ -0,0 +1,55 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import * as React from 'react';
4
+ const cx = (...values) => values.filter(Boolean).join(' ');
5
+ const gapStyle = (gap, style) => ({
6
+ ...(gap === undefined ? {} : { '--layout-gap': `var(--space-${gap})` }),
7
+ ...style,
8
+ });
9
+ export const Container = React.forwardRef(function Container({ width = 'workspace', className, ...props }, ref) {
10
+ return (_jsx("div", { ...props, ref: ref, className: cx('pui-container', className), "data-width": width }));
11
+ });
12
+ export const Stack = React.forwardRef(function Stack({ gap, className, style, ...props }, ref) {
13
+ return (_jsx("div", { ...props, ref: ref, className: cx('pui-stack', className), style: gapStyle(gap, style) }));
14
+ });
15
+ export const Inline = React.forwardRef(function Inline({ gap, justify = 'start', className, style, ...props }, ref) {
16
+ return (_jsx("div", { ...props, ref: ref, className: cx('pui-inline', className), "data-justify": justify, style: gapStyle(gap, style) }));
17
+ });
18
+ export const Grid = React.forwardRef(function Grid({ gap, bleed = 0, columns = 3, className, style, ...props }, ref) {
19
+ return (_jsx("div", { ...props, ref: ref, className: cx('pui-grid', className), "data-columns": columns, style: gapStyle(gap, {
20
+ '--grid-inline-bleed': `var(--space-${bleed})`,
21
+ ...style,
22
+ }) }));
23
+ });
24
+ /** Spans are explicit at each viewport breakpoint; placement follows DOM order. */
25
+ export const GridItem = React.forwardRef(function GridItem({ span, mediumSpan, smallSpan, className, style, ...props }, ref) {
26
+ return (_jsx("div", { ...props, ref: ref, className: cx('pui-grid-item', className), style: {
27
+ '--grid-item-span': span,
28
+ '--grid-item-span-medium': mediumSpan,
29
+ '--grid-item-span-small': smallSpan,
30
+ ...style,
31
+ } }));
32
+ });
33
+ export const Surface = React.forwardRef(function Surface({ tone = 'subtle', padding, className, style, ...props }, ref) {
34
+ return (_jsx("div", { ...props, ref: ref, className: cx('pui-surface', className), "data-tone": tone, style: {
35
+ ...(padding === undefined
36
+ ? {}
37
+ : { '--surface-padding': `var(--space-${padding})` }),
38
+ ...style,
39
+ } }));
40
+ });
41
+ export function Heading({ level = 2, size = 'section', className, ...props }) {
42
+ const Tag = `h${level}`;
43
+ return (_jsx(Tag, { ...props, className: cx('pui-heading', className), "data-size": size }));
44
+ }
45
+ export function Text({ as: Tag = 'p', variant = 'body', color = 'primary', weight = 'regular', className, ...props }) {
46
+ return (_jsx(Tag, { ...props, className: cx('pui-text', className), "data-variant": variant, "data-color": color, "data-weight": weight }));
47
+ }
48
+ export function PageHeader({ as: Root = 'div', headingProps, actionsLabel, title, description, breadcrumb, actions, level = 1, size = 'title', className, ...props }) {
49
+ return (_jsxs(Root, { ...props, className: cx('pui-page-header', className), children: [breadcrumb != null && breadcrumb !== false && breadcrumb !== '' && (_jsx("div", { className: 'pui-page-header-breadcrumb', children: breadcrumb })), _jsxs("div", { className: 'pui-page-header-content', children: [_jsxs("div", { className: 'pui-page-header-copy', children: [_jsx(Heading, { ...headingProps, level: level, size: size, children: title }), description != null &&
50
+ description !== false &&
51
+ description !== '' && (_jsx(Text, { color: 'secondary', className: 'pui-page-header-description', children: description }))] }), actions != null && actions !== false && actions !== '' && (_jsx("div", { className: 'pui-page-header-actions', role: actionsLabel ? 'group' : undefined, "aria-label": actionsLabel, children: actions }))] })] }));
52
+ }
53
+ export const Prose = React.forwardRef(function Prose({ className, ...props }, ref) {
54
+ return _jsx("div", { ...props, ref: ref, className: cx('pui-prose', className) });
55
+ });
package/dist/icon.d.ts ADDED
@@ -0,0 +1,37 @@
1
+ import * as React from 'react';
2
+ declare const shapes: {
3
+ search: React.JSX.Element;
4
+ plus: React.JSX.Element;
5
+ close: React.JSX.Element;
6
+ check: React.JSX.Element;
7
+ info: React.JSX.Element;
8
+ alert: React.JSX.Element;
9
+ warning: React.JSX.Element;
10
+ menu: React.JSX.Element;
11
+ sun: React.JSX.Element;
12
+ moon: React.JSX.Element;
13
+ monitor: React.JSX.Element;
14
+ 'chevron-down': React.JSX.Element;
15
+ 'chevron-forward': React.JSX.Element;
16
+ 'arrow-back': React.JSX.Element;
17
+ 'external-link': React.JSX.Element;
18
+ copy: React.JSX.Element;
19
+ play: React.JSX.Element;
20
+ settings: React.JSX.Element;
21
+ };
22
+ export type IconName = keyof typeof shapes;
23
+ export declare const iconNames: readonly IconName[];
24
+ type Semantics = {
25
+ decorative?: true;
26
+ label?: never;
27
+ } | {
28
+ decorative: false;
29
+ label: string;
30
+ };
31
+ export type IconProps = Omit<React.ComponentPropsWithoutRef<'svg'>, 'children' | 'name' | 'role' | 'aria-label' | 'aria-labelledby' | 'aria-hidden' | 'tabIndex' | 'focusable' | 'width' | 'height' | 'viewBox' | 'strokeWidth' | 'fill' | 'stroke' | 'title'> & Semantics & {
32
+ name: IconName;
33
+ size?: 'sm' | 'md' | 'lg';
34
+ };
35
+ /** Static SVG only. Actions, focus, accessible button names and hit targets belong to the parent control. */
36
+ export declare const Icon: React.ForwardRefExoticComponent<IconProps & React.RefAttributes<SVGSVGElement>>;
37
+ export {};
package/dist/icon.js ADDED
@@ -0,0 +1,28 @@
1
+ 'use client';
2
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import * as React from 'react';
4
+ const shapes = {
5
+ search: (_jsxs(_Fragment, { children: [_jsx("circle", { cx: '10.5', cy: '10.5', r: '6.5' }), _jsx("path", { d: 'm16 16 4 4' })] })),
6
+ plus: _jsx("path", { d: 'M12 5v14M5 12h14' }),
7
+ close: _jsx("path", { d: 'm6 6 12 12M18 6 6 18' }),
8
+ check: _jsx("path", { d: 'm5 12 4 4L19 6' }),
9
+ info: (_jsxs(_Fragment, { children: [_jsx("circle", { cx: '12', cy: '12', r: '9' }), _jsx("path", { d: 'M12 11v6m0-10v1' })] })),
10
+ alert: (_jsxs(_Fragment, { children: [_jsx("circle", { cx: '12', cy: '12', r: '9' }), _jsx("path", { d: 'M12 7v6m0 3v1' })] })),
11
+ warning: (_jsxs(_Fragment, { children: [_jsx("path", { d: 'm12 3 10 18H2L12 3Z' }), _jsx("path", { d: 'M12 9v4m0 3v1' })] })),
12
+ menu: _jsx("path", { d: 'M4 6h16M4 12h16M4 18h16' }),
13
+ sun: (_jsxs(_Fragment, { children: [_jsx("circle", { cx: '12', cy: '12', r: '4' }), _jsx("path", { d: 'M12 2v2m0 16v2M2 12h2m16 0h2M5 5l1.5 1.5m11 11L19 19M5 19l1.5-1.5m11-11L19 5' })] })),
14
+ moon: _jsx("path", { d: 'M20.5 13.2A8.5 8.5 0 0 1 10.8 3.5 8.5 8.5 0 1 0 20.5 13.2Z' }),
15
+ monitor: (_jsxs(_Fragment, { children: [_jsx("rect", { x: '3', y: '4', width: '18', height: '13', rx: '2' }), _jsx("path", { d: 'M8 21h8m-4-4v4' })] })),
16
+ 'chevron-down': _jsx("path", { d: 'm7 10 5 5 5-5' }),
17
+ 'chevron-forward': _jsx("path", { d: 'm9 6 6 6-6 6' }),
18
+ 'arrow-back': _jsx("path", { d: 'M20 12H4m7-7-7 7 7 7' }),
19
+ 'external-link': (_jsx(_Fragment, { children: _jsx("path", { d: 'M14 3h7v7m0-7L10 14M10 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-5' }) })),
20
+ copy: (_jsxs(_Fragment, { children: [_jsx("rect", { x: '8', y: '8', width: '12', height: '13', rx: '2' }), _jsx("path", { d: 'M16 8V5a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v9a2 2 0 0 0 2 2h3' })] })),
21
+ play: _jsx("path", { d: 'm7 3 14 9-14 9V3Z' }),
22
+ settings: (_jsx(_Fragment, { children: _jsx("path", { d: 'M4 6h16M4 12h16M4 18h16M9 3v6m6 0v6m-6 0v6' }) })),
23
+ };
24
+ export const iconNames = Object.keys(shapes);
25
+ /** Static SVG only. Actions, focus, accessible button names and hit targets belong to the parent control. */
26
+ export const Icon = React.forwardRef(function Icon({ name, size = 'sm', decorative = true, label, className, ...props }, ref) {
27
+ return (_jsx("svg", { ...props, ref: ref, className: ['pui-icon', className].filter(Boolean).join(' '), "data-size": size, "data-directional": name === 'chevron-forward' || name === 'arrow-back' ? 'true' : undefined, viewBox: '0 0 24 24', fill: 'none', stroke: 'currentColor', strokeLinecap: 'round', strokeLinejoin: 'round', focusable: 'false', "aria-hidden": decorative ? true : undefined, role: decorative ? undefined : 'img', "aria-label": decorative ? undefined : label, children: shapes[name] }));
28
+ });
@@ -0,0 +1,37 @@
1
+ export { SizeProvider, type ComponentSize, type ComponentSizeAlias, } from './sizing.js';
2
+ export { Button, type ButtonVariant, type ButtonSize, type ButtonProps, } from './button.js';
3
+ export { Slot } from './slot.js';
4
+ export { Input } from './input.js';
5
+ export { Select, NativeSelect, NativeSelectOption, NativeSelectOptGroup, type SelectOption, type SelectProps, } from './select.js';
6
+ export { Popover, PopoverArrow, PopoverBackdrop, PopoverClose, PopoverDescription, PopoverHandle, PopoverPopup, PopoverPortal, PopoverPositioner, PopoverRoot, PopoverTitle, PopoverTrigger, PopoverViewport, PopoverContent, } from './popover.js';
7
+ export { Tooltip, TooltipProvider } from './tooltip.js';
8
+ export { Dialog, AlertDialog, DialogBackdrop, DialogClose, DialogDescription, DialogHandle, DialogPopup, DialogPortal, DialogRoot, DialogTitle, DialogTrigger, DialogViewport, DialogContent, DialogHeader, DialogBody, DialogFooter, DialogCloseButton, AlertDialogBackdrop, AlertDialogClose, AlertDialogDescription, AlertDialogHandle, AlertDialogPopup, AlertDialogPortal, AlertDialogRoot, AlertDialogTitle, AlertDialogTrigger, AlertDialogViewport, AlertDialogContent, AlertDialogHeader, AlertDialogFooter, } from './dialog.js';
9
+ export { Menu, MenuArrow, MenuBackdrop, MenuCheckboxItem, MenuCheckboxItemIndicator, MenuClear, MenuEmpty, MenuFilterProvider, MenuGroup, MenuGroupLabel, MenuHandle, MenuInput, MenuItem, MenuLinkItem, MenuList, MenuPopup, MenuPortal, MenuPositioner, MenuRadioGroup, MenuRadioItem, MenuRadioItemIndicator, MenuRoot, MenuSeparator, MenuSubmenuRoot, MenuSubmenuTrigger, MenuTrigger, MenuViewport, MenuContent, } from './menu.js';
10
+ export { ScrollArea } from './scroll-area.js';
11
+ export { Sheet, Drawer, type PanelSide, SheetBackdrop, SheetClose, SheetDescription, SheetHandle, SheetPopup, SheetPortal, SheetRoot, SheetTitle, SheetTrigger, SheetViewport, SheetContent, SheetHeader, SheetBody, SheetFooter, DrawerBackdrop, DrawerClose, DrawerContent, DrawerDescription, DrawerHandle, DrawerIndent, DrawerIndentBackground, DrawerPopup, DrawerPortal, DrawerProvider, DrawerRoot, DrawerSwipeArea, DrawerTitle, DrawerTrigger, DrawerViewport, DrawerVirtualKeyboardProvider, DrawerPrimitiveContent, DrawerHeader, DrawerBody, DrawerFooter, } from './panels.js';
12
+ export { Container, Stack, Inline, Grid, GridItem, Surface, Heading, Text, PageHeader, Prose, type Space, } from './foundations.js';
13
+ export { Field, Fieldset, Form, Textarea, Checkbox, CheckboxGroup, Radio, RadioGroup, Switch, FieldControl, FieldDescription, FieldError, FieldItem, FieldLabel, FieldRoot, FieldValidity, FieldsetLegend, FieldsetRoot, CheckboxIndicator, CheckboxRoot, RadioIndicator, RadioRoot, SwitchRoot, SwitchThumb, } from './forms.js';
14
+ export { Tabs, Accordion, Collapsible, Avatar, Separator, Link, Breadcrumbs, TabsIndicator, TabsList, TabsPanel, TabsRoot, TabsTab, AccordionHeader, AccordionItem, AccordionPanel, AccordionRoot, AccordionTrigger, CollapsiblePanel, CollapsibleRoot, CollapsibleTrigger, AvatarFallback, AvatarImage, AvatarRoot, AvatarStatus, BreadcrumbsRoot, BreadcrumbsList, BreadcrumbsItem, BreadcrumbsLink, BreadcrumbsSeparator, BreadcrumbsCurrent, } from './navigation.js';
15
+ export { Badge, StatusBadge, type BadgeProps, type StatusTone, } from './status.js';
16
+ export { Progress, Meter, Spinner, Skeleton, type SpinnerProps, type SkeletonProps, ProgressIndicator, ProgressLabel, ProgressRoot, ProgressTrack, ProgressValue, MeterIndicator, MeterLabel, MeterRoot, MeterTrack, MeterValue, } from './feedback.js';
17
+ export { Table, List, TableContainer, TableRoot, TableCaption, TableHead, TableBody, TableFoot, TableRow, TableHeaderCell, TableCell, ListRoot, ListItem, ListContent, ListTitle, ListDescription, ListActions, } from './data.js';
18
+ export { InlineMessage, EmptyState, InlineMessageRoot, InlineMessageIcon, InlineMessageContent, InlineMessageTitle, InlineMessageDescription, InlineMessageActions, EmptyStateRoot, EmptyStateIcon, EmptyStateTitle, EmptyStateDescription, EmptyStateActions, } from './messages.js';
19
+ export { Card, CodeBlock, type CodeBlockProps, CardRoot, CardHeader, CardTitle, CardDescription, CardBody, CardFooter, } from './content.js';
20
+ export { Pagination, type PaginationProps } from './pagination.js';
21
+ export { Combobox, NumberField, ComboboxArrow, ComboboxBackdrop, ComboboxChip, ComboboxChipRemove, ComboboxChips, ComboboxClear, ComboboxCollection, ComboboxEmpty, ComboboxGroup, ComboboxGroupLabel, ComboboxIcon, ComboboxInput, ComboboxInputGroup, ComboboxItem, ComboboxItemIndicator, ComboboxLabel, ComboboxList, ComboboxPopup, ComboboxPortal, ComboboxPositioner, ComboboxRoot, ComboboxRow, ComboboxSeparator, ComboboxStatus, ComboboxTrigger, ComboboxValue, ComboboxContent, NumberFieldDecrement, NumberFieldGroup, NumberFieldIncrement, NumberFieldInput, NumberFieldRoot, NumberFieldScrubArea, NumberFieldScrubAreaCursor, } from './advanced-forms.js';
22
+ export { Autocomplete, Slider, AutocompleteArrow, AutocompleteBackdrop, AutocompleteClear, AutocompleteCollection, AutocompleteEmpty, AutocompleteGroup, AutocompleteGroupLabel, AutocompleteIcon, AutocompleteInput, AutocompleteInputGroup, AutocompleteItem, AutocompleteList, AutocompletePopup, AutocompletePortal, AutocompletePositioner, AutocompleteRoot, AutocompleteRow, AutocompleteSeparator, AutocompleteStatus, AutocompleteTrigger, AutocompleteValue, AutocompleteContent, SliderControl, SliderIndicator, SliderLabel, SliderRoot, SliderThumb, SliderTrack, SliderValue, } from './input-extensions.js';
23
+ export { DirectionProvider } from '@base-ui/react/direction-provider';
24
+ export { Toggle, ToggleGroup, Toolbar, Menubar, ToolbarButton, ToolbarGroup, ToolbarInput, ToolbarLink, ToolbarRoot, ToolbarSeparator, } from './commands.js';
25
+ export { ContextMenu, PreviewCard, ContextMenuArrow, ContextMenuBackdrop, ContextMenuCheckboxItem, ContextMenuCheckboxItemIndicator, ContextMenuGroup, ContextMenuGroupLabel, ContextMenuItem, ContextMenuLinkItem, ContextMenuPopup, ContextMenuPortal, ContextMenuPositioner, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuRadioItemIndicator, ContextMenuRoot, ContextMenuSeparator, ContextMenuSubmenuRoot, ContextMenuSubmenuTrigger, ContextMenuTrigger, ContextMenuContent, PreviewCardArrow, PreviewCardBackdrop, PreviewCardHandle, PreviewCardPopup, PreviewCardPortal, PreviewCardPositioner, PreviewCardRoot, PreviewCardTrigger, PreviewCardViewport, PreviewCardContent, } from './context-overlays.js';
26
+ export { NavigationMenu, NavigationMenuArrow, NavigationMenuBackdrop, NavigationMenuContent, NavigationMenuIcon, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuPopup, NavigationMenuPortal, NavigationMenuPositioner, NavigationMenuRoot, NavigationMenuTrigger, NavigationMenuViewport, } from './navigation-menu.js';
27
+ export { OTPField, OTPFieldInput, OTPFieldRoot, OTPFieldSeparator, OTPFieldGroup, } from './otp-field.js';
28
+ export { Toast, type ToastRootProps, type ToastViewportProps, ToastAction, ToastArrow, ToastClose, ToastContent, ToastDescription, ToastPortal, ToastPositioner, ToastProvider, ToastRoot, ToastTitle, ToastViewport, ToastIcon, ToastText, } from './toast.js';
29
+ export { FileUpload, type FileUploadProps, type UploadTransport, type FileUploadLabels, type FileChangeDetails, type FileRejection, type UploadState, } from './file-upload.js';
30
+ export { Icon, iconNames, type IconName, type IconProps } from './icon.js';
31
+ export { FilterBar, FilterBarRoot, FilterBarControls, FilterBarField, FilterBarActions, FilterBarSummary, } from './filter-bar.js';
32
+ export { AppShell, AppShellRoot, AppShellHeader, AppShellSidebar, AppShellContent, AppShellFooter, AppShellLabel, AppShellLink, } from './app-shell.js';
33
+ export { Tree, type TreeNode, type TreeProps } from './tree.js';
34
+ export { DatePicker, DateRangePicker, TimeField, DateLocaleProvider, type DatePickerProps, type DateRangePickerProps, type TimeFieldProps, type DateValue, type TimeValue, } from './date-picker.js';
35
+ export { Chart, type ChartDatum, type ChartSeries, type ChartProps, } from './chart.js';
36
+ export { SyntaxHighlighter, syntaxLanguages, type SyntaxHighlighterProps, } from './syntax-highlighter.js';
37
+ export { Markdown, type MarkdownProps } from './markdown.js';
package/dist/index.js ADDED
@@ -0,0 +1,38 @@
1
+ 'use client';
2
+ export { SizeProvider, } from './sizing.js';
3
+ export { Button, } from './button.js';
4
+ export { Slot } from './slot.js';
5
+ export { Input } from './input.js';
6
+ export { Select, NativeSelect, NativeSelectOption, NativeSelectOptGroup, } from './select.js';
7
+ export { Popover, PopoverArrow, PopoverBackdrop, PopoverClose, PopoverDescription, PopoverHandle, PopoverPopup, PopoverPortal, PopoverPositioner, PopoverRoot, PopoverTitle, PopoverTrigger, PopoverViewport, PopoverContent, } from './popover.js';
8
+ export { Tooltip, TooltipProvider } from './tooltip.js';
9
+ export { Dialog, AlertDialog, DialogBackdrop, DialogClose, DialogDescription, DialogHandle, DialogPopup, DialogPortal, DialogRoot, DialogTitle, DialogTrigger, DialogViewport, DialogContent, DialogHeader, DialogBody, DialogFooter, DialogCloseButton, AlertDialogBackdrop, AlertDialogClose, AlertDialogDescription, AlertDialogHandle, AlertDialogPopup, AlertDialogPortal, AlertDialogRoot, AlertDialogTitle, AlertDialogTrigger, AlertDialogViewport, AlertDialogContent, AlertDialogHeader, AlertDialogFooter, } from './dialog.js';
10
+ export { Menu, MenuArrow, MenuBackdrop, MenuCheckboxItem, MenuCheckboxItemIndicator, MenuClear, MenuEmpty, MenuFilterProvider, MenuGroup, MenuGroupLabel, MenuHandle, MenuInput, MenuItem, MenuLinkItem, MenuList, MenuPopup, MenuPortal, MenuPositioner, MenuRadioGroup, MenuRadioItem, MenuRadioItemIndicator, MenuRoot, MenuSeparator, MenuSubmenuRoot, MenuSubmenuTrigger, MenuTrigger, MenuViewport, MenuContent, } from './menu.js';
11
+ export { ScrollArea } from './scroll-area.js';
12
+ export { Sheet, Drawer, SheetBackdrop, SheetClose, SheetDescription, SheetHandle, SheetPopup, SheetPortal, SheetRoot, SheetTitle, SheetTrigger, SheetViewport, SheetContent, SheetHeader, SheetBody, SheetFooter, DrawerBackdrop, DrawerClose, DrawerContent, DrawerDescription, DrawerHandle, DrawerIndent, DrawerIndentBackground, DrawerPopup, DrawerPortal, DrawerProvider, DrawerRoot, DrawerSwipeArea, DrawerTitle, DrawerTrigger, DrawerViewport, DrawerVirtualKeyboardProvider, DrawerPrimitiveContent, DrawerHeader, DrawerBody, DrawerFooter, } from './panels.js';
13
+ export { Container, Stack, Inline, Grid, GridItem, Surface, Heading, Text, PageHeader, Prose, } from './foundations.js';
14
+ export { Field, Fieldset, Form, Textarea, Checkbox, CheckboxGroup, Radio, RadioGroup, Switch, FieldControl, FieldDescription, FieldError, FieldItem, FieldLabel, FieldRoot, FieldValidity, FieldsetLegend, FieldsetRoot, CheckboxIndicator, CheckboxRoot, RadioIndicator, RadioRoot, SwitchRoot, SwitchThumb, } from './forms.js';
15
+ export { Tabs, Accordion, Collapsible, Avatar, Separator, Link, Breadcrumbs, TabsIndicator, TabsList, TabsPanel, TabsRoot, TabsTab, AccordionHeader, AccordionItem, AccordionPanel, AccordionRoot, AccordionTrigger, CollapsiblePanel, CollapsibleRoot, CollapsibleTrigger, AvatarFallback, AvatarImage, AvatarRoot, AvatarStatus, BreadcrumbsRoot, BreadcrumbsList, BreadcrumbsItem, BreadcrumbsLink, BreadcrumbsSeparator, BreadcrumbsCurrent, } from './navigation.js';
16
+ export { Badge, StatusBadge, } from './status.js';
17
+ export { Progress, Meter, Spinner, Skeleton, ProgressIndicator, ProgressLabel, ProgressRoot, ProgressTrack, ProgressValue, MeterIndicator, MeterLabel, MeterRoot, MeterTrack, MeterValue, } from './feedback.js';
18
+ export { Table, List, TableContainer, TableRoot, TableCaption, TableHead, TableBody, TableFoot, TableRow, TableHeaderCell, TableCell, ListRoot, ListItem, ListContent, ListTitle, ListDescription, ListActions, } from './data.js';
19
+ export { InlineMessage, EmptyState, InlineMessageRoot, InlineMessageIcon, InlineMessageContent, InlineMessageTitle, InlineMessageDescription, InlineMessageActions, EmptyStateRoot, EmptyStateIcon, EmptyStateTitle, EmptyStateDescription, EmptyStateActions, } from './messages.js';
20
+ export { Card, CodeBlock, CardRoot, CardHeader, CardTitle, CardDescription, CardBody, CardFooter, } from './content.js';
21
+ export { Pagination } from './pagination.js';
22
+ export { Combobox, NumberField, ComboboxArrow, ComboboxBackdrop, ComboboxChip, ComboboxChipRemove, ComboboxChips, ComboboxClear, ComboboxCollection, ComboboxEmpty, ComboboxGroup, ComboboxGroupLabel, ComboboxIcon, ComboboxInput, ComboboxInputGroup, ComboboxItem, ComboboxItemIndicator, ComboboxLabel, ComboboxList, ComboboxPopup, ComboboxPortal, ComboboxPositioner, ComboboxRoot, ComboboxRow, ComboboxSeparator, ComboboxStatus, ComboboxTrigger, ComboboxValue, ComboboxContent, NumberFieldDecrement, NumberFieldGroup, NumberFieldIncrement, NumberFieldInput, NumberFieldRoot, NumberFieldScrubArea, NumberFieldScrubAreaCursor, } from './advanced-forms.js';
23
+ export { Autocomplete, Slider, AutocompleteArrow, AutocompleteBackdrop, AutocompleteClear, AutocompleteCollection, AutocompleteEmpty, AutocompleteGroup, AutocompleteGroupLabel, AutocompleteIcon, AutocompleteInput, AutocompleteInputGroup, AutocompleteItem, AutocompleteList, AutocompletePopup, AutocompletePortal, AutocompletePositioner, AutocompleteRoot, AutocompleteRow, AutocompleteSeparator, AutocompleteStatus, AutocompleteTrigger, AutocompleteValue, AutocompleteContent, SliderControl, SliderIndicator, SliderLabel, SliderRoot, SliderThumb, SliderTrack, SliderValue, } from './input-extensions.js';
24
+ export { DirectionProvider } from '@base-ui/react/direction-provider';
25
+ export { Toggle, ToggleGroup, Toolbar, Menubar, ToolbarButton, ToolbarGroup, ToolbarInput, ToolbarLink, ToolbarRoot, ToolbarSeparator, } from './commands.js';
26
+ export { ContextMenu, PreviewCard, ContextMenuArrow, ContextMenuBackdrop, ContextMenuCheckboxItem, ContextMenuCheckboxItemIndicator, ContextMenuGroup, ContextMenuGroupLabel, ContextMenuItem, ContextMenuLinkItem, ContextMenuPopup, ContextMenuPortal, ContextMenuPositioner, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuRadioItemIndicator, ContextMenuRoot, ContextMenuSeparator, ContextMenuSubmenuRoot, ContextMenuSubmenuTrigger, ContextMenuTrigger, ContextMenuContent, PreviewCardArrow, PreviewCardBackdrop, PreviewCardHandle, PreviewCardPopup, PreviewCardPortal, PreviewCardPositioner, PreviewCardRoot, PreviewCardTrigger, PreviewCardViewport, PreviewCardContent, } from './context-overlays.js';
27
+ export { NavigationMenu, NavigationMenuArrow, NavigationMenuBackdrop, NavigationMenuContent, NavigationMenuIcon, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuPopup, NavigationMenuPortal, NavigationMenuPositioner, NavigationMenuRoot, NavigationMenuTrigger, NavigationMenuViewport, } from './navigation-menu.js';
28
+ export { OTPField, OTPFieldInput, OTPFieldRoot, OTPFieldSeparator, OTPFieldGroup, } from './otp-field.js';
29
+ export { Toast, ToastAction, ToastArrow, ToastClose, ToastContent, ToastDescription, ToastPortal, ToastPositioner, ToastProvider, ToastRoot, ToastTitle, ToastViewport, ToastIcon, ToastText, } from './toast.js';
30
+ export { FileUpload, } from './file-upload.js';
31
+ export { Icon, iconNames } from './icon.js';
32
+ export { FilterBar, FilterBarRoot, FilterBarControls, FilterBarField, FilterBarActions, FilterBarSummary, } from './filter-bar.js';
33
+ export { AppShell, AppShellRoot, AppShellHeader, AppShellSidebar, AppShellContent, AppShellFooter, AppShellLabel, AppShellLink, } from './app-shell.js';
34
+ export { Tree } from './tree.js';
35
+ export { DatePicker, DateRangePicker, TimeField, DateLocaleProvider, } from './date-picker.js';
36
+ export { Chart, } from './chart.js';
37
+ export { SyntaxHighlighter, syntaxLanguages, } from './syntax-highlighter.js';
38
+ export { Markdown } from './markdown.js';
@@ -0,0 +1,117 @@
1
+ import * as React from 'react';
2
+ import { Autocomplete as BaseAutocomplete } from '@base-ui/react/autocomplete';
3
+ import { Slider as BaseSlider } from '@base-ui/react/slider';
4
+ declare const AutocompleteRoot: typeof BaseAutocomplete.Root;
5
+ export declare const Autocomplete: {
6
+ Root: typeof BaseAutocomplete.Root;
7
+ Content: React.ForwardRefExoticComponent<Omit<Omit<import("@base-ui/react/autocomplete").AutocompletePopupProps, "ref"> & React.RefAttributes<HTMLDivElement>, "ref"> & {
8
+ positionerProps?: React.ComponentPropsWithoutRef<typeof BaseAutocomplete.Positioner>;
9
+ } & React.RefAttributes<HTMLDivElement>>;
10
+ Popup: React.ForwardRefExoticComponent<Omit<Omit<Omit<import("@base-ui/react/autocomplete").AutocompletePopupProps, "ref"> & React.RefAttributes<HTMLDivElement>, "ref">, "size"> & {
11
+ size?: import("./sizing.js").ComponentSize;
12
+ } & React.RefAttributes<HTMLDivElement>>;
13
+ Positioner: React.ForwardRefExoticComponent<Omit<Omit<Omit<import("@base-ui/react/autocomplete").AutocompletePositionerProps, "ref"> & React.RefAttributes<HTMLDivElement>, "ref">, "size"> & {
14
+ size?: import("./sizing.js").ComponentSize;
15
+ } & React.RefAttributes<HTMLDivElement>>;
16
+ Input: React.ForwardRefExoticComponent<Omit<Omit<Omit<import("@base-ui/react/autocomplete").AutocompleteInputProps, "ref"> & React.RefAttributes<HTMLInputElement>, "ref">, "size"> & {
17
+ size?: import("./sizing.js").ComponentSize;
18
+ } & React.RefAttributes<HTMLInputElement>>;
19
+ List: React.ForwardRefExoticComponent<Omit<Omit<Omit<import("@base-ui/react/autocomplete").AutocompleteListProps, "ref"> & React.RefAttributes<HTMLDivElement>, "ref">, "size"> & {
20
+ size?: import("./sizing.js").ComponentSize;
21
+ } & React.RefAttributes<HTMLDivElement>>;
22
+ Empty: React.ForwardRefExoticComponent<Omit<Omit<Omit<import("@base-ui/react/autocomplete").AutocompleteEmptyProps, "ref"> & React.RefAttributes<HTMLDivElement>, "ref">, "size"> & {
23
+ size?: import("./sizing.js").ComponentSize;
24
+ } & React.RefAttributes<HTMLDivElement>>;
25
+ Status: React.ForwardRefExoticComponent<Omit<Omit<Omit<import("@base-ui/react/autocomplete").AutocompleteStatusProps, "ref"> & React.RefAttributes<HTMLDivElement>, "ref">, "size"> & {
26
+ size?: import("./sizing.js").ComponentSize;
27
+ } & React.RefAttributes<HTMLDivElement>>;
28
+ Group: React.ForwardRefExoticComponent<Omit<Omit<Omit<import("@base-ui/react/autocomplete").AutocompleteGroupProps, "ref"> & React.RefAttributes<HTMLDivElement>, "ref">, "size"> & {
29
+ size?: import("./sizing.js").ComponentSize;
30
+ } & React.RefAttributes<HTMLDivElement>>;
31
+ GroupLabel: React.ForwardRefExoticComponent<Omit<Omit<Omit<import("@base-ui/react/autocomplete").AutocompleteGroupLabelProps, "ref"> & React.RefAttributes<HTMLDivElement>, "ref">, "size"> & {
32
+ size?: import("./sizing.js").ComponentSize;
33
+ } & React.RefAttributes<HTMLDivElement>>;
34
+ Clear: React.ForwardRefExoticComponent<Omit<Omit<import("@base-ui/react/autocomplete").AutocompleteClearProps, "ref"> & React.RefAttributes<HTMLButtonElement>, "ref"> & React.RefAttributes<HTMLButtonElement>>;
35
+ Trigger: React.ForwardRefExoticComponent<Omit<import("@base-ui/react/autocomplete").AutocompleteTriggerProps & React.RefAttributes<HTMLButtonElement>, "ref"> & React.RefAttributes<HTMLButtonElement>>;
36
+ InputGroup: React.ForwardRefExoticComponent<Omit<Omit<import("@base-ui/react/autocomplete").AutocompleteInputGroupProps & React.RefAttributes<HTMLDivElement>, "ref">, "size"> & {
37
+ size?: import("./sizing.js").ComponentSize;
38
+ } & React.RefAttributes<HTMLDivElement>>;
39
+ Item: React.ForwardRefExoticComponent<Omit<Omit<import("@base-ui/react/autocomplete").AutocompleteItemProps & React.RefAttributes<HTMLDivElement>, "ref">, "size"> & {
40
+ size?: import("./sizing.js").ComponentSize;
41
+ } & React.RefAttributes<HTMLDivElement>>;
42
+ Separator: React.ForwardRefExoticComponent<Omit<Omit<import("@base-ui/react/autocomplete").AutocompleteSeparatorProps & React.RefAttributes<HTMLDivElement>, "ref">, "size"> & {
43
+ size?: import("./sizing.js").ComponentSize;
44
+ } & React.RefAttributes<HTMLDivElement>>;
45
+ Value: typeof BaseAutocomplete.Value;
46
+ Icon: React.ForwardRefExoticComponent<Omit<import("@base-ui/react/autocomplete").AutocompleteIconProps, "ref"> & React.RefAttributes<HTMLSpanElement>>;
47
+ Portal: React.ForwardRefExoticComponent<Omit<import("@base-ui/react/autocomplete").AutocompletePortalProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
48
+ Backdrop: React.ForwardRefExoticComponent<Omit<import("@base-ui/react/autocomplete").AutocompleteBackdropProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
49
+ Arrow: React.ForwardRefExoticComponent<Omit<import("@base-ui/react/autocomplete").AutocompleteArrowProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
50
+ Row: React.ForwardRefExoticComponent<Omit<import("@base-ui/react/autocomplete").AutocompleteRowProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
51
+ Collection: typeof BaseAutocomplete.Collection;
52
+ useFilter: typeof import("@base-ui/react/internals/filter").getFilter;
53
+ useFilteredItems: typeof BaseAutocomplete.useFilteredItems;
54
+ };
55
+ declare function SliderRoot<Value extends number | readonly number[]>({ value, defaultValue, onValueChange, ref, className, form, thumbAlignment, ...props }: BaseSlider.Root.Props<Value> & {
56
+ ref?: React.Ref<HTMLDivElement>;
57
+ }): React.JSX.Element;
58
+ export declare const Slider: {
59
+ Root: typeof SliderRoot;
60
+ Label: React.ForwardRefExoticComponent<Omit<Omit<Omit<import("@base-ui/react/slider").SliderLabelProps, "ref"> & React.RefAttributes<HTMLDivElement>, "ref">, "size"> & {
61
+ size?: import("./sizing.js").ComponentSize;
62
+ } & React.RefAttributes<HTMLDivElement>>;
63
+ Value: React.ForwardRefExoticComponent<Omit<Omit<Omit<import("@base-ui/react/slider").SliderValueProps, "ref"> & React.RefAttributes<HTMLOutputElement>, "ref">, "size"> & {
64
+ size?: import("./sizing.js").ComponentSize;
65
+ } & React.RefAttributes<HTMLOutputElement>>;
66
+ Control: React.ForwardRefExoticComponent<Omit<Omit<Omit<import("@base-ui/react/slider").SliderControlProps, "ref"> & React.RefAttributes<HTMLDivElement>, "ref">, "size"> & {
67
+ size?: import("./sizing.js").ComponentSize;
68
+ } & React.RefAttributes<HTMLDivElement>>;
69
+ Track: React.ForwardRefExoticComponent<Omit<Omit<Omit<import("@base-ui/react/slider").SliderTrackProps, "ref"> & React.RefAttributes<HTMLDivElement>, "ref">, "size"> & {
70
+ size?: import("./sizing.js").ComponentSize;
71
+ } & React.RefAttributes<HTMLDivElement>>;
72
+ Indicator: React.ForwardRefExoticComponent<Omit<Omit<Omit<import("@base-ui/react/slider").SliderIndicatorProps, "ref"> & React.RefAttributes<HTMLDivElement>, "ref">, "size"> & {
73
+ size?: import("./sizing.js").ComponentSize;
74
+ } & React.RefAttributes<HTMLDivElement>>;
75
+ Thumb: React.ForwardRefExoticComponent<Omit<Omit<Omit<import("@base-ui/react/slider").SliderThumbProps, "ref"> & React.RefAttributes<HTMLDivElement>, "ref">, "size"> & {
76
+ size?: import("./sizing.js").ComponentSize;
77
+ } & React.RefAttributes<HTMLDivElement>>;
78
+ };
79
+ export { AutocompleteRoot, SliderRoot };
80
+ export declare const AutocompleteArrow: React.ForwardRefExoticComponent<Omit<import("@base-ui/react/autocomplete").AutocompleteArrowProps, "ref"> & React.RefAttributes<HTMLDivElement>>, AutocompleteBackdrop: React.ForwardRefExoticComponent<Omit<import("@base-ui/react/autocomplete").AutocompleteBackdropProps, "ref"> & React.RefAttributes<HTMLDivElement>>, AutocompleteClear: React.ForwardRefExoticComponent<Omit<Omit<import("@base-ui/react/autocomplete").AutocompleteClearProps, "ref"> & React.RefAttributes<HTMLButtonElement>, "ref"> & React.RefAttributes<HTMLButtonElement>>, AutocompleteCollection: typeof BaseAutocomplete.Collection, AutocompleteEmpty: React.ForwardRefExoticComponent<Omit<Omit<Omit<import("@base-ui/react/autocomplete").AutocompleteEmptyProps, "ref"> & React.RefAttributes<HTMLDivElement>, "ref">, "size"> & {
81
+ size?: import("./sizing.js").ComponentSize;
82
+ } & React.RefAttributes<HTMLDivElement>>, AutocompleteGroup: React.ForwardRefExoticComponent<Omit<Omit<Omit<import("@base-ui/react/autocomplete").AutocompleteGroupProps, "ref"> & React.RefAttributes<HTMLDivElement>, "ref">, "size"> & {
83
+ size?: import("./sizing.js").ComponentSize;
84
+ } & React.RefAttributes<HTMLDivElement>>, AutocompleteGroupLabel: React.ForwardRefExoticComponent<Omit<Omit<Omit<import("@base-ui/react/autocomplete").AutocompleteGroupLabelProps, "ref"> & React.RefAttributes<HTMLDivElement>, "ref">, "size"> & {
85
+ size?: import("./sizing.js").ComponentSize;
86
+ } & React.RefAttributes<HTMLDivElement>>, AutocompleteIcon: React.ForwardRefExoticComponent<Omit<import("@base-ui/react/autocomplete").AutocompleteIconProps, "ref"> & React.RefAttributes<HTMLSpanElement>>, AutocompleteInput: React.ForwardRefExoticComponent<Omit<Omit<Omit<import("@base-ui/react/autocomplete").AutocompleteInputProps, "ref"> & React.RefAttributes<HTMLInputElement>, "ref">, "size"> & {
87
+ size?: import("./sizing.js").ComponentSize;
88
+ } & React.RefAttributes<HTMLInputElement>>, AutocompleteInputGroup: React.ForwardRefExoticComponent<Omit<Omit<import("@base-ui/react/autocomplete").AutocompleteInputGroupProps & React.RefAttributes<HTMLDivElement>, "ref">, "size"> & {
89
+ size?: import("./sizing.js").ComponentSize;
90
+ } & React.RefAttributes<HTMLDivElement>>, AutocompleteItem: React.ForwardRefExoticComponent<Omit<Omit<import("@base-ui/react/autocomplete").AutocompleteItemProps & React.RefAttributes<HTMLDivElement>, "ref">, "size"> & {
91
+ size?: import("./sizing.js").ComponentSize;
92
+ } & React.RefAttributes<HTMLDivElement>>, AutocompleteList: React.ForwardRefExoticComponent<Omit<Omit<Omit<import("@base-ui/react/autocomplete").AutocompleteListProps, "ref"> & React.RefAttributes<HTMLDivElement>, "ref">, "size"> & {
93
+ size?: import("./sizing.js").ComponentSize;
94
+ } & React.RefAttributes<HTMLDivElement>>, AutocompletePopup: React.ForwardRefExoticComponent<Omit<Omit<Omit<import("@base-ui/react/autocomplete").AutocompletePopupProps, "ref"> & React.RefAttributes<HTMLDivElement>, "ref">, "size"> & {
95
+ size?: import("./sizing.js").ComponentSize;
96
+ } & React.RefAttributes<HTMLDivElement>>, AutocompletePortal: React.ForwardRefExoticComponent<Omit<import("@base-ui/react/autocomplete").AutocompletePortalProps, "ref"> & React.RefAttributes<HTMLDivElement>>, AutocompletePositioner: React.ForwardRefExoticComponent<Omit<Omit<Omit<import("@base-ui/react/autocomplete").AutocompletePositionerProps, "ref"> & React.RefAttributes<HTMLDivElement>, "ref">, "size"> & {
97
+ size?: import("./sizing.js").ComponentSize;
98
+ } & React.RefAttributes<HTMLDivElement>>, AutocompleteRow: React.ForwardRefExoticComponent<Omit<import("@base-ui/react/autocomplete").AutocompleteRowProps, "ref"> & React.RefAttributes<HTMLDivElement>>, AutocompleteSeparator: React.ForwardRefExoticComponent<Omit<Omit<import("@base-ui/react/autocomplete").AutocompleteSeparatorProps & React.RefAttributes<HTMLDivElement>, "ref">, "size"> & {
99
+ size?: import("./sizing.js").ComponentSize;
100
+ } & React.RefAttributes<HTMLDivElement>>, AutocompleteStatus: React.ForwardRefExoticComponent<Omit<Omit<Omit<import("@base-ui/react/autocomplete").AutocompleteStatusProps, "ref"> & React.RefAttributes<HTMLDivElement>, "ref">, "size"> & {
101
+ size?: import("./sizing.js").ComponentSize;
102
+ } & React.RefAttributes<HTMLDivElement>>, AutocompleteTrigger: React.ForwardRefExoticComponent<Omit<import("@base-ui/react/autocomplete").AutocompleteTriggerProps & React.RefAttributes<HTMLButtonElement>, "ref"> & React.RefAttributes<HTMLButtonElement>>, AutocompleteValue: typeof BaseAutocomplete.Value, AutocompleteContent: React.ForwardRefExoticComponent<Omit<Omit<import("@base-ui/react/autocomplete").AutocompletePopupProps, "ref"> & React.RefAttributes<HTMLDivElement>, "ref"> & {
103
+ positionerProps?: React.ComponentPropsWithoutRef<typeof BaseAutocomplete.Positioner>;
104
+ } & React.RefAttributes<HTMLDivElement>>;
105
+ export declare const SliderControl: React.ForwardRefExoticComponent<Omit<Omit<Omit<import("@base-ui/react/slider").SliderControlProps, "ref"> & React.RefAttributes<HTMLDivElement>, "ref">, "size"> & {
106
+ size?: import("./sizing.js").ComponentSize;
107
+ } & React.RefAttributes<HTMLDivElement>>, SliderIndicator: React.ForwardRefExoticComponent<Omit<Omit<Omit<import("@base-ui/react/slider").SliderIndicatorProps, "ref"> & React.RefAttributes<HTMLDivElement>, "ref">, "size"> & {
108
+ size?: import("./sizing.js").ComponentSize;
109
+ } & React.RefAttributes<HTMLDivElement>>, SliderLabel: React.ForwardRefExoticComponent<Omit<Omit<Omit<import("@base-ui/react/slider").SliderLabelProps, "ref"> & React.RefAttributes<HTMLDivElement>, "ref">, "size"> & {
110
+ size?: import("./sizing.js").ComponentSize;
111
+ } & React.RefAttributes<HTMLDivElement>>, SliderThumb: React.ForwardRefExoticComponent<Omit<Omit<Omit<import("@base-ui/react/slider").SliderThumbProps, "ref"> & React.RefAttributes<HTMLDivElement>, "ref">, "size"> & {
112
+ size?: import("./sizing.js").ComponentSize;
113
+ } & React.RefAttributes<HTMLDivElement>>, SliderTrack: React.ForwardRefExoticComponent<Omit<Omit<Omit<import("@base-ui/react/slider").SliderTrackProps, "ref"> & React.RefAttributes<HTMLDivElement>, "ref">, "size"> & {
114
+ size?: import("./sizing.js").ComponentSize;
115
+ } & React.RefAttributes<HTMLDivElement>>, SliderValue: React.ForwardRefExoticComponent<Omit<Omit<Omit<import("@base-ui/react/slider").SliderValueProps, "ref"> & React.RefAttributes<HTMLOutputElement>, "ref">, "size"> & {
116
+ size?: import("./sizing.js").ComponentSize;
117
+ } & React.RefAttributes<HTMLOutputElement>>;
@@ -0,0 +1,64 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import * as React from 'react';
4
+ import { Autocomplete as BaseAutocomplete } from '@base-ui/react/autocomplete';
5
+ import { Slider as BaseSlider } from '@base-ui/react/slider';
6
+ import { Combobox } from './advanced-forms.js';
7
+ import { skin, part } from './parts.js';
8
+ import { useResetValue, useRootRef } from './form-state.js';
9
+ const AutocompleteRoot = function AutocompleteRoot({ children, form, value, defaultValue, onValueChange, ...props }) {
10
+ const anchor = React.useRef(null);
11
+ const [query, setQuery, revision] = useResetValue(value, defaultValue ?? '', anchor, form);
12
+ return (_jsxs(BaseAutocomplete.Root, { ...props, form: form, value: query, onValueChange: (next, event) => {
13
+ onValueChange?.(next, event);
14
+ if (value === undefined && !event.isCanceled)
15
+ setQuery(next);
16
+ }, children: [_jsx("span", { hidden: true, ref: anchor }), children] }, revision));
17
+ };
18
+ const AutoTrigger = React.forwardRef(function AutoTrigger({ className, children, ...props }, ref) {
19
+ return (_jsx(BaseAutocomplete.Trigger, { "aria-label": 'Show suggestions', ...props, ref: ref, className: skin('pui-combobox-action', className), children: children ?? (_jsx("svg", { width: '16', height: '16', viewBox: '0 0 24 24', fill: 'none', stroke: 'currentColor', strokeWidth: '1.6', "aria-hidden": 'true', children: _jsx("path", { d: 'm6 9 6 6 6-6' }) })) }));
20
+ });
21
+ const AutoClear = React.forwardRef(function AutoClear(props, ref) {
22
+ return _jsx(Combobox.Clear, { "aria-label": 'Clear input', ...props, ref: ref });
23
+ });
24
+ export const Autocomplete = {
25
+ ...BaseAutocomplete,
26
+ Root: AutocompleteRoot,
27
+ Content: Combobox.Content,
28
+ Popup: Combobox.Popup,
29
+ Positioner: Combobox.Positioner,
30
+ Input: Combobox.Input,
31
+ List: Combobox.List,
32
+ Empty: Combobox.Empty,
33
+ Status: Combobox.Status,
34
+ Group: Combobox.Group,
35
+ GroupLabel: Combobox.GroupLabel,
36
+ Clear: AutoClear,
37
+ Trigger: AutoTrigger,
38
+ InputGroup: part(BaseAutocomplete.InputGroup, 'pui-combobox-group'),
39
+ Item: part(BaseAutocomplete.Item, 'pui-combobox-item'),
40
+ Separator: part(BaseAutocomplete.Separator, 'pui-combobox-separator'),
41
+ };
42
+ function SliderRoot({ value, defaultValue, onValueChange, ref, className, form, thumbAlignment = 'edge', ...props }) {
43
+ const [element, attach] = useRootRef(ref);
44
+ const [selected, setSelected] = useResetValue(value, (defaultValue ?? props.min ?? 0), element, form);
45
+ return (_jsx(BaseSlider.Root, { ...props, form: form, ref: attach, value: selected, thumbAlignment: thumbAlignment, className: skin('pui-slider', className), onValueChange: (next, event) => {
46
+ onValueChange?.(next, event);
47
+ if (value === undefined && !event.isCanceled)
48
+ setSelected(next);
49
+ } }));
50
+ }
51
+ export const Slider = {
52
+ ...BaseSlider,
53
+ Root: SliderRoot,
54
+ Label: part(BaseSlider.Label, 'pui-slider-label'),
55
+ Value: part(BaseSlider.Value, 'pui-slider-value'),
56
+ Control: part(BaseSlider.Control, 'pui-slider-control'),
57
+ Track: part(BaseSlider.Track, 'pui-slider-track'),
58
+ Indicator: part(BaseSlider.Indicator, 'pui-slider-indicator'),
59
+ Thumb: part(BaseSlider.Thumb, 'pui-slider-thumb'),
60
+ };
61
+ // Flat names for React Server Components, which cannot dot into client exports.
62
+ export { AutocompleteRoot, SliderRoot };
63
+ export const { Arrow: AutocompleteArrow, Backdrop: AutocompleteBackdrop, Clear: AutocompleteClear, Collection: AutocompleteCollection, Empty: AutocompleteEmpty, Group: AutocompleteGroup, GroupLabel: AutocompleteGroupLabel, Icon: AutocompleteIcon, Input: AutocompleteInput, InputGroup: AutocompleteInputGroup, Item: AutocompleteItem, List: AutocompleteList, Popup: AutocompletePopup, Portal: AutocompletePortal, Positioner: AutocompletePositioner, Row: AutocompleteRow, Separator: AutocompleteSeparator, Status: AutocompleteStatus, Trigger: AutocompleteTrigger, Value: AutocompleteValue, Content: AutocompleteContent, } = Autocomplete;
64
+ export const { Control: SliderControl, Indicator: SliderIndicator, Label: SliderLabel, Thumb: SliderThumb, Track: SliderTrack, Value: SliderValue, } = Slider;
@@ -0,0 +1,7 @@
1
+ import * as React from 'react';
2
+ import { type ComponentSizeAlias } from './sizing.js';
3
+ export declare const Input: React.ForwardRefExoticComponent<Omit<Omit<React.DetailedHTMLProps<React.InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>, "ref">, "size"> & {
4
+ size?: number | ComponentSizeAlias;
5
+ leadingIcon?: React.ReactNode;
6
+ wrapperClassName?: string;
7
+ } & React.RefAttributes<HTMLInputElement>>;
package/dist/input.js ADDED
@@ -0,0 +1,10 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import * as React from 'react';
4
+ import { useComponentSize } from './sizing.js';
5
+ import { Input as BaseInput } from '@base-ui/react/input';
6
+ const cx = (...v) => v.filter(Boolean).join(' ');
7
+ export const Input = React.forwardRef(function Input({ className, leadingIcon, wrapperClassName, size, ...props }, ref) {
8
+ const scheme = useComponentSize(typeof size === 'string' ? size : undefined);
9
+ return (_jsxs("span", { "data-ui-size": scheme, className: cx('pui-control', wrapperClassName), "data-leading-icon": leadingIcon ? '' : undefined, "data-disabled": props.disabled || undefined, children: [leadingIcon && (_jsx("span", { className: 'pui-control-icon control-icon', "aria-hidden": 'true', children: leadingIcon })), _jsx(BaseInput, { ...props, size: typeof size === 'number' ? size : undefined, ref: ref, className: cx('pui-input', className) })] }));
10
+ });