@data-slot/hover-card 0.2.86 → 0.2.88
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/README.md +4 -1
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -60,7 +60,7 @@ const hoverCard = createHoverCard(element, {
|
|
|
60
60
|
|--------|------|---------|-------------|
|
|
61
61
|
| `defaultOpen` | `boolean` | `false` | Initial open state (uncontrolled only) |
|
|
62
62
|
| `open` | `boolean` | - | Controlled open state |
|
|
63
|
-
| `delay` | `number` | `700` | Delay before opening on hover/focus (ms) |
|
|
63
|
+
| `delay` | `number` | `700` | Delay before opening on hover/keyboard focus (ms) |
|
|
64
64
|
| `skipDelayDuration` | `number` | `300` | Duration to skip delay after closing (ms). Set `0` to disable warm-up. |
|
|
65
65
|
| `closeDelay` | `number` | `300` | Delay before closing after leave/blur (ms) |
|
|
66
66
|
| `side` | `"top" \| "right" \| "bottom" \| "left"` | `"bottom"` | Preferred side relative to trigger |
|
|
@@ -158,6 +158,9 @@ root.addEventListener("hover-card:change", (e) => {
|
|
|
158
158
|
|
|
159
159
|
`reason` is one of: `"pointer" | "focus" | "blur" | "dismiss" | "api"`.
|
|
160
160
|
|
|
161
|
+
Focus opening is keyboard-intent based (`Tab` navigation). Programmatic focus (for example, dialog auto-focus on open) does not auto-open the hover-card.
|
|
162
|
+
Hover opening is pointer-intent based (recent mouse movement). Synthetic `pointerenter` caused by newly shown UI under a static cursor does not auto-open the hover-card.
|
|
163
|
+
|
|
161
164
|
### Inbound
|
|
162
165
|
|
|
163
166
|
- `hover-card:set` - force open state
|
package/dist/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});let e=require(`@data-slot/core`);const t=[`top`,`right`,`bottom`,`left`],n=[`start`,`center`,`end`];let r=0;function i(i,a={}){let o=(0,e.getPart)(i,`hover-card-trigger`),s=(0,e.getPart)(i,`hover-card-content`),c=(0,e.getPart)(i,`hover-card-positioner`),l=c&&s&&c.contains(s)?c:null,u=(0,e.getPart)(i,`hover-card-portal`),d=u&&l&&u.contains(l)?u:null;if(!o||!s)throw Error(`Hover-card requires trigger and content slots`);let f=a.open!==void 0,p=a.defaultOpen??(0,e.getDataBool)(i,`defaultOpen`)??!1,m=a.delay??(0,e.getDataNumber)(i,`delay`)??700,h=a.skipDelayDuration??(0,e.getDataNumber)(i,`skipDelayDuration`)??300,g=a.closeDelay??(0,e.getDataNumber)(i,`closeDelay`)??300,_=a.onOpenChange,v=a.closeOnClickOutside??(0,e.getDataBool)(i,`closeOnClickOutside`)??!0,y=a.closeOnEscape??(0,e.getDataBool)(i,`closeOnEscape`)??!0,b=a.portal??(0,e.getDataBool)(s,`portal`)??(0,e.getDataBool)(i,`portal`)??!0,x=a.side??(0,e.getDataEnum)(s,`side`,t)??(0,e.getDataEnum)(i,`side`,t)??`bottom`,S=a.align??(0,e.getDataEnum)(s,`align`,n)??(0,e.getDataEnum)(i,`align`,n)??`center`,C=a.sideOffset??(0,e.getDataNumber)(s,`sideOffset`)??(0,e.getDataNumber)(i,`sideOffset`)??4,w=a.alignOffset??(0,e.getDataNumber)(s,`alignOffset`)??(0,e.getDataNumber)(i,`alignOffset`)??0,T=a.avoidCollisions??(0,e.getDataBool)(s,`avoidCollisions`)??(0,e.getDataBool)(i,`avoidCollisions`)??!0,E=a.collisionPadding??(0,e.getDataNumber)(s,`collisionPadding`)??(0,e.getDataNumber)(i,`collisionPadding`)??8,D=a.open??p,O=!1,k=!1,A=!1,j=!1,M=null,N=null,P=[],
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});let e=require(`@data-slot/core`);const t=[`top`,`right`,`bottom`,`left`],n=[`start`,`center`,`end`];let r=0;function i(i,a={}){let o=(0,e.getPart)(i,`hover-card-trigger`),s=(0,e.getPart)(i,`hover-card-content`),c=(0,e.getPart)(i,`hover-card-positioner`),l=c&&s&&c.contains(s)?c:null,u=(0,e.getPart)(i,`hover-card-portal`),d=u&&l&&u.contains(l)?u:null;if(!o||!s)throw Error(`Hover-card requires trigger and content slots`);let f=a.open!==void 0,p=a.defaultOpen??(0,e.getDataBool)(i,`defaultOpen`)??!1,m=a.delay??(0,e.getDataNumber)(i,`delay`)??700,h=a.skipDelayDuration??(0,e.getDataNumber)(i,`skipDelayDuration`)??300,g=a.closeDelay??(0,e.getDataNumber)(i,`closeDelay`)??300,_=a.onOpenChange,v=a.closeOnClickOutside??(0,e.getDataBool)(i,`closeOnClickOutside`)??!0,y=a.closeOnEscape??(0,e.getDataBool)(i,`closeOnEscape`)??!0,b=a.portal??(0,e.getDataBool)(s,`portal`)??(0,e.getDataBool)(i,`portal`)??!0,x=a.side??(0,e.getDataEnum)(s,`side`,t)??(0,e.getDataEnum)(i,`side`,t)??`bottom`,S=a.align??(0,e.getDataEnum)(s,`align`,n)??(0,e.getDataEnum)(i,`align`,n)??`center`,C=a.sideOffset??(0,e.getDataNumber)(s,`sideOffset`)??(0,e.getDataNumber)(i,`sideOffset`)??4,w=a.alignOffset??(0,e.getDataNumber)(s,`alignOffset`)??(0,e.getDataNumber)(i,`alignOffset`)??0,T=a.avoidCollisions??(0,e.getDataBool)(s,`avoidCollisions`)??(0,e.getDataBool)(i,`avoidCollisions`)??!0,E=a.collisionPadding??(0,e.getDataNumber)(s,`collisionPadding`)??(0,e.getDataNumber)(i,`collisionPadding`)??8,D=a.open??p,O=!1,k=!1,A=!1,j=!1,M=null,N=null,P=-1/0,F=-1/0,I=[],L=(0,e.createPortalLifecycle)({content:s,root:i,enabled:b,wrapperSlot:l?void 0:`hover-card-positioner`,container:l??void 0,mountTarget:l?d??l:void 0}),R=(0,e.ensureId)(s,`hover-card-content`);o.setAttribute(`aria-haspopup`,`dialog`),o.setAttribute(`aria-controls`,R),s.setAttribute(`data-side`,x),s.setAttribute(`data-align`,S);let z=()=>o.hasAttribute(`disabled`)||o.getAttribute(`aria-disabled`)===`true`,B=()=>{M&&=(clearTimeout(M),null)},V=()=>{N&&=(clearTimeout(N),null)},H=()=>{B(),V()},U=(t,n)=>{(0,e.emit)(i,`hover-card:change`,{open:t,reason:n,trigger:o,content:s}),_?.(t)},W=()=>{let t=L.container,n=i.ownerDocument.defaultView??window,r=(0,e.computeFloatingPosition)({anchorRect:o.getBoundingClientRect(),contentRect:s.getBoundingClientRect(),side:x,align:S,sideOffset:C,alignOffset:w,avoidCollisions:T,collisionPadding:E});t.style.position=`absolute`,t.style.top=`0px`,t.style.left=`0px`,t.style.transform=`translate3d(${r.x+n.scrollX}px, ${r.y+n.scrollY}px, 0)`,t.style.willChange=`transform`,t.style.margin=`0`,s.setAttribute(`data-side`,r.side),s.setAttribute(`data-align`,r.align),t!==s&&(t.setAttribute(`data-side`,r.side),t.setAttribute(`data-align`,r.align))},G=e=>{let t=L.container;if(i.setAttribute(`data-state`,e),s.setAttribute(`data-state`,e),t!==s&&t.setAttribute(`data-state`,e),e===`open`){i.setAttribute(`data-open`,``),s.setAttribute(`data-open`,``),t!==s&&t.setAttribute(`data-open`,``),i.removeAttribute(`data-closed`),s.removeAttribute(`data-closed`),t!==s&&t.removeAttribute(`data-closed`);return}i.setAttribute(`data-closed`,``),s.setAttribute(`data-closed`,``),t!==s&&t.setAttribute(`data-closed`,``),i.removeAttribute(`data-open`),s.removeAttribute(`data-open`),t!==s&&t.removeAttribute(`data-open`)},K=(0,e.createPresenceLifecycle)({element:s,onExitComplete:()=>{O||(L.restore(),s.hidden=!0)}}),q=(0,e.createPositionSync)({observedElements:[o,s],isActive:()=>D,ancestorScroll:!1,onUpdate:W}),J=(t,n)=>{D!==t&&(!t&&D&&h>0&&(r=Date.now()+h),D=t,(0,e.setAria)(o,`expanded`,D),t?(L.mount(),s.hidden=!1,G(`open`),K.enter(),W(),q.start(),q.update()):(G(`closed`),K.exit(),q.stop()),U(D,n))},Y=(e,t)=>{if(D!==e){if(f){U(e,t);return}J(e,t)}},X=(e,t)=>{J(e,t)},Z=e=>{if(V(),B(),h>0&&Date.now()<r){Y(!0,e);return}if(m<=0){Y(!0,e);return}M=setTimeout(()=>{M=null,Y(!0,e)},m)},Q=e=>{if(B(),V(),g<=0){Y(!1,e);return}N=setTimeout(()=>{N=null,Y(!1,e)},g)},$=e=>{k||A||j||Q(e)};return(0,e.setAria)(o,`expanded`,D),G(D?`open`:`closed`),s.hidden=!D,D&&(L.mount(),K.enter(),s.hidden=!1,W(),q.start(),q.update()),I.push((0,e.on)(i.ownerDocument,`keydown`,e=>{e.key===`Tab`&&(P=Date.now())},{capture:!0}),(0,e.on)(i.ownerDocument,`pointerdown`,()=>{P=-1/0,F=-1/0},{capture:!0}),(0,e.on)(i.ownerDocument,`pointermove`,e=>{e.pointerType!==`touch`&&(F=Date.now())},{capture:!0}),(0,e.on)(o,`pointerenter`,e=>{e.pointerType!==`touch`&&(k=!0,!z()&&(Date.now()-F>250||Z(`pointer`)))}),(0,e.on)(o,`pointermove`,e=>{e.pointerType!==`touch`&&(!k||z()||D||M||Z(`pointer`))}),(0,e.on)(o,`pointerleave`,e=>{if(e.pointerType===`touch`)return;k=!1;let t=e.relatedTarget;t&&s.contains(t)||$(`pointer`)})),I.push((0,e.on)(s,`pointerenter`,e=>{e.pointerType!==`touch`&&(A=!0,V())}),(0,e.on)(s,`pointerleave`,e=>{if(e.pointerType===`touch`)return;A=!1;let t=e.relatedTarget;t&&o.contains(t)||$(`pointer`)})),I.push((0,e.on)(o,`focusin`,()=>{j=!0,!z()&&(Date.now()-P>750||Z(`focus`))}),(0,e.on)(o,`focusout`,e=>{let t=e.relatedTarget;t&&(o.contains(t)||s.contains(t))||(j=!1,$(`blur`))}),(0,e.on)(s,`focusin`,()=>{j=!0,V()}),(0,e.on)(s,`focusout`,e=>{let t=e.relatedTarget;t&&(o.contains(t)||s.contains(t))||(j=!1,$(`blur`))})),I.push((0,e.createDismissLayer)({root:i,isOpen:()=>D,onDismiss:()=>Y(!1,`dismiss`),closeOnClickOutside:v,closeOnEscape:y})),I.push((0,e.on)(i,`hover-card:set`,e=>{let t=e.detail,n;t?.open===void 0?t?.value!==void 0&&(n=t.value):n=t.open,typeof n==`boolean`&&X(n,`api`)})),{open:()=>{z()||(H(),Y(!0,`api`))},close:()=>{H(),Y(!1,`api`)},toggle:()=>{H(),!(!D&&z())&&Y(!D,`api`)},setOpen:e=>{H(),X(e,`api`)},get isOpen(){return D},destroy:()=>{O=!0,H(),q.stop(),K.cleanup(),L.cleanup(),I.forEach(e=>e()),I.length=0}}}const a=new WeakSet;function o(t=document){let n=[];for(let r of(0,e.getRoots)(t,`hover-card`))a.has(r)||(a.add(r),n.push(i(r)));return n}exports.create=o,exports.createHoverCard=i;
|
package/dist/index.d.cts
CHANGED
|
@@ -7,7 +7,7 @@ interface HoverCardOptions {
|
|
|
7
7
|
defaultOpen?: boolean;
|
|
8
8
|
/** Controlled open state. Internal interactions do not mutate when set. */
|
|
9
9
|
open?: boolean;
|
|
10
|
-
/** Delay before opening on hover/focus (ms). @default 700 */
|
|
10
|
+
/** Delay before opening on hover/keyboard focus (ms). @default 700 */
|
|
11
11
|
delay?: number;
|
|
12
12
|
/** Duration to skip delay after closing (ms). Set to 0 to disable warm-up. @default 300 */
|
|
13
13
|
skipDelayDuration?: number;
|
package/dist/index.d.ts
CHANGED
|
@@ -7,7 +7,7 @@ interface HoverCardOptions {
|
|
|
7
7
|
defaultOpen?: boolean;
|
|
8
8
|
/** Controlled open state. Internal interactions do not mutate when set. */
|
|
9
9
|
open?: boolean;
|
|
10
|
-
/** Delay before opening on hover/focus (ms). @default 700 */
|
|
10
|
+
/** Delay before opening on hover/keyboard focus (ms). @default 700 */
|
|
11
11
|
delay?: number;
|
|
12
12
|
/** Duration to skip delay after closing (ms). Set to 0 to disable warm-up. @default 300 */
|
|
13
13
|
skipDelayDuration?: number;
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{computeFloatingPosition as e,createDismissLayer as t,createPortalLifecycle as n,createPositionSync as r,createPresenceLifecycle as
|
|
1
|
+
import{computeFloatingPosition as e,createDismissLayer as t,createPortalLifecycle as n,createPositionSync as r,createPresenceLifecycle as ee,emit as i,ensureId as te,getDataBool as a,getDataEnum as o,getDataNumber as s,getPart as c,getRoots as l,on as u,setAria as d}from"@data-slot/core";const f=[`top`,`right`,`bottom`,`left`],p=[`start`,`center`,`end`];let m=0;function h(l,h={}){let g=c(l,`hover-card-trigger`),_=c(l,`hover-card-content`),v=c(l,`hover-card-positioner`),y=v&&_&&v.contains(_)?v:null,b=c(l,`hover-card-portal`),ne=b&&y&&b.contains(y)?b:null;if(!g||!_)throw Error(`Hover-card requires trigger and content slots`);let re=h.open!==void 0,ie=h.defaultOpen??a(l,`defaultOpen`)??!1,x=h.delay??s(l,`delay`)??700,S=h.skipDelayDuration??s(l,`skipDelayDuration`)??300,C=h.closeDelay??s(l,`closeDelay`)??300,ae=h.onOpenChange,w=h.closeOnClickOutside??a(l,`closeOnClickOutside`)??!0,oe=h.closeOnEscape??a(l,`closeOnEscape`)??!0,se=h.portal??a(_,`portal`)??a(l,`portal`)??!0,T=h.side??o(_,`side`,f)??o(l,`side`,f)??`bottom`,E=h.align??o(_,`align`,p)??o(l,`align`,p)??`center`,ce=h.sideOffset??s(_,`sideOffset`)??s(l,`sideOffset`)??4,D=h.alignOffset??s(_,`alignOffset`)??s(l,`alignOffset`)??0,O=h.avoidCollisions??a(_,`avoidCollisions`)??a(l,`avoidCollisions`)??!0,le=h.collisionPadding??s(_,`collisionPadding`)??s(l,`collisionPadding`)??8,k=h.open??ie,A=!1,j=!1,M=!1,N=!1,P=null,F=null,I=-1/0,L=-1/0,R=[],z=n({content:_,root:l,enabled:se,wrapperSlot:y?void 0:`hover-card-positioner`,container:y??void 0,mountTarget:y?ne??y:void 0}),ue=te(_,`hover-card-content`);g.setAttribute(`aria-haspopup`,`dialog`),g.setAttribute(`aria-controls`,ue),_.setAttribute(`data-side`,T),_.setAttribute(`data-align`,E);let B=()=>g.hasAttribute(`disabled`)||g.getAttribute(`aria-disabled`)===`true`,V=()=>{P&&=(clearTimeout(P),null)},H=()=>{F&&=(clearTimeout(F),null)},U=()=>{V(),H()},W=(e,t)=>{i(l,`hover-card:change`,{open:e,reason:t,trigger:g,content:_}),ae?.(e)},G=()=>{let t=z.container,n=l.ownerDocument.defaultView??window,r=e({anchorRect:g.getBoundingClientRect(),contentRect:_.getBoundingClientRect(),side:T,align:E,sideOffset:ce,alignOffset:D,avoidCollisions:O,collisionPadding:le});t.style.position=`absolute`,t.style.top=`0px`,t.style.left=`0px`,t.style.transform=`translate3d(${r.x+n.scrollX}px, ${r.y+n.scrollY}px, 0)`,t.style.willChange=`transform`,t.style.margin=`0`,_.setAttribute(`data-side`,r.side),_.setAttribute(`data-align`,r.align),t!==_&&(t.setAttribute(`data-side`,r.side),t.setAttribute(`data-align`,r.align))},K=e=>{let t=z.container;if(l.setAttribute(`data-state`,e),_.setAttribute(`data-state`,e),t!==_&&t.setAttribute(`data-state`,e),e===`open`){l.setAttribute(`data-open`,``),_.setAttribute(`data-open`,``),t!==_&&t.setAttribute(`data-open`,``),l.removeAttribute(`data-closed`),_.removeAttribute(`data-closed`),t!==_&&t.removeAttribute(`data-closed`);return}l.setAttribute(`data-closed`,``),_.setAttribute(`data-closed`,``),t!==_&&t.setAttribute(`data-closed`,``),l.removeAttribute(`data-open`),_.removeAttribute(`data-open`),t!==_&&t.removeAttribute(`data-open`)},q=ee({element:_,onExitComplete:()=>{A||(z.restore(),_.hidden=!0)}}),J=r({observedElements:[g,_],isActive:()=>k,ancestorScroll:!1,onUpdate:G}),Y=(e,t)=>{k!==e&&(!e&&k&&S>0&&(m=Date.now()+S),k=e,d(g,`expanded`,k),e?(z.mount(),_.hidden=!1,K(`open`),q.enter(),G(),J.start(),J.update()):(K(`closed`),q.exit(),J.stop()),W(k,t))},X=(e,t)=>{if(k!==e){if(re){W(e,t);return}Y(e,t)}},Z=(e,t)=>{Y(e,t)},Q=e=>{if(H(),V(),S>0&&Date.now()<m){X(!0,e);return}if(x<=0){X(!0,e);return}P=setTimeout(()=>{P=null,X(!0,e)},x)},de=e=>{if(V(),H(),C<=0){X(!1,e);return}F=setTimeout(()=>{F=null,X(!1,e)},C)},$=e=>{j||M||N||de(e)};return d(g,`expanded`,k),K(k?`open`:`closed`),_.hidden=!k,k&&(z.mount(),q.enter(),_.hidden=!1,G(),J.start(),J.update()),R.push(u(l.ownerDocument,`keydown`,e=>{e.key===`Tab`&&(I=Date.now())},{capture:!0}),u(l.ownerDocument,`pointerdown`,()=>{I=-1/0,L=-1/0},{capture:!0}),u(l.ownerDocument,`pointermove`,e=>{e.pointerType!==`touch`&&(L=Date.now())},{capture:!0}),u(g,`pointerenter`,e=>{e.pointerType!==`touch`&&(j=!0,!B()&&(Date.now()-L>250||Q(`pointer`)))}),u(g,`pointermove`,e=>{e.pointerType!==`touch`&&(!j||B()||k||P||Q(`pointer`))}),u(g,`pointerleave`,e=>{if(e.pointerType===`touch`)return;j=!1;let t=e.relatedTarget;t&&_.contains(t)||$(`pointer`)})),R.push(u(_,`pointerenter`,e=>{e.pointerType!==`touch`&&(M=!0,H())}),u(_,`pointerleave`,e=>{if(e.pointerType===`touch`)return;M=!1;let t=e.relatedTarget;t&&g.contains(t)||$(`pointer`)})),R.push(u(g,`focusin`,()=>{N=!0,!B()&&(Date.now()-I>750||Q(`focus`))}),u(g,`focusout`,e=>{let t=e.relatedTarget;t&&(g.contains(t)||_.contains(t))||(N=!1,$(`blur`))}),u(_,`focusin`,()=>{N=!0,H()}),u(_,`focusout`,e=>{let t=e.relatedTarget;t&&(g.contains(t)||_.contains(t))||(N=!1,$(`blur`))})),R.push(t({root:l,isOpen:()=>k,onDismiss:()=>X(!1,`dismiss`),closeOnClickOutside:w,closeOnEscape:oe})),R.push(u(l,`hover-card:set`,e=>{let t=e.detail,n;t?.open===void 0?t?.value!==void 0&&(n=t.value):n=t.open,typeof n==`boolean`&&Z(n,`api`)})),{open:()=>{B()||(U(),X(!0,`api`))},close:()=>{U(),X(!1,`api`)},toggle:()=>{U(),!(!k&&B())&&X(!k,`api`)},setOpen:e=>{U(),Z(e,`api`)},get isOpen(){return k},destroy:()=>{A=!0,U(),J.stop(),q.cleanup(),z.cleanup(),R.forEach(e=>e()),R.length=0}}}const g=new WeakSet;function _(e=document){let t=[];for(let n of l(e,`hover-card`))g.has(n)||(g.add(n),t.push(h(n)));return t}export{_ as create,h as createHoverCard};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@data-slot/hover-card",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.88",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"main": "./dist/index.cjs",
|
|
@@ -39,6 +39,6 @@
|
|
|
39
39
|
],
|
|
40
40
|
"license": "MIT",
|
|
41
41
|
"dependencies": {
|
|
42
|
-
"@data-slot/core": "0.2.
|
|
42
|
+
"@data-slot/core": "0.2.88"
|
|
43
43
|
}
|
|
44
44
|
}
|