cursedbelt 5.14.0 → 5.15.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 (51) hide show
  1. package/dist/react/components/DropdownMenu.d.ts.map +1 -1
  2. package/dist/react/components/DropdownMenu.js +5 -2
  3. package/dist/react/components/DropdownMenu.js.map +1 -1
  4. package/dist/react/components/HoverCard.d.ts.map +1 -1
  5. package/dist/react/components/HoverCard.js +3 -1
  6. package/dist/react/components/HoverCard.js.map +1 -1
  7. package/dist/react/components/Popover.d.ts +70 -8
  8. package/dist/react/components/Popover.d.ts.map +1 -1
  9. package/dist/react/components/Popover.js +75 -6
  10. package/dist/react/components/Popover.js.map +1 -1
  11. package/dist/react/components/SelectField.d.ts.map +1 -1
  12. package/dist/react/components/SelectField.js +3 -1
  13. package/dist/react/components/SelectField.js.map +1 -1
  14. package/dist/react/components/TooltipImpl.d.ts.map +1 -1
  15. package/dist/react/components/TooltipImpl.js +3 -1
  16. package/dist/react/components/TooltipImpl.js.map +1 -1
  17. package/dist/react/hooks/useOutsidePress.d.ts +48 -0
  18. package/dist/react/hooks/useOutsidePress.d.ts.map +1 -0
  19. package/dist/react/hooks/useOutsidePress.js +94 -0
  20. package/dist/react/hooks/useOutsidePress.js.map +1 -0
  21. package/dist/react/index.d.ts +2 -1
  22. package/dist/react/index.d.ts.map +1 -1
  23. package/dist/react/index.js +2 -1
  24. package/dist/react/index.js.map +1 -1
  25. package/dist/react/lib/floatingContainer.d.ts +19 -0
  26. package/dist/react/lib/floatingContainer.d.ts.map +1 -0
  27. package/dist/react/lib/floatingContainer.js +36 -0
  28. package/dist/react/lib/floatingContainer.js.map +1 -0
  29. package/dist/react/media/CanvasVideoPlayer.d.ts.map +1 -1
  30. package/dist/react/media/CanvasVideoPlayer.js +2 -1
  31. package/dist/react/media/CanvasVideoPlayer.js.map +1 -1
  32. package/dist/scripts/guardrailsEnforce.d.ts.map +1 -1
  33. package/dist/styles-areas/media.css +4 -4
  34. package/dist/styles-utilities.css +0 -3
  35. package/package.json +2 -2
  36. package/scripts/guardrails-baseline.json +2 -1
  37. package/scripts/guardrailsEnforce.spec.ts +53 -0
  38. package/scripts/guardrailsEnforce.ts +60 -0
  39. package/src/react/components/DropdownMenu.tsx +5 -2
  40. package/src/react/components/HoverCard.tsx +3 -1
  41. package/src/react/components/Popover.spec.tsx +203 -0
  42. package/src/react/components/Popover.tsx +168 -23
  43. package/src/react/components/SelectField.tsx +3 -1
  44. package/src/react/components/TooltipImpl.tsx +3 -1
  45. package/src/react/hooks/useOutsidePress.spec.tsx +112 -0
  46. package/src/react/hooks/useOutsidePress.ts +122 -0
  47. package/src/react/index.ts +2 -1
  48. package/src/react/lib/floatingContainer.ts +42 -0
  49. package/src/react/media/CanvasVideoPlayer.tsx +36 -28
  50. package/src/styles-areas/media.css +4 -4
  51. package/src/styles-utilities.css +0 -3
