{"version":3,"file":"dist-BhZ2FMkV.cjs","names":["React","React2","createCollection","createContextScope","React","useComposedRefs","useDirection","useControllableState","useCallbackRef","Primitive","composeEventHandlers","useId","useIsHydrated"],"sources":["../node_modules/@radix-ui/react-use-is-hydrated/dist/index.mjs","../node_modules/@radix-ui/react-roving-focus/dist/index.mjs"],"sourcesContent":["// src/use-is-hydrated.tsx\nimport * as React2 from \"react\";\n\n// src/use-is-hydrated-legacy.ts\nimport * as React from \"react\";\nvar _isHydrated = false;\nfunction useIsHydrated() {\n  const [isHydrated, setIsHydrated] = React.useState(_isHydrated);\n  React.useEffect(() => {\n    if (!_isHydrated) {\n      _isHydrated = true;\n      setIsHydrated(true);\n    }\n  }, []);\n  return isHydrated;\n}\n\n// src/use-is-hydrated.tsx\nvar useReactSyncExternalStore = React2[\" useSyncExternalStore \".trim().toString()];\nfunction subscribe() {\n  return () => {\n  };\n}\nfunction useIsHydratedModern() {\n  return useReactSyncExternalStore(\n    subscribe,\n    () => true,\n    () => false\n  );\n}\nvar useIsHydrated2 = typeof useReactSyncExternalStore === \"function\" ? useIsHydratedModern : useIsHydrated;\nexport {\n  useIsHydrated2 as useIsHydrated\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\nvar __defProp = Object.defineProperty;\nvar __name = (target, value) => __defProp(target, \"name\", { value, configurable: true });\n\n// src/roving-focus-group.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { createCollection } from \"@radix-ui/react-collection\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useId } from \"@radix-ui/react-id\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { useDirection } from \"@radix-ui/react-direction\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nimport { useIsHydrated } from \"@radix-ui/react-use-is-hydrated\";\nimport { jsx } from \"react/jsx-runtime\";\nvar ENTRY_FOCUS = \"rovingFocusGroup.onEntryFocus\";\nvar EVENT_OPTIONS = { bubbles: false, cancelable: true };\nvar GROUP_NAME = \"RovingFocusGroup\";\nvar [Collection, useCollection, createCollectionScope] = createCollection(GROUP_NAME);\nvar [createRovingFocusGroupContext, createRovingFocusGroupScope] = createContextScope(\n  GROUP_NAME,\n  [createCollectionScope]\n);\nvar [RovingFocusProvider, useRovingFocusContext] = createRovingFocusGroupContext(GROUP_NAME);\nvar RovingFocusGroup = /* @__PURE__ */ React.forwardRef(\n  // blank line to reduce diff noise\n  /* @__PURE__ */ __name(function RovingFocusGroup2(props, forwardedRef) {\n    return /* @__PURE__ */ jsx(Collection.Provider, { scope: props.__scopeRovingFocusGroup, children: /* @__PURE__ */ jsx(Collection.Slot, { scope: props.__scopeRovingFocusGroup, children: /* @__PURE__ */ jsx(RovingFocusGroupImpl, { ...props, ref: forwardedRef }) }) });\n  }, \"RovingFocusGroup\")\n);\nvar RovingFocusGroupImpl = /* @__PURE__ */ React.forwardRef(/* @__PURE__ */ __name(function RovingFocusGroupImpl2(props, forwardedRef) {\n  const {\n    __scopeRovingFocusGroup,\n    orientation,\n    loop = false,\n    dir,\n    currentTabStopId: currentTabStopIdProp,\n    defaultCurrentTabStopId,\n    onCurrentTabStopIdChange,\n    onEntryFocus,\n    preventScrollOnEntryFocus = false,\n    ...groupProps\n  } = props;\n  const ref = React.useRef(null);\n  const composedRefs = useComposedRefs(forwardedRef, ref);\n  const direction = useDirection(dir);\n  const [currentTabStopId, setCurrentTabStopId] = useControllableState({\n    prop: currentTabStopIdProp,\n    defaultProp: defaultCurrentTabStopId ?? null,\n    onChange: onCurrentTabStopIdChange,\n    caller: GROUP_NAME\n  });\n  const [isTabbingBackOut, setIsTabbingBackOut] = React.useState(false);\n  const handleEntryFocus = useCallbackRef(onEntryFocus);\n  const getItems = useCollection(__scopeRovingFocusGroup);\n  const isClickFocusRef = React.useRef(false);\n  const [focusableItemsCount, setFocusableItemsCount] = React.useState(0);\n  React.useEffect(() => {\n    const node = ref.current;\n    if (node) {\n      node.addEventListener(ENTRY_FOCUS, handleEntryFocus);\n      return () => node.removeEventListener(ENTRY_FOCUS, handleEntryFocus);\n    }\n  }, [handleEntryFocus]);\n  return /* @__PURE__ */ jsx(\n    RovingFocusProvider,\n    {\n      scope: __scopeRovingFocusGroup,\n      orientation,\n      dir: direction,\n      loop,\n      currentTabStopId,\n      onItemFocus: React.useCallback(\n        (tabStopId) => setCurrentTabStopId(tabStopId),\n        [setCurrentTabStopId]\n      ),\n      onItemShiftTab: React.useCallback(() => setIsTabbingBackOut(true), []),\n      onFocusableItemAdd: React.useCallback(\n        () => setFocusableItemsCount((prevCount) => prevCount + 1),\n        []\n      ),\n      onFocusableItemRemove: React.useCallback(\n        () => setFocusableItemsCount((prevCount) => prevCount - 1),\n        []\n      ),\n      children: /* @__PURE__ */ jsx(\n        Primitive.div,\n        {\n          tabIndex: isTabbingBackOut || focusableItemsCount === 0 ? -1 : 0,\n          \"data-orientation\": orientation,\n          ...groupProps,\n          ref: composedRefs,\n          style: { outline: \"none\", ...props.style },\n          onMouseDown: composeEventHandlers(props.onMouseDown, () => {\n            isClickFocusRef.current = true;\n          }),\n          onFocus: composeEventHandlers(props.onFocus, (event) => {\n            const isKeyboardFocus = !isClickFocusRef.current;\n            if (event.target === event.currentTarget && isKeyboardFocus && !isTabbingBackOut) {\n              const entryFocusEvent = new CustomEvent(ENTRY_FOCUS, EVENT_OPTIONS);\n              event.currentTarget.dispatchEvent(entryFocusEvent);\n              if (!entryFocusEvent.defaultPrevented) {\n                const items = getItems().filter((item) => item.focusable);\n                const activeItem = items.find((item) => item.active);\n                const currentItem = items.find((item) => item.id === currentTabStopId);\n                const candidateItems = [activeItem, currentItem, ...items].filter(\n                  Boolean\n                );\n                const candidateNodes = candidateItems.map((item) => item.ref.current);\n                focusFirst(candidateNodes, preventScrollOnEntryFocus);\n              }\n            }\n            isClickFocusRef.current = false;\n          }),\n          onBlur: composeEventHandlers(props.onBlur, () => setIsTabbingBackOut(false))\n        }\n      )\n    }\n  );\n}, \"RovingFocusGroupImpl\"));\nvar ITEM_NAME = \"RovingFocusGroupItem\";\nvar RovingFocusGroupItem = /* @__PURE__ */ React.forwardRef(\n  // blank line to reduce diff noise\n  /* @__PURE__ */ __name(function RovingFocusGroupItem2(props, forwardedRef) {\n    const {\n      __scopeRovingFocusGroup,\n      focusable = true,\n      active = false,\n      tabStopId,\n      children,\n      ...itemProps\n    } = props;\n    const autoId = useId();\n    const id = tabStopId || autoId;\n    const context = useRovingFocusContext(ITEM_NAME, __scopeRovingFocusGroup);\n    const isCurrentTabStop = context.currentTabStopId === id;\n    const getItems = useCollection(__scopeRovingFocusGroup);\n    const { onFocusableItemAdd, onFocusableItemRemove, currentTabStopId } = context;\n    const isHydrated = useIsHydrated();\n    useLayoutEffect(() => {\n      if (!isHydrated || !focusable) {\n        return;\n      }\n      onFocusableItemAdd();\n      return () => onFocusableItemRemove();\n    }, [isHydrated, focusable, onFocusableItemAdd, onFocusableItemRemove]);\n    React.useEffect(() => {\n      if (isHydrated || !focusable) {\n        return;\n      }\n      onFocusableItemAdd();\n      return () => onFocusableItemRemove();\n    }, [isHydrated, focusable, onFocusableItemAdd, onFocusableItemRemove]);\n    return /* @__PURE__ */ jsx(\n      Collection.ItemSlot,\n      {\n        scope: __scopeRovingFocusGroup,\n        id,\n        focusable,\n        active,\n        children: /* @__PURE__ */ jsx(\n          Primitive.span,\n          {\n            tabIndex: isCurrentTabStop ? 0 : -1,\n            \"data-orientation\": context.orientation,\n            ...itemProps,\n            ref: forwardedRef,\n            onMouseDown: composeEventHandlers(props.onMouseDown, (event) => {\n              if (!focusable) event.preventDefault();\n              else context.onItemFocus(id);\n            }),\n            onFocus: composeEventHandlers(props.onFocus, () => context.onItemFocus(id)),\n            onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {\n              if (event.key === \"Tab\" && event.shiftKey) {\n                context.onItemShiftTab();\n                return;\n              }\n              if (event.target !== event.currentTarget) return;\n              const focusIntent = getFocusIntent(event, context.orientation, context.dir);\n              if (focusIntent !== void 0) {\n                if (event.metaKey || event.ctrlKey || event.altKey || event.shiftKey) return;\n                event.preventDefault();\n                const items = getItems().filter((item) => item.focusable);\n                let candidateNodes = items.map((item) => item.ref.current);\n                if (focusIntent === \"last\") candidateNodes.reverse();\n                else if (focusIntent === \"prev\" || focusIntent === \"next\") {\n                  if (focusIntent === \"prev\") candidateNodes.reverse();\n                  const currentIndex = candidateNodes.indexOf(event.currentTarget);\n                  candidateNodes = context.loop ? wrapArray(candidateNodes, currentIndex + 1) : candidateNodes.slice(currentIndex + 1);\n                }\n                setTimeout(() => focusFirst(candidateNodes));\n              }\n            }),\n            children: typeof children === \"function\" ? children({ isCurrentTabStop, hasTabStop: currentTabStopId != null }) : children\n          }\n        )\n      }\n    );\n  }, \"RovingFocusGroupItem\")\n);\nvar 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\") return key;\n  return key === \"ArrowLeft\" ? \"ArrowRight\" : key === \"ArrowRight\" ? \"ArrowLeft\" : key;\n}\n__name(getDirectionAwareKey, \"getDirectionAwareKey\");\nfunction getFocusIntent(event, orientation, dir) {\n  const key = getDirectionAwareKey(event.key, dir);\n  if (orientation === \"vertical\" && [\"ArrowLeft\", \"ArrowRight\"].includes(key)) return void 0;\n  if (orientation === \"horizontal\" && [\"ArrowUp\", \"ArrowDown\"].includes(key)) return void 0;\n  return MAP_KEY_TO_FOCUS_INTENT[key];\n}\n__name(getFocusIntent, \"getFocusIntent\");\nfunction focusFirst(candidates, preventScroll = false) {\n  const PREVIOUSLY_FOCUSED_ELEMENT = document.activeElement;\n  for (const candidate of candidates) {\n    if (candidate === PREVIOUSLY_FOCUSED_ELEMENT) return;\n    candidate.focus({ preventScroll });\n    if (document.activeElement !== PREVIOUSLY_FOCUSED_ELEMENT) return;\n  }\n}\n__name(focusFirst, \"focusFirst\");\nfunction wrapArray(array, startIndex) {\n  return array.map((_, index) => array[(startIndex + index) % array.length]);\n}\n__name(wrapArray, \"wrapArray\");\nvar Root = RovingFocusGroup;\nvar Item = RovingFocusGroupItem;\nexport {\n  Item,\n  Root,\n  RovingFocusGroup,\n  RovingFocusGroupItem,\n  createRovingFocusGroupScope\n};\n//# sourceMappingURL=index.mjs.map\n"],"x_google_ignoreList":[0,1],"mappings":"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"}