{"version":3,"file":"dropdown-menu-DPA36icH.mjs","names":["createContext","useContext","UseDropdownMenuReturn","DropdownMenuContext","useDropdownMenuContext","context","Error","RefObject","useCallback","useMemo","useRef","useState","UseDropdownMenuOptions","autoUpdate","flip","offset","shift","useClick","useDismiss","useFloating","UseFloatingReturn","useInteractions","UseInteractionsReturn","useListNavigation","useRole","useTypeahead","ThemeBaseColor","arrowWidth","UseDropdownMenuReturn","open","setOpen","elementsRef","HTMLElement","labelsRef","color","modal","activeIndex","handleSelect","presentation","useDropdownMenu","t0","$","_c","initialOpen","t1","placement","t2","controlledOpen","onOpen","setControlledOpen","t3","t4","undefined","uncontrolledOpen","setUncontrolledOpen","isUncontrolled","setActiveIndex","t5","Symbol","for","t6","offsetVal","t7","padding","t8","onOpenChange","whileElementsMounted","middleware","data","context","t9","click","dismiss","role","t10","listRef","onNavigate","loop","listNav","t11","t12","handleTypeaheadMatch","index","t13","onMatch","typeahead","t14","interactions","t15","ReactNode","RefObject","DropdownMenuContext","useDropdownMenu","ComponentProps","FloatingFocusManager","FloatingList","FloatingPortal","useMergeRefs","clsx","Dialog","Slot","UseDropdownMenuOptions","DropdownMenuProps","trigger","ref","HTMLDivElement","listClassName","DropdownMenu","initialOpen","placement","open","onOpen","color","modal","presentation","style","className","children","props","options","popover","floatingContext","context","mergedRef","refs","setFloating","setReference","getReferenceProps","floatingStyles","getFloatingProps","elementsRef","labelsRef","useListItem","clsx","useDropdownMenuContext","ComponentProps","MouseEvent","ReactNode","Slot","Props","children","asChild","DropdownMenuItem","t0","$","_c","className","onClick","type","t1","rest","undefined","activeIndex","getItemProps","handleSelect","presentation","t2","toString","t3","label","ref","index","isActive","Comp","t4","t5","t6","t7","t8","e","defaultPrevented","t9","t10"],"sources":["../src/components/dropdown-menu/useDropdownMenuContext.ts","../src/components/dropdown-menu/useDropdownMenu.ts","../src/components/dropdown-menu/DropdownMenu.tsx","../src/components/dropdown-menu/DropdownMenuItem.tsx"],"sourcesContent":["import { createContext, useContext } from \"react\";\nimport { UseDropdownMenuReturn } from \"./useDropdownMenu\";\n\nexport const DropdownMenuContext = createContext<UseDropdownMenuReturn | null>(null);\n\nexport function useDropdownMenuContext(): UseDropdownMenuReturn {\n  const context = useContext(DropdownMenuContext);\n\n  if (context === null) {\n    throw new Error(\"DropdownMenu components must be wrapped in <DropdownMenu />\");\n  }\n\n  return context;\n}\n","import { RefObject, useCallback, useMemo, useRef, useState } from \"react\";\nimport type { UseDropdownMenuOptions } from \"./interface\";\nimport {\n  autoUpdate,\n  flip,\n  offset,\n  shift,\n  useClick,\n  useDismiss,\n  useFloating,\n  UseFloatingReturn,\n  useInteractions,\n  UseInteractionsReturn,\n  useListNavigation,\n  useRole,\n  useTypeahead,\n} from \"@floating-ui/react\";\nimport { ThemeBaseColor } from \"../../types\";\n\nconst arrowWidth = 12;\n\nexport type UseDropdownMenuReturn = {\n  open: boolean;\n  setOpen: (open: boolean) => void;\n  elementsRef: RefObject<(HTMLElement | null)[]>;\n  labelsRef: RefObject<(string | null)[]>;\n  color?: ThemeBaseColor;\n  modal: boolean;\n  activeIndex: number | null;\n  handleSelect: () => void;\n  presentation: \"compact\" | \"large\";\n} & UseInteractionsReturn &\n  UseFloatingReturn;\n\nexport function useDropdownMenu({\n  initialOpen = false,\n  placement = \"bottom\",\n  open: controlledOpen,\n  onOpen: setControlledOpen,\n  color,\n  modal = false,\n  presentation = \"large\",\n}: UseDropdownMenuOptions): UseDropdownMenuReturn {\n  const [uncontrolledOpen, setUncontrolledOpen] = useState(initialOpen);\n\n  const isUncontrolled = controlledOpen === null || controlledOpen === undefined;\n  const open = isUncontrolled ? uncontrolledOpen : controlledOpen;\n  const setOpen = isUncontrolled ? setUncontrolledOpen : setControlledOpen!;\n\n  const [activeIndex, setActiveIndex] = useState<number | null>(null);\n\n  const elementsRef = useRef<Array<HTMLElement | null>>([]);\n  const labelsRef = useRef<Array<string | null>>([]);\n\n  const offsetVal = 2 + arrowWidth / 2;\n\n  const data = useFloating({\n    placement,\n    open,\n    onOpenChange: setOpen,\n    whileElementsMounted: autoUpdate,\n    middleware: [\n      offset(offsetVal),\n      flip({\n        // crossAxis: placement.includes('-'),\n        // fallbackAxisSideDirection: \"end\",\n      }),\n      shift({ padding: 5 }),\n    ],\n  });\n\n  const { context } = data;\n\n  const click = useClick(context, {\n    // TODO verify if use case to disable it\n    // enabled: isUncontrolled,\n  });\n  const dismiss = useDismiss(context);\n  const role = useRole(context);\n  const listNav = useListNavigation(context, {\n    listRef: elementsRef,\n    activeIndex,\n    onNavigate: setActiveIndex,\n    loop: true,\n  });\n\n  const handleSelect = useCallback(() => {\n    setOpen(false);\n  }, [setOpen]);\n\n  function handleTypeaheadMatch(index: number | null) {\n    if (open) {\n      setActiveIndex(index);\n    } else {\n      handleSelect();\n    }\n  }\n\n  const typeahead = useTypeahead(context, {\n    listRef: labelsRef,\n    activeIndex,\n    onMatch: handleTypeaheadMatch,\n  });\n\n  const interactions = useInteractions([click, dismiss, role, listNav, typeahead]);\n\n  return useMemo(\n    () => ({\n      open,\n      setOpen,\n      ...interactions,\n      ...data,\n      elementsRef,\n      labelsRef,\n      color,\n      modal,\n      activeIndex,\n      handleSelect,\n      presentation,\n    }),\n    [\n      open,\n      setOpen,\n      interactions,\n      data,\n      color,\n      modal,\n      activeIndex,\n      // getItemProps,\n      handleSelect,\n      presentation,\n    ],\n  );\n}\n","import { ReactNode, RefObject } from \"react\";\nimport { DropdownMenuContext } from \"./useDropdownMenuContext\";\nimport { useDropdownMenu } from \"./useDropdownMenu\";\nimport { ComponentProps } from \"react\";\nimport {\n  FloatingFocusManager,\n  FloatingList,\n  FloatingPortal,\n  useMergeRefs,\n} from \"@floating-ui/react\";\nimport clsx from \"clsx\";\nimport { Dialog } from \"../dialog\";\nimport { Slot } from \"../slot\";\nimport { UseDropdownMenuOptions } from \"./interface\";\n\ntype DropdownMenuProps = ComponentProps<\"div\"> &\n  UseDropdownMenuOptions & {\n    trigger: ReactNode;\n    ref?: RefObject<HTMLDivElement>;\n    listClassName?: string;\n  };\n\nexport const DropdownMenu = ({\n  // options\n  trigger,\n  initialOpen,\n  placement,\n  open,\n  onOpen,\n  color,\n  modal,\n  presentation,\n\n  // ComponentProps\n  style,\n  className,\n  listClassName,\n  children,\n  ref,\n  ...props\n}: DropdownMenuProps) => {\n  const options = { initialOpen, placement, open, onOpen, color, modal, presentation };\n  const popover = useDropdownMenu(options);\n  const floatingContext = popover.context;\n\n  const mergedRef = useMergeRefs([popover.refs.setFloating, ref]);\n\n  return (\n    <DropdownMenuContext.Provider value={popover}>\n      <Slot\n        ref={popover.refs.setReference}\n        data-state={popover.open ? \"open\" : \"closed\"}\n        {...popover.getReferenceProps()}\n      >\n        {trigger}\n      </Slot>\n      {popover.open && (\n        <FloatingPortal>\n          <FloatingFocusManager context={floatingContext} modal={popover.modal}>\n            <div\n              ref={mergedRef}\n              className={clsx(\"z-dialog outline-hidden\", className)}\n              style={{ ...popover.floatingStyles, ...style }}\n              {...popover.getFloatingProps(props)}\n            >\n              <Dialog\n                placement={popover.placement}\n                color={popover.color}\n                className={clsx(\n                  \"motion-safe:animate-fade-in\",\n                  popover.presentation === \"large\" && \"p-1\",\n                )}\n              >\n                <div className={clsx(\"box\", listClassName)}>\n                  <FloatingList elementsRef={popover.elementsRef} labelsRef={popover.labelsRef}>\n                    {children}\n                  </FloatingList>\n                </div>\n              </Dialog>\n            </div>\n          </FloatingFocusManager>\n        </FloatingPortal>\n      )}\n    </DropdownMenuContext.Provider>\n  );\n};\n","import { useListItem } from \"@floating-ui/react\";\nimport clsx from \"clsx\";\nimport { useDropdownMenuContext } from \"./useDropdownMenuContext\";\nimport { ComponentProps, MouseEvent, ReactNode } from \"react\";\nimport { Slot } from \"../slot\";\n\ninterface Props extends ComponentProps<\"button\"> {\n  children: ReactNode;\n  asChild?: boolean;\n}\n\nexport function DropdownMenuItem({\n  children,\n  className,\n  onClick,\n  type,\n  asChild = false,\n  ...rest\n}: Props) {\n  const { activeIndex, getItemProps, handleSelect, presentation } = useDropdownMenuContext();\n\n  const { ref, index } = useListItem({ label: children?.toString() });\n  const isActive = activeIndex === index;\n\n  const Comp = asChild ? Slot : \"button\";\n\n  return (\n    <Comp\n      className={clsx(\"option\", isActive && \"bg-gray-1\", className)}\n      ref={ref}\n      role=\"menuitem\"\n      data-presentation={presentation}\n      aria-selected={isActive}\n      tabIndex={isActive ? 0 : -1}\n      {...getItemProps({\n        ...rest,\n        onClick: (e: MouseEvent<HTMLButtonElement>) => {\n          onClick?.(e);\n          if (type !== \"submit\" && !e.defaultPrevented) {\n            handleSelect();\n          }\n        },\n      })}\n    >\n      {children}\n    </Comp>\n  );\n}\n"],"mappings":"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"}