@lobehub/ui 4.9.2 → 4.10.0

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 (180) 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/Avatar.mjs +41 -31
  7. package/es/Avatar/Avatar.mjs.map +1 -1
  8. package/es/Avatar/AvatarGroup/index.d.mts +2 -2
  9. package/es/Avatar/utils.mjs +50 -0
  10. package/es/Avatar/utils.mjs.map +1 -0
  11. package/es/Burger/Burger.d.mts +2 -2
  12. package/es/CodeEditor/CodeEditor.d.mts +2 -2
  13. package/es/Collapse/Collapse.d.mts +2 -2
  14. package/es/ColorSwatches/ColorSwatches.mjs +3 -2
  15. package/es/ColorSwatches/ColorSwatches.mjs.map +1 -1
  16. package/es/ConfigProvider/index.d.mts +2 -2
  17. package/es/ContextMenu/ContextMenuHost.d.mts +2 -2
  18. package/es/CopyButton/CopyButton.d.mts +2 -2
  19. package/es/DatePicker/DatePicker.d.mts +2 -2
  20. package/es/DraggablePanel/components/DraggablePanelBody.d.mts +2 -2
  21. package/es/DraggablePanel/components/DraggablePanelContainer.d.mts +2 -2
  22. package/es/DraggablePanel/components/DraggablePanelFooter.d.mts +2 -2
  23. package/es/DraggablePanel/components/DraggablePanelHeader.d.mts +2 -2
  24. package/es/DraggablePanel/style.mjs +1 -1
  25. package/es/DraggablePanel/style.mjs.map +1 -1
  26. package/es/DraggableSideNav/DraggableSideNav.d.mts +2 -2
  27. package/es/Drawer/Drawer.d.mts +2 -2
  28. package/es/Dropdown/Dropdown.d.mts +9 -2
  29. package/es/Dropdown/Dropdown.mjs +6 -0
  30. package/es/Dropdown/Dropdown.mjs.map +1 -1
  31. package/es/DropdownMenu/DropdownMenu.d.mts +2 -2
  32. package/es/DropdownMenu/DropdownMenu.mjs +20 -36
  33. package/es/DropdownMenu/DropdownMenu.mjs.map +1 -1
  34. package/es/DropdownMenu/type.d.mts +2 -1
  35. package/es/EditableText/EditableText.d.mts +2 -2
  36. package/es/EmojiPicker/EmojiPicker.d.mts +2 -2
  37. package/es/Flex/FlexBasic.d.mts +2 -2
  38. package/es/FontLoader/index.d.mts +2 -2
  39. package/es/Footer/Footer.d.mts +2 -2
  40. package/es/Form/components/FormGroup.d.mts +2 -2
  41. package/es/Form/components/FormItem.d.mts +2 -2
  42. package/es/Form/components/FormSubmitFooter.d.mts +2 -2
  43. package/es/FormModal/FormModal.d.mts +2 -2
  44. package/es/GuideCard/GuideCard.d.mts +2 -2
  45. package/es/Header/Header.d.mts +2 -2
  46. package/es/Highlighter/Highlighter.d.mts +2 -2
  47. package/es/Highlighter/SyntaxHighlighter/index.d.mts +2 -2
  48. package/es/Hotkey/Hotkey.d.mts +2 -2
  49. package/es/HotkeyInput/HotkeyInput.d.mts +2 -2
  50. package/es/Icon/Icon.d.mts +2 -2
  51. package/es/Icon/components/IconProvider.d.mts +3 -3
  52. package/es/Image/PreviewGroup.d.mts +2 -2
  53. package/es/ImageSelect/ImageSelect.d.mts +2 -2
  54. package/es/Input/Input.d.mts +2 -2
  55. package/es/Input/InputNumber.d.mts +2 -2
  56. package/es/Input/InputOPT.d.mts +2 -2
  57. package/es/Input/InputPassword.d.mts +2 -2
  58. package/es/Input/TextArea.d.mts +2 -2
  59. package/es/Layout/components/LayoutFooter.d.mts +2 -2
  60. package/es/Layout/components/LayoutHeader.d.mts +2 -2
  61. package/es/Layout/components/LayoutMain.d.mts +2 -2
  62. package/es/Layout/components/LayoutSidebar.d.mts +2 -2
  63. package/es/Layout/components/LayoutSidebarInner.d.mts +2 -2
  64. package/es/Layout/components/LayoutToc.d.mts +2 -2
  65. package/es/List/ListItem/index.d.mts +2 -2
  66. package/es/Markdown/Markdown.d.mts +2 -2
  67. package/es/Markdown/Typography.d.mts +2 -2
  68. package/es/Markdown/components/SearchResultCards/index.d.mts +2 -2
  69. package/es/MaskShadow/MaskShadow.d.mts +2 -2
  70. package/es/Menu/Menu.d.mts +2 -2
  71. package/es/Menu/sharedStyle.mjs +56 -10
  72. package/es/Menu/sharedStyle.mjs.map +1 -1
  73. package/es/Mermaid/Mermaid.d.mts +2 -2
  74. package/es/Mermaid/SyntaxMermaid/index.d.mts +2 -2
  75. package/es/Modal/Modal.d.mts +2 -2
  76. package/es/Modal/ModalProvider.d.mts +2 -2
  77. package/es/MotionProvider/index.d.mts +2 -2
  78. package/es/Popover/ArrowIcon.mjs +22 -0
  79. package/es/Popover/ArrowIcon.mjs.map +1 -0
  80. package/es/Popover/Popover.d.mts +9 -0
  81. package/es/Popover/Popover.mjs +20 -0
  82. package/es/Popover/Popover.mjs.map +1 -0
  83. package/es/Popover/PopoverGroup.d.mts +11 -0
  84. package/es/Popover/PopoverGroup.mjs +96 -0
  85. package/es/Popover/PopoverGroup.mjs.map +1 -0
  86. package/es/Popover/PopoverInGroup.mjs +55 -0
  87. package/es/Popover/PopoverInGroup.mjs.map +1 -0
  88. package/es/Popover/PopoverPortal.mjs +45 -0
  89. package/es/Popover/PopoverPortal.mjs.map +1 -0
  90. package/es/Popover/PopoverStandalone.mjs +166 -0
  91. package/es/Popover/PopoverStandalone.mjs.map +1 -0
  92. package/es/Popover/groupContext.d.mts +14 -0
  93. package/es/Popover/groupContext.mjs +11 -0
  94. package/es/Popover/groupContext.mjs.map +1 -0
  95. package/es/Popover/index.d.mts +5 -0
  96. package/es/Popover/index.d.ts +1 -0
  97. package/es/Popover/index.js +1 -0
  98. package/es/Popover/index.mjs +5 -0
  99. package/es/Popover/parseTrigger.d.mts +14 -0
  100. package/es/Popover/parseTrigger.mjs +18 -0
  101. package/es/Popover/parseTrigger.mjs.map +1 -0
  102. package/es/Popover/style.mjs +218 -0
  103. package/es/Popover/style.mjs.map +1 -0
  104. package/es/Popover/type.d.mts +112 -0
  105. package/es/Popover/useMergedPopoverProps.mjs +88 -0
  106. package/es/Popover/useMergedPopoverProps.mjs.map +1 -0
  107. package/es/SearchBar/SearchBar.d.mts +2 -2
  108. package/es/Segmented/Segmented.d.mts +2 -2
  109. package/es/Select/Select.d.mts +2 -2
  110. package/es/SideNav/SideNav.d.mts +2 -2
  111. package/es/SliderWithInput/SliderWithInput.d.mts +2 -2
  112. package/es/SortableList/components/DragHandle.d.mts +2 -2
  113. package/es/SortableList/components/SortableItem.d.mts +2 -2
  114. package/es/ThemeProvider/GlobalStyle/antdOverride.mjs +4 -3
  115. package/es/ThemeProvider/GlobalStyle/antdOverride.mjs.map +1 -1
  116. package/es/ThemeProvider/ThemeProvider.d.mts +2 -2
  117. package/es/Toc/Toc.d.mts +2 -2
  118. package/es/Tooltip/TooltipGroup.mjs +2 -2
  119. package/es/Tooltip/TooltipGroup.mjs.map +1 -1
  120. package/es/Tooltip/type.d.mts +2 -2
  121. package/es/Tooltip/useTooltipFloating.mjs +2 -2
  122. package/es/Tooltip/useTooltipFloating.mjs.map +1 -1
  123. package/es/Video/index.d.mts +2 -2
  124. package/es/awesome/AuroraBackground/AuroraBackground.d.mts +2 -2
  125. package/es/awesome/BottomGradientButton/BottomGradientButton.d.mts +2 -2
  126. package/es/awesome/Features/Features.d.mts +2 -2
  127. package/es/awesome/Giscus/style.mjs +4 -3
  128. package/es/awesome/Giscus/style.mjs.map +1 -1
  129. package/es/awesome/GradientButton/GradientButton.d.mts +2 -2
  130. package/es/awesome/GridBackground/GridBackground.d.mts +2 -2
  131. package/es/awesome/GridBackground/GridShowcase.d.mts +2 -2
  132. package/es/awesome/Hero/Hero.d.mts +2 -2
  133. package/es/awesome/Spotlight/Spotlight.d.mts +2 -2
  134. package/es/awesome/SpotlightCard/SpotlightCard.d.mts +2 -2
  135. package/es/awesome/TypewriterEffect/TypewriterEffect.d.mts +2 -2
  136. package/es/brand/LobeChat/index.d.mts +2 -2
  137. package/es/brand/LobeHub/index.d.mts +2 -2
  138. package/es/brand/LogoThree/LogoSpline.d.mts +2 -2
  139. package/es/brand/LogoThree/index.d.mts +2 -2
  140. package/es/chat/BackBottom/BackBottom.d.mts +2 -2
  141. package/es/chat/ChatInputArea/components/ChatInputAreaInner.d.mts +2 -2
  142. package/es/chat/ChatItem/ChatItem.d.mts +2 -2
  143. package/es/chat/ChatList/ChatList.d.mts +2 -2
  144. package/es/chat/EditableMessage/EditableMessage.d.mts +2 -2
  145. package/es/chat/EditableMessageList/EditableMessageList.d.mts +2 -2
  146. package/es/chat/MessageInput/MessageInput.d.mts +2 -2
  147. package/es/chat/MessageModal/MessageModal.d.mts +2 -2
  148. package/es/color/ColorScales/index.d.mts +2 -2
  149. package/es/color/CssVar/index.d.mts +2 -2
  150. package/es/i18n/context.d.mts +2 -2
  151. package/es/icons/lucideExtra/BotPromptIcon.d.mts +2 -2
  152. package/es/icons/lucideExtra/CreateBotIcon.d.mts +3 -3
  153. package/es/icons/lucideExtra/DiscordIcon.d.mts +3 -3
  154. package/es/icons/lucideExtra/GlobeOffIcon.d.mts +2 -2
  155. package/es/icons/lucideExtra/GroupBotIcon.d.mts +3 -3
  156. package/es/icons/lucideExtra/GroupBotSquareIcon.d.mts +3 -3
  157. package/es/icons/lucideExtra/LeftClickIcon.d.mts +3 -3
  158. package/es/icons/lucideExtra/LeftDoubleClickIcon.d.mts +3 -3
  159. package/es/icons/lucideExtra/McpIcon.d.mts +3 -3
  160. package/es/icons/lucideExtra/ProviderIcon.d.mts +3 -3
  161. package/es/icons/lucideExtra/RightClickIcon.d.mts +3 -3
  162. package/es/icons/lucideExtra/RightDoubleClickIcon.d.mts +3 -3
  163. package/es/icons/lucideExtra/ShapesUploadIcon.d.mts +3 -3
  164. package/es/icons/lucideExtra/TreeDownRightIcon.d.mts +3 -3
  165. package/es/icons/lucideExtra/TreeUpDownRightIcon.d.mts +3 -3
  166. package/es/index.d.mts +6 -1
  167. package/es/index.mjs +4 -1
  168. package/es/mdx/Mdx/index.d.mts +2 -2
  169. package/es/mobile/ChatHeader/ChatHeaderTitle.d.mts +2 -2
  170. package/es/mobile/ChatInputArea/components/ChatSendButton.d.mts +2 -2
  171. package/es/mobile/TabBar/TabBar.d.mts +2 -2
  172. package/es/storybook/StoryBook/index.d.mts +2 -2
  173. package/es/utils/placement.d.mts +31 -0
  174. package/es/utils/placement.mjs +100 -0
  175. package/es/utils/placement.mjs.map +1 -0
  176. package/es/utils/safeReadableColor.mjs +15 -0
  177. package/es/utils/safeReadableColor.mjs.map +1 -0
  178. package/package.json +1 -1
  179. package/es/Tooltip/antdPlacementToFloating.mjs +0 -27
  180. package/es/Tooltip/antdPlacementToFloating.mjs.map +0 -1
