@estiva-app/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/dist/AppShell.d.ts.map +1 -1
- package/dist/Avatar.d.ts.map +1 -1
- package/dist/AvatarGroup.d.ts +14 -5
- package/dist/AvatarGroup.d.ts.map +1 -1
- package/dist/ChipInput.d.ts.map +1 -1
- package/dist/Divider.d.ts.map +1 -1
- package/dist/IconButton.d.ts +4 -1
- package/dist/IconButton.d.ts.map +1 -1
- package/dist/IdentityMenu.d.ts +6 -1
- package/dist/IdentityMenu.d.ts.map +1 -1
- package/dist/Kbd.d.ts +27 -0
- package/dist/Kbd.d.ts.map +1 -0
- package/dist/Menu.d.ts +115 -11
- package/dist/Menu.d.ts.map +1 -1
- package/dist/SearchInput.d.ts +1 -1
- package/dist/SearchInput.d.ts.map +1 -1
- package/dist/Select.d.ts +2 -31
- package/dist/Select.d.ts.map +1 -1
- package/dist/Tooltip.d.ts +8 -2
- package/dist/Tooltip.d.ts.map +1 -1
- package/dist/fit.d.ts +98 -0
- package/dist/fit.d.ts.map +1 -0
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +441 -232
- package/dist/index.js.map +4 -4
- package/package.json +1 -1
- package/src/AppShell.stories.tsx +2 -2
- package/src/AppShell.tsx +8 -1
- package/src/Avatar.tsx +14 -1
- package/src/AvatarGroup.stories.tsx +5 -0
- package/src/AvatarGroup.tsx +36 -13
- package/src/ChipInput.tsx +15 -3
- package/src/Divider.tsx +5 -1
- package/src/IconButton.tsx +5 -1
- package/src/IdentityMenu.tsx +14 -4
- package/src/Kbd.mdx +77 -0
- package/src/Kbd.stories.tsx +58 -0
- package/src/Kbd.tsx +42 -0
- package/src/Menu.fit.test.ts +90 -0
- package/src/Menu.mdx +8 -1
- package/src/Menu.stories.tsx +26 -3
- package/src/Menu.tsx +310 -34
- package/src/MenuItem.mdx +1 -1
- package/src/MenuItem.stories.tsx +5 -5
- package/src/SearchInput.mdx +2 -2
- package/src/SearchInput.stories.tsx +2 -2
- package/src/SearchInput.tsx +3 -6
- package/src/Select.fit.test.ts +12 -8
- package/src/Select.tsx +8 -32
- package/src/Tooltip.mdx +9 -0
- package/src/Tooltip.stories.tsx +15 -0
- package/src/Tooltip.tsx +19 -5
- package/src/TopBar.mdx +1 -1
- package/src/TopBar.stories.tsx +2 -2
- package/src/fit.ts +94 -0
- package/src/index.ts +3 -1
- package/tailwind-preset.js +9 -1
package/dist/AppShell.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AppShell.d.ts","sourceRoot":"","sources":["../src/AppShell.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAItC;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,OAAO,GAAG,UAAU,CAAA;IAC9B,uEAAuE;IACvE,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,oEAAoE;IACpE,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,gEAAgE;IAChE,MAAM,CAAC,EAAE,SAAS,CAAA;IAClB,uDAAuD;IACvD,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB,qEAAqE;IACrE,MAAM,CAAC,EAAE,SAAS,CAAA;IAClB,qFAAqF;IACrF,GAAG,EAAE,SAAS,CAAA;IACd,QAAQ,EAAE,SAAS,CAAA;CACpB;AAED,wBAAgB,QAAQ,CAAC,EAAE,OAAiB,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,aAAa,+
|
|
1
|
+
{"version":3,"file":"AppShell.d.ts","sourceRoot":"","sources":["../src/AppShell.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAItC;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,OAAO,GAAG,UAAU,CAAA;IAC9B,uEAAuE;IACvE,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,oEAAoE;IACpE,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,gEAAgE;IAChE,MAAM,CAAC,EAAE,SAAS,CAAA;IAClB,uDAAuD;IACvD,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB,qEAAqE;IACrE,MAAM,CAAC,EAAE,SAAS,CAAA;IAClB,qFAAqF;IACrF,GAAG,EAAE,SAAS,CAAA;IACd,QAAQ,EAAE,SAAS,CAAA;CACpB;AAED,wBAAgB,QAAQ,CAAC,EAAE,OAAiB,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,aAAa,+BA0CjH"}
|
package/dist/Avatar.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Avatar.d.ts","sourceRoot":"","sources":["../src/Avatar.tsx"],"names":[],"mappings":"AA2BA,eAAO,MAAM,MAAM,GAAI,KAAK,MAAM,WAIjC,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,WAAW,GAAI,MAAM,MAAM,WAIvC,CAAA;AAED,MAAM,WAAW,WAAW;IAC1B,wGAAwG;IACxG,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,uEAAuE;IACvE,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,uGAAuG;IACvG,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,sDAAsD;IACtD,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,wBAAgB,MAAM,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,GAAQ,EAAE,IAAS,EAAE,SAAS,EAAE,EAAE,WAAW,+
|
|
1
|
+
{"version":3,"file":"Avatar.d.ts","sourceRoot":"","sources":["../src/Avatar.tsx"],"names":[],"mappings":"AA2BA,eAAO,MAAM,MAAM,GAAI,KAAK,MAAM,WAIjC,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,WAAW,GAAI,MAAM,MAAM,WAIvC,CAAA;AAED,MAAM,WAAW,WAAW;IAC1B,wGAAwG;IACxG,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,uEAAuE;IACvE,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,uGAAuG;IACvG,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,sDAAsD;IACtD,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,wBAAgB,MAAM,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,GAAQ,EAAE,IAAS,EAAE,SAAS,EAAE,EAAE,WAAW,+BAuChF"}
|
package/dist/AvatarGroup.d.ts
CHANGED
|
@@ -6,10 +6,13 @@
|
|
|
6
6
|
* wrapper resolves pictures itself; a consumer without such a wrapper could
|
|
7
7
|
* never have shown one.
|
|
8
8
|
*
|
|
9
|
-
* The ring
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
9
|
+
* The ring is drawn OUTSIDE the face, as a shadow (2026-09-03). It was a
|
|
10
|
+
* `border` before, which box-sizing takes out of the inside: a 24px avatar
|
|
11
|
+
* showed 20px of face, and at 18px only 14px — noticeably smaller than the
|
|
12
|
+
* number asked for. A shadow costs the face nothing, so `size` means the
|
|
13
|
+
* size. It replaced an even older wrapper whose `overflow-hidden` clipped
|
|
14
|
+
* 4px of face and the right edge of the initials with it ("CO" as "C(") —
|
|
15
|
+
* hence the rule this file keeps: nothing that clips ever wraps the face.
|
|
13
16
|
*/
|
|
14
17
|
export interface AvatarGroupMember {
|
|
15
18
|
name: string;
|
|
@@ -18,6 +21,12 @@ export interface AvatarGroupMember {
|
|
|
18
21
|
}
|
|
19
22
|
export interface AvatarGroupProps {
|
|
20
23
|
members: AvatarGroupMember[];
|
|
24
|
+
/**
|
|
25
|
+
* Face size in pixels; the overlap follows it. 24 is the members pill,
|
|
26
|
+
* 18 the replies row (Katerina, 2026-09-03) — that row drew its own stack
|
|
27
|
+
* for two months for want of this one number, and drifted while it did.
|
|
28
|
+
*/
|
|
29
|
+
size?: number;
|
|
21
30
|
}
|
|
22
|
-
export declare function AvatarGroup({ members }: AvatarGroupProps): import("react").JSX.Element;
|
|
31
|
+
export declare function AvatarGroup({ members, size }: AvatarGroupProps): import("react").JSX.Element;
|
|
23
32
|
//# sourceMappingURL=AvatarGroup.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AvatarGroup.d.ts","sourceRoot":"","sources":["../src/AvatarGroup.tsx"],"names":[],"mappings":"AAEA
|
|
1
|
+
{"version":3,"file":"AvatarGroup.d.ts","sourceRoot":"","sources":["../src/AvatarGroup.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;GAeG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,yDAAyD;IACzD,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,iBAAiB,EAAE,CAAA;IAC5B;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,wBAAgB,WAAW,CAAC,EAAE,OAAO,EAAE,IAAS,EAAE,EAAE,gBAAgB,+BA8BnE"}
|
package/dist/ChipInput.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChipInput.d.ts","sourceRoot":"","sources":["../src/ChipInput.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA6E,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"ChipInput.d.ts","sourceRoot":"","sources":["../src/ChipInput.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA6E,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAOjH;;;;;;GAMG;AACH,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAA;IACb,mDAAmD;IACnD,OAAO,CAAC,EAAE,SAAS,CAAA;IACnB,qDAAqD;IACrD,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;IACrB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,wBAAgB,SAAS,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,cAAc,+BAiChF;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,4EAA4E;IAC5E,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,WAAW,cAAc,CAAC,CAAC,SAAS,eAAe,GAAG,eAAe;IACzE,KAAK,EAAE,CAAC,EAAE,CAAA;IACV,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,IAAI,CAAA;IAC7B,4CAA4C;IAC5C,OAAO,EAAE,CAAC,EAAE,CAAA;IACZ,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,6EAA6E;IAC7E,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;IACrB,qDAAqD;IACrD,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,SAAS,CAAA;IACtC,6CAA6C;IAC7C,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,SAAS,CAAA;CACtC;AAED,wBAAgB,SAAS,CAAC,CAAC,SAAS,eAAe,GAAG,eAAe,EAAE,EACrE,KAAK,EACL,QAAQ,EACR,OAAO,EACP,WAAuB,EACvB,SAAS,EACT,UAAe,EACf,WAAW,EACX,UAAU,GACX,EAAE,cAAc,CAAC,CAAC,CAAC,+BAuJnB"}
|
package/dist/Divider.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Divider.d.ts","sourceRoot":"","sources":["../src/Divider.tsx"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,MAAM,WAAW,YAAY;IAC3B,WAAW,CAAC,EAAE,YAAY,GAAG,UAAU,CAAA;IACvC,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,wBAAgB,OAAO,CAAC,EAAE,WAA0B,EAAE,SAAS,EAAE,EAAE,YAAY,+
|
|
1
|
+
{"version":3,"file":"Divider.d.ts","sourceRoot":"","sources":["../src/Divider.tsx"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,MAAM,WAAW,YAAY;IAC3B,WAAW,CAAC,EAAE,YAAY,GAAG,UAAU,CAAA;IACvC,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,wBAAgB,OAAO,CAAC,EAAE,WAA0B,EAAE,SAAS,EAAE,EAAE,YAAY,+BAY9E"}
|
package/dist/IconButton.d.ts
CHANGED
|
@@ -9,9 +9,12 @@ export type IconButtonVariant = 'muted' | 'outlined' | 'primary';
|
|
|
9
9
|
export interface IconButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {
|
|
10
10
|
variant?: IconButtonVariant;
|
|
11
11
|
tooltip?: string;
|
|
12
|
+
/** A key hint drawn as the `Kbd` chip inside the tooltip — for a button
|
|
13
|
+
* whose only other affordance is a keyboard shortcut. */
|
|
14
|
+
tooltipShortcut?: string;
|
|
12
15
|
tooltipPlacement?: 'top' | 'bottom';
|
|
13
16
|
/** The icon: 16px, stroke 1.5. */
|
|
14
17
|
children: ReactNode;
|
|
15
18
|
}
|
|
16
|
-
export declare function IconButton({ variant, className, children, disabled, tooltip, tooltipPlacement, type, ...props }: IconButtonProps): import("react").JSX.Element;
|
|
19
|
+
export declare function IconButton({ variant, className, children, disabled, tooltip, tooltipShortcut, tooltipPlacement, type, ...props }: IconButtonProps): import("react").JSX.Element;
|
|
17
20
|
//# sourceMappingURL=IconButton.d.ts.map
|
package/dist/IconButton.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IconButton.d.ts","sourceRoot":"","sources":["../src/IconButton.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAI5D;;;;;GAKG;AACH,MAAM,MAAM,iBAAiB,GAAG,OAAO,GAAG,UAAU,GAAG,SAAS,CAAA;AAEhE,MAAM,WAAW,eAAgB,SAAQ,oBAAoB,CAAC,iBAAiB,CAAC;IAC9E,OAAO,CAAC,EAAE,iBAAiB,CAAA;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,gBAAgB,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAA;IACnC,kCAAkC;IAClC,QAAQ,EAAE,SAAS,CAAA;CACpB;AAED,wBAAgB,UAAU,CAAC,EACzB,OAAiB,EACjB,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,OAAO,EACP,gBAAgB,EAChB,IAAe,EACf,GAAG,KAAK,EACT,EAAE,eAAe,+BA8BjB"}
|
|
1
|
+
{"version":3,"file":"IconButton.d.ts","sourceRoot":"","sources":["../src/IconButton.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAI5D;;;;;GAKG;AACH,MAAM,MAAM,iBAAiB,GAAG,OAAO,GAAG,UAAU,GAAG,SAAS,CAAA;AAEhE,MAAM,WAAW,eAAgB,SAAQ,oBAAoB,CAAC,iBAAiB,CAAC;IAC9E,OAAO,CAAC,EAAE,iBAAiB,CAAA;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB;8DAC0D;IAC1D,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,gBAAgB,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAA;IACnC,kCAAkC;IAClC,QAAQ,EAAE,SAAS,CAAA;CACpB;AAED,wBAAgB,UAAU,CAAC,EACzB,OAAiB,EACjB,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,OAAO,EACP,eAAe,EACf,gBAAgB,EAChB,IAAe,EACf,GAAG,KAAK,EACT,EAAE,eAAe,+BA8BjB"}
|
package/dist/IdentityMenu.d.ts
CHANGED
|
@@ -47,12 +47,17 @@ export interface IdentityMenuProps {
|
|
|
47
47
|
}
|
|
48
48
|
export interface IdentityPanelProps extends Omit<IdentityMenuProps, 'compact' | 'className'> {
|
|
49
49
|
onClose: () => void;
|
|
50
|
+
/** The trigger to hang from — the panel portals to the body and fits the
|
|
51
|
+
* viewport, so no header, sidebar or scroll container can cover it (the
|
|
52
|
+
* z-10 floating top bar trapped the old in-flow panel under a z-20 panel
|
|
53
|
+
* header, 2026-09-03). Absent, the panel stands in flow — the stories. */
|
|
54
|
+
anchor?: HTMLElement | null;
|
|
50
55
|
/** On the Menu surface — the stories pass `static` to stand it in flow. */
|
|
51
56
|
className?: string;
|
|
52
57
|
}
|
|
53
58
|
/** The menu alone — what `IdentityMenu` opens. Exported so the stories show
|
|
54
59
|
* the designed artifact rather than a closed trigger, and for any surface
|
|
55
60
|
* that wants the panel without the trigger. */
|
|
56
|
-
export declare function IdentityPanel({ me, signedIn, relayUrl, idBase, onCopyKey, onSignOut, onClose, className, children }: IdentityPanelProps): import("react").JSX.Element;
|
|
61
|
+
export declare function IdentityPanel({ me, signedIn, relayUrl, idBase, onCopyKey, onSignOut, onClose, anchor, className, children }: IdentityPanelProps): import("react").JSX.Element;
|
|
57
62
|
export declare function IdentityMenu({ me, signedIn, relayUrl, idBase, onCopyKey, onSignOut, compact, className, children }: IdentityMenuProps): import("react").JSX.Element;
|
|
58
63
|
//# sourceMappingURL=IdentityMenu.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IdentityMenu.d.ts","sourceRoot":"","sources":["../src/IdentityMenu.tsx"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"IdentityMenu.d.ts","sourceRoot":"","sources":["../src/IdentityMenu.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAoB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAOxD;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,WAAW,QAAQ;IACvB,6CAA6C;IAC7C,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,wDAAwD;IACxD,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,QAAQ,CAAA;IACZ,qEAAqE;IACrE,QAAQ,EAAE,OAAO,CAAA;IACjB,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,0FAA0F;IAC1F,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,kEAAkE;IAClE,SAAS,CAAC,EAAE,MAAM,IAAI,CAAA;IACtB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAA;IACtB,+DAA+D;IAC/D,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,KAAK,EAAE,MAAM,IAAI,KAAK,SAAS,CAAC,CAAA;CAC1D;AAED,MAAM,WAAW,kBAAmB,SAAQ,IAAI,CAAC,iBAAiB,EAAE,SAAS,GAAG,WAAW,CAAC;IAC1F,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB;;;+EAG2E;IAC3E,MAAM,CAAC,EAAE,WAAW,GAAG,IAAI,CAAA;IAC3B,2EAA2E;IAC3E,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED;;gDAEgD;AAChD,wBAAgB,aAAa,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,kBAAkB,+BAmD/I;AAED,wBAAgB,YAAY,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,OAAe,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,iBAAiB,+BA0C7I"}
|
package/dist/Kbd.d.ts
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* A keyboard hint — the small chip that names the key which does the same thing.
|
|
4
|
+
*
|
|
5
|
+
* **The look is SearchInput's shortcut chip** (Katerina, 2026-09-05), which is
|
|
6
|
+
* the one the apps already show: an inset pill with a hairline border, and under
|
|
7
|
+
* Signal and Ship the keycap treatment — mono, 10px, a lighter fill and a thicker
|
|
8
|
+
* bottom edge, so it reads as a key rather than a label.
|
|
9
|
+
*
|
|
10
|
+
* It existed before this file did, drawn inline inside `MenuItem` and again
|
|
11
|
+
* inside `SearchInput`. Extracted when `Tooltip` needed a third copy.
|
|
12
|
+
*
|
|
13
|
+
* **Sizes are arbitrary values on purpose.** `text-caption` beside a
|
|
14
|
+
* `text-{color}` is dropped by tailwind-merge, so the chip silently inherited
|
|
15
|
+
* whatever size surrounded it — 10px in a composer, something else elsewhere.
|
|
16
|
+
* `text-[12px]` survives the merge.
|
|
17
|
+
*
|
|
18
|
+
* Content is whatever names the key — a trigger character (`/`, `@`), a chord
|
|
19
|
+
* (`Cmd+B`, `Ctrl+Alt+1`), or a word (`Esc`). It does not format anything: a caller
|
|
20
|
+
* that knows the platform passes the label it wants.
|
|
21
|
+
*/
|
|
22
|
+
export interface KbdProps {
|
|
23
|
+
children: ReactNode;
|
|
24
|
+
className?: string;
|
|
25
|
+
}
|
|
26
|
+
export declare function Kbd({ children, className }: KbdProps): import("react").JSX.Element;
|
|
27
|
+
//# sourceMappingURL=Kbd.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Kbd.d.ts","sourceRoot":"","sources":["../src/Kbd.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAGtC;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,WAAW,QAAQ;IACvB,QAAQ,EAAE,SAAS,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,wBAAgB,GAAG,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,QAAQ,+BAapD"}
|
package/dist/Menu.d.ts
CHANGED
|
@@ -16,14 +16,39 @@ import { type ComponentPropsWithRef, type ReactNode } from 'react';
|
|
|
16
16
|
* row; and the two exits every menu has — Escape and a click outside —
|
|
17
17
|
* owned by the menu, never copied into a caller.
|
|
18
18
|
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
19
|
+
* Where it goes is owned here too (2026-09-03), because the two ways a menu
|
|
20
|
+
* goes wrong are both placement: it opens inside a stacking context or a
|
|
21
|
+
* scroll container and something covers or clips it, or it opens near an
|
|
22
|
+
* edge and runs off the screen. Both shipped — the identity menu vanished
|
|
23
|
+
* under a z-indexed panel header, a submenu was cut by the right edge — so
|
|
24
|
+
* the shell now portals to the body (nothing in an app can cover the body's
|
|
25
|
+
* last child at z-50) and fits itself to the viewport (fit.ts, the same
|
|
26
|
+
* measured geometry Select uses). A caller hands over a trigger, not
|
|
27
|
+
* coordinates.
|
|
28
|
+
*
|
|
29
|
+
* Three anchorings, in order of preference:
|
|
30
|
+
* - `anchor` (an element, usually the trigger): portalled, measured, and
|
|
31
|
+
* placed by `fitMenu` — under the anchor, flipped above when the room
|
|
32
|
+
* below is worse, clamped inside the viewport, height-capped with its own
|
|
33
|
+
* scrollbar. `align="right"` hangs the menu's right edge from the
|
|
34
|
+
* anchor's. Closes on resize and on any page scroll, because both move
|
|
35
|
+
* the anchor out from under it.
|
|
36
|
+
* - `position` (viewport coordinates the caller computed): portalled and
|
|
37
|
+
* clamped (`clampBox`) — the caller's corner survives, but can no longer
|
|
38
|
+
* land off screen.
|
|
39
|
+
* - neither: in-flow under a `relative` wrapper, right-aligned. For stories
|
|
40
|
+
* and static surfaces only — inside an app this mode inherits every
|
|
41
|
+
* ancestor's stacking context and clip, which is how the identity menu
|
|
42
|
+
* got covered.
|
|
23
43
|
*/
|
|
24
44
|
export interface MenuProps {
|
|
25
45
|
onClose: () => void;
|
|
26
|
-
/**
|
|
46
|
+
/** The trigger — an element, or the rect a click handler already measured.
|
|
47
|
+
* The menu portals to the body and places itself against it. */
|
|
48
|
+
anchor?: HTMLElement | DOMRect | null;
|
|
49
|
+
/** With `anchor`: which of the menu's edges hangs from the anchor's. Default left. */
|
|
50
|
+
align?: 'left' | 'right';
|
|
51
|
+
/** Viewport coordinates; the menu is portalled, hung from `top`, aligned to whichever edge is given, and clamped on screen. */
|
|
27
52
|
position?: {
|
|
28
53
|
top: number;
|
|
29
54
|
right: number;
|
|
@@ -31,10 +56,59 @@ export interface MenuProps {
|
|
|
31
56
|
top: number;
|
|
32
57
|
left: number;
|
|
33
58
|
};
|
|
59
|
+
/** Close 150ms after the pointer leaves the menu — the hover-flow menus
|
|
60
|
+
* (quick-menu cards) dismiss this way. The grace period is shared with any
|
|
61
|
+
* open MenuSub panel, so crossing into a portalled submenu never counts as
|
|
62
|
+
* leaving. */
|
|
63
|
+
closeOnLeave?: boolean;
|
|
64
|
+
children: ReactNode;
|
|
65
|
+
className?: string;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* The menu's surface, with none of its behaviour — an elevated box with a
|
|
69
|
+
* hairline border, 8px radius, 8px padding and the large shadow.
|
|
70
|
+
*
|
|
71
|
+
* Split out of `Menu` on 2026-09-05. `Menu` owns Escape, outside-click and
|
|
72
|
+
* placement, and that is right for a menu opened from a trigger — but a
|
|
73
|
+
* type-ahead popup inside a text editor cannot have them: the editor's
|
|
74
|
+
* suggestion plugin already owns the keyboard and positions the popup, and a
|
|
75
|
+
* second Escape handler fights it. So Peek's `@`, `/` and `[` menus each drew
|
|
76
|
+
* this box by hand, and the three had already drifted apart.
|
|
77
|
+
*
|
|
78
|
+
* `Menu` renders this, so there is still exactly one definition of the
|
|
79
|
+
* surface — change it here and every menu in every app follows.
|
|
80
|
+
*
|
|
81
|
+
* Width, height and internal rhythm belong to the caller: a picker that lists
|
|
82
|
+
* people is not the width of one that lists verbs.
|
|
83
|
+
*/
|
|
84
|
+
export interface MenuPanelProps extends Omit<ComponentPropsWithRef<'div'>, 'children'> {
|
|
85
|
+
children: ReactNode;
|
|
86
|
+
}
|
|
87
|
+
export declare function MenuPanel({ children, className, ...props }: MenuPanelProps): import("react").JSX.Element;
|
|
88
|
+
export declare function Menu({ onClose, anchor, align, position, closeOnLeave, children, className }: MenuProps): import("react").JSX.Element;
|
|
89
|
+
/**
|
|
90
|
+
* A row that opens another menu beside it — the submenu two Peek menus
|
|
91
|
+
* hand-rolled before this, one of which dropped the ref its edge-flip
|
|
92
|
+
* measured and shipped a submenu cut off by the screen (2026-09-03).
|
|
93
|
+
*
|
|
94
|
+
* Hover-timed like those were: opens at once, closes 150ms after the
|
|
95
|
+
* pointer leaves row and panel both, so the diagonal from row to panel
|
|
96
|
+
* survives. The panel portals to the body and is placed by `fitSubmenu` —
|
|
97
|
+
* right of the row when it fits, left when it does not, never past an edge
|
|
98
|
+
* — so it also escapes whatever container its menu happens to be in.
|
|
99
|
+
*/
|
|
100
|
+
export interface MenuSubProps {
|
|
101
|
+
/** The trigger row's label. */
|
|
102
|
+
label: string;
|
|
103
|
+
leading?: ReactNode;
|
|
104
|
+
/** Mark the trigger row as holding a current value. */
|
|
105
|
+
selected?: boolean;
|
|
106
|
+
/** The submenu's rows. */
|
|
34
107
|
children: ReactNode;
|
|
108
|
+
/** On the submenu panel. */
|
|
35
109
|
className?: string;
|
|
36
110
|
}
|
|
37
|
-
export declare function
|
|
111
|
+
export declare function MenuSub({ label, leading, selected, children, className }: MenuSubProps): import("react").JSX.Element;
|
|
38
112
|
export interface MenuItemProps extends Omit<ComponentPropsWithRef<'button'>, 'children'> {
|
|
39
113
|
label?: string;
|
|
40
114
|
/** Replaces the label/description block — for rows whose middle is richer
|
|
@@ -50,6 +124,23 @@ export interface MenuItemProps extends Omit<ComponentPropsWithRef<'button'>, 'ch
|
|
|
50
124
|
leading?: ReactNode;
|
|
51
125
|
/** At the right edge: a hint, a value — anything. Wins over `shortcut` and `submenu`. */
|
|
52
126
|
trailing?: ReactNode;
|
|
127
|
+
/**
|
|
128
|
+
* Shown at the right edge **only while this row is the one you are pointing
|
|
129
|
+
* at or have arrowed onto** — an `EnterHint`, typically.
|
|
130
|
+
*
|
|
131
|
+
* Pass it unconditionally. Do not do `trailing={active ? <EnterHint/> : undefined}`:
|
|
132
|
+
* that mounts the hint, and a mount is instant while the row's own fill is a
|
|
133
|
+
* 150ms fade, so the hint lands ahead of the highlight on the way in and
|
|
134
|
+
* vanishes ahead of it on the way out (measured 2026-09-05 — ~7 frames of a
|
|
135
|
+
* chip sitting on an unhighlighted row, and two rows lit at once when
|
|
136
|
+
* sweeping). This slot is always in the DOM and revealed by the *same*
|
|
137
|
+
* `:hover` / `selected` the fill uses, on the same duration and curve, so
|
|
138
|
+
* the two cannot come apart — and the row does not reflow when it appears.
|
|
139
|
+
*
|
|
140
|
+
* It cross-fades with `trailing`/`shortcut`/`submenu` rather than displacing
|
|
141
|
+
* them, and reserves the wider of the two, so nothing moves either way.
|
|
142
|
+
*/
|
|
143
|
+
hint?: ReactNode;
|
|
53
144
|
/** A keyboard hint, drawn as the kbd chip. */
|
|
54
145
|
shortcut?: string;
|
|
55
146
|
/** The row opens another menu: draws the chevron at the right edge. */
|
|
@@ -58,13 +149,26 @@ export interface MenuItemProps extends Omit<ComponentPropsWithRef<'button'>, 'ch
|
|
|
58
149
|
/** The row the menu currently points at (a submenu's chosen value). */
|
|
59
150
|
selected?: boolean;
|
|
60
151
|
}
|
|
61
|
-
export declare function MenuItem({ label, children, size, description, leading, trailing, shortcut, submenu, destructive, selected, className, ...props }: MenuItemProps): import("react").JSX.Element;
|
|
152
|
+
export declare function MenuItem({ label, children, size, description, leading, trailing, hint, shortcut, submenu, destructive, selected, className, ...props }: MenuItemProps): import("react").JSX.Element;
|
|
62
153
|
/**
|
|
63
|
-
* The keyboard hint a picker row shows while highlighted —
|
|
64
|
-
*
|
|
154
|
+
* The keyboard hint a picker row shows while highlighted — hand-rolled in
|
|
155
|
+
* five files before this (2026-09-01), and drawn as its own thing until
|
|
156
|
+
* 2026-09-05, when it became the `Kbd` chip every other key hint uses. A
|
|
157
|
+
* picker row and a menu row sit in the same menu; they named the same key
|
|
158
|
+
* two ways.
|
|
159
|
+
*
|
|
160
|
+
* `target` is what pressing it gives you, when that is worth saying — the
|
|
161
|
+
* topic picker's "↩ Enter #topic". It sits after the chip, in the picker's
|
|
162
|
+
* own 9px voice, because it is not a key.
|
|
163
|
+
*
|
|
164
|
+
* Katerina, 2026-09-05, told the measurement and asked again: the chip keeps
|
|
165
|
+
* the `↩` character. It is not in Geist Mono — the browser borrows it, so it
|
|
166
|
+
* advances 8.63px where the font's own characters advance 6 — and that is a
|
|
167
|
+
* knowing trade for the glyph, not an oversight. If the width ever has to go,
|
|
168
|
+
* Tabler's IconCornerDownLeft draws the same shape.
|
|
65
169
|
*/
|
|
66
|
-
export declare function EnterHint({
|
|
67
|
-
|
|
170
|
+
export declare function EnterHint({ target }: {
|
|
171
|
+
target?: string;
|
|
68
172
|
}): import("react").JSX.Element;
|
|
69
173
|
/** A section heading inside a menu: the 32px row with a SectionLabel, read
|
|
70
174
|
* secondary — a heading inside a menu labels the rows, it is not one of
|
package/dist/Menu.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Menu.d.ts","sourceRoot":"","sources":["../src/Menu.tsx"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"Menu.d.ts","sourceRoot":"","sources":["../src/Menu.tsx"],"names":[],"mappings":"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"}
|
package/dist/SearchInput.d.ts
CHANGED
|
@@ -13,7 +13,7 @@ import { type InputHTMLAttributes } from 'react';
|
|
|
13
13
|
* command launcher. The component is the same either way.
|
|
14
14
|
*/
|
|
15
15
|
export interface SearchInputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'className'> {
|
|
16
|
-
/** A keyboard hint drawn at the right edge, e.g. "
|
|
16
|
+
/** A keyboard hint drawn at the right edge, e.g. "Ctrl+K". */
|
|
17
17
|
shortcut?: string;
|
|
18
18
|
className?: string;
|
|
19
19
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SearchInput.d.ts","sourceRoot":"","sources":["../src/SearchInput.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"SearchInput.d.ts","sourceRoot":"","sources":["../src/SearchInput.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,OAAO,CAAA;AAIhD;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,gBAAiB,SAAQ,IAAI,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,EAAE,WAAW,CAAC;IAChG,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,wBAAgB,WAAW,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAuB,EAAE,GAAG,KAAK,EAAE,EAAE,gBAAgB,+BAkBvG"}
|
package/dist/Select.d.ts
CHANGED
|
@@ -32,36 +32,7 @@ export interface SelectProps {
|
|
|
32
32
|
disabled?: boolean;
|
|
33
33
|
className?: string;
|
|
34
34
|
}
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
* so the geometry is testable without a browser.
|
|
38
|
-
*
|
|
39
|
-
* Left is clamped inside the viewport with an 8px margin. Height is capped
|
|
40
|
-
* at 288px (the old `max-h-72`) but never taller than the space it opens
|
|
41
|
-
* into; when the room below the anchor is smaller than both the content and
|
|
42
|
-
* the room above, the menu opens UPWARD (anchored to the trigger's top via
|
|
43
|
-
* `bottom`). The 120px floor keeps a menu usable even in a cramped corner —
|
|
44
|
-
* scrollable beats invisible.
|
|
45
|
-
*/
|
|
46
|
-
export declare function fitMenu({ anchor, menu, viewport, }: {
|
|
47
|
-
anchor: {
|
|
48
|
-
left: number;
|
|
49
|
-
top: number;
|
|
50
|
-
bottom: number;
|
|
51
|
-
};
|
|
52
|
-
menu: {
|
|
53
|
-
width: number;
|
|
54
|
-
contentHeight: number;
|
|
55
|
-
};
|
|
56
|
-
viewport: {
|
|
57
|
-
width: number;
|
|
58
|
-
height: number;
|
|
59
|
-
};
|
|
60
|
-
}): {
|
|
61
|
-
left: number;
|
|
62
|
-
top?: number;
|
|
63
|
-
bottom?: number;
|
|
64
|
-
maxHeight: number;
|
|
65
|
-
};
|
|
35
|
+
import { fitMenu } from './fit';
|
|
36
|
+
export { fitMenu };
|
|
66
37
|
export declare function Select({ value, onChange, options, size, ariaLabel, placeholder, disabled, className }: SelectProps): import("react").JSX.Element;
|
|
67
38
|
//# sourceMappingURL=Select.d.ts.map
|
package/dist/Select.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Select.d.ts","sourceRoot":"","sources":["../src/Select.tsx"],"names":[],"mappings":"AACA,OAAO,EAAiG,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAIrI;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,yDAAyD;IACzD,OAAO,CAAC,EAAE,SAAS,CAAA;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACjC,OAAO,EAAE,YAAY,EAAE,CAAA;IACvB,IAAI,CAAC,EAAE,SAAS,GAAG,OAAO,CAAA;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;
|
|
1
|
+
{"version":3,"file":"Select.d.ts","sourceRoot":"","sources":["../src/Select.tsx"],"names":[],"mappings":"AACA,OAAO,EAAiG,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAIrI;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,yDAAyD;IACzD,OAAO,CAAC,EAAE,SAAS,CAAA;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACjC,OAAO,EAAE,YAAY,EAAE,CAAA;IACvB,IAAI,CAAC,EAAE,SAAS,GAAG,OAAO,CAAA;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAKD,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAC/B,OAAO,EAAE,OAAO,EAAE,CAAA;AAElB,wBAAgB,MAAM,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAgB,EAAE,SAAS,EAAE,WAAuB,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,WAAW,+BAwO1I"}
|
package/dist/Tooltip.d.ts
CHANGED
|
@@ -10,15 +10,21 @@ import { type ReactNode } from 'react';
|
|
|
10
10
|
*/
|
|
11
11
|
export interface TooltipProps {
|
|
12
12
|
label: string;
|
|
13
|
+
/** The key that does the same thing, drawn as the `Kbd` chip after the label.
|
|
14
|
+
* Pass it already formatted for the platform — this renders, it does not
|
|
15
|
+
* decide whether the modifier is a glyph or a word. */
|
|
16
|
+
shortcut?: string;
|
|
13
17
|
className?: string;
|
|
14
18
|
}
|
|
15
|
-
export declare function Tooltip({ label, className }: TooltipProps): import("react").JSX.Element;
|
|
19
|
+
export declare function Tooltip({ label, shortcut, className }: TooltipProps): import("react").JSX.Element;
|
|
16
20
|
export interface WithTooltipProps {
|
|
17
21
|
label: string;
|
|
22
|
+
/** Passed straight to the surface — see `TooltipProps.shortcut`. */
|
|
23
|
+
shortcut?: string;
|
|
18
24
|
placement?: 'top' | 'bottom';
|
|
19
25
|
/** Extra classes on the wrapper — e.g. `min-w-0 shrink` so a truncating label keeps truncating inside it. */
|
|
20
26
|
wrapperClassName?: string;
|
|
21
27
|
children: ReactNode;
|
|
22
28
|
}
|
|
23
|
-
export declare function WithTooltip({ label, placement, wrapperClassName, children }: WithTooltipProps): import("react").JSX.Element;
|
|
29
|
+
export declare function WithTooltip({ label, shortcut, placement, wrapperClassName, children }: WithTooltipProps): import("react").JSX.Element;
|
|
24
30
|
//# sourceMappingURL=Tooltip.d.ts.map
|
package/dist/Tooltip.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tooltip.d.ts","sourceRoot":"","sources":["../src/Tooltip.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAsE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"Tooltip.d.ts","sourceRoot":"","sources":["../src/Tooltip.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAsE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAK1G;;;;;;;;GAQG;AACH,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAA;IACb;;4DAEwD;IACxD,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,wBAAgB,OAAO,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,YAAY,+BAOnE;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAA;IACb,oEAAoE;IACpE,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,SAAS,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAA;IAC5B,6GAA6G;IAC7G,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,QAAQ,EAAE,SAAS,CAAA;CACpB;AAKD,wBAAgB,WAAW,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAiB,EAAE,gBAAgB,EAAE,QAAQ,EAAE,EAAE,gBAAgB,+BAwC/G"}
|
package/dist/fit.d.ts
ADDED
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Viewport geometry for everything that floats — pure, so the decisions are
|
|
3
|
+
* testable without a browser.
|
|
4
|
+
*
|
|
5
|
+
* One module, because the failure it prevents keeps recurring one surface at
|
|
6
|
+
* a time: the files-panel picker was cut off at the right edge (fixed in
|
|
7
|
+
* Select, 2026-09-01), then a reply menu's highlight submenu was cut off the
|
|
8
|
+
* same way and the identity menu vanished under a z-indexed header
|
|
9
|
+
* (2026-09-03). A menu that hand-rolls its own geometry is a menu waiting to
|
|
10
|
+
* be the next screenshot; the shell calls these instead.
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* Where a menu of this size goes, given its anchor and the viewport.
|
|
14
|
+
*
|
|
15
|
+
* Left is clamped inside the viewport with an 8px margin. Height is capped
|
|
16
|
+
* at `cap` — Select's option list keeps the old `max-h-72` (288), a menu
|
|
17
|
+
* panel passes none and uses all the room it opens into, so it scrolls only
|
|
18
|
+
* when the screen truly has no space (the identity panel got Select's cap
|
|
19
|
+
* by accident and grew a scrollbar at full height, 2026-09-03) — but never
|
|
20
|
+
* taller than that room; when the room below the anchor is smaller than
|
|
21
|
+
* both the content and the room above, the menu opens UPWARD (anchored to
|
|
22
|
+
* the trigger's top via `bottom`). The 120px floor keeps a menu usable even
|
|
23
|
+
* in a cramped corner — scrollable beats invisible.
|
|
24
|
+
*/
|
|
25
|
+
export declare function fitMenu({ anchor, menu, viewport, cap, }: {
|
|
26
|
+
anchor: {
|
|
27
|
+
left: number;
|
|
28
|
+
top: number;
|
|
29
|
+
bottom: number;
|
|
30
|
+
};
|
|
31
|
+
menu: {
|
|
32
|
+
width: number;
|
|
33
|
+
contentHeight: number;
|
|
34
|
+
};
|
|
35
|
+
viewport: {
|
|
36
|
+
width: number;
|
|
37
|
+
height: number;
|
|
38
|
+
};
|
|
39
|
+
/** Tallest the menu may stand even with room to spare. Absent: the room is the only limit. */
|
|
40
|
+
cap?: number;
|
|
41
|
+
}): {
|
|
42
|
+
left: number;
|
|
43
|
+
top?: number;
|
|
44
|
+
bottom?: number;
|
|
45
|
+
maxHeight: number;
|
|
46
|
+
};
|
|
47
|
+
/**
|
|
48
|
+
* Keep a box a caller has already placed fully on screen.
|
|
49
|
+
*
|
|
50
|
+
* For the menus whose caller measured a rect and chose the corner itself
|
|
51
|
+
* (`position`): the caller's math stays authoritative, but its result can no
|
|
52
|
+
* longer land off screen — it is slid inside the viewport, never flipped,
|
|
53
|
+
* and capped to the viewport's height with the same 120px floor as fitMenu.
|
|
54
|
+
*/
|
|
55
|
+
export declare function clampBox({ box, viewport, }: {
|
|
56
|
+
box: {
|
|
57
|
+
left: number;
|
|
58
|
+
top: number;
|
|
59
|
+
width: number;
|
|
60
|
+
height: number;
|
|
61
|
+
};
|
|
62
|
+
viewport: {
|
|
63
|
+
width: number;
|
|
64
|
+
height: number;
|
|
65
|
+
};
|
|
66
|
+
}): {
|
|
67
|
+
left: number;
|
|
68
|
+
top: number;
|
|
69
|
+
maxHeight: number;
|
|
70
|
+
};
|
|
71
|
+
/**
|
|
72
|
+
* Where a submenu goes, given its trigger row and the viewport.
|
|
73
|
+
*
|
|
74
|
+
* To the RIGHT of the row when it fits, flipped to the LEFT when it does not
|
|
75
|
+
* — the measured flip two menus hand-rolled and one of them broke (the copy
|
|
76
|
+
* dropped the ref its measurement read, so it measured nothing and always
|
|
77
|
+
* opened rightward, off the screen). Top-aligned with the row, slid up when
|
|
78
|
+
* the tail would run past the bottom edge.
|
|
79
|
+
*/
|
|
80
|
+
export declare function fitSubmenu({ row, panel, viewport, }: {
|
|
81
|
+
row: {
|
|
82
|
+
left: number;
|
|
83
|
+
right: number;
|
|
84
|
+
top: number;
|
|
85
|
+
};
|
|
86
|
+
panel: {
|
|
87
|
+
width: number;
|
|
88
|
+
height: number;
|
|
89
|
+
};
|
|
90
|
+
viewport: {
|
|
91
|
+
width: number;
|
|
92
|
+
height: number;
|
|
93
|
+
};
|
|
94
|
+
}): {
|
|
95
|
+
left: number;
|
|
96
|
+
top: number;
|
|
97
|
+
};
|
|
98
|
+
//# sourceMappingURL=fit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fit.d.ts","sourceRoot":"","sources":["../src/fit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH;;;;;;;;;;;;GAYG;AACH,wBAAgB,OAAO,CAAC,EACtB,MAAM,EACN,IAAI,EACJ,QAAQ,EACR,GAA8B,GAC/B,EAAE;IACD,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;IACrD,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,CAAA;IAC9C,QAAQ,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;IAC3C,8FAA8F;IAC9F,GAAG,CAAC,EAAE,MAAM,CAAA;CACb,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CASrE;AAED;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,EACvB,GAAG,EACH,QAAQ,GACT,EAAE;IACD,GAAG,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;IACjE,QAAQ,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;CAC5C,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAKnD;AAED;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CAAC,EACzB,GAAG,EACH,KAAK,EACL,QAAQ,GACT,EAAE;IACD,GAAG,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAA;IACjD,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;IACxC,QAAQ,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;CAC5C,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAKhC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -18,6 +18,7 @@ export { Checkbox, type CheckboxProps } from './Checkbox';
|
|
|
18
18
|
export { Chip, type ChipProps, type ChipType } from './Chip';
|
|
19
19
|
export { ChipInput, InputChip, type ChipInputOption, type ChipInputProps, type InputChipProps } from './ChipInput';
|
|
20
20
|
export { IconButton, type IconButtonProps, type IconButtonVariant } from './IconButton';
|
|
21
|
+
export { Kbd, type KbdProps } from './Kbd';
|
|
21
22
|
export { IdentityMenu, IdentityPanel, type Identity, type IdentityMenuProps, type IdentityPanelProps } from './IdentityMenu';
|
|
22
23
|
export { Tooltip, WithTooltip, type TooltipProps, type WithTooltipProps } from './Tooltip';
|
|
23
24
|
export { Field, useFieldControlId, type FieldProps } from './Field';
|
|
@@ -31,7 +32,8 @@ export { EditableText, type EditableTextProps } from './EditableText';
|
|
|
31
32
|
export { EmptyState, type EmptyStateProps } from './EmptyState';
|
|
32
33
|
export { SkeletonBar, SkeletonList, SkeletonRow } from './Skeleton';
|
|
33
34
|
export { Breadcrumb, type BreadcrumbProps, type Crumb } from './Breadcrumb';
|
|
34
|
-
export { EnterHint, Menu, MenuItem, MenuRow, MenuSection, type MenuItemProps, type MenuProps } from './Menu';
|
|
35
|
+
export { EnterHint, Menu, MenuItem, MenuPanel, MenuRow, MenuSection, MenuSub, type MenuItemProps, type MenuPanelProps, type MenuProps, type MenuSubProps } from './Menu';
|
|
36
|
+
export { clampBox, fitMenu, fitSubmenu } from './fit';
|
|
35
37
|
export { NavItem, type NavItemProps } from './NavItem';
|
|
36
38
|
export { Person, type PersonProps } from './Person';
|
|
37
39
|
export { Rail, type RailProps } from './Rail';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,YAAY,CAAA;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,UAAU,CAAA;AACxE,OAAO,EAAE,WAAW,EAAE,KAAK,iBAAiB,EAAE,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAC1F,OAAO,EAAE,MAAM,EAAE,KAAK,WAAW,EAAE,KAAK,UAAU,EAAE,MAAM,UAAU,CAAA;AACpE,OAAO,EAAE,MAAM,EAAE,KAAK,WAAW,EAAE,KAAK,UAAU,EAAE,KAAK,aAAa,EAAE,MAAM,UAAU,CAAA;AACxF,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,YAAY,CAAA;AACzD,OAAO,EAAE,IAAI,EAAE,KAAK,SAAS,EAAE,KAAK,QAAQ,EAAE,MAAM,QAAQ,CAAA;AAC5D,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,eAAe,EAAE,KAAK,cAAc,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAA;AAClH,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,KAAK,iBAAiB,EAAE,MAAM,cAAc,CAAA;AACvF,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,KAAK,QAAQ,EAAE,KAAK,iBAAiB,EAAE,KAAK,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AAC5H,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,YAAY,EAAE,KAAK,gBAAgB,EAAE,MAAM,WAAW,CAAA;AAC1F,OAAO,EAAE,KAAK,EAAE,iBAAiB,EAAE,KAAK,UAAU,EAAE,MAAM,SAAS,CAAA;AACnE,OAAO,EAAE,MAAM,EAAE,KAAK,YAAY,EAAE,KAAK,WAAW,EAAE,MAAM,UAAU,CAAA;AACtE,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAA;AAC5D,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,YAAY,CAAA;AACzD,OAAO,EAAE,aAAa,EAAE,KAAK,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AACxE,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAClE,OAAO,EAAE,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,WAAW,CAAA;AACtD,OAAO,EAAE,YAAY,EAAE,KAAK,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AACrE,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,cAAc,CAAA;AAC/D,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AACnE,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,KAAK,KAAK,EAAE,MAAM,cAAc,CAAA;AAC3E,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,aAAa,EAAE,KAAK,SAAS,EAAE,MAAM,QAAQ,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|