@surflane/ui 0.3.0 → 0.5.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.
- package/README.md +18 -8
- package/dist/accordion.d.ts +26 -0
- package/dist/accordion.js +27 -0
- package/dist/alert-dialog.d.ts +31 -0
- package/dist/alert-dialog.js +22 -0
- package/dist/app-shell.js +17 -17
- package/dist/{input-extensions.d.ts → autocomplete.d.ts} +4 -42
- package/dist/{input-extensions.js → autocomplete.js} +12 -31
- package/dist/avatar.d.ts +24 -0
- package/dist/avatar.js +24 -0
- package/dist/badge.d.ts +20 -0
- package/dist/badge.js +16 -0
- package/dist/breadcrumbs.d.ts +13 -0
- package/dist/breadcrumbs.js +31 -0
- package/dist/button.d.ts +11 -0
- package/dist/button.js +28 -5
- package/dist/{content.d.ts → card.d.ts} +6 -24
- package/dist/card.js +26 -0
- package/dist/chart.d.ts +19 -0
- package/dist/chart.js +29 -8
- package/dist/checkbox-group.d.ts +2 -0
- package/dist/checkbox-group.js +16 -0
- package/dist/checkbox.d.ts +9 -0
- package/dist/checkbox.js +29 -0
- package/dist/choice-label.d.ts +25 -0
- package/dist/choice-label.js +14 -0
- package/dist/choice.d.ts +7 -0
- package/dist/choice.js +3 -0
- package/dist/code.d.ts +21 -0
- package/dist/{content.js → code.js} +10 -32
- package/dist/collapsible.d.ts +18 -0
- package/dist/collapsible.js +21 -0
- package/dist/{advanced-forms.d.ts → combobox.d.ts} +5 -25
- package/dist/combobox.js +57 -0
- package/dist/{context-overlays.d.ts → context-menu.d.ts} +6 -28
- package/dist/context-menu.js +30 -0
- package/dist/date-picker.js +3 -2
- package/dist/dialog.d.ts +6 -24
- package/dist/dialog.js +9 -21
- package/dist/{panels.d.ts → drawer.d.ts} +3 -34
- package/dist/drawer.js +47 -0
- package/dist/empty-state.d.ts +29 -0
- package/dist/empty-state.js +19 -0
- package/dist/field.d.ts +42 -0
- package/dist/field.js +21 -0
- package/dist/fieldset.d.ts +14 -0
- package/dist/fieldset.js +10 -0
- package/dist/file-upload.d.ts +3 -1
- package/dist/file-upload.js +8 -6
- package/dist/filter-bar.js +6 -6
- package/dist/form.d.ts +2 -0
- package/dist/form.js +7 -0
- package/dist/icon.d.ts +10 -0
- package/dist/icon.js +19 -2
- package/dist/index.d.ts +57 -31
- package/dist/index.js +71 -31
- package/dist/{messages.d.ts → inline-message.d.ts} +0 -28
- package/dist/inline-message.js +23 -0
- package/dist/input.js +3 -3
- package/dist/{foundations.d.ts → layout.d.ts} +5 -23
- package/dist/layout.js +40 -0
- package/dist/link.d.ts +6 -0
- package/dist/link.js +17 -0
- package/dist/list.d.ts +33 -0
- package/dist/list.js +21 -0
- package/dist/markdown.js +7 -7
- package/dist/menu.d.ts +7 -5
- package/dist/menu.js +24 -20
- package/dist/menubar.d.ts +4 -0
- package/dist/menubar.js +4 -0
- package/dist/meter.d.ts +29 -0
- package/dist/meter.js +13 -0
- package/dist/native-select.d.ts +8 -0
- package/dist/native-select.js +54 -0
- package/dist/navigation-menu.js +14 -11
- package/dist/number-field.d.ts +23 -0
- package/dist/number-field.js +33 -0
- package/dist/otp-field.js +4 -4
- package/dist/page-header.d.ts +12 -0
- package/dist/page-header.js +9 -0
- package/dist/pagination.js +4 -5
- package/dist/panel.d.ts +13 -0
- package/dist/panel.js +13 -0
- package/dist/parts.d.ts +22 -1
- package/dist/parts.js +40 -7
- package/dist/popover.d.ts +23 -6
- package/dist/popover.js +17 -7
- package/dist/preview-card.d.ts +29 -0
- package/dist/preview-card.js +27 -0
- package/dist/progress.d.ts +29 -0
- package/dist/progress.js +13 -0
- package/dist/radio-group.d.ts +16 -0
- package/dist/radio-group.js +31 -0
- package/dist/scroll-area.js +4 -5
- package/dist/select.d.ts +8 -8
- package/dist/select.js +19 -53
- package/dist/separator.d.ts +4 -0
- package/dist/separator.js +8 -0
- package/dist/sheet.d.ts +29 -0
- package/dist/sheet.js +39 -0
- package/dist/sizing.js +1 -1
- package/dist/skeleton.d.ts +8 -0
- package/dist/skeleton.js +8 -0
- package/dist/slider.d.ts +40 -0
- package/dist/slider.js +27 -0
- package/dist/spinner.d.ts +13 -0
- package/dist/spinner.js +10 -0
- package/dist/status.d.ts +1 -19
- package/dist/status.js +10 -14
- package/dist/switch.d.ts +13 -0
- package/dist/switch.js +25 -0
- package/dist/syntax-context.d.ts +7 -0
- package/dist/syntax-context.js +4 -0
- package/dist/syntax-highlighter.d.ts +4 -1
- package/dist/syntax-highlighter.js +13 -6
- package/dist/syntax-highlighting.d.ts +8 -0
- package/dist/syntax-highlighting.js +12 -0
- package/dist/{data.d.ts → table.d.ts} +8 -32
- package/dist/table.js +67 -0
- package/dist/tabs.d.ts +29 -0
- package/dist/tabs.js +13 -0
- package/dist/textarea.d.ts +7 -0
- package/dist/textarea.js +12 -0
- package/dist/toast.js +18 -17
- package/dist/toggle-group.d.ts +5 -0
- package/dist/toggle-group.js +7 -0
- package/dist/toggle.d.ts +7 -0
- package/dist/toggle.js +9 -0
- package/dist/{commands.d.ts → toolbar.d.ts} +0 -13
- package/dist/toolbar.js +14 -0
- package/dist/tooltip.d.ts +3 -2
- package/dist/tooltip.js +2 -2
- package/dist/tree.js +4 -2
- package/dist/typography.d.ts +12 -0
- package/dist/typography.js +14 -0
- package/package.json +286 -21
- package/src/all.css +8 -0
- package/src/styles.css +3745 -3629
- package/dist/advanced-forms.js +0 -93
- package/dist/commands.js +0 -27
- package/dist/context-overlays.js +0 -50
- package/dist/data.js +0 -82
- package/dist/feedback.d.ts +0 -76
- package/dist/feedback.js +0 -35
- package/dist/forms.d.ts +0 -91
- package/dist/forms.js +0 -109
- package/dist/foundations.js +0 -55
- package/dist/messages.js +0 -38
- package/dist/navigation.d.ts +0 -107
- package/dist/navigation.js +0 -108
- package/dist/panels.js +0 -99
package/dist/parts.js
CHANGED
|
@@ -1,22 +1,55 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { ComponentSizeContext, useComponentSize, } from './sizing.js';
|
|
2
|
+
import { ComponentSizeContext, normalizeSize, useComponentSize, } from './sizing.js';
|
|
3
3
|
import * as React from 'react';
|
|
4
|
+
/** Joins class names, skipping empty ones. */
|
|
5
|
+
export function cx(...classes) {
|
|
6
|
+
return classes.filter(Boolean).join(' ');
|
|
7
|
+
}
|
|
8
|
+
/** The data-size value: a short alias (sm, md, lg) renders as its full name, so both
|
|
9
|
+
* spellings meet the same CSS; other values such as xs or icon pass through. */
|
|
10
|
+
export function sizeName(size) {
|
|
11
|
+
return size === 'sm' || size === 'md' || size === 'lg'
|
|
12
|
+
? normalizeSize(size)
|
|
13
|
+
: size;
|
|
14
|
+
}
|
|
4
15
|
/** Preserve Base UI's state-dependent className contract when adding a skin. */
|
|
5
16
|
export function skin(base, custom) {
|
|
6
17
|
if (typeof custom === 'function')
|
|
7
|
-
return (state) =>
|
|
8
|
-
return
|
|
18
|
+
return (state) => cx(base, custom(state));
|
|
19
|
+
return cx(base, custom);
|
|
9
20
|
}
|
|
10
|
-
|
|
21
|
+
/** A styled Base UI part or element. A portal part renders outside the tree that sets
|
|
22
|
+
* data-ui-size, so it always carries the size scheme; other parts carry it only when
|
|
23
|
+
* size is set. */
|
|
24
|
+
export function part(Component, base, { portal = false } = {}) {
|
|
11
25
|
return React.forwardRef(function ThemedPart(props, ref) {
|
|
12
26
|
const { className, size, ...rest } = props;
|
|
13
27
|
const scheme = useComponentSize(size);
|
|
14
|
-
const portal = /positioner|popup|^pui-menu$|navigation-menu-viewport/.test(base);
|
|
15
28
|
const classes = typeof className === 'function'
|
|
16
|
-
? (state) =>
|
|
17
|
-
:
|
|
29
|
+
? (state) => cx(base, className(state))
|
|
30
|
+
: cx(base, className);
|
|
18
31
|
const element = (_jsx(Component, { ...rest, ref: ref, className: classes, "data-ui-size": size ? scheme : portal ? scheme : undefined }));
|
|
19
32
|
// Keep the React subtree stable when size changes from omitted to explicit.
|
|
20
33
|
return (_jsx(ComponentSizeContext.Provider, { value: scheme, children: element }));
|
|
21
34
|
});
|
|
22
35
|
}
|
|
36
|
+
/** True inside a namespace's own Portal, so a Content that brings its portal adds no
|
|
37
|
+
* second one. Each Content resets it, so a nested popup portals itself. */
|
|
38
|
+
const PortalScope = /* @__PURE__ */ React.createContext(false);
|
|
39
|
+
/** A namespace Portal that marks its subtree as already portalled. */
|
|
40
|
+
export function scopedPortal(BasePortal) {
|
|
41
|
+
const Scoped = React.forwardRef(function Portal(props, ref) {
|
|
42
|
+
return (_jsx(PortalScope.Provider, { value: true, children: React.createElement(BasePortal, { ...props, ref }) }));
|
|
43
|
+
});
|
|
44
|
+
return Scoped;
|
|
45
|
+
}
|
|
46
|
+
/** Renders a Content's positioner in its portal, unless a namespace Portal holds it. */
|
|
47
|
+
export function OwnPortal({ portal: BasePortal, children, }) {
|
|
48
|
+
const inside = React.useContext(PortalScope);
|
|
49
|
+
const content = (_jsx(PortalScope.Provider, { value: false, children: children }));
|
|
50
|
+
return inside ? content : _jsx(BasePortal, { children: content });
|
|
51
|
+
}
|
|
52
|
+
/** Drops undefined entries, so explicit placement props override defaults only when set. */
|
|
53
|
+
export function defined(props) {
|
|
54
|
+
return Object.fromEntries(Object.entries(props).filter(([, value]) => value !== undefined));
|
|
55
|
+
}
|
package/dist/popover.d.ts
CHANGED
|
@@ -1,21 +1,38 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
+
import { type ComponentSizeAlias } from './sizing.js';
|
|
2
3
|
import { Popover as BasePopover } from '@base-ui/react/popover';
|
|
3
|
-
declare function PopoverContent({ side, align, sideOffset, collisionPadding, className, ...props }: React.ComponentProps<typeof BasePopover.Popup> & Pick<React.ComponentProps<typeof BasePopover.Positioner>, 'side' | 'align' | 'sideOffset' | 'collisionPadding'>
|
|
4
|
+
declare function PopoverContent({ size, side, align, sideOffset, collisionPadding, className, ...props }: React.ComponentProps<typeof BasePopover.Popup> & Pick<React.ComponentProps<typeof BasePopover.Positioner>, 'side' | 'align' | 'sideOffset' | 'collisionPadding'> & {
|
|
5
|
+
/** Width and density: small 240px, default 320px, large 480px. Unset, the
|
|
6
|
+
* popover keeps the default width and takes the surrounding density. */
|
|
7
|
+
size?: ComponentSizeAlias;
|
|
8
|
+
}): React.JSX.Element;
|
|
9
|
+
declare const PopoverTitle: React.ForwardRefExoticComponent<Omit<Omit<Omit<import("@base-ui/react/popover").PopoverTitleProps, "ref"> & React.RefAttributes<HTMLHeadingElement>, "ref">, "size"> & {
|
|
10
|
+
size?: import("./sizing.js").ComponentSize;
|
|
11
|
+
} & React.RefAttributes<HTMLHeadingElement>>;
|
|
12
|
+
declare const PopoverDescription: React.ForwardRefExoticComponent<Omit<Omit<Omit<import("@base-ui/react/popover").PopoverDescriptionProps, "ref"> & React.RefAttributes<HTMLParagraphElement>, "ref">, "size"> & {
|
|
13
|
+
size?: import("./sizing.js").ComponentSize;
|
|
14
|
+
} & React.RefAttributes<HTMLParagraphElement>>;
|
|
15
|
+
/** Content brings its own portal; Portal stays for wrapping it, or raw parts. */
|
|
16
|
+
declare const PopoverPortal: React.ForwardRefExoticComponent<Omit<import("@base-ui/react/popover").PopoverPortalProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
4
17
|
export declare const Popover: {
|
|
18
|
+
Portal: React.ForwardRefExoticComponent<Omit<import("@base-ui/react/popover").PopoverPortalProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
5
19
|
Content: typeof PopoverContent;
|
|
20
|
+
Title: React.ForwardRefExoticComponent<Omit<Omit<Omit<import("@base-ui/react/popover").PopoverTitleProps, "ref"> & React.RefAttributes<HTMLHeadingElement>, "ref">, "size"> & {
|
|
21
|
+
size?: import("./sizing.js").ComponentSize;
|
|
22
|
+
} & React.RefAttributes<HTMLHeadingElement>>;
|
|
23
|
+
Description: React.ForwardRefExoticComponent<Omit<Omit<Omit<import("@base-ui/react/popover").PopoverDescriptionProps, "ref"> & React.RefAttributes<HTMLParagraphElement>, "ref">, "size"> & {
|
|
24
|
+
size?: import("./sizing.js").ComponentSize;
|
|
25
|
+
} & React.RefAttributes<HTMLParagraphElement>>;
|
|
6
26
|
Root: typeof BasePopover.Root;
|
|
7
27
|
Trigger: BasePopover.Trigger;
|
|
8
|
-
Portal: React.ForwardRefExoticComponent<Omit<import("@base-ui/react/popover").PopoverPortalProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
9
28
|
Positioner: React.ForwardRefExoticComponent<Omit<import("@base-ui/react/popover").PopoverPositionerProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
10
29
|
Popup: React.ForwardRefExoticComponent<Omit<import("@base-ui/react/popover").PopoverPopupProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
11
30
|
Arrow: React.ForwardRefExoticComponent<Omit<import("@base-ui/react/popover").PopoverArrowProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
12
31
|
Backdrop: React.ForwardRefExoticComponent<Omit<import("@base-ui/react/popover").PopoverBackdropProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
13
|
-
Title: React.ForwardRefExoticComponent<Omit<import("@base-ui/react/popover").PopoverTitleProps, "ref"> & React.RefAttributes<HTMLHeadingElement>>;
|
|
14
|
-
Description: React.ForwardRefExoticComponent<Omit<import("@base-ui/react/popover").PopoverDescriptionProps, "ref"> & React.RefAttributes<HTMLParagraphElement>>;
|
|
15
32
|
Close: React.ForwardRefExoticComponent<Omit<import("@base-ui/react/popover").PopoverCloseProps, "ref"> & React.RefAttributes<HTMLButtonElement>>;
|
|
16
33
|
Viewport: React.ForwardRefExoticComponent<Omit<import("@base-ui/react/popover").PopoverViewportProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
17
34
|
createHandle: typeof BasePopover.createHandle;
|
|
18
35
|
Handle: typeof BasePopover.Handle;
|
|
19
36
|
};
|
|
20
|
-
export { PopoverContent };
|
|
21
|
-
export declare const PopoverArrow: React.ForwardRefExoticComponent<Omit<import("@base-ui/react/popover").PopoverArrowProps, "ref"> & React.RefAttributes<HTMLDivElement>>, PopoverBackdrop: React.ForwardRefExoticComponent<Omit<import("@base-ui/react/popover").PopoverBackdropProps, "ref"> & React.RefAttributes<HTMLDivElement>>, PopoverClose: React.ForwardRefExoticComponent<Omit<import("@base-ui/react/popover").PopoverCloseProps, "ref"> & React.RefAttributes<HTMLButtonElement>>,
|
|
37
|
+
export { PopoverContent, PopoverTitle, PopoverDescription, PopoverPortal };
|
|
38
|
+
export declare const PopoverArrow: React.ForwardRefExoticComponent<Omit<import("@base-ui/react/popover").PopoverArrowProps, "ref"> & React.RefAttributes<HTMLDivElement>>, PopoverBackdrop: React.ForwardRefExoticComponent<Omit<import("@base-ui/react/popover").PopoverBackdropProps, "ref"> & React.RefAttributes<HTMLDivElement>>, PopoverClose: React.ForwardRefExoticComponent<Omit<import("@base-ui/react/popover").PopoverCloseProps, "ref"> & React.RefAttributes<HTMLButtonElement>>, PopoverHandle: typeof BasePopover.Handle, PopoverPopup: React.ForwardRefExoticComponent<Omit<import("@base-ui/react/popover").PopoverPopupProps, "ref"> & React.RefAttributes<HTMLDivElement>>, PopoverPositioner: React.ForwardRefExoticComponent<Omit<import("@base-ui/react/popover").PopoverPositionerProps, "ref"> & React.RefAttributes<HTMLDivElement>>, PopoverRoot: typeof BasePopover.Root, PopoverTrigger: BasePopover.Trigger, PopoverViewport: React.ForwardRefExoticComponent<Omit<import("@base-ui/react/popover").PopoverViewportProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
package/dist/popover.js
CHANGED
|
@@ -1,13 +1,23 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import { OwnPortal, part, scopedPortal, sizeName, skin } from './parts.js';
|
|
3
4
|
import { useComponentSize } from './sizing.js';
|
|
4
5
|
import { Popover as BasePopover } from '@base-ui/react/popover';
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
return (_jsx(BasePopover.Positioner, { side: side, align: align, sideOffset: sideOffset, collisionPadding: collisionPadding, className: 'pui-positioner', children: _jsx(BasePopover.Popup, { "data-ui-size": scheme, ...props, className: cx('pui-popover', typeof className === 'string' && className) }) }));
|
|
6
|
+
function PopoverContent({ size, side = 'bottom', align = 'start', sideOffset = 8, collisionPadding = 12, className, ...props }) {
|
|
7
|
+
const scheme = useComponentSize(size);
|
|
8
|
+
return (_jsx(OwnPortal, { portal: BasePopover.Portal, children: _jsx(BasePopover.Positioner, { side: side, align: align, sideOffset: sideOffset, collisionPadding: collisionPadding, className: 'pui-positioner', children: _jsx(BasePopover.Popup, { "data-ui-size": scheme, "data-size": sizeName(size), ...props, className: skin('pui-popover', className) }) }) }));
|
|
9
9
|
}
|
|
10
|
-
|
|
10
|
+
const PopoverTitle = /* @__PURE__ */ part(BasePopover.Title, 'pui-popover-title');
|
|
11
|
+
const PopoverDescription = /* @__PURE__ */ part(BasePopover.Description, 'pui-popover-description');
|
|
12
|
+
/** Content brings its own portal; Portal stays for wrapping it, or raw parts. */
|
|
13
|
+
const PopoverPortal = /* @__PURE__ */ scopedPortal(BasePopover.Portal);
|
|
14
|
+
export const Popover = {
|
|
15
|
+
...BasePopover,
|
|
16
|
+
Portal: PopoverPortal,
|
|
17
|
+
Content: PopoverContent,
|
|
18
|
+
Title: PopoverTitle,
|
|
19
|
+
Description: PopoverDescription,
|
|
20
|
+
};
|
|
11
21
|
// Flat names for React Server Components, which cannot dot into client exports.
|
|
12
|
-
export { PopoverContent };
|
|
13
|
-
export const { Arrow: PopoverArrow, Backdrop: PopoverBackdrop, Close: PopoverClose,
|
|
22
|
+
export { PopoverContent, PopoverTitle, PopoverDescription, PopoverPortal };
|
|
23
|
+
export const { Arrow: PopoverArrow, Backdrop: PopoverBackdrop, Close: PopoverClose, Handle: PopoverHandle, Popup: PopoverPopup, Positioner: PopoverPositioner, Root: PopoverRoot, Trigger: PopoverTrigger, Viewport: PopoverViewport, } = Popover;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { PreviewCard as BasePreviewCard } from '@base-ui/react/preview-card';
|
|
3
|
+
import { type Placement } from './parts.js';
|
|
4
|
+
declare function PreviewTrigger<Payload>(props: BasePreviewCard.Trigger.Props<Payload> & React.RefAttributes<HTMLElement>): React.JSX.Element;
|
|
5
|
+
export declare const PreviewCard: {
|
|
6
|
+
Portal: React.ForwardRefExoticComponent<Omit<import("@base-ui/react/preview-card").PreviewCardPortalProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
7
|
+
Trigger: typeof PreviewTrigger;
|
|
8
|
+
Positioner: React.ForwardRefExoticComponent<Omit<Omit<Omit<import("@base-ui/react/preview-card").PreviewCardPositionerProps, "ref"> & React.RefAttributes<HTMLDivElement>, "ref">, "size"> & {
|
|
9
|
+
size?: import("./sizing.js").ComponentSize;
|
|
10
|
+
} & React.RefAttributes<HTMLDivElement>>;
|
|
11
|
+
Popup: React.ForwardRefExoticComponent<Omit<Omit<import("@base-ui/react/preview-card").PreviewCardPopupProps, "ref"> & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
12
|
+
Content: React.ForwardRefExoticComponent<Omit<Omit<import("@base-ui/react/preview-card").PreviewCardPopupProps, "ref"> & React.RefAttributes<HTMLDivElement>, "ref"> & Placement<React.ForwardRefExoticComponent<Omit<import("@base-ui/react/preview-card").PreviewCardPositionerProps, "ref"> & React.RefAttributes<HTMLDivElement>>> & {
|
|
13
|
+
/** @deprecated Pass side, align, sideOffset and collisionPadding directly. */
|
|
14
|
+
positionerProps?: React.ComponentPropsWithoutRef<typeof BasePreviewCard.Positioner>;
|
|
15
|
+
} & React.RefAttributes<HTMLDivElement>>;
|
|
16
|
+
Root: <Payload>(props: BasePreviewCard.Root.Props<Payload>) => React.JSX.Element;
|
|
17
|
+
Arrow: React.ForwardRefExoticComponent<Omit<import("@base-ui/react/preview-card").PreviewCardArrowProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
18
|
+
Backdrop: React.ForwardRefExoticComponent<Omit<import("@base-ui/react/preview-card").PreviewCardBackdropProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
19
|
+
Viewport: React.ForwardRefExoticComponent<Omit<import("@base-ui/react/preview-card").PreviewCardViewportProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
20
|
+
createHandle: typeof BasePreviewCard.createHandle;
|
|
21
|
+
Handle: typeof BasePreviewCard.Handle;
|
|
22
|
+
};
|
|
23
|
+
export declare const PreviewCardArrow: React.ForwardRefExoticComponent<Omit<import("@base-ui/react/preview-card").PreviewCardArrowProps, "ref"> & React.RefAttributes<HTMLDivElement>>, PreviewCardBackdrop: React.ForwardRefExoticComponent<Omit<import("@base-ui/react/preview-card").PreviewCardBackdropProps, "ref"> & React.RefAttributes<HTMLDivElement>>, PreviewCardHandle: typeof BasePreviewCard.Handle, PreviewCardPopup: React.ForwardRefExoticComponent<Omit<Omit<import("@base-ui/react/preview-card").PreviewCardPopupProps, "ref"> & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>, PreviewCardPortal: React.ForwardRefExoticComponent<Omit<import("@base-ui/react/preview-card").PreviewCardPortalProps, "ref"> & React.RefAttributes<HTMLDivElement>>, PreviewCardPositioner: React.ForwardRefExoticComponent<Omit<Omit<Omit<import("@base-ui/react/preview-card").PreviewCardPositionerProps, "ref"> & React.RefAttributes<HTMLDivElement>, "ref">, "size"> & {
|
|
24
|
+
size?: import("./sizing.js").ComponentSize;
|
|
25
|
+
} & React.RefAttributes<HTMLDivElement>>, PreviewCardRoot: <Payload>(props: BasePreviewCard.Root.Props<Payload>) => React.JSX.Element, PreviewCardTrigger: typeof PreviewTrigger, PreviewCardViewport: React.ForwardRefExoticComponent<Omit<import("@base-ui/react/preview-card").PreviewCardViewportProps, "ref"> & React.RefAttributes<HTMLDivElement>>, PreviewCardContent: React.ForwardRefExoticComponent<Omit<Omit<import("@base-ui/react/preview-card").PreviewCardPopupProps, "ref"> & React.RefAttributes<HTMLDivElement>, "ref"> & Placement<React.ForwardRefExoticComponent<Omit<import("@base-ui/react/preview-card").PreviewCardPositionerProps, "ref"> & React.RefAttributes<HTMLDivElement>>> & {
|
|
26
|
+
/** @deprecated Pass side, align, sideOffset and collisionPadding directly. */
|
|
27
|
+
positionerProps?: React.ComponentPropsWithoutRef<typeof BasePreviewCard.Positioner>;
|
|
28
|
+
} & React.RefAttributes<HTMLDivElement>>;
|
|
29
|
+
export {};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import * as React from 'react';
|
|
4
|
+
import { PreviewCard as BasePreviewCard } from '@base-ui/react/preview-card';
|
|
5
|
+
import { OwnPortal, defined, part, scopedPortal, skin, } from './parts.js';
|
|
6
|
+
const PreviewPositioner = /* @__PURE__ */ part(BasePreviewCard.Positioner, 'pui-positioner', { portal: true });
|
|
7
|
+
// The preview is visual enhancement; its destination is the accessible interface.
|
|
8
|
+
const PreviewPopup = /* @__PURE__ */ React.forwardRef(function PreviewPopup({ className, ...props }, ref) {
|
|
9
|
+
return (_jsx(BasePreviewCard.Popup, { ...props, ref: ref, "aria-hidden": 'true', className: skin('pui-preview-card', className) }));
|
|
10
|
+
});
|
|
11
|
+
function PreviewTrigger(props) {
|
|
12
|
+
const { className, ...rest } = props;
|
|
13
|
+
return (_jsx(BasePreviewCard.Trigger, { ...rest, className: skin('pui-link pui-preview-trigger', className) }));
|
|
14
|
+
}
|
|
15
|
+
const PreviewContent = /* @__PURE__ */ React.forwardRef(function PreviewContent({ side, align, sideOffset, collisionPadding, positionerProps, ...props }, ref) {
|
|
16
|
+
return (_jsx(OwnPortal, { portal: BasePreviewCard.Portal, children: _jsx(PreviewPositioner, { sideOffset: 8, collisionPadding: 12, ...positionerProps, ...defined({ side, align, sideOffset, collisionPadding }), children: _jsx(PreviewPopup, { ...props, ref: ref }) }) }));
|
|
17
|
+
});
|
|
18
|
+
export const PreviewCard = {
|
|
19
|
+
...BasePreviewCard,
|
|
20
|
+
Portal: /* @__PURE__ */ scopedPortal(BasePreviewCard.Portal),
|
|
21
|
+
Trigger: PreviewTrigger,
|
|
22
|
+
Positioner: PreviewPositioner,
|
|
23
|
+
Popup: PreviewPopup,
|
|
24
|
+
Content: PreviewContent,
|
|
25
|
+
};
|
|
26
|
+
// Flat names for React Server Components, which cannot dot into client exports.
|
|
27
|
+
export const { Arrow: PreviewCardArrow, Backdrop: PreviewCardBackdrop, Handle: PreviewCardHandle, Popup: PreviewCardPopup, Portal: PreviewCardPortal, Positioner: PreviewCardPositioner, Root: PreviewCardRoot, Trigger: PreviewCardTrigger, Viewport: PreviewCardViewport, Content: PreviewCardContent, } = PreviewCard;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
export declare const Progress: {
|
|
3
|
+
Root: React.ForwardRefExoticComponent<Omit<Omit<Omit<import("@base-ui/react/progress").ProgressRootProps, "ref"> & React.RefAttributes<HTMLDivElement>, "ref">, "size"> & {
|
|
4
|
+
size?: import("./sizing.js").ComponentSize;
|
|
5
|
+
} & React.RefAttributes<HTMLDivElement>>;
|
|
6
|
+
Label: React.ForwardRefExoticComponent<Omit<Omit<Omit<import("@base-ui/react/progress").ProgressLabelProps, "ref"> & React.RefAttributes<HTMLSpanElement>, "ref">, "size"> & {
|
|
7
|
+
size?: import("./sizing.js").ComponentSize;
|
|
8
|
+
} & React.RefAttributes<HTMLSpanElement>>;
|
|
9
|
+
Value: React.ForwardRefExoticComponent<Omit<Omit<Omit<import("@base-ui/react/progress").ProgressValueProps, "ref"> & React.RefAttributes<HTMLSpanElement>, "ref">, "size"> & {
|
|
10
|
+
size?: import("./sizing.js").ComponentSize;
|
|
11
|
+
} & React.RefAttributes<HTMLSpanElement>>;
|
|
12
|
+
Track: React.ForwardRefExoticComponent<Omit<Omit<Omit<import("@base-ui/react/progress").ProgressTrackProps, "ref"> & React.RefAttributes<HTMLDivElement>, "ref">, "size"> & {
|
|
13
|
+
size?: import("./sizing.js").ComponentSize;
|
|
14
|
+
} & React.RefAttributes<HTMLDivElement>>;
|
|
15
|
+
Indicator: React.ForwardRefExoticComponent<Omit<Omit<Omit<import("@base-ui/react/progress").ProgressIndicatorProps, "ref"> & React.RefAttributes<HTMLDivElement>, "ref">, "size"> & {
|
|
16
|
+
size?: import("./sizing.js").ComponentSize;
|
|
17
|
+
} & React.RefAttributes<HTMLDivElement>>;
|
|
18
|
+
};
|
|
19
|
+
export declare const ProgressIndicator: React.ForwardRefExoticComponent<Omit<Omit<Omit<import("@base-ui/react/progress").ProgressIndicatorProps, "ref"> & React.RefAttributes<HTMLDivElement>, "ref">, "size"> & {
|
|
20
|
+
size?: import("./sizing.js").ComponentSize;
|
|
21
|
+
} & React.RefAttributes<HTMLDivElement>>, ProgressLabel: React.ForwardRefExoticComponent<Omit<Omit<Omit<import("@base-ui/react/progress").ProgressLabelProps, "ref"> & React.RefAttributes<HTMLSpanElement>, "ref">, "size"> & {
|
|
22
|
+
size?: import("./sizing.js").ComponentSize;
|
|
23
|
+
} & React.RefAttributes<HTMLSpanElement>>, ProgressRoot: React.ForwardRefExoticComponent<Omit<Omit<Omit<import("@base-ui/react/progress").ProgressRootProps, "ref"> & React.RefAttributes<HTMLDivElement>, "ref">, "size"> & {
|
|
24
|
+
size?: import("./sizing.js").ComponentSize;
|
|
25
|
+
} & React.RefAttributes<HTMLDivElement>>, ProgressTrack: React.ForwardRefExoticComponent<Omit<Omit<Omit<import("@base-ui/react/progress").ProgressTrackProps, "ref"> & React.RefAttributes<HTMLDivElement>, "ref">, "size"> & {
|
|
26
|
+
size?: import("./sizing.js").ComponentSize;
|
|
27
|
+
} & React.RefAttributes<HTMLDivElement>>, ProgressValue: React.ForwardRefExoticComponent<Omit<Omit<Omit<import("@base-ui/react/progress").ProgressValueProps, "ref"> & React.RefAttributes<HTMLSpanElement>, "ref">, "size"> & {
|
|
28
|
+
size?: import("./sizing.js").ComponentSize;
|
|
29
|
+
} & React.RefAttributes<HTMLSpanElement>>;
|
package/dist/progress.js
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { Progress as BaseProgress } from '@base-ui/react/progress';
|
|
3
|
+
import { part } from './parts.js';
|
|
4
|
+
export const Progress = {
|
|
5
|
+
...BaseProgress,
|
|
6
|
+
Root: /* @__PURE__ */ part(BaseProgress.Root, 'pui-gauge pui-progress'),
|
|
7
|
+
Label: /* @__PURE__ */ part(BaseProgress.Label, 'pui-gauge-label'),
|
|
8
|
+
Value: /* @__PURE__ */ part(BaseProgress.Value, 'pui-gauge-value'),
|
|
9
|
+
Track: /* @__PURE__ */ part(BaseProgress.Track, 'pui-gauge-track'),
|
|
10
|
+
Indicator: /* @__PURE__ */ part(BaseProgress.Indicator, 'pui-gauge-indicator'),
|
|
11
|
+
};
|
|
12
|
+
// Flat names for React Server Components, which cannot dot into client exports.
|
|
13
|
+
export const { Indicator: ProgressIndicator, Label: ProgressLabel, Root: ProgressRoot, Track: ProgressTrack, Value: ProgressValue, } = Progress;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { Radio as BaseRadio } from '@base-ui/react/radio';
|
|
3
|
+
import { RadioGroup as BaseRadioGroup } from '@base-ui/react/radio-group';
|
|
4
|
+
import { type ChoiceSize } from './choice.js';
|
|
5
|
+
export declare function RadioGroup<Value = string>({ value, defaultValue, onValueChange, className, form, ref, ...props }: BaseRadioGroup.Props<Value>): React.JSX.Element;
|
|
6
|
+
declare const RadioRoot: React.ForwardRefExoticComponent<Omit<BaseRadio.Root.Props<unknown>, "ref"> & ChoiceSize & React.RefAttributes<HTMLSpanElement>>;
|
|
7
|
+
export declare const Radio: {
|
|
8
|
+
Root: React.ForwardRefExoticComponent<Omit<BaseRadio.Root.Props<unknown>, "ref"> & ChoiceSize & React.RefAttributes<HTMLSpanElement>>;
|
|
9
|
+
Indicator: React.ForwardRefExoticComponent<Omit<Omit<Omit<import("@base-ui/react/radio").RadioIndicatorProps, "ref"> & React.RefAttributes<HTMLSpanElement>, "ref">, "size"> & {
|
|
10
|
+
size?: import("./sizing.js").ComponentSize;
|
|
11
|
+
} & React.RefAttributes<HTMLSpanElement>>;
|
|
12
|
+
};
|
|
13
|
+
export { RadioRoot };
|
|
14
|
+
export declare const RadioIndicator: React.ForwardRefExoticComponent<Omit<Omit<Omit<import("@base-ui/react/radio").RadioIndicatorProps, "ref"> & React.RefAttributes<HTMLSpanElement>, "ref">, "size"> & {
|
|
15
|
+
size?: import("./sizing.js").ComponentSize;
|
|
16
|
+
} & React.RefAttributes<HTMLSpanElement>>;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import * as React from 'react';
|
|
4
|
+
import { useComponentSize } from './sizing.js';
|
|
5
|
+
import { Radio as BaseRadio } from '@base-ui/react/radio';
|
|
6
|
+
import { RadioGroup as BaseRadioGroup } from '@base-ui/react/radio-group';
|
|
7
|
+
import { skin, part } from './parts.js';
|
|
8
|
+
import { useRootRef, useResetValue } from './form-state.js';
|
|
9
|
+
import { ChoiceResetPaint } from './choice.js';
|
|
10
|
+
export function RadioGroup({ value, defaultValue, onValueChange, className, form, ref, ...props }) {
|
|
11
|
+
const [element, attach] = useRootRef(ref);
|
|
12
|
+
const [selected, setSelected, revision] = useResetValue(value, defaultValue ?? null, element, form);
|
|
13
|
+
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) => {
|
|
14
|
+
onValueChange?.(next, event);
|
|
15
|
+
if (value === undefined && !event.isCanceled)
|
|
16
|
+
setSelected(next);
|
|
17
|
+
} }) }));
|
|
18
|
+
}
|
|
19
|
+
const RadioRoot = /* @__PURE__ */ React.forwardRef(function RadioRoot({ size, className, ...props }, ref) {
|
|
20
|
+
React.useContext(ChoiceResetPaint);
|
|
21
|
+
const scheme = useComponentSize(size);
|
|
22
|
+
return (_jsx(BaseRadio.Root, { ...props, "data-ui-size": size ? scheme : undefined, ref: ref, className: skin('pui-radio', className) }));
|
|
23
|
+
});
|
|
24
|
+
export const Radio = {
|
|
25
|
+
...BaseRadio,
|
|
26
|
+
Root: RadioRoot,
|
|
27
|
+
Indicator: /* @__PURE__ */ part(BaseRadio.Indicator, 'pui-radio-indicator'),
|
|
28
|
+
};
|
|
29
|
+
// Flat names for React Server Components, which cannot dot into client exports.
|
|
30
|
+
export { RadioRoot };
|
|
31
|
+
export const { Indicator: RadioIndicator } = Radio;
|
package/dist/scroll-area.js
CHANGED
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
3
|
import * as React from 'react';
|
|
4
4
|
import { ScrollArea as BaseScrollArea } from '@base-ui/react/scroll-area';
|
|
5
|
-
|
|
5
|
+
import { cx } from './parts.js';
|
|
6
|
+
export const ScrollArea = /* @__PURE__ */ React.forwardRef(function ScrollArea({ label, orientation = 'horizontal', scrollChain = 'auto', style, rootClassName, rootStyle, tabIndex = label ? 0 : undefined, role = label ? 'region' : undefined, className, children, ...props }, ref) {
|
|
6
7
|
const dragPointer = React.useRef(null);
|
|
7
8
|
const clearDrag = (event) => {
|
|
8
9
|
if (dragPointer.current !== event.pointerId)
|
|
@@ -10,7 +11,7 @@ export const ScrollArea = React.forwardRef(function ScrollArea({ label, orientat
|
|
|
10
11
|
dragPointer.current = null;
|
|
11
12
|
event.currentTarget.removeAttribute('data-scroll-dragging');
|
|
12
13
|
};
|
|
13
|
-
return (_jsxs(BaseScrollArea.Root, { className:
|
|
14
|
+
return (_jsxs(BaseScrollArea.Root, { className: cx('pui-scroll-root', rootClassName), style: rootStyle, onPointerMoveCapture: (event) => {
|
|
14
15
|
if (event.pointerType === 'touch')
|
|
15
16
|
return;
|
|
16
17
|
const root = event.currentTarget;
|
|
@@ -27,9 +28,7 @@ export const ScrollArea = React.forwardRef(function ScrollArea({ label, orientat
|
|
|
27
28
|
dragPointer.current = event.pointerId;
|
|
28
29
|
event.currentTarget.setAttribute('data-scroll-dragging', bar.getAttribute('data-orientation') ?? '');
|
|
29
30
|
}
|
|
30
|
-
}, onPointerUpCapture: clearDrag, onPointerCancelCapture: clearDrag, onLostPointerCapture: clearDrag, children: [_jsx(BaseScrollArea.Viewport, { ...props, ref: ref, className:
|
|
31
|
-
.filter(Boolean)
|
|
32
|
-
.join(' '), role: role, "aria-label": label, tabIndex: tabIndex, "data-scroll-orientation": orientation, style: {
|
|
31
|
+
}, onPointerUpCapture: clearDrag, onPointerCancelCapture: clearDrag, onLostPointerCapture: clearDrag, children: [_jsx(BaseScrollArea.Viewport, { ...props, ref: ref, className: cx('pui-scroll-viewport', className), role: role, "aria-label": label, tabIndex: tabIndex, "data-scroll-orientation": orientation, style: {
|
|
33
32
|
overflowX: orientation === 'vertical' ? 'hidden' : 'auto',
|
|
34
33
|
overflowY: orientation === 'horizontal' ? 'hidden' : 'auto',
|
|
35
34
|
overscrollBehaviorX: orientation === 'vertical' ? 'auto' : scrollChain,
|
package/dist/select.d.ts
CHANGED
|
@@ -5,8 +5,13 @@ export type SelectOption = {
|
|
|
5
5
|
label: React.ReactNode;
|
|
6
6
|
disabled?: boolean;
|
|
7
7
|
};
|
|
8
|
-
|
|
8
|
+
/** Options under a visible heading, like an HTML optgroup. */
|
|
9
|
+
export type SelectGroup = {
|
|
10
|
+
label: React.ReactNode;
|
|
9
11
|
options: SelectOption[];
|
|
12
|
+
};
|
|
13
|
+
export type SelectProps = {
|
|
14
|
+
options: (SelectOption | SelectGroup)[];
|
|
10
15
|
value?: string;
|
|
11
16
|
defaultValue?: string;
|
|
12
17
|
onValueChange?: (value: string) => void;
|
|
@@ -24,10 +29,5 @@ export type SelectProps = {
|
|
|
24
29
|
'aria-describedby'?: string;
|
|
25
30
|
'aria-invalid'?: React.AriaAttributes['aria-invalid'];
|
|
26
31
|
};
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
export declare const NativeSelect: React.ForwardRefExoticComponent<Omit<Omit<React.DetailedHTMLProps<React.SelectHTMLAttributes<HTMLSelectElement>, HTMLSelectElement>, "ref">, "size" | "multiple"> & {
|
|
30
|
-
size?: ComponentSizeAlias;
|
|
31
|
-
} & React.RefAttributes<HTMLButtonElement>>;
|
|
32
|
-
export declare function NativeSelectOption(props: React.ComponentProps<'option'>): React.JSX.Element;
|
|
33
|
-
export declare function NativeSelectOptGroup(props: React.ComponentProps<'optgroup'>): React.JSX.Element;
|
|
32
|
+
/** A single-choice list. The ref reaches the trigger button, as triggerRef does. */
|
|
33
|
+
export declare const Select: React.ForwardRefExoticComponent<SelectProps & React.RefAttributes<HTMLButtonElement>>;
|
package/dist/select.js
CHANGED
|
@@ -1,17 +1,24 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
3
|
import * as React from 'react';
|
|
4
|
+
import { Icon } from './icon.js';
|
|
4
5
|
import { useComponentSize } from './sizing.js';
|
|
5
6
|
import { Select as BaseSelect } from '@base-ui/react/select';
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
function
|
|
11
|
-
return (_jsx("svg", { width: '14', height: '14', viewBox: '0 0 24 24', fill: 'none', stroke: 'currentColor', strokeWidth: '1.7', "aria-hidden": 'true', children: _jsx("path", { d: 'm5 12 4 4L19 6' }) }));
|
|
12
|
-
}
|
|
13
|
-
export function Select({ options, value, defaultValue, onValueChange, className, inputRef, triggerRef, size, ...props }) {
|
|
7
|
+
import { sizeName, cx } from './parts.js';
|
|
8
|
+
const isGroup = (item) => 'options' in item;
|
|
9
|
+
const flatten = (items) => items.flatMap((item) => (isGroup(item) ? item.options : [item]));
|
|
10
|
+
/** A single-choice list. The ref reaches the trigger button, as triggerRef does. */
|
|
11
|
+
export const Select = /* @__PURE__ */ React.forwardRef(function Select({ options: items, value, defaultValue, onValueChange, className, inputRef, triggerRef, size, ...props }, ref) {
|
|
14
12
|
const scheme = useComponentSize(size);
|
|
13
|
+
const options = flatten(items);
|
|
14
|
+
// One stable callback, so the trigger ref is not detached on every render.
|
|
15
|
+
const setTrigger = React.useCallback((node) => {
|
|
16
|
+
for (const target of [ref, triggerRef])
|
|
17
|
+
if (typeof target === 'function')
|
|
18
|
+
target(node);
|
|
19
|
+
else if (target)
|
|
20
|
+
target.current = node;
|
|
21
|
+
}, [ref, triggerRef]);
|
|
15
22
|
const [localValue, setLocalValue] = React.useState(defaultValue ?? options[0]?.value ?? '');
|
|
16
23
|
const nativeInput = React.useRef(null);
|
|
17
24
|
const initialValue = defaultValue ?? options[0]?.value ?? '';
|
|
@@ -40,7 +47,7 @@ export function Select({ options, value, defaultValue, onValueChange, className,
|
|
|
40
47
|
}, [initialValue, props.form]);
|
|
41
48
|
const selected = value ?? localValue;
|
|
42
49
|
const { name, form, required, disabled, id, ...aria } = props;
|
|
43
|
-
return (_jsx("span", { className: cx('pui-select
|
|
50
|
+
return (_jsx("span", { className: cx('pui-select', className), "data-size": sizeName(size), "data-ui-size": scheme, "data-disabled": disabled || undefined, children: _jsxs(BaseSelect.Root, { items: options, value: selected, onValueChange: (v) => {
|
|
44
51
|
setLocalValue(v ?? '');
|
|
45
52
|
onValueChange?.(v ?? '');
|
|
46
53
|
}, inputRef: (node) => {
|
|
@@ -49,49 +56,8 @@ export function Select({ options, value, defaultValue, onValueChange, className,
|
|
|
49
56
|
inputRef(node);
|
|
50
57
|
else if (inputRef)
|
|
51
58
|
inputRef.current = node;
|
|
52
|
-
}, name: name, form: form, required: required, disabled: disabled, id: id, children: [_jsxs(BaseSelect.Trigger, { ...aria, ref:
|
|
53
|
-
}
|
|
54
|
-
function optionList(children) {
|
|
55
|
-
return React.Children.toArray(children).flatMap((child) => {
|
|
56
|
-
if (!React.isValidElement(child))
|
|
57
|
-
return [];
|
|
58
|
-
const p = child.props;
|
|
59
|
-
if (child.type === React.Fragment ||
|
|
60
|
-
child.type === 'optgroup' ||
|
|
61
|
-
child.type === NativeSelectOptGroup)
|
|
62
|
-
return optionList(p.children);
|
|
63
|
-
return [
|
|
64
|
-
{
|
|
65
|
-
value: String(p.value ?? p.children ?? ''),
|
|
66
|
-
label: p.label ?? p.children,
|
|
67
|
-
disabled: p.disabled,
|
|
68
|
-
},
|
|
69
|
-
];
|
|
70
|
-
});
|
|
71
|
-
}
|
|
72
|
-
/** Transitional HTML-option adapter. Submitted values use Base UI's native hidden input. */
|
|
73
|
-
export const NativeSelect = React.forwardRef(function NativeSelect({ children, onChange, value, defaultValue, className, size, ...props }, ref) {
|
|
74
|
-
const input = React.useRef(null);
|
|
75
|
-
const options = optionList(children);
|
|
76
|
-
return (_jsx(Select, { options: options, value: value === undefined ? undefined : String(value), defaultValue: defaultValue === undefined ? undefined : String(defaultValue), className: className, size: size, inputRef: input, triggerRef: ref, name: props.name, form: props.form, disabled: props.disabled, required: props.required, id: props.id, "aria-label": props['aria-label'], "aria-labelledby": props['aria-labelledby'], "aria-describedby": props['aria-describedby'], "aria-invalid": props['aria-invalid'], onValueChange: (next) => {
|
|
77
|
-
if (!onChange)
|
|
78
|
-
return;
|
|
79
|
-
const target = input.current;
|
|
80
|
-
if (!target)
|
|
81
|
-
return;
|
|
82
|
-
const setter = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value')?.set;
|
|
83
|
-
setter?.call(target, next);
|
|
84
|
-
const event = new Event('change', { bubbles: true });
|
|
85
|
-
Object.defineProperties(event, {
|
|
86
|
-
target: { value: target },
|
|
87
|
-
currentTarget: { value: target },
|
|
88
|
-
});
|
|
89
|
-
onChange(event);
|
|
90
|
-
} }));
|
|
59
|
+
}, name: name, form: form, required: required, disabled: disabled, id: id, children: [_jsxs(BaseSelect.Trigger, { ...aria, ref: setTrigger, className: 'pui-select-trigger', "data-value": selected, children: [_jsx(BaseSelect.Value, {}), _jsx(BaseSelect.Icon, { className: 'pui-select-icon', children: _jsx(Icon, { name: 'chevron-down' }) })] }), _jsx(BaseSelect.Portal, { children: _jsx(BaseSelect.Positioner, { className: 'pui-positioner', sideOffset: 6, alignItemWithTrigger: false, children: _jsx(BaseSelect.Popup, { className: 'pui-select-popup', "data-ui-size": scheme, children: _jsx(BaseSelect.List, { children: items.map((item, index) => isGroup(item) ? (_jsxs(BaseSelect.Group, { className: 'pui-select-group', children: [_jsx(BaseSelect.GroupLabel, { className: 'pui-select-group-label', children: item.label }), item.options.map(renderOption)] }, index)) : (renderOption(item))) }) }) }) })] }) }));
|
|
91
60
|
});
|
|
92
|
-
|
|
93
|
-
return
|
|
94
|
-
}
|
|
95
|
-
export function NativeSelectOptGroup(props) {
|
|
96
|
-
return _jsx("optgroup", { ...props });
|
|
61
|
+
function renderOption(option) {
|
|
62
|
+
return (_jsxs(BaseSelect.Item, { className: 'pui-select-item', value: option.value, "data-option-value": option.value, disabled: option.disabled, children: [_jsx(BaseSelect.ItemIndicator, { className: 'pui-select-check', children: _jsx(Icon, { name: 'check' }) }), _jsx(BaseSelect.ItemText, { children: option.label })] }, option.value));
|
|
97
63
|
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
export declare const Separator: React.ForwardRefExoticComponent<Omit<Omit<import("@base-ui/react/separator").SeparatorProps, "ref"> & React.RefAttributes<HTMLDivElement>, "ref"> & {
|
|
3
|
+
inset?: boolean;
|
|
4
|
+
} & React.RefAttributes<HTMLDivElement>>;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import * as React from 'react';
|
|
4
|
+
import { Separator as BaseSeparator } from '@base-ui/react/separator';
|
|
5
|
+
import { skin } from './parts.js';
|
|
6
|
+
export const Separator = /* @__PURE__ */ React.forwardRef(function Separator({ inset = false, className, ...props }, ref) {
|
|
7
|
+
return (_jsx(BaseSeparator, { ...props, ref: ref, "data-inset": inset || undefined, className: skin('pui-separator', className) }));
|
|
8
|
+
});
|
package/dist/sheet.d.ts
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { Dialog as BaseDialog } from '@base-ui/react/dialog';
|
|
3
|
+
import { Footer, Header, type PanelOptions, type PanelSide } from './panel.js';
|
|
4
|
+
declare function SheetRoot({ side, modal, ...props }: React.ComponentProps<typeof BaseDialog.Root> & {
|
|
5
|
+
side?: PanelSide;
|
|
6
|
+
}): React.JSX.Element;
|
|
7
|
+
declare const SheetContent: React.ForwardRefExoticComponent<Omit<Omit<import("@base-ui/react/dialog").DialogPopupProps, "ref"> & React.RefAttributes<HTMLDivElement>, "ref"> & PanelOptions & React.RefAttributes<HTMLDivElement>>;
|
|
8
|
+
declare function SheetTitle({ className, ...props }: React.ComponentProps<typeof BaseDialog.Title>): React.JSX.Element;
|
|
9
|
+
declare function SheetDescription({ className, ...props }: React.ComponentProps<typeof BaseDialog.Description>): React.JSX.Element;
|
|
10
|
+
export declare const Sheet: {
|
|
11
|
+
Root: typeof SheetRoot;
|
|
12
|
+
Content: React.ForwardRefExoticComponent<Omit<Omit<import("@base-ui/react/dialog").DialogPopupProps, "ref"> & React.RefAttributes<HTMLDivElement>, "ref"> & PanelOptions & React.RefAttributes<HTMLDivElement>>;
|
|
13
|
+
Header: typeof Header;
|
|
14
|
+
Body: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
15
|
+
Footer: typeof Footer;
|
|
16
|
+
Title: typeof SheetTitle;
|
|
17
|
+
Description: typeof SheetDescription;
|
|
18
|
+
Backdrop: React.ForwardRefExoticComponent<Omit<import("@base-ui/react/dialog").DialogBackdropProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
19
|
+
Close: React.ForwardRefExoticComponent<Omit<import("@base-ui/react/dialog").DialogCloseProps, "ref"> & React.RefAttributes<HTMLButtonElement>>;
|
|
20
|
+
Popup: React.ForwardRefExoticComponent<Omit<import("@base-ui/react/dialog").DialogPopupProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
21
|
+
Portal: React.ForwardRefExoticComponent<Omit<import("@base-ui/react/dialog").DialogPortalProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
22
|
+
Viewport: React.ForwardRefExoticComponent<Omit<import("@base-ui/react/dialog").DialogViewportProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
23
|
+
Trigger: BaseDialog.Trigger;
|
|
24
|
+
createHandle: typeof BaseDialog.createHandle;
|
|
25
|
+
Handle: typeof BaseDialog.Handle;
|
|
26
|
+
};
|
|
27
|
+
export { SheetDescription, SheetRoot, SheetTitle, SheetContent };
|
|
28
|
+
export declare const SheetBackdrop: React.ForwardRefExoticComponent<Omit<import("@base-ui/react/dialog").DialogBackdropProps, "ref"> & React.RefAttributes<HTMLDivElement>>, SheetClose: React.ForwardRefExoticComponent<Omit<import("@base-ui/react/dialog").DialogCloseProps, "ref"> & React.RefAttributes<HTMLButtonElement>>, SheetHandle: typeof BaseDialog.Handle, SheetPopup: React.ForwardRefExoticComponent<Omit<import("@base-ui/react/dialog").DialogPopupProps, "ref"> & React.RefAttributes<HTMLDivElement>>, SheetPortal: React.ForwardRefExoticComponent<Omit<import("@base-ui/react/dialog").DialogPortalProps, "ref"> & React.RefAttributes<HTMLDivElement>>, SheetTrigger: BaseDialog.Trigger, SheetViewport: React.ForwardRefExoticComponent<Omit<import("@base-ui/react/dialog").DialogViewportProps, "ref"> & React.RefAttributes<HTMLDivElement>>, SheetHeader: typeof Header, SheetBody: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>, SheetFooter: typeof Footer;
|
|
29
|
+
export type { PanelSide } from './panel.js';
|
package/dist/sheet.js
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import * as React from 'react';
|
|
4
|
+
import { Icon } from './icon.js';
|
|
5
|
+
import { skin } from './parts.js';
|
|
6
|
+
import { useComponentSize, normalizeSize } from './sizing.js';
|
|
7
|
+
import { Dialog as BaseDialog } from '@base-ui/react/dialog';
|
|
8
|
+
import { Body, Footer, Header, } from './panel.js';
|
|
9
|
+
const SheetSide = /* @__PURE__ */ React.createContext({
|
|
10
|
+
side: 'right',
|
|
11
|
+
modal: true,
|
|
12
|
+
});
|
|
13
|
+
function SheetRoot({ side = 'right', modal = true, ...props }) {
|
|
14
|
+
return (_jsx(SheetSide.Provider, { value: { side, modal }, children: _jsx(BaseDialog.Root, { ...props, modal: modal }) }));
|
|
15
|
+
}
|
|
16
|
+
const SheetContent = /* @__PURE__ */ React.forwardRef(function SheetContent({ size, flush, closeLabel = 'Close panel', className, children, ...props }, ref) {
|
|
17
|
+
const scheme = useComponentSize(size);
|
|
18
|
+
const { side, modal } = React.useContext(SheetSide);
|
|
19
|
+
return (_jsx(BaseDialog.Portal, { children: _jsxs("div", { className: 'pui-panel-layer', "data-ui-size": scheme, children: [modal === true && (_jsx(BaseDialog.Backdrop, { className: 'pui-panel-backdrop' })), _jsx("div", { className: 'pui-panel-viewport', "data-side": side, "data-flush": flush || undefined, children: _jsxs(BaseDialog.Popup, { ...props, ref: ref, className: skin('pui-panel', className), "data-side": side, "data-size": normalizeSize(size) ?? 'default', "data-flush": flush || undefined, children: [_jsx(BaseDialog.Close, { className: 'pui-panel-close pui-icon-button', "aria-label": closeLabel, children: _jsx(Icon, { name: 'close' }) }), children] }) })] }) }));
|
|
20
|
+
});
|
|
21
|
+
function SheetTitle({ className, ...props }) {
|
|
22
|
+
return (_jsx(BaseDialog.Title, { ...props, className: skin('pui-panel-title', className) }));
|
|
23
|
+
}
|
|
24
|
+
function SheetDescription({ className, ...props }) {
|
|
25
|
+
return (_jsx(BaseDialog.Description, { ...props, className: skin('pui-panel-description', className) }));
|
|
26
|
+
}
|
|
27
|
+
export const Sheet = {
|
|
28
|
+
...BaseDialog,
|
|
29
|
+
Root: SheetRoot,
|
|
30
|
+
Content: SheetContent,
|
|
31
|
+
Header,
|
|
32
|
+
Body,
|
|
33
|
+
Footer,
|
|
34
|
+
Title: SheetTitle,
|
|
35
|
+
Description: SheetDescription,
|
|
36
|
+
};
|
|
37
|
+
// Flat names for React Server Components, which cannot dot into client exports.
|
|
38
|
+
export { SheetDescription, SheetRoot, SheetTitle, SheetContent };
|
|
39
|
+
export const { Backdrop: SheetBackdrop, Close: SheetClose, Handle: SheetHandle, Popup: SheetPopup, Portal: SheetPortal, Trigger: SheetTrigger, Viewport: SheetViewport, Header: SheetHeader, Body: SheetBody, Footer: SheetFooter, } = Sheet;
|
package/dist/sizing.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
3
|
import * as React from 'react';
|
|
4
|
-
export const ComponentSizeContext = React.createContext(undefined);
|
|
4
|
+
export const ComponentSizeContext = /* @__PURE__ */ React.createContext(undefined);
|
|
5
5
|
export function normalizeSize(size) {
|
|
6
6
|
return size === 'sm'
|
|
7
7
|
? 'small'
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
export type SkeletonProps = Omit<React.ComponentPropsWithoutRef<'span'>, 'children'> & {
|
|
3
|
+
shape?: 'text' | 'block' | 'circle';
|
|
4
|
+
};
|
|
5
|
+
/** Decorative placeholder; the owning region provides aria-busy and loading text. */
|
|
6
|
+
export declare const Skeleton: React.ForwardRefExoticComponent<Omit<Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, "ref">, "children"> & {
|
|
7
|
+
shape?: "text" | "block" | "circle";
|
|
8
|
+
} & React.RefAttributes<HTMLSpanElement>>;
|
package/dist/skeleton.js
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import * as React from 'react';
|
|
4
|
+
import { cx } from './parts.js';
|
|
5
|
+
/** Decorative placeholder; the owning region provides aria-busy and loading text. */
|
|
6
|
+
export const Skeleton = /* @__PURE__ */ React.forwardRef(function Skeleton({ shape = 'text', className, ...props }, ref) {
|
|
7
|
+
return (_jsx("span", { ...props, ref: ref, className: cx('pui-skeleton', className), "data-shape": shape, "aria-hidden": 'true' }));
|
|
8
|
+
});
|