tmex-cli 0.5.0 → 0.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/resources/fe-dist/assets/{DevicePage-c0xvFVOR.js → DevicePage-CQuQ0yeD.js} +5 -5
- package/resources/fe-dist/assets/DevicePage-CQuQ0yeD.js.map +1 -0
- package/resources/fe-dist/assets/{DevicesPage-Bos2klmd.js → DevicesPage-_g8yXgKX.js} +2 -2
- package/resources/fe-dist/assets/{DevicesPage-Bos2klmd.js.map → DevicesPage-_g8yXgKX.js.map} +1 -1
- package/resources/fe-dist/assets/{SettingsPage-3wTqyDjG.js → SettingsPage-Bi8Kez5a.js} +2 -2
- package/resources/fe-dist/assets/{SettingsPage-3wTqyDjG.js.map → SettingsPage-Bi8Kez5a.js.map} +1 -1
- package/resources/fe-dist/assets/{index-Ct9A2pvj.js → index-kXpemMRY.js} +3 -3
- package/resources/fe-dist/assets/{index-Ct9A2pvj.js.map → index-kXpemMRY.js.map} +1 -1
- package/resources/fe-dist/assets/{select-C4GOQfW-.js → select-v4N0NzCz.js} +2 -2
- package/resources/fe-dist/assets/{select-C4GOQfW-.js.map → select-v4N0NzCz.js.map} +1 -1
- package/resources/fe-dist/assets/{switch-B99WcFEc.js → switch-BJu9baQM.js} +2 -2
- package/resources/fe-dist/assets/{switch-B99WcFEc.js.map → switch-BJu9baQM.js.map} +1 -1
- package/resources/fe-dist/assets/{useValueChanged-C4_y3Agi.js → useValueChanged-D47LrxaP.js} +2 -2
- package/resources/fe-dist/assets/{useValueChanged-C4_y3Agi.js.map → useValueChanged-D47LrxaP.js.map} +1 -1
- package/resources/fe-dist/index.html +1 -1
- package/resources/fe-dist/assets/DevicePage-c0xvFVOR.js.map +0 -1
package/resources/fe-dist/assets/{DevicesPage-Bos2klmd.js.map → DevicesPage-_g8yXgKX.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DevicesPage-Bos2klmd.js","sources":["../../../../node_modules/.bun/lucide-react@0.564.0+b1ab299f0a400331/node_modules/lucide-react/dist/esm/icons/ellipsis.js","../../../../node_modules/.bun/lucide-react@0.564.0+b1ab299f0a400331/node_modules/lucide-react/dist/esm/icons/pencil.js","../../../../node_modules/.bun/lucide-react@0.564.0+b1ab299f0a400331/node_modules/lucide-react/dist/esm/icons/zap.js","../../src/components/ui/dialog.tsx","../../../../node_modules/.bun/@base-ui+react@1.2.0+ca9c98c9db1b76d1/node_modules/@base-ui/react/esm/menu/positioner/MenuPositionerContext.js","../../../../node_modules/.bun/@base-ui+react@1.2.0+ca9c98c9db1b76d1/node_modules/@base-ui/react/esm/menu/root/MenuRootContext.js","../../../../node_modules/.bun/@base-ui+react@1.2.0+ca9c98c9db1b76d1/node_modules/@base-ui/react/esm/context-menu/root/ContextMenuRootContext.js","../../../../node_modules/.bun/@base-ui+react@1.2.0+ca9c98c9db1b76d1/node_modules/@base-ui/react/esm/menu/item/useMenuItemCommonProps.js","../../../../node_modules/.bun/@base-ui+react@1.2.0+ca9c98c9db1b76d1/node_modules/@base-ui/react/esm/menu/item/useMenuItem.js","../../../../node_modules/.bun/@base-ui+react@1.2.0+ca9c98c9db1b76d1/node_modules/@base-ui/react/esm/menu/item/MenuItem.js","../../../../node_modules/.bun/@base-ui+react@1.2.0+ca9c98c9db1b76d1/node_modules/@base-ui/react/esm/menu/popup/MenuPopup.js","../../../../node_modules/.bun/@base-ui+react@1.2.0+ca9c98c9db1b76d1/node_modules/@base-ui/react/esm/menu/portal/MenuPortalContext.js","../../../../node_modules/.bun/@base-ui+react@1.2.0+ca9c98c9db1b76d1/node_modules/@base-ui/react/esm/menu/portal/MenuPortal.js","../../../../node_modules/.bun/@base-ui+react@1.2.0+ca9c98c9db1b76d1/node_modules/@base-ui/react/esm/menu/positioner/MenuPositioner.js","../../../../node_modules/.bun/@base-ui+react@1.2.0+ca9c98c9db1b76d1/node_modules/@base-ui/react/esm/menubar/MenubarContext.js","../../../../node_modules/.bun/@base-ui+react@1.2.0+ca9c98c9db1b76d1/node_modules/@base-ui/react/esm/menu/store/MenuStore.js","../../../../node_modules/.bun/@base-ui+react@1.2.0+ca9c98c9db1b76d1/node_modules/@base-ui/react/esm/menu/submenu-root/MenuSubmenuRootContext.js","../../../../node_modules/.bun/@base-ui+react@1.2.0+ca9c98c9db1b76d1/node_modules/@base-ui/react/esm/menu/root/MenuRoot.js","../../../../node_modules/.bun/@base-ui+react@1.2.0+ca9c98c9db1b76d1/node_modules/@base-ui/react/esm/composite/item/useCompositeItem.js","../../../../node_modules/.bun/@base-ui+react@1.2.0+ca9c98c9db1b76d1/node_modules/@base-ui/react/esm/composite/item/CompositeItem.js","../../../../node_modules/.bun/@base-ui+react@1.2.0+ca9c98c9db1b76d1/node_modules/@base-ui/react/esm/menu/utils/findRootOwnerId.js","../../../../node_modules/.bun/@base-ui+react@1.2.0+ca9c98c9db1b76d1/node_modules/@base-ui/react/esm/utils/useMixedToggleClickHandler.js","../../../../node_modules/.bun/@base-ui+react@1.2.0+ca9c98c9db1b76d1/node_modules/@base-ui/react/esm/menu/trigger/MenuTrigger.js","../../src/components/ui/dropdown-menu.tsx","../../src/components/ui/textarea.tsx","../../src/pages/DevicesPage.tsx"],"sourcesContent":["/**\n * @license lucide-react v0.564.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"1\", key: \"41hilf\" }],\n [\"circle\", { cx: \"19\", cy: \"12\", r: \"1\", key: \"1wjl8i\" }],\n [\"circle\", { cx: \"5\", cy: \"12\", r: \"1\", key: \"1pcz8c\" }]\n];\nconst Ellipsis = createLucideIcon(\"ellipsis\", __iconNode);\n\nexport { __iconNode, Ellipsis as default };\n//# sourceMappingURL=ellipsis.js.map\n","/**\n * @license lucide-react v0.564.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z\",\n key: \"1a8usu\"\n }\n ],\n [\"path\", { d: \"m15 5 4 4\", key: \"1mk7zo\" }]\n];\nconst Pencil = createLucideIcon(\"pencil\", __iconNode);\n\nexport { __iconNode, Pencil as default };\n//# sourceMappingURL=pencil.js.map\n","/**\n * @license lucide-react v0.564.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z\",\n key: \"1xq2db\"\n }\n ]\n];\nconst Zap = createLucideIcon(\"zap\", __iconNode);\n\nexport { __iconNode, Zap as default };\n//# sourceMappingURL=zap.js.map\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Dialog as DialogPrimitive } from \"@base-ui/react/dialog\"\n\nimport { cn } from \"@/lib/utils\"\nimport { Button } from \"@/components/ui/button\"\nimport { XIcon } from \"lucide-react\"\n\nfunction Dialog({ ...props }: DialogPrimitive.Root.Props) {\n return <DialogPrimitive.Root data-slot=\"dialog\" {...props} />\n}\n\nfunction DialogTrigger({ ...props }: DialogPrimitive.Trigger.Props) {\n return <DialogPrimitive.Trigger data-slot=\"dialog-trigger\" {...props} />\n}\n\nfunction DialogPortal({ ...props }: DialogPrimitive.Portal.Props) {\n return <DialogPrimitive.Portal data-slot=\"dialog-portal\" {...props} />\n}\n\nfunction DialogClose({ ...props }: DialogPrimitive.Close.Props) {\n return <DialogPrimitive.Close data-slot=\"dialog-close\" {...props} />\n}\n\nfunction DialogOverlay({\n className,\n ...props\n}: DialogPrimitive.Backdrop.Props) {\n return (\n <DialogPrimitive.Backdrop\n data-slot=\"dialog-overlay\"\n className={cn(\"data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 bg-black/10 duration-100 supports-backdrop-filter:backdrop-blur-xs fixed inset-0 isolate z-50\", className)}\n {...props}\n />\n )\n}\n\nfunction DialogContent({\n className,\n children,\n showCloseButton = true,\n ...props\n}: DialogPrimitive.Popup.Props & {\n showCloseButton?: boolean\n}) {\n return (\n <DialogPortal>\n <DialogOverlay />\n <DialogPrimitive.Popup\n data-slot=\"dialog-content\"\n className={cn(\n \"bg-background data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 ring-foreground/10 grid max-w-[calc(100%-2rem)] gap-4 rounded-xl p-4 text-sm ring-1 duration-100 sm:max-w-sm fixed top-1/2 left-1/2 z-50 w-full -translate-x-1/2 -translate-y-1/2 outline-none\",\n className\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <DialogPrimitive.Close\n data-slot=\"dialog-close\"\n render={\n <Button\n variant=\"ghost\"\n className=\"absolute top-2 right-2\"\n size=\"icon-sm\"\n />\n }\n >\n <XIcon\n />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n )}\n </DialogPrimitive.Popup>\n </DialogPortal>\n )\n}\n\nfunction DialogHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"dialog-header\"\n className={cn(\"gap-2 flex flex-col\", className)}\n {...props}\n />\n )\n}\n\nfunction DialogFooter({\n className,\n showCloseButton = false,\n children,\n ...props\n}: React.ComponentProps<\"div\"> & {\n showCloseButton?: boolean\n}) {\n return (\n <div\n data-slot=\"dialog-footer\"\n className={cn(\n \"bg-muted/50 -mx-4 -mb-4 rounded-b-xl border-t p-4 flex flex-col-reverse gap-2 sm:flex-row sm:justify-end\",\n className\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <DialogPrimitive.Close render={<Button variant=\"outline\" />}>\n Close\n </DialogPrimitive.Close>\n )}\n </div>\n )\n}\n\nfunction DialogTitle({ className, ...props }: DialogPrimitive.Title.Props) {\n return (\n <DialogPrimitive.Title\n data-slot=\"dialog-title\"\n className={cn(\"text-base leading-none font-medium\", className)}\n {...props}\n />\n )\n}\n\nfunction DialogDescription({\n className,\n ...props\n}: DialogPrimitive.Description.Props) {\n return (\n <DialogPrimitive.Description\n data-slot=\"dialog-description\"\n className={cn(\"text-muted-foreground *:[a]:hover:text-foreground text-sm *:[a]:underline *:[a]:underline-offset-3\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n}\n","'use client';\n\nimport _formatErrorMessage from \"@base-ui/utils/formatErrorMessage\";\nimport * as React from 'react';\nexport const MenuPositionerContext = /*#__PURE__*/React.createContext(undefined);\nif (process.env.NODE_ENV !== \"production\") MenuPositionerContext.displayName = \"MenuPositionerContext\";\nexport function useMenuPositionerContext(optional) {\n const context = React.useContext(MenuPositionerContext);\n if (context === undefined && !optional) {\n throw new Error(process.env.NODE_ENV !== \"production\" ? 'Base UI: MenuPositionerContext is missing. MenuPositioner parts must be placed within <Menu.Positioner>.' : _formatErrorMessage(33));\n }\n return context;\n}","'use client';\n\nimport _formatErrorMessage from \"@base-ui/utils/formatErrorMessage\";\nimport * as React from 'react';\nexport const MenuRootContext = /*#__PURE__*/React.createContext(undefined);\nif (process.env.NODE_ENV !== \"production\") MenuRootContext.displayName = \"MenuRootContext\";\nexport function useMenuRootContext(optional) {\n const context = React.useContext(MenuRootContext);\n if (context === undefined && !optional) {\n throw new Error(process.env.NODE_ENV !== \"production\" ? 'Base UI: MenuRootContext is missing. Menu parts must be placed within <Menu.Root>.' : _formatErrorMessage(36));\n }\n return context;\n}","'use client';\n\nimport _formatErrorMessage from \"@base-ui/utils/formatErrorMessage\";\nimport * as React from 'react';\nexport const ContextMenuRootContext = /*#__PURE__*/React.createContext(undefined);\nif (process.env.NODE_ENV !== \"production\") ContextMenuRootContext.displayName = \"ContextMenuRootContext\";\nexport function useContextMenuRootContext(optional = true) {\n const context = React.useContext(ContextMenuRootContext);\n if (context === undefined && !optional) {\n throw new Error(process.env.NODE_ENV !== \"production\" ? 'Base UI: ContextMenuRootContext is missing. ContextMenu parts must be placed within <ContextMenu.Root>.' : _formatErrorMessage(25));\n }\n return context;\n}","'use client';\n\nimport * as React from 'react';\nimport { REASONS } from \"../../utils/reasons.js\";\nimport { useContextMenuRootContext } from \"../../context-menu/root/ContextMenuRootContext.js\";\n/**\n * Returns common props shared by all menu item types.\n * This hook extracts the shared logic for id, role, tabIndex, onMouseMove, onClick, and onMouseUp handlers.\n */\nexport function useMenuItemCommonProps(params) {\n const {\n closeOnClick,\n highlighted,\n id,\n nodeId,\n store,\n itemRef,\n itemMetadata\n } = params;\n const {\n events: menuEvents\n } = store.useState('floatingTreeRoot');\n const contextMenuContext = useContextMenuRootContext(true);\n const isContextMenu = contextMenuContext !== undefined;\n return React.useMemo(() => ({\n id,\n role: 'menuitem',\n tabIndex: highlighted ? 0 : -1,\n onMouseMove(event) {\n if (!nodeId) {\n return;\n }\n\n // Inform the floating tree that a menu item within this menu was hovered/moved over\n // so unrelated descendant submenus can be closed.\n menuEvents.emit('itemhover', {\n nodeId,\n target: event.currentTarget\n });\n },\n onClick(event) {\n if (closeOnClick) {\n menuEvents.emit('close', {\n domEvent: event,\n reason: REASONS.itemPress\n });\n }\n },\n onMouseUp(event) {\n if (contextMenuContext) {\n const initialCursorPoint = contextMenuContext.initialCursorPointRef.current;\n contextMenuContext.initialCursorPointRef.current = null;\n if (isContextMenu && initialCursorPoint && Math.abs(event.clientX - initialCursorPoint.x) <= 1 && Math.abs(event.clientY - initialCursorPoint.y) <= 1) {\n return;\n }\n }\n if (itemRef.current && store.context.allowMouseUpTriggerRef.current && (!isContextMenu || event.button === 2)) {\n // This fires whenever the user clicks on the trigger, moves the cursor, and releases it over the item.\n // We trigger the click and override the `closeOnClick` preference to always close the menu.\n if (!itemMetadata || itemMetadata.type === 'regular-item') {\n itemRef.current.click();\n }\n }\n }\n }), [closeOnClick, highlighted, id, menuEvents, nodeId, store, itemRef, contextMenuContext, isContextMenu, itemMetadata]);\n}","'use client';\n\nimport * as React from 'react';\nimport { useMergedRefs } from '@base-ui/utils/useMergedRefs';\nimport { useButton } from \"../../use-button/index.js\";\nimport { mergeProps } from \"../../merge-props/index.js\";\nimport { useMenuItemCommonProps } from \"./useMenuItemCommonProps.js\";\nexport const REGULAR_ITEM = {\n type: 'regular-item'\n};\nexport function useMenuItem(params) {\n const {\n closeOnClick,\n disabled = false,\n highlighted,\n id,\n store,\n nativeButton,\n itemMetadata,\n nodeId\n } = params;\n const itemRef = React.useRef(null);\n const {\n getButtonProps,\n buttonRef\n } = useButton({\n disabled,\n focusableWhenDisabled: true,\n native: nativeButton\n });\n const commonProps = useMenuItemCommonProps({\n closeOnClick,\n highlighted,\n id,\n nodeId,\n store,\n itemRef,\n itemMetadata\n });\n const getItemProps = React.useCallback(externalProps => {\n return mergeProps(commonProps, {\n onMouseEnter() {\n if (itemMetadata.type !== 'submenu-trigger') {\n return;\n }\n itemMetadata.setActive();\n },\n onKeyUp(event) {\n if (event.key === ' ' && store.context.typingRef.current) {\n event.preventBaseUIHandler();\n }\n }\n }, externalProps, getButtonProps);\n }, [commonProps, getButtonProps, store, itemMetadata]);\n const mergedRef = useMergedRefs(itemRef, buttonRef);\n return React.useMemo(() => ({\n getItemProps,\n itemRef: mergedRef\n }), [getItemProps, mergedRef]);\n}","'use client';\n\nimport * as React from 'react';\nimport { REGULAR_ITEM, useMenuItem } from \"./useMenuItem.js\";\nimport { useMenuRootContext } from \"../root/MenuRootContext.js\";\nimport { useRenderElement } from \"../../utils/useRenderElement.js\";\nimport { useBaseUiId } from \"../../utils/useBaseUiId.js\";\nimport { useCompositeListItem } from \"../../composite/list/useCompositeListItem.js\";\nimport { useMenuPositionerContext } from \"../positioner/MenuPositionerContext.js\";\n\n/**\n * An individual interactive item in the menu.\n * Renders a `<div>` element.\n *\n * Documentation: [Base UI Menu](https://base-ui.com/react/components/menu)\n */\nexport const MenuItem = /*#__PURE__*/React.forwardRef(function MenuItem(componentProps, forwardedRef) {\n const {\n render,\n className,\n id: idProp,\n label,\n nativeButton = false,\n disabled = false,\n closeOnClick = true,\n ...elementProps\n } = componentProps;\n const listItem = useCompositeListItem({\n label\n });\n const menuPositionerContext = useMenuPositionerContext(true);\n const id = useBaseUiId(idProp);\n const {\n store\n } = useMenuRootContext();\n const highlighted = store.useState('isActive', listItem.index);\n const itemProps = store.useState('itemProps');\n const {\n getItemProps,\n itemRef\n } = useMenuItem({\n closeOnClick,\n disabled,\n highlighted,\n id,\n store,\n nativeButton,\n nodeId: menuPositionerContext?.nodeId,\n itemMetadata: REGULAR_ITEM\n });\n const state = {\n disabled,\n highlighted\n };\n return useRenderElement('div', componentProps, {\n state,\n props: [itemProps, elementProps, getItemProps],\n ref: [itemRef, forwardedRef, listItem.ref]\n });\n});\nif (process.env.NODE_ENV !== \"production\") MenuItem.displayName = \"MenuItem\";","'use client';\n\nimport * as React from 'react';\nimport { FloatingFocusManager, useHoverFloatingInteraction } from \"../../floating-ui-react/index.js\";\nimport { useMenuRootContext } from \"../root/MenuRootContext.js\";\nimport { useMenuPositionerContext } from \"../positioner/MenuPositionerContext.js\";\nimport { useRenderElement } from \"../../utils/useRenderElement.js\";\nimport { popupStateMapping as baseMapping } from \"../../utils/popupStateMapping.js\";\nimport { transitionStatusMapping } from \"../../utils/stateAttributesMapping.js\";\nimport { useOpenChangeComplete } from \"../../utils/useOpenChangeComplete.js\";\nimport { createChangeEventDetails } from \"../../utils/createBaseUIEventDetails.js\";\nimport { REASONS } from \"../../utils/reasons.js\";\nimport { useToolbarRootContext } from \"../../toolbar/root/ToolbarRootContext.js\";\nimport { COMPOSITE_KEYS } from \"../../composite/composite.js\";\nimport { getDisabledMountTransitionStyles } from \"../../utils/getDisabledMountTransitionStyles.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst stateAttributesMapping = {\n ...baseMapping,\n ...transitionStatusMapping\n};\n\n/**\n * A container for the menu items.\n * Renders a `<div>` element.\n *\n * Documentation: [Base UI Menu](https://base-ui.com/react/components/menu)\n */\nexport const MenuPopup = /*#__PURE__*/React.forwardRef(function MenuPopup(componentProps, forwardedRef) {\n const {\n render,\n className,\n finalFocus,\n ...elementProps\n } = componentProps;\n const {\n store\n } = useMenuRootContext();\n const {\n side,\n align\n } = useMenuPositionerContext();\n const insideToolbar = useToolbarRootContext(true) != null;\n const open = store.useState('open');\n const transitionStatus = store.useState('transitionStatus');\n const popupProps = store.useState('popupProps');\n const mounted = store.useState('mounted');\n const instantType = store.useState('instantType');\n const triggerElement = store.useState('activeTriggerElement');\n const parent = store.useState('parent');\n const lastOpenChangeReason = store.useState('lastOpenChangeReason');\n const rootId = store.useState('rootId');\n const floatingContext = store.useState('floatingRootContext');\n const floatingTreeRoot = store.useState('floatingTreeRoot');\n const closeDelay = store.useState('closeDelay');\n const activeTriggerElement = store.useState('activeTriggerElement');\n const isContextMenu = parent.type === 'context-menu';\n useOpenChangeComplete({\n open,\n ref: store.context.popupRef,\n onComplete() {\n if (open) {\n store.context.onOpenChangeComplete?.(true);\n }\n }\n });\n React.useEffect(() => {\n function handleClose(event) {\n store.setOpen(false, createChangeEventDetails(event.reason, event.domEvent));\n }\n floatingTreeRoot.events.on('close', handleClose);\n return () => {\n floatingTreeRoot.events.off('close', handleClose);\n };\n }, [floatingTreeRoot.events, store]);\n const hoverEnabled = store.useState('hoverEnabled');\n const disabled = store.useState('disabled');\n useHoverFloatingInteraction(floatingContext, {\n enabled: hoverEnabled && !disabled && !isContextMenu && parent.type !== 'menubar',\n closeDelay\n });\n const state = {\n transitionStatus,\n side,\n align,\n open,\n nested: parent.type === 'menu',\n instant: instantType\n };\n const element = useRenderElement('div', componentProps, {\n state,\n ref: [forwardedRef, store.context.popupRef],\n stateAttributesMapping,\n props: [popupProps, {\n onKeyDown(event) {\n if (insideToolbar && COMPOSITE_KEYS.has(event.key)) {\n event.stopPropagation();\n }\n }\n }, getDisabledMountTransitionStyles(transitionStatus), elementProps, {\n 'data-rootownerid': rootId\n }]\n });\n let returnFocus = parent.type === undefined || isContextMenu;\n if (triggerElement || parent.type === 'menubar' && lastOpenChangeReason !== REASONS.outsidePress) {\n returnFocus = true;\n }\n return /*#__PURE__*/_jsx(FloatingFocusManager, {\n context: floatingContext,\n modal: isContextMenu,\n disabled: !mounted,\n returnFocus: finalFocus === undefined ? returnFocus : finalFocus,\n initialFocus: parent.type !== 'menu',\n restoreFocus: true,\n externalTree: parent.type !== 'menubar' ? floatingTreeRoot : undefined,\n previousFocusableElement: activeTriggerElement,\n nextFocusableElement: parent.type === undefined ? store.context.triggerFocusTargetRef : undefined,\n beforeContentFocusGuardRef: parent.type === undefined ? store.context.beforeContentFocusGuardRef : undefined,\n children: element\n });\n});\nif (process.env.NODE_ENV !== \"production\") MenuPopup.displayName = \"MenuPopup\";","'use client';\n\nimport _formatErrorMessage from \"@base-ui/utils/formatErrorMessage\";\nimport * as React from 'react';\nexport const MenuPortalContext = /*#__PURE__*/React.createContext(undefined);\nif (process.env.NODE_ENV !== \"production\") MenuPortalContext.displayName = \"MenuPortalContext\";\nexport function useMenuPortalContext() {\n const value = React.useContext(MenuPortalContext);\n if (value === undefined) {\n throw new Error(process.env.NODE_ENV !== \"production\" ? 'Base UI: <Menu.Portal> is missing.' : _formatErrorMessage(32));\n }\n return value;\n}","'use client';\n\nimport * as React from 'react';\nimport { FloatingPortal } from \"../../floating-ui-react/index.js\";\nimport { useMenuRootContext } from \"../root/MenuRootContext.js\";\nimport { MenuPortalContext } from \"./MenuPortalContext.js\";\n\n/**\n * A portal element that moves the popup to a different part of the DOM.\n * By default, the portal element is appended to `<body>`.\n * Renders a `<div>` element.\n *\n * Documentation: [Base UI Menu](https://base-ui.com/react/components/menu)\n */\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport const MenuPortal = /*#__PURE__*/React.forwardRef(function MenuPortal(props, forwardedRef) {\n const {\n keepMounted = false,\n ...portalProps\n } = props;\n const {\n store\n } = useMenuRootContext();\n const mounted = store.useState('mounted');\n const shouldRender = mounted || keepMounted;\n if (!shouldRender) {\n return null;\n }\n return /*#__PURE__*/_jsx(MenuPortalContext.Provider, {\n value: keepMounted,\n children: /*#__PURE__*/_jsx(FloatingPortal, {\n ref: forwardedRef,\n ...portalProps\n })\n });\n});\nif (process.env.NODE_ENV !== \"production\") MenuPortal.displayName = \"MenuPortal\";","'use client';\n\nimport * as React from 'react';\nimport { inertValue } from '@base-ui/utils/inertValue';\nimport { FloatingNode } from \"../../floating-ui-react/index.js\";\nimport { MenuPositionerContext } from \"./MenuPositionerContext.js\";\nimport { useMenuRootContext } from \"../root/MenuRootContext.js\";\nimport { useAnchorPositioning } from \"../../utils/useAnchorPositioning.js\";\nimport { useRenderElement } from \"../../utils/useRenderElement.js\";\nimport { popupStateMapping } from \"../../utils/popupStateMapping.js\";\nimport { CompositeList } from \"../../composite/list/CompositeList.js\";\nimport { InternalBackdrop } from \"../../utils/InternalBackdrop.js\";\nimport { useMenuPortalContext } from \"../portal/MenuPortalContext.js\";\nimport { DROPDOWN_COLLISION_AVOIDANCE, POPUP_COLLISION_AVOIDANCE } from \"../../utils/constants.js\";\nimport { getDisabledMountTransitionStyles } from \"../../utils/getDisabledMountTransitionStyles.js\";\nimport { useContextMenuRootContext } from \"../../context-menu/root/ContextMenuRootContext.js\";\nimport { createChangeEventDetails } from \"../../utils/createBaseUIEventDetails.js\";\nimport { REASONS } from \"../../utils/reasons.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\n/**\n * Positions the menu popup against the trigger.\n * Renders a `<div>` element.\n *\n * Documentation: [Base UI Menu](https://base-ui.com/react/components/menu)\n */\nexport const MenuPositioner = /*#__PURE__*/React.forwardRef(function MenuPositioner(componentProps, forwardedRef) {\n const {\n anchor: anchorProp,\n positionMethod: positionMethodProp = 'absolute',\n className,\n render,\n side,\n align: alignProp,\n sideOffset: sideOffsetProp = 0,\n alignOffset: alignOffsetProp = 0,\n collisionBoundary = 'clipping-ancestors',\n collisionPadding = 5,\n arrowPadding = 5,\n sticky = false,\n disableAnchorTracking = false,\n collisionAvoidance: collisionAvoidanceProp = DROPDOWN_COLLISION_AVOIDANCE,\n ...elementProps\n } = componentProps;\n const {\n store\n } = useMenuRootContext();\n const keepMounted = useMenuPortalContext();\n const contextMenuContext = useContextMenuRootContext(true);\n const parent = store.useState('parent');\n const floatingRootContext = store.useState('floatingRootContext');\n const floatingTreeRoot = store.useState('floatingTreeRoot');\n const mounted = store.useState('mounted');\n const open = store.useState('open');\n const modal = store.useState('modal');\n const triggerElement = store.useState('activeTriggerElement');\n const transitionStatus = store.useState('transitionStatus');\n const lastOpenChangeReason = store.useState('lastOpenChangeReason');\n const floatingNodeId = store.useState('floatingNodeId');\n const floatingParentNodeId = store.useState('floatingParentNodeId');\n let anchor = anchorProp;\n let sideOffset = sideOffsetProp;\n let alignOffset = alignOffsetProp;\n let align = alignProp;\n let collisionAvoidance = collisionAvoidanceProp;\n if (parent.type === 'context-menu') {\n anchor = anchorProp ?? parent.context?.anchor;\n align = align ?? 'start';\n if (!side && align !== 'center') {\n alignOffset = componentProps.alignOffset ?? 2;\n sideOffset = componentProps.sideOffset ?? -5;\n }\n }\n let computedSide = side;\n let computedAlign = align;\n if (parent.type === 'menu') {\n computedSide = computedSide ?? 'inline-end';\n computedAlign = computedAlign ?? 'start';\n collisionAvoidance = componentProps.collisionAvoidance ?? POPUP_COLLISION_AVOIDANCE;\n } else if (parent.type === 'menubar') {\n computedSide = computedSide ?? 'bottom';\n computedAlign = computedAlign ?? 'start';\n }\n const contextMenu = parent.type === 'context-menu';\n const positioner = useAnchorPositioning({\n anchor,\n floatingRootContext,\n positionMethod: contextMenuContext ? 'fixed' : positionMethodProp,\n mounted,\n side: computedSide,\n sideOffset,\n align: computedAlign,\n alignOffset,\n arrowPadding: contextMenu ? 0 : arrowPadding,\n collisionBoundary,\n collisionPadding,\n sticky,\n nodeId: floatingNodeId,\n keepMounted,\n disableAnchorTracking,\n collisionAvoidance,\n shiftCrossAxis: contextMenu && !('side' in collisionAvoidance && collisionAvoidance.side === 'flip'),\n externalTree: floatingTreeRoot\n });\n const positionerProps = React.useMemo(() => {\n const hiddenStyles = {};\n if (!open) {\n hiddenStyles.pointerEvents = 'none';\n }\n return {\n role: 'presentation',\n hidden: !mounted,\n style: {\n ...positioner.positionerStyles,\n ...hiddenStyles\n }\n };\n }, [open, mounted, positioner.positionerStyles]);\n React.useEffect(() => {\n function onMenuOpenChange(details) {\n if (details.open) {\n if (details.parentNodeId === floatingNodeId) {\n store.set('hoverEnabled', false);\n }\n if (details.nodeId !== floatingNodeId && details.parentNodeId === store.select('floatingParentNodeId')) {\n store.setOpen(false, createChangeEventDetails(REASONS.siblingOpen));\n }\n }\n }\n floatingTreeRoot.events.on('menuopenchange', onMenuOpenChange);\n return () => {\n floatingTreeRoot.events.off('menuopenchange', onMenuOpenChange);\n };\n }, [store, floatingTreeRoot.events, floatingNodeId]);\n React.useEffect(() => {\n if (store.select('floatingParentNodeId') == null) {\n return undefined;\n }\n function onParentClose(details) {\n if (details.open || details.nodeId !== store.select('floatingParentNodeId')) {\n return;\n }\n const reason = details.reason ?? REASONS.siblingOpen;\n store.setOpen(false, createChangeEventDetails(reason));\n }\n floatingTreeRoot.events.on('menuopenchange', onParentClose);\n return () => {\n floatingTreeRoot.events.off('menuopenchange', onParentClose);\n };\n }, [floatingTreeRoot.events, store]);\n\n // Close unrelated child submenus when hovering a different item in the parent menu.\n React.useEffect(() => {\n function onItemHover(event) {\n // If an item within our parent menu is hovered, and this menu's trigger is not that item,\n // close this submenu. This ensures hovering a different item in the parent closes other branches.\n if (!open || event.nodeId !== store.select('floatingParentNodeId')) {\n return;\n }\n if (event.target && triggerElement && triggerElement !== event.target) {\n store.setOpen(false, createChangeEventDetails(REASONS.siblingOpen));\n }\n }\n floatingTreeRoot.events.on('itemhover', onItemHover);\n return () => {\n floatingTreeRoot.events.off('itemhover', onItemHover);\n };\n }, [floatingTreeRoot.events, open, triggerElement, store]);\n React.useEffect(() => {\n const eventDetails = {\n open,\n nodeId: floatingNodeId,\n parentNodeId: floatingParentNodeId,\n reason: store.select('lastOpenChangeReason')\n };\n floatingTreeRoot.events.emit('menuopenchange', eventDetails);\n }, [floatingTreeRoot.events, open, store, floatingNodeId, floatingParentNodeId]);\n const state = {\n open,\n side: positioner.side,\n align: positioner.align,\n anchorHidden: positioner.anchorHidden,\n nested: parent.type === 'menu'\n };\n const contextValue = React.useMemo(() => ({\n side: positioner.side,\n align: positioner.align,\n arrowRef: positioner.arrowRef,\n arrowUncentered: positioner.arrowUncentered,\n arrowStyles: positioner.arrowStyles,\n nodeId: positioner.context.nodeId\n }), [positioner.side, positioner.align, positioner.arrowRef, positioner.arrowUncentered, positioner.arrowStyles, positioner.context.nodeId]);\n const element = useRenderElement('div', componentProps, {\n state,\n stateAttributesMapping: popupStateMapping,\n ref: [forwardedRef, store.useStateSetter('positionerElement')],\n props: [positionerProps, getDisabledMountTransitionStyles(transitionStatus), elementProps]\n });\n const shouldRenderBackdrop = mounted && parent.type !== 'menu' && (parent.type !== 'menubar' && modal && lastOpenChangeReason !== REASONS.triggerHover || parent.type === 'menubar' && parent.context.modal);\n\n // cuts a hole in the backdrop to allow pointer interaction with the menubar or dropdown menu trigger element\n let backdropCutout = null;\n if (parent.type === 'menubar') {\n backdropCutout = parent.context.contentElement;\n } else if (parent.type === undefined) {\n backdropCutout = triggerElement;\n }\n return /*#__PURE__*/_jsxs(MenuPositionerContext.Provider, {\n value: contextValue,\n children: [shouldRenderBackdrop && /*#__PURE__*/_jsx(InternalBackdrop, {\n ref: parent.type === 'context-menu' || parent.type === 'nested-context-menu' ? parent.context.internalBackdropRef : null,\n inert: inertValue(!open),\n cutout: backdropCutout\n }), /*#__PURE__*/_jsx(FloatingNode, {\n id: floatingNodeId,\n children: /*#__PURE__*/_jsx(CompositeList, {\n elementsRef: store.context.itemDomElements,\n labelsRef: store.context.itemLabels,\n children: element\n })\n })]\n });\n});\nif (process.env.NODE_ENV !== \"production\") MenuPositioner.displayName = \"MenuPositioner\";","'use client';\n\nimport _formatErrorMessage from \"@base-ui/utils/formatErrorMessage\";\nimport * as React from 'react';\nexport const MenubarContext = /*#__PURE__*/React.createContext(null);\nif (process.env.NODE_ENV !== \"production\") MenubarContext.displayName = \"MenubarContext\";\nexport function useMenubarContext(optional) {\n const context = React.useContext(MenubarContext);\n if (context === null && !optional) {\n throw new Error(process.env.NODE_ENV !== \"production\" ? 'Base UI: MenubarContext is missing. Menubar parts must be placed within <Menubar>.' : _formatErrorMessage(5));\n }\n return context;\n}","import * as React from 'react';\nimport { createSelector, ReactStore } from '@base-ui/utils/store';\nimport { EMPTY_OBJECT } from '@base-ui/utils/empty';\nimport { useRefWithInit } from '@base-ui/utils/useRefWithInit';\nimport { FloatingTreeStore } from \"../../floating-ui-react/components/FloatingTreeStore.js\";\nimport { createInitialPopupStoreState, popupStoreSelectors, PopupTriggerMap } from \"../../utils/popups/index.js\";\nconst selectors = {\n ...popupStoreSelectors,\n disabled: createSelector(state => state.parent.type === 'menubar' ? state.parent.context.disabled || state.disabled : state.disabled),\n modal: createSelector(state => (state.parent.type === undefined || state.parent.type === 'context-menu') && (state.modal ?? true)),\n allowMouseEnter: createSelector(state => state.allowMouseEnter),\n stickIfOpen: createSelector(state => state.stickIfOpen),\n parent: createSelector(state => state.parent),\n rootId: createSelector(state => {\n if (state.parent.type === 'menu') {\n return state.parent.store.select('rootId');\n }\n return state.parent.type !== undefined ? state.parent.context.rootId : state.rootId;\n }),\n activeIndex: createSelector(state => state.activeIndex),\n isActive: createSelector((state, itemIndex) => state.activeIndex === itemIndex),\n hoverEnabled: createSelector(state => state.hoverEnabled),\n instantType: createSelector(state => state.instantType),\n lastOpenChangeReason: createSelector(state => state.openChangeReason),\n floatingTreeRoot: createSelector(state => {\n if (state.parent.type === 'menu') {\n return state.parent.store.select('floatingTreeRoot');\n }\n return state.floatingTreeRoot;\n }),\n floatingNodeId: createSelector(state => state.floatingNodeId),\n floatingParentNodeId: createSelector(state => state.floatingParentNodeId),\n itemProps: createSelector(state => state.itemProps),\n closeDelay: createSelector(state => state.closeDelay),\n keyboardEventRelay: createSelector(state => {\n if (state.keyboardEventRelay) {\n return state.keyboardEventRelay;\n }\n if (state.parent.type === 'menu') {\n return state.parent.store.select('keyboardEventRelay');\n }\n return undefined;\n })\n};\nexport class MenuStore extends ReactStore {\n constructor(initialState) {\n super({\n ...createInitialState(),\n ...initialState\n }, {\n positionerRef: /*#__PURE__*/React.createRef(),\n popupRef: /*#__PURE__*/React.createRef(),\n typingRef: {\n current: false\n },\n itemDomElements: {\n current: []\n },\n itemLabels: {\n current: []\n },\n allowMouseUpTriggerRef: {\n current: false\n },\n triggerFocusTargetRef: /*#__PURE__*/React.createRef(),\n beforeContentFocusGuardRef: /*#__PURE__*/React.createRef(),\n onOpenChangeComplete: undefined,\n triggerElements: new PopupTriggerMap()\n }, selectors);\n\n // Set up propagation of state from parent menu if applicable.\n this.unsubscribeParentListener = this.observe('parent', parent => {\n this.unsubscribeParentListener?.();\n if (parent.type === 'menu') {\n this.unsubscribeParentListener = parent.store.subscribe(() => {\n this.notifyAll();\n });\n this.context.allowMouseUpTriggerRef = parent.store.context.allowMouseUpTriggerRef;\n return;\n }\n if (parent.type !== undefined) {\n this.context.allowMouseUpTriggerRef = parent.context.allowMouseUpTriggerRef;\n }\n this.unsubscribeParentListener = null;\n });\n }\n setOpen(open, eventDetails) {\n this.state.floatingRootContext.context.events.emit('setOpen', {\n open,\n eventDetails\n });\n }\n static useStore(externalStore, initialState) {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const internalStore = useRefWithInit(() => {\n return new MenuStore(initialState);\n }).current;\n return externalStore ?? internalStore;\n }\n unsubscribeParentListener = null;\n}\nfunction createInitialState() {\n return {\n ...createInitialPopupStoreState(),\n disabled: false,\n modal: true,\n allowMouseEnter: false,\n stickIfOpen: true,\n parent: {\n type: undefined\n },\n rootId: undefined,\n activeIndex: null,\n hoverEnabled: true,\n instantType: undefined,\n openChangeReason: null,\n floatingTreeRoot: new FloatingTreeStore(),\n floatingNodeId: undefined,\n floatingParentNodeId: null,\n itemProps: EMPTY_OBJECT,\n keyboardEventRelay: undefined,\n closeDelay: 0\n };\n}","'use client';\n\nimport * as React from 'react';\nexport const MenuSubmenuRootContext = /*#__PURE__*/React.createContext(undefined);\nif (process.env.NODE_ENV !== \"production\") MenuSubmenuRootContext.displayName = \"MenuSubmenuRootContext\";\nexport function useMenuSubmenuRootContext() {\n return React.useContext(MenuSubmenuRootContext);\n}","'use client';\n\nimport * as React from 'react';\nimport { useTimeout } from '@base-ui/utils/useTimeout';\nimport { useStableCallback } from '@base-ui/utils/useStableCallback';\nimport { useId } from '@base-ui/utils/useId';\nimport { useIsoLayoutEffect } from '@base-ui/utils/useIsoLayoutEffect';\nimport { useOnFirstRender } from '@base-ui/utils/useOnFirstRender';\nimport { useScrollLock } from '@base-ui/utils/useScrollLock';\nimport { EMPTY_ARRAY } from '@base-ui/utils/empty';\nimport { fastComponent } from '@base-ui/utils/fastHooks';\nimport { FloatingTree, useDismiss, useFloatingNodeId, useFloatingParentNodeId, useInteractions, useListNavigation, useRole, useTypeahead, useSyncedFloatingRootContext } from \"../../floating-ui-react/index.js\";\nimport { MenuRootContext, useMenuRootContext } from \"./MenuRootContext.js\";\nimport { useMenubarContext } from \"../../menubar/MenubarContext.js\";\nimport { TYPEAHEAD_RESET_MS } from \"../../utils/constants.js\";\nimport { useDirection } from \"../../direction-provider/DirectionContext.js\";\nimport { useOpenInteractionType } from \"../../utils/useOpenInteractionType.js\";\nimport { createChangeEventDetails } from \"../../utils/createBaseUIEventDetails.js\";\nimport { REASONS } from \"../../utils/reasons.js\";\nimport { useContextMenuRootContext } from \"../../context-menu/root/ContextMenuRootContext.js\";\nimport { mergeProps } from \"../../merge-props/index.js\";\nimport { MenuStore } from \"../store/MenuStore.js\";\nimport { useImplicitActiveTrigger, useOpenStateTransitions } from \"../../utils/popups/index.js\";\nimport { useMenuSubmenuRootContext } from \"../submenu-root/MenuSubmenuRootContext.js\";\n\n/**\n * Groups all parts of the menu.\n * Doesn’t render its own HTML element.\n *\n * Documentation: [Base UI Menu](https://base-ui.com/react/components/menu)\n */\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport const MenuRoot = fastComponent(function MenuRoot(props) {\n const {\n children,\n open: openProp,\n onOpenChange,\n onOpenChangeComplete,\n defaultOpen = false,\n disabled: disabledProp = false,\n modal: modalProp,\n loopFocus = true,\n orientation = 'vertical',\n actionsRef,\n closeParentOnEsc = false,\n handle,\n triggerId: triggerIdProp,\n defaultTriggerId: defaultTriggerIdProp = null,\n highlightItemOnHover = true\n } = props;\n const contextMenuContext = useContextMenuRootContext(true);\n const parentMenuRootContext = useMenuRootContext(true);\n const menubarContext = useMenubarContext(true);\n const isSubmenu = useMenuSubmenuRootContext();\n const parentFromContext = React.useMemo(() => {\n if (isSubmenu && parentMenuRootContext) {\n return {\n type: 'menu',\n store: parentMenuRootContext.store\n };\n }\n if (menubarContext) {\n return {\n type: 'menubar',\n context: menubarContext\n };\n }\n\n // Ensure this is not a Menu nested inside ContextMenu.Trigger.\n // ContextMenu parentContext is always undefined as ContextMenu.Root is instantiated with\n // <MenuRootContext.Provider value={undefined}>\n if (contextMenuContext && !parentMenuRootContext) {\n return {\n type: 'context-menu',\n context: contextMenuContext\n };\n }\n return {\n type: undefined\n };\n }, [contextMenuContext, parentMenuRootContext, menubarContext, isSubmenu]);\n const store = MenuStore.useStore(handle?.store, {\n open: defaultOpen,\n openProp,\n activeTriggerId: defaultTriggerIdProp,\n triggerIdProp,\n parent: parentFromContext\n });\n\n // Support initially open state when uncontrolled\n useOnFirstRender(() => {\n if (openProp === undefined && store.state.open === false && defaultOpen === true) {\n store.update({\n open: true,\n activeTriggerId: defaultTriggerIdProp\n });\n }\n });\n store.useControlledProp('openProp', openProp);\n store.useControlledProp('triggerIdProp', triggerIdProp);\n store.useContextCallback('onOpenChangeComplete', onOpenChangeComplete);\n const floatingTreeRoot = store.useState('floatingTreeRoot');\n const floatingNodeIdFromContext = useFloatingNodeId(floatingTreeRoot);\n const floatingParentNodeIdFromContext = useFloatingParentNodeId();\n useIsoLayoutEffect(() => {\n if (contextMenuContext && !parentMenuRootContext) {\n // This is a context menu root.\n // It doesn't support detached triggers yet, so we have to sync the parent context manually.\n store.update({\n parent: {\n type: 'context-menu',\n context: contextMenuContext\n },\n floatingNodeId: floatingNodeIdFromContext,\n floatingParentNodeId: floatingParentNodeIdFromContext\n });\n } else if (parentMenuRootContext) {\n store.update({\n floatingNodeId: floatingNodeIdFromContext,\n floatingParentNodeId: floatingParentNodeIdFromContext\n });\n }\n }, [contextMenuContext, parentMenuRootContext, floatingNodeIdFromContext, floatingParentNodeIdFromContext, store]);\n const open = store.useState('open');\n const activeTriggerElement = store.useState('activeTriggerElement');\n const positionerElement = store.useState('positionerElement');\n const hoverEnabled = store.useState('hoverEnabled');\n const modal = store.useState('modal');\n const disabled = store.useState('disabled');\n const lastOpenChangeReason = store.useState('lastOpenChangeReason');\n const parent = store.useState('parent');\n const activeIndex = store.useState('activeIndex');\n const payload = store.useState('payload');\n const floatingParentNodeId = store.useState('floatingParentNodeId');\n const openEventRef = React.useRef(null);\n const nested = floatingParentNodeId != null;\n let floatingEvents;\n if (process.env.NODE_ENV !== 'production') {\n if (parent.type !== undefined && modalProp !== undefined) {\n console.warn('Base UI: The `modal` prop is not supported on nested menus. It will be ignored.');\n }\n }\n store.useSyncedValues({\n disabled: disabledProp,\n modal: parent.type === undefined ? modalProp : undefined,\n rootId: useId()\n });\n const {\n openMethod,\n triggerProps: interactionTypeProps,\n reset: resetOpenInteractionType\n } = useOpenInteractionType(open);\n useImplicitActiveTrigger(store);\n const {\n forceUnmount\n } = useOpenStateTransitions(open, store, () => {\n store.update({\n allowMouseEnter: false,\n stickIfOpen: true\n });\n resetOpenInteractionType();\n });\n const allowOutsidePressDismissalRef = React.useRef(parent.type !== 'context-menu');\n const allowOutsidePressDismissalTimeout = useTimeout();\n React.useEffect(() => {\n if (!open) {\n openEventRef.current = null;\n }\n if (parent.type !== 'context-menu') {\n return;\n }\n if (!open) {\n allowOutsidePressDismissalTimeout.clear();\n allowOutsidePressDismissalRef.current = false;\n return;\n }\n\n // With `mousedown` outside press events and long press touch input, there\n // needs to be a grace period after opening to ensure the dismissal event\n // doesn't fire immediately after open.\n allowOutsidePressDismissalTimeout.start(500, () => {\n allowOutsidePressDismissalRef.current = true;\n });\n }, [allowOutsidePressDismissalTimeout, open, parent.type]);\n useScrollLock(open && modal && lastOpenChangeReason !== REASONS.triggerHover && openMethod !== 'touch', positionerElement);\n useIsoLayoutEffect(() => {\n if (!open && !hoverEnabled) {\n store.set('hoverEnabled', true);\n }\n }, [open, hoverEnabled, store]);\n const allowTouchToCloseRef = React.useRef(true);\n const allowTouchToCloseTimeout = useTimeout();\n const setOpen = useStableCallback((nextOpen, eventDetails) => {\n const reason = eventDetails.reason;\n if (open === nextOpen && eventDetails.trigger === activeTriggerElement && lastOpenChangeReason === reason) {\n return;\n }\n eventDetails.preventUnmountOnClose = () => {\n store.set('preventUnmountingOnClose', true);\n };\n\n // Do not immediately reset the activeTriggerId to allow\n // exit animations to play and focus to be returned correctly.\n if (!nextOpen && eventDetails.trigger == null) {\n eventDetails.trigger = activeTriggerElement ?? undefined;\n }\n onOpenChange?.(nextOpen, eventDetails);\n if (eventDetails.isCanceled) {\n return;\n }\n const details = {\n open: nextOpen,\n nativeEvent: eventDetails.event,\n reason: eventDetails.reason,\n nested\n };\n floatingEvents?.emit('openchange', details);\n const nativeEvent = eventDetails.event;\n if (nextOpen === false && nativeEvent?.type === 'click' && nativeEvent.pointerType === 'touch' && !allowTouchToCloseRef.current) {\n return;\n }\n\n // Workaround `enableFocusInside` in Floating UI setting `tabindex=0` of a non-highlighted\n // option upon close when tabbing out due to `keepMounted=true`:\n // https://github.com/floating-ui/floating-ui/pull/3004/files#diff-962a7439cdeb09ea98d4b622a45d517bce07ad8c3f866e089bda05f4b0bbd875R194-R199\n // This otherwise causes options to retain `tabindex=0` incorrectly when the popup is closed\n // when tabbing outside.\n if (!nextOpen && activeIndex !== null) {\n const activeOption = store.context.itemDomElements.current[activeIndex];\n // Wait for Floating UI's focus effect to have fired\n queueMicrotask(() => {\n activeOption?.setAttribute('tabindex', '-1');\n });\n }\n\n // Prevent the menu from closing on mobile devices that have a delayed click event.\n // In some cases the menu, when tapped, will fire the focus event first and then the click event.\n // Without this guard, the menu will close immediately after opening.\n if (nextOpen && reason === REASONS.triggerFocus) {\n allowTouchToCloseRef.current = false;\n allowTouchToCloseTimeout.start(300, () => {\n allowTouchToCloseRef.current = true;\n });\n } else {\n allowTouchToCloseRef.current = true;\n allowTouchToCloseTimeout.clear();\n }\n const isKeyboardClick = (reason === REASONS.triggerPress || reason === REASONS.itemPress) && nativeEvent.detail === 0 && nativeEvent?.isTrusted;\n const isDismissClose = !nextOpen && (reason === REASONS.escapeKey || reason == null);\n const updatedState = {\n open: nextOpen,\n openChangeReason: reason\n };\n openEventRef.current = eventDetails.event ?? null;\n\n // If a popup is closing, the `trigger` may be null.\n // We want to keep the previous value so that exit animations are played and focus is returned correctly.\n const newTriggerId = eventDetails.trigger?.id ?? null;\n if (newTriggerId || nextOpen) {\n updatedState.activeTriggerId = newTriggerId;\n updatedState.activeTriggerElement = eventDetails.trigger ?? null;\n }\n store.update(updatedState);\n if (parent.type === 'menubar' && (reason === REASONS.triggerFocus || reason === REASONS.focusOut || reason === REASONS.triggerHover || reason === REASONS.listNavigation || reason === REASONS.siblingOpen)) {\n store.set('instantType', 'group');\n } else if (isKeyboardClick || isDismissClose) {\n store.set('instantType', isKeyboardClick ? 'click' : 'dismiss');\n } else {\n store.set('instantType', undefined);\n }\n });\n const createMenuEventDetails = React.useCallback(reason => {\n const details = createChangeEventDetails(reason);\n details.preventUnmountOnClose = () => {\n store.set('preventUnmountingOnClose', true);\n };\n return details;\n }, [store]);\n const handleImperativeClose = React.useCallback(() => {\n store.setOpen(false, createMenuEventDetails(REASONS.imperativeAction));\n }, [store, createMenuEventDetails]);\n React.useImperativeHandle(actionsRef, () => ({\n unmount: forceUnmount,\n close: handleImperativeClose\n }), [forceUnmount, handleImperativeClose]);\n let ctx;\n if (parent.type === 'context-menu') {\n ctx = parent.context;\n }\n React.useImperativeHandle(ctx?.positionerRef, () => positionerElement, [positionerElement]);\n React.useImperativeHandle(ctx?.actionsRef, () => ({\n setOpen\n }), [setOpen]);\n const floatingRootContext = useSyncedFloatingRootContext({\n popupStore: store,\n onOpenChange: setOpen\n });\n floatingEvents = floatingRootContext.context.events;\n React.useEffect(() => {\n const handleSetOpenEvent = ({\n open: nextOpen,\n eventDetails\n }) => setOpen(nextOpen, eventDetails);\n floatingEvents.on('setOpen', handleSetOpenEvent);\n return () => {\n floatingEvents?.off('setOpen', handleSetOpenEvent);\n };\n }, [floatingEvents, setOpen]);\n const dismiss = useDismiss(floatingRootContext, {\n enabled: !disabled,\n bubbles: {\n escapeKey: closeParentOnEsc && parent.type === 'menu'\n },\n outsidePress() {\n if (parent.type !== 'context-menu' || openEventRef.current?.type === 'contextmenu') {\n return true;\n }\n return allowOutsidePressDismissalRef.current;\n },\n externalTree: nested ? floatingTreeRoot : undefined\n });\n const role = useRole(floatingRootContext, {\n role: 'menu'\n });\n const direction = useDirection();\n const setActiveIndex = React.useCallback(index => {\n if (store.select('activeIndex') === index) {\n return;\n }\n store.set('activeIndex', index);\n }, [store]);\n const listNavigation = useListNavigation(floatingRootContext, {\n enabled: !disabled,\n listRef: store.context.itemDomElements,\n activeIndex,\n nested: parent.type !== undefined,\n loopFocus,\n orientation,\n parentOrientation: parent.type === 'menubar' ? parent.context.orientation : undefined,\n rtl: direction === 'rtl',\n disabledIndices: EMPTY_ARRAY,\n onNavigate: setActiveIndex,\n openOnArrowKeyDown: parent.type !== 'context-menu',\n externalTree: nested ? floatingTreeRoot : undefined,\n focusItemOnHover: highlightItemOnHover\n });\n const onTypingChange = React.useCallback(nextTyping => {\n store.context.typingRef.current = nextTyping;\n }, [store]);\n const typeahead = useTypeahead(floatingRootContext, {\n listRef: store.context.itemLabels,\n activeIndex,\n resetMs: TYPEAHEAD_RESET_MS,\n onMatch: index => {\n if (open && index !== activeIndex) {\n store.set('activeIndex', index);\n }\n },\n onTypingChange\n });\n const {\n getReferenceProps,\n getFloatingProps,\n getItemProps,\n getTriggerProps\n } = useInteractions([dismiss, role, listNavigation, typeahead]);\n const activeTriggerProps = React.useMemo(() => {\n const mergedProps = mergeProps(getReferenceProps(), {\n onMouseMove() {\n store.set('allowMouseEnter', true);\n }\n }, interactionTypeProps);\n delete mergedProps.role;\n return mergedProps;\n }, [getReferenceProps, store, interactionTypeProps]);\n const inactiveTriggerProps = React.useMemo(() => {\n const triggerProps = getTriggerProps();\n if (!triggerProps) {\n return triggerProps;\n }\n const mergedProps = mergeProps(triggerProps, interactionTypeProps);\n delete mergedProps.role;\n delete mergedProps['aria-controls'];\n return mergedProps;\n }, [getTriggerProps, interactionTypeProps]);\n const popupProps = React.useMemo(() => getFloatingProps({\n onMouseMove() {\n store.set('allowMouseEnter', true);\n if (parent.type === 'menu') {\n store.set('hoverEnabled', false);\n }\n },\n onClick() {\n if (store.select('hoverEnabled')) {\n store.set('hoverEnabled', false);\n }\n },\n onKeyDown(event) {\n // The Menubar's CompositeRoot captures keyboard events via\n // event delegation. This works well when Menu.Root is nested inside Menubar,\n // but with detached triggers we need to manually forward the event to the CompositeRoot.\n const relay = store.select('keyboardEventRelay');\n if (relay && !event.isPropagationStopped()) {\n relay(event);\n }\n }\n }), [getFloatingProps, parent.type, store]);\n const itemProps = React.useMemo(() => getItemProps(), [getItemProps]);\n store.useSyncedValues({\n floatingRootContext,\n activeTriggerProps,\n inactiveTriggerProps,\n popupProps,\n itemProps\n });\n const context = React.useMemo(() => ({\n store,\n parent: parentFromContext\n }), [store, parentFromContext]);\n const content = /*#__PURE__*/_jsx(MenuRootContext.Provider, {\n value: context,\n children: typeof children === 'function' ? children({\n payload\n }) : children\n });\n if (parent.type === undefined || parent.type === 'context-menu') {\n // set up a FloatingTree to provide the context to nested menus\n return /*#__PURE__*/_jsx(FloatingTree, {\n externalTree: floatingTreeRoot,\n children: content\n });\n }\n return content;\n});\nif (process.env.NODE_ENV !== \"production\") MenuRoot.displayName = \"MenuRoot\";","'use client';\n\nimport * as React from 'react';\nimport { useMergedRefs } from '@base-ui/utils/useMergedRefs';\nimport { useCompositeRootContext } from \"../root/CompositeRootContext.js\";\nimport { useCompositeListItem } from \"../list/useCompositeListItem.js\";\nexport function useCompositeItem(params = {}) {\n const {\n highlightItemOnHover,\n highlightedIndex,\n onHighlightedIndexChange\n } = useCompositeRootContext();\n const {\n ref,\n index\n } = useCompositeListItem(params);\n const isHighlighted = highlightedIndex === index;\n const itemRef = React.useRef(null);\n const mergedRef = useMergedRefs(ref, itemRef);\n const compositeProps = React.useMemo(() => ({\n tabIndex: isHighlighted ? 0 : -1,\n onFocus() {\n onHighlightedIndexChange(index);\n },\n onMouseMove() {\n const item = itemRef.current;\n if (!highlightItemOnHover || !item) {\n return;\n }\n const disabled = item.hasAttribute('disabled') || item.ariaDisabled === 'true';\n if (!isHighlighted && !disabled) {\n item.focus();\n }\n }\n }), [isHighlighted, onHighlightedIndexChange, index, highlightItemOnHover]);\n return {\n compositeProps,\n compositeRef: mergedRef,\n index\n };\n}","'use client';\n\nimport { useRenderElement } from \"../../utils/useRenderElement.js\";\nimport { useCompositeItem } from \"./useCompositeItem.js\";\nimport { EMPTY_OBJECT, EMPTY_ARRAY } from \"../../utils/constants.js\";\n/**\n * @internal\n */\nexport function CompositeItem(componentProps) {\n const {\n render,\n className,\n state = EMPTY_OBJECT,\n props = EMPTY_ARRAY,\n refs = EMPTY_ARRAY,\n metadata,\n stateAttributesMapping,\n tag = 'div',\n ...elementProps\n } = componentProps;\n const {\n compositeProps,\n compositeRef\n } = useCompositeItem({\n metadata\n });\n return useRenderElement(tag, componentProps, {\n state,\n ref: [...refs, compositeRef],\n props: [compositeProps, ...props, elementProps],\n stateAttributesMapping\n });\n}","import { getParentNode, isHTMLElement, isLastTraversableNode } from '@floating-ui/utils/dom';\nexport function findRootOwnerId(node) {\n if (isHTMLElement(node) && node.hasAttribute('data-rootownerid')) {\n return node.getAttribute('data-rootownerid') ?? undefined;\n }\n if (isLastTraversableNode(node)) {\n return undefined;\n }\n return findRootOwnerId(getParentNode(node));\n}","'use client';\n\nimport * as React from 'react';\nimport { ownerDocument } from '@base-ui/utils/owner';\nimport { EMPTY_OBJECT } from \"./constants.js\";\n\n/**\n * Returns `click` and `mousedown` handlers that fix the behavior of triggers of popups that are toggled by different events.\n * For example, a button that opens a popup on mousedown and closes it on click.\n * This hook prevents the popup from closing immediately after the mouse button is released.\n */\nexport function useMixedToggleClickHandler(params) {\n const {\n enabled = true,\n mouseDownAction,\n open\n } = params;\n const ignoreClickRef = React.useRef(false);\n return React.useMemo(() => {\n if (!enabled) {\n return EMPTY_OBJECT;\n }\n return {\n onMouseDown: event => {\n if (mouseDownAction === 'open' && !open || mouseDownAction === 'close' && open) {\n ignoreClickRef.current = true;\n ownerDocument(event.currentTarget).addEventListener('click', () => {\n ignoreClickRef.current = false;\n }, {\n once: true\n });\n }\n },\n onClick: event => {\n if (ignoreClickRef.current) {\n ignoreClickRef.current = false;\n event.preventBaseUIHandler();\n }\n }\n };\n }, [enabled, mouseDownAction, open]);\n}","'use client';\n\nimport _formatErrorMessage from \"@base-ui/utils/formatErrorMessage\";\nimport * as React from 'react';\nimport * as ReactDOM from 'react-dom';\nimport { useTimeout } from '@base-ui/utils/useTimeout';\nimport { ownerDocument } from '@base-ui/utils/owner';\nimport { fastComponentRef } from '@base-ui/utils/fastHooks';\nimport { useStableCallback } from '@base-ui/utils/useStableCallback';\nimport { useIsoLayoutEffect } from '@base-ui/utils/useIsoLayoutEffect';\nimport { EMPTY_OBJECT } from '@base-ui/utils/empty';\nimport { safePolygon, useClick, useFloatingTree, useFocus, useHoverReferenceInteraction, useInteractions, useFloatingNodeId, useFloatingParentNodeId } from \"../../floating-ui-react/index.js\";\nimport { FloatingTreeStore } from \"../../floating-ui-react/components/FloatingTreeStore.js\";\nimport { contains, getNextTabbable, getTabbableAfterElement, getTabbableBeforeElement, isOutsideEvent } from \"../../floating-ui-react/utils.js\";\nimport { useMenuRootContext } from \"../root/MenuRootContext.js\";\nimport { pressableTriggerOpenStateMapping } from \"../../utils/popupStateMapping.js\";\nimport { useRenderElement } from \"../../utils/useRenderElement.js\";\nimport { useButton } from \"../../use-button/useButton.js\";\nimport { getPseudoElementBounds } from \"../../utils/getPseudoElementBounds.js\";\nimport { CompositeItem } from \"../../composite/item/CompositeItem.js\";\nimport { useCompositeRootContext } from \"../../composite/root/CompositeRootContext.js\";\nimport { findRootOwnerId } from \"../utils/findRootOwnerId.js\";\nimport { useTriggerDataForwarding } from \"../../utils/popups/index.js\";\nimport { useBaseUiId } from \"../../utils/useBaseUiId.js\";\nimport { REASONS } from \"../../utils/reasons.js\";\nimport { useMixedToggleClickHandler } from \"../../utils/useMixedToggleClickHandler.js\";\nimport { useContextMenuRootContext } from \"../../context-menu/root/ContextMenuRootContext.js\";\nimport { useMenubarContext } from \"../../menubar/MenubarContext.js\";\nimport { PATIENT_CLICK_THRESHOLD } from \"../../utils/constants.js\";\nimport { FocusGuard } from \"../../utils/FocusGuard.js\";\nimport { createChangeEventDetails } from \"../../utils/createBaseUIEventDetails.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nconst BOUNDARY_OFFSET = 2;\n\n/**\n * A button that opens the menu.\n * Renders a `<button>` element.\n *\n * Documentation: [Base UI Menu](https://base-ui.com/react/components/menu)\n */\nexport const MenuTrigger = fastComponentRef(function MenuTrigger(componentProps, forwardedRef) {\n const {\n render,\n className,\n disabled: disabledProp = false,\n nativeButton = true,\n id: idProp,\n openOnHover: openOnHoverProp,\n delay = 100,\n closeDelay = 0,\n handle,\n payload,\n ...elementProps\n } = componentProps;\n const rootContext = useMenuRootContext(true);\n const store = handle?.store ?? rootContext?.store;\n if (!store) {\n throw new Error(process.env.NODE_ENV !== \"production\" ? 'Base UI: <Menu.Trigger> must be either used within a <Menu.Root> component or provided with a handle.' : _formatErrorMessage(85));\n }\n const thisTriggerId = useBaseUiId(idProp);\n const isTriggerActive = store.useState('isTriggerActive', thisTriggerId);\n const floatingRootContext = store.useState('floatingRootContext');\n const isOpenedByThisTrigger = store.useState('isOpenedByTrigger', thisTriggerId);\n const triggerElementRef = React.useRef(null);\n const parent = useMenuParent();\n const compositeRootContext = useCompositeRootContext(true);\n const floatingTreeRootFromContext = useFloatingTree();\n const floatingTreeRoot = React.useMemo(() => {\n return floatingTreeRootFromContext ?? new FloatingTreeStore();\n }, [floatingTreeRootFromContext]);\n const floatingNodeId = useFloatingNodeId(floatingTreeRoot);\n const floatingParentNodeId = useFloatingParentNodeId();\n const {\n registerTrigger,\n isMountedByThisTrigger\n } = useTriggerDataForwarding(thisTriggerId, triggerElementRef, store, {\n payload,\n closeDelay,\n parent,\n floatingTreeRoot,\n floatingNodeId,\n floatingParentNodeId,\n keyboardEventRelay: compositeRootContext?.relayKeyboardEvent\n });\n const isInMenubar = parent.type === 'menubar';\n const rootDisabled = store.useState('disabled');\n const disabled = disabledProp || rootDisabled || isInMenubar && parent.context.disabled;\n const {\n getButtonProps,\n buttonRef\n } = useButton({\n disabled,\n native: nativeButton\n });\n React.useEffect(() => {\n if (!isOpenedByThisTrigger && parent.type === undefined) {\n store.context.allowMouseUpTriggerRef.current = false;\n }\n }, [store, isOpenedByThisTrigger, parent.type]);\n const triggerRef = React.useRef(null);\n const allowMouseUpTriggerTimeout = useTimeout();\n const handleDocumentMouseUp = useStableCallback(mouseEvent => {\n if (!triggerRef.current) {\n return;\n }\n allowMouseUpTriggerTimeout.clear();\n store.context.allowMouseUpTriggerRef.current = false;\n const mouseUpTarget = mouseEvent.target;\n if (contains(triggerRef.current, mouseUpTarget) || contains(store.select('positionerElement'), mouseUpTarget) || mouseUpTarget === triggerRef.current) {\n return;\n }\n if (mouseUpTarget != null && findRootOwnerId(mouseUpTarget) === store.select('rootId')) {\n return;\n }\n const bounds = getPseudoElementBounds(triggerRef.current);\n if (mouseEvent.clientX >= bounds.left - BOUNDARY_OFFSET && mouseEvent.clientX <= bounds.right + BOUNDARY_OFFSET && mouseEvent.clientY >= bounds.top - BOUNDARY_OFFSET && mouseEvent.clientY <= bounds.bottom + BOUNDARY_OFFSET) {\n return;\n }\n floatingTreeRoot.events.emit('close', {\n domEvent: mouseEvent,\n reason: REASONS.cancelOpen\n });\n });\n React.useEffect(() => {\n if (isOpenedByThisTrigger && store.select('lastOpenChangeReason') === REASONS.triggerHover) {\n const doc = ownerDocument(triggerRef.current);\n doc.addEventListener('mouseup', handleDocumentMouseUp, {\n once: true\n });\n }\n }, [isOpenedByThisTrigger, handleDocumentMouseUp, store]);\n const parentMenubarHasSubmenuOpen = isInMenubar && parent.context.hasSubmenuOpen;\n const openOnHover = openOnHoverProp ?? parentMenubarHasSubmenuOpen;\n const hoverProps = useHoverReferenceInteraction(floatingRootContext, {\n enabled: openOnHover && !disabled && parent.type !== 'context-menu' && (!isInMenubar || parentMenubarHasSubmenuOpen && !isMountedByThisTrigger),\n handleClose: safePolygon({\n blockPointerEvents: !isInMenubar\n }),\n mouseOnly: true,\n move: false,\n restMs: parent.type === undefined ? delay : undefined,\n delay: {\n close: closeDelay\n },\n triggerElementRef,\n externalTree: floatingTreeRoot,\n isActiveTrigger: isTriggerActive\n });\n\n // Whether to ignore clicks to open the menu.\n // `lastOpenChangeReason` doesn't need to be reactive here, as we need to run this\n // only when `isOpenedByThisTrigger` changes.\n const stickIfOpen = useStickIfOpen(isOpenedByThisTrigger, store.select('lastOpenChangeReason'));\n const click = useClick(floatingRootContext, {\n enabled: !disabled && parent.type !== 'context-menu',\n event: isOpenedByThisTrigger && isInMenubar ? 'click' : 'mousedown',\n toggle: true,\n ignoreMouse: false,\n stickIfOpen: parent.type === undefined ? stickIfOpen : false\n });\n const focus = useFocus(floatingRootContext, {\n enabled: !disabled && parentMenubarHasSubmenuOpen\n });\n const mixedToggleHandlers = useMixedToggleClickHandler({\n open: isOpenedByThisTrigger,\n enabled: isInMenubar,\n mouseDownAction: 'open'\n });\n const localInteractionProps = useInteractions([click, focus]);\n const state = {\n disabled,\n open: isOpenedByThisTrigger\n };\n const rootTriggerProps = store.useState('triggerProps', isMountedByThisTrigger);\n const ref = [triggerRef, forwardedRef, buttonRef, registerTrigger, triggerElementRef];\n const props = [localInteractionProps.getReferenceProps(), hoverProps ?? EMPTY_OBJECT, rootTriggerProps, {\n 'aria-haspopup': 'menu',\n id: thisTriggerId,\n onMouseDown: event => {\n if (store.select('open')) {\n return;\n }\n\n // mousedown -> mouseup on menu item should not trigger it within 200ms.\n allowMouseUpTriggerTimeout.start(200, () => {\n store.context.allowMouseUpTriggerRef.current = true;\n });\n const doc = ownerDocument(event.currentTarget);\n doc.addEventListener('mouseup', handleDocumentMouseUp, {\n once: true\n });\n }\n }, isInMenubar ? {\n role: 'menuitem'\n } : {}, mixedToggleHandlers, elementProps, getButtonProps];\n const preFocusGuardRef = React.useRef(null);\n const handlePreFocusGuardFocus = useStableCallback(event => {\n ReactDOM.flushSync(() => {\n store.setOpen(false, createChangeEventDetails(REASONS.focusOut, event.nativeEvent, event.currentTarget));\n });\n const previousTabbable = getTabbableBeforeElement(preFocusGuardRef.current);\n previousTabbable?.focus();\n });\n const handleFocusTargetFocus = useStableCallback(event => {\n const currentPositionerElement = store.select('positionerElement');\n if (currentPositionerElement && isOutsideEvent(event, currentPositionerElement)) {\n store.context.beforeContentFocusGuardRef.current?.focus();\n } else {\n ReactDOM.flushSync(() => {\n store.setOpen(false, createChangeEventDetails(REASONS.focusOut, event.nativeEvent, event.currentTarget));\n });\n let nextTabbable = getTabbableAfterElement(store.context.triggerFocusTargetRef.current || triggerElementRef.current);\n while (nextTabbable !== null && contains(currentPositionerElement, nextTabbable)) {\n const prevTabbable = nextTabbable;\n nextTabbable = getNextTabbable(nextTabbable);\n if (nextTabbable === prevTabbable) {\n break;\n }\n }\n nextTabbable?.focus();\n }\n });\n const element = useRenderElement('button', componentProps, {\n enabled: !isInMenubar,\n stateAttributesMapping: pressableTriggerOpenStateMapping,\n state,\n ref,\n props\n });\n if (isInMenubar) {\n return /*#__PURE__*/_jsx(CompositeItem, {\n tag: \"button\",\n render: render,\n className: className,\n state: state,\n refs: ref,\n props: props,\n stateAttributesMapping: pressableTriggerOpenStateMapping\n });\n }\n\n // A fragment with key is required to ensure that the `element` is mounted to the same DOM node\n // regardless of whether the focus guards are rendered or not.\n\n if (isOpenedByThisTrigger) {\n return /*#__PURE__*/_jsxs(React.Fragment, {\n children: [/*#__PURE__*/_jsx(FocusGuard, {\n ref: preFocusGuardRef,\n onFocus: handlePreFocusGuardFocus\n }, `${thisTriggerId}-pre-focus-guard`), /*#__PURE__*/_jsx(React.Fragment, {\n children: element\n }, thisTriggerId), /*#__PURE__*/_jsx(FocusGuard, {\n ref: store.context.triggerFocusTargetRef,\n onFocus: handleFocusTargetFocus\n }, `${thisTriggerId}-post-focus-guard`)]\n });\n }\n return /*#__PURE__*/_jsx(React.Fragment, {\n children: element\n }, thisTriggerId);\n});\nif (process.env.NODE_ENV !== \"production\") MenuTrigger.displayName = \"MenuTrigger\";\n/**\n * Determines whether to ignore clicks after a hover-open.\n */\nfunction useStickIfOpen(open, openReason) {\n const stickIfOpenTimeout = useTimeout();\n const [stickIfOpen, setStickIfOpen] = React.useState(false);\n useIsoLayoutEffect(() => {\n if (open && openReason === 'trigger-hover') {\n // Only allow \"patient\" clicks to close the menu if it's open.\n // If they clicked within 500ms of the menu opening, keep it open.\n setStickIfOpen(true);\n stickIfOpenTimeout.start(PATIENT_CLICK_THRESHOLD, () => {\n setStickIfOpen(false);\n });\n } else if (!open) {\n stickIfOpenTimeout.clear();\n setStickIfOpen(false);\n }\n }, [open, openReason, stickIfOpenTimeout]);\n return stickIfOpen;\n}\nfunction useMenuParent() {\n const contextMenuContext = useContextMenuRootContext(true);\n const parentContext = useMenuRootContext(true);\n const menubarContext = useMenubarContext(true);\n const parent = React.useMemo(() => {\n if (menubarContext) {\n return {\n type: 'menubar',\n context: menubarContext\n };\n }\n\n // Ensure this is not a Menu nested inside ContextMenu.Trigger.\n // ContextMenu parentContext is always undefined as ContextMenu.Root is instantiated with\n // <MenuRootContext.Provider value={undefined}>\n if (contextMenuContext && !parentContext) {\n return {\n type: 'context-menu',\n context: contextMenuContext\n };\n }\n return {\n type: undefined\n };\n }, [contextMenuContext, parentContext, menubarContext]);\n return parent;\n}","\"use client\"\n\nimport * as React from \"react\"\nimport { Menu as MenuPrimitive } from \"@base-ui/react/menu\"\n\nimport { cn } from \"@/lib/utils\"\nimport { ChevronRightIcon, CheckIcon } from \"lucide-react\"\n\nfunction DropdownMenu({ ...props }: MenuPrimitive.Root.Props) {\n return <MenuPrimitive.Root data-slot=\"dropdown-menu\" {...props} />\n}\n\nfunction DropdownMenuPortal({ ...props }: MenuPrimitive.Portal.Props) {\n return <MenuPrimitive.Portal data-slot=\"dropdown-menu-portal\" {...props} />\n}\n\nfunction DropdownMenuTrigger({ ...props }: MenuPrimitive.Trigger.Props) {\n return <MenuPrimitive.Trigger data-slot=\"dropdown-menu-trigger\" {...props} />\n}\n\nfunction DropdownMenuContent({\n align = \"start\",\n alignOffset = 0,\n side = \"bottom\",\n sideOffset = 4,\n className,\n ...props\n}: MenuPrimitive.Popup.Props &\n Pick<\n MenuPrimitive.Positioner.Props,\n \"align\" | \"alignOffset\" | \"side\" | \"sideOffset\"\n >) {\n return (\n <MenuPrimitive.Portal>\n <MenuPrimitive.Positioner\n className=\"isolate z-50 outline-none\"\n align={align}\n alignOffset={alignOffset}\n side={side}\n sideOffset={sideOffset}\n >\n <MenuPrimitive.Popup\n data-slot=\"dropdown-menu-content\"\n className={cn(\"data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 bg-popover text-popover-foreground min-w-32 rounded-lg p-1 shadow-md ring-1 duration-100 data-[side=inline-start]:slide-in-from-right-2 data-[side=inline-end]:slide-in-from-left-2 z-50 max-h-(--available-height) w-(--anchor-width) origin-(--transform-origin) overflow-x-hidden overflow-y-auto outline-none data-closed:overflow-hidden\", className )}\n {...props}\n />\n </MenuPrimitive.Positioner>\n </MenuPrimitive.Portal>\n )\n}\n\nfunction DropdownMenuGroup({ ...props }: MenuPrimitive.Group.Props) {\n return <MenuPrimitive.Group data-slot=\"dropdown-menu-group\" {...props} />\n}\n\nfunction DropdownMenuLabel({\n className,\n inset,\n ...props\n}: MenuPrimitive.GroupLabel.Props & {\n inset?: boolean\n}) {\n return (\n <MenuPrimitive.GroupLabel\n data-slot=\"dropdown-menu-label\"\n data-inset={inset}\n className={cn(\"text-muted-foreground px-1.5 py-1 text-xs font-medium data-inset:pl-7\", className)}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuItem({\n className,\n inset,\n variant = \"default\",\n ...props\n}: MenuPrimitive.Item.Props & {\n inset?: boolean\n variant?: \"default\" | \"destructive\"\n}) {\n return (\n <MenuPrimitive.Item\n data-slot=\"dropdown-menu-item\"\n data-inset={inset}\n data-variant={variant}\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:text-destructive not-data-[variant=destructive]:focus:**:text-accent-foreground gap-1.5 rounded-md px-1.5 py-1 text-sm data-inset:pl-7 [&_svg:not([class*='size-'])]:size-4 group/dropdown-menu-item relative flex cursor-default items-center outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuSub({ ...props }: MenuPrimitive.SubmenuRoot.Props) {\n return <MenuPrimitive.SubmenuRoot data-slot=\"dropdown-menu-sub\" {...props} />\n}\n\nfunction DropdownMenuSubTrigger({\n className,\n inset,\n children,\n ...props\n}: MenuPrimitive.SubmenuTrigger.Props & {\n inset?: boolean\n}) {\n return (\n <MenuPrimitive.SubmenuTrigger\n data-slot=\"dropdown-menu-sub-trigger\"\n data-inset={inset}\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground data-open:bg-accent data-open:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground gap-1.5 rounded-md px-1.5 py-1 text-sm data-inset:pl-7 [&_svg:not([class*='size-'])]:size-4 data-popup-open:bg-accent data-popup-open:text-accent-foreground flex cursor-default items-center outline-hidden select-none [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronRightIcon className=\"ml-auto\" />\n </MenuPrimitive.SubmenuTrigger>\n )\n}\n\nfunction DropdownMenuSubContent({\n align = \"start\",\n alignOffset = -3,\n side = \"right\",\n sideOffset = 0,\n className,\n ...props\n}: React.ComponentProps<typeof DropdownMenuContent>) {\n return (\n <DropdownMenuContent\n data-slot=\"dropdown-menu-sub-content\"\n className={cn(\"data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 bg-popover text-popover-foreground min-w-[96px] rounded-md p-1 shadow-lg ring-1 duration-100 w-auto\", className)}\n align={align}\n alignOffset={alignOffset}\n side={side}\n sideOffset={sideOffset}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuCheckboxItem({\n className,\n children,\n checked,\n inset,\n ...props\n}: MenuPrimitive.CheckboxItem.Props & {\n inset?: boolean\n}) {\n return (\n <MenuPrimitive.CheckboxItem\n data-slot=\"dropdown-menu-checkbox-item\"\n data-inset={inset}\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm data-inset:pl-7 [&_svg:not([class*='size-'])]:size-4 relative flex cursor-default items-center outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n className\n )}\n checked={checked}\n {...props}\n >\n <span\n className=\"absolute right-2 flex items-center justify-center pointer-events-none\"\n data-slot=\"dropdown-menu-checkbox-item-indicator\"\n >\n <MenuPrimitive.CheckboxItemIndicator>\n <CheckIcon\n />\n </MenuPrimitive.CheckboxItemIndicator>\n </span>\n {children}\n </MenuPrimitive.CheckboxItem>\n )\n}\n\nfunction DropdownMenuRadioGroup({ ...props }: MenuPrimitive.RadioGroup.Props) {\n return (\n <MenuPrimitive.RadioGroup\n data-slot=\"dropdown-menu-radio-group\"\n {...props}\n />\n )\n}\n\nfunction DropdownMenuRadioItem({\n className,\n children,\n inset,\n ...props\n}: MenuPrimitive.RadioItem.Props & {\n inset?: boolean\n}) {\n return (\n <MenuPrimitive.RadioItem\n data-slot=\"dropdown-menu-radio-item\"\n data-inset={inset}\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm data-inset:pl-7 [&_svg:not([class*='size-'])]:size-4 relative flex cursor-default items-center outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n className\n )}\n {...props}\n >\n <span\n className=\"absolute right-2 flex items-center justify-center pointer-events-none\"\n data-slot=\"dropdown-menu-radio-item-indicator\"\n >\n <MenuPrimitive.RadioItemIndicator>\n <CheckIcon\n />\n </MenuPrimitive.RadioItemIndicator>\n </span>\n {children}\n </MenuPrimitive.RadioItem>\n )\n}\n\nfunction DropdownMenuSeparator({\n className,\n ...props\n}: MenuPrimitive.Separator.Props) {\n return (\n <MenuPrimitive.Separator\n data-slot=\"dropdown-menu-separator\"\n className={cn(\"bg-border -mx-1 my-1 h-px\", className)}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuShortcut({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"dropdown-menu-shortcut\"\n className={cn(\"text-muted-foreground group-focus/dropdown-menu-item:text-accent-foreground ml-auto text-xs tracking-widest\", className)}\n {...props}\n />\n )\n}\n\nexport {\n DropdownMenu,\n DropdownMenuPortal,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuLabel,\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubTrigger,\n DropdownMenuSubContent,\n}\n","import * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Textarea({ className, ...props }: React.ComponentProps<\"textarea\">) {\n return (\n <textarea\n data-slot=\"textarea\"\n className={cn(\n \"border-input dark:bg-input/30 focus-visible:border-ring focus-visible:ring-ring/30 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 disabled:bg-input/50 dark:disabled:bg-input/80 rounded-lg border bg-transparent px-2.5 py-2 text-base transition-colors focus-visible:ring-2 aria-invalid:ring-2 md:text-sm placeholder:text-muted-foreground flex field-sizing-content min-h-16 w-full outline-none disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Textarea }\n","import { DeviceStatusBadge } from '@/components/device-status-badge';\nimport { useTmuxStore } from '@/stores/tmux';\nimport { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';\nimport type { CreateDeviceRequest, Device, UpdateDeviceRequest } from '@tmex/shared';\n\ntype DeviceListItem = Device & {\n lastError?: string | null;\n lastErrorType?: string | null;\n};\nimport { Globe, Monitor, MoreHorizontal, Pencil, Plus, Trash2, Zap } from 'lucide-react';\nimport { type FormEvent, useState, useEffect } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Link } from 'react-router';\nimport { toast } from 'sonner';\nimport { Badge } from '@/components/ui/badge';\nimport { Button, buttonVariants } from '@/components/ui/button';\nimport { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card';\nimport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogMedia,\n AlertDialogTitle,\n} from '@/components/ui/alert-dialog';\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n} from '@/components/ui/dialog';\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '@/components/ui/dropdown-menu';\nimport { Input } from '@/components/ui/input';\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@/components/ui/select';\nimport { Separator } from '@/components/ui/separator';\nimport { Textarea } from '@/components/ui/textarea';\n\ntype DeviceFormValues = {\n name: string;\n type: 'local' | 'ssh';\n host: string;\n port: number;\n username: string;\n sshConfigRef: string;\n session: string;\n authMode: CreateDeviceRequest['authMode'];\n password: string;\n privateKey: string;\n privateKeyPassphrase: string;\n};\n\nfunction normalizeText(value: string): string | undefined {\n const trimmed = value.trim();\n return trimmed ? trimmed : undefined;\n}\n\nfunction createDefaultFormValues(device?: Device): DeviceFormValues {\n if (!device) {\n return {\n name: '',\n type: 'local',\n host: '',\n port: 22,\n username: '',\n sshConfigRef: '',\n session: 'tmex',\n authMode: 'auto',\n password: '',\n privateKey: '',\n privateKeyPassphrase: '',\n };\n }\n\n return {\n name: device.name,\n type: device.type,\n host: device.host ?? '',\n port: device.port ?? 22,\n username: device.username ?? '',\n sshConfigRef: device.sshConfigRef ?? '',\n session: device.session ?? 'tmex',\n authMode: device.type === 'local' ? 'auto' : device.authMode,\n password: '',\n privateKey: '',\n privateKeyPassphrase: '',\n };\n}\n\nfunction buildCreatePayload(values: DeviceFormValues): CreateDeviceRequest {\n if (values.type === 'local') {\n return {\n name: values.name.trim(),\n type: 'local',\n session: normalizeText(values.session) ?? 'tmex',\n authMode: 'auto',\n };\n }\n\n const payload: CreateDeviceRequest = {\n name: values.name.trim(),\n type: 'ssh',\n host: normalizeText(values.host),\n port: values.port,\n username: normalizeText(values.username),\n sshConfigRef: normalizeText(values.sshConfigRef),\n session: normalizeText(values.session) ?? 'tmex',\n authMode: values.authMode,\n };\n\n if (values.authMode === 'password') {\n payload.password = values.password;\n }\n\n if (values.authMode === 'key') {\n payload.privateKey = values.privateKey;\n payload.privateKeyPassphrase = values.privateKeyPassphrase || undefined;\n }\n\n return payload;\n}\n\nfunction buildUpdatePayload(values: DeviceFormValues): UpdateDeviceRequest {\n if (values.type === 'local') {\n return {\n name: values.name.trim(),\n session: normalizeText(values.session) ?? 'tmex',\n authMode: 'auto',\n };\n }\n\n const payload: UpdateDeviceRequest = {\n name: values.name.trim(),\n host: normalizeText(values.host),\n port: values.port,\n username: normalizeText(values.username),\n sshConfigRef: normalizeText(values.sshConfigRef),\n session: normalizeText(values.session) ?? 'tmex',\n authMode: values.authMode,\n };\n\n if (values.authMode === 'password' && values.password) {\n payload.password = values.password;\n }\n\n if (values.authMode === 'key' && values.privateKey) {\n payload.privateKey = values.privateKey;\n payload.privateKeyPassphrase = values.privateKeyPassphrase || undefined;\n }\n\n return payload;\n}\n\nasync function parseApiError(res: Response, fallback: string): Promise<string> {\n try {\n const payload = (await res.json()) as { error?: string };\n return payload.error ?? fallback;\n } catch {\n return fallback;\n }\n}\n\nexport default function DevicesPage() {\n const { t } = useTranslation();\n const [showAddModal, setShowAddModal] = useState(false);\n const [editingDevice, setEditingDevice] = useState<Device | null>(null);\n const [deleteCandidate, setDeleteCandidate] = useState<Device | null>(null);\n const queryClient = useQueryClient();\n\n // Listen for open add device event from AppHeader\n useEffect(() => {\n const handleOpenAddDevice = () => setShowAddModal(true);\n window.addEventListener('tmex:open-add-device', handleOpenAddDevice);\n return () => window.removeEventListener('tmex:open-add-device', handleOpenAddDevice);\n }, []);\n\n const { data, isLoading, isError } = useQuery({\n queryKey: ['devices'],\n queryFn: async () => {\n const res = await fetch('/api/devices');\n if (!res.ok) throw new Error(t('device.loadFailed'));\n return res.json() as Promise<{ devices: DeviceListItem[] }>;\n },\n throwOnError: false,\n });\n\n const hydrateDeviceErrors = useTmuxStore((state) => state.hydrateDeviceErrors);\n\n useEffect(() => {\n if (!data?.devices) return;\n hydrateDeviceErrors(\n data.devices.map((d) => ({\n deviceId: d.id,\n lastError: d.lastError ?? null,\n lastErrorType: d.lastErrorType ?? null,\n }))\n );\n }, [data, hydrateDeviceErrors]);\n\n const deleteDevice = useMutation({\n mutationFn: async (id: string) => {\n const res = await fetch(`/api/devices/${id}`, {\n method: 'DELETE',\n });\n if (!res.ok) throw new Error(t('device.deleteFailed'));\n },\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['devices'] });\n toast.success(t('common.success'));\n },\n onError: (err) => {\n toast.error(err instanceof Error ? err.message : t('common.error'));\n },\n });\n\n const devices = data?.devices ?? [];\n\n return (\n <div className=\"mx-auto flex w-full max-w-6xl flex-col gap-3 p-3 pb-[calc(1rem+env(safe-area-inset-bottom))] sm:gap-4 sm:p-5\" data-testid=\"devices-page\">\n {isLoading ? (\n <Card>\n <CardContent className=\"py-16 text-center text-sm text-muted-foreground\">{t('common.loading')}</CardContent>\n </Card>\n ) : isError ? (\n <Card>\n <CardContent className=\"py-16 text-center text-sm text-destructive\">{t('device.loadFailed')}</CardContent>\n </Card>\n ) : devices.length === 0 ? (\n <Card>\n <CardContent className=\"space-y-4 py-14 text-center\">\n <div className=\"mx-auto flex h-12 w-12 items-center justify-center rounded-xl border border-border bg-muted\">\n <Monitor className=\"h-6 w-6 text-muted-foreground\" />\n </div>\n <div className=\"space-y-1\">\n <h2 className=\"text-lg font-medium\">{t('device.noDevices')}</h2>\n <p className=\"text-sm text-muted-foreground\">{t('device.addDevice')}</p>\n </div>\n <Button variant=\"default\" data-testid=\"devices-add-empty\" onClick={() => setShowAddModal(true)}>\n <Plus className=\"h-4 w-4\" />\n {t('device.addDevice')}\n </Button>\n </CardContent>\n </Card>\n ) : (\n <div className=\"grid gap-3 lg:grid-cols-2\">\n {devices.map((device) => (\n <DeviceCard\n key={device.id}\n device={device}\n onEdit={() => setEditingDevice(device)}\n onDelete={() => setDeleteCandidate(device)}\n />\n ))}\n </div>\n )}\n\n {showAddModal && <DeviceDialog mode=\"create\" onClose={() => setShowAddModal(false)} />}\n {editingDevice && (\n <DeviceDialog mode=\"edit\" device={editingDevice} onClose={() => setEditingDevice(null)} />\n )}\n\n <AlertDialog open={deleteCandidate !== null} onOpenChange={(open) => !open && setDeleteCandidate(null)}>\n <AlertDialogContent>\n <AlertDialogHeader>\n <AlertDialogMedia className=\"bg-destructive/10\">\n <Trash2 className=\"h-5 w-5 text-destructive\" />\n </AlertDialogMedia>\n <AlertDialogTitle>{t('device.deleteConfirm')}</AlertDialogTitle>\n <AlertDialogDescription>\n {t('device.deleteDescription', { name: deleteCandidate?.name ?? '' })}\n </AlertDialogDescription>\n </AlertDialogHeader>\n <AlertDialogFooter>\n <AlertDialogCancel>{t('common.cancel')}</AlertDialogCancel>\n <AlertDialogAction\n variant=\"destructive\"\n disabled={!deleteCandidate || deleteDevice.isPending}\n onClick={() => {\n if (!deleteCandidate) return;\n deleteDevice.mutate(deleteCandidate.id);\n setDeleteCandidate(null);\n }}\n >\n {t('common.delete')}\n </AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n </div>\n );\n}\n\ninterface DeviceCardProps {\n device: Device;\n onEdit: () => void;\n onDelete: () => void;\n}\n\nfunction DeviceCard({ device, onEdit, onDelete }: DeviceCardProps) {\n const { t } = useTranslation();\n\n const icon =\n device.type === 'local' ? <Monitor className=\"h-4 w-4\" /> : <Globe className=\"h-4 w-4\" />;\n const subtitle =\n device.type === 'local'\n ? t('device.typeLocal')\n : `${device.username ?? '-'}@${device.host ?? '-'}:${device.port ?? 22}`;\n\n const testConnection = useMutation({\n mutationFn: async () => {\n const res = await fetch(`/api/devices/${device.id}/test-connection`, {\n method: 'POST',\n });\n\n let payload: unknown = null;\n try {\n payload = (await res.json()) as unknown;\n } catch {\n payload = null;\n }\n\n if (!res.ok) {\n const err = payload as { error?: string } | null;\n throw new Error(err?.error ?? t('common.error'));\n }\n\n return payload as { success?: boolean; tmuxAvailable?: boolean; message?: string };\n },\n onSuccess: (payload) => {\n toast.success(payload.message ?? t('common.success'));\n },\n onError: (err) => {\n toast.error(err instanceof Error ? err.message : t('common.error'));\n },\n });\n\n return (\n <Card data-testid=\"device-card\" data-device-id={device.id} data-device-name={device.name} className=\"overflow-hidden\">\n <CardHeader className=\"space-y-2 pb-2\">\n <div className=\"flex items-start justify-between gap-2\">\n <div className=\"flex min-w-0 items-center gap-2.5\">\n <div className=\"flex h-8 w-8 shrink-0 items-center justify-center rounded-md border border-border bg-muted text-muted-foreground\">\n {icon}\n </div>\n <div className=\"min-w-0 space-y-0.5\">\n <CardTitle className=\"line-clamp-1 text-sm\" title={device.name}>\n {device.name}\n </CardTitle>\n <CardDescription className=\"line-clamp-1 text-xs\">{subtitle}</CardDescription>\n </div>\n </div>\n\n <div className=\"flex shrink-0 items-center gap-1\">\n <DropdownMenu>\n <DropdownMenuTrigger\n render={\n <Button\n variant=\"ghost\"\n size=\"icon-sm\"\n data-testid={`device-card-actions-${device.id}`}\n aria-label={t('common.edit')}\n title={t('common.edit')}\n />\n }\n >\n <MoreHorizontal className=\"h-4 w-4\" />\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n <DropdownMenuItem\n data-testid={`device-card-edit-${device.id}`}\n onClick={onEdit}\n >\n <Pencil className=\"h-4 w-4\" />\n {t('common.edit')}\n </DropdownMenuItem>\n {device.type === 'ssh' && (\n <DropdownMenuItem\n data-testid={`device-card-test-${device.id}`}\n onClick={() => testConnection.mutate()}\n disabled={testConnection.isPending}\n >\n <Zap className=\"h-4 w-4\" />\n {t('common.test')}\n </DropdownMenuItem>\n )}\n <DropdownMenuSeparator />\n <DropdownMenuItem\n data-testid={`device-card-delete-${device.id}`}\n variant=\"destructive\"\n onClick={onDelete}\n >\n <Trash2 className=\"h-4 w-4\" />\n {t('common.delete')}\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n </div>\n\n <div className=\"flex flex-wrap items-center gap-1.5\">\n <Badge variant=\"outline\" className=\"text-[11px] font-normal\">\n {device.type === 'local' ? t('device.typeLocal') : t('device.typeSSHBadge')}\n </Badge>\n {device.session && (\n <Badge variant=\"outline\" className=\"text-[11px] font-normal\">\n {device.session}\n </Badge>\n )}\n <DeviceStatusBadge deviceId={device.id} />\n </div>\n </CardHeader>\n\n <CardContent className=\"pt-0\">\n <Separator className=\"mb-2\" />\n <div className=\"flex items-center justify-end\">\n <Link\n to={`/devices/${device.id}`}\n data-testid={`device-card-connect-${device.id}`}\n className={buttonVariants({ variant: 'default', size: 'sm' })}\n >\n {t('device.connect')}\n </Link>\n </div>\n </CardContent>\n </Card>\n );\n}\n\ninterface DeviceDialogProps {\n mode: 'create' | 'edit';\n device?: Device;\n onClose: () => void;\n}\n\nfunction DeviceDialog({ mode, device, onClose }: DeviceDialogProps) {\n const { t } = useTranslation();\n const queryClient = useQueryClient();\n const [formData, setFormData] = useState<DeviceFormValues>(createDefaultFormValues(device));\n const [isSubmitting, setIsSubmitting] = useState(false);\n\n const isEditMode = mode === 'edit';\n const isSSH = formData.type === 'ssh';\n\n const createDevice = useMutation({\n mutationFn: async (payload: CreateDeviceRequest) => {\n const res = await fetch('/api/devices', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(payload),\n });\n\n if (!res.ok) {\n throw new Error(await parseApiError(res, t('device.createFailed')));\n }\n\n return res.json();\n },\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['devices'] });\n toast.success(t('common.success'));\n onClose();\n },\n onError: (err) => {\n toast.error(err instanceof Error ? err.message : t('common.error'));\n },\n });\n\n const updateDevice = useMutation({\n mutationFn: async (payload: UpdateDeviceRequest) => {\n if (!device) {\n throw new Error(t('apiError.deviceNotFound'));\n }\n\n const res = await fetch(`/api/devices/${device.id}`, {\n method: 'PATCH',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(payload),\n });\n\n if (!res.ok) {\n throw new Error(await parseApiError(res, t('device.updateFailed')));\n }\n\n return res.json();\n },\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['devices'] });\n toast.success(t('common.success'));\n onClose();\n },\n onError: (err) => {\n toast.error(err instanceof Error ? err.message : t('common.error'));\n },\n });\n\n const handleSubmit = async (e: FormEvent) => {\n e.preventDefault();\n setIsSubmitting(true);\n\n try {\n if (mode === 'create') {\n await createDevice.mutateAsync(buildCreatePayload(formData));\n } else {\n await updateDevice.mutateAsync(buildUpdatePayload(formData));\n }\n } catch {\n // handled by mutation onError\n } finally {\n setIsSubmitting(false);\n }\n };\n\n const deviceNameInputId = `${mode}-device-name`;\n const deviceTypeSelectId = `${mode}-device-type`;\n const sshHostInputId = `${mode}-device-host`;\n const sshPortInputId = `${mode}-device-port`;\n const sshUsernameInputId = `${mode}-device-username`;\n const sessionInputId = `${mode}-device-session`;\n const authModeSelectId = `${mode}-device-auth-mode`;\n const passwordInputId = `${mode}-device-password`;\n const privateKeyTextareaId = `${mode}-device-private-key`;\n const privateKeyPassphraseInputId = `${mode}-device-private-key-passphrase`;\n\n const typeLabels: Record<string, string> = {\n local: t('device.typeLocal'),\n ssh: t('device.typeSSH'),\n };\n const authLabels: Record<string, string> = {\n password: t('device.authPassword'),\n key: t('device.authKey'),\n agent: t('device.authAgent'),\n configRef: 'SSH Config',\n };\n\n const sectionHeading = (text: string) => (\n <div className=\"text-[11px] font-semibold uppercase tracking-wider text-muted-foreground\">\n {text}\n </div>\n );\n\n const fieldLabel = (htmlFor: string, text: string, required?: boolean) => (\n <label className=\"block text-xs font-medium text-foreground\" htmlFor={htmlFor}>\n {text}\n {required && <span className=\"ml-0.5 text-destructive\">*</span>}\n </label>\n );\n\n return (\n <Dialog open={true} onOpenChange={(open) => !open && onClose()}>\n <DialogContent data-testid=\"device-dialog\" className=\"w-full max-w-2xl\">\n <DialogHeader>\n <DialogTitle>{isEditMode ? t('device.editDevice') : t('device.addDevice')}</DialogTitle>\n <DialogDescription>\n {isEditMode ? t('device.editDeviceDescription') : t('device.addDeviceDescription')}\n </DialogDescription>\n </DialogHeader>\n\n <form onSubmit={handleSubmit} className=\"space-y-4\">\n <div className=\"-mr-2 max-h-[min(70vh,720px)] space-y-5 overflow-y-auto pr-2\">\n <section className=\"space-y-2.5\">\n {sectionHeading(t('device.sectionBasic'))}\n <div className=\"grid gap-3 sm:grid-cols-2\">\n <div className=\"space-y-1.5 sm:col-span-2\">\n {fieldLabel(deviceNameInputId, t('device.name'), true)}\n <Input\n id={deviceNameInputId}\n data-testid=\"device-name-input\"\n type=\"text\"\n value={formData.name}\n onChange={(e) => setFormData((d) => ({ ...d, name: e.target.value }))}\n placeholder={t('device.namePlaceholder')}\n required\n />\n </div>\n\n <div className=\"space-y-1.5\">\n {fieldLabel(deviceTypeSelectId, t('device.type'))}\n <Select\n value={formData.type}\n onValueChange={(nextValue) => {\n if (!nextValue) return;\n const nextType = nextValue as 'local' | 'ssh';\n setFormData((d) => ({\n ...d,\n type: nextType,\n authMode:\n nextType === 'local'\n ? 'auto'\n : d.authMode === 'auto'\n ? 'password'\n : d.authMode,\n }));\n }}\n disabled={isEditMode}\n >\n <SelectTrigger\n id={deviceTypeSelectId}\n data-testid=\"device-type-select\"\n className=\"w-full\"\n >\n <SelectValue placeholder={t('device.type')}>\n {(value) => typeLabels[value as string] ?? ''}\n </SelectValue>\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"local\">{t('device.typeLocal')}</SelectItem>\n <SelectItem value=\"ssh\">{t('device.typeSSH')}</SelectItem>\n </SelectContent>\n </Select>\n </div>\n\n <div className=\"space-y-1.5\">\n {fieldLabel(sessionInputId, t('device.session'))}\n <Input\n id={sessionInputId}\n data-testid=\"device-session-input\"\n type=\"text\"\n value={formData.session}\n onChange={(e) => setFormData((d) => ({ ...d, session: e.target.value }))}\n placeholder={t('device.sessionPlaceholder')}\n />\n </div>\n </div>\n </section>\n\n {isSSH && (\n <>\n <section className=\"space-y-2.5\">\n {sectionHeading(t('device.sectionConnection'))}\n <div className=\"grid gap-3 sm:grid-cols-3\">\n <div className=\"space-y-1.5 sm:col-span-2\">\n {fieldLabel(sshHostInputId, t('device.host'))}\n <Input\n id={sshHostInputId}\n type=\"text\"\n value={formData.host}\n onChange={(e) => setFormData((d) => ({ ...d, host: e.target.value }))}\n placeholder={t('device.hostPlaceholder')}\n />\n </div>\n\n <div className=\"space-y-1.5\">\n {fieldLabel(sshPortInputId, t('device.port'))}\n <Input\n id={sshPortInputId}\n type=\"number\"\n value={formData.port}\n onChange={(e) =>\n setFormData((d) => ({\n ...d,\n port: Number.parseInt(e.target.value || '22', 10),\n }))\n }\n min={1}\n max={65535}\n />\n </div>\n\n <div className=\"space-y-1.5 sm:col-span-2\">\n {fieldLabel(sshUsernameInputId, t('device.username'))}\n <Input\n id={sshUsernameInputId}\n type=\"text\"\n value={formData.username}\n onChange={(e) => setFormData((d) => ({ ...d, username: e.target.value }))}\n placeholder={t('device.usernamePlaceholder')}\n />\n </div>\n\n <div className=\"space-y-1.5\">\n {fieldLabel(`${mode}-device-ssh-config-ref`, 'SSH Config')}\n <Input\n id={`${mode}-device-ssh-config-ref`}\n type=\"text\"\n value={formData.sshConfigRef}\n onChange={(e) =>\n setFormData((d) => ({ ...d, sshConfigRef: e.target.value }))\n }\n placeholder=\"~/.ssh/config\"\n />\n </div>\n </div>\n </section>\n\n <section className=\"space-y-2.5\">\n {sectionHeading(t('device.sectionAuth'))}\n <div className=\"space-y-3\">\n <div className=\"space-y-1.5\">\n {fieldLabel(authModeSelectId, t('device.authMode'))}\n <Select\n value={formData.authMode}\n onValueChange={(nextValue) => {\n if (!nextValue) return;\n setFormData((d) => ({\n ...d,\n authMode: nextValue as CreateDeviceRequest['authMode'],\n }));\n }}\n >\n <SelectTrigger id={authModeSelectId} className=\"w-full\">\n <SelectValue placeholder={t('device.authMode')}>\n {(value) => authLabels[value as string] ?? ''}\n </SelectValue>\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"password\">{t('device.authPassword')}</SelectItem>\n <SelectItem value=\"key\">{t('device.authKey')}</SelectItem>\n <SelectItem value=\"agent\">{t('device.authAgent')}</SelectItem>\n <SelectItem value=\"configRef\">SSH Config</SelectItem>\n </SelectContent>\n </Select>\n </div>\n\n {formData.authMode === 'password' && (\n <div className=\"space-y-1.5\">\n {fieldLabel(passwordInputId, t('device.password'))}\n <Input\n id={passwordInputId}\n type=\"password\"\n value={formData.password}\n onChange={(e) =>\n setFormData((d) => ({ ...d, password: e.target.value }))\n }\n />\n </div>\n )}\n\n {formData.authMode === 'key' && (\n <>\n <div className=\"space-y-1.5\">\n {fieldLabel(privateKeyTextareaId, t('device.privateKey'))}\n <Textarea\n id={privateKeyTextareaId}\n value={formData.privateKey}\n onChange={(e) =>\n setFormData((d) => ({ ...d, privateKey: e.target.value }))\n }\n className=\"h-28 font-mono text-xs\"\n placeholder={t('device.privateKeyPlaceholder')}\n />\n </div>\n <div className=\"space-y-1.5\">\n {fieldLabel(privateKeyPassphraseInputId, t('device.passphrase'))}\n <Input\n id={privateKeyPassphraseInputId}\n type=\"password\"\n value={formData.privateKeyPassphrase}\n onChange={(e) =>\n setFormData((d) => ({\n ...d,\n privateKeyPassphrase: e.target.value,\n }))\n }\n />\n </div>\n </>\n )}\n </div>\n </section>\n </>\n )}\n </div>\n\n <DialogFooter>\n <Button type=\"button\" variant=\"outline\" onClick={onClose}>\n {t('common.cancel')}\n </Button>\n <Button\n type=\"submit\"\n variant=\"default\"\n data-testid=\"device-dialog-save\"\n disabled={isSubmitting}\n >\n {isSubmitting ? t('common.saving') : t('common.save')}\n </Button>\n </DialogFooter>\n </form>\n </DialogContent>\n </Dialog>\n );\n}\n\n// Page title component\nexport function PageTitle() {\n const { t } = useTranslation();\n return <>{t('sidebar.manageDevices')}</>;\n}\n\n// Page actions component\nexport function PageActions() {\n const { t } = useTranslation();\n \n const handleAdd = () => {\n window.dispatchEvent(new CustomEvent('tmex:open-add-device'));\n };\n \n return (\n <Button\n variant=\"ghost\"\n size=\"icon-sm\"\n data-testid=\"devices-add\"\n onClick={handleAdd}\n aria-label={t('sidebar.addDevice')}\n title={t('sidebar.addDevice')}\n >\n <Plus className=\"h-4 w-4\" />\n </Button>\n );\n}\n"],"names":["__iconNode","Ellipsis","createLucideIcon","Pencil","Zap","Dialog","props","DialogPrimitive.Root","DialogPortal","DialogPrimitive.Portal","DialogOverlay","className","jsx","DialogPrimitive.Backdrop","cn","DialogContent","children","showCloseButton","jsxs","DialogPrimitive.Popup","DialogPrimitive.Close","Button","XIcon","DialogHeader","DialogFooter","DialogTitle","DialogPrimitive.Title","DialogDescription","DialogPrimitive.Description","MenuPositionerContext","React.createContext","useMenuPositionerContext","optional","context","React.useContext","_formatErrorMessage","MenuRootContext","useMenuRootContext","ContextMenuRootContext","useContextMenuRootContext","useMenuItemCommonProps","params","closeOnClick","highlighted","id","nodeId","store","itemRef","itemMetadata","menuEvents","contextMenuContext","isContextMenu","React.useMemo","event","REASONS.itemPress","initialCursorPoint","REGULAR_ITEM","useMenuItem","disabled","nativeButton","React.useRef","getButtonProps","buttonRef","useButton","commonProps","getItemProps","React.useCallback","externalProps","mergeProps","mergedRef","useMergedRefs","MenuItem","React.forwardRef","componentProps","forwardedRef","render","idProp","label","elementProps","listItem","useCompositeListItem","menuPositionerContext","useBaseUiId","itemProps","useRenderElement","stateAttributesMapping","baseMapping","transitionStatusMapping","MenuPopup","finalFocus","side","align","insideToolbar","useToolbarRootContext","open","transitionStatus","popupProps","mounted","instantType","triggerElement","parent","lastOpenChangeReason","rootId","floatingContext","floatingTreeRoot","closeDelay","activeTriggerElement","useOpenChangeComplete","_b","_a","React.useEffect","handleClose","createChangeEventDetails","hoverEnabled","useHoverFloatingInteraction","state","element","COMPOSITE_KEYS","getDisabledMountTransitionStyles","returnFocus","REASONS.outsidePress","FloatingFocusManager","MenuPortalContext","useMenuPortalContext","value","MenuPortal","keepMounted","portalProps","_jsx","FloatingPortal","MenuPositioner","anchorProp","positionMethodProp","alignProp","sideOffsetProp","alignOffsetProp","collisionBoundary","collisionPadding","arrowPadding","sticky","disableAnchorTracking","collisionAvoidanceProp","DROPDOWN_COLLISION_AVOIDANCE","floatingRootContext","modal","floatingNodeId","floatingParentNodeId","anchor","sideOffset","alignOffset","collisionAvoidance","computedSide","computedAlign","POPUP_COLLISION_AVOIDANCE","contextMenu","positioner","useAnchorPositioning","positionerProps","hiddenStyles","onMenuOpenChange","details","REASONS.siblingOpen","onParentClose","reason","onItemHover","eventDetails","contextValue","popupStateMapping","shouldRenderBackdrop","REASONS.triggerHover","backdropCutout","_jsxs","InternalBackdrop","inertValue","FloatingNode","CompositeList","MenubarContext","useMenubarContext","selectors","popupStoreSelectors","createSelector","itemIndex","MenuStore","ReactStore","initialState","createInitialState","React.createRef","PopupTriggerMap","__publicField","externalStore","internalStore","useRefWithInit","createInitialPopupStoreState","FloatingTreeStore","EMPTY_OBJECT","MenuSubmenuRootContext","useMenuSubmenuRootContext","MenuRoot","fastComponent","openProp","onOpenChange","onOpenChangeComplete","defaultOpen","disabledProp","modalProp","loopFocus","orientation","actionsRef","closeParentOnEsc","handle","triggerIdProp","defaultTriggerIdProp","highlightItemOnHover","parentMenuRootContext","menubarContext","isSubmenu","parentFromContext","useOnFirstRender","floatingNodeIdFromContext","useFloatingNodeId","floatingParentNodeIdFromContext","useFloatingParentNodeId","useIsoLayoutEffect","positionerElement","activeIndex","payload","openEventRef","nested","floatingEvents","useId","openMethod","interactionTypeProps","resetOpenInteractionType","useOpenInteractionType","useImplicitActiveTrigger","forceUnmount","useOpenStateTransitions","allowOutsidePressDismissalRef","allowOutsidePressDismissalTimeout","useTimeout","useScrollLock","allowTouchToCloseRef","allowTouchToCloseTimeout","setOpen","useStableCallback","nextOpen","nativeEvent","activeOption","REASONS.triggerFocus","isKeyboardClick","REASONS.triggerPress","isDismissClose","REASONS.escapeKey","updatedState","newTriggerId","REASONS.focusOut","REASONS.listNavigation","createMenuEventDetails","handleImperativeClose","REASONS.imperativeAction","React.useImperativeHandle","ctx","useSyncedFloatingRootContext","handleSetOpenEvent","dismiss","useDismiss","role","useRole","direction","useDirection","setActiveIndex","index","listNavigation","useListNavigation","EMPTY_ARRAY","onTypingChange","nextTyping","typeahead","useTypeahead","TYPEAHEAD_RESET_MS","getReferenceProps","getFloatingProps","getTriggerProps","useInteractions","activeTriggerProps","mergedProps","inactiveTriggerProps","triggerProps","relay","content","FloatingTree","useCompositeItem","highlightedIndex","onHighlightedIndexChange","useCompositeRootContext","ref","isHighlighted","item","CompositeItem","refs","metadata","tag","compositeProps","compositeRef","findRootOwnerId","node","isHTMLElement","isLastTraversableNode","getParentNode","useMixedToggleClickHandler","enabled","mouseDownAction","ignoreClickRef","ownerDocument","BOUNDARY_OFFSET","MenuTrigger","fastComponentRef","openOnHoverProp","delay","rootContext","thisTriggerId","isTriggerActive","isOpenedByThisTrigger","triggerElementRef","useMenuParent","compositeRootContext","floatingTreeRootFromContext","useFloatingTree","registerTrigger","isMountedByThisTrigger","useTriggerDataForwarding","isInMenubar","rootDisabled","triggerRef","allowMouseUpTriggerTimeout","handleDocumentMouseUp","mouseEvent","mouseUpTarget","contains","bounds","getPseudoElementBounds","REASONS.cancelOpen","parentMenubarHasSubmenuOpen","hoverProps","useHoverReferenceInteraction","safePolygon","stickIfOpen","useStickIfOpen","click","useClick","focus","useFocus","mixedToggleHandlers","localInteractionProps","rootTriggerProps","preFocusGuardRef","handlePreFocusGuardFocus","ReactDOM.flushSync","previousTabbable","getTabbableBeforeElement","handleFocusTargetFocus","currentPositionerElement","isOutsideEvent","nextTabbable","getTabbableAfterElement","prevTabbable","getNextTabbable","pressableTriggerOpenStateMapping","React.Fragment","FocusGuard","openReason","stickIfOpenTimeout","setStickIfOpen","React.useState","PATIENT_CLICK_THRESHOLD","parentContext","DropdownMenu","MenuPrimitive.Root","DropdownMenuTrigger","MenuPrimitive.Trigger","DropdownMenuContent","MenuPrimitive.Portal","MenuPrimitive.Positioner","MenuPrimitive.Popup","DropdownMenuItem","inset","variant","MenuPrimitive.Item","DropdownMenuSeparator","MenuPrimitive.Separator","Textarea","normalizeText","trimmed","createDefaultFormValues","device","buildCreatePayload","values","buildUpdatePayload","parseApiError","res","fallback","DevicesPage","t","useTranslation","showAddModal","setShowAddModal","useState","editingDevice","setEditingDevice","deleteCandidate","setDeleteCandidate","queryClient","useQueryClient","useEffect","handleOpenAddDevice","data","isLoading","isError","useQuery","hydrateDeviceErrors","useTmuxStore","d","deleteDevice","useMutation","toast","err","devices","Card","CardContent","Monitor","Plus","DeviceCard","DeviceDialog","AlertDialog","AlertDialogContent","AlertDialogHeader","AlertDialogMedia","Trash2","AlertDialogTitle","AlertDialogDescription","AlertDialogFooter","AlertDialogCancel","AlertDialogAction","onEdit","onDelete","icon","Globe","subtitle","testConnection","CardHeader","CardTitle","CardDescription","MoreHorizontal","Badge","DeviceStatusBadge","Separator","Link","buttonVariants","mode","onClose","formData","setFormData","isSubmitting","setIsSubmitting","isEditMode","isSSH","createDevice","updateDevice","handleSubmit","e","deviceNameInputId","deviceTypeSelectId","sshHostInputId","sshPortInputId","sshUsernameInputId","sessionInputId","authModeSelectId","passwordInputId","privateKeyTextareaId","privateKeyPassphraseInputId","typeLabels","authLabels","sectionHeading","text","fieldLabel","htmlFor","required","Input","Select","nextValue","nextType","SelectTrigger","SelectValue","SelectContent","SelectItem","Fragment","PageTitle","PageActions","handleAdd"],"mappings":"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","x_google_ignoreList":[0,1,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22]}
|
|
1
|
+
{"version":3,"file":"DevicesPage-_g8yXgKX.js","sources":["../../../../node_modules/.bun/lucide-react@0.564.0+b1ab299f0a400331/node_modules/lucide-react/dist/esm/icons/ellipsis.js","../../../../node_modules/.bun/lucide-react@0.564.0+b1ab299f0a400331/node_modules/lucide-react/dist/esm/icons/pencil.js","../../../../node_modules/.bun/lucide-react@0.564.0+b1ab299f0a400331/node_modules/lucide-react/dist/esm/icons/zap.js","../../src/components/ui/dialog.tsx","../../../../node_modules/.bun/@base-ui+react@1.2.0+ca9c98c9db1b76d1/node_modules/@base-ui/react/esm/menu/positioner/MenuPositionerContext.js","../../../../node_modules/.bun/@base-ui+react@1.2.0+ca9c98c9db1b76d1/node_modules/@base-ui/react/esm/menu/root/MenuRootContext.js","../../../../node_modules/.bun/@base-ui+react@1.2.0+ca9c98c9db1b76d1/node_modules/@base-ui/react/esm/context-menu/root/ContextMenuRootContext.js","../../../../node_modules/.bun/@base-ui+react@1.2.0+ca9c98c9db1b76d1/node_modules/@base-ui/react/esm/menu/item/useMenuItemCommonProps.js","../../../../node_modules/.bun/@base-ui+react@1.2.0+ca9c98c9db1b76d1/node_modules/@base-ui/react/esm/menu/item/useMenuItem.js","../../../../node_modules/.bun/@base-ui+react@1.2.0+ca9c98c9db1b76d1/node_modules/@base-ui/react/esm/menu/item/MenuItem.js","../../../../node_modules/.bun/@base-ui+react@1.2.0+ca9c98c9db1b76d1/node_modules/@base-ui/react/esm/menu/popup/MenuPopup.js","../../../../node_modules/.bun/@base-ui+react@1.2.0+ca9c98c9db1b76d1/node_modules/@base-ui/react/esm/menu/portal/MenuPortalContext.js","../../../../node_modules/.bun/@base-ui+react@1.2.0+ca9c98c9db1b76d1/node_modules/@base-ui/react/esm/menu/portal/MenuPortal.js","../../../../node_modules/.bun/@base-ui+react@1.2.0+ca9c98c9db1b76d1/node_modules/@base-ui/react/esm/menu/positioner/MenuPositioner.js","../../../../node_modules/.bun/@base-ui+react@1.2.0+ca9c98c9db1b76d1/node_modules/@base-ui/react/esm/menubar/MenubarContext.js","../../../../node_modules/.bun/@base-ui+react@1.2.0+ca9c98c9db1b76d1/node_modules/@base-ui/react/esm/menu/store/MenuStore.js","../../../../node_modules/.bun/@base-ui+react@1.2.0+ca9c98c9db1b76d1/node_modules/@base-ui/react/esm/menu/submenu-root/MenuSubmenuRootContext.js","../../../../node_modules/.bun/@base-ui+react@1.2.0+ca9c98c9db1b76d1/node_modules/@base-ui/react/esm/menu/root/MenuRoot.js","../../../../node_modules/.bun/@base-ui+react@1.2.0+ca9c98c9db1b76d1/node_modules/@base-ui/react/esm/composite/item/useCompositeItem.js","../../../../node_modules/.bun/@base-ui+react@1.2.0+ca9c98c9db1b76d1/node_modules/@base-ui/react/esm/composite/item/CompositeItem.js","../../../../node_modules/.bun/@base-ui+react@1.2.0+ca9c98c9db1b76d1/node_modules/@base-ui/react/esm/menu/utils/findRootOwnerId.js","../../../../node_modules/.bun/@base-ui+react@1.2.0+ca9c98c9db1b76d1/node_modules/@base-ui/react/esm/utils/useMixedToggleClickHandler.js","../../../../node_modules/.bun/@base-ui+react@1.2.0+ca9c98c9db1b76d1/node_modules/@base-ui/react/esm/menu/trigger/MenuTrigger.js","../../src/components/ui/dropdown-menu.tsx","../../src/components/ui/textarea.tsx","../../src/pages/DevicesPage.tsx"],"sourcesContent":["/**\n * @license lucide-react v0.564.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"1\", key: \"41hilf\" }],\n [\"circle\", { cx: \"19\", cy: \"12\", r: \"1\", key: \"1wjl8i\" }],\n [\"circle\", { cx: \"5\", cy: \"12\", r: \"1\", key: \"1pcz8c\" }]\n];\nconst Ellipsis = createLucideIcon(\"ellipsis\", __iconNode);\n\nexport { __iconNode, Ellipsis as default };\n//# sourceMappingURL=ellipsis.js.map\n","/**\n * @license lucide-react v0.564.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z\",\n key: \"1a8usu\"\n }\n ],\n [\"path\", { d: \"m15 5 4 4\", key: \"1mk7zo\" }]\n];\nconst Pencil = createLucideIcon(\"pencil\", __iconNode);\n\nexport { __iconNode, Pencil as default };\n//# sourceMappingURL=pencil.js.map\n","/**\n * @license lucide-react v0.564.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z\",\n key: \"1xq2db\"\n }\n ]\n];\nconst Zap = createLucideIcon(\"zap\", __iconNode);\n\nexport { __iconNode, Zap as default };\n//# sourceMappingURL=zap.js.map\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Dialog as DialogPrimitive } from \"@base-ui/react/dialog\"\n\nimport { cn } from \"@/lib/utils\"\nimport { Button } from \"@/components/ui/button\"\nimport { XIcon } from \"lucide-react\"\n\nfunction Dialog({ ...props }: DialogPrimitive.Root.Props) {\n return <DialogPrimitive.Root data-slot=\"dialog\" {...props} />\n}\n\nfunction DialogTrigger({ ...props }: DialogPrimitive.Trigger.Props) {\n return <DialogPrimitive.Trigger data-slot=\"dialog-trigger\" {...props} />\n}\n\nfunction DialogPortal({ ...props }: DialogPrimitive.Portal.Props) {\n return <DialogPrimitive.Portal data-slot=\"dialog-portal\" {...props} />\n}\n\nfunction DialogClose({ ...props }: DialogPrimitive.Close.Props) {\n return <DialogPrimitive.Close data-slot=\"dialog-close\" {...props} />\n}\n\nfunction DialogOverlay({\n className,\n ...props\n}: DialogPrimitive.Backdrop.Props) {\n return (\n <DialogPrimitive.Backdrop\n data-slot=\"dialog-overlay\"\n className={cn(\"data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 bg-black/10 duration-100 supports-backdrop-filter:backdrop-blur-xs fixed inset-0 isolate z-50\", className)}\n {...props}\n />\n )\n}\n\nfunction DialogContent({\n className,\n children,\n showCloseButton = true,\n ...props\n}: DialogPrimitive.Popup.Props & {\n showCloseButton?: boolean\n}) {\n return (\n <DialogPortal>\n <DialogOverlay />\n <DialogPrimitive.Popup\n data-slot=\"dialog-content\"\n className={cn(\n \"bg-background data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 ring-foreground/10 grid max-w-[calc(100%-2rem)] gap-4 rounded-xl p-4 text-sm ring-1 duration-100 sm:max-w-sm fixed top-1/2 left-1/2 z-50 w-full -translate-x-1/2 -translate-y-1/2 outline-none\",\n className\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <DialogPrimitive.Close\n data-slot=\"dialog-close\"\n render={\n <Button\n variant=\"ghost\"\n className=\"absolute top-2 right-2\"\n size=\"icon-sm\"\n />\n }\n >\n <XIcon\n />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n )}\n </DialogPrimitive.Popup>\n </DialogPortal>\n )\n}\n\nfunction DialogHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"dialog-header\"\n className={cn(\"gap-2 flex flex-col\", className)}\n {...props}\n />\n )\n}\n\nfunction DialogFooter({\n className,\n showCloseButton = false,\n children,\n ...props\n}: React.ComponentProps<\"div\"> & {\n showCloseButton?: boolean\n}) {\n return (\n <div\n data-slot=\"dialog-footer\"\n className={cn(\n \"bg-muted/50 -mx-4 -mb-4 rounded-b-xl border-t p-4 flex flex-col-reverse gap-2 sm:flex-row sm:justify-end\",\n className\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <DialogPrimitive.Close render={<Button variant=\"outline\" />}>\n Close\n </DialogPrimitive.Close>\n )}\n </div>\n )\n}\n\nfunction DialogTitle({ className, ...props }: DialogPrimitive.Title.Props) {\n return (\n <DialogPrimitive.Title\n data-slot=\"dialog-title\"\n className={cn(\"text-base leading-none font-medium\", className)}\n {...props}\n />\n )\n}\n\nfunction DialogDescription({\n className,\n ...props\n}: DialogPrimitive.Description.Props) {\n return (\n <DialogPrimitive.Description\n data-slot=\"dialog-description\"\n className={cn(\"text-muted-foreground *:[a]:hover:text-foreground text-sm *:[a]:underline *:[a]:underline-offset-3\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n}\n","'use client';\n\nimport _formatErrorMessage from \"@base-ui/utils/formatErrorMessage\";\nimport * as React from 'react';\nexport const MenuPositionerContext = /*#__PURE__*/React.createContext(undefined);\nif (process.env.NODE_ENV !== \"production\") MenuPositionerContext.displayName = \"MenuPositionerContext\";\nexport function useMenuPositionerContext(optional) {\n const context = React.useContext(MenuPositionerContext);\n if (context === undefined && !optional) {\n throw new Error(process.env.NODE_ENV !== \"production\" ? 'Base UI: MenuPositionerContext is missing. MenuPositioner parts must be placed within <Menu.Positioner>.' : _formatErrorMessage(33));\n }\n return context;\n}","'use client';\n\nimport _formatErrorMessage from \"@base-ui/utils/formatErrorMessage\";\nimport * as React from 'react';\nexport const MenuRootContext = /*#__PURE__*/React.createContext(undefined);\nif (process.env.NODE_ENV !== \"production\") MenuRootContext.displayName = \"MenuRootContext\";\nexport function useMenuRootContext(optional) {\n const context = React.useContext(MenuRootContext);\n if (context === undefined && !optional) {\n throw new Error(process.env.NODE_ENV !== \"production\" ? 'Base UI: MenuRootContext is missing. Menu parts must be placed within <Menu.Root>.' : _formatErrorMessage(36));\n }\n return context;\n}","'use client';\n\nimport _formatErrorMessage from \"@base-ui/utils/formatErrorMessage\";\nimport * as React from 'react';\nexport const ContextMenuRootContext = /*#__PURE__*/React.createContext(undefined);\nif (process.env.NODE_ENV !== \"production\") ContextMenuRootContext.displayName = \"ContextMenuRootContext\";\nexport function useContextMenuRootContext(optional = true) {\n const context = React.useContext(ContextMenuRootContext);\n if (context === undefined && !optional) {\n throw new Error(process.env.NODE_ENV !== \"production\" ? 'Base UI: ContextMenuRootContext is missing. ContextMenu parts must be placed within <ContextMenu.Root>.' : _formatErrorMessage(25));\n }\n return context;\n}","'use client';\n\nimport * as React from 'react';\nimport { REASONS } from \"../../utils/reasons.js\";\nimport { useContextMenuRootContext } from \"../../context-menu/root/ContextMenuRootContext.js\";\n/**\n * Returns common props shared by all menu item types.\n * This hook extracts the shared logic for id, role, tabIndex, onMouseMove, onClick, and onMouseUp handlers.\n */\nexport function useMenuItemCommonProps(params) {\n const {\n closeOnClick,\n highlighted,\n id,\n nodeId,\n store,\n itemRef,\n itemMetadata\n } = params;\n const {\n events: menuEvents\n } = store.useState('floatingTreeRoot');\n const contextMenuContext = useContextMenuRootContext(true);\n const isContextMenu = contextMenuContext !== undefined;\n return React.useMemo(() => ({\n id,\n role: 'menuitem',\n tabIndex: highlighted ? 0 : -1,\n onMouseMove(event) {\n if (!nodeId) {\n return;\n }\n\n // Inform the floating tree that a menu item within this menu was hovered/moved over\n // so unrelated descendant submenus can be closed.\n menuEvents.emit('itemhover', {\n nodeId,\n target: event.currentTarget\n });\n },\n onClick(event) {\n if (closeOnClick) {\n menuEvents.emit('close', {\n domEvent: event,\n reason: REASONS.itemPress\n });\n }\n },\n onMouseUp(event) {\n if (contextMenuContext) {\n const initialCursorPoint = contextMenuContext.initialCursorPointRef.current;\n contextMenuContext.initialCursorPointRef.current = null;\n if (isContextMenu && initialCursorPoint && Math.abs(event.clientX - initialCursorPoint.x) <= 1 && Math.abs(event.clientY - initialCursorPoint.y) <= 1) {\n return;\n }\n }\n if (itemRef.current && store.context.allowMouseUpTriggerRef.current && (!isContextMenu || event.button === 2)) {\n // This fires whenever the user clicks on the trigger, moves the cursor, and releases it over the item.\n // We trigger the click and override the `closeOnClick` preference to always close the menu.\n if (!itemMetadata || itemMetadata.type === 'regular-item') {\n itemRef.current.click();\n }\n }\n }\n }), [closeOnClick, highlighted, id, menuEvents, nodeId, store, itemRef, contextMenuContext, isContextMenu, itemMetadata]);\n}","'use client';\n\nimport * as React from 'react';\nimport { useMergedRefs } from '@base-ui/utils/useMergedRefs';\nimport { useButton } from \"../../use-button/index.js\";\nimport { mergeProps } from \"../../merge-props/index.js\";\nimport { useMenuItemCommonProps } from \"./useMenuItemCommonProps.js\";\nexport const REGULAR_ITEM = {\n type: 'regular-item'\n};\nexport function useMenuItem(params) {\n const {\n closeOnClick,\n disabled = false,\n highlighted,\n id,\n store,\n nativeButton,\n itemMetadata,\n nodeId\n } = params;\n const itemRef = React.useRef(null);\n const {\n getButtonProps,\n buttonRef\n } = useButton({\n disabled,\n focusableWhenDisabled: true,\n native: nativeButton\n });\n const commonProps = useMenuItemCommonProps({\n closeOnClick,\n highlighted,\n id,\n nodeId,\n store,\n itemRef,\n itemMetadata\n });\n const getItemProps = React.useCallback(externalProps => {\n return mergeProps(commonProps, {\n onMouseEnter() {\n if (itemMetadata.type !== 'submenu-trigger') {\n return;\n }\n itemMetadata.setActive();\n },\n onKeyUp(event) {\n if (event.key === ' ' && store.context.typingRef.current) {\n event.preventBaseUIHandler();\n }\n }\n }, externalProps, getButtonProps);\n }, [commonProps, getButtonProps, store, itemMetadata]);\n const mergedRef = useMergedRefs(itemRef, buttonRef);\n return React.useMemo(() => ({\n getItemProps,\n itemRef: mergedRef\n }), [getItemProps, mergedRef]);\n}","'use client';\n\nimport * as React from 'react';\nimport { REGULAR_ITEM, useMenuItem } from \"./useMenuItem.js\";\nimport { useMenuRootContext } from \"../root/MenuRootContext.js\";\nimport { useRenderElement } from \"../../utils/useRenderElement.js\";\nimport { useBaseUiId } from \"../../utils/useBaseUiId.js\";\nimport { useCompositeListItem } from \"../../composite/list/useCompositeListItem.js\";\nimport { useMenuPositionerContext } from \"../positioner/MenuPositionerContext.js\";\n\n/**\n * An individual interactive item in the menu.\n * Renders a `<div>` element.\n *\n * Documentation: [Base UI Menu](https://base-ui.com/react/components/menu)\n */\nexport const MenuItem = /*#__PURE__*/React.forwardRef(function MenuItem(componentProps, forwardedRef) {\n const {\n render,\n className,\n id: idProp,\n label,\n nativeButton = false,\n disabled = false,\n closeOnClick = true,\n ...elementProps\n } = componentProps;\n const listItem = useCompositeListItem({\n label\n });\n const menuPositionerContext = useMenuPositionerContext(true);\n const id = useBaseUiId(idProp);\n const {\n store\n } = useMenuRootContext();\n const highlighted = store.useState('isActive', listItem.index);\n const itemProps = store.useState('itemProps');\n const {\n getItemProps,\n itemRef\n } = useMenuItem({\n closeOnClick,\n disabled,\n highlighted,\n id,\n store,\n nativeButton,\n nodeId: menuPositionerContext?.nodeId,\n itemMetadata: REGULAR_ITEM\n });\n const state = {\n disabled,\n highlighted\n };\n return useRenderElement('div', componentProps, {\n state,\n props: [itemProps, elementProps, getItemProps],\n ref: [itemRef, forwardedRef, listItem.ref]\n });\n});\nif (process.env.NODE_ENV !== \"production\") MenuItem.displayName = \"MenuItem\";","'use client';\n\nimport * as React from 'react';\nimport { FloatingFocusManager, useHoverFloatingInteraction } from \"../../floating-ui-react/index.js\";\nimport { useMenuRootContext } from \"../root/MenuRootContext.js\";\nimport { useMenuPositionerContext } from \"../positioner/MenuPositionerContext.js\";\nimport { useRenderElement } from \"../../utils/useRenderElement.js\";\nimport { popupStateMapping as baseMapping } from \"../../utils/popupStateMapping.js\";\nimport { transitionStatusMapping } from \"../../utils/stateAttributesMapping.js\";\nimport { useOpenChangeComplete } from \"../../utils/useOpenChangeComplete.js\";\nimport { createChangeEventDetails } from \"../../utils/createBaseUIEventDetails.js\";\nimport { REASONS } from \"../../utils/reasons.js\";\nimport { useToolbarRootContext } from \"../../toolbar/root/ToolbarRootContext.js\";\nimport { COMPOSITE_KEYS } from \"../../composite/composite.js\";\nimport { getDisabledMountTransitionStyles } from \"../../utils/getDisabledMountTransitionStyles.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst stateAttributesMapping = {\n ...baseMapping,\n ...transitionStatusMapping\n};\n\n/**\n * A container for the menu items.\n * Renders a `<div>` element.\n *\n * Documentation: [Base UI Menu](https://base-ui.com/react/components/menu)\n */\nexport const MenuPopup = /*#__PURE__*/React.forwardRef(function MenuPopup(componentProps, forwardedRef) {\n const {\n render,\n className,\n finalFocus,\n ...elementProps\n } = componentProps;\n const {\n store\n } = useMenuRootContext();\n const {\n side,\n align\n } = useMenuPositionerContext();\n const insideToolbar = useToolbarRootContext(true) != null;\n const open = store.useState('open');\n const transitionStatus = store.useState('transitionStatus');\n const popupProps = store.useState('popupProps');\n const mounted = store.useState('mounted');\n const instantType = store.useState('instantType');\n const triggerElement = store.useState('activeTriggerElement');\n const parent = store.useState('parent');\n const lastOpenChangeReason = store.useState('lastOpenChangeReason');\n const rootId = store.useState('rootId');\n const floatingContext = store.useState('floatingRootContext');\n const floatingTreeRoot = store.useState('floatingTreeRoot');\n const closeDelay = store.useState('closeDelay');\n const activeTriggerElement = store.useState('activeTriggerElement');\n const isContextMenu = parent.type === 'context-menu';\n useOpenChangeComplete({\n open,\n ref: store.context.popupRef,\n onComplete() {\n if (open) {\n store.context.onOpenChangeComplete?.(true);\n }\n }\n });\n React.useEffect(() => {\n function handleClose(event) {\n store.setOpen(false, createChangeEventDetails(event.reason, event.domEvent));\n }\n floatingTreeRoot.events.on('close', handleClose);\n return () => {\n floatingTreeRoot.events.off('close', handleClose);\n };\n }, [floatingTreeRoot.events, store]);\n const hoverEnabled = store.useState('hoverEnabled');\n const disabled = store.useState('disabled');\n useHoverFloatingInteraction(floatingContext, {\n enabled: hoverEnabled && !disabled && !isContextMenu && parent.type !== 'menubar',\n closeDelay\n });\n const state = {\n transitionStatus,\n side,\n align,\n open,\n nested: parent.type === 'menu',\n instant: instantType\n };\n const element = useRenderElement('div', componentProps, {\n state,\n ref: [forwardedRef, store.context.popupRef],\n stateAttributesMapping,\n props: [popupProps, {\n onKeyDown(event) {\n if (insideToolbar && COMPOSITE_KEYS.has(event.key)) {\n event.stopPropagation();\n }\n }\n }, getDisabledMountTransitionStyles(transitionStatus), elementProps, {\n 'data-rootownerid': rootId\n }]\n });\n let returnFocus = parent.type === undefined || isContextMenu;\n if (triggerElement || parent.type === 'menubar' && lastOpenChangeReason !== REASONS.outsidePress) {\n returnFocus = true;\n }\n return /*#__PURE__*/_jsx(FloatingFocusManager, {\n context: floatingContext,\n modal: isContextMenu,\n disabled: !mounted,\n returnFocus: finalFocus === undefined ? returnFocus : finalFocus,\n initialFocus: parent.type !== 'menu',\n restoreFocus: true,\n externalTree: parent.type !== 'menubar' ? floatingTreeRoot : undefined,\n previousFocusableElement: activeTriggerElement,\n nextFocusableElement: parent.type === undefined ? store.context.triggerFocusTargetRef : undefined,\n beforeContentFocusGuardRef: parent.type === undefined ? store.context.beforeContentFocusGuardRef : undefined,\n children: element\n });\n});\nif (process.env.NODE_ENV !== \"production\") MenuPopup.displayName = \"MenuPopup\";","'use client';\n\nimport _formatErrorMessage from \"@base-ui/utils/formatErrorMessage\";\nimport * as React from 'react';\nexport const MenuPortalContext = /*#__PURE__*/React.createContext(undefined);\nif (process.env.NODE_ENV !== \"production\") MenuPortalContext.displayName = \"MenuPortalContext\";\nexport function useMenuPortalContext() {\n const value = React.useContext(MenuPortalContext);\n if (value === undefined) {\n throw new Error(process.env.NODE_ENV !== \"production\" ? 'Base UI: <Menu.Portal> is missing.' : _formatErrorMessage(32));\n }\n return value;\n}","'use client';\n\nimport * as React from 'react';\nimport { FloatingPortal } from \"../../floating-ui-react/index.js\";\nimport { useMenuRootContext } from \"../root/MenuRootContext.js\";\nimport { MenuPortalContext } from \"./MenuPortalContext.js\";\n\n/**\n * A portal element that moves the popup to a different part of the DOM.\n * By default, the portal element is appended to `<body>`.\n * Renders a `<div>` element.\n *\n * Documentation: [Base UI Menu](https://base-ui.com/react/components/menu)\n */\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport const MenuPortal = /*#__PURE__*/React.forwardRef(function MenuPortal(props, forwardedRef) {\n const {\n keepMounted = false,\n ...portalProps\n } = props;\n const {\n store\n } = useMenuRootContext();\n const mounted = store.useState('mounted');\n const shouldRender = mounted || keepMounted;\n if (!shouldRender) {\n return null;\n }\n return /*#__PURE__*/_jsx(MenuPortalContext.Provider, {\n value: keepMounted,\n children: /*#__PURE__*/_jsx(FloatingPortal, {\n ref: forwardedRef,\n ...portalProps\n })\n });\n});\nif (process.env.NODE_ENV !== \"production\") MenuPortal.displayName = \"MenuPortal\";","'use client';\n\nimport * as React from 'react';\nimport { inertValue } from '@base-ui/utils/inertValue';\nimport { FloatingNode } from \"../../floating-ui-react/index.js\";\nimport { MenuPositionerContext } from \"./MenuPositionerContext.js\";\nimport { useMenuRootContext } from \"../root/MenuRootContext.js\";\nimport { useAnchorPositioning } from \"../../utils/useAnchorPositioning.js\";\nimport { useRenderElement } from \"../../utils/useRenderElement.js\";\nimport { popupStateMapping } from \"../../utils/popupStateMapping.js\";\nimport { CompositeList } from \"../../composite/list/CompositeList.js\";\nimport { InternalBackdrop } from \"../../utils/InternalBackdrop.js\";\nimport { useMenuPortalContext } from \"../portal/MenuPortalContext.js\";\nimport { DROPDOWN_COLLISION_AVOIDANCE, POPUP_COLLISION_AVOIDANCE } from \"../../utils/constants.js\";\nimport { getDisabledMountTransitionStyles } from \"../../utils/getDisabledMountTransitionStyles.js\";\nimport { useContextMenuRootContext } from \"../../context-menu/root/ContextMenuRootContext.js\";\nimport { createChangeEventDetails } from \"../../utils/createBaseUIEventDetails.js\";\nimport { REASONS } from \"../../utils/reasons.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\n/**\n * Positions the menu popup against the trigger.\n * Renders a `<div>` element.\n *\n * Documentation: [Base UI Menu](https://base-ui.com/react/components/menu)\n */\nexport const MenuPositioner = /*#__PURE__*/React.forwardRef(function MenuPositioner(componentProps, forwardedRef) {\n const {\n anchor: anchorProp,\n positionMethod: positionMethodProp = 'absolute',\n className,\n render,\n side,\n align: alignProp,\n sideOffset: sideOffsetProp = 0,\n alignOffset: alignOffsetProp = 0,\n collisionBoundary = 'clipping-ancestors',\n collisionPadding = 5,\n arrowPadding = 5,\n sticky = false,\n disableAnchorTracking = false,\n collisionAvoidance: collisionAvoidanceProp = DROPDOWN_COLLISION_AVOIDANCE,\n ...elementProps\n } = componentProps;\n const {\n store\n } = useMenuRootContext();\n const keepMounted = useMenuPortalContext();\n const contextMenuContext = useContextMenuRootContext(true);\n const parent = store.useState('parent');\n const floatingRootContext = store.useState('floatingRootContext');\n const floatingTreeRoot = store.useState('floatingTreeRoot');\n const mounted = store.useState('mounted');\n const open = store.useState('open');\n const modal = store.useState('modal');\n const triggerElement = store.useState('activeTriggerElement');\n const transitionStatus = store.useState('transitionStatus');\n const lastOpenChangeReason = store.useState('lastOpenChangeReason');\n const floatingNodeId = store.useState('floatingNodeId');\n const floatingParentNodeId = store.useState('floatingParentNodeId');\n let anchor = anchorProp;\n let sideOffset = sideOffsetProp;\n let alignOffset = alignOffsetProp;\n let align = alignProp;\n let collisionAvoidance = collisionAvoidanceProp;\n if (parent.type === 'context-menu') {\n anchor = anchorProp ?? parent.context?.anchor;\n align = align ?? 'start';\n if (!side && align !== 'center') {\n alignOffset = componentProps.alignOffset ?? 2;\n sideOffset = componentProps.sideOffset ?? -5;\n }\n }\n let computedSide = side;\n let computedAlign = align;\n if (parent.type === 'menu') {\n computedSide = computedSide ?? 'inline-end';\n computedAlign = computedAlign ?? 'start';\n collisionAvoidance = componentProps.collisionAvoidance ?? POPUP_COLLISION_AVOIDANCE;\n } else if (parent.type === 'menubar') {\n computedSide = computedSide ?? 'bottom';\n computedAlign = computedAlign ?? 'start';\n }\n const contextMenu = parent.type === 'context-menu';\n const positioner = useAnchorPositioning({\n anchor,\n floatingRootContext,\n positionMethod: contextMenuContext ? 'fixed' : positionMethodProp,\n mounted,\n side: computedSide,\n sideOffset,\n align: computedAlign,\n alignOffset,\n arrowPadding: contextMenu ? 0 : arrowPadding,\n collisionBoundary,\n collisionPadding,\n sticky,\n nodeId: floatingNodeId,\n keepMounted,\n disableAnchorTracking,\n collisionAvoidance,\n shiftCrossAxis: contextMenu && !('side' in collisionAvoidance && collisionAvoidance.side === 'flip'),\n externalTree: floatingTreeRoot\n });\n const positionerProps = React.useMemo(() => {\n const hiddenStyles = {};\n if (!open) {\n hiddenStyles.pointerEvents = 'none';\n }\n return {\n role: 'presentation',\n hidden: !mounted,\n style: {\n ...positioner.positionerStyles,\n ...hiddenStyles\n }\n };\n }, [open, mounted, positioner.positionerStyles]);\n React.useEffect(() => {\n function onMenuOpenChange(details) {\n if (details.open) {\n if (details.parentNodeId === floatingNodeId) {\n store.set('hoverEnabled', false);\n }\n if (details.nodeId !== floatingNodeId && details.parentNodeId === store.select('floatingParentNodeId')) {\n store.setOpen(false, createChangeEventDetails(REASONS.siblingOpen));\n }\n }\n }\n floatingTreeRoot.events.on('menuopenchange', onMenuOpenChange);\n return () => {\n floatingTreeRoot.events.off('menuopenchange', onMenuOpenChange);\n };\n }, [store, floatingTreeRoot.events, floatingNodeId]);\n React.useEffect(() => {\n if (store.select('floatingParentNodeId') == null) {\n return undefined;\n }\n function onParentClose(details) {\n if (details.open || details.nodeId !== store.select('floatingParentNodeId')) {\n return;\n }\n const reason = details.reason ?? REASONS.siblingOpen;\n store.setOpen(false, createChangeEventDetails(reason));\n }\n floatingTreeRoot.events.on('menuopenchange', onParentClose);\n return () => {\n floatingTreeRoot.events.off('menuopenchange', onParentClose);\n };\n }, [floatingTreeRoot.events, store]);\n\n // Close unrelated child submenus when hovering a different item in the parent menu.\n React.useEffect(() => {\n function onItemHover(event) {\n // If an item within our parent menu is hovered, and this menu's trigger is not that item,\n // close this submenu. This ensures hovering a different item in the parent closes other branches.\n if (!open || event.nodeId !== store.select('floatingParentNodeId')) {\n return;\n }\n if (event.target && triggerElement && triggerElement !== event.target) {\n store.setOpen(false, createChangeEventDetails(REASONS.siblingOpen));\n }\n }\n floatingTreeRoot.events.on('itemhover', onItemHover);\n return () => {\n floatingTreeRoot.events.off('itemhover', onItemHover);\n };\n }, [floatingTreeRoot.events, open, triggerElement, store]);\n React.useEffect(() => {\n const eventDetails = {\n open,\n nodeId: floatingNodeId,\n parentNodeId: floatingParentNodeId,\n reason: store.select('lastOpenChangeReason')\n };\n floatingTreeRoot.events.emit('menuopenchange', eventDetails);\n }, [floatingTreeRoot.events, open, store, floatingNodeId, floatingParentNodeId]);\n const state = {\n open,\n side: positioner.side,\n align: positioner.align,\n anchorHidden: positioner.anchorHidden,\n nested: parent.type === 'menu'\n };\n const contextValue = React.useMemo(() => ({\n side: positioner.side,\n align: positioner.align,\n arrowRef: positioner.arrowRef,\n arrowUncentered: positioner.arrowUncentered,\n arrowStyles: positioner.arrowStyles,\n nodeId: positioner.context.nodeId\n }), [positioner.side, positioner.align, positioner.arrowRef, positioner.arrowUncentered, positioner.arrowStyles, positioner.context.nodeId]);\n const element = useRenderElement('div', componentProps, {\n state,\n stateAttributesMapping: popupStateMapping,\n ref: [forwardedRef, store.useStateSetter('positionerElement')],\n props: [positionerProps, getDisabledMountTransitionStyles(transitionStatus), elementProps]\n });\n const shouldRenderBackdrop = mounted && parent.type !== 'menu' && (parent.type !== 'menubar' && modal && lastOpenChangeReason !== REASONS.triggerHover || parent.type === 'menubar' && parent.context.modal);\n\n // cuts a hole in the backdrop to allow pointer interaction with the menubar or dropdown menu trigger element\n let backdropCutout = null;\n if (parent.type === 'menubar') {\n backdropCutout = parent.context.contentElement;\n } else if (parent.type === undefined) {\n backdropCutout = triggerElement;\n }\n return /*#__PURE__*/_jsxs(MenuPositionerContext.Provider, {\n value: contextValue,\n children: [shouldRenderBackdrop && /*#__PURE__*/_jsx(InternalBackdrop, {\n ref: parent.type === 'context-menu' || parent.type === 'nested-context-menu' ? parent.context.internalBackdropRef : null,\n inert: inertValue(!open),\n cutout: backdropCutout\n }), /*#__PURE__*/_jsx(FloatingNode, {\n id: floatingNodeId,\n children: /*#__PURE__*/_jsx(CompositeList, {\n elementsRef: store.context.itemDomElements,\n labelsRef: store.context.itemLabels,\n children: element\n })\n })]\n });\n});\nif (process.env.NODE_ENV !== \"production\") MenuPositioner.displayName = \"MenuPositioner\";","'use client';\n\nimport _formatErrorMessage from \"@base-ui/utils/formatErrorMessage\";\nimport * as React from 'react';\nexport const MenubarContext = /*#__PURE__*/React.createContext(null);\nif (process.env.NODE_ENV !== \"production\") MenubarContext.displayName = \"MenubarContext\";\nexport function useMenubarContext(optional) {\n const context = React.useContext(MenubarContext);\n if (context === null && !optional) {\n throw new Error(process.env.NODE_ENV !== \"production\" ? 'Base UI: MenubarContext is missing. Menubar parts must be placed within <Menubar>.' : _formatErrorMessage(5));\n }\n return context;\n}","import * as React from 'react';\nimport { createSelector, ReactStore } from '@base-ui/utils/store';\nimport { EMPTY_OBJECT } from '@base-ui/utils/empty';\nimport { useRefWithInit } from '@base-ui/utils/useRefWithInit';\nimport { FloatingTreeStore } from \"../../floating-ui-react/components/FloatingTreeStore.js\";\nimport { createInitialPopupStoreState, popupStoreSelectors, PopupTriggerMap } from \"../../utils/popups/index.js\";\nconst selectors = {\n ...popupStoreSelectors,\n disabled: createSelector(state => state.parent.type === 'menubar' ? state.parent.context.disabled || state.disabled : state.disabled),\n modal: createSelector(state => (state.parent.type === undefined || state.parent.type === 'context-menu') && (state.modal ?? true)),\n allowMouseEnter: createSelector(state => state.allowMouseEnter),\n stickIfOpen: createSelector(state => state.stickIfOpen),\n parent: createSelector(state => state.parent),\n rootId: createSelector(state => {\n if (state.parent.type === 'menu') {\n return state.parent.store.select('rootId');\n }\n return state.parent.type !== undefined ? state.parent.context.rootId : state.rootId;\n }),\n activeIndex: createSelector(state => state.activeIndex),\n isActive: createSelector((state, itemIndex) => state.activeIndex === itemIndex),\n hoverEnabled: createSelector(state => state.hoverEnabled),\n instantType: createSelector(state => state.instantType),\n lastOpenChangeReason: createSelector(state => state.openChangeReason),\n floatingTreeRoot: createSelector(state => {\n if (state.parent.type === 'menu') {\n return state.parent.store.select('floatingTreeRoot');\n }\n return state.floatingTreeRoot;\n }),\n floatingNodeId: createSelector(state => state.floatingNodeId),\n floatingParentNodeId: createSelector(state => state.floatingParentNodeId),\n itemProps: createSelector(state => state.itemProps),\n closeDelay: createSelector(state => state.closeDelay),\n keyboardEventRelay: createSelector(state => {\n if (state.keyboardEventRelay) {\n return state.keyboardEventRelay;\n }\n if (state.parent.type === 'menu') {\n return state.parent.store.select('keyboardEventRelay');\n }\n return undefined;\n })\n};\nexport class MenuStore extends ReactStore {\n constructor(initialState) {\n super({\n ...createInitialState(),\n ...initialState\n }, {\n positionerRef: /*#__PURE__*/React.createRef(),\n popupRef: /*#__PURE__*/React.createRef(),\n typingRef: {\n current: false\n },\n itemDomElements: {\n current: []\n },\n itemLabels: {\n current: []\n },\n allowMouseUpTriggerRef: {\n current: false\n },\n triggerFocusTargetRef: /*#__PURE__*/React.createRef(),\n beforeContentFocusGuardRef: /*#__PURE__*/React.createRef(),\n onOpenChangeComplete: undefined,\n triggerElements: new PopupTriggerMap()\n }, selectors);\n\n // Set up propagation of state from parent menu if applicable.\n this.unsubscribeParentListener = this.observe('parent', parent => {\n this.unsubscribeParentListener?.();\n if (parent.type === 'menu') {\n this.unsubscribeParentListener = parent.store.subscribe(() => {\n this.notifyAll();\n });\n this.context.allowMouseUpTriggerRef = parent.store.context.allowMouseUpTriggerRef;\n return;\n }\n if (parent.type !== undefined) {\n this.context.allowMouseUpTriggerRef = parent.context.allowMouseUpTriggerRef;\n }\n this.unsubscribeParentListener = null;\n });\n }\n setOpen(open, eventDetails) {\n this.state.floatingRootContext.context.events.emit('setOpen', {\n open,\n eventDetails\n });\n }\n static useStore(externalStore, initialState) {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const internalStore = useRefWithInit(() => {\n return new MenuStore(initialState);\n }).current;\n return externalStore ?? internalStore;\n }\n unsubscribeParentListener = null;\n}\nfunction createInitialState() {\n return {\n ...createInitialPopupStoreState(),\n disabled: false,\n modal: true,\n allowMouseEnter: false,\n stickIfOpen: true,\n parent: {\n type: undefined\n },\n rootId: undefined,\n activeIndex: null,\n hoverEnabled: true,\n instantType: undefined,\n openChangeReason: null,\n floatingTreeRoot: new FloatingTreeStore(),\n floatingNodeId: undefined,\n floatingParentNodeId: null,\n itemProps: EMPTY_OBJECT,\n keyboardEventRelay: undefined,\n closeDelay: 0\n };\n}","'use client';\n\nimport * as React from 'react';\nexport const MenuSubmenuRootContext = /*#__PURE__*/React.createContext(undefined);\nif (process.env.NODE_ENV !== \"production\") MenuSubmenuRootContext.displayName = \"MenuSubmenuRootContext\";\nexport function useMenuSubmenuRootContext() {\n return React.useContext(MenuSubmenuRootContext);\n}","'use client';\n\nimport * as React from 'react';\nimport { useTimeout } from '@base-ui/utils/useTimeout';\nimport { useStableCallback } from '@base-ui/utils/useStableCallback';\nimport { useId } from '@base-ui/utils/useId';\nimport { useIsoLayoutEffect } from '@base-ui/utils/useIsoLayoutEffect';\nimport { useOnFirstRender } from '@base-ui/utils/useOnFirstRender';\nimport { useScrollLock } from '@base-ui/utils/useScrollLock';\nimport { EMPTY_ARRAY } from '@base-ui/utils/empty';\nimport { fastComponent } from '@base-ui/utils/fastHooks';\nimport { FloatingTree, useDismiss, useFloatingNodeId, useFloatingParentNodeId, useInteractions, useListNavigation, useRole, useTypeahead, useSyncedFloatingRootContext } from \"../../floating-ui-react/index.js\";\nimport { MenuRootContext, useMenuRootContext } from \"./MenuRootContext.js\";\nimport { useMenubarContext } from \"../../menubar/MenubarContext.js\";\nimport { TYPEAHEAD_RESET_MS } from \"../../utils/constants.js\";\nimport { useDirection } from \"../../direction-provider/DirectionContext.js\";\nimport { useOpenInteractionType } from \"../../utils/useOpenInteractionType.js\";\nimport { createChangeEventDetails } from \"../../utils/createBaseUIEventDetails.js\";\nimport { REASONS } from \"../../utils/reasons.js\";\nimport { useContextMenuRootContext } from \"../../context-menu/root/ContextMenuRootContext.js\";\nimport { mergeProps } from \"../../merge-props/index.js\";\nimport { MenuStore } from \"../store/MenuStore.js\";\nimport { useImplicitActiveTrigger, useOpenStateTransitions } from \"../../utils/popups/index.js\";\nimport { useMenuSubmenuRootContext } from \"../submenu-root/MenuSubmenuRootContext.js\";\n\n/**\n * Groups all parts of the menu.\n * Doesn’t render its own HTML element.\n *\n * Documentation: [Base UI Menu](https://base-ui.com/react/components/menu)\n */\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport const MenuRoot = fastComponent(function MenuRoot(props) {\n const {\n children,\n open: openProp,\n onOpenChange,\n onOpenChangeComplete,\n defaultOpen = false,\n disabled: disabledProp = false,\n modal: modalProp,\n loopFocus = true,\n orientation = 'vertical',\n actionsRef,\n closeParentOnEsc = false,\n handle,\n triggerId: triggerIdProp,\n defaultTriggerId: defaultTriggerIdProp = null,\n highlightItemOnHover = true\n } = props;\n const contextMenuContext = useContextMenuRootContext(true);\n const parentMenuRootContext = useMenuRootContext(true);\n const menubarContext = useMenubarContext(true);\n const isSubmenu = useMenuSubmenuRootContext();\n const parentFromContext = React.useMemo(() => {\n if (isSubmenu && parentMenuRootContext) {\n return {\n type: 'menu',\n store: parentMenuRootContext.store\n };\n }\n if (menubarContext) {\n return {\n type: 'menubar',\n context: menubarContext\n };\n }\n\n // Ensure this is not a Menu nested inside ContextMenu.Trigger.\n // ContextMenu parentContext is always undefined as ContextMenu.Root is instantiated with\n // <MenuRootContext.Provider value={undefined}>\n if (contextMenuContext && !parentMenuRootContext) {\n return {\n type: 'context-menu',\n context: contextMenuContext\n };\n }\n return {\n type: undefined\n };\n }, [contextMenuContext, parentMenuRootContext, menubarContext, isSubmenu]);\n const store = MenuStore.useStore(handle?.store, {\n open: defaultOpen,\n openProp,\n activeTriggerId: defaultTriggerIdProp,\n triggerIdProp,\n parent: parentFromContext\n });\n\n // Support initially open state when uncontrolled\n useOnFirstRender(() => {\n if (openProp === undefined && store.state.open === false && defaultOpen === true) {\n store.update({\n open: true,\n activeTriggerId: defaultTriggerIdProp\n });\n }\n });\n store.useControlledProp('openProp', openProp);\n store.useControlledProp('triggerIdProp', triggerIdProp);\n store.useContextCallback('onOpenChangeComplete', onOpenChangeComplete);\n const floatingTreeRoot = store.useState('floatingTreeRoot');\n const floatingNodeIdFromContext = useFloatingNodeId(floatingTreeRoot);\n const floatingParentNodeIdFromContext = useFloatingParentNodeId();\n useIsoLayoutEffect(() => {\n if (contextMenuContext && !parentMenuRootContext) {\n // This is a context menu root.\n // It doesn't support detached triggers yet, so we have to sync the parent context manually.\n store.update({\n parent: {\n type: 'context-menu',\n context: contextMenuContext\n },\n floatingNodeId: floatingNodeIdFromContext,\n floatingParentNodeId: floatingParentNodeIdFromContext\n });\n } else if (parentMenuRootContext) {\n store.update({\n floatingNodeId: floatingNodeIdFromContext,\n floatingParentNodeId: floatingParentNodeIdFromContext\n });\n }\n }, [contextMenuContext, parentMenuRootContext, floatingNodeIdFromContext, floatingParentNodeIdFromContext, store]);\n const open = store.useState('open');\n const activeTriggerElement = store.useState('activeTriggerElement');\n const positionerElement = store.useState('positionerElement');\n const hoverEnabled = store.useState('hoverEnabled');\n const modal = store.useState('modal');\n const disabled = store.useState('disabled');\n const lastOpenChangeReason = store.useState('lastOpenChangeReason');\n const parent = store.useState('parent');\n const activeIndex = store.useState('activeIndex');\n const payload = store.useState('payload');\n const floatingParentNodeId = store.useState('floatingParentNodeId');\n const openEventRef = React.useRef(null);\n const nested = floatingParentNodeId != null;\n let floatingEvents;\n if (process.env.NODE_ENV !== 'production') {\n if (parent.type !== undefined && modalProp !== undefined) {\n console.warn('Base UI: The `modal` prop is not supported on nested menus. It will be ignored.');\n }\n }\n store.useSyncedValues({\n disabled: disabledProp,\n modal: parent.type === undefined ? modalProp : undefined,\n rootId: useId()\n });\n const {\n openMethod,\n triggerProps: interactionTypeProps,\n reset: resetOpenInteractionType\n } = useOpenInteractionType(open);\n useImplicitActiveTrigger(store);\n const {\n forceUnmount\n } = useOpenStateTransitions(open, store, () => {\n store.update({\n allowMouseEnter: false,\n stickIfOpen: true\n });\n resetOpenInteractionType();\n });\n const allowOutsidePressDismissalRef = React.useRef(parent.type !== 'context-menu');\n const allowOutsidePressDismissalTimeout = useTimeout();\n React.useEffect(() => {\n if (!open) {\n openEventRef.current = null;\n }\n if (parent.type !== 'context-menu') {\n return;\n }\n if (!open) {\n allowOutsidePressDismissalTimeout.clear();\n allowOutsidePressDismissalRef.current = false;\n return;\n }\n\n // With `mousedown` outside press events and long press touch input, there\n // needs to be a grace period after opening to ensure the dismissal event\n // doesn't fire immediately after open.\n allowOutsidePressDismissalTimeout.start(500, () => {\n allowOutsidePressDismissalRef.current = true;\n });\n }, [allowOutsidePressDismissalTimeout, open, parent.type]);\n useScrollLock(open && modal && lastOpenChangeReason !== REASONS.triggerHover && openMethod !== 'touch', positionerElement);\n useIsoLayoutEffect(() => {\n if (!open && !hoverEnabled) {\n store.set('hoverEnabled', true);\n }\n }, [open, hoverEnabled, store]);\n const allowTouchToCloseRef = React.useRef(true);\n const allowTouchToCloseTimeout = useTimeout();\n const setOpen = useStableCallback((nextOpen, eventDetails) => {\n const reason = eventDetails.reason;\n if (open === nextOpen && eventDetails.trigger === activeTriggerElement && lastOpenChangeReason === reason) {\n return;\n }\n eventDetails.preventUnmountOnClose = () => {\n store.set('preventUnmountingOnClose', true);\n };\n\n // Do not immediately reset the activeTriggerId to allow\n // exit animations to play and focus to be returned correctly.\n if (!nextOpen && eventDetails.trigger == null) {\n eventDetails.trigger = activeTriggerElement ?? undefined;\n }\n onOpenChange?.(nextOpen, eventDetails);\n if (eventDetails.isCanceled) {\n return;\n }\n const details = {\n open: nextOpen,\n nativeEvent: eventDetails.event,\n reason: eventDetails.reason,\n nested\n };\n floatingEvents?.emit('openchange', details);\n const nativeEvent = eventDetails.event;\n if (nextOpen === false && nativeEvent?.type === 'click' && nativeEvent.pointerType === 'touch' && !allowTouchToCloseRef.current) {\n return;\n }\n\n // Workaround `enableFocusInside` in Floating UI setting `tabindex=0` of a non-highlighted\n // option upon close when tabbing out due to `keepMounted=true`:\n // https://github.com/floating-ui/floating-ui/pull/3004/files#diff-962a7439cdeb09ea98d4b622a45d517bce07ad8c3f866e089bda05f4b0bbd875R194-R199\n // This otherwise causes options to retain `tabindex=0` incorrectly when the popup is closed\n // when tabbing outside.\n if (!nextOpen && activeIndex !== null) {\n const activeOption = store.context.itemDomElements.current[activeIndex];\n // Wait for Floating UI's focus effect to have fired\n queueMicrotask(() => {\n activeOption?.setAttribute('tabindex', '-1');\n });\n }\n\n // Prevent the menu from closing on mobile devices that have a delayed click event.\n // In some cases the menu, when tapped, will fire the focus event first and then the click event.\n // Without this guard, the menu will close immediately after opening.\n if (nextOpen && reason === REASONS.triggerFocus) {\n allowTouchToCloseRef.current = false;\n allowTouchToCloseTimeout.start(300, () => {\n allowTouchToCloseRef.current = true;\n });\n } else {\n allowTouchToCloseRef.current = true;\n allowTouchToCloseTimeout.clear();\n }\n const isKeyboardClick = (reason === REASONS.triggerPress || reason === REASONS.itemPress) && nativeEvent.detail === 0 && nativeEvent?.isTrusted;\n const isDismissClose = !nextOpen && (reason === REASONS.escapeKey || reason == null);\n const updatedState = {\n open: nextOpen,\n openChangeReason: reason\n };\n openEventRef.current = eventDetails.event ?? null;\n\n // If a popup is closing, the `trigger` may be null.\n // We want to keep the previous value so that exit animations are played and focus is returned correctly.\n const newTriggerId = eventDetails.trigger?.id ?? null;\n if (newTriggerId || nextOpen) {\n updatedState.activeTriggerId = newTriggerId;\n updatedState.activeTriggerElement = eventDetails.trigger ?? null;\n }\n store.update(updatedState);\n if (parent.type === 'menubar' && (reason === REASONS.triggerFocus || reason === REASONS.focusOut || reason === REASONS.triggerHover || reason === REASONS.listNavigation || reason === REASONS.siblingOpen)) {\n store.set('instantType', 'group');\n } else if (isKeyboardClick || isDismissClose) {\n store.set('instantType', isKeyboardClick ? 'click' : 'dismiss');\n } else {\n store.set('instantType', undefined);\n }\n });\n const createMenuEventDetails = React.useCallback(reason => {\n const details = createChangeEventDetails(reason);\n details.preventUnmountOnClose = () => {\n store.set('preventUnmountingOnClose', true);\n };\n return details;\n }, [store]);\n const handleImperativeClose = React.useCallback(() => {\n store.setOpen(false, createMenuEventDetails(REASONS.imperativeAction));\n }, [store, createMenuEventDetails]);\n React.useImperativeHandle(actionsRef, () => ({\n unmount: forceUnmount,\n close: handleImperativeClose\n }), [forceUnmount, handleImperativeClose]);\n let ctx;\n if (parent.type === 'context-menu') {\n ctx = parent.context;\n }\n React.useImperativeHandle(ctx?.positionerRef, () => positionerElement, [positionerElement]);\n React.useImperativeHandle(ctx?.actionsRef, () => ({\n setOpen\n }), [setOpen]);\n const floatingRootContext = useSyncedFloatingRootContext({\n popupStore: store,\n onOpenChange: setOpen\n });\n floatingEvents = floatingRootContext.context.events;\n React.useEffect(() => {\n const handleSetOpenEvent = ({\n open: nextOpen,\n eventDetails\n }) => setOpen(nextOpen, eventDetails);\n floatingEvents.on('setOpen', handleSetOpenEvent);\n return () => {\n floatingEvents?.off('setOpen', handleSetOpenEvent);\n };\n }, [floatingEvents, setOpen]);\n const dismiss = useDismiss(floatingRootContext, {\n enabled: !disabled,\n bubbles: {\n escapeKey: closeParentOnEsc && parent.type === 'menu'\n },\n outsidePress() {\n if (parent.type !== 'context-menu' || openEventRef.current?.type === 'contextmenu') {\n return true;\n }\n return allowOutsidePressDismissalRef.current;\n },\n externalTree: nested ? floatingTreeRoot : undefined\n });\n const role = useRole(floatingRootContext, {\n role: 'menu'\n });\n const direction = useDirection();\n const setActiveIndex = React.useCallback(index => {\n if (store.select('activeIndex') === index) {\n return;\n }\n store.set('activeIndex', index);\n }, [store]);\n const listNavigation = useListNavigation(floatingRootContext, {\n enabled: !disabled,\n listRef: store.context.itemDomElements,\n activeIndex,\n nested: parent.type !== undefined,\n loopFocus,\n orientation,\n parentOrientation: parent.type === 'menubar' ? parent.context.orientation : undefined,\n rtl: direction === 'rtl',\n disabledIndices: EMPTY_ARRAY,\n onNavigate: setActiveIndex,\n openOnArrowKeyDown: parent.type !== 'context-menu',\n externalTree: nested ? floatingTreeRoot : undefined,\n focusItemOnHover: highlightItemOnHover\n });\n const onTypingChange = React.useCallback(nextTyping => {\n store.context.typingRef.current = nextTyping;\n }, [store]);\n const typeahead = useTypeahead(floatingRootContext, {\n listRef: store.context.itemLabels,\n activeIndex,\n resetMs: TYPEAHEAD_RESET_MS,\n onMatch: index => {\n if (open && index !== activeIndex) {\n store.set('activeIndex', index);\n }\n },\n onTypingChange\n });\n const {\n getReferenceProps,\n getFloatingProps,\n getItemProps,\n getTriggerProps\n } = useInteractions([dismiss, role, listNavigation, typeahead]);\n const activeTriggerProps = React.useMemo(() => {\n const mergedProps = mergeProps(getReferenceProps(), {\n onMouseMove() {\n store.set('allowMouseEnter', true);\n }\n }, interactionTypeProps);\n delete mergedProps.role;\n return mergedProps;\n }, [getReferenceProps, store, interactionTypeProps]);\n const inactiveTriggerProps = React.useMemo(() => {\n const triggerProps = getTriggerProps();\n if (!triggerProps) {\n return triggerProps;\n }\n const mergedProps = mergeProps(triggerProps, interactionTypeProps);\n delete mergedProps.role;\n delete mergedProps['aria-controls'];\n return mergedProps;\n }, [getTriggerProps, interactionTypeProps]);\n const popupProps = React.useMemo(() => getFloatingProps({\n onMouseMove() {\n store.set('allowMouseEnter', true);\n if (parent.type === 'menu') {\n store.set('hoverEnabled', false);\n }\n },\n onClick() {\n if (store.select('hoverEnabled')) {\n store.set('hoverEnabled', false);\n }\n },\n onKeyDown(event) {\n // The Menubar's CompositeRoot captures keyboard events via\n // event delegation. This works well when Menu.Root is nested inside Menubar,\n // but with detached triggers we need to manually forward the event to the CompositeRoot.\n const relay = store.select('keyboardEventRelay');\n if (relay && !event.isPropagationStopped()) {\n relay(event);\n }\n }\n }), [getFloatingProps, parent.type, store]);\n const itemProps = React.useMemo(() => getItemProps(), [getItemProps]);\n store.useSyncedValues({\n floatingRootContext,\n activeTriggerProps,\n inactiveTriggerProps,\n popupProps,\n itemProps\n });\n const context = React.useMemo(() => ({\n store,\n parent: parentFromContext\n }), [store, parentFromContext]);\n const content = /*#__PURE__*/_jsx(MenuRootContext.Provider, {\n value: context,\n children: typeof children === 'function' ? children({\n payload\n }) : children\n });\n if (parent.type === undefined || parent.type === 'context-menu') {\n // set up a FloatingTree to provide the context to nested menus\n return /*#__PURE__*/_jsx(FloatingTree, {\n externalTree: floatingTreeRoot,\n children: content\n });\n }\n return content;\n});\nif (process.env.NODE_ENV !== \"production\") MenuRoot.displayName = \"MenuRoot\";","'use client';\n\nimport * as React from 'react';\nimport { useMergedRefs } from '@base-ui/utils/useMergedRefs';\nimport { useCompositeRootContext } from \"../root/CompositeRootContext.js\";\nimport { useCompositeListItem } from \"../list/useCompositeListItem.js\";\nexport function useCompositeItem(params = {}) {\n const {\n highlightItemOnHover,\n highlightedIndex,\n onHighlightedIndexChange\n } = useCompositeRootContext();\n const {\n ref,\n index\n } = useCompositeListItem(params);\n const isHighlighted = highlightedIndex === index;\n const itemRef = React.useRef(null);\n const mergedRef = useMergedRefs(ref, itemRef);\n const compositeProps = React.useMemo(() => ({\n tabIndex: isHighlighted ? 0 : -1,\n onFocus() {\n onHighlightedIndexChange(index);\n },\n onMouseMove() {\n const item = itemRef.current;\n if (!highlightItemOnHover || !item) {\n return;\n }\n const disabled = item.hasAttribute('disabled') || item.ariaDisabled === 'true';\n if (!isHighlighted && !disabled) {\n item.focus();\n }\n }\n }), [isHighlighted, onHighlightedIndexChange, index, highlightItemOnHover]);\n return {\n compositeProps,\n compositeRef: mergedRef,\n index\n };\n}","'use client';\n\nimport { useRenderElement } from \"../../utils/useRenderElement.js\";\nimport { useCompositeItem } from \"./useCompositeItem.js\";\nimport { EMPTY_OBJECT, EMPTY_ARRAY } from \"../../utils/constants.js\";\n/**\n * @internal\n */\nexport function CompositeItem(componentProps) {\n const {\n render,\n className,\n state = EMPTY_OBJECT,\n props = EMPTY_ARRAY,\n refs = EMPTY_ARRAY,\n metadata,\n stateAttributesMapping,\n tag = 'div',\n ...elementProps\n } = componentProps;\n const {\n compositeProps,\n compositeRef\n } = useCompositeItem({\n metadata\n });\n return useRenderElement(tag, componentProps, {\n state,\n ref: [...refs, compositeRef],\n props: [compositeProps, ...props, elementProps],\n stateAttributesMapping\n });\n}","import { getParentNode, isHTMLElement, isLastTraversableNode } from '@floating-ui/utils/dom';\nexport function findRootOwnerId(node) {\n if (isHTMLElement(node) && node.hasAttribute('data-rootownerid')) {\n return node.getAttribute('data-rootownerid') ?? undefined;\n }\n if (isLastTraversableNode(node)) {\n return undefined;\n }\n return findRootOwnerId(getParentNode(node));\n}","'use client';\n\nimport * as React from 'react';\nimport { ownerDocument } from '@base-ui/utils/owner';\nimport { EMPTY_OBJECT } from \"./constants.js\";\n\n/**\n * Returns `click` and `mousedown` handlers that fix the behavior of triggers of popups that are toggled by different events.\n * For example, a button that opens a popup on mousedown and closes it on click.\n * This hook prevents the popup from closing immediately after the mouse button is released.\n */\nexport function useMixedToggleClickHandler(params) {\n const {\n enabled = true,\n mouseDownAction,\n open\n } = params;\n const ignoreClickRef = React.useRef(false);\n return React.useMemo(() => {\n if (!enabled) {\n return EMPTY_OBJECT;\n }\n return {\n onMouseDown: event => {\n if (mouseDownAction === 'open' && !open || mouseDownAction === 'close' && open) {\n ignoreClickRef.current = true;\n ownerDocument(event.currentTarget).addEventListener('click', () => {\n ignoreClickRef.current = false;\n }, {\n once: true\n });\n }\n },\n onClick: event => {\n if (ignoreClickRef.current) {\n ignoreClickRef.current = false;\n event.preventBaseUIHandler();\n }\n }\n };\n }, [enabled, mouseDownAction, open]);\n}","'use client';\n\nimport _formatErrorMessage from \"@base-ui/utils/formatErrorMessage\";\nimport * as React from 'react';\nimport * as ReactDOM from 'react-dom';\nimport { useTimeout } from '@base-ui/utils/useTimeout';\nimport { ownerDocument } from '@base-ui/utils/owner';\nimport { fastComponentRef } from '@base-ui/utils/fastHooks';\nimport { useStableCallback } from '@base-ui/utils/useStableCallback';\nimport { useIsoLayoutEffect } from '@base-ui/utils/useIsoLayoutEffect';\nimport { EMPTY_OBJECT } from '@base-ui/utils/empty';\nimport { safePolygon, useClick, useFloatingTree, useFocus, useHoverReferenceInteraction, useInteractions, useFloatingNodeId, useFloatingParentNodeId } from \"../../floating-ui-react/index.js\";\nimport { FloatingTreeStore } from \"../../floating-ui-react/components/FloatingTreeStore.js\";\nimport { contains, getNextTabbable, getTabbableAfterElement, getTabbableBeforeElement, isOutsideEvent } from \"../../floating-ui-react/utils.js\";\nimport { useMenuRootContext } from \"../root/MenuRootContext.js\";\nimport { pressableTriggerOpenStateMapping } from \"../../utils/popupStateMapping.js\";\nimport { useRenderElement } from \"../../utils/useRenderElement.js\";\nimport { useButton } from \"../../use-button/useButton.js\";\nimport { getPseudoElementBounds } from \"../../utils/getPseudoElementBounds.js\";\nimport { CompositeItem } from \"../../composite/item/CompositeItem.js\";\nimport { useCompositeRootContext } from \"../../composite/root/CompositeRootContext.js\";\nimport { findRootOwnerId } from \"../utils/findRootOwnerId.js\";\nimport { useTriggerDataForwarding } from \"../../utils/popups/index.js\";\nimport { useBaseUiId } from \"../../utils/useBaseUiId.js\";\nimport { REASONS } from \"../../utils/reasons.js\";\nimport { useMixedToggleClickHandler } from \"../../utils/useMixedToggleClickHandler.js\";\nimport { useContextMenuRootContext } from \"../../context-menu/root/ContextMenuRootContext.js\";\nimport { useMenubarContext } from \"../../menubar/MenubarContext.js\";\nimport { PATIENT_CLICK_THRESHOLD } from \"../../utils/constants.js\";\nimport { FocusGuard } from \"../../utils/FocusGuard.js\";\nimport { createChangeEventDetails } from \"../../utils/createBaseUIEventDetails.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nconst BOUNDARY_OFFSET = 2;\n\n/**\n * A button that opens the menu.\n * Renders a `<button>` element.\n *\n * Documentation: [Base UI Menu](https://base-ui.com/react/components/menu)\n */\nexport const MenuTrigger = fastComponentRef(function MenuTrigger(componentProps, forwardedRef) {\n const {\n render,\n className,\n disabled: disabledProp = false,\n nativeButton = true,\n id: idProp,\n openOnHover: openOnHoverProp,\n delay = 100,\n closeDelay = 0,\n handle,\n payload,\n ...elementProps\n } = componentProps;\n const rootContext = useMenuRootContext(true);\n const store = handle?.store ?? rootContext?.store;\n if (!store) {\n throw new Error(process.env.NODE_ENV !== \"production\" ? 'Base UI: <Menu.Trigger> must be either used within a <Menu.Root> component or provided with a handle.' : _formatErrorMessage(85));\n }\n const thisTriggerId = useBaseUiId(idProp);\n const isTriggerActive = store.useState('isTriggerActive', thisTriggerId);\n const floatingRootContext = store.useState('floatingRootContext');\n const isOpenedByThisTrigger = store.useState('isOpenedByTrigger', thisTriggerId);\n const triggerElementRef = React.useRef(null);\n const parent = useMenuParent();\n const compositeRootContext = useCompositeRootContext(true);\n const floatingTreeRootFromContext = useFloatingTree();\n const floatingTreeRoot = React.useMemo(() => {\n return floatingTreeRootFromContext ?? new FloatingTreeStore();\n }, [floatingTreeRootFromContext]);\n const floatingNodeId = useFloatingNodeId(floatingTreeRoot);\n const floatingParentNodeId = useFloatingParentNodeId();\n const {\n registerTrigger,\n isMountedByThisTrigger\n } = useTriggerDataForwarding(thisTriggerId, triggerElementRef, store, {\n payload,\n closeDelay,\n parent,\n floatingTreeRoot,\n floatingNodeId,\n floatingParentNodeId,\n keyboardEventRelay: compositeRootContext?.relayKeyboardEvent\n });\n const isInMenubar = parent.type === 'menubar';\n const rootDisabled = store.useState('disabled');\n const disabled = disabledProp || rootDisabled || isInMenubar && parent.context.disabled;\n const {\n getButtonProps,\n buttonRef\n } = useButton({\n disabled,\n native: nativeButton\n });\n React.useEffect(() => {\n if (!isOpenedByThisTrigger && parent.type === undefined) {\n store.context.allowMouseUpTriggerRef.current = false;\n }\n }, [store, isOpenedByThisTrigger, parent.type]);\n const triggerRef = React.useRef(null);\n const allowMouseUpTriggerTimeout = useTimeout();\n const handleDocumentMouseUp = useStableCallback(mouseEvent => {\n if (!triggerRef.current) {\n return;\n }\n allowMouseUpTriggerTimeout.clear();\n store.context.allowMouseUpTriggerRef.current = false;\n const mouseUpTarget = mouseEvent.target;\n if (contains(triggerRef.current, mouseUpTarget) || contains(store.select('positionerElement'), mouseUpTarget) || mouseUpTarget === triggerRef.current) {\n return;\n }\n if (mouseUpTarget != null && findRootOwnerId(mouseUpTarget) === store.select('rootId')) {\n return;\n }\n const bounds = getPseudoElementBounds(triggerRef.current);\n if (mouseEvent.clientX >= bounds.left - BOUNDARY_OFFSET && mouseEvent.clientX <= bounds.right + BOUNDARY_OFFSET && mouseEvent.clientY >= bounds.top - BOUNDARY_OFFSET && mouseEvent.clientY <= bounds.bottom + BOUNDARY_OFFSET) {\n return;\n }\n floatingTreeRoot.events.emit('close', {\n domEvent: mouseEvent,\n reason: REASONS.cancelOpen\n });\n });\n React.useEffect(() => {\n if (isOpenedByThisTrigger && store.select('lastOpenChangeReason') === REASONS.triggerHover) {\n const doc = ownerDocument(triggerRef.current);\n doc.addEventListener('mouseup', handleDocumentMouseUp, {\n once: true\n });\n }\n }, [isOpenedByThisTrigger, handleDocumentMouseUp, store]);\n const parentMenubarHasSubmenuOpen = isInMenubar && parent.context.hasSubmenuOpen;\n const openOnHover = openOnHoverProp ?? parentMenubarHasSubmenuOpen;\n const hoverProps = useHoverReferenceInteraction(floatingRootContext, {\n enabled: openOnHover && !disabled && parent.type !== 'context-menu' && (!isInMenubar || parentMenubarHasSubmenuOpen && !isMountedByThisTrigger),\n handleClose: safePolygon({\n blockPointerEvents: !isInMenubar\n }),\n mouseOnly: true,\n move: false,\n restMs: parent.type === undefined ? delay : undefined,\n delay: {\n close: closeDelay\n },\n triggerElementRef,\n externalTree: floatingTreeRoot,\n isActiveTrigger: isTriggerActive\n });\n\n // Whether to ignore clicks to open the menu.\n // `lastOpenChangeReason` doesn't need to be reactive here, as we need to run this\n // only when `isOpenedByThisTrigger` changes.\n const stickIfOpen = useStickIfOpen(isOpenedByThisTrigger, store.select('lastOpenChangeReason'));\n const click = useClick(floatingRootContext, {\n enabled: !disabled && parent.type !== 'context-menu',\n event: isOpenedByThisTrigger && isInMenubar ? 'click' : 'mousedown',\n toggle: true,\n ignoreMouse: false,\n stickIfOpen: parent.type === undefined ? stickIfOpen : false\n });\n const focus = useFocus(floatingRootContext, {\n enabled: !disabled && parentMenubarHasSubmenuOpen\n });\n const mixedToggleHandlers = useMixedToggleClickHandler({\n open: isOpenedByThisTrigger,\n enabled: isInMenubar,\n mouseDownAction: 'open'\n });\n const localInteractionProps = useInteractions([click, focus]);\n const state = {\n disabled,\n open: isOpenedByThisTrigger\n };\n const rootTriggerProps = store.useState('triggerProps', isMountedByThisTrigger);\n const ref = [triggerRef, forwardedRef, buttonRef, registerTrigger, triggerElementRef];\n const props = [localInteractionProps.getReferenceProps(), hoverProps ?? EMPTY_OBJECT, rootTriggerProps, {\n 'aria-haspopup': 'menu',\n id: thisTriggerId,\n onMouseDown: event => {\n if (store.select('open')) {\n return;\n }\n\n // mousedown -> mouseup on menu item should not trigger it within 200ms.\n allowMouseUpTriggerTimeout.start(200, () => {\n store.context.allowMouseUpTriggerRef.current = true;\n });\n const doc = ownerDocument(event.currentTarget);\n doc.addEventListener('mouseup', handleDocumentMouseUp, {\n once: true\n });\n }\n }, isInMenubar ? {\n role: 'menuitem'\n } : {}, mixedToggleHandlers, elementProps, getButtonProps];\n const preFocusGuardRef = React.useRef(null);\n const handlePreFocusGuardFocus = useStableCallback(event => {\n ReactDOM.flushSync(() => {\n store.setOpen(false, createChangeEventDetails(REASONS.focusOut, event.nativeEvent, event.currentTarget));\n });\n const previousTabbable = getTabbableBeforeElement(preFocusGuardRef.current);\n previousTabbable?.focus();\n });\n const handleFocusTargetFocus = useStableCallback(event => {\n const currentPositionerElement = store.select('positionerElement');\n if (currentPositionerElement && isOutsideEvent(event, currentPositionerElement)) {\n store.context.beforeContentFocusGuardRef.current?.focus();\n } else {\n ReactDOM.flushSync(() => {\n store.setOpen(false, createChangeEventDetails(REASONS.focusOut, event.nativeEvent, event.currentTarget));\n });\n let nextTabbable = getTabbableAfterElement(store.context.triggerFocusTargetRef.current || triggerElementRef.current);\n while (nextTabbable !== null && contains(currentPositionerElement, nextTabbable)) {\n const prevTabbable = nextTabbable;\n nextTabbable = getNextTabbable(nextTabbable);\n if (nextTabbable === prevTabbable) {\n break;\n }\n }\n nextTabbable?.focus();\n }\n });\n const element = useRenderElement('button', componentProps, {\n enabled: !isInMenubar,\n stateAttributesMapping: pressableTriggerOpenStateMapping,\n state,\n ref,\n props\n });\n if (isInMenubar) {\n return /*#__PURE__*/_jsx(CompositeItem, {\n tag: \"button\",\n render: render,\n className: className,\n state: state,\n refs: ref,\n props: props,\n stateAttributesMapping: pressableTriggerOpenStateMapping\n });\n }\n\n // A fragment with key is required to ensure that the `element` is mounted to the same DOM node\n // regardless of whether the focus guards are rendered or not.\n\n if (isOpenedByThisTrigger) {\n return /*#__PURE__*/_jsxs(React.Fragment, {\n children: [/*#__PURE__*/_jsx(FocusGuard, {\n ref: preFocusGuardRef,\n onFocus: handlePreFocusGuardFocus\n }, `${thisTriggerId}-pre-focus-guard`), /*#__PURE__*/_jsx(React.Fragment, {\n children: element\n }, thisTriggerId), /*#__PURE__*/_jsx(FocusGuard, {\n ref: store.context.triggerFocusTargetRef,\n onFocus: handleFocusTargetFocus\n }, `${thisTriggerId}-post-focus-guard`)]\n });\n }\n return /*#__PURE__*/_jsx(React.Fragment, {\n children: element\n }, thisTriggerId);\n});\nif (process.env.NODE_ENV !== \"production\") MenuTrigger.displayName = \"MenuTrigger\";\n/**\n * Determines whether to ignore clicks after a hover-open.\n */\nfunction useStickIfOpen(open, openReason) {\n const stickIfOpenTimeout = useTimeout();\n const [stickIfOpen, setStickIfOpen] = React.useState(false);\n useIsoLayoutEffect(() => {\n if (open && openReason === 'trigger-hover') {\n // Only allow \"patient\" clicks to close the menu if it's open.\n // If they clicked within 500ms of the menu opening, keep it open.\n setStickIfOpen(true);\n stickIfOpenTimeout.start(PATIENT_CLICK_THRESHOLD, () => {\n setStickIfOpen(false);\n });\n } else if (!open) {\n stickIfOpenTimeout.clear();\n setStickIfOpen(false);\n }\n }, [open, openReason, stickIfOpenTimeout]);\n return stickIfOpen;\n}\nfunction useMenuParent() {\n const contextMenuContext = useContextMenuRootContext(true);\n const parentContext = useMenuRootContext(true);\n const menubarContext = useMenubarContext(true);\n const parent = React.useMemo(() => {\n if (menubarContext) {\n return {\n type: 'menubar',\n context: menubarContext\n };\n }\n\n // Ensure this is not a Menu nested inside ContextMenu.Trigger.\n // ContextMenu parentContext is always undefined as ContextMenu.Root is instantiated with\n // <MenuRootContext.Provider value={undefined}>\n if (contextMenuContext && !parentContext) {\n return {\n type: 'context-menu',\n context: contextMenuContext\n };\n }\n return {\n type: undefined\n };\n }, [contextMenuContext, parentContext, menubarContext]);\n return parent;\n}","\"use client\"\n\nimport * as React from \"react\"\nimport { Menu as MenuPrimitive } from \"@base-ui/react/menu\"\n\nimport { cn } from \"@/lib/utils\"\nimport { ChevronRightIcon, CheckIcon } from \"lucide-react\"\n\nfunction DropdownMenu({ ...props }: MenuPrimitive.Root.Props) {\n return <MenuPrimitive.Root data-slot=\"dropdown-menu\" {...props} />\n}\n\nfunction DropdownMenuPortal({ ...props }: MenuPrimitive.Portal.Props) {\n return <MenuPrimitive.Portal data-slot=\"dropdown-menu-portal\" {...props} />\n}\n\nfunction DropdownMenuTrigger({ ...props }: MenuPrimitive.Trigger.Props) {\n return <MenuPrimitive.Trigger data-slot=\"dropdown-menu-trigger\" {...props} />\n}\n\nfunction DropdownMenuContent({\n align = \"start\",\n alignOffset = 0,\n side = \"bottom\",\n sideOffset = 4,\n className,\n ...props\n}: MenuPrimitive.Popup.Props &\n Pick<\n MenuPrimitive.Positioner.Props,\n \"align\" | \"alignOffset\" | \"side\" | \"sideOffset\"\n >) {\n return (\n <MenuPrimitive.Portal>\n <MenuPrimitive.Positioner\n className=\"isolate z-50 outline-none\"\n align={align}\n alignOffset={alignOffset}\n side={side}\n sideOffset={sideOffset}\n >\n <MenuPrimitive.Popup\n data-slot=\"dropdown-menu-content\"\n className={cn(\"data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 bg-popover text-popover-foreground min-w-32 rounded-lg p-1 shadow-md ring-1 duration-100 data-[side=inline-start]:slide-in-from-right-2 data-[side=inline-end]:slide-in-from-left-2 z-50 max-h-(--available-height) w-(--anchor-width) origin-(--transform-origin) overflow-x-hidden overflow-y-auto outline-none data-closed:overflow-hidden\", className )}\n {...props}\n />\n </MenuPrimitive.Positioner>\n </MenuPrimitive.Portal>\n )\n}\n\nfunction DropdownMenuGroup({ ...props }: MenuPrimitive.Group.Props) {\n return <MenuPrimitive.Group data-slot=\"dropdown-menu-group\" {...props} />\n}\n\nfunction DropdownMenuLabel({\n className,\n inset,\n ...props\n}: MenuPrimitive.GroupLabel.Props & {\n inset?: boolean\n}) {\n return (\n <MenuPrimitive.GroupLabel\n data-slot=\"dropdown-menu-label\"\n data-inset={inset}\n className={cn(\"text-muted-foreground px-1.5 py-1 text-xs font-medium data-inset:pl-7\", className)}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuItem({\n className,\n inset,\n variant = \"default\",\n ...props\n}: MenuPrimitive.Item.Props & {\n inset?: boolean\n variant?: \"default\" | \"destructive\"\n}) {\n return (\n <MenuPrimitive.Item\n data-slot=\"dropdown-menu-item\"\n data-inset={inset}\n data-variant={variant}\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:text-destructive not-data-[variant=destructive]:focus:**:text-accent-foreground gap-1.5 rounded-md px-1.5 py-1 text-sm data-inset:pl-7 [&_svg:not([class*='size-'])]:size-4 group/dropdown-menu-item relative flex cursor-default items-center outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuSub({ ...props }: MenuPrimitive.SubmenuRoot.Props) {\n return <MenuPrimitive.SubmenuRoot data-slot=\"dropdown-menu-sub\" {...props} />\n}\n\nfunction DropdownMenuSubTrigger({\n className,\n inset,\n children,\n ...props\n}: MenuPrimitive.SubmenuTrigger.Props & {\n inset?: boolean\n}) {\n return (\n <MenuPrimitive.SubmenuTrigger\n data-slot=\"dropdown-menu-sub-trigger\"\n data-inset={inset}\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground data-open:bg-accent data-open:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground gap-1.5 rounded-md px-1.5 py-1 text-sm data-inset:pl-7 [&_svg:not([class*='size-'])]:size-4 data-popup-open:bg-accent data-popup-open:text-accent-foreground flex cursor-default items-center outline-hidden select-none [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronRightIcon className=\"ml-auto\" />\n </MenuPrimitive.SubmenuTrigger>\n )\n}\n\nfunction DropdownMenuSubContent({\n align = \"start\",\n alignOffset = -3,\n side = \"right\",\n sideOffset = 0,\n className,\n ...props\n}: React.ComponentProps<typeof DropdownMenuContent>) {\n return (\n <DropdownMenuContent\n data-slot=\"dropdown-menu-sub-content\"\n className={cn(\"data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 bg-popover text-popover-foreground min-w-[96px] rounded-md p-1 shadow-lg ring-1 duration-100 w-auto\", className)}\n align={align}\n alignOffset={alignOffset}\n side={side}\n sideOffset={sideOffset}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuCheckboxItem({\n className,\n children,\n checked,\n inset,\n ...props\n}: MenuPrimitive.CheckboxItem.Props & {\n inset?: boolean\n}) {\n return (\n <MenuPrimitive.CheckboxItem\n data-slot=\"dropdown-menu-checkbox-item\"\n data-inset={inset}\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm data-inset:pl-7 [&_svg:not([class*='size-'])]:size-4 relative flex cursor-default items-center outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n className\n )}\n checked={checked}\n {...props}\n >\n <span\n className=\"absolute right-2 flex items-center justify-center pointer-events-none\"\n data-slot=\"dropdown-menu-checkbox-item-indicator\"\n >\n <MenuPrimitive.CheckboxItemIndicator>\n <CheckIcon\n />\n </MenuPrimitive.CheckboxItemIndicator>\n </span>\n {children}\n </MenuPrimitive.CheckboxItem>\n )\n}\n\nfunction DropdownMenuRadioGroup({ ...props }: MenuPrimitive.RadioGroup.Props) {\n return (\n <MenuPrimitive.RadioGroup\n data-slot=\"dropdown-menu-radio-group\"\n {...props}\n />\n )\n}\n\nfunction DropdownMenuRadioItem({\n className,\n children,\n inset,\n ...props\n}: MenuPrimitive.RadioItem.Props & {\n inset?: boolean\n}) {\n return (\n <MenuPrimitive.RadioItem\n data-slot=\"dropdown-menu-radio-item\"\n data-inset={inset}\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm data-inset:pl-7 [&_svg:not([class*='size-'])]:size-4 relative flex cursor-default items-center outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n className\n )}\n {...props}\n >\n <span\n className=\"absolute right-2 flex items-center justify-center pointer-events-none\"\n data-slot=\"dropdown-menu-radio-item-indicator\"\n >\n <MenuPrimitive.RadioItemIndicator>\n <CheckIcon\n />\n </MenuPrimitive.RadioItemIndicator>\n </span>\n {children}\n </MenuPrimitive.RadioItem>\n )\n}\n\nfunction DropdownMenuSeparator({\n className,\n ...props\n}: MenuPrimitive.Separator.Props) {\n return (\n <MenuPrimitive.Separator\n data-slot=\"dropdown-menu-separator\"\n className={cn(\"bg-border -mx-1 my-1 h-px\", className)}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuShortcut({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"dropdown-menu-shortcut\"\n className={cn(\"text-muted-foreground group-focus/dropdown-menu-item:text-accent-foreground ml-auto text-xs tracking-widest\", className)}\n {...props}\n />\n )\n}\n\nexport {\n DropdownMenu,\n DropdownMenuPortal,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuLabel,\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubTrigger,\n DropdownMenuSubContent,\n}\n","import * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Textarea({ className, ...props }: React.ComponentProps<\"textarea\">) {\n return (\n <textarea\n data-slot=\"textarea\"\n className={cn(\n \"border-input dark:bg-input/30 focus-visible:border-ring focus-visible:ring-ring/30 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 disabled:bg-input/50 dark:disabled:bg-input/80 rounded-lg border bg-transparent px-2.5 py-2 text-base transition-colors focus-visible:ring-2 aria-invalid:ring-2 md:text-sm placeholder:text-muted-foreground flex field-sizing-content min-h-16 w-full outline-none disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Textarea }\n","import { DeviceStatusBadge } from '@/components/device-status-badge';\nimport { useTmuxStore } from '@/stores/tmux';\nimport { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';\nimport type { CreateDeviceRequest, Device, UpdateDeviceRequest } from '@tmex/shared';\n\ntype DeviceListItem = Device & {\n lastError?: string | null;\n lastErrorType?: string | null;\n};\nimport { Globe, Monitor, MoreHorizontal, Pencil, Plus, Trash2, Zap } from 'lucide-react';\nimport { type FormEvent, useState, useEffect } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Link } from 'react-router';\nimport { toast } from 'sonner';\nimport { Badge } from '@/components/ui/badge';\nimport { Button, buttonVariants } from '@/components/ui/button';\nimport { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card';\nimport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogMedia,\n AlertDialogTitle,\n} from '@/components/ui/alert-dialog';\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n} from '@/components/ui/dialog';\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '@/components/ui/dropdown-menu';\nimport { Input } from '@/components/ui/input';\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@/components/ui/select';\nimport { Separator } from '@/components/ui/separator';\nimport { Textarea } from '@/components/ui/textarea';\n\ntype DeviceFormValues = {\n name: string;\n type: 'local' | 'ssh';\n host: string;\n port: number;\n username: string;\n sshConfigRef: string;\n session: string;\n authMode: CreateDeviceRequest['authMode'];\n password: string;\n privateKey: string;\n privateKeyPassphrase: string;\n};\n\nfunction normalizeText(value: string): string | undefined {\n const trimmed = value.trim();\n return trimmed ? trimmed : undefined;\n}\n\nfunction createDefaultFormValues(device?: Device): DeviceFormValues {\n if (!device) {\n return {\n name: '',\n type: 'local',\n host: '',\n port: 22,\n username: '',\n sshConfigRef: '',\n session: 'tmex',\n authMode: 'auto',\n password: '',\n privateKey: '',\n privateKeyPassphrase: '',\n };\n }\n\n return {\n name: device.name,\n type: device.type,\n host: device.host ?? '',\n port: device.port ?? 22,\n username: device.username ?? '',\n sshConfigRef: device.sshConfigRef ?? '',\n session: device.session ?? 'tmex',\n authMode: device.type === 'local' ? 'auto' : device.authMode,\n password: '',\n privateKey: '',\n privateKeyPassphrase: '',\n };\n}\n\nfunction buildCreatePayload(values: DeviceFormValues): CreateDeviceRequest {\n if (values.type === 'local') {\n return {\n name: values.name.trim(),\n type: 'local',\n session: normalizeText(values.session) ?? 'tmex',\n authMode: 'auto',\n };\n }\n\n const payload: CreateDeviceRequest = {\n name: values.name.trim(),\n type: 'ssh',\n host: normalizeText(values.host),\n port: values.port,\n username: normalizeText(values.username),\n sshConfigRef: normalizeText(values.sshConfigRef),\n session: normalizeText(values.session) ?? 'tmex',\n authMode: values.authMode,\n };\n\n if (values.authMode === 'password') {\n payload.password = values.password;\n }\n\n if (values.authMode === 'key') {\n payload.privateKey = values.privateKey;\n payload.privateKeyPassphrase = values.privateKeyPassphrase || undefined;\n }\n\n return payload;\n}\n\nfunction buildUpdatePayload(values: DeviceFormValues): UpdateDeviceRequest {\n if (values.type === 'local') {\n return {\n name: values.name.trim(),\n session: normalizeText(values.session) ?? 'tmex',\n authMode: 'auto',\n };\n }\n\n const payload: UpdateDeviceRequest = {\n name: values.name.trim(),\n host: normalizeText(values.host),\n port: values.port,\n username: normalizeText(values.username),\n sshConfigRef: normalizeText(values.sshConfigRef),\n session: normalizeText(values.session) ?? 'tmex',\n authMode: values.authMode,\n };\n\n if (values.authMode === 'password' && values.password) {\n payload.password = values.password;\n }\n\n if (values.authMode === 'key' && values.privateKey) {\n payload.privateKey = values.privateKey;\n payload.privateKeyPassphrase = values.privateKeyPassphrase || undefined;\n }\n\n return payload;\n}\n\nasync function parseApiError(res: Response, fallback: string): Promise<string> {\n try {\n const payload = (await res.json()) as { error?: string };\n return payload.error ?? fallback;\n } catch {\n return fallback;\n }\n}\n\nexport default function DevicesPage() {\n const { t } = useTranslation();\n const [showAddModal, setShowAddModal] = useState(false);\n const [editingDevice, setEditingDevice] = useState<Device | null>(null);\n const [deleteCandidate, setDeleteCandidate] = useState<Device | null>(null);\n const queryClient = useQueryClient();\n\n // Listen for open add device event from AppHeader\n useEffect(() => {\n const handleOpenAddDevice = () => setShowAddModal(true);\n window.addEventListener('tmex:open-add-device', handleOpenAddDevice);\n return () => window.removeEventListener('tmex:open-add-device', handleOpenAddDevice);\n }, []);\n\n const { data, isLoading, isError } = useQuery({\n queryKey: ['devices'],\n queryFn: async () => {\n const res = await fetch('/api/devices');\n if (!res.ok) throw new Error(t('device.loadFailed'));\n return res.json() as Promise<{ devices: DeviceListItem[] }>;\n },\n throwOnError: false,\n });\n\n const hydrateDeviceErrors = useTmuxStore((state) => state.hydrateDeviceErrors);\n\n useEffect(() => {\n if (!data?.devices) return;\n hydrateDeviceErrors(\n data.devices.map((d) => ({\n deviceId: d.id,\n lastError: d.lastError ?? null,\n lastErrorType: d.lastErrorType ?? null,\n }))\n );\n }, [data, hydrateDeviceErrors]);\n\n const deleteDevice = useMutation({\n mutationFn: async (id: string) => {\n const res = await fetch(`/api/devices/${id}`, {\n method: 'DELETE',\n });\n if (!res.ok) throw new Error(t('device.deleteFailed'));\n },\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['devices'] });\n toast.success(t('common.success'));\n },\n onError: (err) => {\n toast.error(err instanceof Error ? err.message : t('common.error'));\n },\n });\n\n const devices = data?.devices ?? [];\n\n return (\n <div className=\"mx-auto flex w-full max-w-6xl flex-col gap-3 p-3 pb-[calc(1rem+env(safe-area-inset-bottom))] sm:gap-4 sm:p-5\" data-testid=\"devices-page\">\n {isLoading ? (\n <Card>\n <CardContent className=\"py-16 text-center text-sm text-muted-foreground\">{t('common.loading')}</CardContent>\n </Card>\n ) : isError ? (\n <Card>\n <CardContent className=\"py-16 text-center text-sm text-destructive\">{t('device.loadFailed')}</CardContent>\n </Card>\n ) : devices.length === 0 ? (\n <Card>\n <CardContent className=\"space-y-4 py-14 text-center\">\n <div className=\"mx-auto flex h-12 w-12 items-center justify-center rounded-xl border border-border bg-muted\">\n <Monitor className=\"h-6 w-6 text-muted-foreground\" />\n </div>\n <div className=\"space-y-1\">\n <h2 className=\"text-lg font-medium\">{t('device.noDevices')}</h2>\n <p className=\"text-sm text-muted-foreground\">{t('device.addDevice')}</p>\n </div>\n <Button variant=\"default\" data-testid=\"devices-add-empty\" onClick={() => setShowAddModal(true)}>\n <Plus className=\"h-4 w-4\" />\n {t('device.addDevice')}\n </Button>\n </CardContent>\n </Card>\n ) : (\n <div className=\"grid gap-3 lg:grid-cols-2\">\n {devices.map((device) => (\n <DeviceCard\n key={device.id}\n device={device}\n onEdit={() => setEditingDevice(device)}\n onDelete={() => setDeleteCandidate(device)}\n />\n ))}\n </div>\n )}\n\n {showAddModal && <DeviceDialog mode=\"create\" onClose={() => setShowAddModal(false)} />}\n {editingDevice && (\n <DeviceDialog mode=\"edit\" device={editingDevice} onClose={() => setEditingDevice(null)} />\n )}\n\n <AlertDialog open={deleteCandidate !== null} onOpenChange={(open) => !open && setDeleteCandidate(null)}>\n <AlertDialogContent>\n <AlertDialogHeader>\n <AlertDialogMedia className=\"bg-destructive/10\">\n <Trash2 className=\"h-5 w-5 text-destructive\" />\n </AlertDialogMedia>\n <AlertDialogTitle>{t('device.deleteConfirm')}</AlertDialogTitle>\n <AlertDialogDescription>\n {t('device.deleteDescription', { name: deleteCandidate?.name ?? '' })}\n </AlertDialogDescription>\n </AlertDialogHeader>\n <AlertDialogFooter>\n <AlertDialogCancel>{t('common.cancel')}</AlertDialogCancel>\n <AlertDialogAction\n variant=\"destructive\"\n disabled={!deleteCandidate || deleteDevice.isPending}\n onClick={() => {\n if (!deleteCandidate) return;\n deleteDevice.mutate(deleteCandidate.id);\n setDeleteCandidate(null);\n }}\n >\n {t('common.delete')}\n </AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n </div>\n );\n}\n\ninterface DeviceCardProps {\n device: Device;\n onEdit: () => void;\n onDelete: () => void;\n}\n\nfunction DeviceCard({ device, onEdit, onDelete }: DeviceCardProps) {\n const { t } = useTranslation();\n\n const icon =\n device.type === 'local' ? <Monitor className=\"h-4 w-4\" /> : <Globe className=\"h-4 w-4\" />;\n const subtitle =\n device.type === 'local'\n ? t('device.typeLocal')\n : `${device.username ?? '-'}@${device.host ?? '-'}:${device.port ?? 22}`;\n\n const testConnection = useMutation({\n mutationFn: async () => {\n const res = await fetch(`/api/devices/${device.id}/test-connection`, {\n method: 'POST',\n });\n\n let payload: unknown = null;\n try {\n payload = (await res.json()) as unknown;\n } catch {\n payload = null;\n }\n\n if (!res.ok) {\n const err = payload as { error?: string } | null;\n throw new Error(err?.error ?? t('common.error'));\n }\n\n return payload as { success?: boolean; tmuxAvailable?: boolean; message?: string };\n },\n onSuccess: (payload) => {\n toast.success(payload.message ?? t('common.success'));\n },\n onError: (err) => {\n toast.error(err instanceof Error ? err.message : t('common.error'));\n },\n });\n\n return (\n <Card data-testid=\"device-card\" data-device-id={device.id} data-device-name={device.name} className=\"overflow-hidden\">\n <CardHeader className=\"space-y-2 pb-2\">\n <div className=\"flex items-start justify-between gap-2\">\n <div className=\"flex min-w-0 items-center gap-2.5\">\n <div className=\"flex h-8 w-8 shrink-0 items-center justify-center rounded-md border border-border bg-muted text-muted-foreground\">\n {icon}\n </div>\n <div className=\"min-w-0 space-y-0.5\">\n <CardTitle className=\"line-clamp-1 text-sm\" title={device.name}>\n {device.name}\n </CardTitle>\n <CardDescription className=\"line-clamp-1 text-xs\">{subtitle}</CardDescription>\n </div>\n </div>\n\n <div className=\"flex shrink-0 items-center gap-1\">\n <DropdownMenu>\n <DropdownMenuTrigger\n render={\n <Button\n variant=\"ghost\"\n size=\"icon-sm\"\n data-testid={`device-card-actions-${device.id}`}\n aria-label={t('common.edit')}\n title={t('common.edit')}\n />\n }\n >\n <MoreHorizontal className=\"h-4 w-4\" />\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n <DropdownMenuItem\n data-testid={`device-card-edit-${device.id}`}\n onClick={onEdit}\n >\n <Pencil className=\"h-4 w-4\" />\n {t('common.edit')}\n </DropdownMenuItem>\n {device.type === 'ssh' && (\n <DropdownMenuItem\n data-testid={`device-card-test-${device.id}`}\n onClick={() => testConnection.mutate()}\n disabled={testConnection.isPending}\n >\n <Zap className=\"h-4 w-4\" />\n {t('common.test')}\n </DropdownMenuItem>\n )}\n <DropdownMenuSeparator />\n <DropdownMenuItem\n data-testid={`device-card-delete-${device.id}`}\n variant=\"destructive\"\n onClick={onDelete}\n >\n <Trash2 className=\"h-4 w-4\" />\n {t('common.delete')}\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n </div>\n\n <div className=\"flex flex-wrap items-center gap-1.5\">\n <Badge variant=\"outline\" className=\"text-[11px] font-normal\">\n {device.type === 'local' ? t('device.typeLocal') : t('device.typeSSHBadge')}\n </Badge>\n {device.session && (\n <Badge variant=\"outline\" className=\"text-[11px] font-normal\">\n {device.session}\n </Badge>\n )}\n <DeviceStatusBadge deviceId={device.id} />\n </div>\n </CardHeader>\n\n <CardContent className=\"pt-0\">\n <Separator className=\"mb-2\" />\n <div className=\"flex items-center justify-end\">\n <Link\n to={`/devices/${device.id}`}\n data-testid={`device-card-connect-${device.id}`}\n className={buttonVariants({ variant: 'default', size: 'sm' })}\n >\n {t('device.connect')}\n </Link>\n </div>\n </CardContent>\n </Card>\n );\n}\n\ninterface DeviceDialogProps {\n mode: 'create' | 'edit';\n device?: Device;\n onClose: () => void;\n}\n\nfunction DeviceDialog({ mode, device, onClose }: DeviceDialogProps) {\n const { t } = useTranslation();\n const queryClient = useQueryClient();\n const [formData, setFormData] = useState<DeviceFormValues>(createDefaultFormValues(device));\n const [isSubmitting, setIsSubmitting] = useState(false);\n\n const isEditMode = mode === 'edit';\n const isSSH = formData.type === 'ssh';\n\n const createDevice = useMutation({\n mutationFn: async (payload: CreateDeviceRequest) => {\n const res = await fetch('/api/devices', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(payload),\n });\n\n if (!res.ok) {\n throw new Error(await parseApiError(res, t('device.createFailed')));\n }\n\n return res.json();\n },\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['devices'] });\n toast.success(t('common.success'));\n onClose();\n },\n onError: (err) => {\n toast.error(err instanceof Error ? err.message : t('common.error'));\n },\n });\n\n const updateDevice = useMutation({\n mutationFn: async (payload: UpdateDeviceRequest) => {\n if (!device) {\n throw new Error(t('apiError.deviceNotFound'));\n }\n\n const res = await fetch(`/api/devices/${device.id}`, {\n method: 'PATCH',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(payload),\n });\n\n if (!res.ok) {\n throw new Error(await parseApiError(res, t('device.updateFailed')));\n }\n\n return res.json();\n },\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['devices'] });\n toast.success(t('common.success'));\n onClose();\n },\n onError: (err) => {\n toast.error(err instanceof Error ? err.message : t('common.error'));\n },\n });\n\n const handleSubmit = async (e: FormEvent) => {\n e.preventDefault();\n setIsSubmitting(true);\n\n try {\n if (mode === 'create') {\n await createDevice.mutateAsync(buildCreatePayload(formData));\n } else {\n await updateDevice.mutateAsync(buildUpdatePayload(formData));\n }\n } catch {\n // handled by mutation onError\n } finally {\n setIsSubmitting(false);\n }\n };\n\n const deviceNameInputId = `${mode}-device-name`;\n const deviceTypeSelectId = `${mode}-device-type`;\n const sshHostInputId = `${mode}-device-host`;\n const sshPortInputId = `${mode}-device-port`;\n const sshUsernameInputId = `${mode}-device-username`;\n const sessionInputId = `${mode}-device-session`;\n const authModeSelectId = `${mode}-device-auth-mode`;\n const passwordInputId = `${mode}-device-password`;\n const privateKeyTextareaId = `${mode}-device-private-key`;\n const privateKeyPassphraseInputId = `${mode}-device-private-key-passphrase`;\n\n const typeLabels: Record<string, string> = {\n local: t('device.typeLocal'),\n ssh: t('device.typeSSH'),\n };\n const authLabels: Record<string, string> = {\n password: t('device.authPassword'),\n key: t('device.authKey'),\n agent: t('device.authAgent'),\n configRef: 'SSH Config',\n };\n\n const sectionHeading = (text: string) => (\n <div className=\"text-[11px] font-semibold uppercase tracking-wider text-muted-foreground\">\n {text}\n </div>\n );\n\n const fieldLabel = (htmlFor: string, text: string, required?: boolean) => (\n <label className=\"block text-xs font-medium text-foreground\" htmlFor={htmlFor}>\n {text}\n {required && <span className=\"ml-0.5 text-destructive\">*</span>}\n </label>\n );\n\n return (\n <Dialog open={true} onOpenChange={(open) => !open && onClose()}>\n <DialogContent data-testid=\"device-dialog\" className=\"w-full max-w-2xl\">\n <DialogHeader>\n <DialogTitle>{isEditMode ? t('device.editDevice') : t('device.addDevice')}</DialogTitle>\n <DialogDescription>\n {isEditMode ? t('device.editDeviceDescription') : t('device.addDeviceDescription')}\n </DialogDescription>\n </DialogHeader>\n\n <form onSubmit={handleSubmit} className=\"space-y-4\">\n <div className=\"-mr-2 max-h-[min(70vh,720px)] space-y-5 overflow-y-auto pr-2\">\n <section className=\"space-y-2.5\">\n {sectionHeading(t('device.sectionBasic'))}\n <div className=\"grid gap-3 sm:grid-cols-2\">\n <div className=\"space-y-1.5 sm:col-span-2\">\n {fieldLabel(deviceNameInputId, t('device.name'), true)}\n <Input\n id={deviceNameInputId}\n data-testid=\"device-name-input\"\n type=\"text\"\n value={formData.name}\n onChange={(e) => setFormData((d) => ({ ...d, name: e.target.value }))}\n placeholder={t('device.namePlaceholder')}\n required\n />\n </div>\n\n <div className=\"space-y-1.5\">\n {fieldLabel(deviceTypeSelectId, t('device.type'))}\n <Select\n value={formData.type}\n onValueChange={(nextValue) => {\n if (!nextValue) return;\n const nextType = nextValue as 'local' | 'ssh';\n setFormData((d) => ({\n ...d,\n type: nextType,\n authMode:\n nextType === 'local'\n ? 'auto'\n : d.authMode === 'auto'\n ? 'password'\n : d.authMode,\n }));\n }}\n disabled={isEditMode}\n >\n <SelectTrigger\n id={deviceTypeSelectId}\n data-testid=\"device-type-select\"\n className=\"w-full\"\n >\n <SelectValue placeholder={t('device.type')}>\n {(value) => typeLabels[value as string] ?? ''}\n </SelectValue>\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"local\">{t('device.typeLocal')}</SelectItem>\n <SelectItem value=\"ssh\">{t('device.typeSSH')}</SelectItem>\n </SelectContent>\n </Select>\n </div>\n\n <div className=\"space-y-1.5\">\n {fieldLabel(sessionInputId, t('device.session'))}\n <Input\n id={sessionInputId}\n data-testid=\"device-session-input\"\n type=\"text\"\n value={formData.session}\n onChange={(e) => setFormData((d) => ({ ...d, session: e.target.value }))}\n placeholder={t('device.sessionPlaceholder')}\n />\n </div>\n </div>\n </section>\n\n {isSSH && (\n <>\n <section className=\"space-y-2.5\">\n {sectionHeading(t('device.sectionConnection'))}\n <div className=\"grid gap-3 sm:grid-cols-3\">\n <div className=\"space-y-1.5 sm:col-span-2\">\n {fieldLabel(sshHostInputId, t('device.host'))}\n <Input\n id={sshHostInputId}\n type=\"text\"\n value={formData.host}\n onChange={(e) => setFormData((d) => ({ ...d, host: e.target.value }))}\n placeholder={t('device.hostPlaceholder')}\n />\n </div>\n\n <div className=\"space-y-1.5\">\n {fieldLabel(sshPortInputId, t('device.port'))}\n <Input\n id={sshPortInputId}\n type=\"number\"\n value={formData.port}\n onChange={(e) =>\n setFormData((d) => ({\n ...d,\n port: Number.parseInt(e.target.value || '22', 10),\n }))\n }\n min={1}\n max={65535}\n />\n </div>\n\n <div className=\"space-y-1.5 sm:col-span-2\">\n {fieldLabel(sshUsernameInputId, t('device.username'))}\n <Input\n id={sshUsernameInputId}\n type=\"text\"\n value={formData.username}\n onChange={(e) => setFormData((d) => ({ ...d, username: e.target.value }))}\n placeholder={t('device.usernamePlaceholder')}\n />\n </div>\n\n <div className=\"space-y-1.5\">\n {fieldLabel(`${mode}-device-ssh-config-ref`, 'SSH Config')}\n <Input\n id={`${mode}-device-ssh-config-ref`}\n type=\"text\"\n value={formData.sshConfigRef}\n onChange={(e) =>\n setFormData((d) => ({ ...d, sshConfigRef: e.target.value }))\n }\n placeholder=\"~/.ssh/config\"\n />\n </div>\n </div>\n </section>\n\n <section className=\"space-y-2.5\">\n {sectionHeading(t('device.sectionAuth'))}\n <div className=\"space-y-3\">\n <div className=\"space-y-1.5\">\n {fieldLabel(authModeSelectId, t('device.authMode'))}\n <Select\n value={formData.authMode}\n onValueChange={(nextValue) => {\n if (!nextValue) return;\n setFormData((d) => ({\n ...d,\n authMode: nextValue as CreateDeviceRequest['authMode'],\n }));\n }}\n >\n <SelectTrigger id={authModeSelectId} className=\"w-full\">\n <SelectValue placeholder={t('device.authMode')}>\n {(value) => authLabels[value as string] ?? ''}\n </SelectValue>\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"password\">{t('device.authPassword')}</SelectItem>\n <SelectItem value=\"key\">{t('device.authKey')}</SelectItem>\n <SelectItem value=\"agent\">{t('device.authAgent')}</SelectItem>\n <SelectItem value=\"configRef\">SSH Config</SelectItem>\n </SelectContent>\n </Select>\n </div>\n\n {formData.authMode === 'password' && (\n <div className=\"space-y-1.5\">\n {fieldLabel(passwordInputId, t('device.password'))}\n <Input\n id={passwordInputId}\n type=\"password\"\n value={formData.password}\n onChange={(e) =>\n setFormData((d) => ({ ...d, password: e.target.value }))\n }\n />\n </div>\n )}\n\n {formData.authMode === 'key' && (\n <>\n <div className=\"space-y-1.5\">\n {fieldLabel(privateKeyTextareaId, t('device.privateKey'))}\n <Textarea\n id={privateKeyTextareaId}\n value={formData.privateKey}\n onChange={(e) =>\n setFormData((d) => ({ ...d, privateKey: e.target.value }))\n }\n className=\"h-28 font-mono text-xs\"\n placeholder={t('device.privateKeyPlaceholder')}\n />\n </div>\n <div className=\"space-y-1.5\">\n {fieldLabel(privateKeyPassphraseInputId, t('device.passphrase'))}\n <Input\n id={privateKeyPassphraseInputId}\n type=\"password\"\n value={formData.privateKeyPassphrase}\n onChange={(e) =>\n setFormData((d) => ({\n ...d,\n privateKeyPassphrase: e.target.value,\n }))\n }\n />\n </div>\n </>\n )}\n </div>\n </section>\n </>\n )}\n </div>\n\n <DialogFooter>\n <Button type=\"button\" variant=\"outline\" onClick={onClose}>\n {t('common.cancel')}\n </Button>\n <Button\n type=\"submit\"\n variant=\"default\"\n data-testid=\"device-dialog-save\"\n disabled={isSubmitting}\n >\n {isSubmitting ? t('common.saving') : t('common.save')}\n </Button>\n </DialogFooter>\n </form>\n </DialogContent>\n </Dialog>\n );\n}\n\n// Page title component\nexport function PageTitle() {\n const { t } = useTranslation();\n return <>{t('sidebar.manageDevices')}</>;\n}\n\n// Page actions component\nexport function PageActions() {\n const { t } = useTranslation();\n \n const handleAdd = () => {\n window.dispatchEvent(new CustomEvent('tmex:open-add-device'));\n };\n \n return (\n <Button\n variant=\"ghost\"\n size=\"icon-sm\"\n data-testid=\"devices-add\"\n onClick={handleAdd}\n aria-label={t('sidebar.addDevice')}\n title={t('sidebar.addDevice')}\n >\n <Plus className=\"h-4 w-4\" />\n </Button>\n );\n}\n"],"names":["__iconNode","Ellipsis","createLucideIcon","Pencil","Zap","Dialog","props","DialogPrimitive.Root","DialogPortal","DialogPrimitive.Portal","DialogOverlay","className","jsx","DialogPrimitive.Backdrop","cn","DialogContent","children","showCloseButton","jsxs","DialogPrimitive.Popup","DialogPrimitive.Close","Button","XIcon","DialogHeader","DialogFooter","DialogTitle","DialogPrimitive.Title","DialogDescription","DialogPrimitive.Description","MenuPositionerContext","React.createContext","useMenuPositionerContext","optional","context","React.useContext","_formatErrorMessage","MenuRootContext","useMenuRootContext","ContextMenuRootContext","useContextMenuRootContext","useMenuItemCommonProps","params","closeOnClick","highlighted","id","nodeId","store","itemRef","itemMetadata","menuEvents","contextMenuContext","isContextMenu","React.useMemo","event","REASONS.itemPress","initialCursorPoint","REGULAR_ITEM","useMenuItem","disabled","nativeButton","React.useRef","getButtonProps","buttonRef","useButton","commonProps","getItemProps","React.useCallback","externalProps","mergeProps","mergedRef","useMergedRefs","MenuItem","React.forwardRef","componentProps","forwardedRef","render","idProp","label","elementProps","listItem","useCompositeListItem","menuPositionerContext","useBaseUiId","itemProps","useRenderElement","stateAttributesMapping","baseMapping","transitionStatusMapping","MenuPopup","finalFocus","side","align","insideToolbar","useToolbarRootContext","open","transitionStatus","popupProps","mounted","instantType","triggerElement","parent","lastOpenChangeReason","rootId","floatingContext","floatingTreeRoot","closeDelay","activeTriggerElement","useOpenChangeComplete","_b","_a","React.useEffect","handleClose","createChangeEventDetails","hoverEnabled","useHoverFloatingInteraction","state","element","COMPOSITE_KEYS","getDisabledMountTransitionStyles","returnFocus","REASONS.outsidePress","FloatingFocusManager","MenuPortalContext","useMenuPortalContext","value","MenuPortal","keepMounted","portalProps","_jsx","FloatingPortal","MenuPositioner","anchorProp","positionMethodProp","alignProp","sideOffsetProp","alignOffsetProp","collisionBoundary","collisionPadding","arrowPadding","sticky","disableAnchorTracking","collisionAvoidanceProp","DROPDOWN_COLLISION_AVOIDANCE","floatingRootContext","modal","floatingNodeId","floatingParentNodeId","anchor","sideOffset","alignOffset","collisionAvoidance","computedSide","computedAlign","POPUP_COLLISION_AVOIDANCE","contextMenu","positioner","useAnchorPositioning","positionerProps","hiddenStyles","onMenuOpenChange","details","REASONS.siblingOpen","onParentClose","reason","onItemHover","eventDetails","contextValue","popupStateMapping","shouldRenderBackdrop","REASONS.triggerHover","backdropCutout","_jsxs","InternalBackdrop","inertValue","FloatingNode","CompositeList","MenubarContext","useMenubarContext","selectors","popupStoreSelectors","createSelector","itemIndex","MenuStore","ReactStore","initialState","createInitialState","React.createRef","PopupTriggerMap","__publicField","externalStore","internalStore","useRefWithInit","createInitialPopupStoreState","FloatingTreeStore","EMPTY_OBJECT","MenuSubmenuRootContext","useMenuSubmenuRootContext","MenuRoot","fastComponent","openProp","onOpenChange","onOpenChangeComplete","defaultOpen","disabledProp","modalProp","loopFocus","orientation","actionsRef","closeParentOnEsc","handle","triggerIdProp","defaultTriggerIdProp","highlightItemOnHover","parentMenuRootContext","menubarContext","isSubmenu","parentFromContext","useOnFirstRender","floatingNodeIdFromContext","useFloatingNodeId","floatingParentNodeIdFromContext","useFloatingParentNodeId","useIsoLayoutEffect","positionerElement","activeIndex","payload","openEventRef","nested","floatingEvents","useId","openMethod","interactionTypeProps","resetOpenInteractionType","useOpenInteractionType","useImplicitActiveTrigger","forceUnmount","useOpenStateTransitions","allowOutsidePressDismissalRef","allowOutsidePressDismissalTimeout","useTimeout","useScrollLock","allowTouchToCloseRef","allowTouchToCloseTimeout","setOpen","useStableCallback","nextOpen","nativeEvent","activeOption","REASONS.triggerFocus","isKeyboardClick","REASONS.triggerPress","isDismissClose","REASONS.escapeKey","updatedState","newTriggerId","REASONS.focusOut","REASONS.listNavigation","createMenuEventDetails","handleImperativeClose","REASONS.imperativeAction","React.useImperativeHandle","ctx","useSyncedFloatingRootContext","handleSetOpenEvent","dismiss","useDismiss","role","useRole","direction","useDirection","setActiveIndex","index","listNavigation","useListNavigation","EMPTY_ARRAY","onTypingChange","nextTyping","typeahead","useTypeahead","TYPEAHEAD_RESET_MS","getReferenceProps","getFloatingProps","getTriggerProps","useInteractions","activeTriggerProps","mergedProps","inactiveTriggerProps","triggerProps","relay","content","FloatingTree","useCompositeItem","highlightedIndex","onHighlightedIndexChange","useCompositeRootContext","ref","isHighlighted","item","CompositeItem","refs","metadata","tag","compositeProps","compositeRef","findRootOwnerId","node","isHTMLElement","isLastTraversableNode","getParentNode","useMixedToggleClickHandler","enabled","mouseDownAction","ignoreClickRef","ownerDocument","BOUNDARY_OFFSET","MenuTrigger","fastComponentRef","openOnHoverProp","delay","rootContext","thisTriggerId","isTriggerActive","isOpenedByThisTrigger","triggerElementRef","useMenuParent","compositeRootContext","floatingTreeRootFromContext","useFloatingTree","registerTrigger","isMountedByThisTrigger","useTriggerDataForwarding","isInMenubar","rootDisabled","triggerRef","allowMouseUpTriggerTimeout","handleDocumentMouseUp","mouseEvent","mouseUpTarget","contains","bounds","getPseudoElementBounds","REASONS.cancelOpen","parentMenubarHasSubmenuOpen","hoverProps","useHoverReferenceInteraction","safePolygon","stickIfOpen","useStickIfOpen","click","useClick","focus","useFocus","mixedToggleHandlers","localInteractionProps","rootTriggerProps","preFocusGuardRef","handlePreFocusGuardFocus","ReactDOM.flushSync","previousTabbable","getTabbableBeforeElement","handleFocusTargetFocus","currentPositionerElement","isOutsideEvent","nextTabbable","getTabbableAfterElement","prevTabbable","getNextTabbable","pressableTriggerOpenStateMapping","React.Fragment","FocusGuard","openReason","stickIfOpenTimeout","setStickIfOpen","React.useState","PATIENT_CLICK_THRESHOLD","parentContext","DropdownMenu","MenuPrimitive.Root","DropdownMenuTrigger","MenuPrimitive.Trigger","DropdownMenuContent","MenuPrimitive.Portal","MenuPrimitive.Positioner","MenuPrimitive.Popup","DropdownMenuItem","inset","variant","MenuPrimitive.Item","DropdownMenuSeparator","MenuPrimitive.Separator","Textarea","normalizeText","trimmed","createDefaultFormValues","device","buildCreatePayload","values","buildUpdatePayload","parseApiError","res","fallback","DevicesPage","t","useTranslation","showAddModal","setShowAddModal","useState","editingDevice","setEditingDevice","deleteCandidate","setDeleteCandidate","queryClient","useQueryClient","useEffect","handleOpenAddDevice","data","isLoading","isError","useQuery","hydrateDeviceErrors","useTmuxStore","d","deleteDevice","useMutation","toast","err","devices","Card","CardContent","Monitor","Plus","DeviceCard","DeviceDialog","AlertDialog","AlertDialogContent","AlertDialogHeader","AlertDialogMedia","Trash2","AlertDialogTitle","AlertDialogDescription","AlertDialogFooter","AlertDialogCancel","AlertDialogAction","onEdit","onDelete","icon","Globe","subtitle","testConnection","CardHeader","CardTitle","CardDescription","MoreHorizontal","Badge","DeviceStatusBadge","Separator","Link","buttonVariants","mode","onClose","formData","setFormData","isSubmitting","setIsSubmitting","isEditMode","isSSH","createDevice","updateDevice","handleSubmit","e","deviceNameInputId","deviceTypeSelectId","sshHostInputId","sshPortInputId","sshUsernameInputId","sessionInputId","authModeSelectId","passwordInputId","privateKeyTextareaId","privateKeyPassphraseInputId","typeLabels","authLabels","sectionHeading","text","fieldLabel","htmlFor","required","Input","Select","nextValue","nextType","SelectTrigger","SelectValue","SelectContent","SelectItem","Fragment","PageTitle","PageActions","handleAdd"],"mappings":"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","x_google_ignoreList":[0,1,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22]}
|