@lobehub/ui 4.10.1 → 4.11.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.
Files changed (136) hide show
  1. package/es/Accordion/Accordion.d.mts +2 -2
  2. package/es/Accordion/AccordionItem.d.mts +2 -2
  3. package/es/ActionIcon/ActionIcon.d.mts +2 -2
  4. package/es/Alert/Alert.d.mts +2 -2
  5. package/es/AutoComplete/Select.d.mts +2 -2
  6. package/es/Avatar/AvatarGroup/index.d.mts +2 -2
  7. package/es/Burger/Burger.d.mts +2 -2
  8. package/es/CodeEditor/CodeEditor.d.mts +2 -2
  9. package/es/Collapse/Collapse.d.mts +2 -2
  10. package/es/ConfigProvider/index.d.mts +2 -2
  11. package/es/ContextMenu/ContextMenuHost.d.mts +2 -2
  12. package/es/CopyButton/CopyButton.d.mts +2 -2
  13. package/es/DatePicker/DatePicker.d.mts +2 -2
  14. package/es/DraggablePanel/components/DraggablePanelBody.d.mts +2 -2
  15. package/es/DraggablePanel/components/DraggablePanelContainer.d.mts +2 -2
  16. package/es/DraggablePanel/components/DraggablePanelFooter.d.mts +2 -2
  17. package/es/DraggablePanel/components/DraggablePanelHeader.d.mts +2 -2
  18. package/es/DraggableSideNav/DraggableSideNav.d.mts +2 -2
  19. package/es/Drawer/Drawer.d.mts +2 -2
  20. package/es/Dropdown/Dropdown.d.mts +2 -2
  21. package/es/DropdownMenu/DropdownMenu.d.mts +2 -2
  22. package/es/DropdownMenu/DropdownMenu.mjs +6 -16
  23. package/es/DropdownMenu/DropdownMenu.mjs.map +1 -1
  24. package/es/EditableText/EditableText.d.mts +2 -2
  25. package/es/EmojiPicker/EmojiPicker.d.mts +2 -2
  26. package/es/Flex/FlexBasic.d.mts +2 -2
  27. package/es/FontLoader/index.d.mts +2 -2
  28. package/es/Footer/Footer.d.mts +2 -2
  29. package/es/Form/components/FormGroup.d.mts +2 -2
  30. package/es/Form/components/FormItem.d.mts +2 -2
  31. package/es/Form/components/FormSubmitFooter.d.mts +2 -2
  32. package/es/FormModal/FormModal.d.mts +2 -2
  33. package/es/GuideCard/GuideCard.d.mts +2 -2
  34. package/es/Header/Header.d.mts +2 -2
  35. package/es/Highlighter/Highlighter.d.mts +2 -2
  36. package/es/Highlighter/SyntaxHighlighter/index.d.mts +2 -2
  37. package/es/Hotkey/Hotkey.d.mts +2 -2
  38. package/es/HotkeyInput/HotkeyInput.d.mts +2 -2
  39. package/es/Icon/Icon.d.mts +2 -2
  40. package/es/Icon/components/IconProvider.d.mts +3 -3
  41. package/es/Image/PreviewGroup.d.mts +2 -2
  42. package/es/ImageSelect/ImageSelect.d.mts +2 -2
  43. package/es/Input/Input.d.mts +2 -2
  44. package/es/Input/InputNumber.d.mts +2 -2
  45. package/es/Input/InputOPT.d.mts +2 -2
  46. package/es/Input/InputPassword.d.mts +2 -2
  47. package/es/Input/TextArea.d.mts +2 -2
  48. package/es/Layout/components/LayoutFooter.d.mts +2 -2
  49. package/es/Layout/components/LayoutHeader.d.mts +2 -2
  50. package/es/Layout/components/LayoutMain.d.mts +2 -2
  51. package/es/Layout/components/LayoutSidebar.d.mts +2 -2
  52. package/es/Layout/components/LayoutSidebarInner.d.mts +2 -2
  53. package/es/Layout/components/LayoutToc.d.mts +2 -2
  54. package/es/List/ListItem/index.d.mts +2 -2
  55. package/es/Markdown/Markdown.d.mts +2 -2
  56. package/es/Markdown/Typography.d.mts +2 -2
  57. package/es/Markdown/components/SearchResultCards/index.d.mts +2 -2
  58. package/es/MaskShadow/MaskShadow.d.mts +2 -2
  59. package/es/Menu/Menu.d.mts +2 -2
  60. package/es/Mermaid/Mermaid.d.mts +2 -2
  61. package/es/Mermaid/SyntaxMermaid/index.d.mts +2 -2
  62. package/es/Modal/Modal.d.mts +2 -2
  63. package/es/Modal/ModalProvider.d.mts +2 -2
  64. package/es/MotionProvider/index.d.mts +2 -2
  65. package/es/Popover/PopoverGroup.mjs +13 -4
  66. package/es/Popover/PopoverGroup.mjs.map +1 -1
  67. package/es/Popover/PopoverInGroup.mjs +13 -3
  68. package/es/Popover/PopoverInGroup.mjs.map +1 -1
  69. package/es/Popover/PopoverStandalone.mjs +27 -10
  70. package/es/Popover/PopoverStandalone.mjs.map +1 -1
  71. package/es/Popover/context.d.mts +15 -0
  72. package/es/Popover/context.mjs +21 -0
  73. package/es/Popover/context.mjs.map +1 -0
  74. package/es/Popover/groupContext.d.mts +1 -1
  75. package/es/Popover/groupContext.mjs.map +1 -1
  76. package/es/Popover/index.d.mts +2 -1
  77. package/es/Popover/index.mjs +2 -1
  78. package/es/Popover/type.d.mts +4 -0
  79. package/es/Popover/useMergedPopoverProps.mjs +5 -2
  80. package/es/Popover/useMergedPopoverProps.mjs.map +1 -1
  81. package/es/SearchBar/SearchBar.d.mts +2 -2
  82. package/es/Segmented/Segmented.d.mts +2 -2
  83. package/es/Select/Select.d.mts +2 -2
  84. package/es/SideNav/SideNav.d.mts +2 -2
  85. package/es/SliderWithInput/SliderWithInput.d.mts +2 -2
  86. package/es/SortableList/components/DragHandle.d.mts +2 -2
  87. package/es/SortableList/components/SortableItem.d.mts +2 -2
  88. package/es/ThemeProvider/ThemeProvider.d.mts +2 -2
  89. package/es/Toc/Toc.d.mts +2 -2
  90. package/es/Video/index.d.mts +2 -2
  91. package/es/awesome/AuroraBackground/AuroraBackground.d.mts +2 -2
  92. package/es/awesome/BottomGradientButton/BottomGradientButton.d.mts +2 -2
  93. package/es/awesome/Features/Features.d.mts +2 -2
  94. package/es/awesome/Giscus/Giscus.d.mts +2 -2
  95. package/es/awesome/GradientButton/GradientButton.d.mts +2 -2
  96. package/es/awesome/GridBackground/GridBackground.d.mts +2 -2
  97. package/es/awesome/GridBackground/GridShowcase.d.mts +2 -2
  98. package/es/awesome/Hero/Hero.d.mts +2 -2
  99. package/es/awesome/Spline/Spine.d.mts +2 -2
  100. package/es/awesome/Spotlight/Spotlight.d.mts +2 -2
  101. package/es/awesome/SpotlightCard/SpotlightCard.d.mts +2 -2
  102. package/es/awesome/TypewriterEffect/TypewriterEffect.d.mts +2 -2
  103. package/es/brand/LobeChat/index.d.mts +2 -2
  104. package/es/brand/LobeHub/index.d.mts +2 -2
  105. package/es/brand/LogoThree/LogoSpline.d.mts +2 -2
  106. package/es/brand/LogoThree/index.d.mts +2 -2
  107. package/es/chat/BackBottom/BackBottom.d.mts +2 -2
  108. package/es/chat/ChatInputArea/components/ChatInputAreaInner.d.mts +2 -2
  109. package/es/chat/ChatItem/ChatItem.d.mts +2 -2
  110. package/es/chat/ChatList/ChatList.d.mts +2 -2
  111. package/es/chat/EditableMessage/EditableMessage.d.mts +2 -2
  112. package/es/chat/EditableMessageList/EditableMessageList.d.mts +2 -2
  113. package/es/chat/MessageInput/MessageInput.d.mts +2 -2
  114. package/es/chat/MessageModal/MessageModal.d.mts +2 -2
  115. package/es/color/ColorScales/index.d.mts +2 -2
  116. package/es/color/CssVar/index.d.mts +2 -2
  117. package/es/hooks/useNativeButton.mjs +34 -0
  118. package/es/hooks/useNativeButton.mjs.map +1 -0
  119. package/es/i18n/context.d.mts +2 -2
  120. package/es/icons/lucideExtra/DiscordIcon.d.mts +3 -3
  121. package/es/icons/lucideExtra/LeftClickIcon.d.mts +3 -3
  122. package/es/icons/lucideExtra/LeftDoubleClickIcon.d.mts +3 -3
  123. package/es/icons/lucideExtra/McpIcon.d.mts +3 -3
  124. package/es/icons/lucideExtra/ProviderIcon.d.mts +3 -3
  125. package/es/icons/lucideExtra/RightClickIcon.d.mts +3 -3
  126. package/es/icons/lucideExtra/RightDoubleClickIcon.d.mts +3 -3
  127. package/es/icons/lucideExtra/ShapesUploadIcon.d.mts +3 -3
  128. package/es/icons/lucideExtra/TreeUpDownRightIcon.d.mts +3 -3
  129. package/es/index.d.mts +2 -1
  130. package/es/index.mjs +2 -1
  131. package/es/mdx/Mdx/index.d.mts +2 -2
  132. package/es/mobile/ChatHeader/ChatHeaderTitle.d.mts +2 -2
  133. package/es/mobile/ChatInputArea/components/ChatSendButton.d.mts +2 -2
  134. package/es/mobile/TabBar/TabBar.d.mts +2 -2
  135. package/es/storybook/StoryBook/index.d.mts +2 -2
  136. package/package.json +1 -1
