@usableapp/cardds 0.2.2 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (103) hide show
  1. package/README.md +35 -107
  2. package/cardds.js +6 -449
  3. package/css/actions.css +41 -35
  4. package/css/base.css +9 -9
  5. package/css/card.css +26 -25
  6. package/css/choice.css +50 -50
  7. package/css/forms.css +18 -18
  8. package/css/journey.css +16 -16
  9. package/css/layover.css +45 -45
  10. package/css/lists.css +43 -43
  11. package/css/media.css +33 -33
  12. package/css/numbers.css +25 -25
  13. package/css/people.css +11 -11
  14. package/css/sheet.css +29 -29
  15. package/css/step.css +6 -6
  16. package/css/theme.template.css +6 -3
  17. package/css/tokens.css +2 -0
  18. package/dist/actions/Btn.d.ts +109 -108
  19. package/dist/actions/BtnRow.d.ts +2 -2
  20. package/dist/actions/Chip.d.ts +102 -101
  21. package/dist/actions/Dot.d.ts +2 -2
  22. package/dist/actions/Dropdown.d.ts +36 -19
  23. package/dist/actions/Dropdown.js +41 -11
  24. package/dist/actions/Fab.d.ts +2 -2
  25. package/dist/actions/IconBtn.d.ts +298 -10
  26. package/dist/actions/IconBtn.js +6 -8
  27. package/dist/actions/Link.d.ts +105 -104
  28. package/dist/actions/Segment.d.ts +3 -3
  29. package/dist/cardds.css +354 -345
  30. package/dist/cards/Card.d.ts +99 -98
  31. package/dist/cards/CardFoot.d.ts +2 -2
  32. package/dist/cards/CardHead.d.ts +2 -2
  33. package/dist/cards/CardParts.d.ts +7 -7
  34. package/dist/cards/Placeholder.d.ts +2 -2
  35. package/dist/cards/Stat.d.ts +7 -5
  36. package/dist/cards/Stat.js +2 -2
  37. package/dist/choice/Calendar.d.ts +17 -6
  38. package/dist/choice/Calendar.js +9 -3
  39. package/dist/choice/Check.d.ts +3 -3
  40. package/dist/choice/DayStrip.d.ts +3 -3
  41. package/dist/choice/Mood.d.ts +2 -2
  42. package/dist/choice/Slider.d.ts +3 -3
  43. package/dist/choice/Slider.js +12 -8
  44. package/dist/forms/AddRow.d.ts +2 -2
  45. package/dist/forms/Composer.d.ts +2 -2
  46. package/dist/forms/Field.d.ts +2 -2
  47. package/dist/forms/FileBtn.d.ts +2 -2
  48. package/dist/forms/Pin.d.ts +10 -7
  49. package/dist/forms/Pin.js +47 -18
  50. package/dist/journey/NoteRow.d.ts +2 -2
  51. package/dist/journey/Route.d.ts +2 -2
  52. package/dist/journey/TileBadge.d.ts +2 -2
  53. package/dist/layover/Banner.d.ts +2 -2
  54. package/dist/layover/Callout.d.ts +2 -2
  55. package/dist/layover/Deck.d.ts +3 -3
  56. package/dist/lists/Bubble.d.ts +3 -3
  57. package/dist/lists/Kv.d.ts +5 -5
  58. package/dist/lists/Legend.d.ts +3 -3
  59. package/dist/lists/Row.d.ts +5 -4
  60. package/dist/lists/Timeline.d.ts +3 -3
  61. package/dist/media/MapArea.d.ts +2 -2
  62. package/dist/media/Mosaic.d.ts +3 -3
  63. package/dist/media/Postcard.d.ts +9 -5
  64. package/dist/media/Postcard.js +8 -3
  65. package/dist/media/Quote.d.ts +2 -2
  66. package/dist/media/Tile.d.ts +5 -4
  67. package/dist/numbers/Badge.d.ts +2 -2
  68. package/dist/numbers/Band.d.ts +3 -3
  69. package/dist/numbers/Bars.d.ts +3 -3
  70. package/dist/numbers/DotGrid.d.ts +2 -2
  71. package/dist/numbers/Picker.d.ts +20 -8
  72. package/dist/numbers/Picker.js +51 -13
  73. package/dist/numbers/Ring.d.ts +2 -2
  74. package/dist/numbers/Track.d.ts +3 -3
  75. package/dist/people/Avatar.d.ts +100 -99
  76. package/dist/people/AvatarPick.d.ts +3 -3
  77. package/dist/scaffold/ActionBar.d.ts +3 -3
  78. package/dist/scaffold/AppBar.d.ts +2 -2
  79. package/dist/scaffold/BaseContent.d.ts +7 -7
  80. package/dist/scaffold/BaseContent.js +4 -4
  81. package/dist/scaffold/Centre.d.ts +3 -3
  82. package/dist/scaffold/EmptyState.d.ts +2 -2
  83. package/dist/scaffold/FilterRow.d.ts +2 -2
  84. package/dist/scaffold/FloatBar.d.ts +105 -104
  85. package/dist/scaffold/PagerAt.d.ts +2 -2
  86. package/dist/scaffold/Screen.d.ts +100 -99
  87. package/dist/scaffold/TopBar.d.ts +2 -2
  88. package/dist/sheets/CardBack.d.ts +2 -2
  89. package/dist/sheets/Drawer.d.ts +19 -8
  90. package/dist/sheets/Drawer.js +29 -5
  91. package/dist/sheets/Sheet.d.ts +29 -16
  92. package/dist/sheets/Sheet.js +157 -11
  93. package/dist/sheets/SheetBody.d.ts +2 -2
  94. package/dist/sheets/SheetHead.d.ts +2 -2
  95. package/dist/sheets/SheetStack.d.ts +15 -3
  96. package/dist/sheets/SheetStack.js +74 -2
  97. package/dist/sheets/SheetStage.d.ts +2 -2
  98. package/dist/sheets/Step.d.ts +2 -2
  99. package/dist/type/Icon.d.ts +22 -7
  100. package/dist/type/Icon.js +27 -4
  101. package/dist/type/Text.d.ts +7 -1
  102. package/dist/type/Text.js +2 -2
  103. package/package.json +3 -2
