UNPKG

@anoki/fse-ui

Version:

FSE UI components library

3 lines (2 loc) 3.79 kB
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const U=require("react"),x=require("./index.cjs471.js"),A=require("./index.cjs474.js"),O=require("./index.cjs480.js"),k=require("./index.cjs244.js");function w(e){const n=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const t in e)if(t!=="default"){const o=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(n,t,o.get?o:{enumerable:!0,get:()=>e[t]})}}return n.default=e,Object.freeze(n)}const f=w(U);var F="focusScope.autoFocusOnMount",y="focusScope.autoFocusOnUnmount",S={bubbles:!1,cancelable:!0},K="FocusScope",C=f.forwardRef((e,n)=>{const{loop:t=!1,trapped:o=!1,onMountAutoFocus:p,onUnmountAutoFocus:I,...L}=e,[s,P]=f.useState(null),E=O.useCallbackRef(p),v=O.useCallbackRef(I),b=f.useRef(null),_=x.useComposedRefs(n,u=>P(u)),a=f.useRef({paused:!1,pause(){this.paused=!0},resume(){this.paused=!1}}).current;f.useEffect(()=>{if(o){let u=function(i){if(a.paused||!s)return;const c=i.target;s.contains(c)?b.current=c:d(b.current,{select:!0})},l=function(i){if(a.paused||!s)return;const c=i.relatedTarget;c!==null&&(s.contains(c)||d(b.current,{select:!0}))},r=function(i){if(document.activeElement===document.body)for(const T of i)T.removedNodes.length>0&&d(s)};document.addEventListener("focusin",u),document.addEventListener("focusout",l);const m=new MutationObserver(r);return s&&m.observe(s,{childList:!0,subtree:!0}),()=>{document.removeEventListener("focusin",u),document.removeEventListener("focusout",l),m.disconnect()}}},[o,s,a.paused]),f.useEffect(()=>{if(s){N.add(a);const u=document.activeElement;if(!s.contains(u)){const r=new CustomEvent(F,S);s.addEventListener(F,E),s.dispatchEvent(r),r.defaultPrevented||(j(W(R(s)),{select:!0}),document.activeElement===u&&d(s))}return()=>{s.removeEventListener(F,E),setTimeout(()=>{const r=new CustomEvent(y,S);s.addEventListener(y,v),s.dispatchEvent(r),r.defaultPrevented||d(u??document.body,{select:!0}),s.removeEventListener(y,v),N.remove(a)},0)}}},[s,E,v,a]);const M=f.useCallback(u=>{if(!t&&!o||a.paused)return;const l=u.key==="Tab"&&!u.altKey&&!u.ctrlKey&&!u.metaKey,r=document.activeElement;if(l&&r){const m=u.currentTarget,[i,c]=D(m);i&&c?!u.shiftKey&&r===c?(u.preventDefault(),t&&d(i,{select:!0})):u.shiftKey&&r===i&&(u.preventDefault(),t&&d(c,{select:!0})):r===m&&u.preventDefault()}},[t,o,a.paused]);return k.jsxRuntimeExports.jsx(A.Primitive.div,{tabIndex:-1,...L,ref:_,onKeyDown:M})});C.displayName=K;function j(e,{select:n=!1}={}){const t=document.activeElement;for(const o of e)if(d(o,{select:n}),document.activeElement!==t)return}function D(e){const n=R(e),t=h(n,e),o=h(n.reverse(),e);return[t,o]}function R(e){const n=[],t=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT,{acceptNode:o=>{const p=o.tagName==="INPUT"&&o.type==="hidden";return o.disabled||o.hidden||p?NodeFilter.FILTER_SKIP:o.tabIndex>=0?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}});for(;t.nextNode();)n.push(t.currentNode);return n}function h(e,n){for(const t of e)if(!q(t,{upTo:n}))return t}function q(e,{upTo:n}){if(getComputedStyle(e).visibility==="hidden")return!0;for(;e;){if(n!==void 0&&e===n)return!1;if(getComputedStyle(e).display==="none")return!0;e=e.parentElement}return!1}function H(e){return e instanceof HTMLInputElement&&"select"in e}function d(e,{select:n=!1}={}){if(e&&e.focus){const t=document.activeElement;e.focus({preventScroll:!0}),e!==t&&H(e)&&n&&e.select()}}var N=V();function V(){let e=[];return{add(n){const t=e[0];n!==t&&(t==null||t.pause()),e=g(e,n),e.unshift(n)},remove(n){var t;e=g(e,n),(t=e[0])==null||t.resume()}}}function g(e,n){const t=[...e],o=t.indexOf(n);return o!==-1&&t.splice(o,1),t}function W(e){return e.filter(n=>n.tagName!=="A")}exports.FocusScope=C; //# sourceMappingURL=index.cjs486.js.map