@@ -1,8 +1,8 @@
1
1
  import { InputOPTProps } from "./type.mjs";
2
- import * as react80 from "react";
2
+ import * as react140 from "react";
3
3
 
4
4
  //#region src/Input/InputOPT.d.ts
5
- declare const InputOPT: react80.NamedExoticComponent<InputOPTProps>;
5
+ declare const InputOPT: react140.NamedExoticComponent<InputOPTProps>;
6
6
  //#endregion
7
7
  export { InputOPT };
8
8
  //# sourceMappingURL=InputOPT.d.mts.map
@@ -1,8 +1,8 @@
1
1
  import { InputPasswordProps } from "./type.mjs";
2
- import * as react81 from "react";
2
+ import * as react141 from "react";
3
3
 
4
4
  //#region src/Input/InputPassword.d.ts
5
- declare const InputPassword: react81.NamedExoticComponent<InputPasswordProps>;
5
+ declare const InputPassword: react141.NamedExoticComponent<InputPasswordProps>;
6
6
  //#endregion
7
7
  export { InputPassword };
8
8
  //# sourceMappingURL=InputPassword.d.mts.map
@@ -1,8 +1,8 @@
1
1
  import { TextAreaProps } from "./type.mjs";
2
- import * as react82 from "react";
2
+ import * as react142 from "react";
3
3
 
4
4
  //#region src/Input/TextArea.d.ts
5
- declare const TextArea: react82.NamedExoticComponent<TextAreaProps>;
5
+ declare const TextArea: react142.NamedExoticComponent<TextAreaProps>;
6
6
  //#endregion
7
7
  export { TextArea };
8
8
  //# sourceMappingURL=TextArea.d.mts.map
@@ -1,9 +1,9 @@
1
1
  import { DivProps } from "../../types/index.mjs";
2
2
  import "../../index.mjs";
3
- import * as react11 from "react";
3
+ import * as react20 from "react";
4
4
 
5
5
  //#region src/Layout/components/LayoutFooter.d.ts
6
- declare const LayoutFooter: react11.NamedExoticComponent<DivProps>;
6
+ declare const LayoutFooter: react20.NamedExoticComponent<DivProps>;
7
7
  //#endregion
8
8
  export { LayoutFooter };
9
9
  //# sourceMappingURL=LayoutFooter.d.mts.map
@@ -1,8 +1,8 @@
1
1
  import { LayoutHeaderProps } from "../type.mjs";
2
- import * as react12 from "react";
2
+ import * as react21 from "react";
3
3
 
4
4
  //#region src/Layout/components/LayoutHeader.d.ts
5
- declare const LayoutHeader: react12.NamedExoticComponent<LayoutHeaderProps>;
5
+ declare const LayoutHeader: react21.NamedExoticComponent<LayoutHeaderProps>;
6
6
  //#endregion
7
7
  export { LayoutHeader };
8
8
  //# sourceMappingURL=LayoutHeader.d.mts.map
@@ -1,9 +1,9 @@
1
1
  import { DivProps } from "../../types/index.mjs";
2
2
  import "../../index.mjs";
3
- import * as react13 from "react";
3
+ import * as react22 from "react";
4
4
 
5
5
  //#region src/Layout/components/LayoutMain.d.ts
6
- declare const LayoutMain: react13.NamedExoticComponent<DivProps>;
6
+ declare const LayoutMain: react22.NamedExoticComponent<DivProps>;
7
7
  //#endregion
8
8
  export { LayoutMain };
9
9
  //# sourceMappingURL=LayoutMain.d.mts.map
@@ -1,8 +1,8 @@
1
1
  import { LayoutSidebarProps } from "../type.mjs";
2
- import * as react14 from "react";
2
+ import * as react23 from "react";
3
3
 
4
4
  //#region src/Layout/components/LayoutSidebar.d.ts
5
- declare const LayoutSidebar: react14.NamedExoticComponent<LayoutSidebarProps>;
5
+ declare const LayoutSidebar: react23.NamedExoticComponent<LayoutSidebarProps>;
6
6
  //#endregion
7
7
  export { LayoutSidebar };
8
8
  //# sourceMappingURL=LayoutSidebar.d.mts.map
@@ -1,8 +1,8 @@
1
1
  import { LayoutSidebarInnerProps } from "../type.mjs";
2
- import * as react15 from "react";
2
+ import * as react24 from "react";
3
3
 
4
4
  //#region src/Layout/components/LayoutSidebarInner.d.ts
5
- declare const LayoutSidebarInner: react15.NamedExoticComponent<LayoutSidebarInnerProps>;
5
+ declare const LayoutSidebarInner: react24.NamedExoticComponent<LayoutSidebarInnerProps>;
6
6
  //#endregion
7
7
  export { LayoutSidebarInner };
8
8
  //# sourceMappingURL=LayoutSidebarInner.d.mts.map
@@ -1,8 +1,8 @@
1
1
  import { LayoutTocProps } from "../type.mjs";
2
- import * as react16 from "react";
2
+ import * as react25 from "react";
3
3
 
4
4
  //#region src/Layout/components/LayoutToc.d.ts
5
- declare const LayoutToc: react16.NamedExoticComponent<LayoutTocProps>;
5
+ declare const LayoutToc: react25.NamedExoticComponent<LayoutTocProps>;
6
6
  //#endregion
7
7
  export { LayoutToc };
8
8
  //# sourceMappingURL=LayoutToc.d.mts.map
@@ -1,8 +1,8 @@
1
1
  import { ListItemProps } from "../type.mjs";
2
- import * as react10 from "react";
2
+ import * as react19 from "react";
3
3
 
4
4
  //#region src/List/ListItem/index.d.ts
5
- declare const ListItem: react10.NamedExoticComponent<ListItemProps>;
5
+ declare const ListItem: react19.NamedExoticComponent<ListItemProps>;
6
6
  //#endregion
7
7
  export { ListItem };
8
8
  //# sourceMappingURL=index.d.mts.map
@@ -1,8 +1,8 @@
1
1
  import { MarkdownProps } from "./type.mjs";
2
- import * as react58 from "react";
2
+ import * as react18 from "react";
3
3
 
4
4
  //#region src/Markdown/Markdown.d.ts
5
- declare const Markdown: react58.NamedExoticComponent<MarkdownProps>;
5
+ declare const Markdown: react18.NamedExoticComponent<MarkdownProps>;
6
6
  //#endregion
7
7
  export { Markdown };
8
8
  //# sourceMappingURL=Markdown.d.mts.map
@@ -1,8 +1,8 @@
1
1
  import { TypographyProps } from "./type.mjs";
2
- import * as react56 from "react";
2
+ import * as react17 from "react";
3
3
 
4
4
  //#region src/Markdown/Typography.d.ts
5
- declare const Typography: react56.NamedExoticComponent<TypographyProps>;
5
+ declare const Typography: react17.NamedExoticComponent<TypographyProps>;
6
6
  //#endregion
7
7
  export { Typography };
8
8
  //# sourceMappingURL=Typography.d.mts.map
@@ -1,6 +1,6 @@
1
1
  import { FlexboxProps } from "../../../Flex/type.mjs";
2
2
  import "../../../Flex/index.mjs";
3
- import * as react4 from "react";
3
+ import * as react73 from "react";
4
4
  import { Ref } from "react";
5
5
 
6
6
  //#region src/Markdown/components/SearchResultCards/index.d.ts
@@ -14,7 +14,7 @@ interface SearchResultCardsProps extends FlexboxProps {
14
14
  dataSource: string[] | SearchResultItem[];
15
15
  ref?: Ref<HTMLDivElement>;
16
16
  }
17
- declare const SearchResultCards: react4.NamedExoticComponent<SearchResultCardsProps>;
17
+ declare const SearchResultCards: react73.NamedExoticComponent<SearchResultCardsProps>;
18
18
  //#endregion
19
19
  export { SearchResultCards, SearchResultCardsProps };
20
20
  //# sourceMappingURL=index.d.mts.map
@@ -1,8 +1,8 @@
1
1
  import { MaskShadowProps } from "./type.mjs";
2
- import * as react9 from "react";
2
+ import * as react14 from "react";
3
3
 
4
4
  //#region src/MaskShadow/MaskShadow.d.ts
5
- declare const MaskShadow: react9.NamedExoticComponent<MaskShadowProps>;
5
+ declare const MaskShadow: react14.NamedExoticComponent<MaskShadowProps>;
6
6
  //#endregion
7
7
  export { MaskShadow };
8
8
  //# sourceMappingURL=MaskShadow.d.mts.map
@@ -1,8 +1,8 @@
1
1
  import { MenuProps } from "./type.mjs";
2
- import * as react66 from "react";
2
+ import * as react26 from "react";
3
3
 
4
4
  //#region src/Menu/Menu.d.ts
5
- declare const Menu: react66.NamedExoticComponent<MenuProps<unknown>>;
5
+ declare const Menu: react26.NamedExoticComponent<MenuProps<unknown>>;
6
6
  //#endregion
7
7
  export { Menu };
8
8
  //# sourceMappingURL=Menu.d.mts.map
@@ -1,8 +1,8 @@
1
1
  import { MermaidProps } from "./type.mjs";
2
- import * as react63 from "react";
2
+ import * as react15 from "react";
3
3
 
4
4
  //#region src/Mermaid/Mermaid.d.ts
5
- declare const Mermaid: react63.NamedExoticComponent<MermaidProps>;
5
+ declare const Mermaid: react15.NamedExoticComponent<MermaidProps>;
6
6
  //#endregion
7
7
  export { Mermaid };
8
8
  //# sourceMappingURL=Mermaid.d.mts.map
@@ -1,8 +1,8 @@
1
1
  import { SyntaxMermaidProps } from "../type.mjs";
2
- import * as react64 from "react";
2
+ import * as react16 from "react";
3
3
 
4
4
  //#region src/Mermaid/SyntaxMermaid/index.d.ts
