{"version":3,"file":"RovingFocusGroup-Cpq_ZEkU.js","sources":["../../node_modules/reka-ui/dist/RovingFocus/utils.js","../../node_modules/reka-ui/dist/RovingFocus/RovingFocusGroup.js"],"sourcesContent":["import { g as getActiveElement } from '../shared/getActiveElement.js';\n\nconst ENTRY_FOCUS = \"rovingFocusGroup.onEntryFocus\";\nconst EVENT_OPTIONS = { bubbles: false, cancelable: true };\nconst MAP_KEY_TO_FOCUS_INTENT = {\n ArrowLeft: \"prev\",\n ArrowUp: \"prev\",\n ArrowRight: \"next\",\n ArrowDown: \"next\",\n PageUp: \"first\",\n Home: \"first\",\n PageDown: \"last\",\n End: \"last\"\n};\nfunction getDirectionAwareKey(key, dir) {\n if (dir !== \"rtl\")\n return key;\n return key === \"ArrowLeft\" ? \"ArrowRight\" : key === \"ArrowRight\" ? \"ArrowLeft\" : key;\n}\nfunction getFocusIntent(event, orientation, dir) {\n const key = getDirectionAwareKey(event.key, dir);\n if (orientation === \"vertical\" && [\"ArrowLeft\", \"ArrowRight\"].includes(key))\n return undefined;\n if (orientation === \"horizontal\" && [\"ArrowUp\", \"ArrowDown\"].includes(key))\n return undefined;\n return MAP_KEY_TO_FOCUS_INTENT[key];\n}\nfunction focusFirst(candidates, preventScroll = false) {\n const PREVIOUSLY_FOCUSED_ELEMENT = getActiveElement();\n for (const candidate of candidates) {\n if (candidate === PREVIOUSLY_FOCUSED_ELEMENT)\n return;\n candidate.focus({ preventScroll });\n if (getActiveElement() !== PREVIOUSLY_FOCUSED_ELEMENT)\n return;\n }\n}\nfunction wrapArray(array, startIndex) {\n return array.map((_, index) => array[(startIndex + index) % array.length]);\n}\n\nexport { ENTRY_FOCUS as E, MAP_KEY_TO_FOCUS_INTENT as M, EVENT_OPTIONS as a, focusFirst as f, getFocusIntent as g, wrapArray as w };\n//# sourceMappingURL=utils.js.map\n","import { defineComponent, toRefs, ref, openBlock, createBlock, unref, withCtx, createVNode, renderSlot } from 'vue';\nimport { useVModel } from '@vueuse/core';\nimport { f as focusFirst, E as ENTRY_FOCUS, a as EVENT_OPTIONS } from './utils.js';\nimport { u as useCollection } from '../Collection/Collection.js';\nimport { u as useDirection } from '../shared/useDirection.js';\nimport { P as Primitive } from '../Primitive/Primitive.js';\nimport { c as createContext } from '../shared/createContext.js';\n\nconst [injectRovingFocusGroupContext, provideRovingFocusGroupContext] = createContext(\"RovingFocusGroup\");\nconst _sfc_main = /* @__PURE__ */ defineComponent({\n __name: \"RovingFocusGroup\",\n props: {\n orientation: { default: undefined },\n dir: {},\n loop: { type: Boolean, default: false },\n currentTabStopId: {},\n defaultCurrentTabStopId: {},\n preventScrollOnEntryFocus: { type: Boolean, default: false },\n asChild: { type: Boolean },\n as: {}\n },\n emits: [\"entryFocus\", \"update:currentTabStopId\"],\n setup(__props, { expose: __expose, emit: __emit }) {\n const props = __props;\n const emits = __emit;\n const { loop, orientation, dir: propDir } = toRefs(props);\n const dir = useDirection(propDir);\n const currentTabStopId = useVModel(props, \"currentTabStopId\", emits, {\n defaultValue: props.defaultCurrentTabStopId,\n passive: props.currentTabStopId === undefined\n });\n const isTabbingBackOut = ref(false);\n const isClickFocus = ref(false);\n const focusableItemsCount = ref(0);\n const { getItems, CollectionSlot } = useCollection({ isProvider: true });\n function handleFocus(event) {\n const isKeyboardFocus = !isClickFocus.value;\n if (event.currentTarget && event.target === event.currentTarget && isKeyboardFocus && !isTabbingBackOut.value) {\n const entryFocusEvent = new CustomEvent(ENTRY_FOCUS, EVENT_OPTIONS);\n event.currentTarget.dispatchEvent(entryFocusEvent);\n emits(\"entryFocus\", entryFocusEvent);\n if (!entryFocusEvent.defaultPrevented) {\n const items = getItems().map((i) => i.ref).filter((i) => i.dataset.disabled !== \"\");\n const activeItem = items.find((item) => item.getAttribute(\"data-active\") === \"true\");\n const currentItem = items.find(\n (item) => item.id === currentTabStopId.value\n );\n const candidateItems = [activeItem, currentItem, ...items].filter(\n Boolean\n );\n focusFirst(candidateItems, props.preventScrollOnEntryFocus);\n }\n }\n isClickFocus.value = false;\n }\n function handleMouseUp() {\n setTimeout(() => {\n isClickFocus.value = false;\n }, 1);\n }\n __expose({\n getItems\n });\n provideRovingFocusGroupContext({\n loop,\n dir,\n orientation,\n currentTabStopId,\n onItemFocus: (tabStopId) => {\n currentTabStopId.value = tabStopId;\n },\n onItemShiftTab: () => {\n isTabbingBackOut.value = true;\n },\n onFocusableItemAdd: () => {\n focusableItemsCount.value++;\n },\n onFocusableItemRemove: () => {\n focusableItemsCount.value--;\n }\n });\n return (_ctx, _cache) => {\n return openBlock(), createBlock(unref(CollectionSlot), null, {\n default: withCtx(() => [\n createVNode(unref(Primitive), {\n tabindex: isTabbingBackOut.value || focusableItemsCount.value === 0 ? -1 : 0,\n \"data-orientation\": unref(orientation),\n as: _ctx.as,\n \"as-child\": _ctx.asChild,\n dir: unref(dir),\n style: { \"outline\": \"none\" },\n onMousedown: _cache[0] || (_cache[0] = ($event) => isClickFocus.value = true),\n onMouseup: handleMouseUp,\n onFocus: handleFocus,\n onBlur: _cache[1] || (_cache[1] = ($event) => isTabbingBackOut.value = false)\n }, {\n default: withCtx(() => [\n renderSlot(_ctx.$slots, \"default\")\n ]),\n _: 3\n }, 8, [\"tabindex\", \"data-orientation\", \"as\", \"as-child\", \"dir\"])\n ]),\n _: 3\n });\n };\n }\n});\n\nexport { _sfc_main as _, injectRovingFocusGroupContext as i };\n//# sourceMappingURL=RovingFocusGroup.js.map\n"],"names":["EVENT_OPTIONS","bubbles","cancelable","MAP_KEY_TO_FOCUS_INTENT","ArrowLeft","ArrowUp","ArrowRight","ArrowDown","PageUp","Home","PageDown","End","getFocusIntent","event","orientation","dir","key","getDirectionAwareKey","includes","focusFirst","candidates","preventScroll","PREVIOUSLY_FOCUSED_ELEMENT","getActiveElement","candidate","focus","wrapArray","array","startIndex","map","_","index","length","injectRovingFocusGroupContext","provideRovingFocusGroupContext","createContext","_sfc_main","defineComponent","__name","props","default","loop","type","Boolean","currentTabStopId","defaultCurrentTabStopId","preventScrollOnEntryFocus","asChild","as","emits","setup","__props","expose","__expose","emit","__emit","propDir","toRefs","useDirection","useVModel","defaultValue","passive","isTabbingBackOut","ref","isClickFocus","focusableItemsCount","getItems","CollectionSlot","useCollection","isProvider","handleFocus","isKeyboardFocus","value","currentTarget","target","entryFocusEvent","CustomEvent","dispatchEvent","defaultPrevented","items","i","filter","dataset","disabled","find","item","getAttribute","id","handleMouseUp","setTimeout","onItemFocus","tabStopId","onItemShiftTab","onFocusableItemAdd","onFocusableItemRemove","_ctx","_cache","openBlock","createBlock","unref","withCtx","createVNode","Primitive","tabindex","style","outline","onMousedown","$event","onMouseup","onFocus","onBlur","renderSlot","$slots"],"mappings":"mnBAEA,MACMA,EAAgB,CAAEC,SAAS,EAAOC,YAAY,GAC9CC,EAA0B,CAC9BC,UAAW,OACXC,QAAS,OACTC,WAAY,OACZC,UAAW,OACXC,OAAQ,QACRC,KAAM,QACNC,SAAU,OACVC,IAAK,QAOP,SAASC,EAAeC,EAAOC,EAAaC,GAC1C,MAAMC,EANR,SAA8BA,EAAKD,GACjC,MAAY,QAARA,EACKC,EACM,cAARA,EAAsB,aAAuB,eAARA,EAAuB,YAAcA,CACnF,CAEcC,CAAqBJ,EAAMG,IAAKD,GAC5C,KAAoB,aAAhBD,GAA8B,CAAC,YAAa,cAAcI,SAASF,IAEnD,eAAhBF,GAAgC,CAAC,UAAW,aAAaI,SAASF,IAEtE,OAAOb,EAAwBa,EACjC,CACA,SAASG,EAAWC,EAAYC,GAAgB,GAC9C,MAAMC,EAA6BC,IACnC,IAAA,MAAWC,KAAaJ,EAAY,CAClC,GAAII,IAAcF,EAChB,OAEF,GADUE,EAAAC,MAAM,CAAEJ,kBACdE,MAAuBD,EACzB,MACN,CACA,CACA,SAASI,EAAUC,EAAOC,GACjB,OAAAD,EAAME,KAAI,CAACC,EAAGC,IAAUJ,GAAOC,EAAaG,GAASJ,EAAMK,SACpE,CC/BK,MAAEC,EAA+BC,GAAkCC,EAAc,oBAChFC,EAA4CC,EAAA,CAChDC,OAAQ,mBACRC,MAAO,CACLzB,YAAa,CAAE0B,aAAS,GACxBzB,IAAK,CAAE,EACP0B,KAAM,CAAEC,KAAMC,QAASH,SAAS,GAChCI,iBAAkB,CAAE,EACpBC,wBAAyB,CAAE,EAC3BC,0BAA2B,CAAEJ,KAAMC,QAASH,SAAS,GACrDO,QAAS,CAAEL,KAAMC,SACjBK,GAAI,CAAA,GAENC,MAAO,CAAC,aAAc,2BACtB,KAAAC,CAAMC,GAAWC,OAAQC,EAAUC,KAAMC,IACvC,MAAMhB,EAAQY,EACRF,EAAQM,GACRd,KAAEA,EAAM3B,YAAAA,EAAaC,IAAKyC,GAAYC,EAAOlB,GAC7CxB,EAAM2C,EAAaF,GACnBZ,EAAmBe,EAAUpB,EAAO,mBAAoBU,EAAO,CACnEW,aAAcrB,EAAMM,wBACpBgB,aAAoC,IAA3BtB,EAAMK,mBAEXkB,EAAmBC,GAAI,GACvBC,EAAeD,GAAI,GACnBE,EAAsBF,EAAI,IAC1BG,SAAEA,iBAAUC,GAAmBC,EAAc,CAAEC,YAAY,IACjE,SAASC,EAAYzD,GACb,MAAA0D,GAAmBP,EAAaQ,MAClC,GAAA3D,EAAM4D,eAAiB5D,EAAM6D,SAAW7D,EAAM4D,eAAiBF,IAAoBT,EAAiBU,MAAO,CAC7G,MAAMG,EAAkB,IAAIC,YDpChB,gCCoCyC5E,GAGjD,GAFEa,EAAA4D,cAAcI,cAAcF,GAClC1B,EAAM,aAAc0B,IACfA,EAAgBG,iBAAkB,CACrC,MAAMC,EAAQb,IAAWrC,KAAKmD,GAAMA,EAAEjB,MAAKkB,QAAQD,GAA6B,KAAvBA,EAAEE,QAAQC,WAQxDhE,EAHY,CAJJ4D,EAAMK,MAAMC,GAA8C,SAArCA,EAAKC,aAAa,iBACtCP,EAAMK,MACvBC,GAASA,EAAKE,KAAO3C,EAAiB4B,WAEWO,GAAOE,OACzDtC,SAEyBJ,EAAMO,0BAC3C,CACA,CACMkB,EAAaQ,OAAQ,CAC3B,CACI,SAASgB,IACPC,YAAW,KACTzB,EAAaQ,OAAQ,CAAA,GACpB,EACT,CAsBW,OArBEnB,EAAA,CACPa,aAE6BhC,EAAA,CAC7BO,OACA1B,MACAD,cACA8B,mBACA8C,YAAcC,IACZ/C,EAAiB4B,MAAQmB,CAAA,EAE3BC,eAAgB,KACd9B,EAAiBU,OAAQ,CAAA,EAE3BqB,mBAAoB,KACE5B,EAAAO,OAAA,EAEtBsB,sBAAuB,KACD7B,EAAAO,OAAA,IAGjB,CAACuB,EAAMC,KACLC,IAAaC,EAAYC,EAAMhC,GAAiB,KAAM,CAC3D3B,QAAS4D,GAAQ,IAAM,CACrBC,EAAYF,EAAMG,GAAY,CAC5BC,SAAUzC,EAAiBU,OAAuC,IAA9BP,EAAoBO,OAAmB,EAAA,EAC3E,mBAAoB2B,EAAMrF,GAC1BkC,GAAI+C,EAAK/C,GACT,WAAY+C,EAAKhD,QACjBhC,IAAKoF,EAAMpF,GACXyF,MAAO,CAAEC,QAAW,QACpBC,YAAaV,EAAO,KAAOA,EAAO,GAAMW,GAAW3C,EAAaQ,OAAQ,GACxEoC,UAAWpB,EACXqB,QAASvC,EACTwC,OAAQd,EAAO,KAAOA,EAAO,GAAMW,GAAW7C,EAAiBU,OAAQ,IACtE,CACDhC,QAAS4D,GAAQ,IAAM,CACrBW,EAAWhB,EAAKiB,OAAQ,cAE1BlF,EAAG,GACF,EAAG,CAAC,WAAY,mBAAoB,KAAM,WAAY,WAE3DA,EAAG,IAGX","x_google_ignoreList":[0,1]}