@@ -1,19 +1,49 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Children, createContext, isValidElement, useContext, useRef, useState } from 'react';
2
3
  import { cx } from '../cx.js';
3
4
  import { Icon } from '../type/Icon.js';
5
+ /* what a Menu tells its items: the value it holds (so the matching item marks itself current) and how to pick one */
6
+ const MenuContext = createContext(null);
7
+ /* a menu's value is controlled (`value` + `onChange`) or its own (`defaultValue`) — like an input */
8
+ function useValue(value, defaultValue, onChange) {
9
+ const [inner, setInner] = useState(defaultValue);
10
+ const current = value ?? inner;
11
+ const pick = (next) => { if (value === undefined)
12
+ setInner(next); if (next !== current)
13
+ onChange?.(next); };
14
+ return [current, pick];
15
+ }
4
16
  /**
5
- * Dropdown — THE select: a pill trigger + a Menu popover anchored under it (native popover: light dismiss, Esc).
6
- * Never a native `<select>`. Children are MenuItems; cardds.js copies the picked item's label into the pill
7
- * and fires "change" on the Dropdown. In a FilterRow dropdowns share the width.
17
+ * Dropdown — THE select: a pill trigger + its Menu popover anchored under it (native popover: light dismiss, Esc). Never a native
18
+ * `<select>`. ONE component, like `<select>` is — the pill and the panel are its own anatomy. It holds a VALUE, controlled like an
19
+ * input: `value` + `onChange`, or `defaultValue`. Children are MenuItems with a `value`; the chosen one is marked and names the pill.
20
+ * In a FilterRow dropdowns share the width.
8
21
  */
