{"version":3,"names":["dynamic","createMemo","omit","useBaseUiId","createChangeEventDetails","REASONS","composeRefs","userRef","useCompositeListItem","useFloatingParentNodeId","mergeRootProps","resolveClassStyle","useButton","useMenuRootContext","createItemHoverEmitter","MenuItem","props","root","emitItemHover","fallbackId","id","disabled","Boolean","closeOnClick","nativeButton","listItem","label","highlighted","activeIndex","index","buttonProps","ref","buttonRef","focusableWhenDisabled","native","composite","state","internal","role","tabindex","onKeyDown","event","key","typingRef","current","preventDefault","onMouseMove","onClick","setOpen","itemPress","data-highlighted","undefined","data-disabled","userClassStyle","userProps","merged","interactions","getItemProps","Tag","as"],"sources":["menu-item.tsx"],"sourcesContent":["import type { JSX, ValidComponent } from \"@solidjs/web\";\n/**\n * `<Menu.Item>` — an activatable menu option. Solid 2 port of Base UI\n * React's `MenuItem` / `useMenuItem`.\n *\n * Registers with the enclosing `<CompositeList>` (mounted by the\n * positioner) so `useListNavigation` + `useTypeahead` can target it.\n * `role=\"menuitem\"` by default. Closes the menu on click (unless\n * `closeOnClick={false}`).\n */\n\nimport { dynamic } from \"@solidjs/web\";\nimport { createMemo, omit } from \"solid-js\";\nimport { useBaseUiId } from \"../../internals/base-ui-id\";\nimport {\n\tcreateChangeEventDetails,\n\tREASONS,\n} from \"../../internals/change-event-details\";\nimport { composeRefs, userRef } from \"../../internals/compose-refs\";\nimport { useCompositeListItem } from \"../../internals/composite/composite-list\";\nimport { useFloatingParentNodeId } from \"../../internals/floating-ui/components/floating-tree\";\nimport { mergeRootProps } from \"../../internals/merge-root-props\";\nimport { resolveClassStyle } from \"../../internals/resolve-class-style\";\nimport type {\n\tBaseUIComponentProps,\n\tNonNativeButtonProps,\n} from \"../../internals/types\";\nimport { useButton } from \"../../internals/use-button/use-button\";\nimport { useMenuRootContext } from \"../root/menu-root-context\";\nimport { createItemHoverEmitter } from \"../utils/item-hover\";\n\nexport interface MenuItemState {\n\t/** Whether the item should ignore user interaction. */\n\tdisabled: boolean;\n\t/** Whether the item is currently highlighted (focus-visible). */\n\thighlighted: boolean;\n}\n\nexport interface MenuItemProps\n\textends NonNativeButtonProps,\n\t\tOmit<BaseUIComponentProps<\"div\", MenuItemState>, \"id\"> {\n\t/**\n\t * Tag/component to render. Defaults to `\"div\"`. Replaces the\n\t * pre-spike `render` prop (axis G).\n\t */\n\tas?: ValidComponent;\n\tid?: string | undefined;\n\t/** Text label used for typeahead matching. */\n\tlabel?: string | undefined;\n\t/** Whether the item should ignore user interaction. @default false */\n\tdisabled?: boolean | undefined;\n\t/** Whether to close the menu on click. @default true */\n\tcloseOnClick?: boolean | undefined;\n}\n\nexport function MenuItem(props: MenuItemProps): JSX.Element {\n\tconst root = useMenuRootContext();\n\tconst emitItemHover = createItemHoverEmitter(root, useFloatingParentNodeId());\n\tconst fallbackId = useBaseUiId();\n\tconst id = (): string | undefined =>\n\t\ttypeof props.id === \"string\" ? props.id : fallbackId;\n\n\tconst disabled = (): boolean => Boolean(props.disabled);\n\tconst closeOnClick = (): boolean => props.closeOnClick ?? true;\n\tconst nativeButton = (): boolean => props.nativeButton ?? false;\n\n\tconst listItem = useCompositeListItem({ label: props.label });\n\n\tconst highlighted = createMemo<boolean>(\n\t\t() => root.activeIndex() === listItem.index(),\n\t);\n\n\tconst { props: buttonProps, ref: buttonRef } = useButton({\n\t\tdisabled,\n\t\tfocusableWhenDisabled: () => true,\n\t\tnative: nativeButton,\n\t\tcomposite: () => true,\n\t});\n\n\tconst state = createMemo<MenuItemState>(() => ({\n\t\tdisabled: disabled(),\n\t\thighlighted: highlighted(),\n\t}));\n\n\tconst internal = {\n\t\tget id() {\n\t\t\treturn id();\n\t\t},\n\t\trole: \"menuitem\",\n\t\tget tabindex() {\n\t\t\treturn highlighted() ? 0 : -1;\n\t\t},\n\t\tonKeyDown(event: KeyboardEvent) {\n\t\t\tif (event.key === \" \" && root.typingRef.current) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t},\n\t\tonMouseMove: emitItemHover,\n\t\tonClick(event: MouseEvent) {\n\t\t\tif (disabled()) return;\n\t\t\tif (closeOnClick()) {\n\t\t\t\troot.setOpen(false, createChangeEventDetails(REASONS.itemPress, event));\n\t\t\t}\n\t\t},\n\t\tget \"data-highlighted\"() {\n\t\t\treturn state().highlighted ? \"\" : undefined;\n\t\t},\n\t\tget \"data-disabled\"() {\n\t\t\treturn state().disabled ? \"\" : undefined;\n\t\t},\n\t};\n\n\tconst userClassStyle = resolveClassStyle(props, () => state());\n\n\tconst userProps = omit(\n\t\tprops,\n\t\t\"as\",\n\t\t\"class\",\n\t\t\"style\",\n\t\t\"attrs\",\n\n\t\t\"id\",\n\t\t\"label\",\n\t\t\"disabled\",\n\t\t\"closeOnClick\",\n\t\t\"nativeButton\",\n\t);\n\n\tlet merged: Record<string, unknown> = mergeRootProps(\n\t\troot.interactions.getItemProps(),\n\t\tbuttonProps,\n\t);\n\tmerged = mergeRootProps(merged, internal);\n\tmerged = mergeRootProps(merged, userClassStyle);\n\tmerged = mergeRootProps(merged, userProps);\n\n\tconst Tag = dynamic(() => props.as ?? \"div\");\n\treturn (\n\t\t<Tag\n\t\t\t{...merged}\n\t\t\tref={composeRefs(buttonRef, listItem.ref, userRef(props))}\n\t\t/>\n\t);\n}\n"],"mappings":"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","ignoreList":[]}