cursedbelt 5.13.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.
- package/dist/react/components/DropdownMenu.d.ts.map +1 -1
- package/dist/react/components/DropdownMenu.js +5 -2
- package/dist/react/components/DropdownMenu.js.map +1 -1
- package/dist/react/components/HoverCard.d.ts.map +1 -1
- package/dist/react/components/HoverCard.js +3 -1
- package/dist/react/components/HoverCard.js.map +1 -1
- package/dist/react/components/Popover.d.ts +70 -8
- package/dist/react/components/Popover.d.ts.map +1 -1
- package/dist/react/components/Popover.js +75 -6
- package/dist/react/components/Popover.js.map +1 -1
- package/dist/react/components/SelectField.d.ts.map +1 -1
- package/dist/react/components/SelectField.js +3 -1
- package/dist/react/components/SelectField.js.map +1 -1
- package/dist/react/components/TooltipImpl.d.ts.map +1 -1
- package/dist/react/components/TooltipImpl.js +3 -1
- package/dist/react/components/TooltipImpl.js.map +1 -1
- package/dist/react/file-tree/FileTree.d.ts +4 -0
- package/dist/react/file-tree/FileTree.d.ts.map +1 -1
- package/dist/react/file-tree/FileTree.js +23 -5
- package/dist/react/file-tree/FileTree.js.map +1 -1
- package/dist/react/file-tree/fileTree.css +52 -3
- package/dist/react/hooks/useOutsidePress.d.ts +48 -0
- package/dist/react/hooks/useOutsidePress.d.ts.map +1 -0
- package/dist/react/hooks/useOutsidePress.js +94 -0
- package/dist/react/hooks/useOutsidePress.js.map +1 -0
- package/dist/react/index.d.ts +2 -1
- package/dist/react/index.d.ts.map +1 -1
- package/dist/react/index.js +2 -1
- package/dist/react/index.js.map +1 -1
- package/dist/react/lib/floatingContainer.d.ts +19 -0
- package/dist/react/lib/floatingContainer.d.ts.map +1 -0
- package/dist/react/lib/floatingContainer.js +36 -0
- package/dist/react/lib/floatingContainer.js.map +1 -0
- package/dist/react/media/CanvasVideoPlayer.d.ts.map +1 -1
- package/dist/react/media/CanvasVideoPlayer.js +2 -1
- package/dist/react/media/CanvasVideoPlayer.js.map +1 -1
- package/dist/scripts/guardrailsEnforce.d.ts.map +1 -1
- package/dist/styles-areas/media.css +4 -4
- package/dist/styles-utilities.css +0 -3
- package/package.json +2 -2
- package/scripts/guardrails-baseline.json +2 -1
- package/scripts/guardrailsEnforce.spec.ts +53 -0
- package/scripts/guardrailsEnforce.ts +60 -0
- package/src/react/components/DropdownMenu.tsx +5 -2
- package/src/react/components/HoverCard.tsx +3 -1
- package/src/react/components/Popover.spec.tsx +203 -0
- package/src/react/components/Popover.tsx +168 -23
- package/src/react/components/SelectField.tsx +3 -1
- package/src/react/components/TooltipImpl.tsx +3 -1
- package/src/react/file-tree/FileTree.spec.tsx +89 -0
- package/src/react/file-tree/FileTree.tsx +64 -4
- package/src/react/file-tree/fileTree.css +52 -3
- package/src/react/hooks/useOutsidePress.spec.tsx +112 -0
- package/src/react/hooks/useOutsidePress.ts +122 -0
- package/src/react/index.ts +2 -1
- package/src/react/lib/floatingContainer.ts +42 -0
- package/src/react/media/CanvasVideoPlayer.tsx +36 -28
- package/src/styles-areas/media.css +4 -4
- 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;
|
|
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
|
-
|
|
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":";AAAA,OAAO,KAAK,KAAK,MAAM,+BAA+B,CAAC;AACvD,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEnD,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAClC,OAAO,EACL,kBAAkB,EAClB,0BAA0B,EAC1B,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,0BAA0B,CAAC;AA4DlC;;;;;;;;GAQG;AACH,MAAM,UAAU,YAAY,CAAC,EAC3B,OAAO,EACP,KAAK,EACL,KAAK,GAAG,OAAO,EACf,IAAI,GAAG,QAAQ,EACf,SAAS,EACT,IAAI,EACJ,YAAY,GACM;IAClB,OAAO,CACL,MAAC,KAAK,CAAC,IAAI,IAAC,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,YAAY,aAChD,KAAC,KAAK,CAAC,OAAO,IAAC,OAAO,kBAAE,OAAO,GAAiB,EAChD,KAAC,KAAK,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"DropdownMenu.js","sourceRoot":"","sources":["../../../src/react/components/DropdownMenu.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,KAAK,MAAM,+BAA+B,CAAC;AACvD,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEnD,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAClC,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EACL,kBAAkB,EAClB,0BAA0B,EAC1B,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,0BAA0B,CAAC;AA4DlC;;;;;;;;GAQG;AACH,MAAM,UAAU,YAAY,CAAC,EAC3B,OAAO,EACP,KAAK,EACL,KAAK,GAAG,OAAO,EACf,IAAI,GAAG,QAAQ,EACf,SAAS,EACT,IAAI,EACJ,YAAY,GACM;IAClB,MAAM,SAAS,GAAG,oBAAoB,EAAE,CAAC;IACzC,OAAO,CACL,MAAC,KAAK,CAAC,IAAI,IAAC,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,YAAY,aAChD,KAAC,KAAK,CAAC,OAAO,IAAC,OAAO,kBAAE,OAAO,GAAiB,EAChD,KAAC,KAAK,CAAC,MAAM,IAAC,SAAS,EAAE,SAAS,YAChC,MAAC,KAAK,CAAC,OAAO,IACZ,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,IAAI,EACV,UAAU,EAAE,CAAC,EACb,gBAAgB,EAAE,0BAA0B,EAC5C,SAAS,EAAE,EAAE,CAAC,qBAAqB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,SAAS,CAAC,aAEtF,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CACnB,KAAC,YAAY,IAAgB,IAAI,EAAE,IAAI,IAApB,IAAI,CAAC,GAAG,CAAgB,CAC5C,CAAC,EACF,KAAC,KAAK,CAAC,KAAK,IAAC,SAAS,EAAC,aAAa,GAAG,IACzB,GACH,IACJ,CACd,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,EAAE,IAAI,EAA8B;IACxD,MAAM,SAAS,GAAG,oBAAoB,EAAE,CAAC;IACzC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,OAAO,KAAC,KAAK,CAAC,SAAS,IAAC,SAAS,EAAC,qBAAqB,GAAG,CAAC;IAC7D,CAAC;IAED,IAAI,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;QAC1B,OAAO,CACL,MAAC,KAAK,CAAC,GAAG,eACR,MAAC,KAAK,CAAC,UAAU,IAAC,SAAS,EAAE,EAAE,CAAC,kBAAkB,EAAE,iBAAiB,CAAC,aACpE,gBAAM,SAAS,EAAC,yBAAyB,aACtC,IAAI,CAAC,IAAI,IAAI,CACZ,eAAM,SAAS,EAAC,gDAAgD,iCAC7D,IAAI,CAAC,IAAI,GACL,CACR,EACA,IAAI,CAAC,KAAK,IACN,EACP,KAAC,YAAY,IAAC,SAAS,EAAC,mBAAmB,GAAG,IAC7B,EACnB,KAAC,KAAK,CAAC,MAAM,IAAC,SAAS,EAAE,SAAS,YAChC,KAAC,KAAK,CAAC,UAAU,IACf,SAAS,EAAE,EAAE,CAAC,qBAAqB,EAAE,kBAAkB,EAAE,kBAAkB,CAAC,EAC5E,UAAU,EAAE,CAAC,EACb,gBAAgB,EAAE,0BAA0B,YAE3C,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAC5B,KAAC,YAAY,IAAiB,IAAI,EAAE,KAAK,IAAtB,KAAK,CAAC,GAAG,CAAiB,CAC9C,CAAC,GACe,GACN,IACL,CACb,CAAC;IACJ,CAAC;IAED,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAC/B,OAAO,CACL,MAAC,KAAK,CAAC,YAAY,IACjB,OAAO,EAAE,IAAI,CAAC,OAAO,EACrB,eAAe,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,EACvC,QAAQ,EAAE,IAAI,CAAC,QAAQ,EACvB,SAAS,EAAE,EAAE,CACX,kBAAkB,EAClB,MAAM,EACN,IAAI,CAAC,WAAW,IAAI,yCAAyC,CAC9D,aAED,KAAC,KAAK,CAAC,aAAa,IAAC,SAAS,EAAC,yDAAyD,YACtF,KAAC,KAAK,IAAC,SAAS,EAAC,QAAQ,GAAG,GACR,EACrB,IAAI,CAAC,IAAI,IAAI,CACZ,eAAM,SAAS,EAAC,gDAAgD,iCAC7D,IAAI,CAAC,IAAI,GACL,CACR,EACD,yBAAO,IAAI,CAAC,KAAK,GAAQ,EACxB,IAAI,CAAC,WAAW,IAAI,CACnB,eAAM,SAAS,EAAC,uCAAuC,YAAE,IAAI,CAAC,WAAW,GAAQ,CAClF,IACkB,CACtB,CAAC;IACJ,CAAC;IAED,OAAO,CACL,MAAC,KAAK,CAAC,IAAI,IACT,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,EAChC,QAAQ,EAAE,IAAI,CAAC,QAAQ,EACvB,KAAK,EAAE,IAAI,CAAC,KAAK,EACjB,SAAS,EAAE,EAAE,CACX,kBAAkB,EAClB,IAAI,CAAC,WAAW,IAAI,iEAAiE,CACtF,aAEA,IAAI,CAAC,IAAI,IAAI,CACZ,eAAM,SAAS,EAAC,gDAAgD,iCAC7D,IAAI,CAAC,IAAI,GACL,CACR,EACD,yBAAO,IAAI,CAAC,KAAK,GAAQ,EACxB,IAAI,CAAC,WAAW,IAAI,CACnB,eAAM,SAAS,EAAC,uCAAuC,YAAE,IAAI,CAAC,WAAW,GAAQ,CAClF,IACU,CACd,CAAC;AACJ,CAAC"}
|
|
@@ -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;
|
|
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;
|
|
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
|
|
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
|
-
|
|
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
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
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,
|
|
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
|
-
*
|
|
7
|
-
*
|
|
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
|
|
12
|
-
return
|
|
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;
|
|
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;
|
|
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
|
-
|
|
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":";AAAA,OAAO,KAAK,OAAO,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE7D,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAClC,OAAO,EAAoB,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACtE,OAAO,EACL,kBAAkB,EAClB,0BAA0B,EAC1B,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,0BAA0B,CAAC;AAkDlC;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,WAAW,CAAC,EAC1B,KAAK,EACL,aAAa,EACb,OAAO,GAAG,EAAE,EACZ,MAAM,GAAG,EAAE,EACX,WAAW,GAAG,SAAS,EACvB,QAAQ,EACR,UAAU,GAAG,IAAI,EACjB,IAAI,GAAG,IAAI,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,GAClB;IACjB,MAAM,SAAS,GACb,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACvE,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC;
|
|
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":"
|
|
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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"}
|
|
@@ -145,6 +145,10 @@
|
|
|
145
145
|
* mercy of the browser, and touch does not have HTML5 dnd at all. The drag only *starts*
|
|
146
146
|
* past a few pixels of travel, so a plain click still selects what it landed on.
|
|
147
147
|
*
|
|
148
|
+
* ๐ด On touch it starts only from the row's GRIP (2026-09-27). A finger anywhere else on the
|
|
149
|
+
* row scrolls the list โ see `startsDrag` and `.cbft-grip`, and the owner's report beside the
|
|
150
|
+
* grip's markup for what a whole-row touch drag cost.
|
|
151
|
+
*
|
|
148
152
|
* ๐ด EXTERNAL drags are the opposite and must stay that way: a file from Finder and a tile
|
|
149
153
|
* from a gallery grid arrive as real `dragenter`/`drop` events with a `DataTransfer`, and
|
|
150
154
|
* there is no pointer gesture to intercept. So both live here side by side โ see
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FileTree.d.ts","sourceRoot":"","sources":["../../../src/react/file-tree/FileTree.tsx"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"FileTree.d.ts","sourceRoot":"","sources":["../../../src/react/file-tree/FileTree.tsx"],"names":[],"mappings":"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"}
|
|
@@ -992,10 +992,10 @@ export function FileTree({ nodes, selectedId, onSelect, selectedIds, onSelection
|
|
|
992
992
|
return;
|
|
993
993
|
}
|
|
994
994
|
/*
|
|
995
|
-
* โฅโ and โฅโ MOVE the focused row โ the keyboard's half of the drag
|
|
996
|
-
*
|
|
997
|
-
*
|
|
998
|
-
* and why there is no โฅโ/โฅโ.
|
|
995
|
+
* โฅโ and โฅโ MOVE the focused row โ the keyboard's half of the drag. On touch the
|
|
996
|
+
* pointer half starts only from the row's grip (a press-and-drag anywhere else scrolls
|
|
997
|
+
* the list โ see `startsDrag`). See `resolveKeyboardMove` for what the two directions
|
|
998
|
+
* mean and why there is no โฅโ/โฅโ.
|
|
999
999
|
*
|
|
1000
1000
|
* ๐ด Before the arrow cases below, so one key never means two things. Everything else
|
|
1001
1001
|
* in this handler is bare-key, which is what keeps โงโ/โF and the rest free for the app.
|
|
@@ -1408,6 +1408,9 @@ export function FileTree({ nodes, selectedId, onSelect, selectedIds, onSelection
|
|
|
1408
1408
|
}, key: node.id, "data-id": node.id, className: 'cbft-row', "data-selected": isSelected || undefined, "data-cut": cut?.has(node.id) || undefined, "data-dragged": isDragged || undefined, "data-into": isDropTarget || undefined, "data-marker": marker ?? undefined, "data-pinned": isPinned || undefined, "data-pinned-copy": pinnedCopy || undefined, "data-ancestor": openPath.path.has(node.id) || undefined, "data-holds-open": (row.expandable && !row.expanded && openPath.holder === node.id) || undefined, "data-access": node.access && node.access !== 'normal' ? node.access : undefined, "data-matched": node.matched || undefined, style: { '--cbft-depth': row.depth }, onPointerDown: (event) => {
|
|
1409
1409
|
if (inTools(event.target))
|
|
1410
1410
|
return;
|
|
1411
|
+
// A finger on the row is a SCROLL; only the grip picks it up. See `startsDrag`.
|
|
1412
|
+
if (!startsDrag(event))
|
|
1413
|
+
return;
|
|
1411
1414
|
beginDrag(event, node);
|
|
1412
1415
|
}, onClick: (event) => {
|
|
1413
1416
|
if (inTools(event.target))
|
|
@@ -1449,7 +1452,8 @@ export function FileTree({ nodes, selectedId, onSelect, selectedIds, onSelection
|
|
|
1449
1452
|
event.stopPropagation();
|
|
1450
1453
|
togglePin(node);
|
|
1451
1454
|
}, children: _jsxs("svg", { viewBox: '0 0 24 24', width: '12', height: '12', fill: 'none', stroke: 'currentColor', strokeWidth: '2', strokeLinecap: 'round', strokeLinejoin: 'round', focusable: 'false', "aria-hidden": 'true', children: [_jsx("path", { d: 'M12 17v5' }), _jsx("path", { d: 'M9 10.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24V16a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-.76a2 2 0 0 0-1.11-1.79l-1.78-.9A2 2 0 0 1 15 10.76V7a1 1 0 0 1 1-1 2 2 0 0 0 0-4H8a2 2 0 0 0 0 4 1 1 0 0 1 1 1z' })] }) }) }) })) : null,
|
|
1452
|
-
renderTools ? _jsx("span", { className: 'cbft-tools', children: renderTools(node) }) : null
|
|
1455
|
+
renderTools ? _jsx("span", { className: 'cbft-tools', children: renderTools(node) }) : null,
|
|
1456
|
+
canRearrange && node.draggable !== false ? (_jsx("span", { className: 'cbft-grip', "aria-hidden": 'true', "data-cbft-grip": '', children: _jsxs("svg", { viewBox: '0 0 24 24', width: '14', height: '14', fill: 'currentColor', stroke: 'none', focusable: 'false', "aria-hidden": 'true', children: [_jsx("circle", { cx: '9', cy: '5', r: '1.6' }), _jsx("circle", { cx: '9', cy: '12', r: '1.6' }), _jsx("circle", { cx: '9', cy: '19', r: '1.6' }), _jsx("circle", { cx: '15', cy: '5', r: '1.6' }), _jsx("circle", { cx: '15', cy: '12', r: '1.6' }), _jsx("circle", { cx: '15', cy: '19', r: '1.6' })] }) })) : null));
|
|
1453
1457
|
// The "why not" only exists while the tree genuinely cannot be rearranged;
|
|
1454
1458
|
// wrapping every row in a tooltip otherwise would put a hint on a working
|
|
1455
1459
|
// control saying nothing.
|
|
@@ -1480,6 +1484,20 @@ export function FileTree({ nodes, selectedId, onSelect, selectedIds, onSelection
|
|
|
1480
1484
|
function inTools(target) {
|
|
1481
1485
|
return target instanceof Element && target.closest('.cbft-tools') !== null;
|
|
1482
1486
|
}
|
|
1487
|
+
/**
|
|
1488
|
+
* Whether this press may start a drag: any press from a mouse, and a touch or pen press only
|
|
1489
|
+
* on the row's grip.
|
|
1490
|
+
*
|
|
1491
|
+
* ๐ด By `pointerType`, not by a media query. An iPad with a trackpad and a laptop with a touch
|
|
1492
|
+
* screen are both "coarse" and "fine" at once; what decides whether a press-and-move should
|
|
1493
|
+
* scroll is the thing doing the pressing. An unreported type (`''`, what a synthetic event
|
|
1494
|
+
* carries) is treated as a mouse, which is what it was before the grip existed.
|
|
1495
|
+
*/
|
|
1496
|
+
function startsDrag(event) {
|
|
1497
|
+
if (event.pointerType !== 'touch' && event.pointerType !== 'pen')
|
|
1498
|
+
return true;
|
|
1499
|
+
return event.target instanceof Element && event.target.closest('[data-cbft-grip]') !== null;
|
|
1500
|
+
}
|
|
1483
1501
|
function nameOf(nodes, id) {
|
|
1484
1502
|
for (const node of nodes) {
|
|
1485
1503
|
if (node.id === id)
|