{"version":3,"file":"store.mjs","names":[],"sources":["../../../src/base-ui/FocusScope/store.ts"],"sourcesContent":["import { useSyncExternalStore } from 'react';\n\ninterface FocusScopeState {\n  activeScopeId: string | null;\n  knownScopes: Map<string, number>;\n  lastFocusedItem: Map<string, string>;\n}\n\nlet state: FocusScopeState = {\n  activeScopeId: null,\n  knownScopes: new Map(),\n  lastFocusedItem: new Map(),\n};\n\nconst listeners = new Set<() => void>();\n\nconst setState = (patch: Partial<FocusScopeState>) => {\n  state = { ...state, ...patch };\n  listeners.forEach((listener) => listener());\n};\n\nexport const subscribe = (listener: () => void) => {\n  listeners.add(listener);\n  return () => listeners.delete(listener);\n};\n\nexport const getActiveScopeId = () => state.activeScopeId;\n\nexport const setActiveScope = (id: string | null) => {\n  if (id !== null && !state.knownScopes.has(id)) return;\n  if (state.activeScopeId === id) return;\n  setState({ activeScopeId: id });\n};\n\nexport const getLastFocusedItem = (scopeId: string) => state.lastFocusedItem.get(scopeId) ?? null;\n\nexport const setLastFocusedItem = (scopeId: string, itemId: string | null) => {\n  if ((state.lastFocusedItem.get(scopeId) ?? null) === itemId) return;\n  const next = new Map(state.lastFocusedItem);\n  if (itemId === null) next.delete(scopeId);\n  else next.set(scopeId, itemId);\n  setState({ lastFocusedItem: next });\n};\n\nconst findScopeId = (event: Event) => {\n  const target = event.target instanceof Element ? event.target : null;\n  return target?.closest<HTMLElement>('[data-focus-scope]')?.dataset.focusScope ?? null;\n};\n\nconst onGlobalInteract = (event: Event) => {\n  const id = findScopeId(event);\n  if (id !== null) setActiveScope(id);\n};\n\nlet listening = false;\n\nconst ensureDocumentListeners = () => {\n  if (listening || typeof document === 'undefined') return;\n  listening = true;\n  document.addEventListener('pointerdown', onGlobalInteract, true);\n  document.addEventListener('focusin', onGlobalInteract, true);\n};\n\nexport const registerScope = (id: string) => {\n  ensureDocumentListeners();\n  const next = new Map(state.knownScopes);\n  next.set(id, (next.get(id) ?? 0) + 1);\n  setState({ knownScopes: next });\n\n  return () => {\n    const count = state.knownScopes.get(id) ?? 0;\n    const scopes = new Map(state.knownScopes);\n    if (count > 1) {\n      scopes.set(id, count - 1);\n      setState({ knownScopes: scopes });\n      return;\n    }\n    scopes.delete(id);\n    const lastFocused = new Map(state.lastFocusedItem);\n    lastFocused.delete(id);\n    setState({\n      activeScopeId: state.activeScopeId === id ? null : state.activeScopeId,\n      knownScopes: scopes,\n      lastFocusedItem: lastFocused,\n    });\n  };\n};\n\nexport const useActiveScopeId = () => useSyncExternalStore(subscribe, getActiveScopeId, () => null);\n\nexport const useFocusScopeActive = (id: string) =>\n  useSyncExternalStore(\n    subscribe,\n    () => state.activeScopeId === id,\n    () => false,\n  );\n"],"mappings":";;AAQA,IAAI,QAAyB;CAC3B,eAAe;CACf,6BAAa,IAAI,IAAI;CACrB,iCAAiB,IAAI,IAAI;AAC3B;AAEA,MAAM,4BAAY,IAAI,IAAgB;AAEtC,MAAM,YAAY,UAAoC;CACpD,QAAQ;EAAE,GAAG;EAAO,GAAG;CAAM;CAC7B,UAAU,SAAS,aAAa,SAAS,CAAC;AAC5C;AAEA,MAAa,aAAa,aAAyB;CACjD,UAAU,IAAI,QAAQ;CACtB,aAAa,UAAU,OAAO,QAAQ;AACxC;AAEA,MAAa,yBAAyB,MAAM;AAE5C,MAAa,kBAAkB,OAAsB;CACnD,IAAI,OAAO,QAAQ,CAAC,MAAM,YAAY,IAAI,EAAE,GAAG;CAC/C,IAAI,MAAM,kBAAkB,IAAI;CAChC,SAAS,EAAE,eAAe,GAAG,CAAC;AAChC;AAEA,MAAa,sBAAsB,YAAoB,MAAM,gBAAgB,IAAI,OAAO,KAAK;AAE7F,MAAa,sBAAsB,SAAiB,WAA0B;CAC5E,KAAK,MAAM,gBAAgB,IAAI,OAAO,KAAK,UAAU,QAAQ;CAC7D,MAAM,OAAO,IAAI,IAAI,MAAM,eAAe;CAC1C,IAAI,WAAW,MAAM,KAAK,OAAO,OAAO;MACnC,KAAK,IAAI,SAAS,MAAM;CAC7B,SAAS,EAAE,iBAAiB,KAAK,CAAC;AACpC;AAEA,MAAM,eAAe,UAAiB;CAEpC,QADe,MAAM,kBAAkB,UAAU,MAAM,SAAS,KAAA,EACjD,QAAqB,oBAAoB,CAAC,EAAE,QAAQ,cAAc;AACnF;AAEA,MAAM,oBAAoB,UAAiB;CACzC,MAAM,KAAK,YAAY,KAAK;CAC5B,IAAI,OAAO,MAAM,eAAe,EAAE;AACpC;AAEA,IAAI,YAAY;AAEhB,MAAM,gCAAgC;CACpC,IAAI,aAAa,OAAO,aAAa,aAAa;CAClD,YAAY;CACZ,SAAS,iBAAiB,eAAe,kBAAkB,IAAI;CAC/D,SAAS,iBAAiB,WAAW,kBAAkB,IAAI;AAC7D;AAEA,MAAa,iBAAiB,OAAe;CAC3C,wBAAwB;CACxB,MAAM,OAAO,IAAI,IAAI,MAAM,WAAW;CACtC,KAAK,IAAI,KAAK,KAAK,IAAI,EAAE,KAAK,KAAK,CAAC;CACpC,SAAS,EAAE,aAAa,KAAK,CAAC;CAE9B,aAAa;EACX,MAAM,QAAQ,MAAM,YAAY,IAAI,EAAE,KAAK;EAC3C,MAAM,SAAS,IAAI,IAAI,MAAM,WAAW;EACxC,IAAI,QAAQ,GAAG;GACb,OAAO,IAAI,IAAI,QAAQ,CAAC;GACxB,SAAS,EAAE,aAAa,OAAO,CAAC;GAChC;EACF;EACA,OAAO,OAAO,EAAE;EAChB,MAAM,cAAc,IAAI,IAAI,MAAM,eAAe;EACjD,YAAY,OAAO,EAAE;EACrB,SAAS;GACP,eAAe,MAAM,kBAAkB,KAAK,OAAO,MAAM;GACzD,aAAa;GACb,iBAAiB;EACnB,CAAC;CACH;AACF;AAEA,MAAa,yBAAyB,qBAAqB,WAAW,wBAAwB,IAAI;AAElG,MAAa,uBAAuB,OAClC,qBACE,iBACM,MAAM,kBAAkB,UACxB,KACR"}