@@ -1,8 +1,8 @@
1
1
  import { TypographyProps } from "./type.mjs";
2
- import * as react33 from "react";
2
+ import * as react51 from "react";
3
3
 
4
4
  //#region src/Markdown/Typography.d.ts
5
- declare const Typography: react33.NamedExoticComponent<TypographyProps>;
5
+ declare const Typography: react51.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 react70 from "react";
3
+ import * as react3 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: react70.NamedExoticComponent<SearchResultCardsProps>;
17
+ declare const SearchResultCards: react3.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 react36 from "react";
2
+ import * as react46 from "react";
3
3
 
4
4
  //#region src/MaskShadow/MaskShadow.d.ts
5
- declare const MaskShadow: react36.NamedExoticComponent<MaskShadowProps>;
5
+ declare const MaskShadow: react46.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 react30 from "react";
2
+ import * as react41 from "react";
3
3
 
4
4
  //#region src/Menu/Menu.d.ts
5
- declare const Menu: react30.NamedExoticComponent<MenuProps<unknown>>;
5
+ declare const Menu: react41.NamedExoticComponent<MenuProps<unknown>>;
6
6
  //#endregion
7
7
  export { Menu };
8
8
  //# sourceMappingURL=Menu.d.mts.map
@@ -117,23 +117,69 @@ const styles = createStaticStyles(({ css: css$1, cssVar: cssVar$1 }) => ({
117
117
  0 0 15px 0 #00000008,
118
118
  0 2px 30px 0 #00000014,
119
119
  0 0 0 1px ${cssVar$1.colorBorder} inset;
120
+ `,
121
+ positioner: css$1`
122
+ z-index: 1100;
123
+
124
+ &[data-hover-trigger] {
125
+ --lobe-dropdown-animation-duration: 140ms;
126
+ --lobe-dropdown-animation-translate: 6px;
127
+ --lobe-dropdown-animation-scale: 0.98;
128
+ --lobe-dropdown-animation-ease-in: ease-in;
129
+ --lobe-dropdown-animation-ease-out: ${cssVar$1.motionEaseOut};
130
+ --lobe-dropdown-translate-x: 0;
131
+ --lobe-dropdown-translate-y: calc(var(--lobe-dropdown-animation-translate) * -1);
132
+
133
+ & > * {
134
+ will-change: opacity, transform;
135
+ animation: none;
136
+ }
120
137
 
121
- animation: context-menu-fade-in 150ms ${cssVar$1.motionEaseOut};
138
+ &[data-open] > * {
139
+ transform: translate3d(0, 0, 0) scale(1);
140
+ opacity: 1;
141
+ transition:
142
+ opacity var(--lobe-dropdown-animation-duration) var(--lobe-dropdown-animation-ease-out),
143
+ transform var(--lobe-dropdown-animation-duration) var(--lobe-dropdown-animation-ease-out);
144
+ }
122
145
 
123
- @keyframes context-menu-fade-in {
124
- from {
125
- transform: scale(0.96);
146
+ &[data-open] > *[data-starting-style] {
147
+ transform: translate3d(
148
+ var(--lobe-dropdown-translate-x),
149
+ var(--lobe-dropdown-translate-y),
150
+ 0
151
+ )
152
+ scale(var(--lobe-dropdown-animation-scale));
126
153
  opacity: 0;
127
154
  }
128
155
 
129
- to {
130
- transform: scale(1);
131
- opacity: 1;
156
+ &[data-closed] > * {
157
+ transform: translate3d(
158
+ var(--lobe-dropdown-translate-x),
159
+ var(--lobe-dropdown-translate-y),
160
+ 0
161
+ )
162
+ scale(var(--lobe-dropdown-animation-scale));
163
+ opacity: 0;
164
+ transition:
165
+ opacity var(--lobe-dropdown-animation-duration) var(--lobe-dropdown-animation-ease-in),
166
+ transform var(--lobe-dropdown-animation-duration) var(--lobe-dropdown-animation-ease-in);
167
+ }
168
+
169
+ &[data-placement='top'],
170
+ &[data-placement='topCenter'],
171
+ &[data-placement='topLeft'],
172
+ &[data-placement='topRight'] {
173
+ --lobe-dropdown-translate-y: var(--lobe-dropdown-animation-translate);
174
+ }
175
+
176
+ &[data-placement='bottom'],
177
+ &[data-placement='bottomCenter'],
178
+ &[data-placement='bottomLeft'],
179
+ &[data-placement='bottomRight'] {
180
+ --lobe-dropdown-translate-y: calc(var(--lobe-dropdown-animation-translate) * -1);
132
181
  }
133
182
  }
134
- `,
135
- positioner: css$1`
136
- z-index: 1100;
137
183
  `,
138
184
  separator: css$1`
139
185
  height: 1px;
@@ -1 +1 @@
1
- {"version":3,"file":"sharedStyle.mjs","names":["cssVar"],"sources":["../../src/Menu/sharedStyle.ts"],"sourcesContent":["import { createStaticStyles } from 'antd-style';\n\nexport const styles = createStaticStyles(({ css, cssVar }) => ({\n danger: css`\n color: ${cssVar.colorError} !important;\n\n &:hover {\n background: ${cssVar.colorErrorBg} !important;\n }\n `,\n\n empty: css`\n cursor: default;\n font-style: italic;\n color: ${cssVar.colorTextTertiary};\n `,\n\n extra: css`\n margin-inline-start: auto;\n padding-inline-start: 16px;\n font-size: 12px;\n color: ${cssVar.colorTextTertiary};\n `,\n\n groupLabel: css`\n user-select: none;\n\n padding-block: 8px 4px;\n padding-inline: 12px;\n\n font-size: 12px;\n font-weight: 500;\n line-height: 16px;\n color: ${cssVar.colorTextTertiary};\n text-transform: uppercase;\n `,\n\n icon: css`\n display: flex;\n flex-shrink: 0;\n align-items: center;\n justify-content: center;\n\n width: 16px;\n height: 16px;\n margin-inline-end: 8px;\n `,\n\n item: css`\n cursor: pointer;\n user-select: none;\n\n position: relative;\n\n overflow: hidden;\n display: flex;\n align-items: center;\n\n width: 100%;\n min-height: 36px;\n padding-block: 8px;\n padding-inline: 12px;\n border-radius: ${cssVar.borderRadius};\n\n font-size: 14px;\n line-height: 20px;\n color: ${cssVar.colorText};\n\n outline: none;\n\n transition: all 150ms ${cssVar.motionEaseOut};\n\n &:hover {\n background: ${cssVar.colorFillTertiary};\n }\n\n &:active {\n background: ${cssVar.colorFillSecondary};\n }\n\n &[data-disabled] {\n cursor: not-allowed;\n color: ${cssVar.colorTextDisabled};\n opacity: 0.5;\n\n &:hover {\n background: transparent;\n }\n }\n\n &[data-highlighted]:not([data-disabled]) {\n background: ${cssVar.colorFillTertiary};\n }\n\n &[data-state='open']:not([data-disabled]),\n &[data-open]:not([data-disabled]),\n &[aria-expanded='true']:not([data-disabled]) {\n background: ${cssVar.colorFillTertiary};\n }\n `,\n\n itemContent: css`\n display: flex;\n flex: 1;\n gap: 0;\n align-items: center;\n `,\n\n label: css`\n overflow: hidden;\n flex: 1;\n text-overflow: ellipsis;\n white-space: nowrap;\n `,\n\n popup: css`\n min-width: 120px;\n padding: 4px;\n border-radius: ${cssVar.borderRadius};\n\n background: ${cssVar.colorBgElevated};\n outline: none;\n box-shadow:\n 0 0 15px 0 #00000008,\n 0 2px 30px 0 #00000014,\n 0 0 0 1px ${cssVar.colorBorder} inset;\n\n animation: context-menu-fade-in 150ms ${cssVar.motionEaseOut};\n\n @keyframes context-menu-fade-in {\n from {\n transform: scale(0.96);\n opacity: 0;\n }\n\n to {\n transform: scale(1);\n opacity: 1;\n }\n }\n `,\n positioner: css`\n z-index: 1100;\n `,\n\n separator: css`\n height: 1px;\n margin-block: 4px;\n margin-inline: 0;\n background: ${cssVar.colorBorder};\n `,\n\n submenuArrow: css`\n display: flex;\n flex-shrink: 0;\n align-items: center;\n justify-content: center;\n\n width: 20px;\n height: 20px;\n margin-inline-start: auto;\n padding-inline-start: 8px;\n `,\n}));\n"],"mappings":";;;AAEA,MAAa,SAAS,oBAAoB,EAAE,YAAK,wBAAc;CAC7D,QAAQ,KAAG;aACAA,SAAO,WAAW;;;oBAGXA,SAAO,aAAa;;;CAItC,OAAO,KAAG;;;aAGCA,SAAO,kBAAkB;;CAGpC,OAAO,KAAG;;;;aAICA,SAAO,kBAAkB;;CAGpC,YAAY,KAAG;;;;;;;;;aASJA,SAAO,kBAAkB;;;CAIpC,MAAM,KAAG;;;;;;;;;;CAWT,MAAM,KAAG;;;;;;;;;;;;;;qBAcUA,SAAO,aAAa;;;;aAI5BA,SAAO,UAAU;;;;4BAIFA,SAAO,cAAc;;;oBAG7BA,SAAO,kBAAkB;;;;oBAIzBA,SAAO,mBAAmB;;;;;eAK/BA,SAAO,kBAAkB;;;;;;;;;oBASpBA,SAAO,kBAAkB;;;;;;oBAMzBA,SAAO,kBAAkB;;;CAI3C,aAAa,KAAG;;;;;;CAOhB,OAAO,KAAG;;;;;;CAOV,OAAO,KAAG;;;qBAGSA,SAAO,aAAa;;kBAEvBA,SAAO,gBAAgB;;;;;kBAKvBA,SAAO,YAAY;;4CAEOA,SAAO,cAAc;;;;;;;;;;;;;;CAc/D,YAAY,KAAG;;;CAIf,WAAW,KAAG;;;;kBAIEA,SAAO,YAAY;;CAGnC,cAAc,KAAG;;;;;;;;;;;CAWlB,EAAE"}
1
+ {"version":3,"file":"sharedStyle.mjs","names":["cssVar"],"sources":["../../src/Menu/sharedStyle.ts"],"sourcesContent":["import { createStaticStyles } from 'antd-style';\n\nexport const styles = createStaticStyles(({ css, cssVar }) => ({\n danger: css`\n color: ${cssVar.colorError} !important;\n\n &:hover {\n background: ${cssVar.colorErrorBg} !important;\n }\n `,\n\n empty: css`\n cursor: default;\n font-style: italic;\n color: ${cssVar.colorTextTertiary};\n `,\n\n extra: css`\n margin-inline-start: auto;\n padding-inline-start: 16px;\n font-size: 12px;\n color: ${cssVar.colorTextTertiary};\n `,\n\n groupLabel: css`\n user-select: none;\n\n padding-block: 8px 4px;\n padding-inline: 12px;\n\n font-size: 12px;\n font-weight: 500;\n line-height: 16px;\n color: ${cssVar.colorTextTertiary};\n text-transform: uppercase;\n `,\n\n icon: css`\n display: flex;\n flex-shrink: 0;\n align-items: center;\n justify-content: center;\n\n width: 16px;\n height: 16px;\n margin-inline-end: 8px;\n `,\n\n item: css`\n cursor: pointer;\n user-select: none;\n\n position: relative;\n\n overflow: hidden;\n display: flex;\n align-items: center;\n\n width: 100%;\n min-height: 36px;\n padding-block: 8px;\n padding-inline: 12px;\n border-radius: ${cssVar.borderRadius};\n\n font-size: 14px;\n line-height: 20px;\n color: ${cssVar.colorText};\n\n outline: none;\n\n transition: all 150ms ${cssVar.motionEaseOut};\n\n &:hover {\n background: ${cssVar.colorFillTertiary};\n }\n\n &:active {\n background: ${cssVar.colorFillSecondary};\n }\n\n &[data-disabled] {\n cursor: not-allowed;\n color: ${cssVar.colorTextDisabled};\n opacity: 0.5;\n\n &:hover {\n background: transparent;\n }\n }\n\n &[data-highlighted]:not([data-disabled]) {\n background: ${cssVar.colorFillTertiary};\n }\n\n &[data-state='open']:not([data-disabled]),\n &[data-open]:not([data-disabled]),\n &[aria-expanded='true']:not([data-disabled]) {\n background: ${cssVar.colorFillTertiary};\n }\n `,\n\n itemContent: css`\n display: flex;\n flex: 1;\n gap: 0;\n align-items: center;\n `,\n\n label: css`\n overflow: hidden;\n flex: 1;\n text-overflow: ellipsis;\n white-space: nowrap;\n `,\n\n popup: css`\n min-width: 120px;\n padding: 4px;\n border-radius: ${cssVar.borderRadius};\n\n background: ${cssVar.colorBgElevated};\n outline: none;\n box-shadow:\n 0 0 15px 0 #00000008,\n 0 2px 30px 0 #00000014,\n 0 0 0 1px ${cssVar.colorBorder} inset;\n `,\n positioner: css`\n z-index: 1100;\n\n &[data-hover-trigger] {\n --lobe-dropdown-animation-duration: 140ms;\n --lobe-dropdown-animation-translate: 6px;\n --lobe-dropdown-animation-scale: 0.98;\n --lobe-dropdown-animation-ease-in: ease-in;\n --lobe-dropdown-animation-ease-out: ${cssVar.motionEaseOut};\n --lobe-dropdown-translate-x: 0;\n --lobe-dropdown-translate-y: calc(var(--lobe-dropdown-animation-translate) * -1);\n\n & > * {\n will-change: opacity, transform;\n animation: none;\n }\n\n &[data-open] > * {\n transform: translate3d(0, 0, 0) scale(1);\n opacity: 1;\n transition:\n opacity var(--lobe-dropdown-animation-duration) var(--lobe-dropdown-animation-ease-out),\n transform var(--lobe-dropdown-animation-duration) var(--lobe-dropdown-animation-ease-out);\n }\n\n &[data-open] > *[data-starting-style] {\n transform: translate3d(\n var(--lobe-dropdown-translate-x),\n var(--lobe-dropdown-translate-y),\n 0\n )\n scale(var(--lobe-dropdown-animation-scale));\n opacity: 0;\n }\n\n &[data-closed] > * {\n transform: translate3d(\n var(--lobe-dropdown-translate-x),\n var(--lobe-dropdown-translate-y),\n 0\n )\n scale(var(--lobe-dropdown-animation-scale));\n opacity: 0;\n transition:\n opacity var(--lobe-dropdown-animation-duration) var(--lobe-dropdown-animation-ease-in),\n transform var(--lobe-dropdown-animation-duration) var(--lobe-dropdown-animation-ease-in);\n }\n\n &[data-placement='top'],\n &[data-placement='topCenter'],\n &[data-placement='topLeft'],\n &[data-placement='topRight'] {\n --lobe-dropdown-translate-y: var(--lobe-dropdown-animation-translate);\n }\n\n &[data-placement='bottom'],\n &[data-placement='bottomCenter'],\n &[data-placement='bottomLeft'],\n &[data-placement='bottomRight'] {\n --lobe-dropdown-translate-y: calc(var(--lobe-dropdown-animation-translate) * -1);\n }\n }\n `,\n\n separator: css`\n height: 1px;\n margin-block: 4px;\n margin-inline: 0;\n background: ${cssVar.colorBorder};\n `,\n\n submenuArrow: css`\n display: flex;\n flex-shrink: 0;\n align-items: center;\n justify-content: center;\n\n width: 20px;\n height: 20px;\n margin-inline-start: auto;\n padding-inline-start: 8px;\n `,\n}));\n"],"mappings":";;;AAEA,MAAa,SAAS,oBAAoB,EAAE,YAAK,wBAAc;CAC7D,QAAQ,KAAG;aACAA,SAAO,WAAW;;;oBAGXA,SAAO,aAAa;;;CAItC,OAAO,KAAG;;;aAGCA,SAAO,kBAAkB;;CAGpC,OAAO,KAAG;;;;aAICA,SAAO,kBAAkB;;CAGpC,YAAY,KAAG;;;;;;;;;aASJA,SAAO,kBAAkB;;;CAIpC,MAAM,KAAG;;;;;;;;;;CAWT,MAAM,KAAG;;;;;;;;;;;;;;qBAcUA,SAAO,aAAa;;;;aAI5BA,SAAO,UAAU;;;;4BAIFA,SAAO,cAAc;;;oBAG7BA,SAAO,kBAAkB;;;;oBAIzBA,SAAO,mBAAmB;;;;;eAK/BA,SAAO,kBAAkB;;;;;;;;;oBASpBA,SAAO,kBAAkB;;;;;;oBAMzBA,SAAO,kBAAkB;;;CAI3C,aAAa,KAAG;;;;;;CAOhB,OAAO,KAAG;;;;;;CAOV,OAAO,KAAG;;;qBAGSA,SAAO,aAAa;;kBAEvBA,SAAO,gBAAgB;;;;;kBAKvBA,SAAO,YAAY;;CAEnC,YAAY,KAAG;;;;;;;;4CAQ2BA,SAAO,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwD/D,WAAW,KAAG;;;;kBAIEA,SAAO,YAAY;;CAGnC,cAAc,KAAG;;;;;;;;;;;CAWlB,EAAE"}
@@ -1,8 +1,8 @@
1
1
  import { MermaidProps } from "./type.mjs";
2
- import * as react31 from "react";
2
+ import * as react42 from "react";
3
3
 
4
4
  //#region src/Mermaid/Mermaid.d.ts
5
- declare const Mermaid: react31.NamedExoticComponent<MermaidProps>;
5
+ declare const Mermaid: react42.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 react32 from "react";
2
+ import * as react43 from "react";
3
3
 
4
4
  //#region src/Mermaid/SyntaxMermaid/index.d.ts
5
- declare const SyntaxMermaid: react32.NamedExoticComponent<SyntaxMermaidProps>;
5
+ declare const SyntaxMermaid: react43.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 react26 from "react";
2
+ import * as react38 from "react";
3
3
 
4
4
  //#region src/Modal/Modal.d.ts
5
- declare const Modal: react26.NamedExoticComponent<ModalProps>;
5
+ declare const Modal: react38.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 react27 from "react";
2
+ import * as react39 from "react";
3
3
  import { ReactNode } from "react";
4
4
 
5
5
  //#region src/Modal/ModalProvider.d.ts
6
- declare const ModalProvider: react27.NamedExoticComponent<{
6
+ declare const ModalProvider: react39.NamedExoticComponent<{
7
7
  children: ReactNode;
8
8
  value: ModalContextValue;
9
9
  }>;
@@ -1,4 +1,4 @@
1
- import * as react71 from "react";
1
+ import * as react4 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: react71.NamedExoticComponent<{
9
+ declare const MotionProvider: react4.NamedExoticComponent<{
10
10
  children: ReactNode;
11
11
  motion: MotionComponentType;
12
12
  }>;
@@ -0,0 +1,22 @@
1
+ 'use client';
2
+
3
+ import { jsx, jsxs } from "react/jsx-runtime";
4
+
5
+ //#region src/Popover/ArrowIcon.tsx
6
+ const PopoverArrowIcon = () => /* @__PURE__ */ jsxs("svg", {
7
+ "aria-hidden": "true",
8
+ height: "6",
9
+ viewBox: "0 0 12 6",
10
+ width: "12",
11
+ children: [/* @__PURE__ */ jsx("path", {
12
+ d: "M0 6L6 0L12 6Z",
13
+ "data-role": "fill"
14
+ }), /* @__PURE__ */ jsx("path", {
15
+ d: "M0 6L6 0L12 6",
16
+ "data-role": "stroke"
17
+ })]
18
+ });
19
+
20
+ //#endregion
21
+ export { PopoverArrowIcon };
22
+ //# sourceMappingURL=ArrowIcon.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ArrowIcon.mjs","names":["PopoverArrowIcon: FC"],"sources":["../../src/Popover/ArrowIcon.tsx"],"sourcesContent":["'use client';\n\nimport type { FC } from 'react';\n\nexport const PopoverArrowIcon: FC = () => (\n <svg aria-hidden=\"true\" height=\"6\" viewBox=\"0 0 12 6\" width=\"12\">\n <path d=\"M0 6L6 0L12 6Z\" data-role=\"fill\" />\n <path d=\"M0 6L6 0L12 6\" data-role=\"stroke\" />\n </svg>\n);\n"],"mappings":";;;;;AAIA,MAAaA,yBACX,qBAAC;CAAI,eAAY;CAAO,QAAO;CAAI,SAAQ;CAAW,OAAM;YAC1D,oBAAC;EAAK,GAAE;EAAiB,aAAU;GAAS,EAC5C,oBAAC;EAAK,GAAE;EAAgB,aAAU;GAAW;EACzC"}
@@ -0,0 +1,9 @@
1
+ import { PopoverProps } from "./type.mjs";
2
+ import { parseTrigger } from "./parseTrigger.mjs";
3
+ import { FC } from "react";
4
+
5
+ //#region src/Popover/Popover.d.ts
6
+ declare const Popover: FC<PopoverProps>;
7
+ //#endregion
8
+ export { Popover };
9
+ //# sourceMappingURL=Popover.d.mts.map
@@ -0,0 +1,20 @@
1
+ 'use client';
2
+
3
+ import { PopoverGroupHandleContext } from "./groupContext.mjs";
4
+ import { parseTrigger } from "./parseTrigger.mjs";
5
+ import { PopoverInGroup } from "./PopoverInGroup.mjs";
6
+ import { PopoverStandalone } from "./PopoverStandalone.mjs";
7
+ import { useContext } from "react";
8
+ import { jsx } from "react/jsx-runtime";
9
+
10
+ //#region src/Popover/Popover.tsx
11
+ const Popover = (props) => {
12
+ const group = useContext(PopoverGroupHandleContext);
13
+ return Boolean(group) && props.open === void 0 && props.defaultOpen === void 0 ? /* @__PURE__ */ jsx(PopoverInGroup, { ...props }) : /* @__PURE__ */ jsx(PopoverStandalone, { ...props });
14
+ };
15
+ Popover.displayName = "Popover";
16
+ var Popover_default = Popover;
17
+
18
+ //#endregion
19
+ export { Popover_default as default };
20
+ //# sourceMappingURL=Popover.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Popover.mjs","names":["Popover: FC<PopoverProps>"],"sources":["../../src/Popover/Popover.tsx"],"sourcesContent":["'use client';\n\nimport { type FC, useContext } from 'react';\n\nimport { PopoverInGroup } from './PopoverInGroup';\nimport { PopoverStandalone } from './PopoverStandalone';\nimport { PopoverGroupHandleContext } from './groupContext';\nimport type { PopoverProps } from './type';\n\nexport { parseTrigger } from './parseTrigger';\n\nconst Popover: FC<PopoverProps> = (props) => {\n const group = useContext(PopoverGroupHandleContext);\n\n // Group mode is driven by trigger interactions; keep standalone behavior for controlled cases.\n const canUseGroup = Boolean(group) && props.open === undefined && props.defaultOpen === undefined;\n\n return canUseGroup ? <PopoverInGroup {...props} /> : <PopoverStandalone {...props} />;\n};\n\nPopover.displayName = 'Popover';\n\nexport default Popover;\n"],"mappings":";;;;;;;;;;AAWA,MAAMA,WAA6B,UAAU;CAC3C,MAAM,QAAQ,WAAW,0BAA0B;AAKnD,QAFoB,QAAQ,MAAM,IAAI,MAAM,SAAS,UAAa,MAAM,gBAAgB,SAEnE,oBAAC,kBAAe,GAAI,QAAS,GAAG,oBAAC,qBAAkB,GAAI,QAAS;;AAGvF,QAAQ,cAAc;AAEtB,sBAAe"}
@@ -0,0 +1,11 @@
1
+ import { PopoverGroupSharedProps } from "./groupContext.mjs";
2
+ import { FC, ReactNode } from "react";
3
+
4
+ //#region src/Popover/PopoverGroup.d.ts
5
+ type PopoverGroupProps = PopoverGroupSharedProps & {
6
+ children: ReactNode;
7
+ };
8
+ declare const PopoverGroup: FC<PopoverGroupProps>;
9
+ //#endregion
10
+ export { PopoverGroup };
11
+ //# sourceMappingURL=PopoverGroup.d.mts.map
@@ -0,0 +1,96 @@
1
+ 'use client';
2
+
3
+ import { placementMap } from "../utils/placement.mjs";
4
+ import { PopoverGroupHandleContext, PopoverGroupPropsContext } from "./groupContext.mjs";
5
+ import { parseTrigger } from "./parseTrigger.mjs";
6
+ import { PopoverArrowIcon } from "./ArrowIcon.mjs";
7
+ import { usePopoverPortalContainer } from "./PopoverPortal.mjs";
8
+ import { styles } from "./style.mjs";
9
+ import { useCallback, useMemo, useRef } from "react";
10
+ import { jsx, jsxs } from "react/jsx-runtime";
11
+ import { cx } from "antd-style";
12
+ import { Popover } from "@base-ui/react/popover";
13
+
14
+ //#region src/Popover/PopoverGroup.tsx
15
+ const PopoverGroup = ({ children, contentLayoutAnimation = true, ...sharedProps }) => {
16
+ const handle = useMemo(() => Popover.createHandle(), []);
17
+ const activeItemRef = useRef(null);
18
+ const handleOpenChange = useCallback((open) => {
19
+ activeItemRef.current?.onOpenChange?.(open);
20
+ }, []);
21
+ const portalContainer = usePopoverPortalContainer();
22
+ return /* @__PURE__ */ jsx(PopoverGroupHandleContext.Provider, {
23
+ value: handle,
24
+ children: /* @__PURE__ */ jsxs(PopoverGroupPropsContext.Provider, {
25
+ value: sharedProps,
26
+ children: [children, /* @__PURE__ */ jsx(Popover.Root, {
27
+ handle,
28
+ onOpenChange: handleOpenChange,
29
+ children: ({ payload }) => {
30
+ const item = payload ?? null;
31
+ activeItemRef.current = item;
32
+ if (!item?.content) return null;
33
+ const arrow = item.inset ? false : item.arrow ?? true;
34
+ const placement = item.placement ?? "top";
35
+ const { openOnHover } = parseTrigger(item.trigger ?? "hover");
36
+ const placementConfig = placementMap[placement] ?? placementMap.top;
37
+ const baseSideOffset = arrow ? 10 : 6;
38
+ const resolvedSideOffset = item.inset ? ({ side, positioner }) => {
39
+ if (side === "left" || side === "right" || side === "inline-start" || side === "inline-end") return -positioner.width;
40
+ return -positioner.height;
41
+ } : baseSideOffset;
42
+ const resolvedClassNames = {
43
+ arrow: cx(styles.arrow, item.classNames?.arrow),
44
+ popup: cx(styles.popup, item.className),
45
+ positioner: cx(styles.positioner, item.classNames?.root),
46
+ viewport: cx(styles.viewport, item.classNames?.content)
47
+ };
48
+ const resolvedStyles = {
49
+ arrow: item.styles?.arrow,
50
+ positioner: {
51
+ ...item.styles?.root,
52
+ zIndex: item.zIndex ?? 1100
53
+ },
54
+ viewport: item.styles?.content
55
+ };
56
+ const popup = /* @__PURE__ */ jsx(Popover.Positioner, {
57
+ align: placementConfig.align,
58
+ className: resolvedClassNames.positioner,
59
+ "data-hover-trigger": openOnHover || void 0,
60
+ "data-placement": placement,
61
+ side: placementConfig.side,
62
+ sideOffset: resolvedSideOffset,
63
+ style: resolvedStyles.positioner,
64
+ children: /* @__PURE__ */ jsxs(Popover.Popup, {
65
+ className: resolvedClassNames.popup,
66
+ children: [arrow && /* @__PURE__ */ jsx(Popover.Arrow, {
67
+ className: resolvedClassNames.arrow,
68
+ style: resolvedStyles.arrow,
69
+ children: /* @__PURE__ */ jsx(PopoverArrowIcon, {})
70
+ }), contentLayoutAnimation ? /* @__PURE__ */ jsx(Popover.Viewport, {
71
+ className: resolvedClassNames.viewport,
72
+ style: resolvedStyles.viewport,
73
+ children: item.content
74
+ }) : /* @__PURE__ */ jsx("div", {
75
+ className: resolvedClassNames.viewport,
76
+ style: resolvedStyles.viewport,
77
+ children: item.content
78
+ })]
79
+ })
80
+ });
81
+ const resolvedPortalContainer = portalContainer;
82
+ return item.portalled ?? true ? resolvedPortalContainer ? /* @__PURE__ */ jsx(Popover.Portal, {
83
+ container: resolvedPortalContainer,
84
+ children: popup
85
+ }) : null : popup;
86
+ }
87
+ })]
88
+ })
89
+ });
90
+ };
91
+ PopoverGroup.displayName = "PopoverGroup";
92
+ var PopoverGroup_default = PopoverGroup;
93
+
94
+ //#endregion
95
+ export { PopoverGroup_default as default };
96
+ //# sourceMappingURL=PopoverGroup.mjs.map
@@ -0,0 +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;kBAEtB,oBAAC,qBAAmB;SACF,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"}
@@ -0,0 +1,55 @@
1
+ 'use client';
2
+
3
+ import { PopoverGroupHandleContext } from "./groupContext.mjs";
4
+ import { parseTrigger } from "./parseTrigger.mjs";
5
+ import { useMergedPopoverProps } from "./useMergedPopoverProps.mjs";
6
+ import { cloneElement, isValidElement, useContext, useMemo } from "react";
7
+ import { jsx } from "react/jsx-runtime";
8
+ import { mergeRefs } from "react-merge-refs";
9
+ import { mergeProps } from "@base-ui/react/merge-props";
10
+ import { Popover } from "@base-ui/react/popover";
11
+
12
+ //#region src/Popover/PopoverInGroup.tsx
13
+ const PopoverInGroup = ({ children, ref: refProp, ...props }) => {
14
+ const group = useContext(PopoverGroupHandleContext);
15
+ const item = useMergedPopoverProps(props);
16
+ const { openOnHover } = useMemo(() => parseTrigger(item.trigger ?? "hover"), [item.trigger]);
17
+ const resolvedOpenDelay = item.openDelay ?? (item.mouseEnterDelay ?? .1) * 1e3;
18
+ const resolvedCloseDelay = item.closeDelay ?? (item.mouseLeaveDelay ?? .1) * 1e3;
19
+ const disabled = Boolean(item.disabled);
20
+ if (!item.content) return children;
21
+ const triggerProps = {
22
+ closeDelay: resolvedCloseDelay,
23
+ delay: resolvedOpenDelay,
24
+ disabled,
25
+ openOnHover: openOnHover && !disabled,
26
+ payload: item
27
+ };
28
+ if (isValidElement(children)) return /* @__PURE__ */ jsx(Popover.Trigger, {
29
+ handle: group ?? void 0,
30
+ ...triggerProps,
31
+ render: (renderProps) => {
32
+ const { type, ref: triggerRef, ...restProps } = renderProps;
33
+ const resolvedProps = typeof children.type === "string" && children.type === "button" ? renderProps : restProps;
34
+ return cloneElement(children, {
35
+ ...mergeProps(children.props, resolvedProps),
36
+ ref: mergeRefs([
37
+ children.ref,
38
+ triggerRef,
39
+ refProp
40
+ ])
41
+ });
42
+ }
43
+ });
44
+ return /* @__PURE__ */ jsx(Popover.Trigger, {
45
+ handle: group ?? void 0,
46
+ ...triggerProps,
47
+ ref: refProp,
48
+ children
49
+ });
50
+ };
51
+ PopoverInGroup.displayName = "PopoverInGroup";
52
+
53
+ //#endregion
54
+ export { PopoverInGroup };
55
+ //# sourceMappingURL=PopoverInGroup.mjs.map
@@ -0,0 +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 { 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 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 ref: mergeRefs([(children as any).ref, triggerRef, refProp]),\n });\n }}\n />\n );\n }\n\n return (\n <BasePopover.Trigger handle={group ?? undefined} {...triggerProps} ref={refProp}>\n {children}\n </BasePopover.Trigger>\n );\n};\n\nPopoverInGroup.displayName = 'PopoverInGroup';\n"],"mappings":";;;;;;;;;;;;AAYA,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;AAED,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;AAEN,UAAO,aAAa,UAAiB;IACnC,GAFkB,WAAY,SAAiB,OAAO,cAAc;IAGpE,KAAK,UAAU;KAAE,SAAiB;KAAK;KAAY;KAAQ,CAAC;IAC7D,CAAC;;GAEJ;AAIN,QACE,oBAACA,QAAY;EAAQ,QAAQ,SAAS;EAAW,GAAI;EAAc,KAAK;EACrE;GACmB;;AAI1B,eAAe,cAAc"}
@@ -0,0 +1,45 @@
1
+ 'use client';
2
+
3
+ import { LOBE_THEME_APP_ID } from "../ThemeProvider/constants.mjs";
4
+ import { useEffect, useState } from "react";
5
+
6
+ //#region src/Popover/PopoverPortal.tsx
7
+ const PORTAL_ATTR = "data-lobe-ui-popover-portal";
8
+ const POPOVER_CONTAINER_ATTR = "data-lobe-ui-popover-container";
9
+ const containerMap = /* @__PURE__ */ new WeakMap();
10
+ const getOrCreateContainer = (root) => {
11
+ const resolvedRoot = (() => {
12
+ if (typeof document === "undefined") return root;
13
+ if (typeof ShadowRoot !== "undefined" && root instanceof ShadowRoot) return root;
14
+ if (!(root === document.body)) return root;
15
+ const themeApp = document.querySelector(`#${LOBE_THEME_APP_ID}`);
16
+ if (themeApp) return themeApp;
17
+ const popoverContainer = document.querySelector(`[${POPOVER_CONTAINER_ATTR}="true"]`);
18
+ if (popoverContainer) return popoverContainer;
19
+ return root;
20
+ })();
21
+ const cached = containerMap.get(resolvedRoot);
22
+ if (cached && cached.isConnected) return cached;
23
+ const el = document.createElement("div");
24
+ el.setAttribute(PORTAL_ATTR, "true");
25
+ resolvedRoot.append(el);
26
+ containerMap.set(resolvedRoot, el);
27
+ return el;
28
+ };
29
+ const resolveRoot = (root) => {
30
+ if (root) return root;
31
+ return document.body;
32
+ };
33
+ const usePopoverPortalContainer = (root) => {
34
+ const [container, setContainer] = useState(null);
35
+ useEffect(() => {
36
+ const resolved = resolveRoot(root);
37
+ if (!resolved) return;
38
+ setContainer(getOrCreateContainer(resolved));
39
+ }, [root]);
40
+ return container;
41
+ };
42
+
43
+ //#endregion
44
+ export { usePopoverPortalContainer };
45
+ //# sourceMappingURL=PopoverPortal.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PopoverPortal.mjs","names":[],"sources":["../../src/Popover/PopoverPortal.tsx"],"sourcesContent":["'use client';\n\nimport { useEffect, useState } from 'react';\n\nimport { LOBE_THEME_APP_ID } from '@/ThemeProvider';\n\nconst PORTAL_ATTR = 'data-lobe-ui-popover-portal';\nexport const POPOVER_CONTAINER_ATTR = 'data-lobe-ui-popover-container';\n\n// Reuse one portal container per root (document.body by default).\nconst containerMap = new WeakMap<object, HTMLElement>();\n\nconst getOrCreateContainer = (root: HTMLElement | ShadowRoot): HTMLElement => {\n const resolvedRoot = (() => {\n if (typeof document === 'undefined') return root;\n if (typeof ShadowRoot !== 'undefined' && root instanceof ShadowRoot) return root;\n\n const isBody = root === document.body;\n if (!isBody) return root;\n\n const themeApp = document.querySelector<HTMLElement>(`#${LOBE_THEME_APP_ID}`);\n if (themeApp) return themeApp;\n\n const popoverContainer = document.querySelector<HTMLElement>(\n `[${POPOVER_CONTAINER_ATTR}=\"true\"]`,\n );\n if (popoverContainer) return popoverContainer;\n\n return root;\n })();\n\n const cached = containerMap.get(resolvedRoot);\n if (cached && cached.isConnected) return cached;\n\n const el = document.createElement('div');\n el.setAttribute(PORTAL_ATTR, 'true');\n resolvedRoot.append(el);\n containerMap.set(resolvedRoot, el);\n return el;\n};\n\nconst resolveRoot = (root?: HTMLElement | ShadowRoot | null): HTMLElement | ShadowRoot | null => {\n if (root) return root;\n return document.body;\n};\n\nexport const usePopoverPortalContainer = (\n root?: HTMLElement | ShadowRoot | null,\n): HTMLElement | null => {\n const [container, setContainer] = useState<HTMLElement | null>(null);\n\n // Never mutate DOM / create portal container during render.\n // Create it after mount to avoid SSR/hydration side effects.\n useEffect(() => {\n const resolved = resolveRoot(root);\n if (!resolved) return;\n setContainer(getOrCreateContainer(resolved));\n }, [root]);\n\n return container;\n};\n"],"mappings":";;;;;;AAMA,MAAM,cAAc;AACpB,MAAa,yBAAyB;AAGtC,MAAM,+BAAe,IAAI,SAA8B;AAEvD,MAAM,wBAAwB,SAAgD;CAC5E,MAAM,sBAAsB;AAC1B,MAAI,OAAO,aAAa,YAAa,QAAO;AAC5C,MAAI,OAAO,eAAe,eAAe,gBAAgB,WAAY,QAAO;AAG5E,MAAI,EADW,SAAS,SAAS,MACpB,QAAO;EAEpB,MAAM,WAAW,SAAS,cAA2B,IAAI,oBAAoB;AAC7E,MAAI,SAAU,QAAO;EAErB,MAAM,mBAAmB,SAAS,cAChC,IAAI,uBAAuB,UAC5B;AACD,MAAI,iBAAkB,QAAO;AAE7B,SAAO;KACL;CAEJ,MAAM,SAAS,aAAa,IAAI,aAAa;AAC7C,KAAI,UAAU,OAAO,YAAa,QAAO;CAEzC,MAAM,KAAK,SAAS,cAAc,MAAM;AACxC,IAAG,aAAa,aAAa,OAAO;AACpC,cAAa,OAAO,GAAG;AACvB,cAAa,IAAI,cAAc,GAAG;AAClC,QAAO;;AAGT,MAAM,eAAe,SAA4E;AAC/F,KAAI,KAAM,QAAO;AACjB,QAAO,SAAS;;AAGlB,MAAa,6BACX,SACuB;CACvB,MAAM,CAAC,WAAW,gBAAgB,SAA6B,KAAK;AAIpE,iBAAgB;EACd,MAAM,WAAW,YAAY,KAAK;AAClC,MAAI,CAAC,SAAU;AACf,eAAa,qBAAqB,SAAS,CAAC;IAC3C,CAAC,KAAK,CAAC;AAEV,QAAO"}