5
- declare const SyntaxMermaid: react64.NamedExoticComponent<SyntaxMermaidProps>;
5
+ declare const SyntaxMermaid: react16.NamedExoticComponent<SyntaxMermaidProps>;
6
6
  //#endregion
7
7
  export { SyntaxMermaid };
8
8
  //# sourceMappingURL=index.d.mts.map
@@ -1,8 +1,8 @@
1
1
  import { ModalProps } from "./type.mjs";
2
- import * as react60 from "react";
2
+ import * as react13 from "react";
3
3
 
4
4
  //#region src/Modal/Modal.d.ts
5
- declare const Modal: react60.NamedExoticComponent<ModalProps>;
5
+ declare const Modal: react13.NamedExoticComponent<ModalProps>;
6
6
  //#endregion
7
7
  export { Modal };
8
8
  //# sourceMappingURL=Modal.d.mts.map
@@ -1,9 +1,9 @@
1
1
  import { ModalContextValue } from "./type.mjs";
2
- import * as react61 from "react";
2
+ import * as react11 from "react";
3
3
  import { ReactNode } from "react";
4
4
 
5
5
  //#region src/Modal/ModalProvider.d.ts
6
- declare const ModalProvider: react61.NamedExoticComponent<{
6
+ declare const ModalProvider: react11.NamedExoticComponent<{
7
7
  children: ReactNode;
8
8
  value: ModalContextValue;
9
9
  }>;
@@ -1,4 +1,4 @@
1
- import * as react5 from "react";
1
+ import * as react74 from "react";
2
2
  import { Context, ReactNode } from "react";
3
3
  import * as motion_react0 from "motion/react";
4
4
  import * as m from "motion/react-m";
@@ -6,7 +6,7 @@ import * as m from "motion/react-m";
6
6
  //#region src/MotionProvider/index.d.ts
7
7
  type MotionComponentType = typeof motion_react0.motion | typeof m;
8
8
  declare const MotionComponent: Context<MotionComponentType>;
9
- declare const MotionProvider: react5.NamedExoticComponent<{
9
+ declare const MotionProvider: react74.NamedExoticComponent<{
10
10
  children: ReactNode;
11
11
  motion: MotionComponentType;
12
12
  }>;
@@ -1,6 +1,7 @@
1
1
  'use client';
2
2
 
3
3
  import { placementMap } from "../utils/placement.mjs";
4
+ import { PopoverProvider } from "./context.mjs";
4
5
  import { PopoverGroupHandleContext, PopoverGroupPropsContext } from "./groupContext.mjs";
5
6
  import { parseTrigger } from "./parseTrigger.mjs";
6
7
  import { PopoverArrowIcon } from "./ArrowIcon.mjs";
@@ -12,9 +13,13 @@ import { cx } from "antd-style";
12
13
  import { Popover } from "@base-ui/react/popover";
13
14
 
14
15
  //#region src/Popover/PopoverGroup.tsx
15
- const PopoverGroup = ({ children, contentLayoutAnimation = true, ...sharedProps }) => {
16
+ const PopoverGroup = ({ children, contentLayoutAnimation = false, ...sharedProps }) => {
16
17
  const handle = useMemo(() => Popover.createHandle(), []);
17
18
  const activeItemRef = useRef(null);
19
+ const close = useCallback(() => {
20
+ handle.close();
21
+ }, [handle]);
22
+ const contextValue = useMemo(() => ({ close }), [close]);
18
23
  const handleOpenChange = useCallback((open) => {
19
24
  activeItemRef.current?.onOpenChange?.(open);
20
25
  }, []);
@@ -30,7 +35,7 @@ const PopoverGroup = ({ children, contentLayoutAnimation = true, ...sharedProps
30
35
  const item = payload ?? null;
31
36
  activeItemRef.current = item;
32
37
  if (!item?.content) return null;
33
- const arrow = item.inset ? false : item.arrow ?? true;
38
+ const arrow = item.inset ? false : item.arrow ?? false;
34
39
  const placement = item.placement ?? "top";
35
40
  const { openOnHover } = parseTrigger(item.trigger ?? "hover");
36
41
  const placementConfig = placementMap[placement] ?? placementMap.top;
@@ -53,6 +58,10 @@ const PopoverGroup = ({ children, contentLayoutAnimation = true, ...sharedProps
53
58
  },
54
59
  viewport: item.styles?.content
55
60
  };
61
+ const contentNode = /* @__PURE__ */ jsx(PopoverProvider, {
62
+ value: contextValue,
63
+ children: item.content
64
+ });
56
65
  const popup = /* @__PURE__ */ jsx(Popover.Positioner, {
57
66
  align: placementConfig.align,
58
67
  className: resolvedClassNames.positioner,
@@ -70,11 +79,11 @@ const PopoverGroup = ({ children, contentLayoutAnimation = true, ...sharedProps
70
79
  }), contentLayoutAnimation ? /* @__PURE__ */ jsx(Popover.Viewport, {
71
80
  className: resolvedClassNames.viewport,
72
81
  style: resolvedStyles.viewport,
73
- children: item.content
82
+ children: contentNode
74
83
  }) : /* @__PURE__ */ jsx("div", {
75
84
  className: resolvedClassNames.viewport,
76
85
  style: resolvedStyles.viewport,
77
- children: item.content
86
+ children: contentNode
78
87
  })]
79
88
  })
80
89
  });
@@ -1 +1 @@
1
- {"version":3,"file":"PopoverGroup.mjs","names":["PopoverGroup: FC<PopoverGroupProps>","BasePopover"],"sources":["../../src/Popover/PopoverGroup.tsx"],"sourcesContent":["'use client';\n\nimport { Popover as BasePopover } from '@base-ui/react/popover';\nimport type { Side } from '@base-ui/react/utils/useAnchorPositioning';\nimport { cx } from 'antd-style';\nimport { type FC, type ReactNode, useCallback, useMemo, useRef } from 'react';\n\nimport { placementMap } from '@/utils/placement';\n\nimport { PopoverArrowIcon } from './ArrowIcon';\nimport { usePopoverPortalContainer } from './PopoverPortal';\nimport {\n PopoverGroupHandleContext,\n type PopoverGroupItem,\n PopoverGroupPropsContext,\n type PopoverGroupSharedProps,\n} from './groupContext';\nimport { parseTrigger } from './parseTrigger';\nimport { styles } from './style';\n\ntype PopoverGroupProps = PopoverGroupSharedProps & {\n children: ReactNode;\n};\n\nconst PopoverGroup: FC<PopoverGroupProps> = ({\n children,\n contentLayoutAnimation = true,\n ...sharedProps\n}) => {\n const handle = useMemo(() => BasePopover.createHandle<PopoverGroupItem>(), []);\n const activeItemRef = useRef<PopoverGroupItem | null>(null);\n\n const handleOpenChange = useCallback((open: boolean) => {\n activeItemRef.current?.onOpenChange?.(open);\n }, []);\n\n const portalContainer = usePopoverPortalContainer();\n\n return (\n <PopoverGroupHandleContext.Provider value={handle}>\n <PopoverGroupPropsContext.Provider value={sharedProps}>\n {children}\n <BasePopover.Root handle={handle} onOpenChange={handleOpenChange}>\n {({ payload }) => {\n const item = (payload as PopoverGroupItem | null) ?? null;\n activeItemRef.current = item;\n\n if (!item?.content) return null;\n\n const arrow = item.inset ? false : (item.arrow ?? true);\n const placement = item.placement ?? 'top';\n const { openOnHover } = parseTrigger(item.trigger ?? 'hover');\n\n const placementConfig = placementMap[placement] ?? placementMap.top;\n const baseSideOffset = arrow ? 10 : 6;\n const resolvedSideOffset = item.inset\n ? ({\n side,\n positioner,\n }: {\n positioner: { height: number; width: number };\n side: Side;\n }) => {\n if (\n side === 'left' ||\n side === 'right' ||\n side === 'inline-start' ||\n side === 'inline-end'\n ) {\n return -positioner.width;\n }\n return -positioner.height;\n }\n : baseSideOffset;\n\n const resolvedClassNames = {\n arrow: cx(styles.arrow, item.classNames?.arrow),\n popup: cx(styles.popup, item.className),\n positioner: cx(styles.positioner, item.classNames?.root),\n viewport: cx(styles.viewport, item.classNames?.content),\n };\n\n const resolvedStyles = {\n arrow: item.styles?.arrow,\n positioner: {\n ...item.styles?.root,\n zIndex: item.zIndex ?? 1100,\n },\n viewport: item.styles?.content,\n };\n\n const popup = (\n <BasePopover.Positioner\n align={placementConfig.align}\n className={resolvedClassNames.positioner}\n data-hover-trigger={openOnHover || undefined}\n data-placement={placement}\n side={placementConfig.side}\n sideOffset={resolvedSideOffset}\n style={resolvedStyles.positioner}\n >\n <BasePopover.Popup className={resolvedClassNames.popup}>\n {arrow && (\n <BasePopover.Arrow\n className={resolvedClassNames.arrow}\n style={resolvedStyles.arrow}\n >\n {PopoverArrowIcon}\n </BasePopover.Arrow>\n )}\n {contentLayoutAnimation ? (\n <BasePopover.Viewport\n className={resolvedClassNames.viewport}\n style={resolvedStyles.viewport}\n >\n {item.content}\n </BasePopover.Viewport>\n ) : (\n <div className={resolvedClassNames.viewport} style={resolvedStyles.viewport}>\n {item.content}\n </div>\n )}\n </BasePopover.Popup>\n </BasePopover.Positioner>\n );\n\n const resolvedPortalContainer = portalContainer;\n const portalled = item.portalled ?? true;\n\n return portalled ? (\n resolvedPortalContainer ? (\n <BasePopover.Portal container={resolvedPortalContainer}>{popup}</BasePopover.Portal>\n ) : null\n ) : (\n popup\n );\n }}\n </BasePopover.Root>\n </PopoverGroupPropsContext.Provider>\n </PopoverGroupHandleContext.Provider>\n );\n};\n\nPopoverGroup.displayName = 'PopoverGroup';\n\nexport default PopoverGroup;\n"],"mappings":";;;;;;;;;;;;;;AAwBA,MAAMA,gBAAuC,EAC3C,UACA,yBAAyB,MACzB,GAAG,kBACC;CACJ,MAAM,SAAS,cAAcC,QAAY,cAAgC,EAAE,EAAE,CAAC;CAC9E,MAAM,gBAAgB,OAAgC,KAAK;CAE3D,MAAM,mBAAmB,aAAa,SAAkB;AACtD,gBAAc,SAAS,eAAe,KAAK;IAC1C,EAAE,CAAC;CAEN,MAAM,kBAAkB,2BAA2B;AAEnD,QACE,oBAAC,0BAA0B;EAAS,OAAO;YACzC,qBAAC,yBAAyB;GAAS,OAAO;cACvC,UACD,oBAACA,QAAY;IAAa;IAAQ,cAAc;eAC5C,EAAE,cAAc;KAChB,MAAM,OAAQ,WAAuC;AACrD,mBAAc,UAAU;AAExB,SAAI,CAAC,MAAM,QAAS,QAAO;KAE3B,MAAM,QAAQ,KAAK,QAAQ,QAAS,KAAK,SAAS;KAClD,MAAM,YAAY,KAAK,aAAa;KACpC,MAAM,EAAE,gBAAgB,aAAa,KAAK,WAAW,QAAQ;KAE7D,MAAM,kBAAkB,aAAa,cAAc,aAAa;KAChE,MAAM,iBAAiB,QAAQ,KAAK;KACpC,MAAM,qBAAqB,KAAK,SAC3B,EACC,MACA,iBAII;AACJ,UACE,SAAS,UACT,SAAS,WACT,SAAS,kBACT,SAAS,aAET,QAAO,CAAC,WAAW;AAErB,aAAO,CAAC,WAAW;SAErB;KAEJ,MAAM,qBAAqB;MACzB,OAAO,GAAG,OAAO,OAAO,KAAK,YAAY,MAAM;MAC/C,OAAO,GAAG,OAAO,OAAO,KAAK,UAAU;MACvC,YAAY,GAAG,OAAO,YAAY,KAAK,YAAY,KAAK;MACxD,UAAU,GAAG,OAAO,UAAU,KAAK,YAAY,QAAQ;MACxD;KAED,MAAM,iBAAiB;MACrB,OAAO,KAAK,QAAQ;MACpB,YAAY;OACV,GAAG,KAAK,QAAQ;OAChB,QAAQ,KAAK,UAAU;OACxB;MACD,UAAU,KAAK,QAAQ;MACxB;KAED,MAAM,QACJ,oBAACA,QAAY;MACX,OAAO,gBAAgB;MACvB,WAAW,mBAAmB;MAC9B,sBAAoB,eAAe;MACnC,kBAAgB;MAChB,MAAM,gBAAgB;MACtB,YAAY;MACZ,OAAO,eAAe;gBAEtB,qBAACA,QAAY;OAAM,WAAW,mBAAmB;kBAC9C,SACC,oBAACA,QAAY;QACX,WAAW,mBAAmB;QAC9B,OAAO,eAAe;kBAErB;SACiB,EAErB,yBACC,oBAACA,QAAY;QACX,WAAW,mBAAmB;QAC9B,OAAO,eAAe;kBAErB,KAAK;SACe,GAEvB,oBAAC;QAAI,WAAW,mBAAmB;QAAU,OAAO,eAAe;kBAChE,KAAK;SACF;QAEU;OACG;KAG3B,MAAM,0BAA0B;AAGhC,YAFkB,KAAK,aAAa,OAGlC,0BACE,oBAACA,QAAY;MAAO,WAAW;gBAA0B;OAA2B,GAClF,OAEJ;;KAGa;IACe;GACD;;AAIzC,aAAa,cAAc;AAE3B,2BAAe"}
1
+ {"version":3,"file":"PopoverGroup.mjs","names":["PopoverGroup: FC<PopoverGroupProps>","BasePopover"],"sources":["../../src/Popover/PopoverGroup.tsx"],"sourcesContent":["'use client';\n\nimport { Popover as BasePopover } from '@base-ui/react/popover';\nimport type { Side } from '@base-ui/react/utils/useAnchorPositioning';\nimport { cx } from 'antd-style';\nimport { type FC, type ReactNode, useCallback, useMemo, useRef } from 'react';\n\nimport { placementMap } from '@/utils/placement';\n\nimport { PopoverArrowIcon } from './ArrowIcon';\nimport { usePopoverPortalContainer } from './PopoverPortal';\nimport { PopoverProvider } from './context';\nimport {\n PopoverGroupHandleContext,\n type PopoverGroupItem,\n PopoverGroupPropsContext,\n type PopoverGroupSharedProps,\n} from './groupContext';\nimport { parseTrigger } from './parseTrigger';\nimport { styles } from './style';\n\ntype PopoverGroupProps = PopoverGroupSharedProps & {\n children: ReactNode;\n};\n\nconst PopoverGroup: FC<PopoverGroupProps> = ({\n children,\n contentLayoutAnimation = false,\n ...sharedProps\n}) => {\n const handle = useMemo(() => BasePopover.createHandle<PopoverGroupItem>(), []);\n const activeItemRef = useRef<PopoverGroupItem | null>(null);\n const close = useCallback(() => {\n handle.close();\n }, [handle]);\n const contextValue = useMemo(() => ({ close }), [close]);\n\n const handleOpenChange = useCallback((open: boolean) => {\n activeItemRef.current?.onOpenChange?.(open);\n }, []);\n\n const portalContainer = usePopoverPortalContainer();\n\n return (\n <PopoverGroupHandleContext.Provider value={handle}>\n <PopoverGroupPropsContext.Provider value={sharedProps}>\n {children}\n <BasePopover.Root handle={handle} onOpenChange={handleOpenChange}>\n {({ payload }) => {\n const item = (payload as PopoverGroupItem | null) ?? null;\n activeItemRef.current = item;\n\n if (!item?.content) return null;\n\n const arrow = item.inset ? false : (item.arrow ?? false);\n const placement = item.placement ?? 'top';\n const { openOnHover } = parseTrigger(item.trigger ?? 'hover');\n\n const placementConfig = placementMap[placement] ?? placementMap.top;\n const baseSideOffset = arrow ? 10 : 6;\n const resolvedSideOffset = item.inset\n ? ({\n side,\n positioner,\n }: {\n positioner: { height: number; width: number };\n side: Side;\n }) => {\n if (\n side === 'left' ||\n side === 'right' ||\n side === 'inline-start' ||\n side === 'inline-end'\n ) {\n return -positioner.width;\n }\n return -positioner.height;\n }\n : baseSideOffset;\n\n const resolvedClassNames = {\n arrow: cx(styles.arrow, item.classNames?.arrow),\n popup: cx(styles.popup, item.className),\n positioner: cx(styles.positioner, item.classNames?.root),\n viewport: cx(styles.viewport, item.classNames?.content),\n };\n\n const resolvedStyles = {\n arrow: item.styles?.arrow,\n positioner: {\n ...item.styles?.root,\n zIndex: item.zIndex ?? 1100,\n },\n viewport: item.styles?.content,\n };\n\n const contentNode = (\n <PopoverProvider value={contextValue}>{item.content}</PopoverProvider>\n );\n\n const popup = (\n <BasePopover.Positioner\n align={placementConfig.align}\n className={resolvedClassNames.positioner}\n data-hover-trigger={openOnHover || undefined}\n data-placement={placement}\n side={placementConfig.side}\n sideOffset={resolvedSideOffset}\n style={resolvedStyles.positioner}\n >\n <BasePopover.Popup className={resolvedClassNames.popup}>\n {arrow && (\n <BasePopover.Arrow\n className={resolvedClassNames.arrow}\n style={resolvedStyles.arrow}\n >\n {PopoverArrowIcon}\n </BasePopover.Arrow>\n )}\n {contentLayoutAnimation ? (\n <BasePopover.Viewport\n className={resolvedClassNames.viewport}\n style={resolvedStyles.viewport}\n >\n {contentNode}\n </BasePopover.Viewport>\n ) : (\n <div className={resolvedClassNames.viewport} style={resolvedStyles.viewport}>\n {contentNode}\n </div>\n )}\n </BasePopover.Popup>\n </BasePopover.Positioner>\n );\n\n const resolvedPortalContainer = portalContainer;\n const portalled = item.portalled ?? true;\n\n return portalled ? (\n resolvedPortalContainer ? (\n <BasePopover.Portal container={resolvedPortalContainer}>{popup}</BasePopover.Portal>\n ) : null\n ) : (\n popup\n );\n }}\n </BasePopover.Root>\n </PopoverGroupPropsContext.Provider>\n </PopoverGroupHandleContext.Provider>\n );\n};\n\nPopoverGroup.displayName = 'PopoverGroup';\n\nexport default PopoverGroup;\n"],"mappings":";;;;;;;;;;;;;;;AAyBA,MAAMA,gBAAuC,EAC3C,UACA,yBAAyB,OACzB,GAAG,kBACC;CACJ,MAAM,SAAS,cAAcC,QAAY,cAAgC,EAAE,EAAE,CAAC;CAC9E,MAAM,gBAAgB,OAAgC,KAAK;CAC3D,MAAM,QAAQ,kBAAkB;AAC9B,SAAO,OAAO;IACb,CAAC,OAAO,CAAC;CACZ,MAAM,eAAe,eAAe,EAAE,OAAO,GAAG,CAAC,MAAM,CAAC;CAExD,MAAM,mBAAmB,aAAa,SAAkB;AACtD,gBAAc,SAAS,eAAe,KAAK;IAC1C,EAAE,CAAC;CAEN,MAAM,kBAAkB,2BAA2B;AAEnD,QACE,oBAAC,0BAA0B;EAAS,OAAO;YACzC,qBAAC,yBAAyB;GAAS,OAAO;cACvC,UACD,oBAACA,QAAY;IAAa;IAAQ,cAAc;eAC5C,EAAE,cAAc;KAChB,MAAM,OAAQ,WAAuC;AACrD,mBAAc,UAAU;AAExB,SAAI,CAAC,MAAM,QAAS,QAAO;KAE3B,MAAM,QAAQ,KAAK,QAAQ,QAAS,KAAK,SAAS;KAClD,MAAM,YAAY,KAAK,aAAa;KACpC,MAAM,EAAE,gBAAgB,aAAa,KAAK,WAAW,QAAQ;KAE7D,MAAM,kBAAkB,aAAa,cAAc,aAAa;KAChE,MAAM,iBAAiB,QAAQ,KAAK;KACpC,MAAM,qBAAqB,KAAK,SAC3B,EACC,MACA,iBAII;AACJ,UACE,SAAS,UACT,SAAS,WACT,SAAS,kBACT,SAAS,aAET,QAAO,CAAC,WAAW;AAErB,aAAO,CAAC,WAAW;SAErB;KAEJ,MAAM,qBAAqB;MACzB,OAAO,GAAG,OAAO,OAAO,KAAK,YAAY,MAAM;MAC/C,OAAO,GAAG,OAAO,OAAO,KAAK,UAAU;MACvC,YAAY,GAAG,OAAO,YAAY,KAAK,YAAY,KAAK;MACxD,UAAU,GAAG,OAAO,UAAU,KAAK,YAAY,QAAQ;MACxD;KAED,MAAM,iBAAiB;MACrB,OAAO,KAAK,QAAQ;MACpB,YAAY;OACV,GAAG,KAAK,QAAQ;OAChB,QAAQ,KAAK,UAAU;OACxB;MACD,UAAU,KAAK,QAAQ;MACxB;KAED,MAAM,cACJ,oBAAC;MAAgB,OAAO;gBAAe,KAAK;OAA0B;KAGxE,MAAM,QACJ,oBAACA,QAAY;MACX,OAAO,gBAAgB;MACvB,WAAW,mBAAmB;MAC9B,sBAAoB,eAAe;MACnC,kBAAgB;MAChB,MAAM,gBAAgB;MACtB,YAAY;MACZ,OAAO,eAAe;gBAEtB,qBAACA,QAAY;OAAM,WAAW,mBAAmB;kBAC9C,SACC,oBAACA,QAAY;QACX,WAAW,mBAAmB;QAC9B,OAAO,eAAe;kBAErB;SACiB,EAErB,yBACC,oBAACA,QAAY;QACX,WAAW,mBAAmB;QAC9B,OAAO,eAAe;kBAErB;SACoB,GAEvB,oBAAC;QAAI,WAAW,mBAAmB;QAAU,OAAO,eAAe;kBAChE;SACG;QAEU;OACG;KAG3B,MAAM,0BAA0B;AAGhC,YAFkB,KAAK,aAAa,OAGlC,0BACE,oBAACA,QAAY;MAAO,WAAW;gBAA0B;OAA2B,GAClF,OAEJ;;KAGa;IACe;GACD;;AAIzC,aAAa,cAAc;AAE3B,2BAAe"}
@@ -1,5 +1,6 @@
1
1
  'use client';
2
2
 
3
+ import { useNativeButton } from "../hooks/useNativeButton.mjs";
3
4
  import { PopoverGroupHandleContext } from "./groupContext.mjs";
4
5
  import { parseTrigger } from "./parseTrigger.mjs";
5
6
  import { useMergedPopoverProps } from "./useMergedPopoverProps.mjs";
@@ -18,6 +19,10 @@ const PopoverInGroup = ({ children, ref: refProp, ...props }) => {
18
19
  const resolvedOpenDelay = item.openDelay ?? (item.mouseEnterDelay ?? .1) * 1e3;
19
20
  const resolvedCloseDelay = item.closeDelay ?? (item.mouseLeaveDelay ?? .1) * 1e3;
20
21
  const disabled = Boolean(item.disabled);
22
+ const { isNativeButtonTriggerElement, resolvedNativeButton } = useNativeButton({
23
+ children,
24
+ nativeButton: item.nativeButton
25
+ });
21
26
  if (!item.content) return children;
22
27
  const triggerProps = {
23
28
  closeDelay: resolvedCloseDelay,
@@ -30,16 +35,20 @@ const PopoverInGroup = ({ children, ref: refProp, ...props }) => {
30
35
  if (isValidElement(children)) return /* @__PURE__ */ jsx(Popover.Trigger, {
31
36
  handle: group ?? void 0,
32
37
  ...triggerProps,
38
+ nativeButton: resolvedNativeButton,
33
39
  render: (renderProps) => {
34
- const { type, ref: triggerRef, ...restProps } = renderProps;
35
- const resolvedProps = typeof children.type === "string" && children.type === "button" ? renderProps : restProps;
40
+ const resolvedProps = (() => {
41
+ if (isNativeButtonTriggerElement) return renderProps;
42
+ const { type, ref: triggerRef, ...restProps } = renderProps;
43
+ return restProps;
44
+ })();
36
45
  const mergedProps = mergeProps(children.props, resolvedProps);
37
46
  return cloneElement(children, {
38
47
  ...mergedProps,
39
48
  className: cx(mergedProps.className, triggerClassName),
40
49
  ref: mergeRefs([
41
50
  children.ref,
42
- triggerRef,
51
+ renderProps.ref,
43
52
  refProp
44
53
  ])
45
54
  });
@@ -49,6 +58,7 @@ const PopoverInGroup = ({ children, ref: refProp, ...props }) => {
49
58
  handle: group ?? void 0,
50
59
  ...triggerProps,
51
60
  className: triggerClassName,
61
+ nativeButton: resolvedNativeButton,
52
62
  ref: refProp,
53
63
  children
54
64
  });
@@ -1 +1 @@
1
- {"version":3,"file":"PopoverInGroup.mjs","names":["PopoverInGroup: FC<PopoverProps>","BasePopover"],"sources":["../../src/Popover/PopoverInGroup.tsx"],"sourcesContent":["'use client';\n\nimport { mergeProps } from '@base-ui/react/merge-props';\nimport { Popover as BasePopover } from '@base-ui/react/popover';\nimport { cx } from 'antd-style';\nimport { type FC, cloneElement, isValidElement, useContext, useMemo } from 'react';\nimport { mergeRefs } from 'react-merge-refs';\n\nimport { PopoverGroupHandleContext } from './groupContext';\nimport { parseTrigger } from './parseTrigger';\nimport type { PopoverProps } from './type';\nimport { useMergedPopoverProps } from './useMergedPopoverProps';\n\nexport const PopoverInGroup: FC<PopoverProps> = ({ children, ref: refProp, ...props }) => {\n const group = useContext(PopoverGroupHandleContext);\n const item = useMergedPopoverProps(props);\n\n const { openOnHover } = useMemo(() => parseTrigger(item.trigger ?? 'hover'), [item.trigger]);\n\n const resolvedOpenDelay = item.openDelay ?? (item.mouseEnterDelay ?? 0.1) * 1000;\n const resolvedCloseDelay = item.closeDelay ?? (item.mouseLeaveDelay ?? 0.1) * 1000;\n const disabled = Boolean(item.disabled);\n\n // Don't render trigger behavior if no content\n if (!item.content) {\n return children as any;\n }\n\n const triggerProps = {\n closeDelay: resolvedCloseDelay,\n delay: resolvedOpenDelay,\n disabled,\n openOnHover: openOnHover && !disabled,\n payload: item,\n };\n\n const triggerClassName = item.classNames?.trigger;\n\n if (isValidElement(children)) {\n return (\n <BasePopover.Trigger\n handle={group ?? undefined}\n {...triggerProps}\n render={(renderProps) => {\n // Remove type=\"button\" for non-button elements\n // eslint-disable-next-line unused-imports/no-unused-vars, @typescript-eslint/no-unused-vars\n const { type, ref: triggerRef, ...restProps } = renderProps as any;\n const resolvedProps =\n typeof (children as any).type === 'string' && (children as any).type === 'button'\n ? renderProps\n : restProps;\n const mergedProps = mergeProps((children as any).props, resolvedProps);\n return cloneElement(children as any, {\n ...mergedProps,\n className: cx(mergedProps.className, triggerClassName),\n ref: mergeRefs([(children as any).ref, triggerRef, refProp]),\n });\n }}\n />\n );\n }\n\n return (\n <BasePopover.Trigger\n handle={group ?? undefined}\n {...triggerProps}\n className={triggerClassName}\n ref={refProp}\n >\n {children}\n </BasePopover.Trigger>\n );\n};\n\nPopoverInGroup.displayName = 'PopoverInGroup';\n"],"mappings":";;;;;;;;;;;;;AAaA,MAAaA,kBAAoC,EAAE,UAAU,KAAK,SAAS,GAAG,YAAY;CACxF,MAAM,QAAQ,WAAW,0BAA0B;CACnD,MAAM,OAAO,sBAAsB,MAAM;CAEzC,MAAM,EAAE,gBAAgB,cAAc,aAAa,KAAK,WAAW,QAAQ,EAAE,CAAC,KAAK,QAAQ,CAAC;CAE5F,MAAM,oBAAoB,KAAK,cAAc,KAAK,mBAAmB,MAAO;CAC5E,MAAM,qBAAqB,KAAK,eAAe,KAAK,mBAAmB,MAAO;CAC9E,MAAM,WAAW,QAAQ,KAAK,SAAS;AAGvC,KAAI,CAAC,KAAK,QACR,QAAO;CAGT,MAAM,eAAe;EACnB,YAAY;EACZ,OAAO;EACP;EACA,aAAa,eAAe,CAAC;EAC7B,SAAS;EACV;CAED,MAAM,mBAAmB,KAAK,YAAY;AAE1C,KAAI,eAAe,SAAS,CAC1B,QACE,oBAACC,QAAY;EACX,QAAQ,SAAS;EACjB,GAAI;EACJ,SAAS,gBAAgB;GAGvB,MAAM,EAAE,MAAM,KAAK,YAAY,GAAG,cAAc;GAChD,MAAM,gBACJ,OAAQ,SAAiB,SAAS,YAAa,SAAiB,SAAS,WACrE,cACA;GACN,MAAM,cAAc,WAAY,SAAiB,OAAO,cAAc;AACtE,UAAO,aAAa,UAAiB;IACnC,GAAG;IACH,WAAW,GAAG,YAAY,WAAW,iBAAiB;IACtD,KAAK,UAAU;KAAE,SAAiB;KAAK;KAAY;KAAQ,CAAC;IAC7D,CAAC;;GAEJ;AAIN,QACE,oBAACA,QAAY;EACX,QAAQ,SAAS;EACjB,GAAI;EACJ,WAAW;EACX,KAAK;EAEJ;GACmB;;AAI1B,eAAe,cAAc"}
1
+ {"version":3,"file":"PopoverInGroup.mjs","names":["PopoverInGroup: FC<PopoverProps>","BasePopover"],"sources":["../../src/Popover/PopoverInGroup.tsx"],"sourcesContent":["'use client';\n\nimport { mergeProps } from '@base-ui/react/merge-props';\nimport { Popover as BasePopover } from '@base-ui/react/popover';\nimport { cx } from 'antd-style';\nimport { type FC, cloneElement, isValidElement, useContext, useMemo } from 'react';\nimport { mergeRefs } from 'react-merge-refs';\n\nimport { useNativeButton } from '@/hooks/useNativeButton';\n\nimport { PopoverGroupHandleContext } from './groupContext';\nimport { parseTrigger } from './parseTrigger';\nimport type { PopoverProps } from './type';\nimport { useMergedPopoverProps } from './useMergedPopoverProps';\n\nexport const PopoverInGroup: FC<PopoverProps> = ({ children, ref: refProp, ...props }) => {\n const group = useContext(PopoverGroupHandleContext);\n const item = useMergedPopoverProps(props);\n\n const { openOnHover } = useMemo(() => parseTrigger(item.trigger ?? 'hover'), [item.trigger]);\n\n const resolvedOpenDelay = item.openDelay ?? (item.mouseEnterDelay ?? 0.1) * 1000;\n const resolvedCloseDelay = item.closeDelay ?? (item.mouseLeaveDelay ?? 0.1) * 1000;\n const disabled = Boolean(item.disabled);\n\n const { isNativeButtonTriggerElement, resolvedNativeButton } = useNativeButton({\n children,\n nativeButton: item.nativeButton,\n });\n\n // Don't render trigger behavior if no content\n if (!item.content) {\n return children as any;\n }\n\n const triggerProps = {\n closeDelay: resolvedCloseDelay,\n delay: resolvedOpenDelay,\n disabled,\n openOnHover: openOnHover && !disabled,\n payload: item,\n };\n\n const triggerClassName = item.classNames?.trigger;\n\n if (isValidElement(children)) {\n return (\n <BasePopover.Trigger\n handle={group ?? undefined}\n {...triggerProps}\n nativeButton={resolvedNativeButton}\n render={(renderProps) => {\n // Base UI's trigger props include `type=\"button\"` by default.\n // If we render into a non-<button> element, that prop is invalid and can warn.\n const resolvedProps = (() => {\n if (isNativeButtonTriggerElement) return renderProps as any;\n // eslint-disable-next-line unused-imports/no-unused-vars, @typescript-eslint/no-unused-vars\n const { type, ref: triggerRef, ...restProps } = renderProps as any;\n return restProps;\n })();\n\n const mergedProps = mergeProps((children as any).props, resolvedProps);\n return cloneElement(children as any, {\n ...mergedProps,\n className: cx(mergedProps.className, triggerClassName),\n ref: mergeRefs([(children as any).ref, (renderProps as any).ref, refProp]),\n });\n }}\n />\n );\n }\n\n return (\n <BasePopover.Trigger\n handle={group ?? undefined}\n {...triggerProps}\n className={triggerClassName}\n nativeButton={resolvedNativeButton}\n ref={refProp}\n >\n {children}\n </BasePopover.Trigger>\n );\n};\n\nPopoverInGroup.displayName = 'PopoverInGroup';\n"],"mappings":";;;;;;;;;;;;;;AAeA,MAAaA,kBAAoC,EAAE,UAAU,KAAK,SAAS,GAAG,YAAY;CACxF,MAAM,QAAQ,WAAW,0BAA0B;CACnD,MAAM,OAAO,sBAAsB,MAAM;CAEzC,MAAM,EAAE,gBAAgB,cAAc,aAAa,KAAK,WAAW,QAAQ,EAAE,CAAC,KAAK,QAAQ,CAAC;CAE5F,MAAM,oBAAoB,KAAK,cAAc,KAAK,mBAAmB,MAAO;CAC5E,MAAM,qBAAqB,KAAK,eAAe,KAAK,mBAAmB,MAAO;CAC9E,MAAM,WAAW,QAAQ,KAAK,SAAS;CAEvC,MAAM,EAAE,8BAA8B,yBAAyB,gBAAgB;EAC7E;EACA,cAAc,KAAK;EACpB,CAAC;AAGF,KAAI,CAAC,KAAK,QACR,QAAO;CAGT,MAAM,eAAe;EACnB,YAAY;EACZ,OAAO;EACP;EACA,aAAa,eAAe,CAAC;EAC7B,SAAS;EACV;CAED,MAAM,mBAAmB,KAAK,YAAY;AAE1C,KAAI,eAAe,SAAS,CAC1B,QACE,oBAACC,QAAY;EACX,QAAQ,SAAS;EACjB,GAAI;EACJ,cAAc;EACd,SAAS,gBAAgB;GAGvB,MAAM,uBAAuB;AAC3B,QAAI,6BAA8B,QAAO;IAEzC,MAAM,EAAE,MAAM,KAAK,YAAY,GAAG,cAAc;AAChD,WAAO;OACL;GAEJ,MAAM,cAAc,WAAY,SAAiB,OAAO,cAAc;AACtE,UAAO,aAAa,UAAiB;IACnC,GAAG;IACH,WAAW,GAAG,YAAY,WAAW,iBAAiB;IACtD,KAAK,UAAU;KAAE,SAAiB;KAAM,YAAoB;KAAK;KAAQ,CAAC;IAC3E,CAAC;;GAEJ;AAIN,QACE,oBAACA,QAAY;EACX,QAAQ,SAAS;EACjB,GAAI;EACJ,WAAW;EACX,cAAc;EACd,KAAK;EAEJ;GACmB;;AAI1B,eAAe,cAAc"}
@@ -2,11 +2,13 @@
2
2
 
3
3
  import { placementMap } from "../utils/placement.mjs";
4
4
  import { useIsClient } from "../hooks/useIsClient.mjs";
5
+ import { useNativeButton } from "../hooks/useNativeButton.mjs";
6
+ import { PopoverProvider } from "./context.mjs";
5
7
  import { parseTrigger } from "./parseTrigger.mjs";
6
8
  import { PopoverArrowIcon } from "./ArrowIcon.mjs";
7
9
  import { usePopoverPortalContainer } from "./PopoverPortal.mjs";
8
10
  import { styles } from "./style.mjs";
9
- import { cloneElement, isValidElement, memo, useCallback, useEffect, useMemo, useState } from "react";
11
+ import { cloneElement, isValidElement, memo, useCallback, useMemo, useState } from "react";
10
12
  import { jsx, jsxs } from "react/jsx-runtime";
11
13
  import { cx } from "antd-style";
12
14
  import { mergeRefs } from "react-merge-refs";
@@ -18,15 +20,15 @@ import { Popover } from "@base-ui/react/popover";
18
20
  * Popover component - displays floating content relative to a trigger element
19
21
  * Compatible with Ant Design Popover API
20
22
  */
21
- const PopoverStandalone = memo(({ children, content, arrow: originArrow = true, inset = false, trigger = "hover", placement = "top", styles: styleProps, classNames, className, open, onOpenChange, defaultOpen = false, mouseEnterDelay = .1, mouseLeaveDelay = .1, openDelay, closeDelay, portalled = true, getPopupContainer, disabled = false, zIndex, ref: refProp }) => {
23
+ const PopoverStandalone = memo(({ children, content, arrow: originArrow = false, inset = false, trigger = "hover", placement = "top", styles: styleProps, classNames, className, open, onOpenChange, defaultOpen = false, mouseEnterDelay = .1, mouseLeaveDelay = .1, openDelay, closeDelay, portalled = true, getPopupContainer, disabled = false, zIndex, nativeButton, ref: refProp }) => {
22
24
  const arrow = inset ? false : originArrow;
23
25
  const isClient = useIsClient();
24
26
  const popoverHandle = useMemo(() => Popover.createHandle(), []);
25
27
  const [uncontrolledOpen, setUncontrolledOpen] = useState(Boolean(defaultOpen));
26
- useEffect(() => {
27
- if (open === void 0) return;
28
- setUncontrolledOpen(open);
29
- }, [open]);
28
+ const close = useCallback(() => {
29
+ popoverHandle.close();
30
+ }, [popoverHandle]);
31
+ const contextValue = useMemo(() => ({ close }), [close]);
30
32
  const resolvedOpen = disabled ? false : open ?? uncontrolledOpen;
31
33
  const handleOpenChange = useCallback((nextOpen) => {
32
34
  if (disabled && nextOpen) return;
@@ -50,6 +52,10 @@ const PopoverStandalone = memo(({ children, content, arrow: originArrow = true,
50
52
  };
51
53
  }, [baseSideOffset, inset]);
52
54
  const portalContainer = usePopoverPortalContainer();
55
+ const { isNativeButtonTriggerElement, resolvedNativeButton } = useNativeButton({
56
+ children,
57
+ nativeButton
58
+ });
53
59
  const resolvedClassNames = useMemo(() => ({
54
60
  arrow: cx(styles.arrow, classNames?.arrow),
55
61
  popup: cx(styles.popup, className),
@@ -73,16 +79,20 @@ const PopoverStandalone = memo(({ children, content, arrow: originArrow = true,
73
79
  if (isValidElement(children)) return /* @__PURE__ */ jsx(Popover.Trigger, {
74
80
  handle: popoverHandle,
75
81
  ...triggerProps,
82
+ nativeButton: resolvedNativeButton,
76
83
  render: (props) => {
77
- const { type, ref: triggerRef, ...restProps } = props;
78
- const resolvedProps = typeof children.type === "string" && children.type === "button" ? props : restProps;
84
+ const resolvedProps = (() => {
85
+ if (isNativeButtonTriggerElement) return props;
86
+ const { type, ref: triggerRef, ...restProps } = props;
87
+ return restProps;
88
+ })();
79
89
  const mergedProps = mergeProps(children.props, resolvedProps);
80
90
  return cloneElement(children, {
81
91
  ...mergedProps,
82
92
  className: cx(mergedProps.className, resolvedClassNames.trigger),
83
93
  ref: mergeRefs([
84
94
  children.ref,
85
- triggerRef,
95
+ props.ref,
86
96
  refProp
87
97
  ])
88
98
  });
@@ -92,16 +102,19 @@ const PopoverStandalone = memo(({ children, content, arrow: originArrow = true,
92
102
  handle: popoverHandle,
93
103
  ...triggerProps,
94
104
  className: resolvedClassNames.trigger,
105
+ nativeButton: resolvedNativeButton,
95
106
  ref: refProp,
96
107
  children
97
108
  });
98
109
  }, [
99
110
  children,
100
111
  disabled,
112
+ isNativeButtonTriggerElement,
101
113
  openOnHover,
102
114
  popoverHandle,
103
115
  refProp,
104
116
  resolvedClassNames.trigger,
117
+ resolvedNativeButton,
105
118
  resolvedOpenDelay,
106
119
  resolvedCloseDelay
107
120
  ]);
@@ -138,12 +151,16 @@ const PopoverStandalone = memo(({ children, content, arrow: originArrow = true,
138
151
  }), /* @__PURE__ */ jsx(Popover.Viewport, {
139
152
  className: resolvedClassNames.viewport,
140
153
  style: resolvedStyles.viewport,
141
- children: content
154
+ children: /* @__PURE__ */ jsx(PopoverProvider, {
155
+ value: contextValue,
156
+ children: content
157
+ })
142
158
  })]
143
159
  })
144
160
  }), [
145
161
  arrow,
146
162
  content,
163
+ contextValue,
147
164
  openOnHover,
148
165
  placement,
149
166
  placementConfig.align,
@@ -1 +1 @@
1
- {"version":3,"file":"PopoverStandalone.mjs","names":["BasePopover"],"sources":["../../src/Popover/PopoverStandalone.tsx"],"sourcesContent":["'use client';\n\nimport { mergeProps } from '@base-ui/react/merge-props';\nimport { Popover as BasePopover } from '@base-ui/react/popover';\nimport type { Side } from '@base-ui/react/utils/useAnchorPositioning';\nimport { cx } from 'antd-style';\nimport {\n cloneElement,\n isValidElement,\n memo,\n useCallback,\n useEffect,\n useMemo,\n useState,\n} from 'react';\nimport { mergeRefs } from 'react-merge-refs';\n\nimport { useIsClient } from '@/hooks/useIsClient';\nimport { placementMap } from '@/utils/placement';\n\nimport { PopoverArrowIcon } from './ArrowIcon';\nimport { usePopoverPortalContainer } from './PopoverPortal';\nimport { parseTrigger } from './parseTrigger';\nimport { styles } from './style';\nimport type { PopoverProps } from './type';\n\n/**\n * Popover component - displays floating content relative to a trigger element\n * Compatible with Ant Design Popover API\n */\nexport const PopoverStandalone = memo<PopoverProps>(\n ({\n children,\n content,\n arrow: originArrow = true,\n inset = false,\n trigger = 'hover',\n placement = 'top',\n styles: styleProps,\n classNames,\n className,\n open,\n onOpenChange,\n defaultOpen = false,\n mouseEnterDelay = 0.1,\n mouseLeaveDelay = 0.1,\n openDelay,\n closeDelay,\n portalled = true,\n getPopupContainer,\n disabled = false,\n zIndex,\n ref: refProp,\n }) => {\n const arrow = inset ? false : originArrow;\n const isClient = useIsClient();\n const popoverHandle = useMemo(() => BasePopover.createHandle(), []);\n const [uncontrolledOpen, setUncontrolledOpen] = useState(Boolean(defaultOpen));\n\n // Sync controlled state\n useEffect(() => {\n if (open === undefined) return;\n setUncontrolledOpen(open);\n }, [open]);\n\n const mergedOpen = open ?? uncontrolledOpen;\n const resolvedOpen = disabled ? false : mergedOpen;\n\n const handleOpenChange = useCallback(\n (nextOpen: boolean) => {\n // Don't open if disabled\n if (disabled && nextOpen) return;\n\n onOpenChange?.(nextOpen);\n if (open === undefined) {\n setUncontrolledOpen(nextOpen);\n }\n },\n [onOpenChange, open, disabled],\n );\n\n // Parse trigger mode\n const { openOnHover } = useMemo(() => parseTrigger(trigger), [trigger]);\n\n // Calculate delays (milliseconds take precedence over seconds)\n const resolvedOpenDelay = openDelay ?? mouseEnterDelay * 1000;\n const resolvedCloseDelay = closeDelay ?? mouseLeaveDelay * 1000;\n\n // Get placement configuration\n const placementConfig = placementMap[placement] ?? placementMap.top;\n const baseSideOffset = arrow ? 10 : 6;\n const resolvedSideOffset = useMemo(() => {\n if (!inset) return baseSideOffset;\n return ({\n side,\n positioner,\n }: {\n positioner: { height: number; width: number };\n side: Side;\n }) => {\n if (\n side === 'left' ||\n side === 'right' ||\n side === 'inline-start' ||\n side === 'inline-end'\n ) {\n return -positioner.width;\n }\n return -positioner.height;\n };\n }, [baseSideOffset, inset]);\n\n // Determine portal container\n const portalContainer = usePopoverPortalContainer();\n\n const resolvedClassNames = useMemo(\n () => ({\n arrow: cx(styles.arrow, classNames?.arrow),\n popup: cx(styles.popup, className),\n positioner: cx(styles.positioner, classNames?.root),\n trigger: classNames?.trigger,\n viewport: cx(styles.viewport, classNames?.content),\n }),\n [className, classNames?.arrow, classNames?.content, classNames?.root, classNames?.trigger],\n );\n\n // Render trigger element\n const triggerElement = useMemo(() => {\n const triggerProps = {\n closeDelay: resolvedCloseDelay,\n delay: resolvedOpenDelay,\n disabled,\n openOnHover: openOnHover && !disabled,\n };\n\n if (isValidElement(children)) {\n return (\n <BasePopover.Trigger\n handle={popoverHandle}\n {...triggerProps}\n render={(props) => {\n // Remove type=\"button\" for non-button elements\n // eslint-disable-next-line unused-imports/no-unused-vars, @typescript-eslint/no-unused-vars\n const { type, ref: triggerRef, ...restProps } = props as any;\n const resolvedProps =\n typeof (children as any).type === 'string' && (children as any).type === 'button'\n ? props\n : restProps;\n const mergedProps = mergeProps((children as any).props, resolvedProps);\n return cloneElement(children as any, {\n ...mergedProps,\n className: cx(mergedProps.className, resolvedClassNames.trigger),\n ref: mergeRefs([(children as any).ref, triggerRef, refProp]),\n });\n }}\n />\n );\n }\n return (\n <BasePopover.Trigger\n handle={popoverHandle}\n {...triggerProps}\n className={resolvedClassNames.trigger}\n ref={refProp}\n >\n {children}\n </BasePopover.Trigger>\n );\n }, [\n children,\n disabled,\n openOnHover,\n popoverHandle,\n refProp,\n resolvedClassNames.trigger,\n resolvedOpenDelay,\n resolvedCloseDelay,\n ]);\n\n // Custom container from getPopupContainer\n const customContainer = useMemo(() => {\n if (!getPopupContainer || !isClient) return undefined;\n // We need a reference element, but we don't have it until render\n // This will be handled by the portal container logic\n return undefined;\n }, [getPopupContainer, isClient]);\n\n const resolvedStyles = useMemo(\n () => ({\n arrow: styleProps?.arrow,\n positioner: {\n ...styleProps?.root,\n zIndex: zIndex ?? 1100,\n },\n viewport: styleProps?.content,\n }),\n [styleProps?.arrow, styleProps?.content, styleProps?.root, zIndex],\n );\n\n const popup = useMemo(\n () => (\n <BasePopover.Positioner\n align={placementConfig.align}\n className={resolvedClassNames.positioner}\n data-hover-trigger={openOnHover || undefined}\n data-placement={placement}\n side={placementConfig.side}\n sideOffset={resolvedSideOffset}\n style={resolvedStyles.positioner}\n >\n <BasePopover.Popup className={resolvedClassNames.popup}>\n {arrow && (\n <BasePopover.Arrow className={resolvedClassNames.arrow} style={resolvedStyles.arrow}>\n {PopoverArrowIcon}\n </BasePopover.Arrow>\n )}\n <BasePopover.Viewport\n className={resolvedClassNames.viewport}\n style={resolvedStyles.viewport}\n >\n {content}\n </BasePopover.Viewport>\n </BasePopover.Popup>\n </BasePopover.Positioner>\n ),\n [\n arrow,\n content,\n openOnHover,\n placement,\n placementConfig.align,\n placementConfig.side,\n resolvedClassNames,\n resolvedSideOffset,\n resolvedStyles,\n ],\n );\n\n // Don't render popup if no content\n if (!content) {\n return children;\n }\n\n const resolvedPortalContainer = customContainer ?? portalContainer;\n\n return (\n <BasePopover.Root\n defaultOpen={defaultOpen}\n handle={popoverHandle}\n onOpenChange={handleOpenChange}\n open={resolvedOpen}\n >\n {triggerElement}\n {portalled ? (\n resolvedPortalContainer ? (\n <BasePopover.Portal container={resolvedPortalContainer}>{popup}</BasePopover.Portal>\n ) : null\n ) : (\n popup\n )}\n </BasePopover.Root>\n );\n },\n);\n\nPopoverStandalone.displayName = 'PopoverStandalone';\n"],"mappings":"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"}
1
+ {"version":3,"file":"PopoverStandalone.mjs","names":["BasePopover"],"sources":["../../src/Popover/PopoverStandalone.tsx"],"sourcesContent":["'use client';\n\nimport { mergeProps } from '@base-ui/react/merge-props';\nimport { Popover as BasePopover } from '@base-ui/react/popover';\nimport type { Side } from '@base-ui/react/utils/useAnchorPositioning';\nimport { cx } from 'antd-style';\nimport { cloneElement, isValidElement, memo, useCallback, useMemo, useState } from 'react';\nimport { mergeRefs } from 'react-merge-refs';\n\nimport { useIsClient } from '@/hooks/useIsClient';\nimport { useNativeButton } from '@/hooks/useNativeButton';\nimport { placementMap } from '@/utils/placement';\n\nimport { PopoverArrowIcon } from './ArrowIcon';\nimport { usePopoverPortalContainer } from './PopoverPortal';\nimport { PopoverProvider } from './context';\nimport { parseTrigger } from './parseTrigger';\nimport { styles } from './style';\nimport type { PopoverProps } from './type';\n\n/**\n * Popover component - displays floating content relative to a trigger element\n * Compatible with Ant Design Popover API\n */\nexport const PopoverStandalone = memo<PopoverProps>(\n ({\n children,\n content,\n arrow: originArrow = false,\n inset = false,\n trigger = 'hover',\n placement = 'top',\n styles: styleProps,\n classNames,\n className,\n open,\n onOpenChange,\n defaultOpen = false,\n mouseEnterDelay = 0.1,\n mouseLeaveDelay = 0.1,\n openDelay,\n closeDelay,\n portalled = true,\n getPopupContainer,\n disabled = false,\n zIndex,\n nativeButton,\n ref: refProp,\n }) => {\n const arrow = inset ? false : originArrow;\n const isClient = useIsClient();\n const popoverHandle = useMemo(() => BasePopover.createHandle(), []);\n const [uncontrolledOpen, setUncontrolledOpen] = useState(Boolean(defaultOpen));\n const close = useCallback(() => {\n popoverHandle.close();\n }, [popoverHandle]);\n const contextValue = useMemo(() => ({ close }), [close]);\n\n const mergedOpen = open ?? uncontrolledOpen;\n const resolvedOpen = disabled ? false : mergedOpen;\n\n const handleOpenChange = useCallback(\n (nextOpen: boolean) => {\n // Don't open if disabled\n if (disabled && nextOpen) return;\n\n onOpenChange?.(nextOpen);\n if (open === undefined) {\n setUncontrolledOpen(nextOpen);\n }\n },\n [onOpenChange, open, disabled],\n );\n\n // Parse trigger mode\n const { openOnHover } = useMemo(() => parseTrigger(trigger), [trigger]);\n\n // Calculate delays (milliseconds take precedence over seconds)\n const resolvedOpenDelay = openDelay ?? mouseEnterDelay * 1000;\n const resolvedCloseDelay = closeDelay ?? mouseLeaveDelay * 1000;\n\n // Get placement configuration\n const placementConfig = placementMap[placement] ?? placementMap.top;\n const baseSideOffset = arrow ? 10 : 6;\n const resolvedSideOffset = useMemo(() => {\n if (!inset) return baseSideOffset;\n return ({\n side,\n positioner,\n }: {\n positioner: { height: number; width: number };\n side: Side;\n }) => {\n if (\n side === 'left' ||\n side === 'right' ||\n side === 'inline-start' ||\n side === 'inline-end'\n ) {\n return -positioner.width;\n }\n return -positioner.height;\n };\n }, [baseSideOffset, inset]);\n\n // Determine portal container\n const portalContainer = usePopoverPortalContainer();\n\n const { isNativeButtonTriggerElement, resolvedNativeButton } = useNativeButton({\n children,\n nativeButton,\n });\n\n const resolvedClassNames = useMemo(\n () => ({\n arrow: cx(styles.arrow, classNames?.arrow),\n popup: cx(styles.popup, className),\n positioner: cx(styles.positioner, classNames?.root),\n trigger: classNames?.trigger,\n viewport: cx(styles.viewport, classNames?.content),\n }),\n [className, classNames?.arrow, classNames?.content, classNames?.root, classNames?.trigger],\n );\n\n // Render trigger element\n const triggerElement = useMemo(() => {\n const triggerProps = {\n closeDelay: resolvedCloseDelay,\n delay: resolvedOpenDelay,\n disabled,\n openOnHover: openOnHover && !disabled,\n };\n\n if (isValidElement(children)) {\n return (\n <BasePopover.Trigger\n handle={popoverHandle}\n {...triggerProps}\n nativeButton={resolvedNativeButton}\n render={(props) => {\n // Base UI's trigger props include `type=\"button\"` by default.\n // If we render into a non-<button> element, that prop is invalid and can warn.\n const resolvedProps = (() => {\n if (isNativeButtonTriggerElement) return props as any;\n // eslint-disable-next-line unused-imports/no-unused-vars, @typescript-eslint/no-unused-vars\n const { type, ref: triggerRef, ...restProps } = props as any;\n return restProps;\n })();\n\n const mergedProps = mergeProps((children as any).props, resolvedProps);\n return cloneElement(children as any, {\n ...mergedProps,\n className: cx(mergedProps.className, resolvedClassNames.trigger),\n ref: mergeRefs([(children as any).ref, (props as any).ref, refProp]),\n });\n }}\n />\n );\n }\n return (\n <BasePopover.Trigger\n handle={popoverHandle}\n {...triggerProps}\n className={resolvedClassNames.trigger}\n nativeButton={resolvedNativeButton}\n ref={refProp}\n >\n {children}\n </BasePopover.Trigger>\n );\n }, [\n children,\n disabled,\n isNativeButtonTriggerElement,\n openOnHover,\n popoverHandle,\n refProp,\n resolvedClassNames.trigger,\n resolvedNativeButton,\n resolvedOpenDelay,\n resolvedCloseDelay,\n ]);\n\n // Custom container from getPopupContainer\n const customContainer = useMemo(() => {\n if (!getPopupContainer || !isClient) return undefined;\n // We need a reference element, but we don't have it until render\n // This will be handled by the portal container logic\n return undefined;\n }, [getPopupContainer, isClient]);\n\n const resolvedStyles = useMemo(\n () => ({\n arrow: styleProps?.arrow,\n positioner: {\n ...styleProps?.root,\n zIndex: zIndex ?? 1100,\n },\n viewport: styleProps?.content,\n }),\n [styleProps?.arrow, styleProps?.content, styleProps?.root, zIndex],\n );\n\n const popup = useMemo(\n () => (\n <BasePopover.Positioner\n align={placementConfig.align}\n className={resolvedClassNames.positioner}\n data-hover-trigger={openOnHover || undefined}\n data-placement={placement}\n side={placementConfig.side}\n sideOffset={resolvedSideOffset}\n style={resolvedStyles.positioner}\n >\n <BasePopover.Popup className={resolvedClassNames.popup}>\n {arrow && (\n <BasePopover.Arrow className={resolvedClassNames.arrow} style={resolvedStyles.arrow}>\n {PopoverArrowIcon}\n </BasePopover.Arrow>\n )}\n <BasePopover.Viewport\n className={resolvedClassNames.viewport}\n style={resolvedStyles.viewport}\n >\n <PopoverProvider value={contextValue}>{content}</PopoverProvider>\n </BasePopover.Viewport>\n </BasePopover.Popup>\n </BasePopover.Positioner>\n ),\n [\n arrow,\n content,\n contextValue,\n openOnHover,\n placement,\n placementConfig.align,\n placementConfig.side,\n resolvedClassNames,\n resolvedSideOffset,\n resolvedStyles,\n ],\n );\n\n // Don't render popup if no content\n if (!content) {\n return children;\n }\n\n const resolvedPortalContainer = customContainer ?? portalContainer;\n\n return (\n <BasePopover.Root\n defaultOpen={defaultOpen}\n handle={popoverHandle}\n onOpenChange={handleOpenChange}\n open={resolvedOpen}\n >\n {triggerElement}\n {portalled ? (\n resolvedPortalContainer ? (\n <BasePopover.Portal container={resolvedPortalContainer}>{popup}</BasePopover.Portal>\n ) : null\n ) : (\n popup\n )}\n </BasePopover.Root>\n );\n },\n);\n\nPopoverStandalone.displayName = 'PopoverStandalone';\n"],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import * as react8 from "react";
2
+ import { ReactNode } from "react";
3
+
4
+ //#region src/Popover/context.d.ts
5
+ type PopoverContextValue = {
6
+ close: () => void;
7
+ };
8
+ declare const PopoverProvider: react8.NamedExoticComponent<{
9
+ children: ReactNode;
10
+ value: PopoverContextValue;
11
+ }>;
12
+ declare const usePopoverContext: () => PopoverContextValue;
13
+ //#endregion
14
+ export { PopoverContextValue, PopoverProvider, usePopoverContext };
15
+ //# sourceMappingURL=context.d.mts.map
@@ -0,0 +1,21 @@
1
+ 'use client';
2
+
3
+ import { createContext, memo, use } from "react";
4
+ import { jsx } from "react/jsx-runtime";
5
+
6
+ //#region src/Popover/context.tsx
7
+ const noop = () => void 0;
8
+ const PopoverContext = createContext({ close: noop });
9
+ const PopoverProvider = memo(({ children, value }) => {
10
+ return /* @__PURE__ */ jsx(PopoverContext, {
11
+ value,
12
+ children
13
+ });
14
+ });
15
+ const usePopoverContext = () => {
16
+ return use(PopoverContext);
17
+ };
18
+
19
+ //#endregion
20
+ export { PopoverProvider, usePopoverContext };
21
+ //# sourceMappingURL=context.mjs.map