@surflane/ui 0.4.0 → 0.6.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 +2 -2
- 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.d.ts +44 -3
- package/dist/app-shell.js +86 -13
- 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/bottom-navigation.d.ts +66 -0
- package/dist/bottom-navigation.js +36 -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 +35 -0
- package/dist/chart.js +123 -50
- 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/css/accordion.css +11 -0
- package/dist/css/alert-dialog.css +11 -0
- package/{src → dist/css}/all.css +1 -1
- package/dist/css/app-shell.css +12 -0
- package/dist/css/autocomplete.css +15 -0
- package/dist/css/avatar.css +10 -0
- package/dist/css/badge.css +10 -0
- package/dist/css/bottom-navigation.css +8 -0
- package/dist/css/breadcrumbs.css +12 -0
- package/dist/css/button.css +8 -0
- package/dist/css/card.css +11 -0
- package/dist/css/chart.css +13 -0
- package/dist/css/checkbox-group.css +9 -0
- package/dist/css/checkbox.css +9 -0
- package/dist/css/choice-label.css +9 -0
- package/dist/css/code.css +13 -0
- package/dist/css/collapsible.css +11 -0
- package/dist/css/combobox.css +14 -0
- package/dist/css/context-menu.css +15 -0
- package/dist/css/date-picker.css +12 -0
- package/dist/css/dialog.css +10 -0
- package/dist/css/drawer.css +11 -0
- package/dist/css/empty-state.css +9 -0
- package/dist/css/field.css +10 -0
- package/dist/css/fieldset.css +8 -0
- package/dist/css/file-upload.css +17 -0
- package/dist/css/filter-bar.css +8 -0
- package/dist/css/form.css +8 -0
- package/dist/css/icon.css +8 -0
- package/dist/css/inline-message.css +10 -0
- package/dist/css/input.css +9 -0
- package/dist/css/layout.css +9 -0
- package/dist/css/link.css +9 -0
- package/dist/css/list.css +9 -0
- package/dist/css/markdown.css +18 -0
- package/dist/css/menu.css +14 -0
- package/dist/css/menubar.css +9 -0
- package/dist/css/meter.css +9 -0
- package/dist/css/native-select.css +13 -0
- package/dist/css/navigation-menu.css +11 -0
- package/dist/css/number-field.css +11 -0
- package/dist/css/otp-field.css +10 -0
- package/dist/css/page-header.css +11 -0
- package/dist/css/pagination.css +11 -0
- package/dist/css/popover.css +9 -0
- package/dist/css/preview-card.css +11 -0
- package/dist/css/progress.css +9 -0
- package/dist/css/radio-group.css +9 -0
- package/dist/css/rules/accordion.css +21 -0
- package/dist/css/rules/alert-dialog.css +23 -0
- package/dist/css/rules/app-shell.css +220 -0
- package/dist/css/rules/autocomplete.css +3 -0
- package/dist/css/rules/avatar.css +17 -0
- package/dist/css/rules/badge.css +17 -0
- package/dist/css/rules/bar.css +38 -0
- package/dist/css/rules/base.css +46 -0
- package/dist/css/rules/bottom-navigation.css +142 -0
- package/dist/css/rules/breadcrumbs.css +9 -0
- package/dist/css/rules/button.css +131 -0
- package/dist/css/rules/card.css +10 -0
- package/dist/css/rules/chart.css +256 -0
- package/dist/css/rules/checkbox-group.css +3 -0
- package/dist/css/rules/checkbox.css +25 -0
- package/dist/css/rules/choice-label.css +52 -0
- package/dist/css/rules/choice.css +104 -0
- package/dist/css/rules/code.css +9 -0
- package/dist/css/rules/collapsible.css +12 -0
- package/dist/css/rules/combobox.css +177 -0
- package/dist/css/rules/context-menu.css +9 -0
- package/dist/css/rules/date-picker.css +301 -0
- package/dist/css/rules/dialog.css +160 -0
- package/dist/css/rules/disclosure.css +107 -0
- package/dist/css/rules/drawer.css +18 -0
- package/dist/css/rules/empty-state.css +9 -0
- package/dist/css/rules/field-control.css +70 -0
- package/dist/css/rules/field.css +56 -0
- package/dist/css/rules/fieldset.css +23 -0
- package/dist/css/rules/file-upload.css +156 -0
- package/dist/css/rules/filter-bar.css +56 -0
- package/dist/css/rules/form.css +15 -0
- package/dist/css/rules/gauge.css +61 -0
- package/dist/css/rules/icon.css +27 -0
- package/dist/css/rules/inline-message.css +10 -0
- package/dist/css/rules/input-group.css +69 -0
- package/dist/css/rules/input.css +33 -0
- package/dist/css/rules/item.css +14 -0
- package/dist/css/rules/layout.css +3 -0
- package/dist/css/rules/link.css +9 -0
- package/dist/css/rules/list.css +10 -0
- package/dist/css/rules/markdown.css +63 -0
- package/dist/css/rules/menu.css +97 -0
- package/dist/css/rules/menubar.css +18 -0
- package/dist/css/rules/meter.css +3 -0
- package/dist/css/rules/native-select.css +3 -0
- package/dist/css/rules/navigation-menu.css +159 -0
- package/dist/css/rules/number-field.css +55 -0
- package/dist/css/rules/otp-field.css +68 -0
- package/dist/css/rules/page-header.css +3 -0
- package/dist/css/rules/pagination.css +3 -0
- package/dist/css/rules/panel.css +221 -0
- package/dist/css/rules/popover.css +41 -0
- package/dist/css/rules/popup.css +27 -0
- package/dist/css/rules/preview-card.css +60 -0
- package/dist/css/rules/progress.css +14 -0
- package/dist/css/rules/radio-group.css +26 -0
- package/dist/css/rules/scroll-area.css +101 -0
- package/dist/css/rules/select.css +88 -0
- package/dist/css/rules/separator.css +3 -0
- package/dist/css/rules/sheet.css +3 -0
- package/dist/css/rules/sizing.css +140 -0
- package/dist/css/rules/skeleton.css +41 -0
- package/dist/css/rules/slider.css +123 -0
- package/dist/css/rules/sparkline.css +52 -0
- package/dist/css/rules/spinner.css +38 -0
- package/dist/css/rules/stat.css +59 -0
- package/dist/css/rules/switch.css +50 -0
- package/dist/css/rules/syntax-highlighter.css +82 -0
- package/dist/css/rules/table.css +28 -0
- package/dist/css/rules/tabs.css +126 -0
- package/dist/css/rules/textarea.css +21 -0
- package/dist/css/rules/toast.css +247 -0
- package/dist/css/rules/toggle-group.css +3 -0
- package/dist/css/rules/toggle.css +27 -0
- package/dist/css/rules/toolbar.css +62 -0
- package/dist/css/rules/tooltip.css +38 -0
- package/dist/css/rules/tree.css +98 -0
- package/dist/css/rules/typography.css +3 -0
- package/dist/css/scroll-area.css +8 -0
- package/dist/css/select.css +12 -0
- package/dist/css/separator.css +9 -0
- package/dist/css/sheet.css +11 -0
- package/dist/css/sizing.css +7 -0
- package/dist/css/skeleton.css +8 -0
- package/dist/css/slider.css +8 -0
- package/dist/css/sparkline.css +8 -0
- package/dist/css/spinner.css +8 -0
- package/dist/css/stat.css +9 -0
- package/dist/css/styles.css +100 -0
- package/dist/css/switch.css +9 -0
- package/dist/css/syntax-highlighter.css +9 -0
- package/dist/css/table.css +12 -0
- package/dist/css/tabs.css +8 -0
- package/dist/css/textarea.css +10 -0
- package/dist/css/toast.css +11 -0
- package/dist/css/toggle-group.css +9 -0
- package/dist/css/toggle.css +10 -0
- package/dist/css/toolbar.css +12 -0
- package/dist/css/tooltip.css +9 -0
- package/dist/css/tree.css +10 -0
- package/dist/css/typography.css +9 -0
- 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/format.d.ts +25 -0
- package/dist/format.js +42 -0
- package/dist/icon.d.ts +11 -0
- package/dist/icon.js +19 -3
- package/dist/index.d.ts +61 -30
- package/dist/index.js +75 -33
- 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/sparkline.d.ts +41 -0
- package/dist/sparkline.js +50 -0
- package/dist/spinner.d.ts +13 -0
- package/dist/spinner.js +10 -0
- package/dist/stat.d.ts +59 -0
- package/dist/stat.js +26 -0
- package/dist/status.d.ts +2 -20
- package/dist/status.js +11 -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.d.ts +57 -1
- package/dist/toast.js +80 -8
- 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 +10 -3
- package/dist/tooltip.js +4 -4
- package/dist/tree.js +4 -2
- package/dist/typography.d.ts +12 -0
- package/dist/typography.js +14 -0
- package/package.json +324 -25
- 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/src/styles.css +0 -3780
package/README.md
CHANGED
|
@@ -18,7 +18,7 @@ Import the stylesheets once at the application root. `all.css` brings the tokens
|
|
|
18
18
|
@import '@surflane/ui/all.css';
|
|
19
19
|
```
|
|
20
20
|
|
|
21
|
-
The rules sit in `surflane.*` cascade layers, so your unlayered CSS overrides them. Set `data-theme="light"` or `data-theme="dark"` on `<html>` before the first paint and add `pui-typography` to `<body>`. The [install guide](https://surflane.page/install) walks through Vite, Next.js, React Router and Astro, with or without Tailwind CSS.
|
|
21
|
+
To ship only what you use, import component stylesheets instead, such as `@surflane/ui/button.css` and `@surflane/ui/dialog.css`. Each brings the tokens and the styles of what its component renders. The rules sit in `surflane.*` cascade layers, so your unlayered CSS overrides them. Set `data-theme="light"` or `data-theme="dark"` on `<html>` before the first paint and add `pui-typography` to `<body>`. The [install guide](https://surflane.page/install) walks through Vite, Next.js, React Router and Astro, with or without Tailwind CSS.
|
|
22
22
|
|
|
23
23
|
```tsx
|
|
24
24
|
import {
|
|
@@ -41,7 +41,7 @@ export function Example() {
|
|
|
41
41
|
}
|
|
42
42
|
```
|
|
43
43
|
|
|
44
|
-
Compound components are available both as namespaces (`Dialog.Root`) and as flat names (`DialogRoot`). Use flat names in React Server Components, which cannot dot into client exports.
|
|
44
|
+
Compound components are available both as namespaces (`Dialog.Root`) and as flat names (`DialogRoot`). Use flat names in React Server Components, which cannot dot into client exports. Every component also has its own entry point, named after its page in the catalog, such as `@surflane/ui/checkbox` or `@surflane/ui/sheet`.
|
|
45
45
|
|
|
46
46
|
## Optional components
|
|
47
47
|
|
|
@@ -18,25 +18,9 @@ export declare const Accordion: {
|
|
|
18
18
|
} & React.RefAttributes<HTMLElement>>;
|
|
19
19
|
Panel: React.ForwardRefExoticComponent<Omit<Omit<import("@base-ui/react/accordion").AccordionPanelProps, "ref"> & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
20
20
|
};
|
|
21
|
-
|
|
22
|
-
indicator?: React.ReactNode;
|
|
23
|
-
} & React.RefAttributes<HTMLButtonElement>>;
|
|
24
|
-
declare const CollapsiblePanel: React.ForwardRefExoticComponent<Omit<Omit<import("@base-ui/react/collapsible").CollapsiblePanelProps, "ref"> & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
25
|
-
export declare const Collapsible: {
|
|
26
|
-
Root: React.ForwardRefExoticComponent<Omit<Omit<Omit<import("@base-ui/react/collapsible").CollapsibleRootProps, "ref"> & React.RefAttributes<HTMLDivElement>, "ref">, "size"> & {
|
|
27
|
-
size?: import("./sizing.js").ComponentSize;
|
|
28
|
-
} & React.RefAttributes<HTMLDivElement>>;
|
|
29
|
-
Trigger: React.ForwardRefExoticComponent<Omit<Omit<import("@base-ui/react/collapsible").CollapsibleTriggerProps, "ref"> & React.RefAttributes<HTMLButtonElement>, "ref"> & {
|
|
30
|
-
indicator?: React.ReactNode;
|
|
31
|
-
} & React.RefAttributes<HTMLButtonElement>>;
|
|
32
|
-
Panel: React.ForwardRefExoticComponent<Omit<Omit<import("@base-ui/react/collapsible").CollapsiblePanelProps, "ref"> & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
33
|
-
};
|
|
34
|
-
export { AccordionPanel, AccordionRoot, AccordionTrigger, CollapsiblePanel, CollapsibleTrigger, };
|
|
21
|
+
export { AccordionPanel, AccordionRoot, AccordionTrigger };
|
|
35
22
|
export declare const AccordionHeader: React.ForwardRefExoticComponent<Omit<Omit<Omit<import("@base-ui/react/accordion").AccordionHeaderProps, "ref"> & React.RefAttributes<HTMLHeadingElement>, "ref">, "size"> & {
|
|
36
23
|
size?: import("./sizing.js").ComponentSize;
|
|
37
24
|
} & React.RefAttributes<HTMLHeadingElement>>, AccordionItem: React.ForwardRefExoticComponent<Omit<Omit<Omit<import("@base-ui/react/accordion").AccordionItemProps, "ref"> & React.RefAttributes<HTMLDivElement>, "ref">, "size"> & {
|
|
38
25
|
size?: import("./sizing.js").ComponentSize;
|
|
39
26
|
} & React.RefAttributes<HTMLDivElement>>;
|
|
40
|
-
export declare const CollapsibleRoot: React.ForwardRefExoticComponent<Omit<Omit<Omit<import("@base-ui/react/collapsible").CollapsibleRootProps, "ref"> & React.RefAttributes<HTMLDivElement>, "ref">, "size"> & {
|
|
41
|
-
size?: import("./sizing.js").ComponentSize;
|
|
42
|
-
} & React.RefAttributes<HTMLDivElement>>;
|
|
@@ -2,14 +2,13 @@
|
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
3
|
import * as React from 'react';
|
|
4
4
|
import { Accordion as BaseAccordion } from '@base-ui/react/accordion';
|
|
5
|
-
import {
|
|
6
|
-
import { Chevron } from './chevron.js';
|
|
5
|
+
import { Icon } from './icon.js';
|
|
7
6
|
import { skin, part } from './parts.js';
|
|
8
7
|
function AccordionRoot({ className, ...props }) {
|
|
9
8
|
return (_jsx(BaseAccordion.Root, { ...props, className: skin('pui-accordion', className) }));
|
|
10
9
|
}
|
|
11
10
|
const AccordionTrigger = /* @__PURE__ */ React.forwardRef(function AccordionTrigger({ className, children, indicator, ...props }, ref) {
|
|
12
|
-
return (_jsxs(BaseAccordion.Trigger, { ...props, ref: ref, className: skin('pui-disclosure-trigger', className), children: [_jsx("span", { className: 'pui-disclosure-label', children: children }), indicator === undefined ? _jsx(
|
|
11
|
+
return (_jsxs(BaseAccordion.Trigger, { ...props, ref: ref, className: skin('pui-disclosure-trigger', className), children: [_jsx("span", { className: 'pui-disclosure-label', children: children }), indicator === undefined ? (_jsx(Icon, { name: 'chevron-forward', className: 'pui-disclosure-chevron' })) : (indicator)] }));
|
|
13
12
|
});
|
|
14
13
|
const AccordionPanel = /* @__PURE__ */ React.forwardRef(function AccordionPanel({ className, children, render, ...props }, ref) {
|
|
15
14
|
return (_jsx(BaseAccordion.Panel, { ...props, ref: ref, className: skin('pui-accordion-panel', className), render: render ??
|
|
@@ -23,19 +22,6 @@ export const Accordion = {
|
|
|
23
22
|
Trigger: AccordionTrigger,
|
|
24
23
|
Panel: AccordionPanel,
|
|
25
24
|
};
|
|
26
|
-
const CollapsibleTrigger = /* @__PURE__ */ React.forwardRef(function CollapsibleTrigger({ className, children, indicator, ...props }, ref) {
|
|
27
|
-
return (_jsxs(BaseCollapsible.Trigger, { ...props, ref: ref, className: skin('pui-disclosure-trigger', className), children: [_jsx("span", { className: 'pui-disclosure-label', children: children }), indicator === undefined ? _jsx(Chevron, {}) : indicator] }));
|
|
28
|
-
});
|
|
29
|
-
const CollapsiblePanel = /* @__PURE__ */ React.forwardRef(function CollapsiblePanel({ className, children, ...props }, ref) {
|
|
30
|
-
return (_jsx(BaseCollapsible.Panel, { ...props, ref: ref, className: skin('pui-collapsible-panel', className), children: _jsx("div", { className: 'pui-disclosure-body', children: children }) }));
|
|
31
|
-
});
|
|
32
|
-
export const Collapsible = {
|
|
33
|
-
...BaseCollapsible,
|
|
34
|
-
Root: /* @__PURE__ */ part(BaseCollapsible.Root, 'pui-collapsible'),
|
|
35
|
-
Trigger: CollapsibleTrigger,
|
|
36
|
-
Panel: CollapsiblePanel,
|
|
37
|
-
};
|
|
38
25
|
// Flat names for React Server Components, which cannot dot into client exports.
|
|
39
|
-
export { AccordionPanel, AccordionRoot, AccordionTrigger
|
|
26
|
+
export { AccordionPanel, AccordionRoot, AccordionTrigger };
|
|
40
27
|
export const { Header: AccordionHeader, Item: AccordionItem } = Accordion;
|
|
41
|
-
export const { Root: CollapsibleRoot } = Collapsible;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { type ComponentSizeAlias } from './sizing.js';
|
|
3
|
+
import { AlertDialog as BaseAlertDialog } from '@base-ui/react/alert-dialog';
|
|
4
|
+
import { DialogFooter, DialogHeader } from './dialog.js';
|
|
5
|
+
declare const AlertDialogContent: React.ForwardRefExoticComponent<Omit<Omit<import("@base-ui/react/alert-dialog").AlertDialogPopupProps, "ref"> & React.RefAttributes<HTMLDivElement>, "ref"> & {
|
|
6
|
+
/** Width and density; an alert dialog is small unless set. */
|
|
7
|
+
size?: ComponentSizeAlias;
|
|
8
|
+
focusBoundaryLabel?: string;
|
|
9
|
+
} & React.RefAttributes<HTMLDivElement>>;
|
|
10
|
+
export declare const AlertDialog: {
|
|
11
|
+
Content: React.ForwardRefExoticComponent<Omit<Omit<import("@base-ui/react/alert-dialog").AlertDialogPopupProps, "ref"> & React.RefAttributes<HTMLDivElement>, "ref"> & {
|
|
12
|
+
/** Width and density; an alert dialog is small unless set. */
|
|
13
|
+
size?: ComponentSizeAlias;
|
|
14
|
+
focusBoundaryLabel?: string;
|
|
15
|
+
} & React.RefAttributes<HTMLDivElement>>;
|
|
16
|
+
Header: typeof DialogHeader;
|
|
17
|
+
Footer: typeof DialogFooter;
|
|
18
|
+
Root: typeof BaseAlertDialog.Root;
|
|
19
|
+
Backdrop: React.ForwardRefExoticComponent<Omit<import("@base-ui/react/alert-dialog").AlertDialogBackdropProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
20
|
+
Close: React.ForwardRefExoticComponent<Omit<import("@base-ui/react/alert-dialog").AlertDialogCloseProps, "ref"> & React.RefAttributes<HTMLButtonElement>>;
|
|
21
|
+
Description: React.ForwardRefExoticComponent<Omit<import("@base-ui/react/alert-dialog").AlertDialogDescriptionProps, "ref"> & React.RefAttributes<HTMLParagraphElement>>;
|
|
22
|
+
Popup: React.ForwardRefExoticComponent<Omit<import("@base-ui/react/alert-dialog").AlertDialogPopupProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
23
|
+
Portal: React.ForwardRefExoticComponent<Omit<import("@base-ui/react/alert-dialog").AlertDialogPortalProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
24
|
+
Title: React.ForwardRefExoticComponent<Omit<import("@base-ui/react/alert-dialog").AlertDialogTitleProps, "ref"> & React.RefAttributes<HTMLHeadingElement>>;
|
|
25
|
+
Trigger: BaseAlertDialog.Trigger;
|
|
26
|
+
Viewport: React.ForwardRefExoticComponent<Omit<import("@base-ui/react/alert-dialog").AlertDialogViewportProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
27
|
+
Handle: typeof BaseAlertDialog.Handle;
|
|
28
|
+
createHandle: typeof BaseAlertDialog.createHandle;
|
|
29
|
+
};
|
|
30
|
+
export { AlertDialogContent };
|
|
31
|
+
export declare const AlertDialogBackdrop: React.ForwardRefExoticComponent<Omit<import("@base-ui/react/alert-dialog").AlertDialogBackdropProps, "ref"> & React.RefAttributes<HTMLDivElement>>, AlertDialogClose: React.ForwardRefExoticComponent<Omit<import("@base-ui/react/alert-dialog").AlertDialogCloseProps, "ref"> & React.RefAttributes<HTMLButtonElement>>, AlertDialogDescription: React.ForwardRefExoticComponent<Omit<import("@base-ui/react/alert-dialog").AlertDialogDescriptionProps, "ref"> & React.RefAttributes<HTMLParagraphElement>>, AlertDialogHandle: typeof BaseAlertDialog.Handle, AlertDialogPopup: React.ForwardRefExoticComponent<Omit<import("@base-ui/react/alert-dialog").AlertDialogPopupProps, "ref"> & React.RefAttributes<HTMLDivElement>>, AlertDialogPortal: React.ForwardRefExoticComponent<Omit<import("@base-ui/react/alert-dialog").AlertDialogPortalProps, "ref"> & React.RefAttributes<HTMLDivElement>>, AlertDialogRoot: typeof BaseAlertDialog.Root, AlertDialogTitle: React.ForwardRefExoticComponent<Omit<import("@base-ui/react/alert-dialog").AlertDialogTitleProps, "ref"> & React.RefAttributes<HTMLHeadingElement>>, AlertDialogTrigger: BaseAlertDialog.Trigger, AlertDialogViewport: React.ForwardRefExoticComponent<Omit<import("@base-ui/react/alert-dialog").AlertDialogViewportProps, "ref"> & React.RefAttributes<HTMLDivElement>>, AlertDialogHeader: typeof DialogHeader, AlertDialogFooter: typeof DialogFooter;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import * as React from 'react';
|
|
4
|
+
import { sizeName, skin } from './parts.js';
|
|
5
|
+
import { useDialogFocusBoundary } from './dialog-focus.js';
|
|
6
|
+
import { useComponentSize } from './sizing.js';
|
|
7
|
+
import { AlertDialog as BaseAlertDialog } from '@base-ui/react/alert-dialog';
|
|
8
|
+
import { DialogFooter, DialogHeader } from './dialog.js';
|
|
9
|
+
const AlertDialogContent = /* @__PURE__ */ React.forwardRef(function AlertDialogContent({ size, className, focusBoundaryLabel = 'Continue dialog navigation', ...props }, ref) {
|
|
10
|
+
const scheme = useComponentSize(size);
|
|
11
|
+
const portalRef = useDialogFocusBoundary(focusBoundaryLabel);
|
|
12
|
+
return (_jsxs(BaseAlertDialog.Portal, { ref: portalRef, children: [_jsx(BaseAlertDialog.Backdrop, { className: 'pui-dialog-backdrop' }), _jsx(BaseAlertDialog.Popup, { "data-ui-size": scheme, "data-size": sizeName(size), ...props, ref: ref, className: skin('pui-dialog-popup pui-dialog-content pui-confirm-content', className) })] }));
|
|
13
|
+
});
|
|
14
|
+
export const AlertDialog = {
|
|
15
|
+
...BaseAlertDialog,
|
|
16
|
+
Content: AlertDialogContent,
|
|
17
|
+
Header: DialogHeader,
|
|
18
|
+
Footer: DialogFooter,
|
|
19
|
+
};
|
|
20
|
+
// Flat names for React Server Components, which cannot dot into client exports.
|
|
21
|
+
export { AlertDialogContent };
|
|
22
|
+
export const { Backdrop: AlertDialogBackdrop, Close: AlertDialogClose, Description: AlertDialogDescription, Handle: AlertDialogHandle, Popup: AlertDialogPopup, Portal: AlertDialogPortal, Root: AlertDialogRoot, Title: AlertDialogTitle, Trigger: AlertDialogTrigger, Viewport: AlertDialogViewport, Header: AlertDialogHeader, Footer: AlertDialogFooter, } = AlertDialog;
|
package/dist/app-shell.d.ts
CHANGED
|
@@ -1,11 +1,43 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
+
import { type ButtonProps } from './button.js';
|
|
3
|
+
export type AppShellRootProps = React.ComponentPropsWithoutRef<'div'> & {
|
|
4
|
+
layout?: 'header' | 'workspace';
|
|
5
|
+
/** Whether the sidebar is collapsed to its rail. Pass it to control the state. */
|
|
6
|
+
collapsed?: boolean;
|
|
7
|
+
/** The starting state when the shell controls it. */
|
|
8
|
+
defaultCollapsed?: boolean;
|
|
9
|
+
onCollapsedChange?: (collapsed: boolean) => void;
|
|
10
|
+
/** A localStorage key that remembers the state across visits. A server-rendered
|
|
11
|
+
* app reads a cookie into defaultCollapsed instead, so the first paint is right. */
|
|
12
|
+
persist?: string;
|
|
13
|
+
/** ⌘B, or Ctrl+B, toggles the sidebar unless focus is in a text field. */
|
|
14
|
+
shortcut?: boolean;
|
|
15
|
+
};
|
|
16
|
+
export type AppShellSidebarToggleProps = Omit<ButtonProps, 'children'> & {
|
|
17
|
+
/** The button's name in each state; it is also the tooltip. */
|
|
18
|
+
labels?: {
|
|
19
|
+
collapse?: string;
|
|
20
|
+
expand?: string;
|
|
21
|
+
};
|
|
22
|
+
children?: React.ReactNode;
|
|
23
|
+
};
|
|
2
24
|
export declare const AppShell: {
|
|
3
25
|
Root: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & {
|
|
4
|
-
collapsed?: boolean;
|
|
5
26
|
layout?: "header" | "workspace";
|
|
27
|
+
/** Whether the sidebar is collapsed to its rail. Pass it to control the state. */
|
|
28
|
+
collapsed?: boolean;
|
|
29
|
+
/** The starting state when the shell controls it. */
|
|
30
|
+
defaultCollapsed?: boolean;
|
|
31
|
+
onCollapsedChange?: (collapsed: boolean) => void;
|
|
32
|
+
/** A localStorage key that remembers the state across visits. A server-rendered
|
|
33
|
+
* app reads a cookie into defaultCollapsed instead, so the first paint is right. */
|
|
34
|
+
persist?: string;
|
|
35
|
+
/** ⌘B, or Ctrl+B, toggles the sidebar unless focus is in a text field. */
|
|
36
|
+
shortcut?: boolean;
|
|
6
37
|
} & React.RefAttributes<HTMLDivElement>>;
|
|
7
38
|
Header: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
8
39
|
Sidebar: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>, "ref"> & React.RefAttributes<HTMLElement>>;
|
|
40
|
+
SidebarToggle: React.ForwardRefExoticComponent<Omit<AppShellSidebarToggleProps, "ref"> & React.RefAttributes<HTMLButtonElement>>;
|
|
9
41
|
Content: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
10
42
|
Page: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
11
43
|
Footer: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
@@ -16,9 +48,18 @@ export declare const AppShell: {
|
|
|
16
48
|
} & React.RefAttributes<HTMLAnchorElement>>;
|
|
17
49
|
};
|
|
18
50
|
export declare const AppShellRoot: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & {
|
|
19
|
-
collapsed?: boolean;
|
|
20
51
|
layout?: "header" | "workspace";
|
|
21
|
-
|
|
52
|
+
/** Whether the sidebar is collapsed to its rail. Pass it to control the state. */
|
|
53
|
+
collapsed?: boolean;
|
|
54
|
+
/** The starting state when the shell controls it. */
|
|
55
|
+
defaultCollapsed?: boolean;
|
|
56
|
+
onCollapsedChange?: (collapsed: boolean) => void;
|
|
57
|
+
/** A localStorage key that remembers the state across visits. A server-rendered
|
|
58
|
+
* app reads a cookie into defaultCollapsed instead, so the first paint is right. */
|
|
59
|
+
persist?: string;
|
|
60
|
+
/** ⌘B, or Ctrl+B, toggles the sidebar unless focus is in a text field. */
|
|
61
|
+
shortcut?: boolean;
|
|
62
|
+
} & React.RefAttributes<HTMLDivElement>>, AppShellHeader: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>, AppShellSidebar: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>, "ref"> & React.RefAttributes<HTMLElement>>, AppShellSidebarToggle: React.ForwardRefExoticComponent<Omit<AppShellSidebarToggleProps, "ref"> & React.RefAttributes<HTMLButtonElement>>, AppShellContent: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>, AppShellPage: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>, AppShellFooter: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>, AppShellLabel: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, "ref"> & React.RefAttributes<HTMLSpanElement>>, AppShellLink: React.ForwardRefExoticComponent<Omit<Omit<React.DetailedHTMLProps<React.AnchorHTMLAttributes<HTMLAnchorElement>, HTMLAnchorElement>, "ref">, "children"> & {
|
|
22
63
|
icon: React.ReactNode;
|
|
23
64
|
label: string;
|
|
24
65
|
} & React.RefAttributes<HTMLAnchorElement>>;
|
package/dist/app-shell.js
CHANGED
|
@@ -1,40 +1,113 @@
|
|
|
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
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
import { cx, skin } from './parts.js';
|
|
5
|
+
import { Button } from './button.js';
|
|
6
|
+
import { Icon } from './icon.js';
|
|
7
|
+
import { Tooltip } from './tooltip.js';
|
|
8
|
+
const ShellContext = /* @__PURE__ */ React.createContext(null);
|
|
9
|
+
const SidebarContext = /* @__PURE__ */ React.createContext(false);
|
|
10
|
+
const editable = (target) => target instanceof HTMLElement &&
|
|
11
|
+
(target.isContentEditable ||
|
|
12
|
+
/^(input|textarea|select)$/i.test(target.tagName));
|
|
13
|
+
const apple = () => typeof navigator !== 'undefined' && /Mac|iPhone|iPad/.test(navigator.platform);
|
|
14
|
+
/** The sidebar shortcut as this platform writes it. */
|
|
15
|
+
const shortcutLabel = () => (apple() ? '⌘B' : 'Ctrl+B');
|
|
16
|
+
/** Layout only. Routing, session, theme and mobile disclosure belong to the caller;
|
|
17
|
+
* the shell keeps the sidebar's collapsed state unless you control it. */
|
|
18
|
+
const Root = /* @__PURE__ */ React.forwardRef(function AppShellRoot({ collapsed, defaultCollapsed = false, onCollapsedChange, persist, shortcut = true, layout = 'header', className, children, ...props }, ref) {
|
|
19
|
+
const [own, setOwn] = React.useState(defaultCollapsed);
|
|
20
|
+
const value = collapsed ?? own;
|
|
21
|
+
const latest = React.useRef(value);
|
|
22
|
+
latest.current = value;
|
|
23
|
+
const setCollapsed = React.useCallback((next) => {
|
|
24
|
+
if (collapsed === undefined)
|
|
25
|
+
setOwn(next);
|
|
26
|
+
onCollapsedChange?.(next);
|
|
27
|
+
if (persist)
|
|
28
|
+
try {
|
|
29
|
+
localStorage.setItem(persist, next ? 'collapsed' : 'expanded');
|
|
30
|
+
}
|
|
31
|
+
catch { }
|
|
32
|
+
}, [collapsed, onCollapsedChange, persist]);
|
|
33
|
+
React.useLayoutEffect(() => {
|
|
34
|
+
if (!persist || collapsed !== undefined)
|
|
35
|
+
return;
|
|
36
|
+
try {
|
|
37
|
+
const stored = localStorage.getItem(persist);
|
|
38
|
+
if (stored)
|
|
39
|
+
setOwn(stored === 'collapsed');
|
|
40
|
+
}
|
|
41
|
+
catch { }
|
|
42
|
+
}, [persist, collapsed]);
|
|
43
|
+
React.useEffect(() => {
|
|
44
|
+
if (!shortcut)
|
|
45
|
+
return;
|
|
46
|
+
const toggle = (event) => {
|
|
47
|
+
if (event.key.toLowerCase() !== 'b' ||
|
|
48
|
+
event.altKey ||
|
|
49
|
+
event.shiftKey ||
|
|
50
|
+
!(apple() ? event.metaKey : event.ctrlKey) ||
|
|
51
|
+
editable(event.target))
|
|
52
|
+
return;
|
|
53
|
+
event.preventDefault();
|
|
54
|
+
setCollapsed(!latest.current);
|
|
55
|
+
};
|
|
56
|
+
document.addEventListener('keydown', toggle);
|
|
57
|
+
return () => document.removeEventListener('keydown', toggle);
|
|
58
|
+
}, [shortcut, setCollapsed]);
|
|
59
|
+
const sidebarId = React.useId();
|
|
60
|
+
const shell = React.useMemo(() => ({ collapsed: value, setCollapsed, sidebarId, shortcut }), [value, setCollapsed, sidebarId, shortcut]);
|
|
61
|
+
return (_jsx(ShellContext.Provider, { value: shell, children: _jsx("div", { ...props, ref: ref, "data-layout": layout, "data-sidebar": value ? 'collapsed' : 'expanded', className: cx('pui-app-shell', className), children: children }) }));
|
|
62
|
+
});
|
|
63
|
+
/** Collapses the sidebar to its rail and back. Its tooltip names the shortcut. */
|
|
64
|
+
const SidebarToggle = /* @__PURE__ */ React.forwardRef(function AppShellSidebarToggle({ labels, className, children, onClick, ...props }, ref) {
|
|
65
|
+
const shell = React.useContext(ShellContext);
|
|
66
|
+
if (!shell)
|
|
67
|
+
throw new Error('AppShell.SidebarToggle belongs in AppShell.Root');
|
|
68
|
+
const label = shell.collapsed
|
|
69
|
+
? (labels?.expand ?? 'Expand sidebar')
|
|
70
|
+
: (labels?.collapse ?? 'Collapse sidebar');
|
|
71
|
+
return (_jsx(Tooltip, { label: label, shortcut: shell.shortcut ? shortcutLabel() : undefined, children: _jsx(Button, { variant: 'ghost', size: 'icon', ...props, ref: ref, "aria-label": label, "aria-expanded": !shell.collapsed, "aria-controls": shell.sidebarId, className: skin('pui-app-shell-toggle', className), onClick: (event) => {
|
|
72
|
+
onClick?.(event);
|
|
73
|
+
if (!event.defaultPrevented)
|
|
74
|
+
shell.setCollapsed(!shell.collapsed);
|
|
75
|
+
}, children: children ?? _jsx(Icon, { name: 'sidebar' }) }) }));
|
|
8
76
|
});
|
|
9
77
|
const Header = /* @__PURE__ */ React.forwardRef(function AppShellHeader({ className, ...props }, ref) {
|
|
10
|
-
return (_jsx("div", { ...props, ref: ref, className:
|
|
78
|
+
return (_jsx("div", { ...props, ref: ref, className: cx('pui-app-shell-header', className) }));
|
|
11
79
|
});
|
|
12
|
-
const Sidebar = /* @__PURE__ */ React.forwardRef(function AppShellSidebar({ className, ...props }, ref) {
|
|
13
|
-
|
|
80
|
+
const Sidebar = /* @__PURE__ */ React.forwardRef(function AppShellSidebar({ className, id, ...props }, ref) {
|
|
81
|
+
const shell = React.useContext(ShellContext);
|
|
82
|
+
return (_jsx(SidebarContext.Provider, { value: true, children: _jsx("aside", { ...props, ref: ref, id: id ?? shell?.sidebarId, className: cx('pui-app-shell-sidebar', className) }) }));
|
|
14
83
|
});
|
|
15
84
|
const Content = /* @__PURE__ */ React.forwardRef(function AppShellContent({ className, ...props }, ref) {
|
|
16
|
-
return (_jsx("div", { ...props, ref: ref, className:
|
|
85
|
+
return (_jsx("div", { ...props, ref: ref, className: cx('pui-app-shell-content', className) }));
|
|
17
86
|
});
|
|
18
87
|
/**
|
|
19
88
|
* The page surface inside a workspace Content. It insets from the shell on every
|
|
20
89
|
* side but the sidebar's; without the sidebar, on narrow screens, it insets evenly.
|
|
21
90
|
*/
|
|
22
91
|
const Page = /* @__PURE__ */ React.forwardRef(function AppShellPage({ className, ...props }, ref) {
|
|
23
|
-
return (_jsx("div", { ...props, ref: ref, className:
|
|
92
|
+
return (_jsx("div", { ...props, ref: ref, className: cx('pui-app-shell-page', className) }));
|
|
24
93
|
});
|
|
25
94
|
const Footer = /* @__PURE__ */ React.forwardRef(function AppShellFooter({ className, ...props }, ref) {
|
|
26
|
-
return (_jsx("div", { ...props, ref: ref, className:
|
|
95
|
+
return (_jsx("div", { ...props, ref: ref, className: cx('pui-app-shell-footer', className) }));
|
|
27
96
|
});
|
|
28
97
|
const Label = /* @__PURE__ */ React.forwardRef(function AppShellLabel({ className, ...props }, ref) {
|
|
29
|
-
return (_jsx("span", { ...props, ref: ref, className:
|
|
98
|
+
return (_jsx("span", { ...props, ref: ref, className: cx('pui-app-shell-label', className) }));
|
|
30
99
|
});
|
|
31
100
|
const Link = /* @__PURE__ */ React.forwardRef(function AppShellLink({ icon, label, className, ...props }, ref) {
|
|
32
|
-
|
|
101
|
+
const shell = React.useContext(ShellContext);
|
|
102
|
+
const inSidebar = React.useContext(SidebarContext);
|
|
103
|
+
// On the collapsed rail only the icon shows, so the name appears as a tooltip.
|
|
104
|
+
return (_jsx(Tooltip, { label: label, enabled: Boolean(shell?.collapsed && inSidebar), children: _jsxs("a", { ...props, ref: ref, "aria-label": props['aria-label'] ?? label, className: cx('pui-app-shell-link', className), children: [_jsx("span", { className: 'pui-app-shell-icon', "aria-hidden": 'true', children: icon }), _jsx(Label, { "aria-hidden": 'true', children: label })] }) }));
|
|
33
105
|
});
|
|
34
106
|
export const AppShell = {
|
|
35
107
|
Root,
|
|
36
108
|
Header,
|
|
37
109
|
Sidebar,
|
|
110
|
+
SidebarToggle,
|
|
38
111
|
Content,
|
|
39
112
|
Page,
|
|
40
113
|
Footer,
|
|
@@ -42,4 +115,4 @@ export const AppShell = {
|
|
|
42
115
|
Link,
|
|
43
116
|
};
|
|
44
117
|
// Flat names for React Server Components, which cannot dot into client exports.
|
|
45
|
-
export const { Root: AppShellRoot, Header: AppShellHeader, Sidebar: AppShellSidebar, Content: AppShellContent, Page: AppShellPage, Footer: AppShellFooter, Label: AppShellLabel, Link: AppShellLink, } = AppShell;
|
|
118
|
+
export const { Root: AppShellRoot, Header: AppShellHeader, Sidebar: AppShellSidebar, SidebarToggle: AppShellSidebarToggle, Content: AppShellContent, Page: AppShellPage, Footer: AppShellFooter, Label: AppShellLabel, Link: AppShellLink, } = AppShell;
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { Autocomplete as BaseAutocomplete } from '@base-ui/react/autocomplete';
|
|
3
|
-
import { Slider as BaseSlider } from '@base-ui/react/slider';
|
|
4
3
|
declare const AutocompleteRoot: typeof BaseAutocomplete.Root;
|
|
5
4
|
export declare const Autocomplete: {
|
|
6
5
|
Root: typeof BaseAutocomplete.Root;
|
|
7
|
-
|
|
6
|
+
Portal: React.ForwardRefExoticComponent<Omit<import("@base-ui/react/autocomplete").AutocompletePortalProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
7
|
+
Content: React.ForwardRefExoticComponent<Omit<Omit<import("@base-ui/react/autocomplete").AutocompletePopupProps, "ref"> & React.RefAttributes<HTMLDivElement>, "ref"> & Pick<Omit<Omit<import("@base-ui/react/autocomplete").AutocompletePositionerProps, "ref"> & React.RefAttributes<HTMLDivElement>, "ref">, "side" | "align" | "sideOffset" | "collisionPadding"> & {
|
|
8
8
|
positionerProps?: React.ComponentPropsWithoutRef<typeof BaseAutocomplete.Positioner>;
|
|
9
9
|
} & React.RefAttributes<HTMLDivElement>>;
|
|
10
10
|
Popup: React.ForwardRefExoticComponent<Omit<Omit<Omit<import("@base-ui/react/autocomplete").AutocompletePopupProps, "ref"> & React.RefAttributes<HTMLDivElement>, "ref">, "size"> & {
|
|
@@ -44,7 +44,6 @@ export declare const Autocomplete: {
|
|
|
44
44
|
} & React.RefAttributes<HTMLDivElement>>;
|
|
45
45
|
Value: typeof BaseAutocomplete.Value;
|
|
46
46
|
Icon: React.ForwardRefExoticComponent<Omit<import("@base-ui/react/autocomplete").AutocompleteIconProps, "ref"> & React.RefAttributes<HTMLSpanElement>>;
|
|
47
|
-
Portal: React.ForwardRefExoticComponent<Omit<import("@base-ui/react/autocomplete").AutocompletePortalProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
48
47
|
Backdrop: React.ForwardRefExoticComponent<Omit<import("@base-ui/react/autocomplete").AutocompleteBackdropProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
49
48
|
Arrow: React.ForwardRefExoticComponent<Omit<import("@base-ui/react/autocomplete").AutocompleteArrowProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
50
49
|
Row: React.ForwardRefExoticComponent<Omit<import("@base-ui/react/autocomplete").AutocompleteRowProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
@@ -52,31 +51,7 @@ export declare const Autocomplete: {
|
|
|
52
51
|
useFilter: typeof import("@base-ui/react/internals/filter").getFilter;
|
|
53
52
|
useFilteredItems: typeof BaseAutocomplete.useFilteredItems;
|
|
54
53
|
};
|
|
55
|
-
|
|
56
|
-
ref?: React.Ref<HTMLDivElement>;
|
|
57
|
-
}): React.JSX.Element;
|
|
58
|
-
export declare const Slider: {
|
|
59
|
-
Root: typeof SliderRoot;
|
|
60
|
-
Label: React.ForwardRefExoticComponent<Omit<Omit<Omit<import("@base-ui/react/slider").SliderLabelProps, "ref"> & React.RefAttributes<HTMLDivElement>, "ref">, "size"> & {
|
|
61
|
-
size?: import("./sizing.js").ComponentSize;
|
|
62
|
-
} & React.RefAttributes<HTMLDivElement>>;
|
|
63
|
-
Value: React.ForwardRefExoticComponent<Omit<Omit<Omit<import("@base-ui/react/slider").SliderValueProps, "ref"> & React.RefAttributes<HTMLOutputElement>, "ref">, "size"> & {
|
|
64
|
-
size?: import("./sizing.js").ComponentSize;
|
|
65
|
-
} & React.RefAttributes<HTMLOutputElement>>;
|
|
66
|
-
Control: React.ForwardRefExoticComponent<Omit<Omit<Omit<import("@base-ui/react/slider").SliderControlProps, "ref"> & React.RefAttributes<HTMLDivElement>, "ref">, "size"> & {
|
|
67
|
-
size?: import("./sizing.js").ComponentSize;
|
|
68
|
-
} & React.RefAttributes<HTMLDivElement>>;
|
|
69
|
-
Track: React.ForwardRefExoticComponent<Omit<Omit<Omit<import("@base-ui/react/slider").SliderTrackProps, "ref"> & React.RefAttributes<HTMLDivElement>, "ref">, "size"> & {
|
|
70
|
-
size?: import("./sizing.js").ComponentSize;
|
|
71
|
-
} & React.RefAttributes<HTMLDivElement>>;
|
|
72
|
-
Indicator: React.ForwardRefExoticComponent<Omit<Omit<Omit<import("@base-ui/react/slider").SliderIndicatorProps, "ref"> & React.RefAttributes<HTMLDivElement>, "ref">, "size"> & {
|
|
73
|
-
size?: import("./sizing.js").ComponentSize;
|
|
74
|
-
} & React.RefAttributes<HTMLDivElement>>;
|
|
75
|
-
Thumb: React.ForwardRefExoticComponent<Omit<Omit<Omit<import("@base-ui/react/slider").SliderThumbProps, "ref"> & React.RefAttributes<HTMLDivElement>, "ref">, "size"> & {
|
|
76
|
-
size?: import("./sizing.js").ComponentSize;
|
|
77
|
-
} & React.RefAttributes<HTMLDivElement>>;
|
|
78
|
-
};
|
|
79
|
-
export { AutocompleteRoot, SliderRoot };
|
|
54
|
+
export { AutocompleteRoot };
|
|
80
55
|
export declare const AutocompleteArrow: React.ForwardRefExoticComponent<Omit<import("@base-ui/react/autocomplete").AutocompleteArrowProps, "ref"> & React.RefAttributes<HTMLDivElement>>, AutocompleteBackdrop: React.ForwardRefExoticComponent<Omit<import("@base-ui/react/autocomplete").AutocompleteBackdropProps, "ref"> & React.RefAttributes<HTMLDivElement>>, AutocompleteClear: React.ForwardRefExoticComponent<Omit<Omit<import("@base-ui/react/autocomplete").AutocompleteClearProps, "ref"> & React.RefAttributes<HTMLButtonElement>, "ref"> & React.RefAttributes<HTMLButtonElement>>, AutocompleteCollection: typeof BaseAutocomplete.Collection, AutocompleteEmpty: React.ForwardRefExoticComponent<Omit<Omit<Omit<import("@base-ui/react/autocomplete").AutocompleteEmptyProps, "ref"> & React.RefAttributes<HTMLDivElement>, "ref">, "size"> & {
|
|
81
56
|
size?: import("./sizing.js").ComponentSize;
|
|
82
57
|
} & React.RefAttributes<HTMLDivElement>>, AutocompleteGroup: React.ForwardRefExoticComponent<Omit<Omit<Omit<import("@base-ui/react/autocomplete").AutocompleteGroupProps, "ref"> & React.RefAttributes<HTMLDivElement>, "ref">, "size"> & {
|
|
@@ -99,19 +74,6 @@ export declare const AutocompleteArrow: React.ForwardRefExoticComponent<Omit<imp
|
|
|
99
74
|
size?: import("./sizing.js").ComponentSize;
|
|
100
75
|
} & React.RefAttributes<HTMLDivElement>>, AutocompleteStatus: React.ForwardRefExoticComponent<Omit<Omit<Omit<import("@base-ui/react/autocomplete").AutocompleteStatusProps, "ref"> & React.RefAttributes<HTMLDivElement>, "ref">, "size"> & {
|
|
101
76
|
size?: import("./sizing.js").ComponentSize;
|
|
102
|
-
} & React.RefAttributes<HTMLDivElement>>, AutocompleteTrigger: React.ForwardRefExoticComponent<Omit<import("@base-ui/react/autocomplete").AutocompleteTriggerProps & React.RefAttributes<HTMLButtonElement>, "ref"> & React.RefAttributes<HTMLButtonElement>>, AutocompleteValue: typeof BaseAutocomplete.Value, AutocompleteContent: React.ForwardRefExoticComponent<Omit<Omit<import("@base-ui/react/autocomplete").AutocompletePopupProps, "ref"> & React.RefAttributes<HTMLDivElement>, "ref"> & {
|
|
77
|
+
} & React.RefAttributes<HTMLDivElement>>, AutocompleteTrigger: React.ForwardRefExoticComponent<Omit<import("@base-ui/react/autocomplete").AutocompleteTriggerProps & React.RefAttributes<HTMLButtonElement>, "ref"> & React.RefAttributes<HTMLButtonElement>>, AutocompleteValue: typeof BaseAutocomplete.Value, AutocompleteContent: React.ForwardRefExoticComponent<Omit<Omit<import("@base-ui/react/autocomplete").AutocompletePopupProps, "ref"> & React.RefAttributes<HTMLDivElement>, "ref"> & Pick<Omit<Omit<import("@base-ui/react/autocomplete").AutocompletePositionerProps, "ref"> & React.RefAttributes<HTMLDivElement>, "ref">, "side" | "align" | "sideOffset" | "collisionPadding"> & {
|
|
103
78
|
positionerProps?: React.ComponentPropsWithoutRef<typeof BaseAutocomplete.Positioner>;
|
|
104
79
|
} & React.RefAttributes<HTMLDivElement>>;
|
|
105
|
-
export declare const SliderControl: React.ForwardRefExoticComponent<Omit<Omit<Omit<import("@base-ui/react/slider").SliderControlProps, "ref"> & React.RefAttributes<HTMLDivElement>, "ref">, "size"> & {
|
|
106
|
-
size?: import("./sizing.js").ComponentSize;
|
|
107
|
-
} & React.RefAttributes<HTMLDivElement>>, SliderIndicator: React.ForwardRefExoticComponent<Omit<Omit<Omit<import("@base-ui/react/slider").SliderIndicatorProps, "ref"> & React.RefAttributes<HTMLDivElement>, "ref">, "size"> & {
|
|
108
|
-
size?: import("./sizing.js").ComponentSize;
|
|
109
|
-
} & React.RefAttributes<HTMLDivElement>>, SliderLabel: React.ForwardRefExoticComponent<Omit<Omit<Omit<import("@base-ui/react/slider").SliderLabelProps, "ref"> & React.RefAttributes<HTMLDivElement>, "ref">, "size"> & {
|
|
110
|
-
size?: import("./sizing.js").ComponentSize;
|
|
111
|
-
} & React.RefAttributes<HTMLDivElement>>, SliderThumb: React.ForwardRefExoticComponent<Omit<Omit<Omit<import("@base-ui/react/slider").SliderThumbProps, "ref"> & React.RefAttributes<HTMLDivElement>, "ref">, "size"> & {
|
|
112
|
-
size?: import("./sizing.js").ComponentSize;
|
|
113
|
-
} & React.RefAttributes<HTMLDivElement>>, SliderTrack: React.ForwardRefExoticComponent<Omit<Omit<Omit<import("@base-ui/react/slider").SliderTrackProps, "ref"> & React.RefAttributes<HTMLDivElement>, "ref">, "size"> & {
|
|
114
|
-
size?: import("./sizing.js").ComponentSize;
|
|
115
|
-
} & React.RefAttributes<HTMLDivElement>>, SliderValue: React.ForwardRefExoticComponent<Omit<Omit<Omit<import("@base-ui/react/slider").SliderValueProps, "ref"> & React.RefAttributes<HTMLOutputElement>, "ref">, "size"> & {
|
|
116
|
-
size?: import("./sizing.js").ComponentSize;
|
|
117
|
-
} & React.RefAttributes<HTMLOutputElement>>;
|
|
@@ -1,11 +1,11 @@
|
|
|
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 { Autocomplete as BaseAutocomplete } from '@base-ui/react/autocomplete';
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import { useResetValue, useRootRef } from './form-state.js';
|
|
6
|
+
import { Combobox } from './combobox.js';
|
|
7
|
+
import { part, scopedPortal, skin } from './parts.js';
|
|
8
|
+
import { useResetValue } from './form-state.js';
|
|
9
9
|
const AutocompleteRoot = function AutocompleteRoot({ children, form, value, defaultValue, onValueChange, ...props }) {
|
|
10
10
|
const anchor = React.useRef(null);
|
|
11
11
|
const [query, setQuery, revision] = useResetValue(value, defaultValue ?? '', anchor, form);
|
|
@@ -16,7 +16,7 @@ const AutocompleteRoot = function AutocompleteRoot({ children, form, value, defa
|
|
|
16
16
|
}, children: [_jsx("span", { hidden: true, ref: anchor }), children] }, revision));
|
|
17
17
|
};
|
|
18
18
|
const AutoTrigger = /* @__PURE__ */ React.forwardRef(function AutoTrigger({ className, children, ...props }, ref) {
|
|
19
|
-
return (_jsx(BaseAutocomplete.Trigger, { "aria-label": 'Show suggestions', ...props, ref: ref, className: skin('pui-combobox-action', className), children: children ??
|
|
19
|
+
return (_jsx(BaseAutocomplete.Trigger, { "aria-label": 'Show suggestions', ...props, ref: ref, className: skin('pui-combobox-action', className), children: children ?? _jsx(Icon, { name: 'chevron-down' }) }));
|
|
20
20
|
});
|
|
21
21
|
const AutoClear = /* @__PURE__ */ React.forwardRef(function AutoClear(props, ref) {
|
|
22
22
|
return _jsx(Combobox.Clear, { "aria-label": 'Clear input', ...props, ref: ref });
|
|
@@ -24,6 +24,7 @@ const AutoClear = /* @__PURE__ */ React.forwardRef(function AutoClear(props, ref
|
|
|
24
24
|
export const Autocomplete = {
|
|
25
25
|
...BaseAutocomplete,
|
|
26
26
|
Root: AutocompleteRoot,
|
|
27
|
+
Portal: /* @__PURE__ */ scopedPortal(BaseAutocomplete.Portal),
|
|
27
28
|
Content: Combobox.Content,
|
|
28
29
|
Popup: Combobox.Popup,
|
|
29
30
|
Positioner: Combobox.Positioner,
|
|
@@ -39,26 +40,6 @@ export const Autocomplete = {
|
|
|
39
40
|
Item: /* @__PURE__ */ part(BaseAutocomplete.Item, 'pui-combobox-item'),
|
|
40
41
|
Separator: /* @__PURE__ */ part(BaseAutocomplete.Separator, 'pui-combobox-separator'),
|
|
41
42
|
};
|
|
42
|
-
function SliderRoot({ value, defaultValue, onValueChange, ref, className, form, thumbAlignment = 'edge', ...props }) {
|
|
43
|
-
const [element, attach] = useRootRef(ref);
|
|
44
|
-
const [selected, setSelected] = useResetValue(value, (defaultValue ?? props.min ?? 0), element, form);
|
|
45
|
-
return (_jsx(BaseSlider.Root, { ...props, form: form, ref: attach, value: selected, thumbAlignment: thumbAlignment, className: skin('pui-slider', className), onValueChange: (next, event) => {
|
|
46
|
-
onValueChange?.(next, event);
|
|
47
|
-
if (value === undefined && !event.isCanceled)
|
|
48
|
-
setSelected(next);
|
|
49
|
-
} }));
|
|
50
|
-
}
|
|
51
|
-
export const Slider = {
|
|
52
|
-
...BaseSlider,
|
|
53
|
-
Root: SliderRoot,
|
|
54
|
-
Label: /* @__PURE__ */ part(BaseSlider.Label, 'pui-slider-label'),
|
|
55
|
-
Value: /* @__PURE__ */ part(BaseSlider.Value, 'pui-slider-value'),
|
|
56
|
-
Control: /* @__PURE__ */ part(BaseSlider.Control, 'pui-slider-control'),
|
|
57
|
-
Track: /* @__PURE__ */ part(BaseSlider.Track, 'pui-slider-track'),
|
|
58
|
-
Indicator: /* @__PURE__ */ part(BaseSlider.Indicator, 'pui-slider-indicator'),
|
|
59
|
-
Thumb: /* @__PURE__ */ part(BaseSlider.Thumb, 'pui-slider-thumb'),
|
|
60
|
-
};
|
|
61
43
|
// Flat names for React Server Components, which cannot dot into client exports.
|
|
62
|
-
export { AutocompleteRoot
|
|
44
|
+
export { AutocompleteRoot };
|
|
63
45
|
export const { Arrow: AutocompleteArrow, Backdrop: AutocompleteBackdrop, Clear: AutocompleteClear, Collection: AutocompleteCollection, Empty: AutocompleteEmpty, Group: AutocompleteGroup, GroupLabel: AutocompleteGroupLabel, Icon: AutocompleteIcon, Input: AutocompleteInput, InputGroup: AutocompleteInputGroup, Item: AutocompleteItem, List: AutocompleteList, Popup: AutocompletePopup, Portal: AutocompletePortal, Positioner: AutocompletePositioner, Row: AutocompleteRow, Separator: AutocompleteSeparator, Status: AutocompleteStatus, Trigger: AutocompleteTrigger, Value: AutocompleteValue, Content: AutocompleteContent, } = Autocomplete;
|
|
64
|
-
export const { Control: SliderControl, Indicator: SliderIndicator, Label: SliderLabel, Thumb: SliderThumb, Track: SliderTrack, Value: SliderValue, } = Slider;
|
package/dist/avatar.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
import { jsx as _jsx
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
3
|
import * as React from 'react';
|
|
4
|
+
import { Icon } from './icon.js';
|
|
4
5
|
import { Avatar as BaseAvatar } from '@base-ui/react/avatar';
|
|
5
6
|
import { useComponentSize } from './sizing.js';
|
|
6
7
|
import { sizeName, skin, part } from './parts.js';
|
|
@@ -8,11 +9,8 @@ const AvatarRoot = /* @__PURE__ */ React.forwardRef(function AvatarRoot({ size,
|
|
|
8
9
|
const scheme = useComponentSize(size);
|
|
9
10
|
return (_jsx(BaseAvatar.Root, { ...props, ref: ref, "data-size": sizeName(size), "data-ui-size": scheme, className: skin('pui-avatar', className) }));
|
|
10
11
|
});
|
|
11
|
-
function Person() {
|
|
12
|
-
return (_jsxs("svg", { width: '18', height: '18', viewBox: '0 0 24 24', fill: 'none', stroke: 'currentColor', strokeWidth: '1.5', "aria-hidden": 'true', children: [_jsx("circle", { cx: '12', cy: '8', r: '4' }), _jsx("path", { d: 'M4 21v-2a8 8 0 0 1 16 0v2' })] }));
|
|
13
|
-
}
|
|
14
12
|
const AvatarFallback = /* @__PURE__ */ React.forwardRef(function AvatarFallback({ children, className, ...props }, ref) {
|
|
15
|
-
return (_jsx(BaseAvatar.Fallback, { ...props, ref: ref, className: skin('pui-avatar-fallback', className), children: children ?? _jsx(
|
|
13
|
+
return (_jsx(BaseAvatar.Fallback, { ...props, ref: ref, className: skin('pui-avatar-fallback', className), children: children ?? _jsx(Icon, { name: 'user' }) }));
|
|
16
14
|
});
|
|
17
15
|
export const Avatar = {
|
|
18
16
|
...BaseAvatar,
|
package/dist/badge.d.ts
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { type ComponentSize } from './sizing.js';
|
|
3
|
+
import { type StatusTone } from './status.js';
|
|
4
|
+
export type BadgeProps = React.ComponentPropsWithoutRef<'span'> & {
|
|
5
|
+
size?: ComponentSize;
|
|
6
|
+
tone?: StatusTone;
|
|
7
|
+
icon?: React.ReactNode;
|
|
8
|
+
};
|
|
9
|
+
export declare const Badge: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, "ref"> & {
|
|
10
|
+
size?: ComponentSize;
|
|
11
|
+
tone?: StatusTone;
|
|
12
|
+
icon?: React.ReactNode;
|
|
13
|
+
} & React.RefAttributes<HTMLSpanElement>>;
|
|
14
|
+
/** Domain status labels and live announcements remain the caller's responsibility. */
|
|
15
|
+
export declare const StatusBadge: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, "ref"> & {
|
|
16
|
+
size?: ComponentSize;
|
|
17
|
+
tone?: StatusTone;
|
|
18
|
+
icon?: React.ReactNode;
|
|
19
|
+
} & React.RefAttributes<HTMLSpanElement>>;
|
|
20
|
+
export type { StatusTone } from './status.js';
|
package/dist/badge.js
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import * as React from 'react';
|
|
4
|
+
import { useComponentSize } from './sizing.js';
|
|
5
|
+
import { useToneTransition } from './tone-transition.js';
|
|
6
|
+
import { cx } from './parts.js';
|
|
7
|
+
import { StatusIcon } from './status.js';
|
|
8
|
+
export const Badge = /* @__PURE__ */ React.forwardRef(function Badge({ tone = 'neutral', icon, children, className, size, ...props }, ref) {
|
|
9
|
+
const scheme = useComponentSize(size);
|
|
10
|
+
const elementRef = useToneTransition(tone, ref);
|
|
11
|
+
return (_jsxs("span", { ...props, ref: elementRef, className: cx('pui-badge', className), "data-tone": tone, "data-ui-size": scheme, children: [icon && (_jsx("span", { className: 'pui-badge-icon', "aria-hidden": 'true', children: icon })), children] }));
|
|
12
|
+
});
|
|
13
|
+
/** Domain status labels and live announcements remain the caller's responsibility. */
|
|
14
|
+
export const StatusBadge = /* @__PURE__ */ React.forwardRef(function StatusBadge({ tone = 'neutral', icon, ...props }, ref) {
|
|
15
|
+
return (_jsx(Badge, { ...props, ref: ref, tone: tone, icon: icon === undefined ? _jsx(StatusIcon, { tone: tone }) : icon }));
|
|
16
|
+
});
|