@data-slot/tabs 0.2.139 → 0.2.140

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/index.cjs CHANGED
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});let e=require(`@data-slot/core`);const t=[`horizontal`,`vertical`],n=[`auto`,`manual`],r=`@data-slot/tabs`;function i(i,a={}){let o=(0,e.reuseRootBinding)(i,r,`[@data-slot/tabs] createTabs() called more than once for the same root. Returning the existing controller. Destroy it before rebinding with new options.`);if(o)return o;let s=(0,e.getPart)(i,`tabs-list`),c=(0,e.getParts)(i,`tabs-trigger`),l=(0,e.getParts)(i,`tabs-content`),u=(0,e.getPart)(i,`tabs-indicator`);if(!s||c.length===0)throw Error(`Tabs requires tabs-list and at least one tabs-trigger`);let d=a.onValueChange,f=a.orientation??(0,e.getDataEnum)(i,`orientation`,t)??`horizontal`,p=a.activationMode??(0,e.getDataEnum)(i,`activationMode`,n)??`auto`,m=new Map;for(let e of l){let t=(e.dataset.value||``).trim();t&&m.set(t,e)}let h=[],g=new Map,_=new Map;for(let e of c){let t=(e.dataset.value||``).trim();if(!t)continue;let n={el:e,value:t,disabled:e.hasAttribute(`disabled`)||e.dataset.disabled!==void 0||e.getAttribute(`aria-disabled`)===`true`,panel:m.get(t)};h.push(n),g.set(t,n),_.set(e,n)}let v=h.filter(e=>!e.disabled),y=new Map;v.forEach((e,t)=>y.set(e.value,t));let b=v[0]?.value||``,x=(a.defaultValue??(0,e.getDataString)(i,`defaultValue`)??``).trim(),S=g.get(x),C=S&&!S.disabled?x:b,w=[],T=null;s.setAttribute(`role`,`tablist`),f===`vertical`&&(0,e.setAria)(s,`orientation`,`vertical`);for(let t of h){let{el:n,disabled:r,panel:i}=t;n.setAttribute(`role`,`tab`);let a=(0,e.ensureId)(n,`tab`);if(n.tagName===`BUTTON`&&!n.hasAttribute(`type`)&&(n.type=`button`),r&&(n.setAttribute(`aria-disabled`,`true`),n.tagName===`BUTTON`&&(n.disabled=!0)),i){i.setAttribute(`role`,`tabpanel`),i.tabIndex=-1;let t=(0,e.ensureId)(i,`tabpanel`);n.setAttribute(`aria-controls`,t),i.setAttribute(`aria-labelledby`,a)}}let E=e=>{let t=0,n=0,r=e;for(;r&&r!==s;){t+=r.offsetLeft,n+=r.offsetTop;let e=r.offsetParent;if(!(e instanceof HTMLElement))return null;e!==s&&(t-=e.scrollLeft,n-=e.scrollTop),r=e}if(r!==s)return null;let i={left:t-s.clientLeft,top:n-s.clientTop,width:e.offsetWidth,height:e.offsetHeight},a=D(e);return a&&(f===`horizontal`?i.top=Math.floor(a.top):i.left=Math.floor(a.left)),i},D=e=>{let t=s.getBoundingClientRect(),n=e.getBoundingClientRect();if(t.width===0&&t.height===0||n.width===0&&n.height===0)return null;let r=(e,t)=>{if(t<=0)return 1;let n=e/t;return Math.abs(n-1)<.05?1:n},i=r(n.width,e.offsetWidth),a=r(n.height,e.offsetHeight);return{left:(n.left-t.left-s.clientLeft+s.scrollLeft)/i,top:(n.top-t.top-s.clientTop+s.scrollTop)/a,width:e.offsetWidth,height:e.offsetHeight}},O=()=>{if(!u)return;let e=g.get(C);if(!e)return;let t=E(e.el)??D(e.el);u.style.setProperty(`--active-tab-left`,`${t.left}px`),u.style.setProperty(`--active-tab-width`,`${t.width}px`),u.style.setProperty(`--active-tab-top`,`${t.top}px`),u.style.setProperty(`--active-tab-height`,`${t.height}px`)},k=()=>{!u||T!==null||(T=requestAnimationFrame(()=>{T=null,O()}))},A=(e,t)=>{let n=h.findIndex(t=>t.value===e),r=h.findIndex(e=>e.value===t);return n<0||r<0||n===r?null:f===`vertical`?r>n?`down`:`up`:r>n?`right`:`left`},j=(t,n=!1)=>{if(t=t.trim(),C===t&&!n)return;let r=g.get(t);if(!r||r.disabled)if(n){if(t=b,!t)return}else return;let a=C,o=a!==t,s=!n&&o?A(a,t):null;C=t;for(let n of h){let r=n.value===t;(0,e.setAria)(n.el,`selected`,r),n.el.tabIndex=r&&!n.disabled?0:-1,n.el.dataset.state=r?`active`:`inactive`}for(let e of l){let n=(e.dataset.value||``).trim();if(!n)continue;let r=n===t;e.hidden=!r,e.dataset.state=r?`active`:`inactive`,s?e.dataset.activationDirection=s:delete e.dataset.activationDirection}i.setAttribute(`data-value`,t),k(),o&&!n&&((0,e.emit)(i,`tabs:change`,{value:t}),d?.(t))};if(j(C,!0),u){let t=()=>k();w.push((0,e.on)(window,`resize`,t)),w.push((0,e.on)(s,`scroll`,t));let n=new ResizeObserver(t);n.observe(s),w.push(()=>n.disconnect()),w.push(()=>{T!==null&&(cancelAnimationFrame(T),T=null)})}w.push((0,e.on)(s,`click`,e=>{let t=e.target.closest?.(`[data-slot="tabs-trigger"]`);if(!t)return;let n=_.get(t);n&&!n.disabled&&j(n.value)}));let M=f===`horizontal`,N=M?`ArrowLeft`:`ArrowUp`,P=M?`ArrowRight`:`ArrowDown`;w.push((0,e.on)(s,`keydown`,e=>{let t=e.target.closest?.(`[data-slot="tabs-trigger"]`);if(!t)return;let n=_.get(t);if(!n||v.length===0)return;if(e.key===`Enter`||e.key===` `){e.preventDefault(),n.disabled||j(n.value);return}if(M&&e.key===`ArrowDown`&&n.value===C){let t=n.panel;if(t){e.preventDefault(),(t.querySelector(`a[href],button:not([disabled]),input:not([disabled]),select:not([disabled]),textarea:not([disabled]),[tabindex]:not([tabindex="-1"])`)||t).focus();return}}let r=y.get(n.value)??-1;r===-1&&(r=y.get(C)??0);let i=r;switch(e.key){case N:i=r-1,i<0&&(i=v.length-1);break;case P:i=r+1,i>=v.length&&(i=0);break;case`Home`:i=0;break;case`End`:i=v.length-1;break;default:return}e.preventDefault();let a=v[i];a&&(a.el.focus(),p===`auto`&&j(a.value))}));let F=e=>{let t=e,n=e.currentTarget,r=t.detail,i=(typeof r==`string`?r:r?.value??n?.dataset?.value)?.trim();i&&j(i)};w.push((0,e.on)(i,`tabs:set`,F)),w.push((0,e.on)(i,`tabs:select`,F));let I={select:e=>j(e),get value(){return C},updateIndicator:O,destroy:()=>{w.forEach(e=>e()),w.length=0,(0,e.clearRootBinding)(i,r,I)}};return(0,e.setRootBinding)(i,r,I),I}function a(t=document){let n=[];for(let a of(0,e.getRoots)(t,`tabs`))(0,e.hasRootBinding)(a,r)||n.push(i(a));return n}exports.create=a,exports.createTabs=i;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});let e=require(`@data-slot/core`);const t=[`horizontal`,`vertical`],n=[`auto`,`manual`],r=`@data-slot/tabs`;function i(i,a={}){let o=(0,e.reuseRootBinding)(i,r,`[@data-slot/tabs] createTabs() called more than once for the same root. Returning the existing controller. Destroy it before rebinding with new options.`);if(o)return o;let s=(0,e.getPart)(i,`tabs-list`),c=(0,e.getParts)(i,`tabs-trigger`),l=(0,e.getParts)(i,`tabs-content`),u=(0,e.getPart)(i,`tabs-indicator`);if(!s||c.length===0)throw Error(`Tabs requires tabs-list and at least one tabs-trigger`);let d=a.onValueChange,f=a.orientation??(0,e.getDataEnum)(i,`orientation`,t)??`horizontal`,p=a.activationMode??(0,e.getDataEnum)(i,`activationMode`,n)??`auto`,m=new Map;for(let e of l){let t=(e.dataset.value||``).trim();t&&m.set(t,e)}let h=[],g=new Map,_=new Map;for(let e of c){let t=(e.dataset.value||``).trim();if(!t)continue;let n={el:e,value:t,disabled:e.hasAttribute(`disabled`)||e.dataset.disabled!==void 0||e.getAttribute(`aria-disabled`)===`true`,panel:m.get(t)};h.push(n),g.set(t,n),_.set(e,n)}let v=h.filter(e=>!e.disabled),y=new Map;v.forEach((e,t)=>y.set(e.value,t));let b=v[0]?.value||``,x=(a.defaultValue??(0,e.getDataString)(i,`defaultValue`)??``).trim(),S=g.get(x),C=S&&!S.disabled?x:b,w=[],T=null;s.setAttribute(`role`,`tablist`),f===`vertical`&&(0,e.setAria)(s,`orientation`,`vertical`);for(let t of h){let{el:n,disabled:r,panel:i}=t;n.setAttribute(`role`,`tab`);let a=(0,e.ensureId)(n,`tab`);if(n.tagName===`BUTTON`&&!n.hasAttribute(`type`)&&(n.type=`button`),r&&(n.setAttribute(`aria-disabled`,`true`),n.tagName===`BUTTON`&&(n.disabled=!0)),i){i.setAttribute(`role`,`tabpanel`),i.tabIndex=-1;let t=(0,e.ensureId)(i,`tabpanel`);n.setAttribute(`aria-controls`,t),i.setAttribute(`aria-labelledby`,a)}}let E=()=>{u&&(u.style.setProperty(`--active-tab-left`,`0px`),u.style.setProperty(`--active-tab-width`,`0px`),u.style.setProperty(`--active-tab-top`,`0px`),u.style.setProperty(`--active-tab-height`,`0px`))},D=e=>{let t=0,n=0,r=e;for(;r&&r!==s;){t+=r.offsetLeft,n+=r.offsetTop;let e=r.offsetParent;if(!(e instanceof HTMLElement))return null;e!==s&&(t-=e.scrollLeft,n-=e.scrollTop),r=e}if(r!==s)return null;let i={left:t-s.clientLeft,top:n-s.clientTop,width:e.offsetWidth,height:e.offsetHeight},a=O(e);return a&&(f===`horizontal`?i.top=Math.floor(a.top):i.left=Math.floor(a.left)),i},O=e=>{let t=s.getBoundingClientRect(),n=e.getBoundingClientRect();if(t.width===0&&t.height===0||n.width===0&&n.height===0)return null;let r=(e,t)=>{if(t<=0)return 1;let n=e/t;return Math.abs(n-1)<.05?1:n},i=r(n.width,e.offsetWidth),a=r(n.height,e.offsetHeight);return{left:(n.left-t.left-s.clientLeft+s.scrollLeft)/i,top:(n.top-t.top-s.clientTop+s.scrollTop)/a,width:e.offsetWidth,height:e.offsetHeight}},k=()=>{if(!u)return;let e=g.get(C);if(!e){E();return}let t=D(e.el)??O(e.el);if(!t){E();return}u.style.setProperty(`--active-tab-left`,`${t.left}px`),u.style.setProperty(`--active-tab-width`,`${t.width}px`),u.style.setProperty(`--active-tab-top`,`${t.top}px`),u.style.setProperty(`--active-tab-height`,`${t.height}px`)},A=()=>{!u||T!==null||(T=requestAnimationFrame(()=>{T=null,k()}))},j=(e,t)=>{let n=h.findIndex(t=>t.value===e),r=h.findIndex(e=>e.value===t);return n<0||r<0||n===r?null:f===`vertical`?r>n?`down`:`up`:r>n?`right`:`left`},M=(t,n=!1)=>{if(t=t.trim(),C===t&&!n)return;let r=g.get(t);if(!r||r.disabled)if(n){if(t=b,!t)return}else return;let a=C,o=a!==t,s=!n&&o?j(a,t):null;C=t;for(let n of h){let r=n.value===t;(0,e.setAria)(n.el,`selected`,r),n.el.tabIndex=r&&!n.disabled?0:-1,n.el.dataset.state=r?`active`:`inactive`}for(let e of l){let n=(e.dataset.value||``).trim();if(!n)continue;let r=n===t;e.hidden=!r,e.dataset.state=r?`active`:`inactive`,s?e.dataset.activationDirection=s:delete e.dataset.activationDirection}i.setAttribute(`data-value`,t),A(),o&&!n&&((0,e.emit)(i,`tabs:change`,{value:t}),d?.(t))};if(M(C,!0),u){let t=()=>A();w.push((0,e.on)(window,`resize`,t)),w.push((0,e.on)(s,`scroll`,t));let n=new ResizeObserver(t);n.observe(s),w.push(()=>n.disconnect()),w.push(()=>{T!==null&&(cancelAnimationFrame(T),T=null)})}w.push((0,e.on)(s,`click`,e=>{let t=e.target.closest?.(`[data-slot="tabs-trigger"]`);if(!t)return;let n=_.get(t);n&&!n.disabled&&M(n.value)}));let N=f===`horizontal`,P=N?`ArrowLeft`:`ArrowUp`,F=N?`ArrowRight`:`ArrowDown`;w.push((0,e.on)(s,`keydown`,e=>{let t=e.target.closest?.(`[data-slot="tabs-trigger"]`);if(!t)return;let n=_.get(t);if(!n||v.length===0)return;if(e.key===`Enter`||e.key===` `){e.preventDefault(),n.disabled||M(n.value);return}if(N&&e.key===`ArrowDown`&&n.value===C){let t=n.panel;if(t){e.preventDefault(),(t.querySelector(`a[href],button:not([disabled]),input:not([disabled]),select:not([disabled]),textarea:not([disabled]),[tabindex]:not([tabindex="-1"])`)||t).focus();return}}let r=y.get(n.value)??-1;r===-1&&(r=y.get(C)??0);let i=r;switch(e.key){case P:i=r-1,i<0&&(i=v.length-1);break;case F:i=r+1,i>=v.length&&(i=0);break;case`Home`:i=0;break;case`End`:i=v.length-1;break;default:return}e.preventDefault();let a=v[i];a&&(a.el.focus(),p===`auto`&&M(a.value))}));let I=e=>{let t=e,n=e.currentTarget,r=t.detail,i=(typeof r==`string`?r:r?.value??n?.dataset?.value)?.trim();i&&M(i)};w.push((0,e.on)(i,`tabs:set`,I)),w.push((0,e.on)(i,`tabs:select`,I));let L={select:e=>M(e),get value(){return C},updateIndicator:k,destroy:()=>{w.forEach(e=>e()),w.length=0,(0,e.clearRootBinding)(i,r,L)}};return(0,e.setRootBinding)(i,r,L),L}function a(t=document){let n=[];for(let a of(0,e.getRoots)(t,`tabs`))(0,e.hasRootBinding)(a,r)||n.push(i(a));return n}exports.create=a,exports.createTabs=i;
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- import{clearRootBinding as e,emit as t,ensureId as n,getDataEnum as r,getDataString as i,getPart as a,getParts as o,getRoots as s,hasRootBinding as c,on as l,reuseRootBinding as u,setAria as d,setRootBinding as f}from"@data-slot/core";const p=[`horizontal`,`vertical`],m=[`auto`,`manual`],h=`@data-slot/tabs`;function g(s,c={}){let g=u(s,h,`[@data-slot/tabs] createTabs() called more than once for the same root. Returning the existing controller. Destroy it before rebinding with new options.`);if(g)return g;let _=a(s,`tabs-list`),v=o(s,`tabs-trigger`),y=o(s,`tabs-content`),b=a(s,`tabs-indicator`);if(!_||v.length===0)throw Error(`Tabs requires tabs-list and at least one tabs-trigger`);let x=c.onValueChange,S=c.orientation??r(s,`orientation`,p)??`horizontal`,C=c.activationMode??r(s,`activationMode`,m)??`auto`,w=new Map;for(let e of y){let t=(e.dataset.value||``).trim();t&&w.set(t,e)}let T=[],E=new Map,D=new Map;for(let e of v){let t=(e.dataset.value||``).trim();if(!t)continue;let n={el:e,value:t,disabled:e.hasAttribute(`disabled`)||e.dataset.disabled!==void 0||e.getAttribute(`aria-disabled`)===`true`,panel:w.get(t)};T.push(n),E.set(t,n),D.set(e,n)}let O=T.filter(e=>!e.disabled),k=new Map;O.forEach((e,t)=>k.set(e.value,t));let A=O[0]?.value||``,j=(c.defaultValue??i(s,`defaultValue`)??``).trim(),M=E.get(j),N=M&&!M.disabled?j:A,P=[],F=null;_.setAttribute(`role`,`tablist`),S===`vertical`&&d(_,`orientation`,`vertical`);for(let e of T){let{el:t,disabled:r,panel:i}=e;t.setAttribute(`role`,`tab`);let a=n(t,`tab`);if(t.tagName===`BUTTON`&&!t.hasAttribute(`type`)&&(t.type=`button`),r&&(t.setAttribute(`aria-disabled`,`true`),t.tagName===`BUTTON`&&(t.disabled=!0)),i){i.setAttribute(`role`,`tabpanel`),i.tabIndex=-1;let e=n(i,`tabpanel`);t.setAttribute(`aria-controls`,e),i.setAttribute(`aria-labelledby`,a)}}let I=e=>{let t=0,n=0,r=e;for(;r&&r!==_;){t+=r.offsetLeft,n+=r.offsetTop;let e=r.offsetParent;if(!(e instanceof HTMLElement))return null;e!==_&&(t-=e.scrollLeft,n-=e.scrollTop),r=e}if(r!==_)return null;let i={left:t-_.clientLeft,top:n-_.clientTop,width:e.offsetWidth,height:e.offsetHeight},a=L(e);return a&&(S===`horizontal`?i.top=Math.floor(a.top):i.left=Math.floor(a.left)),i},L=e=>{let t=_.getBoundingClientRect(),n=e.getBoundingClientRect();if(t.width===0&&t.height===0||n.width===0&&n.height===0)return null;let r=(e,t)=>{if(t<=0)return 1;let n=e/t;return Math.abs(n-1)<.05?1:n},i=r(n.width,e.offsetWidth),a=r(n.height,e.offsetHeight);return{left:(n.left-t.left-_.clientLeft+_.scrollLeft)/i,top:(n.top-t.top-_.clientTop+_.scrollTop)/a,width:e.offsetWidth,height:e.offsetHeight}},R=()=>{if(!b)return;let e=E.get(N);if(!e)return;let t=I(e.el)??L(e.el);b.style.setProperty(`--active-tab-left`,`${t.left}px`),b.style.setProperty(`--active-tab-width`,`${t.width}px`),b.style.setProperty(`--active-tab-top`,`${t.top}px`),b.style.setProperty(`--active-tab-height`,`${t.height}px`)},z=()=>{!b||F!==null||(F=requestAnimationFrame(()=>{F=null,R()}))},B=(e,t)=>{let n=T.findIndex(t=>t.value===e),r=T.findIndex(e=>e.value===t);return n<0||r<0||n===r?null:S===`vertical`?r>n?`down`:`up`:r>n?`right`:`left`},V=(e,n=!1)=>{if(e=e.trim(),N===e&&!n)return;let r=E.get(e);if(!r||r.disabled)if(n){if(e=A,!e)return}else return;let i=N,a=i!==e,o=!n&&a?B(i,e):null;N=e;for(let t of T){let n=t.value===e;d(t.el,`selected`,n),t.el.tabIndex=n&&!t.disabled?0:-1,t.el.dataset.state=n?`active`:`inactive`}for(let t of y){let n=(t.dataset.value||``).trim();if(!n)continue;let r=n===e;t.hidden=!r,t.dataset.state=r?`active`:`inactive`,o?t.dataset.activationDirection=o:delete t.dataset.activationDirection}s.setAttribute(`data-value`,e),z(),a&&!n&&(t(s,`tabs:change`,{value:e}),x?.(e))};if(V(N,!0),b){let e=()=>z();P.push(l(window,`resize`,e)),P.push(l(_,`scroll`,e));let t=new ResizeObserver(e);t.observe(_),P.push(()=>t.disconnect()),P.push(()=>{F!==null&&(cancelAnimationFrame(F),F=null)})}P.push(l(_,`click`,e=>{let t=e.target.closest?.(`[data-slot="tabs-trigger"]`);if(!t)return;let n=D.get(t);n&&!n.disabled&&V(n.value)}));let H=S===`horizontal`,U=H?`ArrowLeft`:`ArrowUp`,W=H?`ArrowRight`:`ArrowDown`;P.push(l(_,`keydown`,e=>{let t=e.target.closest?.(`[data-slot="tabs-trigger"]`);if(!t)return;let n=D.get(t);if(!n||O.length===0)return;if(e.key===`Enter`||e.key===` `){e.preventDefault(),n.disabled||V(n.value);return}if(H&&e.key===`ArrowDown`&&n.value===N){let t=n.panel;if(t){e.preventDefault(),(t.querySelector(`a[href],button:not([disabled]),input:not([disabled]),select:not([disabled]),textarea:not([disabled]),[tabindex]:not([tabindex="-1"])`)||t).focus();return}}let r=k.get(n.value)??-1;r===-1&&(r=k.get(N)??0);let i=r;switch(e.key){case U:i=r-1,i<0&&(i=O.length-1);break;case W:i=r+1,i>=O.length&&(i=0);break;case`Home`:i=0;break;case`End`:i=O.length-1;break;default:return}e.preventDefault();let a=O[i];a&&(a.el.focus(),C===`auto`&&V(a.value))}));let G=e=>{let t=e,n=e.currentTarget,r=t.detail,i=(typeof r==`string`?r:r?.value??n?.dataset?.value)?.trim();i&&V(i)};P.push(l(s,`tabs:set`,G)),P.push(l(s,`tabs:select`,G));let K={select:e=>V(e),get value(){return N},updateIndicator:R,destroy:()=>{P.forEach(e=>e()),P.length=0,e(s,h,K)}};return f(s,h,K),K}function _(e=document){let t=[];for(let n of s(e,`tabs`))c(n,h)||t.push(g(n));return t}export{_ as create,g as createTabs};
1
+ import{clearRootBinding as e,emit as t,ensureId as n,getDataEnum as r,getDataString as i,getPart as a,getParts as o,getRoots as s,hasRootBinding as c,on as l,reuseRootBinding as u,setAria as d,setRootBinding as f}from"@data-slot/core";const p=[`horizontal`,`vertical`],m=[`auto`,`manual`],h=`@data-slot/tabs`;function g(s,c={}){let g=u(s,h,`[@data-slot/tabs] createTabs() called more than once for the same root. Returning the existing controller. Destroy it before rebinding with new options.`);if(g)return g;let _=a(s,`tabs-list`),v=o(s,`tabs-trigger`),y=o(s,`tabs-content`),b=a(s,`tabs-indicator`);if(!_||v.length===0)throw Error(`Tabs requires tabs-list and at least one tabs-trigger`);let x=c.onValueChange,S=c.orientation??r(s,`orientation`,p)??`horizontal`,C=c.activationMode??r(s,`activationMode`,m)??`auto`,w=new Map;for(let e of y){let t=(e.dataset.value||``).trim();t&&w.set(t,e)}let T=[],E=new Map,D=new Map;for(let e of v){let t=(e.dataset.value||``).trim();if(!t)continue;let n={el:e,value:t,disabled:e.hasAttribute(`disabled`)||e.dataset.disabled!==void 0||e.getAttribute(`aria-disabled`)===`true`,panel:w.get(t)};T.push(n),E.set(t,n),D.set(e,n)}let O=T.filter(e=>!e.disabled),k=new Map;O.forEach((e,t)=>k.set(e.value,t));let A=O[0]?.value||``,j=(c.defaultValue??i(s,`defaultValue`)??``).trim(),M=E.get(j),N=M&&!M.disabled?j:A,P=[],F=null;_.setAttribute(`role`,`tablist`),S===`vertical`&&d(_,`orientation`,`vertical`);for(let e of T){let{el:t,disabled:r,panel:i}=e;t.setAttribute(`role`,`tab`);let a=n(t,`tab`);if(t.tagName===`BUTTON`&&!t.hasAttribute(`type`)&&(t.type=`button`),r&&(t.setAttribute(`aria-disabled`,`true`),t.tagName===`BUTTON`&&(t.disabled=!0)),i){i.setAttribute(`role`,`tabpanel`),i.tabIndex=-1;let e=n(i,`tabpanel`);t.setAttribute(`aria-controls`,e),i.setAttribute(`aria-labelledby`,a)}}let I=()=>{b&&(b.style.setProperty(`--active-tab-left`,`0px`),b.style.setProperty(`--active-tab-width`,`0px`),b.style.setProperty(`--active-tab-top`,`0px`),b.style.setProperty(`--active-tab-height`,`0px`))},L=e=>{let t=0,n=0,r=e;for(;r&&r!==_;){t+=r.offsetLeft,n+=r.offsetTop;let e=r.offsetParent;if(!(e instanceof HTMLElement))return null;e!==_&&(t-=e.scrollLeft,n-=e.scrollTop),r=e}if(r!==_)return null;let i={left:t-_.clientLeft,top:n-_.clientTop,width:e.offsetWidth,height:e.offsetHeight},a=R(e);return a&&(S===`horizontal`?i.top=Math.floor(a.top):i.left=Math.floor(a.left)),i},R=e=>{let t=_.getBoundingClientRect(),n=e.getBoundingClientRect();if(t.width===0&&t.height===0||n.width===0&&n.height===0)return null;let r=(e,t)=>{if(t<=0)return 1;let n=e/t;return Math.abs(n-1)<.05?1:n},i=r(n.width,e.offsetWidth),a=r(n.height,e.offsetHeight);return{left:(n.left-t.left-_.clientLeft+_.scrollLeft)/i,top:(n.top-t.top-_.clientTop+_.scrollTop)/a,width:e.offsetWidth,height:e.offsetHeight}},z=()=>{if(!b)return;let e=E.get(N);if(!e){I();return}let t=L(e.el)??R(e.el);if(!t){I();return}b.style.setProperty(`--active-tab-left`,`${t.left}px`),b.style.setProperty(`--active-tab-width`,`${t.width}px`),b.style.setProperty(`--active-tab-top`,`${t.top}px`),b.style.setProperty(`--active-tab-height`,`${t.height}px`)},B=()=>{!b||F!==null||(F=requestAnimationFrame(()=>{F=null,z()}))},V=(e,t)=>{let n=T.findIndex(t=>t.value===e),r=T.findIndex(e=>e.value===t);return n<0||r<0||n===r?null:S===`vertical`?r>n?`down`:`up`:r>n?`right`:`left`},H=(e,n=!1)=>{if(e=e.trim(),N===e&&!n)return;let r=E.get(e);if(!r||r.disabled)if(n){if(e=A,!e)return}else return;let i=N,a=i!==e,o=!n&&a?V(i,e):null;N=e;for(let t of T){let n=t.value===e;d(t.el,`selected`,n),t.el.tabIndex=n&&!t.disabled?0:-1,t.el.dataset.state=n?`active`:`inactive`}for(let t of y){let n=(t.dataset.value||``).trim();if(!n)continue;let r=n===e;t.hidden=!r,t.dataset.state=r?`active`:`inactive`,o?t.dataset.activationDirection=o:delete t.dataset.activationDirection}s.setAttribute(`data-value`,e),B(),a&&!n&&(t(s,`tabs:change`,{value:e}),x?.(e))};if(H(N,!0),b){let e=()=>B();P.push(l(window,`resize`,e)),P.push(l(_,`scroll`,e));let t=new ResizeObserver(e);t.observe(_),P.push(()=>t.disconnect()),P.push(()=>{F!==null&&(cancelAnimationFrame(F),F=null)})}P.push(l(_,`click`,e=>{let t=e.target.closest?.(`[data-slot="tabs-trigger"]`);if(!t)return;let n=D.get(t);n&&!n.disabled&&H(n.value)}));let U=S===`horizontal`,W=U?`ArrowLeft`:`ArrowUp`,G=U?`ArrowRight`:`ArrowDown`;P.push(l(_,`keydown`,e=>{let t=e.target.closest?.(`[data-slot="tabs-trigger"]`);if(!t)return;let n=D.get(t);if(!n||O.length===0)return;if(e.key===`Enter`||e.key===` `){e.preventDefault(),n.disabled||H(n.value);return}if(U&&e.key===`ArrowDown`&&n.value===N){let t=n.panel;if(t){e.preventDefault(),(t.querySelector(`a[href],button:not([disabled]),input:not([disabled]),select:not([disabled]),textarea:not([disabled]),[tabindex]:not([tabindex="-1"])`)||t).focus();return}}let r=k.get(n.value)??-1;r===-1&&(r=k.get(N)??0);let i=r;switch(e.key){case W:i=r-1,i<0&&(i=O.length-1);break;case G:i=r+1,i>=O.length&&(i=0);break;case`Home`:i=0;break;case`End`:i=O.length-1;break;default:return}e.preventDefault();let a=O[i];a&&(a.el.focus(),C===`auto`&&H(a.value))}));let K=e=>{let t=e,n=e.currentTarget,r=t.detail,i=(typeof r==`string`?r:r?.value??n?.dataset?.value)?.trim();i&&H(i)};P.push(l(s,`tabs:set`,K)),P.push(l(s,`tabs:select`,K));let q={select:e=>H(e),get value(){return N},updateIndicator:z,destroy:()=>{P.forEach(e=>e()),P.length=0,e(s,h,q)}};return f(s,h,q),q}function _(e=document){let t=[];for(let n of s(e,`tabs`))c(n,h)||t.push(g(n));return t}export{_ as create,g as createTabs};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@data-slot/tabs",
3
- "version": "0.2.139",
3
+ "version": "0.2.140",
4
4
  "type": "module",
5
5
  "sideEffects": false,
6
6
  "main": "./dist/index.cjs",
@@ -34,6 +34,6 @@
34
34
  ],
35
35
  "license": "MIT",
36
36
  "dependencies": {
37
- "@data-slot/core": "0.2.139"
37
+ "@data-slot/core": "0.2.140"
38
38
  }
39
39
  }