9
- export function Dropdown({ id, label, end, className, children, ...rest }) {
10
- return (_jsxs("div", { className: cx('dropdown', end && 'dropdown--end', className), ...rest, children: [_jsxs("button", { type: "button", className: "dropdown__btn", popoverTarget: id, children: [_jsx("span", { className: "dropdown__label", children: label }), _jsx(Icon, { name: "chevron-down", size: "xs" })] }), _jsx("div", { className: "menu", id: id, popover: "auto", children: children })] }));
22
+ export function Dropdown({ id, value, defaultValue, onChange, label, end, className, children, ...rest }) {
23
+ const [current, pick] = useValue(value, defaultValue, onChange);
24
+ const chosen = Children.toArray(children).find((c) => isValidElement(c) && c.props.value === current);
25
+ return (_jsxs("div", { className: cx('dropdown', end && 'dropdown--end', className), "data-value": current, ...rest, children: [_jsxs("button", { type: "button", className: "dropdown__btn", popoverTarget: id, children: [_jsx("span", { className: "dropdown__label", children: label ?? (isValidElement(chosen) ? chosen.props.children : null) }), _jsx(Icon, { name: "chevron-down", size: "xs" })] }), _jsx(Menu, { popover: true, id: id, value: current, onChange: pick, children: children })] }));
11
26
  }
12
- /** Menu — a card of MenuItems: a popover anchored to its button, or inline rows of icon + label. `actions` for a to-do list (IconBtn's), plain for a value (Dropdown's). */
13
- export function Menu({ popover, actions, end, className, ...rest }) {
14
- return _jsx("div", { className: cx('menu', actions && 'menu--actions', end && 'menu--end', className), popover: popover ? 'auto' : undefined, ...rest });
27
+ /**
28
+ * Menu — a card of MenuItems: a popover, or inline rows of icon + label. A COMPONENT on its own — what opens a popover Menu is any
29
+ * button carrying `popoverTarget={its id}` (HTML's own link; the panel anchors to that button). `actions` = a to-do list (plain
30
+ * `onClick`s); otherwise it holds a value (`value` + `onChange`, or `defaultValue`). Its one behaviour: picking an item closes it.
31
+ */
32
+ export function Menu({ popover, actions, value, defaultValue, onChange, end, className, onClick, ...rest }) {
33
+ const ref = useRef(null);
34
+ const [current, pick] = useValue(value, defaultValue, onChange);
35
+ const click = (e) => {
36
+ onClick?.(e);
37
+ const el = ref.current;
38
+ if (el && e.target.closest('.menu__item') && el.matches(':popover-open'))
39
+ el.hidePopover();
40
+ };
41
+ return (_jsx(MenuContext.Provider, { value: actions ? null : { value: current, pick }, children: _jsx("div", { ref: ref, className: cx('menu', actions && 'menu--actions', end && 'menu--end', className), popover: popover ? 'auto' : undefined, onClick: click, ...rest }) }));
15
42
  }
16
- /** MenuItem — one row in a Menu (48px tall): optional icon, label; the current one is filled. */
17
- export function MenuItem({ value, current, icon, className, children, ...rest }) {
18
- return (_jsxs("button", { type: "button", className: cx('menu__item', className), "data-value": value, "aria-current": current ? 'true' : undefined, ...rest, children: [icon && _jsx(Icon, { name: icon }), children] }));
43
+ /** MenuItem — one row in a Menu (48px tall): optional icon, label; the current one is filled. In an `actions` Menu give it an `onClick`. */
44
+ export function MenuItem({ value, current, icon, className, children, onClick, ...rest }) {
45
+ const menu = useContext(MenuContext);
46
+ const on = current ?? (menu?.value !== undefined && value !== undefined && menu.value === value);
47
+ return (_jsxs("button", { type: "button", className: cx('menu__item', className), "data-value": value, "aria-current": on ? 'true' : undefined, onClick: (e) => { onClick?.(e); if (!e.defaultPrevented && value !== undefined)
48
+ menu?.pick?.(value); }, ...rest, children: [icon && _jsx(Icon, { name: icon }), children] }));
19
49
  }
@@ -1,6 +1,6 @@
1
- import type { ComponentPropsWithoutRef } from 'react';
1
+ import type { ComponentProps } from 'react';
2
2
  import { type IconName } from '../type/Icon.js';
3
- export interface FabProps extends ComponentPropsWithoutRef<'button'> {
3
+ export interface FabProps extends ComponentProps<'button'> {
4
4
  label: string;
5
5
  icon?: IconName;
6
6
  invert?: boolean;
@@ -1,6 +1,6 @@
1
- import { type ComponentPropsWithoutRef, type ReactNode } from 'react';
1
+ import { type ComponentProps } from 'react';
2
2
  import { type IconName } from '../type/Icon.js';
3
- export interface IconBtnProps extends ComponentPropsWithoutRef<'button'> {
3
+ export interface IconBtnProps extends ComponentProps<'button'> {
4
4
  /** the accessible name — required, the button has no text */
5
5
  label: string;
6
6
  /** the icon to show (sized to the button); or pass an Icon as children */
@@ -11,13 +11,301 @@ export interface IconBtnProps extends ComponentPropsWithoutRef<'button'> {
11
11
  invert?: boolean;
12
12
  /** a link styled as a round button */
13
13
  href?: string;
14
- /** an actions menu the button opens (MenuItems) — the popover anchored under it, growing leftwards (`menuStart` for a left-side button); needs `menuId` */
15
- menu?: ReactNode;
16
- /** the menu popover's id (unique on the page) */
17
- menuId?: string;
18
- /** the button sits at the left: the panel grows rightwards */
19
- menuStart?: boolean;
20
14
  }
21
15
  /** IconBtn — the round icon button: `sm` in heads and bars, full size in rows and composers, `invert` for the one filled move.
22
- * With `menu` it gives the member options the way a Dropdown does — an actions Menu (edit, share, remove…) for the card or sheet it sits in. */
23
- export declare function IconBtn({ label, icon, sm, invert, href, menu, menuId, menuStart, className, type, children, ...rest }: IconBtnProps): import("react").JSX.Element;
16
+ * It is a button and nothing more: to open a Menu, give it the platform's `popoverTarget={the Menu's id}` and render that `<Menu popover actions id>`
17
+ * wherever you like — the panel anchors to the button that opened it. To open anything else, `onClick`. */
18
+ export declare function IconBtn({ label, icon, sm, invert, href, className, type, children, ...rest }: IconBtnProps): import("react").DetailedReactHTMLElement<{
19
+ ref?: import("react").Ref<HTMLButtonElement> | undefined;
20
+ key?: import("react").Key | null | undefined;
21
+ disabled?: boolean | undefined;
22
+ form?: string | undefined;
23
+ formAction?: string | ((formData: FormData) => void | Promise<void>) | import("react").DO_NOT_USE_OR_YOU_WILL_BE_FIRED_EXPERIMENTAL_FORM_ACTIONS[keyof import("react").DO_NOT_USE_OR_YOU_WILL_BE_FIRED_EXPERIMENTAL_FORM_ACTIONS] | undefined;
24
+ formEncType?: string | undefined;
25
+ formMethod?: string | undefined;
26
+ formNoValidate?: boolean | undefined;
27
+ formTarget?: string | undefined;
28
+ name?: string | undefined;
29
+ value?: string | readonly string[] | number | undefined;
30
+ defaultChecked?: boolean | undefined;
31
+ defaultValue?: string | number | readonly string[] | undefined;
32
+ suppressContentEditableWarning?: boolean | undefined;
33
+ suppressHydrationWarning?: boolean | undefined;
34
+ accessKey?: string | undefined;
35
+ autoCapitalize?: "off" | "none" | "on" | "sentences" | "words" | "characters" | undefined | (string & {});
36
+ autoFocus?: boolean | undefined;
37
+ contentEditable?: (boolean | "true" | "false") | "inherit" | "plaintext-only" | undefined;
38
+ contextMenu?: string | undefined;
39
+ dir?: string | undefined;
40
+ draggable?: (boolean | "true" | "false") | undefined;
41
+ enterKeyHint?: "enter" | "done" | "go" | "next" | "previous" | "search" | "send" | undefined;
42
+ hidden?: boolean | undefined;
43
+ id?: string | undefined;
44
+ lang?: string | undefined;
45
+ nonce?: string | undefined;
46
+ slot?: string | undefined;
47
+ spellCheck?: (boolean | "true" | "false") | undefined;
48
+ style?: import("react").CSSProperties | undefined;
49
+ tabIndex?: number | undefined;
50
+ title?: string | undefined;
51
+ translate?: "yes" | "no" | undefined;
52
+ radioGroup?: string | undefined;
53
+ role?: import("react").AriaRole | undefined;
54
+ about?: string | undefined;
55
+ content?: string | undefined;
56
+ datatype?: string | undefined;
57
+ inlist?: any;
58
+ prefix?: string | undefined;
59
+ property?: string | undefined;
60
+ rel?: string | undefined;
61
+ resource?: string | undefined;
62
+ rev?: string | undefined;
63
+ typeof?: string | undefined;
64
+ vocab?: string | undefined;
65
+ autoCorrect?: string | undefined;
66
+ autoSave?: string | undefined;
67
+ color?: string | undefined;
68
+ itemProp?: string | undefined;
69
+ itemScope?: boolean | undefined;
70
+ itemType?: string | undefined;
71
+ itemID?: string | undefined;
72
+ itemRef?: string | undefined;
73
+ results?: number | undefined;
74
+ security?: string | undefined;
75
+ unselectable?: "on" | "off" | undefined;
76
+ popover?: "" | "auto" | "manual" | "hint" | undefined;
77
+ popoverTargetAction?: "toggle" | "show" | "hide" | undefined;
78
+ popoverTarget?: string | undefined;
79
+ inert?: boolean | undefined;
80
+ inputMode?: "none" | "text" | "tel" | "url" | "email" | "numeric" | "decimal" | "search" | undefined;
81
+ is?: string | undefined;
82
+ exportparts?: string | undefined;
83
+ part?: string | undefined;
84
+ "aria-activedescendant"?: string | undefined;
85
+ "aria-atomic"?: (boolean | "true" | "false") | undefined;
86
+ "aria-autocomplete"?: "none" | "inline" | "list" | "both" | undefined;
87
+ "aria-braillelabel"?: string | undefined;
88
+ "aria-brailleroledescription"?: string | undefined;
89
+ "aria-busy"?: (boolean | "true" | "false") | undefined;
90
+ "aria-checked"?: boolean | "false" | "mixed" | "true" | undefined;
91
+ "aria-colcount"?: number | undefined;
92
+ "aria-colindex"?: number | undefined;
93
+ "aria-colindextext"?: string | undefined;
94
+ "aria-colspan"?: number | undefined;
95
+ "aria-controls"?: string | undefined;
96
+ "aria-current"?: boolean | "false" | "true" | "page" | "step" | "location" | "date" | "time" | undefined;
97
+ "aria-describedby"?: string | undefined;
98
+ "aria-description"?: string | undefined;
99
+ "aria-details"?: string | undefined;
100
+ "aria-disabled"?: (boolean | "true" | "false") | undefined;
101
+ "aria-dropeffect"?: "none" | "copy" | "execute" | "link" | "move" | "popup" | undefined;
102
+ "aria-errormessage"?: string | undefined;
103
+ "aria-expanded"?: (boolean | "true" | "false") | undefined;
104
+ "aria-flowto"?: string | undefined;
105
+ "aria-grabbed"?: (boolean | "true" | "false") | undefined;
106
+ "aria-haspopup"?: boolean | "false" | "true" | "menu" | "listbox" | "tree" | "grid" | "dialog" | undefined;
107
+ "aria-hidden"?: (boolean | "true" | "false") | undefined;
108
+ "aria-invalid"?: boolean | "false" | "true" | "grammar" | "spelling" | undefined;
109
+ "aria-keyshortcuts"?: string | undefined;
110
+ "aria-label": string;
111
+ "aria-labelledby"?: string | undefined;
112
+ "aria-level"?: number | undefined;
113
+ "aria-live"?: "off" | "assertive" | "polite" | undefined;
114
+ "aria-modal"?: (boolean | "true" | "false") | undefined;
115
+ "aria-multiline"?: (boolean | "true" | "false") | undefined;
116
+ "aria-multiselectable"?: (boolean | "true" | "false") | undefined;
117
+ "aria-orientation"?: "horizontal" | "vertical" | undefined;
118
+ "aria-owns"?: string | undefined;
119
+ "aria-placeholder"?: string | undefined;
120
+ "aria-posinset"?: number | undefined;
121
+ "aria-pressed"?: boolean | "false" | "mixed" | "true" | undefined;
122
+ "aria-readonly"?: (boolean | "true" | "false") | undefined;
123
+ "aria-relevant"?: "additions" | "additions removals" | "additions text" | "all" | "removals" | "removals additions" | "removals text" | "text" | "text additions" | "text removals" | undefined;
124
+ "aria-required"?: (boolean | "true" | "false") | undefined;
125
+ "aria-roledescription"?: string | undefined;
126
+ "aria-rowcount"?: number | undefined;
127
+ "aria-rowindex"?: number | undefined;
128
+ "aria-rowindextext"?: string | undefined;
129
+ "aria-rowspan"?: number | undefined;
130
+ "aria-selected"?: (boolean | "true" | "false") | undefined;
131
+ "aria-setsize"?: number | undefined;
132
+ "aria-sort"?: "none" | "ascending" | "descending" | "other" | undefined;
133
+ "aria-valuemax"?: number | undefined;
134
+ "aria-valuemin"?: number | undefined;
135
+ "aria-valuenow"?: number | undefined;
136
+ "aria-valuetext"?: string | undefined;
137
+ dangerouslySetInnerHTML?: {
138
+ __html: string | TrustedHTML;
139
+ } | undefined;
140
+ onCopy?: import("react").ClipboardEventHandler<HTMLButtonElement> | undefined;
141
+ onCopyCapture?: import("react").ClipboardEventHandler<HTMLButtonElement> | undefined;
142
+ onCut?: import("react").ClipboardEventHandler<HTMLButtonElement> | undefined;
143
+ onCutCapture?: import("react").ClipboardEventHandler<HTMLButtonElement> | undefined;
144
+ onPaste?: import("react").ClipboardEventHandler<HTMLButtonElement> | undefined;
145
+ onPasteCapture?: import("react").ClipboardEventHandler<HTMLButtonElement> | undefined;
146
+ onCompositionEnd?: import("react").CompositionEventHandler<HTMLButtonElement> | undefined;
147
+ onCompositionEndCapture?: import("react").CompositionEventHandler<HTMLButtonElement> | undefined;
148
+ onCompositionStart?: import("react").CompositionEventHandler<HTMLButtonElement> | undefined;
149
+ onCompositionStartCapture?: import("react").CompositionEventHandler<HTMLButtonElement> | undefined;
150
+ onCompositionUpdate?: import("react").CompositionEventHandler<HTMLButtonElement> | undefined;
151
+ onCompositionUpdateCapture?: import("react").CompositionEventHandler<HTMLButtonElement> | undefined;
152
+ onFocus?: import("react").FocusEventHandler<HTMLButtonElement> | undefined;
153
+ onFocusCapture?: import("react").FocusEventHandler<HTMLButtonElement> | undefined;
154
+ onBlur?: import("react").FocusEventHandler<HTMLButtonElement> | undefined;
155
+ onBlurCapture?: import("react").FocusEventHandler<HTMLButtonElement> | undefined;
156
+ onChange?: import("react").ChangeEventHandler<HTMLButtonElement, Element> | undefined;
157
+ onChangeCapture?: import("react").ChangeEventHandler<HTMLButtonElement, Element> | undefined;
158
+ onBeforeInput?: import("react").InputEventHandler<HTMLButtonElement> | undefined;
159
+ onBeforeInputCapture?: import("react").InputEventHandler<HTMLButtonElement> | undefined;
160
+ onInput?: import("react").InputEventHandler<HTMLButtonElement> | undefined;
161
+ onInputCapture?: import("react").InputEventHandler<HTMLButtonElement> | undefined;
162
+ onReset?: import("react").ReactEventHandler<HTMLButtonElement> | undefined;
163
+ onResetCapture?: import("react").ReactEventHandler<HTMLButtonElement> | undefined;
164
+ onSubmit?: import("react").SubmitEventHandler<HTMLButtonElement> | undefined;
165
+ onSubmitCapture?: import("react").SubmitEventHandler<HTMLButtonElement> | undefined;
166
+ onInvalid?: import("react").ReactEventHandler<HTMLButtonElement> | undefined;
167
+ onInvalidCapture?: import("react").ReactEventHandler<HTMLButtonElement> | undefined;
168
+ onLoad?: import("react").ReactEventHandler<HTMLButtonElement> | undefined;
169
+ onLoadCapture?: import("react").ReactEventHandler<HTMLButtonElement> | undefined;
170
+ onError?: import("react").ReactEventHandler<HTMLButtonElement> | undefined;
171
+ onErrorCapture?: import("react").ReactEventHandler<HTMLButtonElement> | undefined;
172
+ onKeyDown?: import("react").KeyboardEventHandler<HTMLButtonElement> | undefined;
173
+ onKeyDownCapture?: import("react").KeyboardEventHandler<HTMLButtonElement> | undefined;
174
+ onKeyPress?: import("react").KeyboardEventHandler<HTMLButtonElement> | undefined;
175
+ onKeyPressCapture?: import("react").KeyboardEventHandler<HTMLButtonElement> | undefined;
176
+ onKeyUp?: import("react").KeyboardEventHandler<HTMLButtonElement> | undefined;
177
+ onKeyUpCapture?: import("react").KeyboardEventHandler<HTMLButtonElement> | undefined;
178
+ onAbort?: import("react").ReactEventHandler<HTMLButtonElement> | undefined;
179
+ onAbortCapture?: import("react").ReactEventHandler<HTMLButtonElement> | undefined;
180
+ onCanPlay?: import("react").ReactEventHandler<HTMLButtonElement> | undefined;
181
+ onCanPlayCapture?: import("react").ReactEventHandler<HTMLButtonElement> | undefined;
182
+ onCanPlayThrough?: import("react").ReactEventHandler<HTMLButtonElement> | undefined;
183
+ onCanPlayThroughCapture?: import("react").ReactEventHandler<HTMLButtonElement> | undefined;
184
+ onDurationChange?: import("react").ReactEventHandler<HTMLButtonElement> | undefined;
185
+ onDurationChangeCapture?: import("react").ReactEventHandler<HTMLButtonElement> | undefined;
186
+ onEmptied?: import("react").ReactEventHandler<HTMLButtonElement> | undefined;
187
+ onEmptiedCapture?: import("react").ReactEventHandler<HTMLButtonElement> | undefined;
188
+ onEncrypted?: import("react").ReactEventHandler<HTMLButtonElement> | undefined;
189
+ onEncryptedCapture?: import("react").ReactEventHandler<HTMLButtonElement> | undefined;
190
+ onEnded?: import("react").ReactEventHandler<HTMLButtonElement> | undefined;
191
+ onEndedCapture?: import("react").ReactEventHandler<HTMLButtonElement> | undefined;
192
+ onLoadedData?: import("react").ReactEventHandler<HTMLButtonElement> | undefined;
193
+ onLoadedDataCapture?: import("react").ReactEventHandler<HTMLButtonElement> | undefined;
194
+ onLoadedMetadata?: import("react").ReactEventHandler<HTMLButtonElement> | undefined;
195
+ onLoadedMetadataCapture?: import("react").ReactEventHandler<HTMLButtonElement> | undefined;
196
+ onLoadStart?: import("react").ReactEventHandler<HTMLButtonElement> | undefined;
197
+ onLoadStartCapture?: import("react").ReactEventHandler<HTMLButtonElement> | undefined;
198
+ onPause?: import("react").ReactEventHandler<HTMLButtonElement> | undefined;
199
+ onPauseCapture?: import("react").ReactEventHandler<HTMLButtonElement> | undefined;
200
+ onPlay?: import("react").ReactEventHandler<HTMLButtonElement> | undefined;
201
+ onPlayCapture?: import("react").ReactEventHandler<HTMLButtonElement> | undefined;
202
+ onPlaying?: import("react").ReactEventHandler<HTMLButtonElement> | undefined;
203
+ onPlayingCapture?: import("react").ReactEventHandler<HTMLButtonElement> | undefined;
204
+ onProgress?: import("react").ReactEventHandler<HTMLButtonElement> | undefined;
205
+ onProgressCapture?: import("react").ReactEventHandler<HTMLButtonElement> | undefined;
206
+ onRateChange?: import("react").ReactEventHandler<HTMLButtonElement> | undefined;
207
+ onRateChangeCapture?: import("react").ReactEventHandler<HTMLButtonElement> | undefined;
208
+ onSeeked?: import("react").ReactEventHandler<HTMLButtonElement> | undefined;
209
+ onSeekedCapture?: import("react").ReactEventHandler<HTMLButtonElement> | undefined;
210
+ onSeeking?: import("react").ReactEventHandler<HTMLButtonElement> | undefined;
211
+ onSeekingCapture?: import("react").ReactEventHandler<HTMLButtonElement> | undefined;
212
+ onStalled?: import("react").ReactEventHandler<HTMLButtonElement> | undefined;
213
+ onStalledCapture?: import("react").ReactEventHandler<HTMLButtonElement> | undefined;
214
+ onSuspend?: import("react").ReactEventHandler<HTMLButtonElement> | undefined;
215
+ onSuspendCapture?: import("react").ReactEventHandler<HTMLButtonElement> | undefined;
216
+ onTimeUpdate?: import("react").ReactEventHandler<HTMLButtonElement> | undefined;
217
+ onTimeUpdateCapture?: import("react").ReactEventHandler<HTMLButtonElement> | undefined;
218
+ onVolumeChange?: import("react").ReactEventHandler<HTMLButtonElement> | undefined;
219
+ onVolumeChangeCapture?: import("react").ReactEventHandler<HTMLButtonElement> | undefined;
220
+ onWaiting?: import("react").ReactEventHandler<HTMLButtonElement> | undefined;
221
+ onWaitingCapture?: import("react").ReactEventHandler<HTMLButtonElement> | undefined;
222
+ onAuxClick?: import("react").MouseEventHandler<HTMLButtonElement> | undefined;
223
+ onAuxClickCapture?: import("react").MouseEventHandler<HTMLButtonElement> | undefined;
224
+ onClick?: import("react").MouseEventHandler<HTMLButtonElement> | undefined;
225
+ onClickCapture?: import("react").MouseEventHandler<HTMLButtonElement> | undefined;
226
+ onContextMenu?: import("react").MouseEventHandler<HTMLButtonElement> | undefined;
227
+ onContextMenuCapture?: import("react").MouseEventHandler<HTMLButtonElement> | undefined;
228
+ onDoubleClick?: import("react").MouseEventHandler<HTMLButtonElement> | undefined;
229
+ onDoubleClickCapture?: import("react").MouseEventHandler<HTMLButtonElement> | undefined;
230
+ onDrag?: import("react").DragEventHandler<HTMLButtonElement> | undefined;
231
+ onDragCapture?: import("react").DragEventHandler<HTMLButtonElement> | undefined;
232
+ onDragEnd?: import("react").DragEventHandler<HTMLButtonElement> | undefined;
233
+ onDragEndCapture?: import("react").DragEventHandler<HTMLButtonElement> | undefined;
234
+ onDragEnter?: import("react").DragEventHandler<HTMLButtonElement> | undefined;
235
+ onDragEnterCapture?: import("react").DragEventHandler<HTMLButtonElement> | undefined;
236
+ onDragExit?: import("react").DragEventHandler<HTMLButtonElement> | undefined;
237
+ onDragExitCapture?: import("react").DragEventHandler<HTMLButtonElement> | undefined;
238
+ onDragLeave?: import("react").DragEventHandler<HTMLButtonElement> | undefined;
239
+ onDragLeaveCapture?: import("react").DragEventHandler<HTMLButtonElement> | undefined;
240
+ onDragOver?: import("react").DragEventHandler<HTMLButtonElement> | undefined;
241
+ onDragOverCapture?: import("react").DragEventHandler<HTMLButtonElement> | undefined;
242
+ onDragStart?: import("react").DragEventHandler<HTMLButtonElement> | undefined;
243
+ onDragStartCapture?: import("react").DragEventHandler<HTMLButtonElement> | undefined;
244
+ onDrop?: import("react").DragEventHandler<HTMLButtonElement> | undefined;
245
+ onDropCapture?: import("react").DragEventHandler<HTMLButtonElement> | undefined;
246
+ onMouseDown?: import("react").MouseEventHandler<HTMLButtonElement> | undefined;
247
+ onMouseDownCapture?: import("react").MouseEventHandler<HTMLButtonElement> | undefined;
248
+ onMouseEnter?: import("react").MouseEventHandler<HTMLButtonElement> | undefined;
249
+ onMouseLeave?: import("react").MouseEventHandler<HTMLButtonElement> | undefined;
250
+ onMouseMove?: import("react").MouseEventHandler<HTMLButtonElement> | undefined;
251
+ onMouseMoveCapture?: import("react").MouseEventHandler<HTMLButtonElement> | undefined;
252
+ onMouseOut?: import("react").MouseEventHandler<HTMLButtonElement> | undefined;
253
+ onMouseOutCapture?: import("react").MouseEventHandler<HTMLButtonElement> | undefined;
254
+ onMouseOver?: import("react").MouseEventHandler<HTMLButtonElement> | undefined;
255
+ onMouseOverCapture?: import("react").MouseEventHandler<HTMLButtonElement> | undefined;
256
+ onMouseUp?: import("react").MouseEventHandler<HTMLButtonElement> | undefined;
257
+ onMouseUpCapture?: import("react").MouseEventHandler<HTMLButtonElement> | undefined;
258
+ onSelect?: import("react").ReactEventHandler<HTMLButtonElement> | undefined;
259
+ onSelectCapture?: import("react").ReactEventHandler<HTMLButtonElement> | undefined;
260
+ onTouchCancel?: import("react").TouchEventHandler<HTMLButtonElement> | undefined;
261
+ onTouchCancelCapture?: import("react").TouchEventHandler<HTMLButtonElement> | undefined;
262
+ onTouchEnd?: import("react").TouchEventHandler<HTMLButtonElement> | undefined;
263
+ onTouchEndCapture?: import("react").TouchEventHandler<HTMLButtonElement> | undefined;
264
+ onTouchMove?: import("react").TouchEventHandler<HTMLButtonElement> | undefined;
265
+ onTouchMoveCapture?: import("react").TouchEventHandler<HTMLButtonElement> | undefined;
266
+ onTouchStart?: import("react").TouchEventHandler<HTMLButtonElement> | undefined;
267
+ onTouchStartCapture?: import("react").TouchEventHandler<HTMLButtonElement> | undefined;
268
+ onPointerDown?: import("react").PointerEventHandler<HTMLButtonElement> | undefined;
269
+ onPointerDownCapture?: import("react").PointerEventHandler<HTMLButtonElement> | undefined;
270
+ onPointerMove?: import("react").PointerEventHandler<HTMLButtonElement> | undefined;
271
+ onPointerMoveCapture?: import("react").PointerEventHandler<HTMLButtonElement> | undefined;
272
+ onPointerUp?: import("react").PointerEventHandler<HTMLButtonElement> | undefined;
273
+ onPointerUpCapture?: import("react").PointerEventHandler<HTMLButtonElement> | undefined;
274
+ onPointerCancel?: import("react").PointerEventHandler<HTMLButtonElement> | undefined;
275
+ onPointerCancelCapture?: import("react").PointerEventHandler<HTMLButtonElement> | undefined;
276
+ onPointerEnter?: import("react").PointerEventHandler<HTMLButtonElement> | undefined;
277
+ onPointerLeave?: import("react").PointerEventHandler<HTMLButtonElement> | undefined;
278
+ onPointerOver?: import("react").PointerEventHandler<HTMLButtonElement> | undefined;
279
+ onPointerOverCapture?: import("react").PointerEventHandler<HTMLButtonElement> | undefined;
280
+ onPointerOut?: import("react").PointerEventHandler<HTMLButtonElement> | undefined;
281
+ onPointerOutCapture?: import("react").PointerEventHandler<HTMLButtonElement> | undefined;
282
+ onGotPointerCapture?: import("react").PointerEventHandler<HTMLButtonElement> | undefined;
283
+ onGotPointerCaptureCapture?: import("react").PointerEventHandler<HTMLButtonElement> | undefined;
284
+ onLostPointerCapture?: import("react").PointerEventHandler<HTMLButtonElement> | undefined;
285
+ onLostPointerCaptureCapture?: import("react").PointerEventHandler<HTMLButtonElement> | undefined;
286
+ onScroll?: import("react").UIEventHandler<HTMLButtonElement> | undefined;
287
+ onScrollCapture?: import("react").UIEventHandler<HTMLButtonElement> | undefined;
288
+ onScrollEnd?: import("react").UIEventHandler<HTMLButtonElement> | undefined;
289
+ onScrollEndCapture?: import("react").UIEventHandler<HTMLButtonElement> | undefined;
290
+ onWheel?: import("react").WheelEventHandler<HTMLButtonElement> | undefined;
291
+ onWheelCapture?: import("react").WheelEventHandler<HTMLButtonElement> | undefined;
292
+ onAnimationStart?: import("react").AnimationEventHandler<HTMLButtonElement> | undefined;
293
+ onAnimationStartCapture?: import("react").AnimationEventHandler<HTMLButtonElement> | undefined;
294
+ onAnimationEnd?: import("react").AnimationEventHandler<HTMLButtonElement> | undefined;
295
+ onAnimationEndCapture?: import("react").AnimationEventHandler<HTMLButtonElement> | undefined;
296
+ onAnimationIteration?: import("react").AnimationEventHandler<HTMLButtonElement> | undefined;
297
+ onAnimationIterationCapture?: import("react").AnimationEventHandler<HTMLButtonElement> | undefined;
298
+ onToggle?: import("react").ToggleEventHandler<HTMLButtonElement> | undefined;
299
+ onBeforeToggle?: import("react").ToggleEventHandler<HTMLButtonElement> | undefined;
300
+ onTransitionCancel?: import("react").TransitionEventHandler<HTMLButtonElement> | undefined;
301
+ onTransitionCancelCapture?: import("react").TransitionEventHandler<HTMLButtonElement> | undefined;
302
+ onTransitionEnd?: import("react").TransitionEventHandler<HTMLButtonElement> | undefined;
303
+ onTransitionEndCapture?: import("react").TransitionEventHandler<HTMLButtonElement> | undefined;
304
+ onTransitionRun?: import("react").TransitionEventHandler<HTMLButtonElement> | undefined;
305
+ onTransitionRunCapture?: import("react").TransitionEventHandler<HTMLButtonElement> | undefined;
306
+ onTransitionStart?: import("react").TransitionEventHandler<HTMLButtonElement> | undefined;
307
+ onTransitionStartCapture?: import("react").TransitionEventHandler<HTMLButtonElement> | undefined;
308
+ href: string | undefined;
309
+ type: "button" | "reset" | "submit" | undefined;
310
+ className: string;
311
+ }, HTMLButtonElement>;
@@ -1,13 +1,11 @@
1
- import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { createElement } from 'react';
3
- import { Menu } from './Dropdown.js';
4
3
  import { cx } from '../cx.js';
5
4
  import { Icon } from '../type/Icon.js';
6
5
  /** IconBtn — the round icon button: `sm` in heads and bars, full size in rows and composers, `invert` for the one filled move.
7
- * With `menu` it gives the member options the way a Dropdown does — an actions Menu (edit, share, remove…) for the card or sheet it sits in. */
8
- export function IconBtn({ label, icon, sm, invert, href, menu, menuId, menuStart, className, type, children, ...rest }) {
9
- const btn = createElement(href ? 'a' : 'button', { href, type: href ? undefined : type ?? 'button', 'aria-label': label, popoverTarget: menu ? menuId : undefined, className: cx('icon-btn', sm && 'icon-btn--sm', invert && 'icon-btn--invert', className), ...rest }, icon ? _jsx(Icon, { name: icon, size: sm ? 'sm' : 'md' }) : children);
10
- if (!menu)
11
- return btn;
12
- return (_jsxs(_Fragment, { children: [btn, _jsx(Menu, { popover: true, actions: true, end: !menuStart, id: menuId, children: menu })] }));
6
+ * It is a button and nothing more: to open a Menu, give it the platform's `popoverTarget={the Menu's id}` and render that `<Menu popover actions id>`
7
+ * wherever you like — the panel anchors to the button that opened it. To open anything else, `onClick`. */
8
+ export function IconBtn({ label, icon, sm, invert, href, className, type, children, ...rest }) {
9
+ const btn = createElement(href ? 'a' : 'button', { href, type: href ? undefined : type ?? 'button', 'aria-label': label, className: cx('icon-btn', sm && 'icon-btn--sm', invert && 'icon-btn--invert', className), ...rest }, icon ? _jsx(Icon, { name: icon, size: sm ? 'sm' : 'md' }) : children);
10
+ return btn;
13
11
  }