@data-slot/core 0.2.30 → 0.2.32
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.
|
@@ -97,6 +97,81 @@ declare function unlockScroll(): void;
|
|
|
97
97
|
/**
|
|
98
98
|
* Get current scroll lock count (for testing).
|
|
99
99
|
*/
|
|
100
|
-
|
|
101
100
|
//#endregion
|
|
102
|
-
|
|
101
|
+
//#region src/popup.d.ts
|
|
102
|
+
type PopupSide = "top" | "right" | "bottom" | "left";
|
|
103
|
+
type PopupAlign = "start" | "center" | "end";
|
|
104
|
+
interface PopupPlacementOptions {
|
|
105
|
+
side: PopupSide;
|
|
106
|
+
align: PopupAlign;
|
|
107
|
+
sideOffset: number;
|
|
108
|
+
alignOffset: number;
|
|
109
|
+
avoidCollisions: boolean;
|
|
110
|
+
collisionPadding: number;
|
|
111
|
+
allowedSides?: readonly PopupSide[];
|
|
112
|
+
}
|
|
113
|
+
interface RectLike {
|
|
114
|
+
top: number;
|
|
115
|
+
right: number;
|
|
116
|
+
bottom: number;
|
|
117
|
+
left: number;
|
|
118
|
+
width: number;
|
|
119
|
+
height: number;
|
|
120
|
+
}
|
|
121
|
+
interface ComputeFloatingPositionInput extends PopupPlacementOptions {
|
|
122
|
+
anchorRect: RectLike;
|
|
123
|
+
contentRect: RectLike;
|
|
124
|
+
viewportWidth?: number;
|
|
125
|
+
viewportHeight?: number;
|
|
126
|
+
}
|
|
127
|
+
interface FloatingPosition {
|
|
128
|
+
x: number;
|
|
129
|
+
y: number;
|
|
130
|
+
side: PopupSide;
|
|
131
|
+
align: PopupAlign;
|
|
132
|
+
}
|
|
133
|
+
declare function computeFloatingPosition(input: ComputeFloatingPositionInput): FloatingPosition;
|
|
134
|
+
declare function ensureItemVisibleInContainer(item: HTMLElement, container: HTMLElement, padding?: number): void;
|
|
135
|
+
interface PositionSyncOptions {
|
|
136
|
+
onUpdate: () => void;
|
|
137
|
+
isActive?: () => boolean;
|
|
138
|
+
observedElements?: readonly Element[];
|
|
139
|
+
ignoreScrollTarget?: (target: EventTarget | null) => boolean;
|
|
140
|
+
ancestorScroll?: boolean;
|
|
141
|
+
ancestorResize?: boolean;
|
|
142
|
+
elementResize?: boolean;
|
|
143
|
+
layoutShift?: boolean;
|
|
144
|
+
animationFrame?: boolean;
|
|
145
|
+
win?: Window;
|
|
146
|
+
}
|
|
147
|
+
interface PositionSyncController {
|
|
148
|
+
start(): void;
|
|
149
|
+
stop(): void;
|
|
150
|
+
update(): void;
|
|
151
|
+
}
|
|
152
|
+
declare function createPositionSync(options: PositionSyncOptions): PositionSyncController;
|
|
153
|
+
interface DismissLayerOptions {
|
|
154
|
+
root: Element;
|
|
155
|
+
isOpen: () => boolean;
|
|
156
|
+
onDismiss: () => void;
|
|
157
|
+
closeOnClickOutside?: boolean;
|
|
158
|
+
closeOnEscape?: boolean;
|
|
159
|
+
preventEscapeDefault?: boolean;
|
|
160
|
+
isInside?: (target: Node | null) => boolean;
|
|
161
|
+
}
|
|
162
|
+
declare function createDismissLayer(options: DismissLayerOptions): () => void;
|
|
163
|
+
interface PortalLifecycleOptions {
|
|
164
|
+
content: Element;
|
|
165
|
+
root: Element;
|
|
166
|
+
enabled?: boolean;
|
|
167
|
+
state?: PortalState;
|
|
168
|
+
}
|
|
169
|
+
interface PortalLifecycleController {
|
|
170
|
+
readonly state: PortalState;
|
|
171
|
+
mount(): void;
|
|
172
|
+
restore(): void;
|
|
173
|
+
cleanup(): void;
|
|
174
|
+
}
|
|
175
|
+
declare function createPortalLifecycle(options: PortalLifecycleOptions): PortalLifecycleController;
|
|
176
|
+
//#endregion
|
|
177
|
+
export { type ComputeFloatingPositionInput, type DismissLayerOptions, type FloatingPosition, type PopupAlign, type PopupPlacementOptions, type PopupSide, type PortalLifecycleController, type PortalLifecycleOptions, type PortalState, type PositionSyncController, type PositionSyncOptions, composeHandlers, computeFloatingPosition, containsWithPortals, createDismissLayer, createPortalLifecycle, createPositionSync, emit, ensureId, ensureItemVisibleInContainer, getDataBool, getDataEnum, getDataNumber, getDataString, getPart, getParts, getRoots, linkLabelledBy, lockScroll, on, portalToBody, restorePortal, setAria, unlockScroll };
|
|
@@ -97,6 +97,81 @@ declare function unlockScroll(): void;
|
|
|
97
97
|
/**
|
|
98
98
|
* Get current scroll lock count (for testing).
|
|
99
99
|
*/
|
|
100
|
-
|
|
101
100
|
//#endregion
|
|
102
|
-
|
|
101
|
+
//#region src/popup.d.ts
|
|
102
|
+
type PopupSide = "top" | "right" | "bottom" | "left";
|
|
103
|
+
type PopupAlign = "start" | "center" | "end";
|
|
104
|
+
interface PopupPlacementOptions {
|
|
105
|
+
side: PopupSide;
|
|
106
|
+
align: PopupAlign;
|
|
107
|
+
sideOffset: number;
|
|
108
|
+
alignOffset: number;
|
|
109
|
+
avoidCollisions: boolean;
|
|
110
|
+
collisionPadding: number;
|
|
111
|
+
allowedSides?: readonly PopupSide[];
|
|
112
|
+
}
|
|
113
|
+
interface RectLike {
|
|
114
|
+
top: number;
|
|
115
|
+
right: number;
|
|
116
|
+
bottom: number;
|
|
117
|
+
left: number;
|
|
118
|
+
width: number;
|
|
119
|
+
height: number;
|
|
120
|
+
}
|
|
121
|
+
interface ComputeFloatingPositionInput extends PopupPlacementOptions {
|
|
122
|
+
anchorRect: RectLike;
|
|
123
|
+
contentRect: RectLike;
|
|
124
|
+
viewportWidth?: number;
|
|
125
|
+
viewportHeight?: number;
|
|
126
|
+
}
|
|
127
|
+
interface FloatingPosition {
|
|
128
|
+
x: number;
|
|
129
|
+
y: number;
|
|
130
|
+
side: PopupSide;
|
|
131
|
+
align: PopupAlign;
|
|
132
|
+
}
|
|
133
|
+
declare function computeFloatingPosition(input: ComputeFloatingPositionInput): FloatingPosition;
|
|
134
|
+
declare function ensureItemVisibleInContainer(item: HTMLElement, container: HTMLElement, padding?: number): void;
|
|
135
|
+
interface PositionSyncOptions {
|
|
136
|
+
onUpdate: () => void;
|
|
137
|
+
isActive?: () => boolean;
|
|
138
|
+
observedElements?: readonly Element[];
|
|
139
|
+
ignoreScrollTarget?: (target: EventTarget | null) => boolean;
|
|
140
|
+
ancestorScroll?: boolean;
|
|
141
|
+
ancestorResize?: boolean;
|
|
142
|
+
elementResize?: boolean;
|
|
143
|
+
layoutShift?: boolean;
|
|
144
|
+
animationFrame?: boolean;
|
|
145
|
+
win?: Window;
|
|
146
|
+
}
|
|
147
|
+
interface PositionSyncController {
|
|
148
|
+
start(): void;
|
|
149
|
+
stop(): void;
|
|
150
|
+
update(): void;
|
|
151
|
+
}
|
|
152
|
+
declare function createPositionSync(options: PositionSyncOptions): PositionSyncController;
|
|
153
|
+
interface DismissLayerOptions {
|
|
154
|
+
root: Element;
|
|
155
|
+
isOpen: () => boolean;
|
|
156
|
+
onDismiss: () => void;
|
|
157
|
+
closeOnClickOutside?: boolean;
|
|
158
|
+
closeOnEscape?: boolean;
|
|
159
|
+
preventEscapeDefault?: boolean;
|
|
160
|
+
isInside?: (target: Node | null) => boolean;
|
|
161
|
+
}
|
|
162
|
+
declare function createDismissLayer(options: DismissLayerOptions): () => void;
|
|
163
|
+
interface PortalLifecycleOptions {
|
|
164
|
+
content: Element;
|
|
165
|
+
root: Element;
|
|
166
|
+
enabled?: boolean;
|
|
167
|
+
state?: PortalState;
|
|
168
|
+
}
|
|
169
|
+
interface PortalLifecycleController {
|
|
170
|
+
readonly state: PortalState;
|
|
171
|
+
mount(): void;
|
|
172
|
+
restore(): void;
|
|
173
|
+
cleanup(): void;
|
|
174
|
+
}
|
|
175
|
+
declare function createPortalLifecycle(options: PortalLifecycleOptions): PortalLifecycleController;
|
|
176
|
+
//#endregion
|
|
177
|
+
export { type ComputeFloatingPositionInput, type DismissLayerOptions, type FloatingPosition, type PopupAlign, type PopupPlacementOptions, type PopupSide, type PortalLifecycleController, type PortalLifecycleOptions, type PortalState, type PositionSyncController, type PositionSyncOptions, composeHandlers, computeFloatingPosition, containsWithPortals, createDismissLayer, createPortalLifecycle, createPositionSync, emit, ensureId, ensureItemVisibleInContainer, getDataBool, getDataEnum, getDataNumber, getDataString, getPart, getParts, getRoots, linkLabelledBy, lockScroll, on, portalToBody, restorePortal, setAria, unlockScroll };
|
package/dist/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
const e=(e,t)=>e.querySelector(`[data-slot="${t}"]`),t=(e,t)=>[...e.querySelectorAll(`[data-slot="${t}"]`)],n=(e,t)=>[...e.querySelectorAll(`[data-slot="${t}"]`)],r=new WeakMap;function i(e,t,n){if(typeof process<`u`&&process.env?.NODE_ENV===`production`)return;let i=r.get(e);i||(i=new Set,r.set(e,i)),!i.has(t)&&(i.add(t),console.warn(`[@data-slot] ${n}`))}function a(e){let t=`data-${e.replace(/([A-Z])/g,`-$1`).toLowerCase()}`,n=`data-${e}`;return t===n?[t]:[t,n]}function o(e,t){for(let n of a(t))if(e.hasAttribute(n))return e.getAttribute(n);return null}function s(e,t){return a(t).some(t=>e.hasAttribute(t))}const c=new Set([``,`true`,`1`,`yes`]),l=new Set([`false`,`0`,`no`]);function u(e,t){if(!s(e,t))return;let n=o(e,t);if(n===null)return;let r=n.toLowerCase();if(c.has(r))return!0;if(l.has(r))return!1;i(e,t,`Invalid boolean value "${n}" for data-${t}. Expected: true/false/1/0/yes/no or empty.`)}function d(e,t){let n=o(e,t);if(n===null||n===``)return;let r=Number(n);if(Number.isNaN(r)||!Number.isFinite(r)){i(e,t,`Invalid number value "${n}" for data-${t}.`);return}return r}function f(e,t){if(s(e,t))return o(e,t)??void 0}function p(e,t,n){let r=o(e,t);if(r!==null){if(n.includes(r))return r;i(e,t,`Invalid value "${r}" for data-${t}. Expected one of: ${n.join(`, `)}.`)}}const m=new WeakMap,h=Symbol.for(`data-slot.portal-owner`),g=e=>e[h]??m.get(e),_=(e,t)=>{m.set(e,t),e[h]=t},v=e=>{m.delete(e),delete e[h]};function y(e,t){return b(e,t,new Set)}function b(e,t,n){if(!t)return!1;let r=t instanceof Element?t:t.parentElement;if(!r)return!1;if(e.contains(r))return!0;let i=r;for(;i;){let t=g(i);if(t&&!n.has(t)&&(n.add(t),b(e,t,n)))return!0;i=i.parentElement}return!1}function x(e,t,n){if(n.portaled)return;let r=(t.ownerDocument??document)?.body;r&&(n.originalParent=e.parentNode,n.originalNextSibling=e.nextSibling,_(e,t),r.appendChild(e),n.portaled=!0)}function S(e,t){if(!t.portaled)return;v(e);let n=t.originalParent,r=t.originalNextSibling;n&&n.isConnected?r&&r.parentNode===n?n.insertBefore(e,r):n.appendChild(e):e.remove(),t.portaled=!1,t.originalParent=null,t.originalNextSibling=null}let C=0;const w=(e,t)=>e.id||=`${t}-${++C}`,T=(e,t,n)=>{n===null?e.removeAttribute(`aria-${t}`):e.setAttribute(`aria-${t}`,String(n))},E=(e,t,n)=>{t&&e.setAttribute(`aria-labelledby`,w(t,`title`)),n&&e.setAttribute(`aria-describedby`,w(n,`desc`))};function D(e,t,n,r){return e.addEventListener(t,n,r),()=>e.removeEventListener(t,n,r)}const O=(e,t,n)=>e.dispatchEvent(new CustomEvent(t,{bubbles:!0,detail:n})),k=(...e)=>t=>{for(let n of e){if(t.defaultPrevented)break;n?.(t)}};let A=0,j=``,M=``;function N(){if(A===0){let e=document.documentElement;j=e.style.overflow,M=e.style.scrollbarGutter,e.style.overflow=`hidden`,e.style.scrollbarGutter=`stable`}A++}function P(){if(A=Math.max(0,A-1),A===0){let e=document.documentElement;e.style.overflow=j,e.style.scrollbarGutter=M}}exports.composeHandlers=k,exports.containsWithPortals=y,exports.emit=O,exports.ensureId=w,exports.getDataBool=u,exports.getDataEnum=p,exports.getDataNumber=d,exports.getDataString=f,exports.getPart=e,exports.getParts=t,exports.getRoots=n,exports.linkLabelledBy=E,exports.lockScroll=N,exports.on=D,exports.portalToBody=x,exports.restorePortal=S,exports.setAria=T,exports.unlockScroll=P;
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=(e,t)=>e.querySelector(`[data-slot="${t}"]`),t=(e,t)=>[...e.querySelectorAll(`[data-slot="${t}"]`)],n=(e,t)=>[...e.querySelectorAll(`[data-slot="${t}"]`)],r=new WeakMap;function i(e,t,n){if(typeof process<`u`&&process.env?.NODE_ENV===`production`)return;let i=r.get(e);i||(i=new Set,r.set(e,i)),!i.has(t)&&(i.add(t),console.warn(`[@data-slot] ${n}`))}function a(e){let t=`data-${e.replace(/([A-Z])/g,`-$1`).toLowerCase()}`,n=`data-${e}`;return t===n?[t]:[t,n]}function o(e,t){for(let n of a(t))if(e.hasAttribute(n))return e.getAttribute(n);return null}function s(e,t){return a(t).some(t=>e.hasAttribute(t))}const c=new Set([``,`true`,`1`,`yes`]),l=new Set([`false`,`0`,`no`]);function u(e,t){if(!s(e,t))return;let n=o(e,t);if(n===null)return;let r=n.toLowerCase();if(c.has(r))return!0;if(l.has(r))return!1;i(e,t,`Invalid boolean value "${n}" for data-${t}. Expected: true/false/1/0/yes/no or empty.`)}function d(e,t){let n=o(e,t);if(n===null||n===``)return;let r=Number(n);if(Number.isNaN(r)||!Number.isFinite(r)){i(e,t,`Invalid number value "${n}" for data-${t}.`);return}return r}function f(e,t){if(s(e,t))return o(e,t)??void 0}function p(e,t,n){let r=o(e,t);if(r!==null){if(n.includes(r))return r;i(e,t,`Invalid value "${r}" for data-${t}. Expected one of: ${n.join(`, `)}.`)}}const m=new WeakMap,h=Symbol.for(`data-slot.portal-owner`),g=e=>e[h]??m.get(e),_=(e,t)=>{m.set(e,t),e[h]=t},v=e=>{m.delete(e),delete e[h]};function y(e,t){return b(e,t,new Set)}function b(e,t,n){if(!t)return!1;let r=t instanceof Element?t:t.parentElement;if(!r)return!1;if(e.contains(r))return!0;let i=r;for(;i;){let t=g(i);if(t&&!n.has(t)&&(n.add(t),b(e,t,n)))return!0;i=i.parentElement}return!1}function x(e,t,n){if(n.portaled)return;let r=(t.ownerDocument??document)?.body;r&&(n.originalParent=e.parentNode,n.originalNextSibling=e.nextSibling,_(e,t),r.appendChild(e),n.portaled=!0)}function S(e,t){if(!t.portaled)return;v(e);let n=t.originalParent,r=t.originalNextSibling;n&&n.isConnected?r&&r.parentNode===n?n.insertBefore(e,r):n.appendChild(e):e.remove(),t.portaled=!1,t.originalParent=null,t.originalNextSibling=null}let C=0;const w=(e,t)=>e.id||=`${t}-${++C}`,T=(e,t,n)=>{n===null?e.removeAttribute(`aria-${t}`):e.setAttribute(`aria-${t}`,String(n))},E=(e,t,n)=>{t&&e.setAttribute(`aria-labelledby`,w(t,`title`)),n&&e.setAttribute(`aria-describedby`,w(n,`desc`))};function D(e,t,n,r){return e.addEventListener(t,n,r),()=>e.removeEventListener(t,n,r)}const O=(e,t,n)=>e.dispatchEvent(new CustomEvent(t,{bubbles:!0,detail:n})),k=(...e)=>t=>{for(let n of e){if(t.defaultPrevented)break;n?.(t)}};let A=0,j=``,M=``;function N(){if(A===0){let e=document.documentElement;j=e.style.overflow,M=e.style.scrollbarGutter,e.style.overflow=`hidden`,e.style.scrollbarGutter=`stable`}A++}function P(){if(A=Math.max(0,A-1),A===0){let e=document.documentElement;e.style.overflow=j,e.style.scrollbarGutter=M}}const F=[`top`,`right`,`bottom`,`left`],I=e=>{let t=window.visualViewport,n=e.viewportWidth??t?.width,r=e.viewportHeight??t?.height;if(n==null||r==null)throw Error(`computeFloatingPosition requires window.visualViewport when viewport dimensions are not provided`);return{x:t?.offsetLeft??0,y:t?.offsetTop??0,width:n,height:r}},L=(e,t,n,r,i,a)=>{let o=0,s=0;return e===`top`?s=n.top-r.height-i:e===`bottom`?s=n.bottom+i:o=e===`left`?n.left-r.width-i:n.right+i,e===`top`||e===`bottom`?o=t===`start`?n.left+a:t===`center`?n.left+n.width/2-r.width/2+a:n.right-r.width-a:s=t===`start`?n.top+a:t===`center`?n.top+n.height/2-r.height/2+a:n.bottom-r.height-a,{x:o,y:s}},R=(e,t,n,r,i)=>{let a=r.x+i,o=r.x+r.width-i,s=r.y+i,c=r.y+r.height-i;return e===`top`?Math.max(0,s-t.y):e===`bottom`?Math.max(0,t.y+n.height-c):e===`left`?Math.max(0,a-t.x):Math.max(0,t.x+n.width-o)},z=(e,t,n)=>n<t?t:Math.min(Math.max(e,t),n);function B(e){let t=I(e),n=e.allowedSides?.length?[...new Set(e.allowedSides)]:[...F],r=n.includes(e.side)?e.side:n[0],i=r,a=L(i,e.align,e.anchorRect,e.contentRect,e.sideOffset,e.alignOffset);if(e.avoidCollisions){let o=[r,...n.filter(e=>e!==r)],s=i,c=a,l=1/0;for(let n of o){let r=L(n,e.align,e.anchorRect,e.contentRect,e.sideOffset,e.alignOffset),i=R(n,r,e.contentRect,t,e.collisionPadding);if(i<=0){s=n,c=r,l=i;break}i<l&&(s=n,c=r,l=i)}i=s,a=c;let u=t.x+e.collisionPadding,d=t.x+t.width-e.contentRect.width-e.collisionPadding,f=t.y+e.collisionPadding,p=t.y+t.height-e.contentRect.height-e.collisionPadding;a.x=z(a.x,u,d),a.y=z(a.y,f,p)}return{x:a.x,y:a.y,side:i,align:e.align}}function V(e,t,n=4){if(t.clientHeight<=0)return;let r=Math.max(0,t.scrollHeight-t.clientHeight);if(r<=0)return;let i=e.getBoundingClientRect(),a=t.getBoundingClientRect(),o=i.top-a.top+t.scrollTop,s=o+i.height,c=t.scrollTop+n,l=t.scrollTop+t.clientHeight-n,u=t.scrollTop;o<c?u=o-n:s>l&&(u=s-t.clientHeight+n),u=Math.min(Math.max(u,0),r),u!==t.scrollTop&&(t.scrollTop=u)}const H=e=>({x:e.x,y:e.y,width:e.width,height:e.height}),U=(e,t)=>e.x===t.x&&e.y===t.y&&e.width===t.width&&e.height===t.height,W=e=>{let t=getComputedStyle(e),n=`${t.overflow}${t.overflowX}${t.overflowY}`;return/(auto|scroll|overlay)/.test(n)},G=(e,t)=>{let n=new Set([e]),r=e.parentNode;for(;r;){if(r instanceof Element){W(r)&&n.add(r),r=r.parentNode;continue}if(r instanceof Document){r.scrollingElement&&n.add(r.scrollingElement),n.add(r),r.defaultView&&(n.add(r.defaultView),r.defaultView.visualViewport&&n.add(r.defaultView.visualViewport));break}r=null}return n.add(t),t.visualViewport&&n.add(t.visualViewport),[...n]},K=(e,t,n)=>{let r=null,i=null,a=()=>{i!==null&&(n.clearTimeout(i),i=null),r?.disconnect(),r=null},o=(s=!1,c=1)=>{a();let l=e.getBoundingClientRect();if(s||t(),!l.width||!l.height)return;let u=e.ownerDocument.documentElement,d=Math.floor(l.top),f=Math.floor(u.clientWidth-(l.left+l.width)),p=Math.floor(u.clientHeight-(l.top+l.height)),m=Math.floor(l.left),h=`${-d}px ${-f}px ${-p}px ${-m}px`,g=Math.max(0,Math.min(1,c))||1,_=!0;r=new IntersectionObserver(t=>{let r=t[0]?.intersectionRatio??1;if(r!==g){if(!_){o();return}r?o(!1,r):i=n.setTimeout(()=>{o(!1,1e-7)},1e3)}if(r===1&&!U(H(l),H(e.getBoundingClientRect()))){o();return}_=!1},{rootMargin:h,threshold:g}),r.observe(e)};return o(!0),a};function q(e){let t=e.win??window,n=e.isActive??(()=>!0),r=e.observedElements??[],i=e.ancestorScroll??!0,a=e.ancestorResize??!0,o=e.elementResize??typeof ResizeObserver<`u`,s=e.layoutShift??!1,c=e.animationFrame??!1,l=null,u=null,d=!1,f=null,p=null,m=[],h=()=>{l===null&&(l=t.requestAnimationFrame(()=>{l=null,n()&&e.onUpdate()}))},g=()=>h(),_=t=>{e.ignoreScrollTarget?.(t.target)||h()},v=()=>{let e=new Set,n=r.length?r:[];if(n.length===0)return e.add(t),t.visualViewport&&e.add(t.visualViewport),[...e];for(let r of n)for(let n of G(r,t))e.add(n);return[...e]},y=e=>{let n=new Set([t]);t.visualViewport&&n.add(t.visualViewport);for(let r of e)(r===t||r===t.visualViewport)&&n.add(r);return[...n]};return{start:()=>{if(d)return;d=!0;let e=v(),n=y(e);if(i)for(let t of e)t.addEventListener(`scroll`,_,{passive:!0}),m.push(()=>t.removeEventListener(`scroll`,_));if(a)for(let e of n)e.addEventListener(`resize`,g),m.push(()=>e.removeEventListener(`resize`,g));if(o&&typeof ResizeObserver<`u`){f=new ResizeObserver(g);for(let e of r)f.observe(e)}let l=r[0]??null;if(s&&l&&typeof IntersectionObserver<`u`&&(p=K(l,h,t)),c&&l){let e=H(l.getBoundingClientRect()),n=()=>{if(!d)return;let r=H(l.getBoundingClientRect());U(e,r)||h(),e=r,u=t.requestAnimationFrame(n)};u=t.requestAnimationFrame(n)}},stop:()=>{d&&(d=!1,l!==null&&(t.cancelAnimationFrame(l),l=null),u!==null&&(t.cancelAnimationFrame(u),u=null),m.forEach(e=>e()),m=[],f?.disconnect(),f=null,p?.(),p=null)},update:h}}function J(e){let t=e.root.ownerDocument??document,n=e.isInside??(t=>y(e.root,t)),r=e.closeOnClickOutside??!0,i=e.closeOnEscape??!0,a=e.preventEscapeDefault??!0,o=[];return r&&o.push(D(t,`pointerdown`,t=>{if(!e.isOpen())return;let r=t.target;n(r)||e.onDismiss()})),i&&o.push(D(t,`keydown`,t=>{e.isOpen()&&t.key===`Escape`&&(a&&t.preventDefault(),e.onDismiss())})),()=>{o.forEach(e=>e()),o.length=0}}function Y(e){let t=e.enabled??!0,n=e.state??{originalParent:null,originalNextSibling:null,portaled:!1};return{state:n,mount:()=>{t&&x(e.content,e.root,n)},restore:()=>{t&&S(e.content,n)},cleanup:()=>{t&&S(e.content,n)}}}exports.composeHandlers=k,exports.computeFloatingPosition=B,exports.containsWithPortals=y,exports.createDismissLayer=J,exports.createPortalLifecycle=Y,exports.createPositionSync=q,exports.emit=O,exports.ensureId=w,exports.ensureItemVisibleInContainer=V,exports.getDataBool=u,exports.getDataEnum=p,exports.getDataNumber=d,exports.getDataString=f,exports.getPart=e,exports.getParts=t,exports.getRoots=n,exports.linkLabelledBy=E,exports.lockScroll=N,exports.on=D,exports.portalToBody=x,exports.restorePortal=S,exports.setAria=T,exports.unlockScroll=P;
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
const e=(e,t)=>e.querySelector(`[data-slot="${t}"]`),t=(e,t)=>[...e.querySelectorAll(`[data-slot="${t}"]`)],n=(e,t)=>[...e.querySelectorAll(`[data-slot="${t}"]`)],r=new WeakMap;function i(e,t,n){if(typeof process<`u`&&process.env?.NODE_ENV===`production`)return;let i=r.get(e);i||(i=new Set,r.set(e,i)),!i.has(t)&&(i.add(t),console.warn(`[@data-slot] ${n}`))}function a(e){let t=`data-${e.replace(/([A-Z])/g,`-$1`).toLowerCase()}`,n=`data-${e}`;return t===n?[t]:[t,n]}function o(e,t){for(let n of a(t))if(e.hasAttribute(n))return e.getAttribute(n);return null}function s(e,t){return a(t).some(t=>e.hasAttribute(t))}const c=new Set([``,`true`,`1`,`yes`]),l=new Set([`false`,`0`,`no`]);function u(e,t){if(!s(e,t))return;let n=o(e,t);if(n===null)return;let r=n.toLowerCase();if(c.has(r))return!0;if(l.has(r))return!1;i(e,t,`Invalid boolean value "${n}" for data-${t}. Expected: true/false/1/0/yes/no or empty.`)}function d(e,t){let n=o(e,t);if(n===null||n===``)return;let r=Number(n);if(Number.isNaN(r)||!Number.isFinite(r)){i(e,t,`Invalid number value "${n}" for data-${t}.`);return}return r}function f(e,t){if(s(e,t))return o(e,t)??void 0}function p(e,t,n){let r=o(e,t);if(r!==null){if(n.includes(r))return r;i(e,t,`Invalid value "${r}" for data-${t}. Expected one of: ${n.join(`, `)}.`)}}const m=new WeakMap,h=Symbol.for(`data-slot.portal-owner`),g=e=>e[h]??m.get(e),_=(e,t)=>{m.set(e,t),e[h]=t},v=e=>{m.delete(e),delete e[h]};function y(e,t){return b(e,t,new Set)}function b(e,t,n){if(!t)return!1;let r=t instanceof Element?t:t.parentElement;if(!r)return!1;if(e.contains(r))return!0;let i=r;for(;i;){let t=g(i);if(t&&!n.has(t)&&(n.add(t),b(e,t,n)))return!0;i=i.parentElement}return!1}function x(e,t,n){if(n.portaled)return;let r=(t.ownerDocument??document)?.body;r&&(n.originalParent=e.parentNode,n.originalNextSibling=e.nextSibling,_(e,t),r.appendChild(e),n.portaled=!0)}function S(e,t){if(!t.portaled)return;v(e);let n=t.originalParent,r=t.originalNextSibling;n&&n.isConnected?r&&r.parentNode===n?n.insertBefore(e,r):n.appendChild(e):e.remove(),t.portaled=!1,t.originalParent=null,t.originalNextSibling=null}let C=0;const w=(e,t)=>e.id||=`${t}-${++C}`,T=(e,t,n)=>{n===null?e.removeAttribute(`aria-${t}`):e.setAttribute(`aria-${t}`,String(n))},E=(e,t,n)=>{t&&e.setAttribute(`aria-labelledby`,w(t,`title`)),n&&e.setAttribute(`aria-describedby`,w(n,`desc`))};function D(e,t,n,r){return e.addEventListener(t,n,r),()=>e.removeEventListener(t,n,r)}const O=(e,t,n)=>e.dispatchEvent(new CustomEvent(t,{bubbles:!0,detail:n})),k=(...e)=>t=>{for(let n of e){if(t.defaultPrevented)break;n?.(t)}};let A=0,j=``,M=``;function N(){if(A===0){let e=document.documentElement;j=e.style.overflow,M=e.style.scrollbarGutter,e.style.overflow=`hidden`,e.style.scrollbarGutter=`stable`}A++}function P(){if(A=Math.max(0,A-1),A===0){let e=document.documentElement;e.style.overflow=j,e.style.scrollbarGutter=M}}export{k as composeHandlers,y as containsWithPortals,O as emit,w as ensureId,u as getDataBool,p as getDataEnum,d as getDataNumber,f as getDataString,e as getPart,t as getParts,n as getRoots,E as linkLabelledBy,N as lockScroll,D as on,x as portalToBody,S as restorePortal,T as setAria,P as unlockScroll};
|
|
1
|
+
const e=(e,t)=>e.querySelector(`[data-slot="${t}"]`),t=(e,t)=>[...e.querySelectorAll(`[data-slot="${t}"]`)],n=(e,t)=>[...e.querySelectorAll(`[data-slot="${t}"]`)],r=new WeakMap;function i(e,t,n){if(typeof process<`u`&&process.env?.NODE_ENV===`production`)return;let i=r.get(e);i||(i=new Set,r.set(e,i)),!i.has(t)&&(i.add(t),console.warn(`[@data-slot] ${n}`))}function a(e){let t=`data-${e.replace(/([A-Z])/g,`-$1`).toLowerCase()}`,n=`data-${e}`;return t===n?[t]:[t,n]}function o(e,t){for(let n of a(t))if(e.hasAttribute(n))return e.getAttribute(n);return null}function s(e,t){return a(t).some(t=>e.hasAttribute(t))}const c=new Set([``,`true`,`1`,`yes`]),l=new Set([`false`,`0`,`no`]);function u(e,t){if(!s(e,t))return;let n=o(e,t);if(n===null)return;let r=n.toLowerCase();if(c.has(r))return!0;if(l.has(r))return!1;i(e,t,`Invalid boolean value "${n}" for data-${t}. Expected: true/false/1/0/yes/no or empty.`)}function d(e,t){let n=o(e,t);if(n===null||n===``)return;let r=Number(n);if(Number.isNaN(r)||!Number.isFinite(r)){i(e,t,`Invalid number value "${n}" for data-${t}.`);return}return r}function f(e,t){if(s(e,t))return o(e,t)??void 0}function p(e,t,n){let r=o(e,t);if(r!==null){if(n.includes(r))return r;i(e,t,`Invalid value "${r}" for data-${t}. Expected one of: ${n.join(`, `)}.`)}}const m=new WeakMap,h=Symbol.for(`data-slot.portal-owner`),g=e=>e[h]??m.get(e),_=(e,t)=>{m.set(e,t),e[h]=t},v=e=>{m.delete(e),delete e[h]};function y(e,t){return b(e,t,new Set)}function b(e,t,n){if(!t)return!1;let r=t instanceof Element?t:t.parentElement;if(!r)return!1;if(e.contains(r))return!0;let i=r;for(;i;){let t=g(i);if(t&&!n.has(t)&&(n.add(t),b(e,t,n)))return!0;i=i.parentElement}return!1}function x(e,t,n){if(n.portaled)return;let r=(t.ownerDocument??document)?.body;r&&(n.originalParent=e.parentNode,n.originalNextSibling=e.nextSibling,_(e,t),r.appendChild(e),n.portaled=!0)}function S(e,t){if(!t.portaled)return;v(e);let n=t.originalParent,r=t.originalNextSibling;n&&n.isConnected?r&&r.parentNode===n?n.insertBefore(e,r):n.appendChild(e):e.remove(),t.portaled=!1,t.originalParent=null,t.originalNextSibling=null}let C=0;const w=(e,t)=>e.id||=`${t}-${++C}`,T=(e,t,n)=>{n===null?e.removeAttribute(`aria-${t}`):e.setAttribute(`aria-${t}`,String(n))},E=(e,t,n)=>{t&&e.setAttribute(`aria-labelledby`,w(t,`title`)),n&&e.setAttribute(`aria-describedby`,w(n,`desc`))};function D(e,t,n,r){return e.addEventListener(t,n,r),()=>e.removeEventListener(t,n,r)}const O=(e,t,n)=>e.dispatchEvent(new CustomEvent(t,{bubbles:!0,detail:n})),k=(...e)=>t=>{for(let n of e){if(t.defaultPrevented)break;n?.(t)}};let A=0,j=``,M=``;function N(){if(A===0){let e=document.documentElement;j=e.style.overflow,M=e.style.scrollbarGutter,e.style.overflow=`hidden`,e.style.scrollbarGutter=`stable`}A++}function P(){if(A=Math.max(0,A-1),A===0){let e=document.documentElement;e.style.overflow=j,e.style.scrollbarGutter=M}}const F=[`top`,`right`,`bottom`,`left`],I=e=>{let t=window.visualViewport,n=e.viewportWidth??t?.width,r=e.viewportHeight??t?.height;if(n==null||r==null)throw Error(`computeFloatingPosition requires window.visualViewport when viewport dimensions are not provided`);return{x:t?.offsetLeft??0,y:t?.offsetTop??0,width:n,height:r}},L=(e,t,n,r,i,a)=>{let o=0,s=0;return e===`top`?s=n.top-r.height-i:e===`bottom`?s=n.bottom+i:o=e===`left`?n.left-r.width-i:n.right+i,e===`top`||e===`bottom`?o=t===`start`?n.left+a:t===`center`?n.left+n.width/2-r.width/2+a:n.right-r.width-a:s=t===`start`?n.top+a:t===`center`?n.top+n.height/2-r.height/2+a:n.bottom-r.height-a,{x:o,y:s}},R=(e,t,n,r,i)=>{let a=r.x+i,o=r.x+r.width-i,s=r.y+i,c=r.y+r.height-i;return e===`top`?Math.max(0,s-t.y):e===`bottom`?Math.max(0,t.y+n.height-c):e===`left`?Math.max(0,a-t.x):Math.max(0,t.x+n.width-o)},z=(e,t,n)=>n<t?t:Math.min(Math.max(e,t),n);function B(e){let t=I(e),n=e.allowedSides?.length?[...new Set(e.allowedSides)]:[...F],r=n.includes(e.side)?e.side:n[0],i=r,a=L(i,e.align,e.anchorRect,e.contentRect,e.sideOffset,e.alignOffset);if(e.avoidCollisions){let o=[r,...n.filter(e=>e!==r)],s=i,c=a,l=1/0;for(let n of o){let r=L(n,e.align,e.anchorRect,e.contentRect,e.sideOffset,e.alignOffset),i=R(n,r,e.contentRect,t,e.collisionPadding);if(i<=0){s=n,c=r,l=i;break}i<l&&(s=n,c=r,l=i)}i=s,a=c;let u=t.x+e.collisionPadding,d=t.x+t.width-e.contentRect.width-e.collisionPadding,f=t.y+e.collisionPadding,p=t.y+t.height-e.contentRect.height-e.collisionPadding;a.x=z(a.x,u,d),a.y=z(a.y,f,p)}return{x:a.x,y:a.y,side:i,align:e.align}}function V(e,t,n=4){if(t.clientHeight<=0)return;let r=Math.max(0,t.scrollHeight-t.clientHeight);if(r<=0)return;let i=e.getBoundingClientRect(),a=t.getBoundingClientRect(),o=i.top-a.top+t.scrollTop,s=o+i.height,c=t.scrollTop+n,l=t.scrollTop+t.clientHeight-n,u=t.scrollTop;o<c?u=o-n:s>l&&(u=s-t.clientHeight+n),u=Math.min(Math.max(u,0),r),u!==t.scrollTop&&(t.scrollTop=u)}const H=e=>({x:e.x,y:e.y,width:e.width,height:e.height}),U=(e,t)=>e.x===t.x&&e.y===t.y&&e.width===t.width&&e.height===t.height,W=e=>{let t=getComputedStyle(e),n=`${t.overflow}${t.overflowX}${t.overflowY}`;return/(auto|scroll|overlay)/.test(n)},G=(e,t)=>{let n=new Set([e]),r=e.parentNode;for(;r;){if(r instanceof Element){W(r)&&n.add(r),r=r.parentNode;continue}if(r instanceof Document){r.scrollingElement&&n.add(r.scrollingElement),n.add(r),r.defaultView&&(n.add(r.defaultView),r.defaultView.visualViewport&&n.add(r.defaultView.visualViewport));break}r=null}return n.add(t),t.visualViewport&&n.add(t.visualViewport),[...n]},K=(e,t,n)=>{let r=null,i=null,a=()=>{i!==null&&(n.clearTimeout(i),i=null),r?.disconnect(),r=null},o=(s=!1,c=1)=>{a();let l=e.getBoundingClientRect();if(s||t(),!l.width||!l.height)return;let u=e.ownerDocument.documentElement,d=Math.floor(l.top),f=Math.floor(u.clientWidth-(l.left+l.width)),p=Math.floor(u.clientHeight-(l.top+l.height)),m=Math.floor(l.left),h=`${-d}px ${-f}px ${-p}px ${-m}px`,g=Math.max(0,Math.min(1,c))||1,_=!0;r=new IntersectionObserver(t=>{let r=t[0]?.intersectionRatio??1;if(r!==g){if(!_){o();return}r?o(!1,r):i=n.setTimeout(()=>{o(!1,1e-7)},1e3)}if(r===1&&!U(H(l),H(e.getBoundingClientRect()))){o();return}_=!1},{rootMargin:h,threshold:g}),r.observe(e)};return o(!0),a};function q(e){let t=e.win??window,n=e.isActive??(()=>!0),r=e.observedElements??[],i=e.ancestorScroll??!0,a=e.ancestorResize??!0,o=e.elementResize??typeof ResizeObserver<`u`,s=e.layoutShift??!1,c=e.animationFrame??!1,l=null,u=null,d=!1,f=null,p=null,m=[],h=()=>{l===null&&(l=t.requestAnimationFrame(()=>{l=null,n()&&e.onUpdate()}))},g=()=>h(),_=t=>{e.ignoreScrollTarget?.(t.target)||h()},v=()=>{let e=new Set,n=r.length?r:[];if(n.length===0)return e.add(t),t.visualViewport&&e.add(t.visualViewport),[...e];for(let r of n)for(let n of G(r,t))e.add(n);return[...e]},y=e=>{let n=new Set([t]);t.visualViewport&&n.add(t.visualViewport);for(let r of e)(r===t||r===t.visualViewport)&&n.add(r);return[...n]};return{start:()=>{if(d)return;d=!0;let e=v(),n=y(e);if(i)for(let t of e)t.addEventListener(`scroll`,_,{passive:!0}),m.push(()=>t.removeEventListener(`scroll`,_));if(a)for(let e of n)e.addEventListener(`resize`,g),m.push(()=>e.removeEventListener(`resize`,g));if(o&&typeof ResizeObserver<`u`){f=new ResizeObserver(g);for(let e of r)f.observe(e)}let l=r[0]??null;if(s&&l&&typeof IntersectionObserver<`u`&&(p=K(l,h,t)),c&&l){let e=H(l.getBoundingClientRect()),n=()=>{if(!d)return;let r=H(l.getBoundingClientRect());U(e,r)||h(),e=r,u=t.requestAnimationFrame(n)};u=t.requestAnimationFrame(n)}},stop:()=>{d&&(d=!1,l!==null&&(t.cancelAnimationFrame(l),l=null),u!==null&&(t.cancelAnimationFrame(u),u=null),m.forEach(e=>e()),m=[],f?.disconnect(),f=null,p?.(),p=null)},update:h}}function J(e){let t=e.root.ownerDocument??document,n=e.isInside??(t=>y(e.root,t)),r=e.closeOnClickOutside??!0,i=e.closeOnEscape??!0,a=e.preventEscapeDefault??!0,o=[];return r&&o.push(D(t,`pointerdown`,t=>{if(!e.isOpen())return;let r=t.target;n(r)||e.onDismiss()})),i&&o.push(D(t,`keydown`,t=>{e.isOpen()&&t.key===`Escape`&&(a&&t.preventDefault(),e.onDismiss())})),()=>{o.forEach(e=>e()),o.length=0}}function Y(e){let t=e.enabled??!0,n=e.state??{originalParent:null,originalNextSibling:null,portaled:!1};return{state:n,mount:()=>{t&&x(e.content,e.root,n)},restore:()=>{t&&S(e.content,n)},cleanup:()=>{t&&S(e.content,n)}}}export{k as composeHandlers,B as computeFloatingPosition,y as containsWithPortals,J as createDismissLayer,Y as createPortalLifecycle,q as createPositionSync,O as emit,w as ensureId,V as ensureItemVisibleInContainer,u as getDataBool,p as getDataEnum,d as getDataNumber,f as getDataString,e as getPart,t as getParts,n as getRoots,E as linkLabelledBy,N as lockScroll,D as on,x as portalToBody,S as restorePortal,T as setAria,P as unlockScroll};
|