@pearpages/pulp-react 0.0.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/LICENSE +21 -0
- package/README.md +65 -0
- package/dist/ListboxOptions-DLsT-dkV.d.ts +11 -0
- package/dist/ToggleField-C-qKSgHh.d.ts +3 -0
- package/dist/accordion.css +90 -0
- package/dist/accordion.css.map +1 -0
- package/dist/accordion.d.ts +71 -0
- package/dist/accordion.js +6 -0
- package/dist/accordion.js.map +1 -0
- package/dist/alert.css +246 -0
- package/dist/alert.css.map +1 -0
- package/dist/alert.d.ts +46 -0
- package/dist/alert.js +10 -0
- package/dist/alert.js.map +1 -0
- package/dist/badge.css +89 -0
- package/dist/badge.css.map +1 -0
- package/dist/badge.d.ts +38 -0
- package/dist/badge.js +5 -0
- package/dist/badge.js.map +1 -0
- package/dist/button.css +162 -0
- package/dist/button.css.map +1 -0
- package/dist/button.d.ts +61 -0
- package/dist/button.js +8 -0
- package/dist/button.js.map +1 -0
- package/dist/calendar.css +128 -0
- package/dist/calendar.css.map +1 -0
- package/dist/calendar.d.ts +48 -0
- package/dist/calendar.js +6 -0
- package/dist/calendar.js.map +1 -0
- package/dist/card.css +66 -0
- package/dist/card.css.map +1 -0
- package/dist/card.d.ts +69 -0
- package/dist/card.js +5 -0
- package/dist/card.js.map +1 -0
- package/dist/checkbox.css +106 -0
- package/dist/checkbox.css.map +1 -0
- package/dist/checkbox.d.ts +41 -0
- package/dist/checkbox.js +7 -0
- package/dist/checkbox.js.map +1 -0
- package/dist/chunk-2PXTVZ7H.js +95 -0
- package/dist/chunk-2PXTVZ7H.js.map +1 -0
- package/dist/chunk-2ZP4ZBI5.js +43 -0
- package/dist/chunk-2ZP4ZBI5.js.map +1 -0
- package/dist/chunk-3GWESUGD.js +28 -0
- package/dist/chunk-3GWESUGD.js.map +1 -0
- package/dist/chunk-4HRNRTXI.js +25 -0
- package/dist/chunk-4HRNRTXI.js.map +1 -0
- package/dist/chunk-5SBKZS56.js +56 -0
- package/dist/chunk-5SBKZS56.js.map +1 -0
- package/dist/chunk-6I26MMQF.js +19 -0
- package/dist/chunk-6I26MMQF.js.map +1 -0
- package/dist/chunk-75GTNRBH.js +45 -0
- package/dist/chunk-75GTNRBH.js.map +1 -0
- package/dist/chunk-7DS4I7OJ.js +30 -0
- package/dist/chunk-7DS4I7OJ.js.map +1 -0
- package/dist/chunk-ASNTNTJW.js +27 -0
- package/dist/chunk-ASNTNTJW.js.map +1 -0
- package/dist/chunk-ASOQ2MVR.js +19 -0
- package/dist/chunk-ASOQ2MVR.js.map +1 -0
- package/dist/chunk-AWQHULJC.js +31 -0
- package/dist/chunk-AWQHULJC.js.map +1 -0
- package/dist/chunk-BBV4L5WO.js +43 -0
- package/dist/chunk-BBV4L5WO.js.map +1 -0
- package/dist/chunk-CZBCGLEM.js +9 -0
- package/dist/chunk-CZBCGLEM.js.map +1 -0
- package/dist/chunk-DWE374JX.js +65 -0
- package/dist/chunk-DWE374JX.js.map +1 -0
- package/dist/chunk-DXOOW6Q6.js +159 -0
- package/dist/chunk-DXOOW6Q6.js.map +1 -0
- package/dist/chunk-F3OFZGGE.js +116 -0
- package/dist/chunk-F3OFZGGE.js.map +1 -0
- package/dist/chunk-FH54XQ35.js +125 -0
- package/dist/chunk-FH54XQ35.js.map +1 -0
- package/dist/chunk-FXRSZUDH.js +38 -0
- package/dist/chunk-FXRSZUDH.js.map +1 -0
- package/dist/chunk-GTTXRDXV.js +181 -0
- package/dist/chunk-GTTXRDXV.js.map +1 -0
- package/dist/chunk-I4KC4V6A.js +31 -0
- package/dist/chunk-I4KC4V6A.js.map +1 -0
- package/dist/chunk-I5OZ63W7.js +50 -0
- package/dist/chunk-I5OZ63W7.js.map +1 -0
- package/dist/chunk-IDNGNQNV.js +41 -0
- package/dist/chunk-IDNGNQNV.js.map +1 -0
- package/dist/chunk-J5S2HVHO.js +67 -0
- package/dist/chunk-J5S2HVHO.js.map +1 -0
- package/dist/chunk-K5QGGQOV.js +84 -0
- package/dist/chunk-K5QGGQOV.js.map +1 -0
- package/dist/chunk-KPQGS4PG.js +77 -0
- package/dist/chunk-KPQGS4PG.js.map +1 -0
- package/dist/chunk-MI4QUKQS.js +8 -0
- package/dist/chunk-MI4QUKQS.js.map +1 -0
- package/dist/chunk-MRQWUCBA.js +57 -0
- package/dist/chunk-MRQWUCBA.js.map +1 -0
- package/dist/chunk-MXWXJZFS.js +48 -0
- package/dist/chunk-MXWXJZFS.js.map +1 -0
- package/dist/chunk-N7L66GMG.js +129 -0
- package/dist/chunk-N7L66GMG.js.map +1 -0
- package/dist/chunk-NAYFLTK6.js +32 -0
- package/dist/chunk-NAYFLTK6.js.map +1 -0
- package/dist/chunk-O6OBFL3Q.js +155 -0
- package/dist/chunk-O6OBFL3Q.js.map +1 -0
- package/dist/chunk-OGIQRHNF.js +52 -0
- package/dist/chunk-OGIQRHNF.js.map +1 -0
- package/dist/chunk-OUFAFINB.js +45 -0
- package/dist/chunk-OUFAFINB.js.map +1 -0
- package/dist/chunk-OXYP34CG.js +43 -0
- package/dist/chunk-OXYP34CG.js.map +1 -0
- package/dist/chunk-P5C2U5ZF.js +73 -0
- package/dist/chunk-P5C2U5ZF.js.map +1 -0
- package/dist/chunk-PM4YO67Q.js +53 -0
- package/dist/chunk-PM4YO67Q.js.map +1 -0
- package/dist/chunk-Q6J6BMSB.js +86 -0
- package/dist/chunk-Q6J6BMSB.js.map +1 -0
- package/dist/chunk-T76YSNTZ.js +33 -0
- package/dist/chunk-T76YSNTZ.js.map +1 -0
- package/dist/chunk-TGMDOQCL.js +53 -0
- package/dist/chunk-TGMDOQCL.js.map +1 -0
- package/dist/chunk-TVI5AXLE.js +41 -0
- package/dist/chunk-TVI5AXLE.js.map +1 -0
- package/dist/chunk-U6QRAD73.js +22 -0
- package/dist/chunk-U6QRAD73.js.map +1 -0
- package/dist/chunk-UX42PQLT.js +76 -0
- package/dist/chunk-UX42PQLT.js.map +1 -0
- package/dist/chunk-XDVS7HX7.js +100 -0
- package/dist/chunk-XDVS7HX7.js.map +1 -0
- package/dist/chunk-Y4TZA77G.js +57 -0
- package/dist/chunk-Y4TZA77G.js.map +1 -0
- package/dist/chunk-YUHS5S5Y.js +12 -0
- package/dist/chunk-YUHS5S5Y.js.map +1 -0
- package/dist/chunk-Z4PN6B2C.js +17 -0
- package/dist/chunk-Z4PN6B2C.js.map +1 -0
- package/dist/chunk-ZVDN3GRI.js +49 -0
- package/dist/chunk-ZVDN3GRI.js.map +1 -0
- package/dist/combobox.css +280 -0
- package/dist/combobox.css.map +1 -0
- package/dist/combobox.d.ts +75 -0
- package/dist/combobox.js +10 -0
- package/dist/combobox.js.map +1 -0
- package/dist/component-manifest.json +3370 -0
- package/dist/date-picker.css +267 -0
- package/dist/date-picker.css.map +1 -0
- package/dist/date-picker.d.ts +59 -0
- package/dist/date-picker.js +8 -0
- package/dist/date-picker.js.map +1 -0
- package/dist/dialog.css +62 -0
- package/dist/dialog.css.map +1 -0
- package/dist/dialog.d.ts +56 -0
- package/dist/dialog.js +3 -0
- package/dist/dialog.js.map +1 -0
- package/dist/field.css +28 -0
- package/dist/field.css.map +1 -0
- package/dist/field.d.ts +98 -0
- package/dist/field.js +5 -0
- package/dist/field.js.map +1 -0
- package/dist/floating-Bw-LN_QT.d.ts +5 -0
- package/dist/heading.css +30 -0
- package/dist/heading.css.map +1 -0
- package/dist/heading.d.ts +316 -0
- package/dist/heading.js +4 -0
- package/dist/heading.js.map +1 -0
- package/dist/icon-button.css +177 -0
- package/dist/icon-button.css.map +1 -0
- package/dist/icon-button.d.ts +29 -0
- package/dist/icon-button.js +9 -0
- package/dist/icon-button.js.map +1 -0
- package/dist/icon.css +25 -0
- package/dist/icon.css.map +1 -0
- package/dist/icon.d.ts +33 -0
- package/dist/icon.js +4 -0
- package/dist/icon.js.map +1 -0
- package/dist/index.css +2345 -0
- package/dist/index.css.map +1 -0
- package/dist/index.d.ts +42 -0
- package/dist/index.js +49 -0
- package/dist/index.js.map +1 -0
- package/dist/inline.css +63 -0
- package/dist/inline.css.map +1 -0
- package/dist/inline.d.ts +322 -0
- package/dist/inline.js +4 -0
- package/dist/inline.js.map +1 -0
- package/dist/listbox.css +95 -0
- package/dist/listbox.css.map +1 -0
- package/dist/listbox.d.ts +47 -0
- package/dist/listbox.js +7 -0
- package/dist/listbox.js.map +1 -0
- package/dist/menu.css +102 -0
- package/dist/menu.css.map +1 -0
- package/dist/menu.d.ts +76 -0
- package/dist/menu.js +9 -0
- package/dist/menu.js.map +1 -0
- package/dist/pagination.css +212 -0
- package/dist/pagination.css.map +1 -0
- package/dist/pagination.d.ts +52 -0
- package/dist/pagination.js +10 -0
- package/dist/pagination.js.map +1 -0
- package/dist/picker.css +209 -0
- package/dist/picker.css.map +1 -0
- package/dist/picker.d.ts +57 -0
- package/dist/picker.js +8 -0
- package/dist/picker.js.map +1 -0
- package/dist/popover.css +48 -0
- package/dist/popover.css.map +1 -0
- package/dist/popover.d.ts +68 -0
- package/dist/popover.js +7 -0
- package/dist/popover.js.map +1 -0
- package/dist/progress.css +83 -0
- package/dist/progress.css.map +1 -0
- package/dist/progress.d.ts +40 -0
- package/dist/progress.js +5 -0
- package/dist/progress.js.map +1 -0
- package/dist/radio.css +107 -0
- package/dist/radio.css.map +1 -0
- package/dist/radio.d.ts +68 -0
- package/dist/radio.js +6 -0
- package/dist/radio.js.map +1 -0
- package/dist/select.css +98 -0
- package/dist/select.css.map +1 -0
- package/dist/select.d.ts +39 -0
- package/dist/select.js +6 -0
- package/dist/select.js.map +1 -0
- package/dist/skeleton.css +59 -0
- package/dist/skeleton.css.map +1 -0
- package/dist/skeleton.d.ts +34 -0
- package/dist/skeleton.js +4 -0
- package/dist/skeleton.js.map +1 -0
- package/dist/slider.css +126 -0
- package/dist/slider.css.map +1 -0
- package/dist/slider.d.ts +61 -0
- package/dist/slider.js +5 -0
- package/dist/slider.js.map +1 -0
- package/dist/spinner.css +60 -0
- package/dist/spinner.css.map +1 -0
- package/dist/spinner.d.ts +34 -0
- package/dist/spinner.js +5 -0
- package/dist/spinner.js.map +1 -0
- package/dist/stack.css +60 -0
- package/dist/stack.css.map +1 -0
- package/dist/stack.d.ts +319 -0
- package/dist/stack.js +4 -0
- package/dist/stack.js.map +1 -0
- package/dist/switch.css +97 -0
- package/dist/switch.css.map +1 -0
- package/dist/switch.d.ts +35 -0
- package/dist/switch.js +7 -0
- package/dist/switch.js.map +1 -0
- package/dist/table.css +188 -0
- package/dist/table.css.map +1 -0
- package/dist/table.d.ts +137 -0
- package/dist/table.js +6 -0
- package/dist/table.js.map +1 -0
- package/dist/tabs.css +75 -0
- package/dist/tabs.css.map +1 -0
- package/dist/tabs.d.ts +73 -0
- package/dist/tabs.js +5 -0
- package/dist/tabs.js.map +1 -0
- package/dist/text-field.css +75 -0
- package/dist/text-field.css.map +1 -0
- package/dist/text-field.d.ts +43 -0
- package/dist/text-field.js +6 -0
- package/dist/text-field.js.map +1 -0
- package/dist/text.css +53 -0
- package/dist/text.css.map +1 -0
- package/dist/text.d.ts +331 -0
- package/dist/text.js +4 -0
- package/dist/text.js.map +1 -0
- package/dist/textarea.css +84 -0
- package/dist/textarea.css.map +1 -0
- package/dist/textarea.d.ts +40 -0
- package/dist/textarea.js +6 -0
- package/dist/textarea.js.map +1 -0
- package/dist/toast.css +300 -0
- package/dist/toast.css.map +1 -0
- package/dist/toast.d.ts +60 -0
- package/dist/toast.js +11 -0
- package/dist/toast.js.map +1 -0
- package/dist/tooltip.css +36 -0
- package/dist/tooltip.css.map +1 -0
- package/dist/tooltip.d.ts +34 -0
- package/dist/tooltip.js +5 -0
- package/dist/tooltip.js.map +1 -0
- package/dist/visually-hidden.css +15 -0
- package/dist/visually-hidden.css.map +1 -0
- package/dist/visually-hidden.d.ts +308 -0
- package/dist/visually-hidden.js +4 -0
- package/dist/visually-hidden.js.map +1 -0
- package/package.json +261 -0
package/dist/menu.d.ts
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import * as react from 'react';
|
|
2
|
+
import { ReactNode, ButtonHTMLAttributes, Ref, HTMLAttributes } from 'react';
|
|
3
|
+
import { F as FloatingPlacement } from './floating-Bw-LN_QT.js';
|
|
4
|
+
import '@floating-ui/react-dom';
|
|
5
|
+
|
|
6
|
+
type MenuPlacement = FloatingPlacement;
|
|
7
|
+
interface MenuProps {
|
|
8
|
+
open?: boolean;
|
|
9
|
+
/** @default false */
|
|
10
|
+
defaultOpen?: boolean;
|
|
11
|
+
onOpenChange?: (open: boolean) => void;
|
|
12
|
+
/** @default 'bottom-start' */
|
|
13
|
+
placement?: MenuPlacement;
|
|
14
|
+
children: ReactNode;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* A list of actions opened from a button, following the WAI-ARIA menu
|
|
18
|
+
* button pattern: Down/Up arrow on the trigger opens and focuses the first
|
|
19
|
+
* or last item, arrows move with wraparound, Home and End jump, typing
|
|
20
|
+
* jumps to the next item starting with that letter, Enter, Space or click
|
|
21
|
+
* selects and closes, Escape and Tab close and return focus. Compose with
|
|
22
|
+
* `Menu.Trigger`, `Menu.Content`, `Menu.Item` and `Menu.Separator`.
|
|
23
|
+
*
|
|
24
|
+
* @status stable
|
|
25
|
+
* @category Overlays
|
|
26
|
+
* @accessibility The WAI-ARIA menu button pattern: the trigger has `aria-haspopup="menu"` and `aria-expanded`; the popup is `role="menu"` named by the trigger with `menuitem` children. Down/Up opens to the first/last item, arrows wrap, Home/End jump, typing jumps, Enter/Space/click select and close, Escape and Tab close and return focus.
|
|
27
|
+
* @do Use `tone="danger"` for destructive items and put them after a separator.
|
|
28
|
+
* @dont Put form controls or links that navigate inside a menu; those want Popover or a navigation list.
|
|
29
|
+
* Use it for navigation between pages.
|
|
30
|
+
*/
|
|
31
|
+
declare function Menu({ open, defaultOpen, onOpenChange, placement, children }: MenuProps): react.JSX.Element;
|
|
32
|
+
declare namespace Menu {
|
|
33
|
+
var displayName: string;
|
|
34
|
+
var Trigger: typeof MenuTrigger;
|
|
35
|
+
var Content: typeof MenuContent;
|
|
36
|
+
var Item: typeof MenuItem;
|
|
37
|
+
var Separator: typeof MenuSeparator;
|
|
38
|
+
}
|
|
39
|
+
interface MenuTriggerProps extends ButtonHTMLAttributes<HTMLButtonElement> {
|
|
40
|
+
asChild?: boolean;
|
|
41
|
+
ref?: Ref<HTMLButtonElement>;
|
|
42
|
+
children: ReactNode;
|
|
43
|
+
}
|
|
44
|
+
declare function MenuTrigger({ asChild, onClick, onKeyDown, ref, children, ...rest }: MenuTriggerProps): react.JSX.Element;
|
|
45
|
+
declare namespace MenuTrigger {
|
|
46
|
+
var displayName: string;
|
|
47
|
+
}
|
|
48
|
+
interface MenuContentProps extends HTMLAttributes<HTMLDivElement> {
|
|
49
|
+
ref?: Ref<HTMLDivElement>;
|
|
50
|
+
children: ReactNode;
|
|
51
|
+
}
|
|
52
|
+
declare function MenuContent({ className, onKeyDown, ref, children, ...rest }: MenuContentProps): react.ReactPortal | null;
|
|
53
|
+
declare namespace MenuContent {
|
|
54
|
+
var displayName: string;
|
|
55
|
+
}
|
|
56
|
+
type MenuItemTone = 'default' | 'danger';
|
|
57
|
+
interface MenuItemProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'onSelect'> {
|
|
58
|
+
/** Called when the item is chosen; the menu closes afterwards. */
|
|
59
|
+
onSelect?: () => void;
|
|
60
|
+
/** @default 'default' */
|
|
61
|
+
tone?: MenuItemTone;
|
|
62
|
+
/** Leading glyph, decorative. */
|
|
63
|
+
icon?: ReactNode;
|
|
64
|
+
ref?: Ref<HTMLButtonElement>;
|
|
65
|
+
children: ReactNode;
|
|
66
|
+
}
|
|
67
|
+
declare function MenuItem({ onSelect, tone, icon, disabled, className, onClick, ref, children, ...rest }: MenuItemProps): react.JSX.Element;
|
|
68
|
+
declare namespace MenuItem {
|
|
69
|
+
var displayName: string;
|
|
70
|
+
}
|
|
71
|
+
declare function MenuSeparator({ className, ...rest }: HTMLAttributes<HTMLDivElement>): react.JSX.Element;
|
|
72
|
+
declare namespace MenuSeparator {
|
|
73
|
+
var displayName: string;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
export { Menu, type MenuItemTone, type MenuPlacement, type MenuProps };
|
package/dist/menu.js
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export { Menu } from './chunk-GTTXRDXV.js';
|
|
2
|
+
import './chunk-I5OZ63W7.js';
|
|
3
|
+
import './chunk-NAYFLTK6.js';
|
|
4
|
+
import './chunk-U6QRAD73.js';
|
|
5
|
+
import './chunk-ZVDN3GRI.js';
|
|
6
|
+
import './chunk-ASNTNTJW.js';
|
|
7
|
+
import './chunk-MI4QUKQS.js';
|
|
8
|
+
//# sourceMappingURL=menu.js.map
|
|
9
|
+
//# sourceMappingURL=menu.js.map
|
package/dist/menu.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"menu.js"}
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
/* src/icon/Icon.module.css */
|
|
2
|
+
@layer components {
|
|
3
|
+
.Icon_icon {
|
|
4
|
+
display: inline-flex;
|
|
5
|
+
flex: none;
|
|
6
|
+
inline-size: 1em;
|
|
7
|
+
block-size: 1em;
|
|
8
|
+
font-size: var(--icon-size-md);
|
|
9
|
+
vertical-align: middle;
|
|
10
|
+
&[data-size=sm] {
|
|
11
|
+
font-size: var(--icon-size-sm);
|
|
12
|
+
}
|
|
13
|
+
&[data-size=lg] {
|
|
14
|
+
font-size: var(--icon-size-lg);
|
|
15
|
+
}
|
|
16
|
+
&[data-size=inherit] {
|
|
17
|
+
font-size: inherit;
|
|
18
|
+
}
|
|
19
|
+
& > * {
|
|
20
|
+
inline-size: 100%;
|
|
21
|
+
block-size: 100%;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/* src/visually-hidden/VisuallyHidden.module.css */
|
|
27
|
+
@layer components {
|
|
28
|
+
.VisuallyHidden_root {
|
|
29
|
+
position: absolute;
|
|
30
|
+
inline-size: var(--visually-hidden-size);
|
|
31
|
+
block-size: var(--visually-hidden-size);
|
|
32
|
+
padding: 0;
|
|
33
|
+
margin: 0;
|
|
34
|
+
overflow: hidden;
|
|
35
|
+
clip-path: inset(50%);
|
|
36
|
+
white-space: nowrap;
|
|
37
|
+
border: 0;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/* src/spinner/Spinner.module.css */
|
|
42
|
+
@layer components {
|
|
43
|
+
.Spinner_spinner {
|
|
44
|
+
--_size: var(--spinner-size-md);
|
|
45
|
+
--_track: var(--spinner-track);
|
|
46
|
+
--_indicator: var(--spinner-indicator);
|
|
47
|
+
display: inline-flex;
|
|
48
|
+
flex: none;
|
|
49
|
+
inline-size: var(--_size);
|
|
50
|
+
block-size: var(--_size);
|
|
51
|
+
vertical-align: middle;
|
|
52
|
+
&[data-size=sm] {
|
|
53
|
+
--_size: var(--spinner-size-sm);
|
|
54
|
+
}
|
|
55
|
+
&[data-size=lg] {
|
|
56
|
+
--_size: var(--spinner-size-lg);
|
|
57
|
+
}
|
|
58
|
+
&[data-size=inherit] {
|
|
59
|
+
--_size: 1em;
|
|
60
|
+
}
|
|
61
|
+
&[data-tone=inherit] {
|
|
62
|
+
--_track: transparent;
|
|
63
|
+
--_indicator: currentcolor;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
.Spinner_ring {
|
|
67
|
+
inline-size: 100%;
|
|
68
|
+
block-size: 100%;
|
|
69
|
+
border: var(--spinner-width) solid var(--_track);
|
|
70
|
+
border-block-start-color: var(--_indicator);
|
|
71
|
+
border-radius: var(--radius-full);
|
|
72
|
+
animation: Spinner_spin var(--spinner-duration) linear infinite;
|
|
73
|
+
}
|
|
74
|
+
@keyframes Spinner_spin {
|
|
75
|
+
to {
|
|
76
|
+
rotate: 1turn;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
@media (prefers-reduced-motion: reduce) {
|
|
80
|
+
.Spinner_ring {
|
|
81
|
+
animation: none;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/* src/button/Button.module.css */
|
|
87
|
+
@layer components {
|
|
88
|
+
.Button_button {
|
|
89
|
+
display: inline-flex;
|
|
90
|
+
align-items: center;
|
|
91
|
+
justify-content: center;
|
|
92
|
+
gap: var(--button-gap);
|
|
93
|
+
min-block-size: var(--button-height-md);
|
|
94
|
+
padding-block: 0;
|
|
95
|
+
padding-inline: var(--button-padding-inline-md);
|
|
96
|
+
border: 1px solid transparent;
|
|
97
|
+
border-radius: var(--button-radius);
|
|
98
|
+
font-family: var(--button-font-family);
|
|
99
|
+
font-size: var(--button-font-size-md);
|
|
100
|
+
font-weight: var(--button-font-weight);
|
|
101
|
+
line-height: 1;
|
|
102
|
+
text-decoration: none;
|
|
103
|
+
white-space: nowrap;
|
|
104
|
+
cursor: pointer;
|
|
105
|
+
user-select: none;
|
|
106
|
+
transition:
|
|
107
|
+
background-color var(--button-motion-duration) var(--motion-easing-standard),
|
|
108
|
+
border-color var(--button-motion-duration) var(--motion-easing-standard),
|
|
109
|
+
color var(--button-motion-duration) var(--motion-easing-standard);
|
|
110
|
+
&:focus-visible {
|
|
111
|
+
outline: var(--button-focus-ring-width) solid var(--button-focus-ring);
|
|
112
|
+
outline-offset: var(--button-focus-ring-offset);
|
|
113
|
+
}
|
|
114
|
+
&:disabled,
|
|
115
|
+
&[aria-disabled=true] {
|
|
116
|
+
cursor: not-allowed;
|
|
117
|
+
opacity: 0.55;
|
|
118
|
+
}
|
|
119
|
+
&[data-loading] {
|
|
120
|
+
cursor: progress;
|
|
121
|
+
}
|
|
122
|
+
&[data-size=sm] {
|
|
123
|
+
min-block-size: var(--button-height-sm);
|
|
124
|
+
padding-inline: var(--button-padding-inline-sm);
|
|
125
|
+
font-size: var(--button-font-size-sm);
|
|
126
|
+
}
|
|
127
|
+
&[data-size=lg] {
|
|
128
|
+
min-block-size: var(--button-height-lg);
|
|
129
|
+
padding-inline: var(--button-padding-inline-lg);
|
|
130
|
+
font-size: var(--button-font-size-lg);
|
|
131
|
+
}
|
|
132
|
+
&[data-variant=primary] {
|
|
133
|
+
background-color: var(--button-primary-bg);
|
|
134
|
+
color: var(--button-primary-fg);
|
|
135
|
+
&:hover:not(:disabled, [aria-disabled=true]) {
|
|
136
|
+
background-color: var(--button-primary-bg-hover);
|
|
137
|
+
}
|
|
138
|
+
&:active:not(:disabled, [aria-disabled=true]) {
|
|
139
|
+
background-color: var(--button-primary-bg-active);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
&[data-variant=secondary] {
|
|
143
|
+
background-color: var(--button-secondary-bg);
|
|
144
|
+
border-color: var(--button-secondary-border);
|
|
145
|
+
color: var(--button-secondary-fg);
|
|
146
|
+
&:hover:not(:disabled, [aria-disabled=true]) {
|
|
147
|
+
background-color: var(--button-secondary-bg-hover);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
&[data-variant=ghost] {
|
|
151
|
+
background-color: transparent;
|
|
152
|
+
color: var(--button-ghost-fg);
|
|
153
|
+
&:hover:not(:disabled, [aria-disabled=true]) {
|
|
154
|
+
background-color: var(--button-ghost-bg-hover);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
.Button_label {
|
|
159
|
+
display: inline-block;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
/* src/icon-button/IconButton.module.css */
|
|
164
|
+
@layer components {
|
|
165
|
+
.IconButton_iconButton[data-icon-only] {
|
|
166
|
+
gap: 0;
|
|
167
|
+
inline-size: var(--icon-button-size-md);
|
|
168
|
+
padding-inline: 0;
|
|
169
|
+
&[data-size=sm] {
|
|
170
|
+
inline-size: var(--icon-button-size-sm);
|
|
171
|
+
}
|
|
172
|
+
&[data-size=lg] {
|
|
173
|
+
inline-size: var(--icon-button-size-lg);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
/* src/pagination/Pagination.module.css */
|
|
179
|
+
@layer components {
|
|
180
|
+
.Pagination_root {
|
|
181
|
+
--_size: var(--pagination-ellipsis-size-md);
|
|
182
|
+
--_font-size: var(--pagination-font-size-md);
|
|
183
|
+
font-family: var(--pagination-font-family);
|
|
184
|
+
&[data-size=sm] {
|
|
185
|
+
--_size: var(--pagination-ellipsis-size-sm);
|
|
186
|
+
--_font-size: var(--pagination-font-size-sm);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
.Pagination_list {
|
|
190
|
+
display: flex;
|
|
191
|
+
flex-wrap: wrap;
|
|
192
|
+
align-items: center;
|
|
193
|
+
gap: var(--pagination-gap);
|
|
194
|
+
padding: 0;
|
|
195
|
+
margin: 0;
|
|
196
|
+
list-style: none;
|
|
197
|
+
}
|
|
198
|
+
.Pagination_page {
|
|
199
|
+
min-inline-size: var(--_size);
|
|
200
|
+
padding-inline: 0;
|
|
201
|
+
font-variant-numeric: tabular-nums;
|
|
202
|
+
}
|
|
203
|
+
.Pagination_ellipsis {
|
|
204
|
+
display: grid;
|
|
205
|
+
place-items: center;
|
|
206
|
+
min-inline-size: var(--_size);
|
|
207
|
+
block-size: var(--_size);
|
|
208
|
+
color: var(--pagination-ellipsis-fg);
|
|
209
|
+
font-size: var(--_font-size);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
/*# sourceMappingURL=pagination.css.map */
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/icon/Icon.module.css","../src/visually-hidden/VisuallyHidden.module.css","../src/spinner/Spinner.module.css","../src/button/Button.module.css","../src/icon-button/IconButton.module.css","../src/pagination/Pagination.module.css"],"sourcesContent":["/* Every value is a token (--icon-*). The child SVG fills the box; colour is currentColor. */\n\n@layer components {\n .icon {\n display: inline-flex;\n flex: none;\n inline-size: 1em;\n block-size: 1em;\n font-size: var(--icon-size-md);\n vertical-align: middle;\n\n &[data-size=\"sm\"] { font-size: var(--icon-size-sm); }\n &[data-size=\"lg\"] { font-size: var(--icon-size-lg); }\n &[data-size=\"inherit\"] { font-size: inherit; }\n\n & > * {\n inline-size: 100%;\n block-size: 100%;\n }\n }\n}\n","/* The clip-path technique: present in the accessibility tree, absent from the layout. */\n\n@layer components {\n .root {\n position: absolute;\n inline-size: var(--visually-hidden-size);\n block-size: var(--visually-hidden-size);\n padding: 0;\n margin: 0;\n overflow: hidden;\n clip-path: inset(50%);\n white-space: nowrap;\n border: 0;\n }\n}\n","/* Every value is a token (--spinner-*). The ring is a border with one coloured side. */\n\n@layer components {\n .spinner {\n --_size: var(--spinner-size-md);\n --_track: var(--spinner-track);\n --_indicator: var(--spinner-indicator);\n\n display: inline-flex;\n flex: none;\n inline-size: var(--_size);\n block-size: var(--_size);\n vertical-align: middle;\n\n &[data-size=\"sm\"] { --_size: var(--spinner-size-sm); }\n &[data-size=\"lg\"] { --_size: var(--spinner-size-lg); }\n &[data-size=\"inherit\"] { --_size: 1em; }\n\n &[data-tone=\"inherit\"] {\n --_track: transparent;\n --_indicator: currentcolor;\n }\n }\n\n .ring {\n inline-size: 100%;\n block-size: 100%;\n border: var(--spinner-width) solid var(--_track);\n border-block-start-color: var(--_indicator);\n border-radius: var(--radius-full);\n animation: spin var(--spinner-duration) linear infinite;\n }\n\n @keyframes spin {\n to {\n rotate: 1turn;\n }\n }\n\n @media (prefers-reduced-motion: reduce) {\n .ring {\n animation: none;\n }\n }\n}\n","/*\n * Every value is a token. State is expressed through data attributes so the\n * styling hooks survive a change of styling tool, and so tests and agents can\n * read state off the DOM.\n */\n\n@layer components {\n .button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: var(--button-gap);\n min-block-size: var(--button-height-md);\n padding-block: 0;\n padding-inline: var(--button-padding-inline-md);\n border: 1px solid transparent;\n border-radius: var(--button-radius);\n font-family: var(--button-font-family);\n font-size: var(--button-font-size-md);\n font-weight: var(--button-font-weight);\n line-height: 1;\n text-decoration: none;\n white-space: nowrap;\n cursor: pointer;\n user-select: none;\n transition:\n background-color var(--button-motion-duration) var(--motion-easing-standard),\n border-color var(--button-motion-duration) var(--motion-easing-standard),\n color var(--button-motion-duration) var(--motion-easing-standard);\n\n &:focus-visible {\n outline: var(--button-focus-ring-width) solid var(--button-focus-ring);\n outline-offset: var(--button-focus-ring-offset);\n }\n\n &:disabled,\n &[aria-disabled=\"true\"] {\n cursor: not-allowed;\n opacity: 0.55;\n }\n\n &[data-loading] {\n cursor: progress;\n }\n\n &[data-size=\"sm\"] {\n min-block-size: var(--button-height-sm);\n padding-inline: var(--button-padding-inline-sm);\n font-size: var(--button-font-size-sm);\n }\n\n &[data-size=\"lg\"] {\n min-block-size: var(--button-height-lg);\n padding-inline: var(--button-padding-inline-lg);\n font-size: var(--button-font-size-lg);\n }\n\n &[data-variant=\"primary\"] {\n background-color: var(--button-primary-bg);\n color: var(--button-primary-fg);\n\n &:hover:not(:disabled, [aria-disabled=\"true\"]) {\n background-color: var(--button-primary-bg-hover);\n }\n\n &:active:not(:disabled, [aria-disabled=\"true\"]) {\n background-color: var(--button-primary-bg-active);\n }\n }\n\n &[data-variant=\"secondary\"] {\n background-color: var(--button-secondary-bg);\n border-color: var(--button-secondary-border);\n color: var(--button-secondary-fg);\n\n &:hover:not(:disabled, [aria-disabled=\"true\"]) {\n background-color: var(--button-secondary-bg-hover);\n }\n }\n\n &[data-variant=\"ghost\"] {\n background-color: transparent;\n color: var(--button-ghost-fg);\n\n &:hover:not(:disabled, [aria-disabled=\"true\"]) {\n background-color: var(--button-ghost-bg-hover);\n }\n }\n }\n\n .label {\n display: inline-block;\n }\n}\n","/* Squares a Button. Selectors carry the data attribute so they outrank Button's own size rules. */\n\n@layer components {\n .iconButton[data-icon-only] {\n gap: 0;\n inline-size: var(--icon-button-size-md);\n padding-inline: 0;\n\n &[data-size=\"sm\"] { inline-size: var(--icon-button-size-sm); }\n &[data-size=\"lg\"] { inline-size: var(--icon-button-size-lg); }\n }\n}\n","/* Every value is a token (--pagination-*). The controls are Buttons; this file lays them out. */\n\n@layer components {\n .root {\n --_size: var(--pagination-ellipsis-size-md);\n --_font-size: var(--pagination-font-size-md);\n\n font-family: var(--pagination-font-family);\n\n &[data-size=\"sm\"] {\n --_size: var(--pagination-ellipsis-size-sm);\n --_font-size: var(--pagination-font-size-sm);\n }\n }\n\n .list {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--pagination-gap);\n padding: 0;\n margin: 0;\n list-style: none;\n }\n\n .page {\n min-inline-size: var(--_size);\n padding-inline: 0;\n font-variant-numeric: tabular-nums;\n }\n\n .ellipsis {\n display: grid;\n place-items: center;\n min-inline-size: var(--_size);\n block-size: var(--_size);\n color: var(--pagination-ellipsis-fg);\n font-size: var(--_font-size);\n }\n}\n"],"mappings":"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","names":["icon","root","spinner","ring","spin","button","label","iconButton","root","list","page","ellipsis"]}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import * as react from 'react';
|
|
2
|
+
import { HTMLAttributes, Ref } from 'react';
|
|
3
|
+
|
|
4
|
+
type PaginationSize = 'sm' | 'md';
|
|
5
|
+
interface PaginationProps extends Omit<HTMLAttributes<HTMLElement>, 'onChange'> {
|
|
6
|
+
/** The current page, 1-based. */
|
|
7
|
+
page: number;
|
|
8
|
+
/** Total number of pages. */
|
|
9
|
+
count: number;
|
|
10
|
+
onPageChange?: (page: number) => void;
|
|
11
|
+
/** Pages shown on each side of the current one. @default 1 */
|
|
12
|
+
siblings?: number;
|
|
13
|
+
/** Pages always shown at each end. @default 1 */
|
|
14
|
+
boundaries?: number;
|
|
15
|
+
/** Render pages as links (server-side or router pagination) instead of buttons. */
|
|
16
|
+
getHref?: (page: number) => string;
|
|
17
|
+
/** @default 'md' */
|
|
18
|
+
size?: PaginationSize;
|
|
19
|
+
/** The landmark's name. @default 'Pagination' */
|
|
20
|
+
'aria-label'?: string;
|
|
21
|
+
/** @default 'Previous page' */
|
|
22
|
+
previousLabel?: string;
|
|
23
|
+
/** @default 'Next page' */
|
|
24
|
+
nextLabel?: string;
|
|
25
|
+
/** Accessible name of a page control. @default (n) => `Page ${n}` */
|
|
26
|
+
pageLabel?: (page: number) => string;
|
|
27
|
+
ref?: Ref<HTMLElement>;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Page controls in a `nav` landmark: previous, numbered pages with the
|
|
31
|
+
* current one marked `aria-current="page"`, and next. Distant pages
|
|
32
|
+
* collapse into an ellipsis. Buttons by default; `getHref` renders links so
|
|
33
|
+
* the pages are crawlable and open in new tabs. Built from Button and
|
|
34
|
+
* IconButton, so it needs no keyboard model of its own.
|
|
35
|
+
*
|
|
36
|
+
* @status experimental
|
|
37
|
+
* @category Navigation
|
|
38
|
+
* @accessibility A `nav` landmark named by `aria-label`; the current page carries `aria-current="page"`; previous and next are IconButtons with names; ellipses are hidden from assistive technology. With `getHref` the controls are links.
|
|
39
|
+
* @do Use `getHref` when pages have URLs so they can be opened in new tabs and crawled.
|
|
40
|
+
* Keep `siblings` at 1 on narrow screens.
|
|
41
|
+
* @dont Disable the whole component while a page loads; disable only what cannot be pressed.
|
|
42
|
+
*/
|
|
43
|
+
declare function Pagination({ page, count, onPageChange, siblings, boundaries, getHref, size, 'aria-label': ariaLabel, previousLabel, nextLabel, pageLabel, className, ref, ...rest }: PaginationProps): react.JSX.Element;
|
|
44
|
+
declare namespace Pagination {
|
|
45
|
+
var displayName: string;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
type PaginationItem = number | 'start-ellipsis' | 'end-ellipsis';
|
|
49
|
+
/** Which pages to show: boundaries at both ends, siblings around the current page, ellipses for the rest. */
|
|
50
|
+
declare function paginationRange(page: number, count: number, siblings: number, boundaries: number): PaginationItem[];
|
|
51
|
+
|
|
52
|
+
export { Pagination, type PaginationItem, type PaginationProps, type PaginationSize, paginationRange };
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export { Pagination, paginationRange } from './chunk-K5QGGQOV.js';
|
|
2
|
+
import './chunk-FXRSZUDH.js';
|
|
3
|
+
import './chunk-KPQGS4PG.js';
|
|
4
|
+
import './chunk-I4KC4V6A.js';
|
|
5
|
+
import './chunk-ZVDN3GRI.js';
|
|
6
|
+
import './chunk-Z4PN6B2C.js';
|
|
7
|
+
import './chunk-ASNTNTJW.js';
|
|
8
|
+
import './chunk-MI4QUKQS.js';
|
|
9
|
+
//# sourceMappingURL=pagination.js.map
|
|
10
|
+
//# sourceMappingURL=pagination.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"pagination.js"}
|
package/dist/picker.css
ADDED
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
/* src/icon/Icon.module.css */
|
|
2
|
+
@layer components {
|
|
3
|
+
.Icon_icon {
|
|
4
|
+
display: inline-flex;
|
|
5
|
+
flex: none;
|
|
6
|
+
inline-size: 1em;
|
|
7
|
+
block-size: 1em;
|
|
8
|
+
font-size: var(--icon-size-md);
|
|
9
|
+
vertical-align: middle;
|
|
10
|
+
&[data-size=sm] {
|
|
11
|
+
font-size: var(--icon-size-sm);
|
|
12
|
+
}
|
|
13
|
+
&[data-size=lg] {
|
|
14
|
+
font-size: var(--icon-size-lg);
|
|
15
|
+
}
|
|
16
|
+
&[data-size=inherit] {
|
|
17
|
+
font-size: inherit;
|
|
18
|
+
}
|
|
19
|
+
& > * {
|
|
20
|
+
inline-size: 100%;
|
|
21
|
+
block-size: 100%;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/* src/internal/AriaField.module.css */
|
|
27
|
+
@layer components {
|
|
28
|
+
.AriaField_field {
|
|
29
|
+
display: flex;
|
|
30
|
+
flex-direction: column;
|
|
31
|
+
gap: var(--field-gap);
|
|
32
|
+
font-family: var(--font-family-body);
|
|
33
|
+
}
|
|
34
|
+
.AriaField_label {
|
|
35
|
+
font-size: var(--field-label-font-size);
|
|
36
|
+
font-weight: var(--field-label-font-weight);
|
|
37
|
+
color: var(--field-label-fg);
|
|
38
|
+
}
|
|
39
|
+
.AriaField_required {
|
|
40
|
+
margin-inline-start: var(--field-required-gap);
|
|
41
|
+
color: var(--field-required-fg);
|
|
42
|
+
}
|
|
43
|
+
.AriaField_description {
|
|
44
|
+
margin: 0;
|
|
45
|
+
font-size: var(--field-description-font-size);
|
|
46
|
+
color: var(--field-description-fg);
|
|
47
|
+
}
|
|
48
|
+
.AriaField_error {
|
|
49
|
+
margin: 0;
|
|
50
|
+
font-size: var(--field-error-font-size);
|
|
51
|
+
color: var(--field-error-fg);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/* src/listbox/Listbox.module.css */
|
|
56
|
+
@layer components {
|
|
57
|
+
.Listbox_list {
|
|
58
|
+
display: flex;
|
|
59
|
+
flex-direction: column;
|
|
60
|
+
max-block-size: var(--listbox-max-height);
|
|
61
|
+
padding: var(--listbox-padding);
|
|
62
|
+
overflow: auto;
|
|
63
|
+
border: var(--size-hairline) solid var(--listbox-border);
|
|
64
|
+
border-radius: var(--listbox-radius);
|
|
65
|
+
background-color: var(--listbox-bg);
|
|
66
|
+
color: var(--listbox-fg);
|
|
67
|
+
font-family: var(--listbox-font-family);
|
|
68
|
+
font-size: var(--listbox-font-size);
|
|
69
|
+
outline: none;
|
|
70
|
+
&[data-focus-visible] {
|
|
71
|
+
outline: var(--listbox-focus-ring-width) solid var(--listbox-focus-ring);
|
|
72
|
+
outline-offset: var(--listbox-focus-ring-offset);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
.Listbox_check {
|
|
76
|
+
flex: none;
|
|
77
|
+
visibility: hidden;
|
|
78
|
+
color: var(--listbox-item-check);
|
|
79
|
+
}
|
|
80
|
+
.Listbox_item {
|
|
81
|
+
display: flex;
|
|
82
|
+
align-items: center;
|
|
83
|
+
gap: var(--listbox-item-gap);
|
|
84
|
+
padding-block: var(--listbox-item-padding-block);
|
|
85
|
+
padding-inline: var(--listbox-item-padding-inline);
|
|
86
|
+
border-radius: var(--listbox-item-radius);
|
|
87
|
+
color: var(--listbox-item-fg);
|
|
88
|
+
cursor: default;
|
|
89
|
+
outline: none;
|
|
90
|
+
&[data-hovered],
|
|
91
|
+
&[data-focused] {
|
|
92
|
+
background-color: var(--listbox-item-bg-focus);
|
|
93
|
+
}
|
|
94
|
+
&[data-selected] {
|
|
95
|
+
background-color: var(--listbox-item-bg-selected);
|
|
96
|
+
.Listbox_check {
|
|
97
|
+
visibility: visible;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
&[data-disabled] {
|
|
101
|
+
color: var(--listbox-item-fg-disabled);
|
|
102
|
+
cursor: not-allowed;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
.Listbox_itemBody {
|
|
106
|
+
display: flex;
|
|
107
|
+
flex-direction: column;
|
|
108
|
+
min-inline-size: 0;
|
|
109
|
+
}
|
|
110
|
+
.Listbox_itemLabel {
|
|
111
|
+
overflow: hidden;
|
|
112
|
+
text-overflow: ellipsis;
|
|
113
|
+
white-space: nowrap;
|
|
114
|
+
}
|
|
115
|
+
.Listbox_itemDescription {
|
|
116
|
+
color: var(--listbox-item-fg-muted);
|
|
117
|
+
font-size: var(--listbox-item-description-font-size);
|
|
118
|
+
}
|
|
119
|
+
.Listbox_empty {
|
|
120
|
+
padding: var(--listbox-empty-padding);
|
|
121
|
+
color: var(--listbox-empty-fg);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/* src/picker/Picker.module.css */
|
|
126
|
+
@layer components {
|
|
127
|
+
.Picker_root {
|
|
128
|
+
--_height: var(--picker-height-md);
|
|
129
|
+
--_font-size: var(--picker-font-size-md);
|
|
130
|
+
--_border: var(--picker-border-default);
|
|
131
|
+
font-family: var(--picker-font-family);
|
|
132
|
+
&[data-size=sm] {
|
|
133
|
+
--_height: var(--picker-height-sm);
|
|
134
|
+
--_font-size: var(--picker-font-size-sm);
|
|
135
|
+
}
|
|
136
|
+
&[data-size=lg] {
|
|
137
|
+
--_height: var(--picker-height-lg);
|
|
138
|
+
--_font-size: var(--picker-font-size-lg);
|
|
139
|
+
}
|
|
140
|
+
&[data-invalid] {
|
|
141
|
+
--_border: var(--picker-border-invalid);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
.Picker_trigger {
|
|
145
|
+
display: flex;
|
|
146
|
+
align-items: center;
|
|
147
|
+
gap: var(--picker-gap);
|
|
148
|
+
inline-size: 100%;
|
|
149
|
+
min-block-size: var(--_height);
|
|
150
|
+
padding-block: 0;
|
|
151
|
+
padding-inline: var(--picker-padding-inline);
|
|
152
|
+
border: var(--size-hairline) solid var(--_border);
|
|
153
|
+
border-radius: var(--picker-radius);
|
|
154
|
+
background-color: var(--picker-bg);
|
|
155
|
+
color: var(--picker-fg);
|
|
156
|
+
font-family: inherit;
|
|
157
|
+
font-size: var(--_font-size);
|
|
158
|
+
text-align: start;
|
|
159
|
+
cursor: pointer;
|
|
160
|
+
transition: border-color var(--picker-motion-duration) var(--motion-easing-standard);
|
|
161
|
+
&[data-focus-visible] {
|
|
162
|
+
border-color: var(--picker-border-focus);
|
|
163
|
+
outline: var(--picker-focus-ring-width) solid var(--picker-focus-ring);
|
|
164
|
+
outline-offset: var(--picker-focus-ring-offset);
|
|
165
|
+
}
|
|
166
|
+
&[data-disabled] {
|
|
167
|
+
cursor: not-allowed;
|
|
168
|
+
opacity: 0.55;
|
|
169
|
+
}
|
|
170
|
+
&[data-hovered]:not([data-focus-visible], [data-disabled]) {
|
|
171
|
+
border-color: var(--picker-border-hover);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
.Picker_value {
|
|
175
|
+
flex: 1;
|
|
176
|
+
overflow: hidden;
|
|
177
|
+
text-overflow: ellipsis;
|
|
178
|
+
white-space: nowrap;
|
|
179
|
+
&[data-placeholder] {
|
|
180
|
+
color: var(--picker-placeholder);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
.Picker_chevron {
|
|
184
|
+
flex: none;
|
|
185
|
+
color: var(--picker-icon);
|
|
186
|
+
}
|
|
187
|
+
.Picker_popover {
|
|
188
|
+
inline-size: var(--trigger-width);
|
|
189
|
+
padding-block-start: var(--picker-gap);
|
|
190
|
+
animation: Picker_fade var(--picker-popover-duration) var(--motion-easing-standard);
|
|
191
|
+
&[data-placement=top] {
|
|
192
|
+
padding-block: 0 var(--picker-gap);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
.Picker_list {
|
|
196
|
+
box-shadow: var(--picker-popover-shadow);
|
|
197
|
+
}
|
|
198
|
+
@keyframes Picker_fade {
|
|
199
|
+
from {
|
|
200
|
+
opacity: 0;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
@media (prefers-reduced-motion: reduce) {
|
|
204
|
+
.Picker_popover {
|
|
205
|
+
animation: none;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
/*# sourceMappingURL=picker.css.map */
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/icon/Icon.module.css","../src/internal/AriaField.module.css","../src/listbox/Listbox.module.css","../src/picker/Picker.module.css"],"sourcesContent":["/* Every value is a token (--icon-*). The child SVG fills the box; colour is currentColor. */\n\n@layer components {\n .icon {\n display: inline-flex;\n flex: none;\n inline-size: 1em;\n block-size: 1em;\n font-size: var(--icon-size-md);\n vertical-align: middle;\n\n &[data-size=\"sm\"] { font-size: var(--icon-size-sm); }\n &[data-size=\"lg\"] { font-size: var(--icon-size-lg); }\n &[data-size=\"inherit\"] { font-size: inherit; }\n\n & > * {\n inline-size: 100%;\n block-size: 100%;\n }\n }\n}\n","/* The same --field-* tokens Field reads, on React Aria's label, description and error parts. */\n\n@layer components {\n .field {\n display: flex;\n flex-direction: column;\n gap: var(--field-gap);\n font-family: var(--font-family-body);\n }\n\n .label {\n font-size: var(--field-label-font-size);\n font-weight: var(--field-label-font-weight);\n color: var(--field-label-fg);\n }\n\n .required {\n margin-inline-start: var(--field-required-gap);\n color: var(--field-required-fg);\n }\n\n .description {\n margin: 0;\n font-size: var(--field-description-font-size);\n color: var(--field-description-fg);\n }\n\n .error {\n margin: 0;\n font-size: var(--field-error-font-size);\n color: var(--field-error-fg);\n }\n}\n","/*\n * Every value is a token (--listbox-*). React Aria writes the state:\n * data-focused (real or virtual focus), data-selected, data-disabled,\n * data-hovered, data-focus-visible, data-empty. The tick is in the DOM for\n * every option and revealed by data-selected.\n */\n\n@layer components {\n .list {\n display: flex;\n flex-direction: column;\n max-block-size: var(--listbox-max-height);\n padding: var(--listbox-padding);\n overflow: auto;\n border: var(--size-hairline) solid var(--listbox-border);\n border-radius: var(--listbox-radius);\n background-color: var(--listbox-bg);\n color: var(--listbox-fg);\n font-family: var(--listbox-font-family);\n font-size: var(--listbox-font-size);\n outline: none;\n\n &[data-focus-visible] {\n outline: var(--listbox-focus-ring-width) solid var(--listbox-focus-ring);\n outline-offset: var(--listbox-focus-ring-offset);\n }\n }\n\n .check {\n flex: none;\n visibility: hidden;\n color: var(--listbox-item-check);\n }\n\n .item {\n display: flex;\n align-items: center;\n gap: var(--listbox-item-gap);\n padding-block: var(--listbox-item-padding-block);\n padding-inline: var(--listbox-item-padding-inline);\n border-radius: var(--listbox-item-radius);\n color: var(--listbox-item-fg);\n cursor: default;\n outline: none;\n\n &[data-hovered],\n &[data-focused] {\n background-color: var(--listbox-item-bg-focus);\n }\n\n &[data-selected] {\n background-color: var(--listbox-item-bg-selected);\n\n .check {\n visibility: visible;\n }\n }\n\n &[data-disabled] {\n color: var(--listbox-item-fg-disabled);\n cursor: not-allowed;\n }\n }\n\n .itemBody {\n display: flex;\n flex-direction: column;\n min-inline-size: 0;\n }\n\n .itemLabel {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .itemDescription {\n color: var(--listbox-item-fg-muted);\n font-size: var(--listbox-item-description-font-size);\n }\n\n .empty {\n padding: var(--listbox-empty-padding);\n color: var(--listbox-empty-fg);\n }\n}\n","/*\n * Every value is a token (--picker-*); the options read --listbox-*. The\n * trigger is a button drawn like a text field. The popover is positioned by\n * React Aria; the gap is its own padding and --trigger-width (vendor) sizes it.\n */\n\n@layer components {\n .root {\n --_height: var(--picker-height-md);\n --_font-size: var(--picker-font-size-md);\n --_border: var(--picker-border-default);\n\n font-family: var(--picker-font-family);\n\n &[data-size=\"sm\"] {\n --_height: var(--picker-height-sm);\n --_font-size: var(--picker-font-size-sm);\n }\n\n &[data-size=\"lg\"] {\n --_height: var(--picker-height-lg);\n --_font-size: var(--picker-font-size-lg);\n }\n\n &[data-invalid] { --_border: var(--picker-border-invalid); }\n }\n\n .trigger {\n display: flex;\n align-items: center;\n gap: var(--picker-gap);\n inline-size: 100%;\n min-block-size: var(--_height);\n padding-block: 0;\n padding-inline: var(--picker-padding-inline);\n border: var(--size-hairline) solid var(--_border);\n border-radius: var(--picker-radius);\n background-color: var(--picker-bg);\n color: var(--picker-fg);\n font-family: inherit;\n font-size: var(--_font-size);\n text-align: start;\n cursor: pointer;\n transition: border-color var(--picker-motion-duration) var(--motion-easing-standard);\n\n &[data-focus-visible] {\n border-color: var(--picker-border-focus);\n outline: var(--picker-focus-ring-width) solid var(--picker-focus-ring);\n outline-offset: var(--picker-focus-ring-offset);\n }\n\n &[data-disabled] {\n cursor: not-allowed;\n opacity: 0.55;\n }\n\n &[data-hovered]:not([data-focus-visible], [data-disabled]) {\n border-color: var(--picker-border-hover);\n }\n }\n\n .value {\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n\n &[data-placeholder] {\n color: var(--picker-placeholder);\n }\n }\n\n .chevron {\n flex: none;\n color: var(--picker-icon);\n }\n\n .popover {\n inline-size: var(--trigger-width);\n padding-block-start: var(--picker-gap);\n animation: fade var(--picker-popover-duration) var(--motion-easing-standard);\n\n &[data-placement=\"top\"] {\n padding-block: 0 var(--picker-gap);\n }\n }\n\n .list {\n box-shadow: var(--picker-popover-shadow);\n }\n\n @keyframes fade {\n from {\n opacity: 0;\n }\n }\n\n @media (prefers-reduced-motion: reduce) {\n .popover {\n animation: none;\n }\n }\n}\n"],"mappings":"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","names":["icon","field","label","required","description","error","list","check","item","itemBody","itemLabel","itemDescription","empty","root","trigger","value","chevron","popover","list","fade"]}
|
package/dist/picker.d.ts
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import * as react from 'react';
|
|
2
|
+
import { ReactNode, Ref } from 'react';
|
|
3
|
+
import { L as ListboxItem } from './ListboxOptions-DLsT-dkV.js';
|
|
4
|
+
|
|
5
|
+
type PickerItem = ListboxItem;
|
|
6
|
+
type PickerSize = 'sm' | 'md' | 'lg';
|
|
7
|
+
interface PickerProps {
|
|
8
|
+
/** Visible label. Always rendered. */
|
|
9
|
+
label: ReactNode;
|
|
10
|
+
description?: ReactNode;
|
|
11
|
+
/** Presence marks the control invalid and announces the message. */
|
|
12
|
+
error?: ReactNode;
|
|
13
|
+
/** The options. Ids are the values. */
|
|
14
|
+
items: readonly PickerItem[];
|
|
15
|
+
/** Selected id (controlled). `null` is "nothing selected". */
|
|
16
|
+
value?: string | null;
|
|
17
|
+
defaultValue?: string | null;
|
|
18
|
+
onChange?: (value: string | null) => void;
|
|
19
|
+
/** Shown in the control until a value is chosen. @default 'Select…' */
|
|
20
|
+
placeholder?: string;
|
|
21
|
+
/** Shown when `items` is empty. @default 'No options' */
|
|
22
|
+
emptyMessage?: ReactNode;
|
|
23
|
+
/** @default 'md' */
|
|
24
|
+
size?: PickerSize;
|
|
25
|
+
/** @default false */
|
|
26
|
+
required?: boolean;
|
|
27
|
+
/** @default false */
|
|
28
|
+
disabled?: boolean;
|
|
29
|
+
/** Submitted with a form through a hidden native select. */
|
|
30
|
+
name?: string;
|
|
31
|
+
autoFocus?: boolean;
|
|
32
|
+
/** Applied to the field wrapper, not the button. */
|
|
33
|
+
className?: string;
|
|
34
|
+
/** The trigger `<button>`. */
|
|
35
|
+
ref?: Ref<HTMLButtonElement>;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* A single-choice select with rich options (a description line, consistent
|
|
39
|
+
* styling in every browser), on React Aria's select (decision record 001):
|
|
40
|
+
* a button opens a listbox, arrows and typing move, Enter chooses, Escape
|
|
41
|
+
* closes, and a hidden native select carries the value in forms. For a
|
|
42
|
+
* plain list of words, the native `Select` is the default; for several
|
|
43
|
+
* choices at once, use Listbox.
|
|
44
|
+
*
|
|
45
|
+
* @status experimental
|
|
46
|
+
* @category Forms
|
|
47
|
+
* @accessibility A `button` named by the label with `aria-haspopup="listbox"` and `aria-expanded`; the popup is a `listbox` with selected and disabled options; a hidden native select carries `name` and value for forms. Arrows open and move, typing jumps, Enter chooses, Escape closes and returns focus.
|
|
48
|
+
* @do Use a `description` line on options when the label alone is ambiguous.
|
|
49
|
+
* Prefer the native Select for a plain list of words.
|
|
50
|
+
* @dont Use `placeholder` as the only label.
|
|
51
|
+
*/
|
|
52
|
+
declare function Picker({ label, description, error, items, value, defaultValue, onChange, placeholder, emptyMessage, size, required, disabled, name, autoFocus, className, ref, }: PickerProps): react.JSX.Element;
|
|
53
|
+
declare namespace Picker {
|
|
54
|
+
var displayName: string;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export { Picker, type PickerItem, type PickerProps, type PickerSize };
|