@visa/nova-react
Version:
Visa Product Design System Nova React library. Compatible with React ^19.
2 lines (1 loc) • 1.3 kB
JavaScript
;Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("../use-model/index.js");const n={autoSelect:!1,defaultSelected:-1,arrowKeyNavigation:null},r=(r=n)=>{const{arrowKeyNavigation:a,defaultSelected:l,onSelectedIndexChange:o,selectedIndex:u,...s}={...n,...r},c=e.useRef([]),[i,d]=t.default(u,o,l),[f,v]=e.useState(l),[p,x]=e.useState([]),g=-1===f?0:p.indexOf(f),b=e.useRef(null),w=p.length,S=w-1,h=s?.ref||c,m=(()=>{const e=h?.current[0]?.parentElement?.parentElement?.classList.contains("v-tabs-vertical");return e&&null===a?"vertical":a})();return e.useEffect(()=>{x(h.current?.map((e,t)=>!e?.disabled&&t).filter(e=>!1!==e))},[h]),{getTabIndex:(e,t=!1)=>(t||null!==b.current||(b.current=e),i===e||-1===i&&b.current===e?0:-1),onIndexChange:(e,t=!1)=>{t||(d(e),v(e))},onKeyNavigation:e=>{const t=e.key;let n=null;if("ArrowRight"===t&&"vertical"!==m&&"none"!==m||"ArrowDown"===t&&"horizontal"!==m&&"none"!==m?n=(g+1)%w:"ArrowLeft"===t&&"vertical"!==m&&"none"!==m||"ArrowUp"===t&&"horizontal"!==m&&"none"!==m?n=g-1<0?S:g-1:"End"===t?n=S:"Home"===t&&(n=0),"Tab"===t&&v(i),h.current&&null!==n&&w){e.preventDefault();const t=p[n];s.autoSelect&&d(t),v(t),h.current[t]?.focus()}},ref:h,selectedIndex:i}};r.displayName="useTabs",exports.default=r,exports.useTabs=r;