UNPKG

@visa/nova-react

Version:

Visa Product Design System Nova React library. Compatible with React ^19.

2 lines (1 loc) 982 B
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react");const t={defaultExpanded:""},r=(r=t)=>{const{defaultExpanded:a,...s}={...t,...r},n=e.useRef([]),[u,d]=e.useState(a),[l,o]=e.useState(-1),[i,c]=e.useState([]),f=-1===l?0:i.indexOf(l),p=i.length,x=p-1,y=Array.isArray(u),b=s?.ref||n,A=e.useCallback(e=>y?u.includes(e):u===e,[u,y]),E=e.useCallback(e=>{d(y?t=>A(e)?t.filter(t=>t!==e):[...t,e]:A(e)?"":e),o(e)},[A,y]);return e.useEffect(()=>{c(b.current?.map((e,t)=>e&&!(e.disabled||e.ariaDisabled)&&t).filter(e=>!1!==e))},[b]),{isIndexExpanded:A,onKeyNavigation:e=>{const t=e.key;let r=null;if("Tab"===t&&e.shiftKey&&f-1>=0?r=f-1:"Tab"===t&&!e.shiftKey&&f+1<=x?r=f+1:"ArrowUp"===t?r=f-1<0?x:f-1:"ArrowDown"===t?r=(f+1)%p:"End"===t?r=x:"Home"===t&&(r=0),b.current&&null!==r&&p){l!==r&&e.preventDefault();const t=i[r];o(t),b.current[t]?.focus()}},ref:b,toggleIndexExpanded:E}};r.displayName="useAccordion",exports.default=r,exports.useAccordion=r;