@hoosei/voxweave-react
Version:
A customizable and interactive voice UI component for React applications
3 lines (2 loc) • 3.75 kB
JavaScript
;Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const U=require("react"),A=require("./index24.js"),k=require("./index35.js"),T=require("./index40.js"),w=require("react/jsx-runtime");function x(e){if(e&&e.__esModule)return e;const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const n in e)if(n!=="default"){const o=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(t,n,o.get?o:{enumerable:!0,get:()=>e[n]})}}return t.default=e,Object.freeze(t)}const f=x(U);var F="focusScope.autoFocusOnMount",y="focusScope.autoFocusOnUnmount",O={bubbles:!1,cancelable:!0},K="FocusScope",C=f.forwardRef((e,t)=>{const{loop:n=!1,trapped:o=!1,onMountAutoFocus:p,onUnmountAutoFocus:I,...L}=e,[s,P]=f.useState(null),v=T.useCallbackRef(p),E=T.useCallbackRef(I),b=f.useRef(null),R=A.useComposedRefs(t,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 S of i)S.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,O);s.addEventListener(F,v),s.dispatchEvent(r),r.defaultPrevented||(j(W(_(s)),{select:!0}),document.activeElement===u&&d(s))}return()=>{s.removeEventListener(F,v),setTimeout(()=>{const r=new CustomEvent(y,O);s.addEventListener(y,E),s.dispatchEvent(r),r.defaultPrevented||d(u??document.body,{select:!0}),s.removeEventListener(y,E),N.remove(a)},0)}}},[s,v,E,a]);const M=f.useCallback(u=>{if(!n&&!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(),n&&d(i,{select:!0})):u.shiftKey&&r===i&&(u.preventDefault(),n&&d(c,{select:!0})):r===m&&u.preventDefault()}},[n,o,a.paused]);return w.jsx(k.Primitive.div,{tabIndex:-1,...L,ref:R,onKeyDown:M})});C.displayName=K;function j(e,{select:t=!1}={}){const n=document.activeElement;for(const o of e)if(d(o,{select:t}),document.activeElement!==n)return}function D(e){const t=_(e),n=h(t,e),o=h(t.reverse(),e);return[n,o]}function _(e){const t=[],n=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(;n.nextNode();)t.push(n.currentNode);return t}function h(e,t){for(const n of e)if(!q(n,{upTo:t}))return n}function q(e,{upTo:t}){if(getComputedStyle(e).visibility==="hidden")return!0;for(;e;){if(t!==void 0&&e===t)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:t=!1}={}){if(e&&e.focus){const n=document.activeElement;e.focus({preventScroll:!0}),e!==n&&H(e)&&t&&e.select()}}var N=V();function V(){let e=[];return{add(t){const n=e[0];t!==n&&n?.pause(),e=g(e,t),e.unshift(t)},remove(t){e=g(e,t),e[0]?.resume()}}}function g(e,t){const n=[...e],o=n.indexOf(t);return o!==-1&&n.splice(o,1),n}function W(e){return e.filter(t=>t.tagName!=="A")}exports.FocusScope=C;
//# sourceMappingURL=index32.js.map