@@ -1 +1 @@
1
- {"version":3,"file":"DropdownMenu.d.ts","sourceRoot":"","sources":["../../../src/react/components/DropdownMenu.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AASvC,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,SAAS,CAAC;IACjB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,mFAAmF;IACnF,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;;;OAMG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,qDAAqD;IACrD,QAAQ,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC9B,OAAO,CAAC,EAAE,KAAK,CAAC;CACjB;AAED,gEAAgE;AAChE,MAAM,WAAW,mBAAmB;IAClC,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,IAAI,CAAC;IACd;qFACiF;IACjF,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB;AAED;;;;;GAKG;AACH,MAAM,MAAM,gBAAgB,GAAG,kBAAkB,GAAG,mBAAmB,CAAC;AAExE,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,SAAS,CAAC;IACnB,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,iFAAiF;IACjF,KAAK,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;IACnC,8EAA8E;IAC9E,IAAI,CAAC,EAAE,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC3C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;OAKG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;CACxC;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,EAC3B,OAAO,EACP,KAAK,EACL,KAAe,EACf,IAAe,EACf,SAAS,EACT,IAAI,EACJ,YAAY,GACb,EAAE,iBAAiB,+BAoBnB"}
1
+ {"version":3,"file":"DropdownMenu.d.ts","sourceRoot":"","sources":["../../../src/react/components/DropdownMenu.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAUvC,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,SAAS,CAAC;IACjB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,mFAAmF;IACnF,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;;;OAMG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,qDAAqD;IACrD,QAAQ,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC9B,OAAO,CAAC,EAAE,KAAK,CAAC;CACjB;AAED,gEAAgE;AAChE,MAAM,WAAW,mBAAmB;IAClC,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,IAAI,CAAC;IACd;qFACiF;IACjF,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB;AAED;;;;;GAKG;AACH,MAAM,MAAM,gBAAgB,GAAG,kBAAkB,GAAG,mBAAmB,CAAC;AAExE,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,SAAS,CAAC;IACnB,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,iFAAiF;IACjF,KAAK,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;IACnC,8EAA8E;IAC9E,IAAI,CAAC,EAAE,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC3C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;OAKG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;CACxC;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,EAC3B,OAAO,EACP,KAAK,EACL,KAAe,EACf,IAAe,EACf,SAAS,EACT,IAAI,EACJ,YAAY,GACb,EAAE,iBAAiB,+BAqBnB"}
@@ -2,6 +2,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import * as RDrop from '@radix-ui/react-dropdown-menu';
3
3
  import { Check, ChevronRight } from 'lucide-react';
4
4
  import { cn } from '../lib/cn.js';
5
+ import { useFloatingContainer } from '../lib/floatingContainer.js';
5
6
  import { FLOATING_ANIMATION, FLOATING_COLLISION_PADDING, FLOATING_CONTENT_BASE, FLOATING_ITEM_BASE, } from '../lib/floatingStyles.js';
6
7
  /**
7
8
  * Portal-based dropdown menu on Radix DropdownMenu. Never clipped by overflow
@@ -13,14 +14,16 @@ import { FLOATING_ANIMATION, FLOATING_COLLISION_PADDING, FLOATING_CONTENT_BASE,
13
14
  * {@link InfoHint}.
14
15
  */
15
16
  export function DropdownMenu({ trigger, items, align = 'start', side = 'bottom', className, open, onOpenChange, }) {
16
- return (_jsxs(RDrop.Root, { open: open, onOpenChange: onOpenChange, children: [_jsx(RDrop.Trigger, { asChild: true, children: trigger }), _jsx(RDrop.Portal, { children: _jsxs(RDrop.Content, { align: align, side: side, sideOffset: 4, collisionPadding: FLOATING_COLLISION_PADDING, className: cn(FLOATING_CONTENT_BASE, FLOATING_ANIMATION, 'min-w-[8rem] p-1', className), children: [items.map((item) => (_jsx(DropdownItem, { item: item }, item.key))), _jsx(RDrop.Arrow, { className: 'fill-border' })] }) })] }));
17
+ const container = useFloatingContainer();
18
+ return (_jsxs(RDrop.Root, { open: open, onOpenChange: onOpenChange, children: [_jsx(RDrop.Trigger, { asChild: true, children: trigger }), _jsx(RDrop.Portal, { container: container, children: _jsxs(RDrop.Content, { align: align, side: side, sideOffset: 4, collisionPadding: FLOATING_COLLISION_PADDING, className: cn(FLOATING_CONTENT_BASE, FLOATING_ANIMATION, 'min-w-[8rem] p-1', className), children: [items.map((item) => (_jsx(DropdownItem, { item: item }, item.key))), _jsx(RDrop.Arrow, { className: 'fill-border' })] }) })] }));
17
19
  }
18
20
  function DropdownItem({ item }) {
21
+ const container = useFloatingContainer();
19
22
  if (item.divider) {
20
23
  return _jsx(RDrop.Separator, { className: 'my-1 h-px bg-border' });
21
24
  }
22
25
  if (item.children?.length) {
23
- return (_jsxs(RDrop.Sub, { children: [_jsxs(RDrop.SubTrigger, { className: cn(FLOATING_ITEM_BASE, 'justify-between'), children: [_jsxs("span", { className: 'flex items-center gap-2', children: [item.icon && (_jsx("span", { className: 'inline-flex size-4 items-center justify-center', "aria-hidden": true, children: item.icon })), item.label] }), _jsx(ChevronRight, { className: 'size-4 opacity-60' })] }), _jsx(RDrop.Portal, { children: _jsx(RDrop.SubContent, { className: cn(FLOATING_CONTENT_BASE, FLOATING_ANIMATION, 'min-w-[8rem] p-1'), sideOffset: 2, collisionPadding: FLOATING_COLLISION_PADDING, children: item.children.map((child) => (_jsx(DropdownItem, { item: child }, child.key))) }) })] }));
26
+ return (_jsxs(RDrop.Sub, { children: [_jsxs(RDrop.SubTrigger, { className: cn(FLOATING_ITEM_BASE, 'justify-between'), children: [_jsxs("span", { className: 'flex items-center gap-2', children: [item.icon && (_jsx("span", { className: 'inline-flex size-4 items-center justify-center', "aria-hidden": true, children: item.icon })), item.label] }), _jsx(ChevronRight, { className: 'size-4 opacity-60' })] }), _jsx(RDrop.Portal, { container: container, children: _jsx(RDrop.SubContent, { className: cn(FLOATING_CONTENT_BASE, FLOATING_ANIMATION, 'min-w-[8rem] p-1'), sideOffset: 2, collisionPadding: FLOATING_COLLISION_PADDING, children: item.children.map((child) => (_jsx(DropdownItem, { item: child }, child.key))) }) })] }));
24
27
  }
25
28
  if (item.checked !== undefined) {
26
29
  return (_jsxs(RDrop.CheckboxItem, { checked: item.checked, onCheckedChange: () => item.onClick?.(), disabled: item.disabled, className: cn(FLOATING_ITEM_BASE, 'pl-8', item.destructive && 'text-destructive focus:text-destructive'), children: [_jsx(RDrop.ItemIndicator, { className: 'absolute left-2 flex size-4 items-center justify-center', children: _jsx(Check, { className: 'size-3' }) }), item.icon && (_jsx("span", { className: 'inline-flex size-4 items-center justify-center', "aria-hidden": true, children: item.icon })), _jsx("span", { children: item.label }), item.description && (_jsx("span", { className: 'ml-auto text-xs text-muted-foreground', children: item.description }))] }));
@@ -1 +1 @@
1
- {"version":3,"file":"DropdownMenu.js","sourceRoot":"","sources":["../../../src/react/components/DropdownMenu.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DropdownMenu.js","sourceRoot":"","sources":["../../../src/react/components/DropdownMenu.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"HoverCard.d.ts","sourceRoot":"","sources":["../../../src/react/components/HoverCard.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAUvC,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,SAAS,CAAC;IACnB,QAAQ,EAAE,SAAS,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;IACnC,IAAI,CAAC,EAAE,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC3C;kFAC8E;IAC9E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,EACxB,OAAO,EACP,QAAQ,EACR,KAAe,EACf,IAAe,EAGf,SAA+B,EAC/B,UAAgB,EAChB,SAAS,GACV,EAAE,cAAc,+BAwBhB"}
1
+ {"version":3,"file":"HoverCard.d.ts","sourceRoot":"","sources":["../../../src/react/components/HoverCard.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAWvC,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,SAAS,CAAC;IACnB,QAAQ,EAAE,SAAS,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;IACnC,IAAI,CAAC,EAAE,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC3C;kFAC8E;IAC9E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,EACxB,OAAO,EACP,QAAQ,EACR,KAAe,EACf,IAAe,EAGf,SAA+B,EAC/B,UAAgB,EAChB,SAAS,GACV,EAAE,cAAc,+BAyBhB"}
@@ -2,6 +2,7 @@ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-run
2
2
  import * as RHover from '@radix-ui/react-hover-card';
3
3
  import { useHasHover } from '../hooks/useHasHover.js';
4
4
  import { cn } from '../lib/cn.js';
5
+ import { useFloatingContainer } from '../lib/floatingContainer.js';
5
6
  import { HOVER_HINT_DELAY_MS } from '../lib/hoverIntent.js';
6
7
  import { FLOATING_ANIMATION, FLOATING_COLLISION_PADDING, FLOATING_CONTENT_BASE, } from '../lib/floatingStyles.js';
7
8
  /**
@@ -16,10 +17,11 @@ export function HoverCard({ trigger, children, align = 'start', side = 'bottom',
16
17
  // page, so it had the least excuse of the three for opening sooner than a tooltip.
17
18
  openDelay = HOVER_HINT_DELAY_MS, closeDelay = 100, className, }) {
18
19
  const hasHover = useHasHover();
20
+ const container = useFloatingContainer();
19
21
  // On touch devices, render the trigger without the HoverCard wrapper
20
22
  // (no hover = no way to trigger it; don't block pointer events).
21
23
  if (!hasHover)
22
24
  return _jsx(_Fragment, { children: trigger });
23
- return (_jsxs(RHover.Root, { openDelay: openDelay, closeDelay: closeDelay, children: [_jsx(RHover.Trigger, { asChild: true, children: trigger }), _jsx(RHover.Portal, { children: _jsxs(RHover.Content, { align: align, side: side, sideOffset: 4, collisionPadding: FLOATING_COLLISION_PADDING, className: cn(FLOATING_CONTENT_BASE, FLOATING_ANIMATION, 'p-3', className), children: [children, _jsx(RHover.Arrow, { className: 'fill-border' })] }) })] }));
25
+ return (_jsxs(RHover.Root, { openDelay: openDelay, closeDelay: closeDelay, children: [_jsx(RHover.Trigger, { asChild: true, children: trigger }), _jsx(RHover.Portal, { container: container, children: _jsxs(RHover.Content, { align: align, side: side, sideOffset: 4, collisionPadding: FLOATING_COLLISION_PADDING, className: cn(FLOATING_CONTENT_BASE, FLOATING_ANIMATION, 'p-3', className), children: [children, _jsx(RHover.Arrow, { className: 'fill-border' })] }) })] }));
24
26
  }
25
27
  //# sourceMappingURL=HoverCard.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"HoverCard.js","sourceRoot":"","sources":["../../../src/react/components/HoverCard.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,MAAM,4BAA4B,CAAC;AAErD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAClC,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EACL,kBAAkB,EAClB,0BAA0B,EAC1B,qBAAqB,GACtB,MAAM,0BAA0B,CAAC;AAclC;;;;;;GAMG;AACH,MAAM,UAAU,SAAS,CAAC,EACxB,OAAO,EACP,QAAQ,EACR,KAAK,GAAG,OAAO,EACf,IAAI,GAAG,QAAQ;AACf,iFAAiF;AACjF,mFAAmF;AACnF,SAAS,GAAG,mBAAmB,EAC/B,UAAU,GAAG,GAAG,EAChB,SAAS,GACM;IACf,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAE/B,qEAAqE;IACrE,iEAAiE;IACjE,IAAI,CAAC,QAAQ;QAAE,OAAO,4BAAG,OAAO,GAAI,CAAC;IAErC,OAAO,CACL,MAAC,MAAM,CAAC,IAAI,IAAC,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,aACvD,KAAC,MAAM,CAAC,OAAO,IAAC,OAAO,kBAAE,OAAO,GAAkB,EAClD,KAAC,MAAM,CAAC,MAAM,cACZ,MAAC,MAAM,CAAC,OAAO,IACb,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,IAAI,EACV,UAAU,EAAE,CAAC,EACb,gBAAgB,EAAE,0BAA0B,EAC5C,SAAS,EAAE,EAAE,CAAC,qBAAqB,EAAE,kBAAkB,EAAE,KAAK,EAAE,SAAS,CAAC,aAEzE,QAAQ,EACT,KAAC,MAAM,CAAC,KAAK,IAAC,SAAS,EAAC,aAAa,GAAG,IACzB,GACH,IACJ,CACf,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"HoverCard.js","sourceRoot":"","sources":["../../../src/react/components/HoverCard.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,MAAM,4BAA4B,CAAC;AAErD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAClC,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EACL,kBAAkB,EAClB,0BAA0B,EAC1B,qBAAqB,GACtB,MAAM,0BAA0B,CAAC;AAclC;;;;;;GAMG;AACH,MAAM,UAAU,SAAS,CAAC,EACxB,OAAO,EACP,QAAQ,EACR,KAAK,GAAG,OAAO,EACf,IAAI,GAAG,QAAQ;AACf,iFAAiF;AACjF,mFAAmF;AACnF,SAAS,GAAG,mBAAmB,EAC/B,UAAU,GAAG,GAAG,EAChB,SAAS,GACM;IACf,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,MAAM,SAAS,GAAG,oBAAoB,EAAE,CAAC;IAEzC,qEAAqE;IACrE,iEAAiE;IACjE,IAAI,CAAC,QAAQ;QAAE,OAAO,4BAAG,OAAO,GAAI,CAAC;IAErC,OAAO,CACL,MAAC,MAAM,CAAC,IAAI,IAAC,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,aACvD,KAAC,MAAM,CAAC,OAAO,IAAC,OAAO,kBAAE,OAAO,GAAkB,EAClD,KAAC,MAAM,CAAC,MAAM,IAAC,SAAS,EAAE,SAAS,YACjC,MAAC,MAAM,CAAC,OAAO,IACb,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,IAAI,EACV,UAAU,EAAE,CAAC,EACb,gBAAgB,EAAE,0BAA0B,EAC5C,SAAS,EAAE,EAAE,CAAC,qBAAqB,EAAE,kBAAkB,EAAE,KAAK,EAAE,SAAS,CAAC,aAEzE,QAAQ,EACT,KAAC,MAAM,CAAC,KAAK,IAAC,SAAS,EAAC,aAAa,GAAG,IACzB,GACH,IACJ,CACf,CAAC;AACJ,CAAC"}
@@ -1,6 +1,27 @@
1
- import type { ReactNode } from 'react';
1
+ import { type ReactNode } from 'react';
2
+ /**
3
+ * A point to open a popover at, for a panel that has no trigger of its own — a context
4
+ * menu at the pointer, or a menu one control opens for another.
5
+ */
6
+ export interface PopoverPoint {
7
+ x: number;
8
+ y: number;
9
+ /**
10
+ * The control this was opened from, when there is one. A press on it is never
11
+ * "outside": its own `onClick` decides whether the press opens or shuts, so a menu
12
+ * button toggles instead of closing on pointerdown and reopening on click.
13
+ */
14
+ trigger?: Element | null;
15
+ }
2
16
  export interface PopoverProps {
3
- trigger: ReactNode;
17
+ /** The control that opens it. Omit it and pass {@link PopoverProps.anchor} instead. */
18
+ trigger?: ReactNode;
19
+ /**
20
+ * Position the panel against this instead of a trigger: an element, or a point.
21
+ * With no `open` prop, the panel is open exactly while this is non-null, and
22
+ * `onOpenChange(false)` is the caller's cue to clear it.
23
+ */
24
+ anchor?: Element | PopoverPoint | null;
4
25
  children: ReactNode;
5
26
  open?: boolean;
6
27
  onOpenChange?: (open: boolean) => void;
@@ -9,15 +30,56 @@ export interface PopoverProps {
9
30
  sideOffset?: number;
10
31
  /** Width of the popover panel. Default: auto (sized to content). */
11
32
  width?: string | number;
12
- /** Show the little arrow pointing at the trigger. Default true. */
33
+ /** Show the little arrow pointing at the trigger. Default true (false when `unstyled`). */
13
34
  arrow?: boolean;
14
35
  className?: string;
36
+ /**
37
+ * Drop the belt's surface — border, background, shadow, padding, arrow — and keep only
38
+ * the behaviour: positioning, collision flipping, and closing on a tap or click outside,
39
+ * on Escape and on focus leaving. For a panel that belongs to its own visual language
40
+ * (a video player's controls over the picture); `className` then carries the look.
41
+ */
42
+ unstyled?: boolean;
43
+ /**
44
+ * A press outside ONLY closes the panel, and never also lands on what is under it —
45
+ * the way a native menu behaves. Right for a menu over something a stray tap would
46
+ * change (a playing video). Default false: the press closes the panel AND reaches its
47
+ * target, which is right for a panel beside a form.
48
+ */
49
+ modal?: boolean;
50
+ /**
51
+ * Render in place rather than in a portal. The portal already follows the full-screen
52
+ * element (see `floatingContainer.ts`), so this is for a panel that must scroll or
53
+ * clip with its container. Default true.
54
+ */
55
+ portal?: boolean;
56
+ /** Move focus into the panel when it opens. Default true; false keeps it on the trigger. */
57
+ autoFocus?: boolean;
58
+ /** Accessible name of the panel, when no heading inside it names it. */
59
+ label?: string;
60
+ /** ARIA role of the panel. Default `dialog` (Radix's). */
61
+ role?: 'dialog' | 'menu' | 'listbox';
15
62
  }
16
63
  /**
17
- * Portal-based popover on Radix Popover. General-purpose anchored panel — never
18
- * clipped by overflow ancestors, auto-flips + shifts to stay on-screen. Use for
19
- * confirmations, color/date pickers, inline editors, and grouped item pickers.
20
- * For action menus use {@link DropdownMenu}; for field help use {@link InfoHint}.
64
+ * THE anchored floating panel of the fleet, on Radix Popover. Never clipped by overflow
65
+ * ancestors, auto-flips and shifts to stay on screen, and — the reason it must be the one
66
+ * everybody uses — **it closes when you tap or click anywhere else**, on Escape, and when
67
+ * focus leaves it, on a phone exactly as on a desktop.
68
+ *
69
+ * 🔴 Owner report, 2026-09-27, on an iPhone: flix's subtitle menu, and music's folder
70
+ * menu, stayed open after tapping away. Each was a hand-rolled `{open && <div
71
+ * className="absolute …">}` with no outside-press handling at all, so the bug was in every
72
+ * copy on every screen. The guardrail `no-raw-popover` now flags that shape in every app.
73
+ *
74
+ * Use for menus, pickers, confirmations and inline editors. For an action list prefer
75
+ * {@link DropdownMenu} (keyboard roving built in); for field help use {@link InfoHint}.
21
76
  */
22
- export declare function Popover({ trigger, children, open, onOpenChange, align, side, sideOffset, width, arrow, className, }: PopoverProps): import("react").JSX.Element;
77
+ export declare function Popover({ trigger, anchor, children, open, onOpenChange, align, side, sideOffset, width, arrow, className, unstyled, modal, portal, autoFocus, label, role, }: PopoverProps): import("react").JSX.Element;
78
+ /**
79
+ * Wrap a control inside a {@link Popover}'s panel so pressing it also closes the panel —
80
+ * for an uncontrolled popover whose items should dismiss it.
81
+ */
82
+ export declare function PopoverClose({ children }: {
83
+ children: ReactNode;
84
+ }): import("react").JSX.Element;
23
85
  //# sourceMappingURL=Popover.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Popover.d.ts","sourceRoot":"","sources":["../../../src/react/components/Popover.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAQvC,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,SAAS,CAAC;IACnB,QAAQ,EAAE,SAAS,CAAC;IACpB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,KAAK,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;IACnC,IAAI,CAAC,EAAE,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC3C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oEAAoE;IACpE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,mEAAmE;IACnE,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;GAKG;AACH,wBAAgB,OAAO,CAAC,EACtB,OAAO,EACP,QAAQ,EACR,IAAI,EACJ,YAAY,EACZ,KAAe,EACf,IAAe,EACf,UAAc,EACd,KAAK,EACL,KAAY,EACZ,SAAS,GACV,EAAE,YAAY,+BAmBd"}
1
+ {"version":3,"file":"Popover.d.ts","sourceRoot":"","sources":["../../../src/react/components/Popover.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,SAAS,EAA0C,MAAM,OAAO,CAAC;AAU/E;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;CAC1B;AAED,MAAM,WAAW,YAAY;IAC3B,uFAAuF;IACvF,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,GAAG,YAAY,GAAG,IAAI,CAAC;IACvC,QAAQ,EAAE,SAAS,CAAC;IACpB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,KAAK,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;IACnC,IAAI,CAAC,EAAE,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC3C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oEAAoE;IACpE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,2FAA2F;IAC3F,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;;OAKG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,4FAA4F;IAC5F,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,wEAAwE;IACxE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0DAA0D;IAC1D,IAAI,CAAC,EAAE,QAAQ,GAAG,MAAM,GAAG,SAAS,CAAC;CACtC;AAMD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,OAAO,CAAC,EACtB,OAAO,EACP,MAAM,EACN,QAAQ,EACR,IAAI,EACJ,YAAY,EACZ,KAAe,EACf,IAAe,EACf,UAAc,EACd,KAAK,EACL,KAAK,EACL,SAAS,EACT,QAAgB,EAChB,KAAa,EACb,MAAa,EACb,SAAgB,EAChB,KAAK,EACL,IAAI,GACL,EAAE,YAAY,+BAuFd;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,+BAEjE"}
@@ -1,14 +1,83 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import * as RPopover from '@radix-ui/react-popover';
3
+ import { useCallback, useMemo, useRef, useState } from 'react';
4
+ import { useOutsidePress } from '../hooks/useOutsidePress.js';
3
5
  import { cn } from '../lib/cn.js';
6
+ import { useFloatingContainer } from '../lib/floatingContainer.js';
4
7
  import { FLOATING_ANIMATION, FLOATING_COLLISION_PADDING, FLOATING_CONTENT_BASE, } from '../lib/floatingStyles.js';
8
+ function isPoint(anchor) {
9
+ return typeof anchor.x === 'number' && !('getBoundingClientRect' in anchor);
10
+ }
11
+ /**
12
+ * THE anchored floating panel of the fleet, on Radix Popover. Never clipped by overflow
13
+ * ancestors, auto-flips and shifts to stay on screen, and — the reason it must be the one
14
+ * everybody uses — **it closes when you tap or click anywhere else**, on Escape, and when
15
+ * focus leaves it, on a phone exactly as on a desktop.
16
+ *
17
+ * 🔴 Owner report, 2026-09-27, on an iPhone: flix's subtitle menu, and music's folder
18
+ * menu, stayed open after tapping away. Each was a hand-rolled `{open && <div
19
+ * className="absolute …">}` with no outside-press handling at all, so the bug was in every
20
+ * copy on every screen. The guardrail `no-raw-popover` now flags that shape in every app.
21
+ *
22
+ * Use for menus, pickers, confirmations and inline editors. For an action list prefer
23
+ * {@link DropdownMenu} (keyboard roving built in); for field help use {@link InfoHint}.
24
+ */
25
+ export function Popover({ trigger, anchor, children, open, onOpenChange, align = 'start', side = 'bottom', sideOffset = 4, width, arrow, className, unstyled = false, modal = false, portal = true, autoFocus = true, label, role, }) {
26
+ const container = useFloatingContainer();
27
+ const showArrow = arrow ?? !unstyled;
28
+ // A point becomes a zero-size virtual element — what Radix's popper measures.
29
+ const virtualRef = useMemo(() => {
30
+ if (!anchor)
31
+ return null;
32
+ const measure = isPoint(anchor)
33
+ ? () => new DOMRect(anchor.x, anchor.y, 0, 0)
34
+ : () => anchor.getBoundingClientRect();
35
+ return { current: { getBoundingClientRect: measure } };
36
+ }, [anchor]);
37
+ const anchorTrigger = anchor ? (isPoint(anchor) ? anchor.trigger : anchor) : null;
38
+ // Always controlled underneath, so the outside-press fallback below can close an
39
+ // uncontrolled popover too.
40
+ const [ownOpen, setOwnOpen] = useState(false);
41
+ const isOpen = open ?? (anchor !== undefined ? anchor !== null : ownOpen);
42
+ const setOpen = useCallback((next) => {
43
+ if (open === undefined && anchor === undefined)
44
+ setOwnOpen(next);
45
+ onOpenChange?.(next);
46
+ }, [open, anchor, onOpenChange]);
47
+ /*
48
+ * 🔴 Radix's own outside-press dismissal is not enough on its own. `@radix-ui/react-popover`
49
+ * (1.1.23) defers it to the `click` after the pointerdown and then SKIPS it when any
50
+ * outside handler stopped that click's propagation ("the interaction was intercepted") —
51
+ * and a video surface, a card or a row routinely does, so a tap on exactly the things
52
+ * most likely to be under a menu left it open. `useOutsidePress` listens in the capture
53
+ * phase, before anything can stop it; when Radix has already closed the panel, its second
54
+ * close is a no-op. Escape and `modal` stay Radix's.
55
+ */
56
+ // Typed as Radix types its Trigger; with `asChild` it is whatever element `trigger` is.
57
+ const triggerRef = useRef(null);
58
+ const pressInside = useOutsidePress({
59
+ open: isOpen,
60
+ onDismiss: () => setOpen(false),
61
+ inside: [triggerRef, anchorTrigger],
62
+ escape: false,
63
+ });
64
+ const content = (_jsxs(RPopover.Content, { align: align, side: side, sideOffset: sideOffset, collisionPadding: FLOATING_COLLISION_PADDING, style: width != null ? { width } : undefined, "aria-label": label, ...(role ? { role } : {}), onOpenAutoFocus: autoFocus ? undefined : (event) => event.preventDefault(), onInteractOutside: (event) => {
65
+ // The anchor's own control decides open/shut with its click — see PopoverPoint.
66
+ if (anchorTrigger?.contains(event.target))
67
+ event.preventDefault();
68
+ },
69
+ // React-tree capture: a press on a nested layer this panel portalled (a Select's
70
+ // list, a sub-menu) is INSIDE even though the DOM puts it elsewhere.
71
+ onClickCapture: pressInside.onClickCapture, className: cn(unstyled
72
+ ? 'z-[var(--z-popover)] outline-none'
73
+ : cn(FLOATING_CONTENT_BASE, 'p-3'), FLOATING_ANIMATION, className), children: [children, showArrow && _jsx(RPopover.Arrow, { className: 'fill-border' })] }));
74
+ return (_jsxs(RPopover.Root, { open: isOpen, onOpenChange: setOpen, modal: modal, children: [virtualRef ? _jsx(RPopover.Anchor, { virtualRef: virtualRef }) : null, trigger !== undefined ? (_jsx(RPopover.Trigger, { asChild: true, ref: triggerRef, children: trigger })) : null, portal ? _jsx(RPopover.Portal, { container: container, children: content }) : content] }));
75
+ }
5
76
  /**
6
- * Portal-based popover on Radix Popover. General-purpose anchored panel — never
7
- * clipped by overflow ancestors, auto-flips + shifts to stay on-screen. Use for
8
- * confirmations, color/date pickers, inline editors, and grouped item pickers.
9
- * For action menus use {@link DropdownMenu}; for field help use {@link InfoHint}.
77
+ * Wrap a control inside a {@link Popover}'s panel so pressing it also closes the panel —
78
+ * for an uncontrolled popover whose items should dismiss it.
10
79
  */
11
- export function Popover({ trigger, children, open, onOpenChange, align = 'start', side = 'bottom', sideOffset = 4, width, arrow = true, className, }) {
12
- return (_jsxs(RPopover.Root, { open: open, onOpenChange: onOpenChange, children: [_jsx(RPopover.Trigger, { asChild: true, children: trigger }), _jsx(RPopover.Portal, { children: _jsxs(RPopover.Content, { align: align, side: side, sideOffset: sideOffset, collisionPadding: FLOATING_COLLISION_PADDING, style: width != null ? { width } : undefined, className: cn(FLOATING_CONTENT_BASE, FLOATING_ANIMATION, 'p-3', className), children: [children, arrow && _jsx(RPopover.Arrow, { className: 'fill-border' })] }) })] }));
80
+ export function PopoverClose({ children }) {
81
+ return _jsx(RPopover.Close, { asChild: true, children: children });
13
82
  }
14
83
  //# sourceMappingURL=Popover.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Popover.js","sourceRoot":"","sources":["../../../src/react/components/Popover.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,QAAQ,MAAM,yBAAyB,CAAC;AAEpD,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAClC,OAAO,EACL,kBAAkB,EAClB,0BAA0B,EAC1B,qBAAqB,GACtB,MAAM,0BAA0B,CAAC;AAiBlC;;;;;GAKG;AACH,MAAM,UAAU,OAAO,CAAC,EACtB,OAAO,EACP,QAAQ,EACR,IAAI,EACJ,YAAY,EACZ,KAAK,GAAG,OAAO,EACf,IAAI,GAAG,QAAQ,EACf,UAAU,GAAG,CAAC,EACd,KAAK,EACL,KAAK,GAAG,IAAI,EACZ,SAAS,GACI;IACb,OAAO,CACL,MAAC,QAAQ,CAAC,IAAI,IAAC,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,YAAY,aACnD,KAAC,QAAQ,CAAC,OAAO,IAAC,OAAO,kBAAE,OAAO,GAAoB,EACtD,KAAC,QAAQ,CAAC,MAAM,cACd,MAAC,QAAQ,CAAC,OAAO,IACf,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,IAAI,EACV,UAAU,EAAE,UAAU,EACtB,gBAAgB,EAAE,0BAA0B,EAC5C,KAAK,EAAE,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,EAC5C,SAAS,EAAE,EAAE,CAAC,qBAAqB,EAAE,kBAAkB,EAAE,KAAK,EAAE,SAAS,CAAC,aAEzE,QAAQ,EACR,KAAK,IAAI,KAAC,QAAQ,CAAC,KAAK,IAAC,SAAS,EAAC,aAAa,GAAG,IACnC,GACH,IACJ,CACjB,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"Popover.js","sourceRoot":"","sources":["../../../src/react/components/Popover.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"SelectField.d.ts","sourceRoot":"","sources":["../../../src/react/components/SelectField.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,OAAO,EAAE,KAAK,WAAW,EAAqB,MAAM,iBAAiB,CAAC;AAQtE,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,SAAS,CAAC;IACjB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,YAAY,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;IACzB,MAAM,CAAC,EAAE,WAAW,EAAE,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,qFAAqF;IACrF,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;mEAC+D;IAC/D,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,6EAA6E;IAC7E,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;;;;;;OAOG;IACH,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,sEAAsE;IACtE,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB;sFACkF;IAClF,cAAc,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC;IAC5C,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,WAAW,CAAC,EAC1B,KAAK,EACL,aAAa,EACb,OAAY,EACZ,MAAW,EACX,WAAuB,EACvB,QAAQ,EACR,UAAiB,EACjB,IAAW,EACX,EAAE,EACF,IAAI,EACJ,QAAQ,EACR,SAAS,EACT,UAAU,EACV,SAAS,EACT,YAAY,EAAE,SAAS,EACvB,iBAAiB,EAAE,cAAc,EACjC,cAAc,EAAE,WAAW,EAC3B,kBAAkB,EAAE,eAAe,GACpC,EAAE,gBAAgB,+BA0FlB"}
1
+ {"version":3,"file":"SelectField.d.ts","sourceRoot":"","sources":["../../../src/react/components/SelectField.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,OAAO,EAAE,KAAK,WAAW,EAAqB,MAAM,iBAAiB,CAAC;AAQtE,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,SAAS,CAAC;IACjB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,YAAY,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;IACzB,MAAM,CAAC,EAAE,WAAW,EAAE,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,qFAAqF;IACrF,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;mEAC+D;IAC/D,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,6EAA6E;IAC7E,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;;;;;;OAOG;IACH,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,sEAAsE;IACtE,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB;sFACkF;IAClF,cAAc,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC;IAC5C,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,WAAW,CAAC,EAC1B,KAAK,EACL,aAAa,EACb,OAAY,EACZ,MAAW,EACX,WAAuB,EACvB,QAAQ,EACR,UAAiB,EACjB,IAAW,EACX,EAAE,EACF,IAAI,EACJ,QAAQ,EACR,SAAS,EACT,UAAU,EACV,SAAS,EACT,YAAY,EAAE,SAAS,EACvB,iBAAiB,EAAE,cAAc,EACjC,cAAc,EAAE,WAAW,EAC3B,kBAAkB,EAAE,eAAe,GACpC,EAAE,gBAAgB,+BA2FlB"}
@@ -2,6 +2,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import * as RSelect from '@radix-ui/react-select';
3
3
  import { Check, ChevronDown, ChevronUp } from 'lucide-react';
4
4
  import { cn } from '../lib/cn.js';
5
+ import { useFloatingContainer } from '../lib/floatingContainer.js';
5
6
  import { fieldControlClass } from '../lib/field.js';
6
7
  import { FLOATING_ANIMATION, FLOATING_COLLISION_PADDING, FLOATING_CONTENT_BASE, FLOATING_ITEM_BASE, } from '../lib/floatingStyles.js';
7
8
  /**
@@ -20,6 +21,7 @@ import { FLOATING_ANIMATION, FLOATING_COLLISION_PADDING, FLOATING_CONTENT_BASE,
20
21
  export function SelectField({ value, onValueChange, options = [], groups = [], placeholder = 'Select…', disabled, fieldStyle = true, size = 'md', id, name, required, className, emptyLabel, emptyHint, 'aria-label': ariaLabel, 'aria-labelledby': ariaLabelledBy, 'aria-invalid': ariaInvalid, 'aria-describedby': ariaDescribedBy, }) {
21
22
  const allGroups = groups.length > 0 ? groups : options.length > 0 ? [{ options }] : [];
22
23
  const empty = allGroups.every((group) => group.options.length === 0);
23
- return (_jsxs(RSelect.Root, { value: value, onValueChange: onValueChange, disabled: disabled, name: name, required: required, children: [_jsxs(RSelect.Trigger, { id: id, "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy, "aria-invalid": ariaInvalid, "aria-describedby": ariaDescribedBy, className: cn(fieldStyle && fieldControlClass(size), 'flex items-center justify-between gap-2 data-[placeholder]:text-muted-foreground', className), children: [_jsx(RSelect.Value, { placeholder: placeholder }), _jsx(RSelect.Icon, { asChild: true, children: _jsx(ChevronDown, { className: 'size-4 shrink-0 opacity-50' }) })] }), _jsx(RSelect.Portal, { children: _jsxs(RSelect.Content, { position: 'popper', sideOffset: 4, collisionPadding: FLOATING_COLLISION_PADDING, className: cn(FLOATING_COLLISION_PADDING, FLOATING_CONTENT_BASE, FLOATING_ANIMATION, 'max-h-[var(--radix-select-content-available-height)] min-w-[var(--radix-select-trigger-width)] p-1'), children: [_jsx(RSelect.ScrollUpButton, { className: 'flex cursor-default items-center justify-center py-1', children: _jsx(ChevronUp, { className: 'size-4' }) }), _jsxs(RSelect.Viewport, { children: [empty && (_jsxs("div", { className: 'flex flex-col gap-0.5 px-2 py-2.5 text-left', children: [_jsx("span", { className: 'text-sm font-medium', children: emptyLabel ?? 'Nothing to choose from yet' }), emptyHint && _jsx("span", { className: 'text-xs text-muted-foreground', children: emptyHint })] })), allGroups.map((group, gi) => (_jsxs(RSelect.Group, { children: [group.label && (_jsx(RSelect.Label, { className: 'px-2 py-1.5 text-xs font-semibold text-muted-foreground', children: group.label })), group.options.map((opt) => (_jsxs(RSelect.Item, { value: opt.value, disabled: opt.disabled, className: cn(FLOATING_ITEM_BASE, 'pr-8'), children: [_jsx(RSelect.ItemIndicator, { className: 'absolute right-2 flex size-4 items-center justify-center', children: _jsx(Check, { className: 'size-3' }) }), _jsx(RSelect.ItemText, { children: opt.label }), opt.description && (_jsx("span", { className: 'text-xs text-muted-foreground', children: opt.description }))] }, opt.value))), gi < allGroups.length - 1 && _jsx(RSelect.Separator, { className: 'my-1 h-px bg-border' })] }, group.label ?? gi)))] }), _jsx(RSelect.ScrollDownButton, { className: 'flex cursor-default items-center justify-center py-1', children: _jsx(ChevronDown, { className: 'size-4' }) })] }) })] }));
24
+ const container = useFloatingContainer();
25
+ return (_jsxs(RSelect.Root, { value: value, onValueChange: onValueChange, disabled: disabled, name: name, required: required, children: [_jsxs(RSelect.Trigger, { id: id, "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy, "aria-invalid": ariaInvalid, "aria-describedby": ariaDescribedBy, className: cn(fieldStyle && fieldControlClass(size), 'flex items-center justify-between gap-2 data-[placeholder]:text-muted-foreground', className), children: [_jsx(RSelect.Value, { placeholder: placeholder }), _jsx(RSelect.Icon, { asChild: true, children: _jsx(ChevronDown, { className: 'size-4 shrink-0 opacity-50' }) })] }), _jsx(RSelect.Portal, { container: container, children: _jsxs(RSelect.Content, { position: 'popper', sideOffset: 4, collisionPadding: FLOATING_COLLISION_PADDING, className: cn(FLOATING_COLLISION_PADDING, FLOATING_CONTENT_BASE, FLOATING_ANIMATION, 'max-h-[var(--radix-select-content-available-height)] min-w-[var(--radix-select-trigger-width)] p-1'), children: [_jsx(RSelect.ScrollUpButton, { className: 'flex cursor-default items-center justify-center py-1', children: _jsx(ChevronUp, { className: 'size-4' }) }), _jsxs(RSelect.Viewport, { children: [empty && (_jsxs("div", { className: 'flex flex-col gap-0.5 px-2 py-2.5 text-left', children: [_jsx("span", { className: 'text-sm font-medium', children: emptyLabel ?? 'Nothing to choose from yet' }), emptyHint && _jsx("span", { className: 'text-xs text-muted-foreground', children: emptyHint })] })), allGroups.map((group, gi) => (_jsxs(RSelect.Group, { children: [group.label && (_jsx(RSelect.Label, { className: 'px-2 py-1.5 text-xs font-semibold text-muted-foreground', children: group.label })), group.options.map((opt) => (_jsxs(RSelect.Item, { value: opt.value, disabled: opt.disabled, className: cn(FLOATING_ITEM_BASE, 'pr-8'), children: [_jsx(RSelect.ItemIndicator, { className: 'absolute right-2 flex size-4 items-center justify-center', children: _jsx(Check, { className: 'size-3' }) }), _jsx(RSelect.ItemText, { children: opt.label }), opt.description && (_jsx("span", { className: 'text-xs text-muted-foreground', children: opt.description }))] }, opt.value))), gi < allGroups.length - 1 && _jsx(RSelect.Separator, { className: 'my-1 h-px bg-border' })] }, group.label ?? gi)))] }), _jsx(RSelect.ScrollDownButton, { className: 'flex cursor-default items-center justify-center py-1', children: _jsx(ChevronDown, { className: 'size-4' }) })] }) })] }));
24
26
  }
25
27
  //# sourceMappingURL=SelectField.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SelectField.js","sourceRoot":"","sources":["../../../src/react/components/SelectField.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SelectField.js","sourceRoot":"","sources":["../../../src/react/components/SelectField.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"TooltipImpl.d.ts","sourceRoot":"","sources":["../../../src/react/components/TooltipImpl.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE7D;;;;;;GAMG;AACH,UAAU,gBAAiB,SAAQ,YAAY;IAC7C;;;qCAGiC;IACjC,GAAG,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;CACzB;AAED;;;;GAIG;AACH,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,EAClC,QAAQ,EACR,OAAO,EACP,IAAI,EACJ,SAAS,EACT,SAAS,EACT,QAAQ,EACR,MAAc,EACd,UAAU,EACV,aAAa,EACb,SAAS,EACT,GAAG,GACJ,EAAE,gBAAgB,+BAyVlB"}
1
+ {"version":3,"file":"TooltipImpl.d.ts","sourceRoot":"","sources":["../../../src/react/components/TooltipImpl.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE7D;;;;;;GAMG;AACH,UAAU,gBAAiB,SAAQ,YAAY;IAC7C;;;qCAGiC;IACjC,GAAG,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;CACzB;AAED;;;;GAIG;AACH,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,EAClC,QAAQ,EACR,OAAO,EACP,IAAI,EACJ,SAAS,EACT,SAAS,EACT,QAAQ,EACR,MAAc,EACd,UAAU,EACV,aAAa,EACb,SAAS,EACT,GAAG,GACJ,EAAE,gBAAgB,+BA0VlB"}
@@ -3,6 +3,7 @@ import * as RTooltip from '@radix-ui/react-tooltip';
3
3
  import { cloneElement, isValidElement, useEffect, useRef, useState } from 'react';
4
4
  import { useHasHover } from '../hooks/useHasHover.js';
5
5
  import { cn } from '../lib/cn.js';
6
+ import { useFloatingContainer } from '../lib/floatingContainer.js';
6
7
  import { FLOATING_COLLISION_PADDING } from '../lib/floatingStyles.js';
7
8
  import { HOVER_HINT_DELAY_MS, HOVER_HINT_INSTANT_MS } from '../lib/hoverIntent.js';
8
9
  /**
@@ -12,6 +13,7 @@ import { HOVER_HINT_DELAY_MS, HOVER_HINT_INSTANT_MS } from '../lib/hoverIntent.j
12
13
  */
13
14
  export default function TooltipImpl({ children, content, side, placement, multiline, maxWidth, mobile = 'off', mobileIcon, iconClassName, className, arm, }) {
14
15
  const hasHover = useHasHover();
16
+ const container = useFloatingContainer();
15
17
  const [open, setOpen] = useState(false);
16
18
  const resolvedSide = placement ?? side ?? 'top';
17
19
  const triggerRef = useRef(null);
@@ -177,7 +179,7 @@ export default function TooltipImpl({ children, content, side, placement, multil
177
179
  };
178
180
  // `open` is deliberately absent: see `shown` above.
179
181
  }, [disabled]);
180
- const bubble = (_jsx(RTooltip.Portal, { children: _jsxs(RTooltip.Content, { "data-cb-tooltip": '', side: resolvedSide, sideOffset: 6, collisionPadding: FLOATING_COLLISION_PADDING, style: maxWidth != null ? { maxWidth } : undefined, onPointerDownOutside: (e) => {
182
+ const bubble = (_jsx(RTooltip.Portal, { container: container, children: _jsxs(RTooltip.Content, { "data-cb-tooltip": '', side: resolvedSide, sideOffset: 6, collisionPadding: FLOATING_COLLISION_PADDING, style: maxWidth != null ? { maxWidth } : undefined, onPointerDownOutside: (e) => {
181
183
  // A touch disclosure's OWN trigger is outside the bubble, but a tap on it is the
182
184
  // toggle's business (it closes an open bubble on its click). Letting the layer
183
185
  // dismiss here as well would close on this pointerdown and re-open on the click.
@@ -1 +1 @@
1
- {"version":3,"file":"TooltipImpl.js","sourceRoot":"","sources":["../../../src/react/components/TooltipImpl.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TooltipImpl.js","sourceRoot":"","sources":["../../../src/react/components/TooltipImpl.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ type InsideTarget = {
2
+ current: Element | null;
3
+ } | Element | null | undefined;
4
+ export interface UseOutsidePressOptions {
5
+ /** Only listens while true. */
6
+ open: boolean;
7
+ /** Called once per press outside (and on Escape, unless `escape` is false). */
8
+ onDismiss: () => void;
9
+ /**
10
+ * What counts as inside: the panel, and the control that toggles it — a press on the
11
+ * toggle is left to its own `onClick`, so it toggles instead of shutting and reopening.
12
+ */
13
+ inside?: readonly InsideTarget[];
14
+ /** Also dismiss on Escape. Default true. */
15
+ escape?: boolean;
16
+ /**
17
+ * The outside press ONLY dismisses and never also reaches what is under it — the way a
18
+ * native menu behaves. For a panel laid over something a stray tap would change (a list
19
+ * whose rows play on tap). Default false.
20
+ */
21
+ modal?: boolean;
22
+ }
23
+ /**
24
+ * Close a panel when the reader presses anywhere else — the ONE implementation of it in the
25
+ * fleet. `Popover` uses it; use it directly only for a panel that cannot be a `Popover`: a
26
+ * sheet, or a panel that is always rendered and only BECOMES an overlay at one width.
27
+ *
28
+ * 🔴 Owner report, 2026-09-27, on an iPhone: menus that stayed open after tapping away.
29
+ * Three things make an outside-press handler right, and every hand-rolled one got at least
30
+ * one wrong:
31
+ *
32
+ * · **`click`, in the CAPTURE phase on `document`.** Capture runs before any handler can
33
+ * `stopPropagation()`, and a tap on a video surface, a card or a row routinely does —
34
+ * Radix Popover's own dismissal is skipped in exactly that case, which is why `Popover`
35
+ * needs this too. `click` rather than `pointerdown`, so a finger that lands outside to
36
+ * SCROLL does not close the panel: a scroll never produces a click.
37
+ * · **decided after the event has finished dispatching**, so a press inside the panel's
38
+ * React tree — a nested layer it portalled elsewhere in the DOM — is seen as inside
39
+ * (spread the returned props on the panel), and a press on another floating layer (a
40
+ * menu or dialog opened from the panel) belongs to that layer.
41
+ * · **the toggle is inside**, or pressing an open menu's own button shuts it and reopens
42
+ * it a frame later — the "menu that ignores the second press" desk hit on 2026-09-07.
43
+ */
44
+ export declare function useOutsidePress({ open, onDismiss, inside, escape: closeOnEscape, modal, }: UseOutsidePressOptions): {
45
+ onClickCapture: () => void;
46
+ };
47
+ export {};
48
+ //# sourceMappingURL=useOutsidePress.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useOutsidePress.d.ts","sourceRoot":"","sources":["../../../src/react/hooks/useOutsidePress.ts"],"names":[],"mappings":"AAEA,KAAK,YAAY,GAAG;IAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAAA;CAAE,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC;AAE7E,MAAM,WAAW,sBAAsB;IACrC,+BAA+B;IAC/B,IAAI,EAAE,OAAO,CAAC;IACd,+EAA+E;IAC/E,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB;;;OAGG;IACH,MAAM,CAAC,EAAE,SAAS,YAAY,EAAE,CAAC;IACjC,4CAA4C;IAC5C,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;;OAIG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAUD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,eAAe,CAAC,EAC9B,IAAI,EACJ,SAAS,EACT,MAAW,EACX,MAAM,EAAE,aAAoB,EAC5B,KAAa,GACd,EAAE,sBAAsB,GAAG;IAAE,cAAc,EAAE,MAAM,IAAI,CAAA;CAAE,CA8DzD"}
@@ -0,0 +1,94 @@
1
+ import { useEffect, useRef } from 'react';
2
+ /** A floating layer another component portalled — a press there belongs to that layer. */
3
+ const FLOATING_LAYER = '[data-radix-popper-content-wrapper],[role="dialog"],[role="alertdialog"],[role="menu"],[role="listbox"]';
4
+ function resolve(target) {
5
+ return (target && 'current' in target ? target.current : target) ?? null;
6
+ }
7
+ /**
8
+ * Close a panel when the reader presses anywhere else — the ONE implementation of it in the
9
+ * fleet. `Popover` uses it; use it directly only for a panel that cannot be a `Popover`: a
10
+ * sheet, or a panel that is always rendered and only BECOMES an overlay at one width.
11
+ *
12
+ * 🔴 Owner report, 2026-09-27, on an iPhone: menus that stayed open after tapping away.
13
+ * Three things make an outside-press handler right, and every hand-rolled one got at least
14
+ * one wrong:
15
+ *
16
+ * · **`click`, in the CAPTURE phase on `document`.** Capture runs before any handler can
17
+ * `stopPropagation()`, and a tap on a video surface, a card or a row routinely does —
18
+ * Radix Popover's own dismissal is skipped in exactly that case, which is why `Popover`
19
+ * needs this too. `click` rather than `pointerdown`, so a finger that lands outside to
20
+ * SCROLL does not close the panel: a scroll never produces a click.
21
+ * · **decided after the event has finished dispatching**, so a press inside the panel's
22
+ * React tree — a nested layer it portalled elsewhere in the DOM — is seen as inside
23
+ * (spread the returned props on the panel), and a press on another floating layer (a
24
+ * menu or dialog opened from the panel) belongs to that layer.
25
+ * · **the toggle is inside**, or pressing an open menu's own button shuts it and reopens
26
+ * it a frame later — the "menu that ignores the second press" desk hit on 2026-09-07.
27
+ */
28
+ export function useOutsidePress({ open, onDismiss, inside = [], escape: closeOnEscape = true, modal = false, }) {
29
+ const pressInsideRef = useRef(false);
30
+ // Latest values without re-subscribing on every render — a listener torn down mid-gesture
31
+ // would miss the very click it exists for.
32
+ const latest = useRef({ onDismiss, inside, modal });
33
+ latest.current = { onDismiss, inside, modal };
34
+ useEffect(() => {
35
+ if (!open)
36
+ return;
37
+ const timers = new Set();
38
+ const isInside = (node) => latest.current.inside.some((target) => Boolean(resolve(target)?.contains(node)));
39
+ /**
40
+ * A press on a floating layer that does NOT hold this panel's own controls — a menu or
41
+ * dialog opened FROM the panel — belongs to that layer. A layer that does hold them (the
42
+ * Modal this popover was opened inside) is just the page, and a press there is outside.
43
+ */
44
+ const onAnotherLayer = (node) => {
45
+ const layer = node instanceof Element ? node.closest(FLOATING_LAYER) : node.parentElement?.closest(FLOATING_LAYER);
46
+ if (!layer?.isConnected)
47
+ return false;
48
+ return !latest.current.inside.some((target) => {
49
+ const element = resolve(target);
50
+ return element ? layer.contains(element) : false;
51
+ });
52
+ };
53
+ const onClick = (event) => {
54
+ pressInsideRef.current = false;
55
+ const target = event.target instanceof Node ? event.target : null;
56
+ if (target && latest.current.modal && !isInside(target) && !onAnotherLayer(target)) {
57
+ // Decidable now for a DOM-inside press; a React-tree-inside press would have been
58
+ // swallowed too, so a modal panel's portalled layers must live inside `inside`.
59
+ event.preventDefault();
60
+ event.stopPropagation();
61
+ }
62
+ const timer = setTimeout(() => {
63
+ timers.delete(timer);
64
+ if (pressInsideRef.current || !target)
65
+ return;
66
+ if (isInside(target))
67
+ return;
68
+ if (onAnotherLayer(target))
69
+ return;
70
+ latest.current.onDismiss();
71
+ }, 0);
72
+ timers.add(timer);
73
+ };
74
+ const onKeyDown = (event) => {
75
+ if (event.key === 'Escape')
76
+ latest.current.onDismiss();
77
+ };
78
+ document.addEventListener('click', onClick, true);
79
+ if (closeOnEscape)
80
+ document.addEventListener('keydown', onKeyDown);
81
+ return () => {
82
+ document.removeEventListener('click', onClick, true);
83
+ document.removeEventListener('keydown', onKeyDown);
84
+ for (const timer of timers)
85
+ clearTimeout(timer);
86
+ };
87
+ }, [open, closeOnEscape]);
88
+ return {
89
+ onClickCapture: () => {
90
+ pressInsideRef.current = true;
91
+ },
92
+ };
93
+ }
94
+ //# sourceMappingURL=useOutsidePress.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useOutsidePress.js","sourceRoot":"","sources":["../../../src/react/hooks/useOutsidePress.ts"],"names":[],"mappings":"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"}
@@ -117,7 +117,7 @@ export { Page, PageContainer, PageHeader, type PageHeaderProps, ReadableColumn,
117
117
  export { PathText, type PathTextProps } from './components/PathText.js';
118
118
  export { TruncatedText, type TruncatedTextProps } from './components/TruncatedText.js';
119
119
  export { PluginCard, type PluginCardProps } from './components/PluginCard.js';
120
- export { Popover, type PopoverProps } from './components/Popover.js';
120
+ export { Popover, PopoverClose, type PopoverPoint, type PopoverProps } from './components/Popover.js';
121
121
  export { Progress, type ProgressProps, ProgressRing, type ProgressRingProps, } from './components/Progress.js';
122
122
  export { PromptDialog, type PromptDialogProps } from './components/PromptDialog.js';
123
123
  export { QueryBoundary, type QueryBoundaryProps, type QueryLike, } from './components/QueryBoundary.js';
@@ -186,6 +186,7 @@ export { type FormValues, jsonEqual, readFormValues, type UseDirtyFormOptions, t
186
186
  export { useDismissibleItems } from './hooks/useDismissibleItems.js';
187
187
  export { type DragAxis, type DragReorderOptions, type DragReorderResult, reorderByEdge, reorderItems, useDragReorder, } from './hooks/useDragReorder.js';
188
188
  export { useEscapeKey } from './hooks/useEscapeKey.js';
189
+ export { type UseOutsidePressOptions, useOutsidePress } from './hooks/useOutsidePress.js';
189
190
  export { useHasHover } from './hooks/useHasHover.js';
190
191
  export { useKeyboardInset } from './hooks/useKeyboardInset.js';
191
192
  export { useKeyDown } from './hooks/useKeyDown.js';