@surflane/ui 0.4.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 +1 -1
- package/dist/{disclosure.d.ts → accordion.d.ts} +1 -17
- package/dist/{disclosure.js → accordion.js} +3 -17
- package/dist/alert-dialog.d.ts +31 -0
- package/dist/alert-dialog.js +22 -0
- package/dist/app-shell.js +9 -9
- package/dist/{input-extensions.d.ts → autocomplete.d.ts} +4 -42
- package/dist/{input-extensions.js → autocomplete.js} +7 -26
- package/dist/avatar.js +3 -5
- package/dist/badge.d.ts +20 -0
- package/dist/badge.js +16 -0
- package/dist/{navigation.d.ts → breadcrumbs.d.ts} +2 -6
- package/dist/breadcrumbs.js +31 -0
- package/dist/button.d.ts +11 -0
- package/dist/button.js +27 -4
- 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 +24 -6
- 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} +5 -30
- 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/{advanced-forms.js → combobox.js} +13 -49
- package/dist/{context-overlays.d.ts → context-menu.d.ts} +6 -28
- package/dist/{context-overlays.js → context-menu.js} +5 -25
- package/dist/date-picker.js +3 -2
- package/dist/dialog.d.ts +6 -24
- package/dist/dialog.js +7 -20
- 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 +7 -5
- package/dist/filter-bar.js +1 -1
- package/dist/form.d.ts +2 -0
- package/dist/form.js +7 -0
- package/dist/icon.d.ts +10 -0
- package/dist/icon.js +18 -3
- package/dist/index.d.ts +56 -29
- package/dist/index.js +70 -32
- package/dist/{messages.d.ts → inline-message.d.ts} +0 -28
- package/dist/{messages.js → inline-message.js} +3 -18
- package/dist/input.js +2 -2
- package/dist/{foundations.d.ts → layout.d.ts} +5 -23
- package/dist/{foundations.js → layout.js} +4 -19
- 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 +4 -5
- package/dist/menu.d.ts +7 -5
- package/dist/menu.js +12 -8
- 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 +8 -5
- package/dist/number-field.d.ts +23 -0
- package/dist/number-field.js +33 -0
- package/dist/page-header.d.ts +12 -0
- package/dist/page-header.js +9 -0
- package/dist/pagination.js +3 -4
- package/dist/panel.d.ts +13 -0
- package/dist/panel.js +13 -0
- package/dist/parts.d.ts +19 -1
- package/dist/parts.js +32 -6
- 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 +3 -4
- package/dist/select.d.ts +8 -8
- package/dist/select.js +19 -54
- 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/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-highlighter.js +2 -1
- package/dist/{data.d.ts → table.d.ts} +8 -32
- package/dist/{data.js → table.js} +15 -30
- package/dist/textarea.d.ts +7 -0
- package/dist/textarea.js +12 -0
- package/dist/toast.js +7 -6
- 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 +237 -21
- package/src/styles.css +359 -191
- package/dist/chevron.d.ts +0 -3
- package/dist/chevron.js +0 -6
- package/dist/commands.js +0 -27
- 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/navigation.js +0 -41
- package/dist/panels.js +0 -100
package/dist/menu.d.ts
CHANGED
|
@@ -6,10 +6,13 @@ declare const MenuPopup: React.ForwardRefExoticComponent<Omit<Omit<Omit<import("
|
|
|
6
6
|
declare const MenuPositioner: React.ForwardRefExoticComponent<Omit<Omit<Omit<import("@base-ui/react/menu").MenuPositionerProps, "ref"> & React.RefAttributes<HTMLDivElement>, "ref">, "size"> & {
|
|
7
7
|
size?: import("./sizing.js").ComponentSize;
|
|
8
8
|
} & React.RefAttributes<HTMLDivElement>>;
|
|
9
|
-
declare const MenuContent: React.ForwardRefExoticComponent<Omit<Omit<import("@base-ui/react/menu").MenuPopupProps, "ref"> & React.RefAttributes<HTMLDivElement>, "ref"> & Pick<Omit<Omit<import("@base-ui/react/menu").MenuPositionerProps, "ref"> & React.RefAttributes<HTMLDivElement>, "ref">, "
|
|
9
|
+
declare const MenuContent: React.ForwardRefExoticComponent<Omit<Omit<import("@base-ui/react/menu").MenuPopupProps, "ref"> & React.RefAttributes<HTMLDivElement>, "ref"> & Pick<Omit<Omit<import("@base-ui/react/menu").MenuPositionerProps, "ref"> & React.RefAttributes<HTMLDivElement>, "ref">, "side" | "align" | "sideOffset" | "collisionPadding"> & React.RefAttributes<HTMLDivElement>>;
|
|
10
10
|
declare const MenuTrigger: React.ForwardRefExoticComponent<Omit<import("@base-ui/react/menu").MenuTriggerProps<unknown> & React.RefAttributes<HTMLElement>, "ref"> & React.RefAttributes<HTMLButtonElement>>;
|
|
11
|
+
/** Content brings its own portal; Portal stays for wrapping it, or raw parts. */
|
|
12
|
+
declare const MenuPortal: React.ForwardRefExoticComponent<Omit<import("@base-ui/react/menu").MenuPortalProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
11
13
|
export declare const Menu: {
|
|
12
|
-
|
|
14
|
+
Portal: React.ForwardRefExoticComponent<Omit<import("@base-ui/react/menu").MenuPortalProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
15
|
+
Content: React.ForwardRefExoticComponent<Omit<Omit<import("@base-ui/react/menu").MenuPopupProps, "ref"> & React.RefAttributes<HTMLDivElement>, "ref"> & Pick<Omit<Omit<import("@base-ui/react/menu").MenuPositionerProps, "ref"> & React.RefAttributes<HTMLDivElement>, "ref">, "side" | "align" | "sideOffset" | "collisionPadding"> & React.RefAttributes<HTMLDivElement>>;
|
|
13
16
|
Popup: React.ForwardRefExoticComponent<Omit<Omit<Omit<import("@base-ui/react/menu").MenuPopupProps, "ref"> & React.RefAttributes<HTMLDivElement>, "ref">, "size"> & {
|
|
14
17
|
size?: import("./sizing.js").ComponentSize;
|
|
15
18
|
} & React.RefAttributes<HTMLDivElement>>;
|
|
@@ -46,7 +49,6 @@ export declare const Menu: {
|
|
|
46
49
|
Arrow: React.ForwardRefExoticComponent<Omit<import("@base-ui/react/menu").MenuArrowProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
47
50
|
Backdrop: React.ForwardRefExoticComponent<Omit<import("@base-ui/react/menu").MenuBackdropProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
48
51
|
Group: React.ForwardRefExoticComponent<Omit<import("@base-ui/react/menu").MenuGroupProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
49
|
-
Portal: React.ForwardRefExoticComponent<Omit<import("@base-ui/react/menu").MenuPortalProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
50
52
|
RadioGroup: React.NamedExoticComponent<Omit<import("@base-ui/react/menu").MenuRadioGroupProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
51
53
|
Root: typeof BaseMenu.Root;
|
|
52
54
|
SubmenuRoot: typeof BaseMenu.SubmenuRoot;
|
|
@@ -59,7 +61,7 @@ export declare const Menu: {
|
|
|
59
61
|
Empty: React.ForwardRefExoticComponent<Omit<import("@base-ui/react/menu").MenuEmptyProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
60
62
|
useFilter: typeof BaseMenu.useFilter;
|
|
61
63
|
};
|
|
62
|
-
export { MenuPopup, MenuPositioner, MenuTrigger, MenuContent };
|
|
64
|
+
export { MenuPopup, MenuPositioner, MenuTrigger, MenuContent, MenuPortal };
|
|
63
65
|
export declare const MenuArrow: React.ForwardRefExoticComponent<Omit<import("@base-ui/react/menu").MenuArrowProps, "ref"> & React.RefAttributes<HTMLDivElement>>, MenuBackdrop: React.ForwardRefExoticComponent<Omit<import("@base-ui/react/menu").MenuBackdropProps, "ref"> & React.RefAttributes<HTMLDivElement>>, MenuCheckboxItem: React.ForwardRefExoticComponent<Omit<Omit<Omit<import("@base-ui/react/menu").MenuCheckboxItemProps, "ref"> & React.RefAttributes<HTMLElement>, "ref">, "size"> & {
|
|
64
66
|
size?: import("./sizing.js").ComponentSize;
|
|
65
67
|
} & React.RefAttributes<HTMLDivElement>>, MenuCheckboxItemIndicator: React.ForwardRefExoticComponent<Omit<Omit<import("@base-ui/react/menu").MenuCheckboxItemIndicatorProps, "ref"> & React.RefAttributes<HTMLSpanElement>, "ref"> & React.RefAttributes<HTMLSpanElement>>, MenuClear: React.ForwardRefExoticComponent<Omit<import("@base-ui/react/menu").MenuClearProps, "ref"> & React.RefAttributes<HTMLButtonElement>>, MenuEmpty: React.ForwardRefExoticComponent<Omit<import("@base-ui/react/menu").MenuEmptyProps, "ref"> & React.RefAttributes<HTMLDivElement>>, MenuFilterProvider: typeof BaseMenu.FilterProvider, MenuGroup: React.ForwardRefExoticComponent<Omit<import("@base-ui/react/menu").MenuGroupProps, "ref"> & React.RefAttributes<HTMLDivElement>>, MenuGroupLabel: React.ForwardRefExoticComponent<Omit<Omit<Omit<import("@base-ui/react/menu").MenuGroupLabelProps, "ref"> & React.RefAttributes<HTMLDivElement>, "ref">, "size"> & {
|
|
@@ -70,7 +72,7 @@ export declare const MenuArrow: React.ForwardRefExoticComponent<Omit<import("@ba
|
|
|
70
72
|
size?: import("./sizing.js").ComponentSize;
|
|
71
73
|
} & React.RefAttributes<HTMLDivElement>>, MenuLinkItem: React.ForwardRefExoticComponent<Omit<Omit<Omit<import("@base-ui/react/menu").MenuLinkItemProps, "ref"> & React.RefAttributes<Element>, "ref">, "size"> & {
|
|
72
74
|
size?: import("./sizing.js").ComponentSize;
|
|
73
|
-
} & React.RefAttributes<HTMLAnchorElement>>, MenuList: React.ForwardRefExoticComponent<Omit<import("@base-ui/react/menu").MenuListProps, "ref"> & React.RefAttributes<HTMLDivElement>>,
|
|
75
|
+
} & React.RefAttributes<HTMLAnchorElement>>, MenuList: React.ForwardRefExoticComponent<Omit<import("@base-ui/react/menu").MenuListProps, "ref"> & React.RefAttributes<HTMLDivElement>>, MenuRadioGroup: React.NamedExoticComponent<Omit<import("@base-ui/react/menu").MenuRadioGroupProps, "ref"> & React.RefAttributes<HTMLDivElement>>, MenuRadioItem: React.ForwardRefExoticComponent<Omit<Omit<Omit<import("@base-ui/react/menu").MenuRadioItemProps, "ref"> & React.RefAttributes<HTMLElement>, "ref">, "size"> & {
|
|
74
76
|
size?: import("./sizing.js").ComponentSize;
|
|
75
77
|
} & React.RefAttributes<HTMLDivElement>>, MenuRadioItemIndicator: React.ForwardRefExoticComponent<Omit<Omit<import("@base-ui/react/menu").MenuRadioItemIndicatorProps, "ref"> & React.RefAttributes<HTMLSpanElement>, "ref"> & React.RefAttributes<HTMLSpanElement>>, MenuRoot: typeof BaseMenu.Root, MenuSeparator: React.ForwardRefExoticComponent<Omit<Omit<Omit<import("@base-ui/react").SeparatorProps, "ref"> & React.RefAttributes<HTMLDivElement>, "ref">, "size"> & {
|
|
76
78
|
size?: import("./sizing.js").ComponentSize;
|
package/dist/menu.js
CHANGED
|
@@ -1,18 +1,19 @@
|
|
|
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 { Menu as BaseMenu } from '@base-ui/react/menu';
|
|
5
|
-
import {
|
|
6
|
-
const MenuPopup = /* @__PURE__ */ part(BaseMenu.Popup, 'pui-menu');
|
|
7
|
-
const MenuPositioner = /* @__PURE__ */ part(BaseMenu.Positioner, 'pui-positioner');
|
|
6
|
+
import { OwnPortal, part, scopedPortal, skin } from './parts.js';
|
|
7
|
+
const MenuPopup = /* @__PURE__ */ part(BaseMenu.Popup, 'pui-menu', { portal: true });
|
|
8
|
+
const MenuPositioner = /* @__PURE__ */ part(BaseMenu.Positioner, 'pui-positioner', { portal: true });
|
|
8
9
|
const MenuContent = /* @__PURE__ */ React.forwardRef(function MenuContent({ align = 'end', sideOffset = 6, side, collisionPadding, className, ...props }, ref) {
|
|
9
|
-
return (_jsx(MenuPositioner, { align: align, side: side, sideOffset: sideOffset, collisionPadding: collisionPadding, children: _jsx(MenuPopup, { ...props, ref: ref, className: className }) }));
|
|
10
|
+
return (_jsx(OwnPortal, { portal: BaseMenu.Portal, children: _jsx(MenuPositioner, { align: align, side: side, sideOffset: sideOffset, collisionPadding: collisionPadding, children: _jsx(MenuPopup, { ...props, ref: ref, className: className }) }) }));
|
|
10
11
|
});
|
|
11
12
|
const MenuTrigger = /* @__PURE__ */ React.forwardRef(function MenuTrigger({ className, ...props }, ref) {
|
|
12
13
|
return (_jsx(BaseMenu.Trigger, { "data-variant": 'ghost', ...props, ref: ref, className: skin('pui-button pui-menu-trigger', className) }));
|
|
13
14
|
});
|
|
14
15
|
const CheckboxIndicator = /* @__PURE__ */ React.forwardRef(function CheckboxIndicator({ className, children, ...props }, ref) {
|
|
15
|
-
return (_jsx(BaseMenu.CheckboxItemIndicator, { keepMounted: true, ...props, ref: ref, className: skin('pui-menu-indicator', className), children: children ??
|
|
16
|
+
return (_jsx(BaseMenu.CheckboxItemIndicator, { keepMounted: true, ...props, ref: ref, className: skin('pui-menu-indicator', className), children: children ?? _jsx(Icon, { name: 'check' }) }));
|
|
16
17
|
});
|
|
17
18
|
const RadioIndicator = /* @__PURE__ */ React.forwardRef(function RadioIndicator({ className, children, ...props }, ref) {
|
|
18
19
|
return (_jsx(BaseMenu.RadioItemIndicator, { keepMounted: true, ...props, ref: ref, className: skin('pui-menu-indicator', className), children: children ?? (_jsx("svg", { width: '16', height: '16', viewBox: '0 0 24 24', fill: 'currentColor', "aria-hidden": 'true', children: _jsx("circle", { cx: '12', cy: '12', r: '4' }) })) }));
|
|
@@ -20,10 +21,13 @@ const RadioIndicator = /* @__PURE__ */ React.forwardRef(function RadioIndicator(
|
|
|
20
21
|
const SubmenuTrigger = /* @__PURE__ */ React.forwardRef(function SubmenuTrigger({ className, children, indicator, ...props }, ref) {
|
|
21
22
|
return (_jsxs(BaseMenu.SubmenuTrigger, { ...props, ref: ref, className: skin('pui-menu-item pui-menu-submenu-trigger', className), children: [children, indicator === false
|
|
22
23
|
? null
|
|
23
|
-
: (indicator ?? (_jsx(
|
|
24
|
+
: (indicator ?? (_jsx(Icon, { name: 'chevron-forward', className: 'pui-submenu-arrow' })))] }));
|
|
24
25
|
});
|
|
26
|
+
/** Content brings its own portal; Portal stays for wrapping it, or raw parts. */
|
|
27
|
+
const MenuPortal = /* @__PURE__ */ scopedPortal(BaseMenu.Portal);
|
|
25
28
|
export const Menu = {
|
|
26
29
|
...BaseMenu,
|
|
30
|
+
Portal: MenuPortal,
|
|
27
31
|
Content: MenuContent,
|
|
28
32
|
Popup: MenuPopup,
|
|
29
33
|
Positioner: MenuPositioner,
|
|
@@ -40,5 +44,5 @@ export const Menu = {
|
|
|
40
44
|
Input: /* @__PURE__ */ part(BaseMenu.Input, 'pui-input'),
|
|
41
45
|
};
|
|
42
46
|
// Flat names for React Server Components, which cannot dot into client exports.
|
|
43
|
-
export { MenuPopup, MenuPositioner, MenuTrigger, MenuContent };
|
|
44
|
-
export const { Arrow: MenuArrow, Backdrop: MenuBackdrop, CheckboxItem: MenuCheckboxItem, CheckboxItemIndicator: MenuCheckboxItemIndicator, Clear: MenuClear, Empty: MenuEmpty, FilterProvider: MenuFilterProvider, Group: MenuGroup, GroupLabel: MenuGroupLabel, Handle: MenuHandle, Input: MenuInput, Item: MenuItem, LinkItem: MenuLinkItem, List: MenuList,
|
|
47
|
+
export { MenuPopup, MenuPositioner, MenuTrigger, MenuContent, MenuPortal };
|
|
48
|
+
export const { Arrow: MenuArrow, Backdrop: MenuBackdrop, CheckboxItem: MenuCheckboxItem, CheckboxItemIndicator: MenuCheckboxItemIndicator, Clear: MenuClear, Empty: MenuEmpty, FilterProvider: MenuFilterProvider, Group: MenuGroup, GroupLabel: MenuGroupLabel, Handle: MenuHandle, Input: MenuInput, Item: MenuItem, LinkItem: MenuLinkItem, List: MenuList, RadioGroup: MenuRadioGroup, RadioItem: MenuRadioItem, RadioItemIndicator: MenuRadioItemIndicator, Root: MenuRoot, Separator: MenuSeparator, SubmenuRoot: MenuSubmenuRoot, SubmenuTrigger: MenuSubmenuTrigger, Viewport: MenuViewport, } = Menu;
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
export declare const Menubar: React.ForwardRefExoticComponent<Omit<Omit<Omit<import("@base-ui/react/menubar").MenubarProps, "ref"> & React.RefAttributes<HTMLDivElement>, "ref">, "size"> & {
|
|
3
|
+
size?: import("./sizing.js").ComponentSize;
|
|
4
|
+
} & React.RefAttributes<HTMLDivElement>>;
|
package/dist/menubar.js
ADDED
package/dist/meter.d.ts
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
export declare const Meter: {
|
|
3
|
+
Root: React.ForwardRefExoticComponent<Omit<Omit<Omit<import("@base-ui/react/meter").MeterRootProps, "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/meter").MeterLabelProps, "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/meter").MeterValueProps, "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/meter").MeterTrackProps, "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/meter").MeterIndicatorProps, "ref"> & React.RefAttributes<HTMLDivElement>, "ref">, "size"> & {
|
|
16
|
+
size?: import("./sizing.js").ComponentSize;
|
|
17
|
+
} & React.RefAttributes<HTMLDivElement>>;
|
|
18
|
+
};
|
|
19
|
+
export declare const MeterIndicator: React.ForwardRefExoticComponent<Omit<Omit<Omit<import("@base-ui/react/meter").MeterIndicatorProps, "ref"> & React.RefAttributes<HTMLDivElement>, "ref">, "size"> & {
|
|
20
|
+
size?: import("./sizing.js").ComponentSize;
|
|
21
|
+
} & React.RefAttributes<HTMLDivElement>>, MeterLabel: React.ForwardRefExoticComponent<Omit<Omit<Omit<import("@base-ui/react/meter").MeterLabelProps, "ref"> & React.RefAttributes<HTMLSpanElement>, "ref">, "size"> & {
|
|
22
|
+
size?: import("./sizing.js").ComponentSize;
|
|
23
|
+
} & React.RefAttributes<HTMLSpanElement>>, MeterRoot: React.ForwardRefExoticComponent<Omit<Omit<Omit<import("@base-ui/react/meter").MeterRootProps, "ref"> & React.RefAttributes<HTMLDivElement>, "ref">, "size"> & {
|
|
24
|
+
size?: import("./sizing.js").ComponentSize;
|
|
25
|
+
} & React.RefAttributes<HTMLDivElement>>, MeterTrack: React.ForwardRefExoticComponent<Omit<Omit<Omit<import("@base-ui/react/meter").MeterTrackProps, "ref"> & React.RefAttributes<HTMLDivElement>, "ref">, "size"> & {
|
|
26
|
+
size?: import("./sizing.js").ComponentSize;
|
|
27
|
+
} & React.RefAttributes<HTMLDivElement>>, MeterValue: React.ForwardRefExoticComponent<Omit<Omit<Omit<import("@base-ui/react/meter").MeterValueProps, "ref"> & React.RefAttributes<HTMLSpanElement>, "ref">, "size"> & {
|
|
28
|
+
size?: import("./sizing.js").ComponentSize;
|
|
29
|
+
} & React.RefAttributes<HTMLSpanElement>>;
|
package/dist/meter.js
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { Meter as BaseMeter } from '@base-ui/react/meter';
|
|
3
|
+
import { part } from './parts.js';
|
|
4
|
+
export const Meter = {
|
|
5
|
+
...BaseMeter,
|
|
6
|
+
Root: /* @__PURE__ */ part(BaseMeter.Root, 'pui-gauge pui-meter'),
|
|
7
|
+
Label: /* @__PURE__ */ part(BaseMeter.Label, 'pui-gauge-label'),
|
|
8
|
+
Value: /* @__PURE__ */ part(BaseMeter.Value, 'pui-gauge-value'),
|
|
9
|
+
Track: /* @__PURE__ */ part(BaseMeter.Track, 'pui-gauge-track'),
|
|
10
|
+
Indicator: /* @__PURE__ */ part(BaseMeter.Indicator, 'pui-gauge-indicator'),
|
|
11
|
+
};
|
|
12
|
+
// Flat names for React Server Components, which cannot dot into client exports.
|
|
13
|
+
export const { Indicator: MeterIndicator, Label: MeterLabel, Root: MeterRoot, Track: MeterTrack, Value: MeterValue, } = Meter;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { type ComponentSizeAlias } from './sizing.js';
|
|
3
|
+
/** Transitional HTML-option adapter. Submitted values use Base UI's native hidden input. */
|
|
4
|
+
export declare const NativeSelect: React.ForwardRefExoticComponent<Omit<Omit<React.DetailedHTMLProps<React.SelectHTMLAttributes<HTMLSelectElement>, HTMLSelectElement>, "ref">, "size" | "multiple"> & {
|
|
5
|
+
size?: ComponentSizeAlias;
|
|
6
|
+
} & React.RefAttributes<HTMLButtonElement>>;
|
|
7
|
+
export declare function NativeSelectOption(props: React.ComponentProps<'option'>): React.JSX.Element;
|
|
8
|
+
export declare function NativeSelectOptGroup(props: React.ComponentProps<'optgroup'>): React.JSX.Element;
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import * as React from 'react';
|
|
4
|
+
import { Select } from './select.js';
|
|
5
|
+
function optionList(children) {
|
|
6
|
+
return React.Children.toArray(children).flatMap((child) => {
|
|
7
|
+
if (!React.isValidElement(child))
|
|
8
|
+
return [];
|
|
9
|
+
const p = child.props;
|
|
10
|
+
if (child.type === React.Fragment)
|
|
11
|
+
return optionList(p.children);
|
|
12
|
+
// An optgroup keeps its label as a visible group heading.
|
|
13
|
+
if (child.type === 'optgroup' || child.type === NativeSelectOptGroup)
|
|
14
|
+
return [
|
|
15
|
+
{
|
|
16
|
+
label: p.label,
|
|
17
|
+
options: optionList(p.children).flatMap((item) => 'options' in item ? item.options : [item]),
|
|
18
|
+
},
|
|
19
|
+
];
|
|
20
|
+
return [
|
|
21
|
+
{
|
|
22
|
+
value: String(p.value ?? p.children ?? ''),
|
|
23
|
+
label: p.label ?? p.children,
|
|
24
|
+
disabled: p.disabled,
|
|
25
|
+
},
|
|
26
|
+
];
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
/** Transitional HTML-option adapter. Submitted values use Base UI's native hidden input. */
|
|
30
|
+
export const NativeSelect = /* @__PURE__ */ React.forwardRef(function NativeSelect({ children, onChange, value, defaultValue, className, size, ...props }, ref) {
|
|
31
|
+
const input = React.useRef(null);
|
|
32
|
+
const options = optionList(children);
|
|
33
|
+
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) => {
|
|
34
|
+
if (!onChange)
|
|
35
|
+
return;
|
|
36
|
+
const target = input.current;
|
|
37
|
+
if (!target)
|
|
38
|
+
return;
|
|
39
|
+
const setter = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value')?.set;
|
|
40
|
+
setter?.call(target, next);
|
|
41
|
+
const event = new Event('change', { bubbles: true });
|
|
42
|
+
Object.defineProperties(event, {
|
|
43
|
+
target: { value: target },
|
|
44
|
+
currentTarget: { value: target },
|
|
45
|
+
});
|
|
46
|
+
onChange(event);
|
|
47
|
+
} }));
|
|
48
|
+
});
|
|
49
|
+
export function NativeSelectOption(props) {
|
|
50
|
+
return _jsx("option", { ...props });
|
|
51
|
+
}
|
|
52
|
+
export function NativeSelectOptGroup(props) {
|
|
53
|
+
return _jsx("optgroup", { ...props });
|
|
54
|
+
}
|
package/dist/navigation-menu.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
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 { NavigationMenu as BaseNavigationMenu } from '@base-ui/react/navigation-menu';
|
|
5
6
|
import { part, skin } from './parts.js';
|
|
6
7
|
function Root(props) {
|
|
@@ -10,7 +11,7 @@ function Root(props) {
|
|
|
10
11
|
const Trigger = /* @__PURE__ */ React.forwardRef(function Trigger({ className, children, indicator, ...props }, ref) {
|
|
11
12
|
return (_jsxs(BaseNavigationMenu.Trigger, { "data-variant": 'ghost', ...props, ref: ref, className: skin('pui-button pui-navigation-trigger', className), children: [children, indicator === false
|
|
12
13
|
? null
|
|
13
|
-
: (indicator ?? (_jsx(BaseNavigationMenu.Icon, { className: 'pui-navigation-icon', children: _jsx(
|
|
14
|
+
: (indicator ?? (_jsx(BaseNavigationMenu.Icon, { className: 'pui-navigation-icon', children: _jsx(Icon, { name: 'chevron-down' }) })))] }));
|
|
14
15
|
});
|
|
15
16
|
export const NavigationMenu = {
|
|
16
17
|
...BaseNavigationMenu,
|
|
@@ -20,11 +21,13 @@ export const NavigationMenu = {
|
|
|
20
21
|
Item: /* @__PURE__ */ part(BaseNavigationMenu.Item, 'pui-navigation-item'),
|
|
21
22
|
Link: /* @__PURE__ */ part(BaseNavigationMenu.Link, 'pui-navigation-link'),
|
|
22
23
|
Content: /* @__PURE__ */ part(BaseNavigationMenu.Content, 'pui-navigation-content'),
|
|
23
|
-
Positioner: /* @__PURE__ */ part(BaseNavigationMenu.Positioner, 'pui-positioner pui-navigation-positioner'
|
|
24
|
-
|
|
24
|
+
Positioner: /* @__PURE__ */ part(BaseNavigationMenu.Positioner, 'pui-positioner pui-navigation-positioner', {
|
|
25
|
+
portal: true,
|
|
26
|
+
}),
|
|
27
|
+
Popup: /* @__PURE__ */ part(BaseNavigationMenu.Popup, 'pui-navigation-popup', { portal: true }),
|
|
25
28
|
Viewport: /* @__PURE__ */ part(BaseNavigationMenu.Viewport, 'pui-navigation-viewport'),
|
|
26
|
-
Icon: /* @__PURE__ */ React.forwardRef(function
|
|
27
|
-
return (_jsx(BaseNavigationMenu.Icon, { ...props, ref: ref, className: skin('pui-navigation-icon', className), children: children ??
|
|
29
|
+
Icon: /* @__PURE__ */ React.forwardRef(function NavigationMenuIcon({ children, className, ...props }, ref) {
|
|
30
|
+
return (_jsx(BaseNavigationMenu.Icon, { ...props, ref: ref, className: skin('pui-navigation-icon', className), children: children ?? _jsx(Icon, { name: 'chevron-down' }) }));
|
|
28
31
|
}),
|
|
29
32
|
};
|
|
30
33
|
// Flat names for React Server Components, which cannot dot into client exports.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
export declare const NumberField: {
|
|
3
|
+
Root: React.ForwardRefExoticComponent<Omit<Omit<import("@base-ui/react/number-field").NumberFieldRootProps, "ref"> & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
4
|
+
Increment: React.ForwardRefExoticComponent<Omit<Omit<import("@base-ui/react/number-field").NumberFieldIncrementProps, "ref"> & React.RefAttributes<HTMLButtonElement>, "ref"> & React.RefAttributes<HTMLButtonElement>>;
|
|
5
|
+
Decrement: React.ForwardRefExoticComponent<Omit<Omit<import("@base-ui/react/number-field").NumberFieldDecrementProps, "ref"> & React.RefAttributes<HTMLButtonElement>, "ref"> & React.RefAttributes<HTMLButtonElement>>;
|
|
6
|
+
Group: React.ForwardRefExoticComponent<Omit<Omit<Omit<import("@base-ui/react/number-field").NumberFieldGroupProps, "ref"> & React.RefAttributes<HTMLDivElement>, "ref">, "size"> & {
|
|
7
|
+
size?: import("./sizing.js").ComponentSize;
|
|
8
|
+
} & React.RefAttributes<HTMLDivElement>>;
|
|
9
|
+
Input: React.ForwardRefExoticComponent<Omit<Omit<Omit<import("@base-ui/react/number-field").NumberFieldInputProps, "ref"> & React.RefAttributes<HTMLInputElement>, "ref">, "size"> & {
|
|
10
|
+
size?: import("./sizing.js").ComponentSize;
|
|
11
|
+
} & React.RefAttributes<HTMLInputElement>>;
|
|
12
|
+
ScrubArea: React.ForwardRefExoticComponent<Omit<Omit<Omit<import("@base-ui/react/number-field").NumberFieldScrubAreaProps, "ref"> & React.RefAttributes<HTMLSpanElement>, "ref">, "size"> & {
|
|
13
|
+
size?: import("./sizing.js").ComponentSize;
|
|
14
|
+
} & React.RefAttributes<HTMLSpanElement>>;
|
|
15
|
+
ScrubAreaCursor: React.ForwardRefExoticComponent<Omit<import("@base-ui/react/number-field").NumberFieldScrubAreaCursorProps, "ref"> & React.RefAttributes<HTMLSpanElement>>;
|
|
16
|
+
};
|
|
17
|
+
export declare const NumberFieldDecrement: React.ForwardRefExoticComponent<Omit<Omit<import("@base-ui/react/number-field").NumberFieldDecrementProps, "ref"> & React.RefAttributes<HTMLButtonElement>, "ref"> & React.RefAttributes<HTMLButtonElement>>, NumberFieldGroup: React.ForwardRefExoticComponent<Omit<Omit<Omit<import("@base-ui/react/number-field").NumberFieldGroupProps, "ref"> & React.RefAttributes<HTMLDivElement>, "ref">, "size"> & {
|
|
18
|
+
size?: import("./sizing.js").ComponentSize;
|
|
19
|
+
} & React.RefAttributes<HTMLDivElement>>, NumberFieldIncrement: React.ForwardRefExoticComponent<Omit<Omit<import("@base-ui/react/number-field").NumberFieldIncrementProps, "ref"> & React.RefAttributes<HTMLButtonElement>, "ref"> & React.RefAttributes<HTMLButtonElement>>, NumberFieldInput: React.ForwardRefExoticComponent<Omit<Omit<Omit<import("@base-ui/react/number-field").NumberFieldInputProps, "ref"> & React.RefAttributes<HTMLInputElement>, "ref">, "size"> & {
|
|
20
|
+
size?: import("./sizing.js").ComponentSize;
|
|
21
|
+
} & React.RefAttributes<HTMLInputElement>>, NumberFieldRoot: React.ForwardRefExoticComponent<Omit<Omit<import("@base-ui/react/number-field").NumberFieldRootProps, "ref"> & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>, NumberFieldScrubArea: React.ForwardRefExoticComponent<Omit<Omit<Omit<import("@base-ui/react/number-field").NumberFieldScrubAreaProps, "ref"> & React.RefAttributes<HTMLSpanElement>, "ref">, "size"> & {
|
|
22
|
+
size?: import("./sizing.js").ComponentSize;
|
|
23
|
+
} & React.RefAttributes<HTMLSpanElement>>, NumberFieldScrubAreaCursor: React.ForwardRefExoticComponent<Omit<import("@base-ui/react/number-field").NumberFieldScrubAreaCursorProps, "ref"> & React.RefAttributes<HTMLSpanElement>>;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import * as React from 'react';
|
|
4
|
+
import { Icon } from './icon.js';
|
|
5
|
+
import { NumberField as BaseNumberField } from '@base-ui/react/number-field';
|
|
6
|
+
import { part, skin } from './parts.js';
|
|
7
|
+
import { useRootRef, useResetValue } from './form-state.js';
|
|
8
|
+
const NumberRoot = /* @__PURE__ */ React.forwardRef(function NumberRoot({ value, defaultValue, onValueChange, className, form, ...props }, ref) {
|
|
9
|
+
const [element, attach] = useRootRef(ref);
|
|
10
|
+
const [numeric, setNumeric] = useResetValue(value, defaultValue ?? null, element, form);
|
|
11
|
+
return (_jsx(BaseNumberField.Root, { ...props, form: form, ref: attach, value: numeric, className: skin('pui-number-field', className), onValueChange: (next, event) => {
|
|
12
|
+
onValueChange?.(next, event);
|
|
13
|
+
if (value === undefined && !event.isCanceled)
|
|
14
|
+
setNumeric(next);
|
|
15
|
+
} }));
|
|
16
|
+
});
|
|
17
|
+
const NumberIncrement = /* @__PURE__ */ React.forwardRef(function NumberIncrement({ className, children, ...props }, ref) {
|
|
18
|
+
return (_jsx(BaseNumberField.Increment, { "aria-label": 'Increase value', ...props, ref: ref, className: skin('pui-number-step', className), children: children ?? _jsx(Icon, { name: 'plus' }) }));
|
|
19
|
+
});
|
|
20
|
+
const NumberDecrement = /* @__PURE__ */ React.forwardRef(function NumberDecrement({ className, children, ...props }, ref) {
|
|
21
|
+
return (_jsx(BaseNumberField.Decrement, { "aria-label": 'Decrease value', ...props, ref: ref, className: skin('pui-number-step', className), children: children ?? _jsx(Icon, { name: 'minus' }) }));
|
|
22
|
+
});
|
|
23
|
+
export const NumberField = {
|
|
24
|
+
...BaseNumberField,
|
|
25
|
+
Root: NumberRoot,
|
|
26
|
+
Increment: NumberIncrement,
|
|
27
|
+
Decrement: NumberDecrement,
|
|
28
|
+
Group: /* @__PURE__ */ part(BaseNumberField.Group, 'pui-number-group'),
|
|
29
|
+
Input: /* @__PURE__ */ part(BaseNumberField.Input, 'pui-number-input'),
|
|
30
|
+
ScrubArea: /* @__PURE__ */ part(BaseNumberField.ScrubArea, 'pui-number-scrub'),
|
|
31
|
+
};
|
|
32
|
+
// Flat names for React Server Components, which cannot dot into client exports.
|
|
33
|
+
export const { Decrement: NumberFieldDecrement, Group: NumberFieldGroup, Increment: NumberFieldIncrement, Input: NumberFieldInput, Root: NumberFieldRoot, ScrubArea: NumberFieldScrubArea, ScrubAreaCursor: NumberFieldScrubAreaCursor, } = NumberField;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
export declare function PageHeader({ as: Root, headingProps, actionsLabel, title, description, breadcrumb, actions, level, size, className, ...props }: Omit<React.ComponentProps<'div'>, 'title'> & {
|
|
3
|
+
as?: 'div' | 'header';
|
|
4
|
+
headingProps?: Omit<React.HTMLAttributes<HTMLHeadingElement>, 'children' | 'dangerouslySetInnerHTML'>;
|
|
5
|
+
actionsLabel?: string;
|
|
6
|
+
title: React.ReactNode;
|
|
7
|
+
description?: React.ReactNode;
|
|
8
|
+
breadcrumb?: React.ReactNode;
|
|
9
|
+
actions?: React.ReactNode;
|
|
10
|
+
level?: 1 | 2 | 3 | 4 | 5 | 6;
|
|
11
|
+
size?: 'title' | 'page' | 'workspace' | 'document';
|
|
12
|
+
}): React.JSX.Element;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { cx } from './parts.js';
|
|
4
|
+
import { Heading, Text } from './typography.js';
|
|
5
|
+
export function PageHeader({ as: Root = 'div', headingProps, actionsLabel, title, description, breadcrumb, actions, level = 1, size = 'title', className, ...props }) {
|
|
6
|
+
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 &&
|
|
7
|
+
description !== false &&
|
|
8
|
+
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 }))] })] }));
|
|
9
|
+
}
|
package/dist/pagination.js
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
3
|
import * as React from 'react';
|
|
4
|
+
import { Icon } from './icon.js';
|
|
4
5
|
import { Button } from './button.js';
|
|
5
|
-
|
|
6
|
-
return (_jsx("svg", { className: 'pui-pagination-arrow', width: '16', height: '16', viewBox: '0 0 24 24', fill: 'none', stroke: 'currentColor', strokeWidth: '1.6', "aria-hidden": 'true', children: _jsx("path", { d: next ? 'm9 6 6 6-6 6' : 'm15 6-6 6 6 6' }) }));
|
|
7
|
-
}
|
|
6
|
+
import { cx } from './parts.js';
|
|
8
7
|
export const Pagination = /* @__PURE__ */ React.forwardRef(function Pagination({ page, pageCount, siblings = 1, disabled = false, labels, getPageHref, onPageChange, className, 'aria-label': ariaLabel = 'Pagination', ...props }, ref) {
|
|
9
8
|
const count = Number.isFinite(pageCount)
|
|
10
9
|
? Math.min(Number.MAX_SAFE_INTEGER, Math.max(0, Math.floor(pageCount)))
|
|
@@ -40,5 +39,5 @@ export const Pagination = /* @__PURE__ */ React.forwardRef(function Pagination({
|
|
|
40
39
|
onPageChange?.(target);
|
|
41
40
|
}, children: children }));
|
|
42
41
|
}
|
|
43
|
-
return (_jsxs("nav", { ...props, ref: ref, "aria-label": ariaLabel, className:
|
|
42
|
+
return (_jsxs("nav", { ...props, ref: ref, "aria-label": ariaLabel, className: cx('pui-pagination', className), children: [control(Math.max(1, current - 1), labels?.previous ?? 'Previous page', _jsxs(_Fragment, { children: [_jsx(Icon, { name: 'chevron-back', className: 'pui-pagination-arrow' }), _jsx("span", { children: labels?.previous ?? 'Previous page' })] }), current === 1), _jsx("span", { className: 'pui-pagination-summary', children: labels?.summary?.(current, count) ?? `Page ${current} of ${count}` }), _jsx("ul", { role: 'list', className: 'pui-pagination-list', children: items.map((item) => (_jsx("li", { children: typeof item === 'number' ? (control(item, labels?.page?.(item) ?? `Page ${item}`, item)) : (_jsxs("span", { className: 'pui-pagination-gap', children: [_jsx(Icon, { name: 'more' }), _jsx("span", { className: 'pui-feedback-sr', children: labels?.more ?? 'More pages' })] })) }, item))) }), control(Math.min(count, current + 1), labels?.next ?? 'Next page', _jsxs(_Fragment, { children: [_jsx("span", { children: labels?.next ?? 'Next page' }), _jsx(Icon, { name: 'chevron-forward', className: 'pui-pagination-arrow' })] }), current === count)] }));
|
|
44
43
|
});
|
package/dist/panel.d.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { type ComponentSizeAlias } from './sizing.js';
|
|
3
|
+
export type PanelSide = 'left' | 'right' | 'top' | 'bottom';
|
|
4
|
+
export type PanelOptions = {
|
|
5
|
+
size?: ComponentSizeAlias;
|
|
6
|
+
closeLabel?: string;
|
|
7
|
+
/** Attaches the panel to its edge: no gap, and square corners on that edge, as a
|
|
8
|
+
* mobile bottom sheet sits. */
|
|
9
|
+
flush?: boolean;
|
|
10
|
+
};
|
|
11
|
+
export declare function Header({ className, ...props }: React.ComponentProps<'div'>): React.JSX.Element;
|
|
12
|
+
export declare const Body: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
13
|
+
export declare function Footer({ className, ...props }: React.ComponentProps<'div'>): React.JSX.Element;
|
package/dist/panel.js
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
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
|
+
export function Header({ className, ...props }) {
|
|
6
|
+
return _jsx("div", { ...props, className: cx('pui-panel-header', className) });
|
|
7
|
+
}
|
|
8
|
+
export const Body = /* @__PURE__ */ React.forwardRef(function Body({ className, ...props }, ref) {
|
|
9
|
+
return (_jsx("div", { ...props, ref: ref, className: cx('pui-panel-body', className) }));
|
|
10
|
+
});
|
|
11
|
+
export function Footer({ className, ...props }) {
|
|
12
|
+
return _jsx("div", { ...props, className: cx('pui-panel-footer', className) });
|
|
13
|
+
}
|
package/dist/parts.d.ts
CHANGED
|
@@ -1,12 +1,30 @@
|
|
|
1
1
|
import { type ComponentSize } from './sizing.js';
|
|
2
2
|
import * as React from 'react';
|
|
3
|
+
/** Joins class names, skipping empty ones. */
|
|
4
|
+
export declare function cx(...classes: (string | false | null | undefined)[]): string;
|
|
3
5
|
/** The data-size value: a short alias (sm, md, lg) renders as its full name, so both
|
|
4
6
|
* spellings meet the same CSS; other values such as xs or icon pass through. */
|
|
5
7
|
export declare function sizeName<Size extends string>(size?: Size): ComponentSize | Size | undefined;
|
|
6
8
|
/** Preserve Base UI's state-dependent className contract when adding a skin. */
|
|
7
9
|
export declare function skin<State>(base: string, custom?: string | ((state: State) => string | undefined)): string | ((state: State) => string);
|
|
10
|
+
/** A styled Base UI part or element. A portal part renders outside the tree that sets
|
|
11
|
+
* data-ui-size, so it always carries the size scheme; other parts carry it only when
|
|
12
|
+
* size is set. */
|
|
8
13
|
export declare function part<Element extends HTMLElement, Props extends {
|
|
9
14
|
className?: unknown;
|
|
10
|
-
}>(Component: React.ElementType, base: string
|
|
15
|
+
}>(Component: React.ElementType, base: string, { portal }?: {
|
|
16
|
+
portal?: boolean;
|
|
17
|
+
}): React.ForwardRefExoticComponent<React.PropsWithoutRef<Omit<Props, "size"> & {
|
|
11
18
|
size?: ComponentSize;
|
|
12
19
|
}> & React.RefAttributes<Element>>;
|
|
20
|
+
/** A namespace Portal that marks its subtree as already portalled. */
|
|
21
|
+
export declare function scopedPortal<Portal extends React.ElementType>(BasePortal: Portal): Portal;
|
|
22
|
+
/** Renders a Content's positioner in its portal, unless a namespace Portal holds it. */
|
|
23
|
+
export declare function OwnPortal({ portal: BasePortal, children, }: {
|
|
24
|
+
portal: React.ElementType;
|
|
25
|
+
children: React.ReactNode;
|
|
26
|
+
}): React.JSX.Element;
|
|
27
|
+
/** Drops undefined entries, so explicit placement props override defaults only when set. */
|
|
28
|
+
export declare function defined<Props extends object>(props: Props): Partial<Props>;
|
|
29
|
+
/** The placement props a popup Content passes to its Positioner. */
|
|
30
|
+
export type Placement<Positioner extends React.ElementType> = Pick<React.ComponentPropsWithoutRef<Positioner>, 'side' | 'align' | 'sideOffset' | 'collisionPadding'>;
|
package/dist/parts.js
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
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
|
+
}
|
|
4
8
|
/** The data-size value: a short alias (sm, md, lg) renders as its full name, so both
|
|
5
9
|
* spellings meet the same CSS; other values such as xs or icon pass through. */
|
|
6
10
|
export function sizeName(size) {
|
|
@@ -11,19 +15,41 @@ export function sizeName(size) {
|
|
|
11
15
|
/** Preserve Base UI's state-dependent className contract when adding a skin. */
|
|
12
16
|
export function skin(base, custom) {
|
|
13
17
|
if (typeof custom === 'function')
|
|
14
|
-
return (state) =>
|
|
15
|
-
return
|
|
18
|
+
return (state) => cx(base, custom(state));
|
|
19
|
+
return cx(base, custom);
|
|
16
20
|
}
|
|
17
|
-
|
|
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 } = {}) {
|
|
18
25
|
return React.forwardRef(function ThemedPart(props, ref) {
|
|
19
26
|
const { className, size, ...rest } = props;
|
|
20
27
|
const scheme = useComponentSize(size);
|
|
21
|
-
const portal = /positioner|popup|^pui-menu$|navigation-menu-viewport/.test(base);
|
|
22
28
|
const classes = typeof className === 'function'
|
|
23
|
-
? (state) =>
|
|
24
|
-
:
|
|
29
|
+
? (state) => cx(base, className(state))
|
|
30
|
+
: cx(base, className);
|
|
25
31
|
const element = (_jsx(Component, { ...rest, ref: ref, className: classes, "data-ui-size": size ? scheme : portal ? scheme : undefined }));
|
|
26
32
|
// Keep the React subtree stable when size changes from omitted to explicit.
|
|
27
33
|
return (_jsx(ComponentSizeContext.Provider, { value: scheme, children: element }));
|
|
28
34
|
});
|
|
29
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 { skin } from './parts.js';
|
|
3
|
+
import { OwnPortal, part, scopedPortal, sizeName, skin } from './parts.js';
|
|
4
4
|
import { useComponentSize } from './sizing.js';
|
|
5
5
|
import { Popover as BasePopover } from '@base-ui/react/popover';
|
|
6
|
-
function PopoverContent({ side = 'bottom', align = 'start', sideOffset = 8, collisionPadding = 12, className, ...props }) {
|
|
7
|
-
const scheme = useComponentSize();
|
|
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: skin('pui-popover', 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;
|