@lobehub/ui 4.33.3 → 4.34.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 (596) hide show
  1. package/README.md +3 -3
  2. package/es/A/index.mjs.map +1 -1
  3. package/es/Accordion/Accordion.d.mts +2 -2
  4. package/es/Accordion/Accordion.mjs +3 -3
  5. package/es/Accordion/Accordion.mjs.map +1 -1
  6. package/es/Accordion/AccordionItem.d.mts +2 -2
  7. package/es/Accordion/AccordionItem.mjs +15 -15
  8. package/es/Accordion/AccordionItem.mjs.map +1 -1
  9. package/es/Accordion/context.mjs +2 -2
  10. package/es/Accordion/context.mjs.map +1 -1
  11. package/es/ActionIcon/ActionIcon.d.mts +2 -2
  12. package/es/ActionIcon/ActionIcon.mjs +2 -2
  13. package/es/ActionIcon/ActionIcon.mjs.map +1 -1
  14. package/es/ActionIcon/style.mjs.map +1 -1
  15. package/es/ActionIconGroup/ActionIconGroup.mjs +3 -3
  16. package/es/ActionIconGroup/ActionIconGroup.mjs.map +1 -1
  17. package/es/ActionIconGroup/style.mjs.map +1 -1
  18. package/es/Alert/Alert.d.mts +2 -2
  19. package/es/Alert/Alert.mjs +6 -6
  20. package/es/Alert/Alert.mjs.map +1 -1
  21. package/es/Alert/style.mjs.map +1 -1
  22. package/es/AutoComplete/Select.d.mts +2 -2
  23. package/es/AutoComplete/Select.mjs +1 -1
  24. package/es/AutoComplete/Select.mjs.map +1 -1
  25. package/es/AutoComplete/style.mjs.map +1 -1
  26. package/es/Avatar/Avatar.mjs +4 -4
  27. package/es/Avatar/Avatar.mjs.map +1 -1
  28. package/es/Avatar/AvatarGroup/index.d.mts +2 -2
  29. package/es/Avatar/AvatarGroup/index.mjs +5 -5
  30. package/es/Avatar/AvatarGroup/index.mjs.map +1 -1
  31. package/es/Avatar/index.mjs.map +1 -1
  32. package/es/Avatar/style.mjs.map +1 -1
  33. package/es/Avatar/utils.mjs.map +1 -1
  34. package/es/Block/style.mjs.map +1 -1
  35. package/es/Burger/Burger.d.mts +2 -2
  36. package/es/Burger/Burger.mjs +2 -2
  37. package/es/Burger/Burger.mjs.map +1 -1
  38. package/es/Burger/type.d.mts +1 -1
  39. package/es/Button/Button.mjs +7 -7
  40. package/es/Button/Button.mjs.map +1 -1
  41. package/es/Button/style.mjs.map +1 -1
  42. package/es/Checkbox/Checkbox.mjs +8 -8
  43. package/es/Checkbox/Checkbox.mjs.map +1 -1
  44. package/es/Checkbox/CheckboxGroup.mjs +4 -4
  45. package/es/Checkbox/CheckboxGroup.mjs.map +1 -1
  46. package/es/Checkbox/index.mjs.map +1 -1
  47. package/es/CodeDiff/CodeDiff.d.mts +2 -2
  48. package/es/CodeDiff/CodeDiff.mjs +3 -3
  49. package/es/CodeDiff/CodeDiff.mjs.map +1 -1
  50. package/es/CodeDiff/PatchDiff.d.mts +2 -2
  51. package/es/CodeDiff/PatchDiff.mjs +3 -3
  52. package/es/CodeDiff/PatchDiff.mjs.map +1 -1
  53. package/es/CodeDiff/style.mjs.map +1 -1
  54. package/es/CodeEditor/CodeEditor.d.mts +2 -2
  55. package/es/CodeEditor/CodeEditor.mjs +5 -5
  56. package/es/CodeEditor/CodeEditor.mjs.map +1 -1
  57. package/es/CodeEditor/style.mjs.map +1 -1
  58. package/es/Collapse/Collapse.d.mts +2 -2
  59. package/es/Collapse/Collapse.mjs +5 -5
  60. package/es/Collapse/Collapse.mjs.map +1 -1
  61. package/es/Collapse/style.mjs.map +1 -1
  62. package/es/ColorSwatches/ColorSwatches.mjs +11 -11
  63. package/es/ColorSwatches/ColorSwatches.mjs.map +1 -1
  64. package/es/ConfigProvider/index.d.mts +3 -3
  65. package/es/ConfigProvider/index.mjs.map +1 -1
  66. package/es/ContextMenu/ContextMenuHost.d.mts +3 -3
  67. package/es/ContextMenu/ContextMenuHost.mjs +10 -3
  68. package/es/ContextMenu/ContextMenuHost.mjs.map +1 -1
  69. package/es/ContextMenu/ContextMenuTrigger.mjs.map +1 -1
  70. package/es/ContextMenu/renderItems.d.mts +1 -1
  71. package/es/ContextMenu/renderItems.mjs +39 -14
  72. package/es/ContextMenu/renderItems.mjs.map +1 -1
  73. package/es/ContextMenu/store.d.mts +3 -1
  74. package/es/ContextMenu/store.mjs +1 -0
  75. package/es/ContextMenu/store.mjs.map +1 -1
  76. package/es/CopyButton/CopyButton.d.mts +2 -2
  77. package/es/DatePicker/DatePicker.d.mts +2 -2
  78. package/es/DatePicker/DatePicker.mjs +1 -1
  79. package/es/DatePicker/DatePicker.mjs.map +1 -1
  80. package/es/DatePicker/style.mjs.map +1 -1
  81. package/es/DraggablePanel/DraggablePanel.mjs +9 -9
  82. package/es/DraggablePanel/DraggablePanel.mjs.map +1 -1
  83. package/es/DraggablePanel/components/DraggablePanelBody.d.mts +2 -2
  84. package/es/DraggablePanel/components/DraggablePanelContainer.d.mts +2 -2
  85. package/es/DraggablePanel/components/DraggablePanelFooter.d.mts +2 -2
  86. package/es/DraggablePanel/components/DraggablePanelFooter.mjs +1 -1
  87. package/es/DraggablePanel/components/DraggablePanelFooter.mjs.map +1 -1
  88. package/es/DraggablePanel/components/DraggablePanelHeader.d.mts +2 -2
  89. package/es/DraggablePanel/components/DraggablePanelHeader.mjs +7 -7
  90. package/es/DraggablePanel/components/DraggablePanelHeader.mjs.map +1 -1
  91. package/es/DraggablePanel/index.mjs +1 -1
  92. package/es/DraggablePanel/index.mjs.map +1 -1
  93. package/es/DraggablePanel/style.mjs.map +1 -1
  94. package/es/DraggableSideNav/DraggableSideNav.d.mts +2 -2
  95. package/es/DraggableSideNav/DraggableSideNav.mjs +5 -5
  96. package/es/DraggableSideNav/DraggableSideNav.mjs.map +1 -1
  97. package/es/Drawer/Drawer.d.mts +2 -2
  98. package/es/Drawer/Drawer.mjs +5 -5
  99. package/es/Drawer/Drawer.mjs.map +1 -1
  100. package/es/Dropdown/Dropdown.d.mts +2 -2
  101. package/es/DropdownMenu/DropdownMenu.d.mts +2 -2
  102. package/es/DropdownMenu/DropdownMenu.mjs +7 -3
  103. package/es/DropdownMenu/DropdownMenu.mjs.map +1 -1
  104. package/es/DropdownMenu/atoms.d.mts +33 -17
  105. package/es/DropdownMenu/atoms.mjs +20 -6
  106. package/es/DropdownMenu/atoms.mjs.map +1 -1
  107. package/es/DropdownMenu/index.d.mts +2 -2
  108. package/es/DropdownMenu/index.mjs +2 -2
  109. package/es/DropdownMenu/renderItems.d.mts +1 -1
  110. package/es/DropdownMenu/renderItems.mjs +36 -14
  111. package/es/DropdownMenu/renderItems.mjs.map +1 -1
  112. package/es/DropdownMenu/type.d.mts +8 -1
  113. package/es/EditableText/ControlInput.mjs +29 -29
  114. package/es/EditableText/ControlInput.mjs.map +1 -1
  115. package/es/EditableText/EditableText.d.mts +2 -2
  116. package/es/EditableText/EditableText.mjs +16 -16
  117. package/es/EditableText/EditableText.mjs.map +1 -1
  118. package/es/EditorSlashMenu/EditorSlashMenu.mjs +2 -2
  119. package/es/EditorSlashMenu/EditorSlashMenu.mjs.map +1 -1
  120. package/es/EditorSlashMenu/MenuItemRenderer.mjs +1 -1
  121. package/es/EditorSlashMenu/MenuItemRenderer.mjs.map +1 -1
  122. package/es/EditorSlashMenu/atoms.d.mts +22 -13
  123. package/es/EditorSlashMenu/atoms.mjs +3 -4
  124. package/es/EditorSlashMenu/atoms.mjs.map +1 -1
  125. package/es/EmojiPicker/AvatarUploader.mjs +5 -5
  126. package/es/EmojiPicker/AvatarUploader.mjs.map +1 -1
  127. package/es/EmojiPicker/EmojiPicker.d.mts +2 -2
  128. package/es/EmojiPicker/EmojiPicker.mjs +23 -23
  129. package/es/EmojiPicker/EmojiPicker.mjs.map +1 -1
  130. package/es/Empty/Empty.mjs +2 -2
  131. package/es/Empty/Empty.mjs.map +1 -1
  132. package/es/FileTypeIcon/components/FileIcon.mjs.map +1 -1
  133. package/es/FileTypeIcon/components/FolderIcon.mjs.map +1 -1
  134. package/es/Flex/FlexBasic.d.mts +2 -2
  135. package/es/FluentEmoji/FluentEmoji.mjs +1 -1
  136. package/es/FluentEmoji/FluentEmoji.mjs.map +1 -1
  137. package/es/FontLoader/index.d.mts +2 -2
  138. package/es/Footer/Footer.d.mts +2 -2
  139. package/es/Footer/Footer.mjs +1 -1
  140. package/es/Footer/Footer.mjs.map +1 -1
  141. package/es/Form/Form.mjs +12 -12
  142. package/es/Form/Form.mjs.map +1 -1
  143. package/es/Form/components/FormGroup.d.mts +2 -2
  144. package/es/Form/components/FormGroup.mjs +5 -5
  145. package/es/Form/components/FormGroup.mjs.map +1 -1
  146. package/es/Form/components/FormItem.d.mts +2 -2
  147. package/es/Form/components/FormProvider.mjs.map +1 -1
  148. package/es/Form/components/FormSubmitFooter.d.mts +2 -2
  149. package/es/Form/components/FormSubmitFooter.mjs +5 -5
  150. package/es/Form/components/FormSubmitFooter.mjs.map +1 -1
  151. package/es/Form/components/FormTitle.mjs +1 -1
  152. package/es/Form/components/FormTitle.mjs.map +1 -1
  153. package/es/Form/components/merge.mjs.map +1 -1
  154. package/es/Form/index.mjs +1 -1
  155. package/es/Form/index.mjs.map +1 -1
  156. package/es/Form/style.mjs.map +1 -1
  157. package/es/Form/type.d.mts +1 -1
  158. package/es/FormModal/FormModal.d.mts +2 -2
  159. package/es/FormModal/FormModal.mjs +10 -10
  160. package/es/FormModal/FormModal.mjs.map +1 -1
  161. package/es/GroupAvatar/style.mjs.map +1 -1
  162. package/es/GroupAvatar/type.d.mts +1 -1
  163. package/es/GuideCard/GuideCard.d.mts +2 -2
  164. package/es/GuideCard/style.mjs.map +1 -1
  165. package/es/Header/Header.d.mts +2 -2
  166. package/es/Header/Header.mjs +5 -5
  167. package/es/Header/Header.mjs.map +1 -1
  168. package/es/Highlighter/FullFeatured.mjs +9 -9
  169. package/es/Highlighter/FullFeatured.mjs.map +1 -1
  170. package/es/Highlighter/Highlighter.d.mts +2 -2
  171. package/es/Highlighter/Highlighter.mjs +4 -4
  172. package/es/Highlighter/Highlighter.mjs.map +1 -1
  173. package/es/Highlighter/LangSelect.mjs +6 -6
  174. package/es/Highlighter/LangSelect.mjs.map +1 -1
  175. package/es/Highlighter/SyntaxHighlighter/StaticRenderer.mjs +2 -2
  176. package/es/Highlighter/SyntaxHighlighter/StaticRenderer.mjs.map +1 -1
  177. package/es/Highlighter/SyntaxHighlighter/index.d.mts +2 -2
  178. package/es/Highlighter/SyntaxHighlighter/style.mjs.map +1 -1
  179. package/es/Highlighter/style.mjs.map +1 -1
  180. package/es/Hotkey/Hotkey.d.mts +2 -2
  181. package/es/Hotkey/Hotkey.mjs +5 -5
  182. package/es/Hotkey/Hotkey.mjs.map +1 -1
  183. package/es/Hotkey/style.mjs.map +1 -1
  184. package/es/HotkeyInput/HotkeyInput.d.mts +2 -2
  185. package/es/HotkeyInput/HotkeyInput.mjs +10 -10
  186. package/es/HotkeyInput/HotkeyInput.mjs.map +1 -1
  187. package/es/HotkeyInput/style.mjs.map +1 -1
  188. package/es/Icon/Icon.d.mts +2 -2
  189. package/es/Icon/Icon.mjs.map +1 -1
  190. package/es/Icon/components/IconProvider.d.mts +3 -3
  191. package/es/Icon/components/IconProvider.mjs.map +1 -1
  192. package/es/Icon/style.mjs.map +1 -1
  193. package/es/Image/Image.mjs +3 -3
  194. package/es/Image/Image.mjs.map +1 -1
  195. package/es/Image/PreviewGroup.d.mts +2 -2
  196. package/es/Image/PreviewGroup.mjs.map +1 -1
  197. package/es/Image/components/Preview.mjs.map +1 -1
  198. package/es/Image/components/Toolbar.mjs +1 -1
  199. package/es/Image/components/Toolbar.mjs.map +1 -1
  200. package/es/Image/components/usePreviewGroup.mjs.map +1 -1
  201. package/es/Image/style.mjs.map +1 -1
  202. package/es/ImageSelect/ImageSelect.d.mts +2 -2
  203. package/es/ImageSelect/ImageSelect.mjs +7 -7
  204. package/es/ImageSelect/ImageSelect.mjs.map +1 -1
  205. package/es/Img/index.mjs.map +1 -1
  206. package/es/Input/Input.d.mts +2 -2
  207. package/es/Input/Input.mjs +2 -2
  208. package/es/Input/Input.mjs.map +1 -1
  209. package/es/Input/InputNumber.d.mts +2 -2
  210. package/es/Input/InputNumber.mjs +2 -2
  211. package/es/Input/InputNumber.mjs.map +1 -1
  212. package/es/Input/InputOPT.mjs +2 -2
  213. package/es/Input/InputOPT.mjs.map +1 -1
  214. package/es/Input/InputPassword.d.mts +2 -2
  215. package/es/Input/InputPassword.mjs +2 -2
  216. package/es/Input/InputPassword.mjs.map +1 -1
  217. package/es/Input/TextArea.d.mts +2 -2
  218. package/es/Input/TextArea.mjs +2 -2
  219. package/es/Input/TextArea.mjs.map +1 -1
  220. package/es/Input/style.mjs.map +1 -1
  221. package/es/Layout/Layout.mjs +1 -1
  222. package/es/Layout/Layout.mjs.map +1 -1
  223. package/es/Layout/components/LayoutFooter.d.mts +2 -2
  224. package/es/Layout/components/LayoutHeader.d.mts +2 -2
  225. package/es/Layout/components/LayoutMain.d.mts +2 -2
  226. package/es/Layout/components/LayoutSidebar.d.mts +2 -2
  227. package/es/Layout/components/LayoutSidebarInner.d.mts +2 -2
  228. package/es/Layout/components/LayoutToc.d.mts +2 -2
  229. package/es/Layout/index.mjs.map +1 -1
  230. package/es/List/List.mjs +6 -6
  231. package/es/List/List.mjs.map +1 -1
  232. package/es/List/ListItem/index.d.mts +2 -2
  233. package/es/List/ListItem/index.mjs +11 -11
  234. package/es/List/ListItem/index.mjs.map +1 -1
  235. package/es/LobeSelect/LobeSelect.d.mts +2 -2
  236. package/es/LobeSelect/LobeSelect.mjs +16 -16
  237. package/es/LobeSelect/LobeSelect.mjs.map +1 -1
  238. package/es/LobeSelect/atoms.d.mts +19 -19
  239. package/es/LobeSelect/atoms.mjs +1 -1
  240. package/es/LobeSelect/atoms.mjs.map +1 -1
  241. package/es/LobeSwitch/LobeSwitch.d.mts +2 -2
  242. package/es/LobeSwitch/LobeSwitch.mjs +2 -2
  243. package/es/LobeSwitch/LobeSwitch.mjs.map +1 -1
  244. package/es/LobeSwitch/atoms.d.mts +4 -4
  245. package/es/LobeSwitch/atoms.mjs +10 -10
  246. package/es/LobeSwitch/atoms.mjs.map +1 -1
  247. package/es/Markdown/Markdown.d.mts +2 -2
  248. package/es/Markdown/Markdown.mjs +3 -3
  249. package/es/Markdown/Markdown.mjs.map +1 -1
  250. package/es/Markdown/SyntaxMarkdown/StreamdownRender.mjs.map +1 -1
  251. package/es/Markdown/Typography.d.mts +2 -2
  252. package/es/Markdown/components/CodeBlock.mjs.map +1 -1
  253. package/es/Markdown/components/Footnotes.mjs +3 -3
  254. package/es/Markdown/components/Footnotes.mjs.map +1 -1
  255. package/es/Markdown/components/MarkdownProvider.mjs.map +1 -1
  256. package/es/Markdown/components/SearchResultCards/SearchResultCard.mjs +3 -3
  257. package/es/Markdown/components/SearchResultCards/SearchResultCard.mjs.map +1 -1
  258. package/es/Markdown/components/SearchResultCards/index.d.mts +2 -2
  259. package/es/Markdown/components/SearchResultCards/index.mjs +1 -1
  260. package/es/Markdown/components/SearchResultCards/index.mjs.map +1 -1
  261. package/es/Markdown/plugins/rehypeCustomFootnotes.mjs.map +1 -1
  262. package/es/Markdown/plugins/rehypeKatexDir.mjs.map +1 -1
  263. package/es/Markdown/plugins/rehypeStreamAnimated.mjs.map +1 -1
  264. package/es/Markdown/plugins/remarkColor.mjs +1 -1
  265. package/es/Markdown/plugins/remarkColor.mjs.map +1 -1
  266. package/es/Markdown/plugins/remarkCustomFootnotes.mjs.map +1 -1
  267. package/es/Markdown/plugins/remarkVideo.mjs +3 -3
  268. package/es/Markdown/plugins/remarkVideo.mjs.map +1 -1
  269. package/es/Markdown/style.mjs.map +1 -1
  270. package/es/MaskShadow/MaskShadow.d.mts +2 -2
  271. package/es/MaskShadow/style.mjs.map +1 -1
  272. package/es/Menu/Menu.d.mts +2 -2
  273. package/es/Menu/Menu.mjs.map +1 -1
  274. package/es/Menu/checkboxItem.d.mts +1 -0
  275. package/es/Menu/index.d.mts +2 -2
  276. package/es/Menu/renderUtils.d.mts +4 -1
  277. package/es/Menu/renderUtils.mjs.map +1 -1
  278. package/es/Menu/sharedStyle.d.mts +4 -0
  279. package/es/Menu/sharedStyle.mjs +24 -0
  280. package/es/Menu/sharedStyle.mjs.map +1 -1
  281. package/es/Menu/style.mjs.map +1 -1
  282. package/es/Menu/switchItem.d.mts +1 -0
  283. package/es/Menu/type.d.mts +3 -1
  284. package/es/Mermaid/FullFeatured.mjs +7 -7
  285. package/es/Mermaid/FullFeatured.mjs.map +1 -1
  286. package/es/Mermaid/Mermaid.d.mts +2 -2
  287. package/es/Mermaid/Mermaid.mjs +1 -1
  288. package/es/Mermaid/Mermaid.mjs.map +1 -1
  289. package/es/Mermaid/SyntaxMermaid/StaticMermaid.mjs +3 -3
  290. package/es/Mermaid/SyntaxMermaid/StaticMermaid.mjs.map +1 -1
  291. package/es/Mermaid/SyntaxMermaid/StreamMermaid.mjs +3 -3
  292. package/es/Mermaid/SyntaxMermaid/StreamMermaid.mjs.map +1 -1
  293. package/es/Mermaid/SyntaxMermaid/index.d.mts +2 -2
  294. package/es/Mermaid/SyntaxMermaid/style.mjs.map +1 -1
  295. package/es/Modal/Modal.d.mts +2 -2
  296. package/es/Modal/Modal.mjs +25 -25
  297. package/es/Modal/Modal.mjs.map +1 -1
  298. package/es/Modal/ModalProvider.d.mts +2 -2
  299. package/es/Modal/ModalStackItem.mjs +1 -1
  300. package/es/Modal/ModalStackItem.mjs.map +1 -1
  301. package/es/Modal/imperative.d.mts +2 -2
  302. package/es/Modal/imperative.mjs +5 -5
  303. package/es/Modal/imperative.mjs.map +1 -1
  304. package/es/MotionProvider/index.d.mts +2 -2
  305. package/es/MotionProvider/index.mjs.map +1 -1
  306. package/es/Popover/ArrowIcon.d.mts +2 -2
  307. package/es/Popover/Popover.mjs +2 -2
  308. package/es/Popover/Popover.mjs.map +1 -1
  309. package/es/Popover/PopoverGroup.mjs +2 -2
  310. package/es/Popover/PopoverGroup.mjs.map +1 -1
  311. package/es/Popover/PopoverInGroup.mjs +2 -2
  312. package/es/Popover/PopoverInGroup.mjs.map +1 -1
  313. package/es/Popover/PopoverStandalone.mjs +1 -1
  314. package/es/Popover/PopoverStandalone.mjs.map +1 -1
  315. package/es/Popover/atoms.d.mts +9 -9
  316. package/es/Popover/atoms.mjs +1 -1
  317. package/es/Popover/atoms.mjs.map +1 -1
  318. package/es/Popover/context.d.mts +2 -2
  319. package/es/Popover/context.mjs.map +1 -1
  320. package/es/Popover/groupContext.mjs.map +1 -1
  321. package/es/ScrollArea/atoms.d.mts +7 -7
  322. package/es/ScrollArea/type.d.mts +1 -1
  323. package/es/ScrollShadow/style.mjs.map +1 -1
  324. package/es/ScrollShadow/useScrollOverflow.mjs.map +1 -1
  325. package/es/SearchBar/SearchBar.d.mts +2 -2
  326. package/es/SearchBar/SearchBar.mjs +14 -14
  327. package/es/SearchBar/SearchBar.mjs.map +1 -1
  328. package/es/Segmented/Segmented.d.mts +2 -2
  329. package/es/Segmented/style.mjs.map +1 -1
  330. package/es/Select/Select.d.mts +2 -2
  331. package/es/Select/Select.mjs +2 -2
  332. package/es/Select/Select.mjs.map +1 -1
  333. package/es/Select/style.mjs.map +1 -1
  334. package/es/SideNav/SideNav.d.mts +2 -2
  335. package/es/Skeleton/Skeleton.mjs +1 -1
  336. package/es/Skeleton/Skeleton.mjs.map +1 -1
  337. package/es/Skeleton/SkeletonBlock.mjs.map +1 -1
  338. package/es/Skeleton/SkeletonTags.mjs +3 -3
  339. package/es/Skeleton/SkeletonTags.mjs.map +1 -1
  340. package/es/Skeleton/SkeletonTitle.mjs +1 -1
  341. package/es/Skeleton/SkeletonTitle.mjs.map +1 -1
  342. package/es/SliderWithInput/SliderWithInput.d.mts +2 -2
  343. package/es/SliderWithInput/SliderWithInput.mjs +3 -3
  344. package/es/SliderWithInput/SliderWithInput.mjs.map +1 -1
  345. package/es/Snippet/Snippet.mjs +1 -1
  346. package/es/Snippet/Snippet.mjs.map +1 -1
  347. package/es/Snippet/style.mjs.map +1 -1
  348. package/es/SortableList/SortableList.mjs +1 -1
  349. package/es/SortableList/SortableList.mjs.map +1 -1
  350. package/es/SortableList/components/DragHandle.d.mts +2 -2
  351. package/es/SortableList/components/DragHandle.mjs +3 -3
  352. package/es/SortableList/components/DragHandle.mjs.map +1 -1
  353. package/es/SortableList/components/SortableItem.d.mts +2 -2
  354. package/es/SortableList/components/SortableItem.mjs +1 -1
  355. package/es/SortableList/components/SortableItem.mjs.map +1 -1
  356. package/es/SortableList/components/SortableOverlay.mjs.map +1 -1
  357. package/es/SortableList/style.mjs.map +1 -1
  358. package/es/SortableList/type.d.mts +2 -2
  359. package/es/Tabs/style.mjs.map +1 -1
  360. package/es/Tag/Tag.mjs +2 -2
  361. package/es/Tag/Tag.mjs.map +1 -1
  362. package/es/Tag/styles.mjs.map +1 -1
  363. package/es/Text/Text.mjs +27 -14
  364. package/es/Text/Text.mjs.map +1 -1
  365. package/es/Text/type.d.mts +18 -1
  366. package/es/ThemeProvider/ConfigProvider.mjs.map +1 -1
  367. package/es/ThemeProvider/GlobalStyle/antdOverride.mjs.map +1 -1
  368. package/es/ThemeProvider/GlobalStyle/global.mjs.map +1 -1
  369. package/es/ThemeProvider/ThemeProvider.d.mts +2 -2
  370. package/es/ThemeProvider/ThemeProvider.mjs.map +1 -1
  371. package/es/ThemeSwitch/ThemeSwitch.mjs +4 -4
  372. package/es/ThemeSwitch/ThemeSwitch.mjs.map +1 -1
  373. package/es/Toast/Toast.mjs +3 -3
  374. package/es/Toast/Toast.mjs.map +1 -1
  375. package/es/Toast/imperative.d.mts +3 -3
  376. package/es/Toast/imperative.mjs +1 -1
  377. package/es/Toast/imperative.mjs.map +1 -1
  378. package/es/Toc/Toc.d.mts +2 -2
  379. package/es/Toc/Toc.mjs.map +1 -1
  380. package/es/Toc/TocMobile.mjs +6 -6
  381. package/es/Toc/TocMobile.mjs.map +1 -1
  382. package/es/Toc/utils.mjs.map +1 -1
  383. package/es/Tooltip/Tooltip.mjs +2 -2
  384. package/es/Tooltip/Tooltip.mjs.map +1 -1
  385. package/es/Tooltip/TooltipContent.mjs.map +1 -1
  386. package/es/Tooltip/TooltipGroup.mjs +3 -3
  387. package/es/Tooltip/TooltipGroup.mjs.map +1 -1
  388. package/es/Tooltip/TooltipInGroup.mjs +3 -3
  389. package/es/Tooltip/TooltipInGroup.mjs.map +1 -1
  390. package/es/Tooltip/TooltipStandalone.mjs +2 -2
  391. package/es/Tooltip/TooltipStandalone.mjs.map +1 -1
  392. package/es/Tooltip/groupContext.mjs.map +1 -1
  393. package/es/Tooltip/type.d.mts +1 -1
  394. package/es/Video/index.d.mts +2 -2
  395. package/es/Video/index.mjs +8 -8
  396. package/es/Video/index.mjs.map +1 -1
  397. package/es/Video/style.mjs.map +1 -1
  398. package/es/awesome/AuroraBackground/AuroraBackground.d.mts +2 -2
  399. package/es/awesome/BottomGradientButton/BottomGradientButton.d.mts +2 -2
  400. package/es/awesome/BottomGradientButton/BottomGradientButton.mjs +1 -1
  401. package/es/awesome/BottomGradientButton/BottomGradientButton.mjs.map +1 -1
  402. package/es/awesome/Features/FeatureItem.mjs +1 -1
  403. package/es/awesome/Features/FeatureItem.mjs.map +1 -1
  404. package/es/awesome/Features/Features.d.mts +2 -2
  405. package/es/awesome/Features/Features.mjs +4 -4
  406. package/es/awesome/Features/Features.mjs.map +1 -1
  407. package/es/awesome/Features/type.d.mts +1 -1
  408. package/es/awesome/Giscus/Giscus.d.mts +2 -2
  409. package/es/awesome/GradientButton/GradientButton.mjs +2 -2
  410. package/es/awesome/GradientButton/GradientButton.mjs.map +1 -1
  411. package/es/awesome/GridBackground/GridBackground.d.mts +2 -2
  412. package/es/awesome/GridBackground/GridShowcase.d.mts +2 -2
  413. package/es/awesome/GridBackground/GridShowcase.mjs +5 -5
  414. package/es/awesome/GridBackground/GridShowcase.mjs.map +1 -1
  415. package/es/awesome/GridBackground/components/Grid.mjs.map +1 -1
  416. package/es/awesome/Hero/Hero.d.mts +2 -2
  417. package/es/awesome/Hero/Hero.mjs +3 -3
  418. package/es/awesome/Hero/Hero.mjs.map +1 -1
  419. package/es/awesome/Hero/type.d.mts +1 -1
  420. package/es/awesome/Spline/ParentSize.mjs.map +1 -1
  421. package/es/awesome/Spline/Spine.mjs +2 -2
  422. package/es/awesome/Spline/Spine.mjs.map +1 -1
  423. package/es/awesome/Spotlight/Spotlight.d.mts +2 -2
  424. package/es/awesome/SpotlightCard/SpotlightCard.d.mts +2 -2
  425. package/es/brand/BrandLoading/index.mjs.map +1 -1
  426. package/es/brand/LobeChat/index.d.mts +2 -2
  427. package/es/brand/LobeChat/index.mjs +3 -3
  428. package/es/brand/LobeChat/index.mjs.map +1 -1
  429. package/es/brand/LobeChatText/index.mjs.map +1 -1
  430. package/es/brand/LobeHub/index.d.mts +2 -2
  431. package/es/brand/LobeHub/index.mjs +3 -3
  432. package/es/brand/LobeHub/index.mjs.map +1 -1
  433. package/es/brand/LobeHubText/index.mjs.map +1 -1
  434. package/es/brand/Logo3d/index.mjs.map +1 -1
  435. package/es/brand/LogoThree/Loading.mjs +2 -2
  436. package/es/brand/LogoThree/Loading.mjs.map +1 -1
  437. package/es/brand/LogoThree/LogoSpline.d.mts +2 -2
  438. package/es/brand/LogoThree/LogoSpline.mjs +1 -1
  439. package/es/brand/LogoThree/LogoSpline.mjs.map +1 -1
  440. package/es/brand/LogoThree/index.d.mts +2 -2
  441. package/es/brand/LogoThree/index.mjs +4 -4
  442. package/es/brand/LogoThree/index.mjs.map +1 -1
  443. package/es/brand/components/Divider.mjs.map +1 -1
  444. package/es/chat/BackBottom/BackBottom.d.mts +2 -2
  445. package/es/chat/BackBottom/BackBottom.mjs +2 -2
  446. package/es/chat/BackBottom/BackBottom.mjs.map +1 -1
  447. package/es/chat/ChatHeader/ChatHeader.mjs +6 -6
  448. package/es/chat/ChatHeader/ChatHeader.mjs.map +1 -1
  449. package/es/chat/ChatHeader/ChatHeaderTitle.mjs +4 -4
  450. package/es/chat/ChatHeader/ChatHeaderTitle.mjs.map +1 -1
  451. package/es/chat/ChatInputArea/ChatInputArea.mjs +3 -3
  452. package/es/chat/ChatInputArea/ChatInputArea.mjs.map +1 -1
  453. package/es/chat/ChatInputArea/components/ChatInputActionBar.mjs +3 -3
  454. package/es/chat/ChatInputArea/components/ChatInputActionBar.mjs.map +1 -1
  455. package/es/chat/ChatInputArea/components/ChatInputAreaInner.d.mts +2 -2
  456. package/es/chat/ChatInputArea/components/ChatInputAreaInner.mjs +3 -3
  457. package/es/chat/ChatInputArea/components/ChatInputAreaInner.mjs.map +1 -1
  458. package/es/chat/ChatInputArea/components/ChatSendButton.mjs +5 -5
  459. package/es/chat/ChatInputArea/components/ChatSendButton.mjs.map +1 -1
  460. package/es/chat/ChatItem/ChatItem.mjs +9 -9
  461. package/es/chat/ChatItem/ChatItem.mjs.map +1 -1
  462. package/es/chat/ChatItem/components/Actions.mjs.map +1 -1
  463. package/es/chat/ChatItem/components/Avatar.mjs +2 -2
  464. package/es/chat/ChatItem/components/Avatar.mjs.map +1 -1
  465. package/es/chat/ChatItem/components/ErrorContent.mjs +1 -1
  466. package/es/chat/ChatItem/components/ErrorContent.mjs.map +1 -1
  467. package/es/chat/ChatItem/components/Loading.mjs +2 -2
  468. package/es/chat/ChatItem/components/Loading.mjs.map +1 -1
  469. package/es/chat/ChatItem/components/MessageContent.mjs +4 -4
  470. package/es/chat/ChatItem/components/MessageContent.mjs.map +1 -1
  471. package/es/chat/ChatItem/components/Title.mjs.map +1 -1
  472. package/es/chat/ChatList/ChatList.d.mts +2 -2
  473. package/es/chat/ChatList/components/ChatListItem.mjs +14 -14
  474. package/es/chat/ChatList/components/ChatListItem.mjs.map +1 -1
  475. package/es/chat/ChatList/type.d.mts +1 -1
  476. package/es/chat/EditableMessage/EditableMessage.d.mts +2 -2
  477. package/es/chat/EditableMessage/EditableMessage.mjs +18 -18
  478. package/es/chat/EditableMessage/EditableMessage.mjs.map +1 -1
  479. package/es/chat/EditableMessageList/EditableMessageList.mjs +17 -17
  480. package/es/chat/EditableMessageList/EditableMessageList.mjs.map +1 -1
  481. package/es/chat/MessageInput/MessageInput.d.mts +2 -2
  482. package/es/chat/MessageInput/MessageInput.mjs +8 -8
  483. package/es/chat/MessageInput/MessageInput.mjs.map +1 -1
  484. package/es/chat/MessageModal/MessageModal.d.mts +2 -2
  485. package/es/chat/MessageModal/MessageModal.mjs +15 -15
  486. package/es/chat/MessageModal/MessageModal.mjs.map +1 -1
  487. package/es/chat/TokenTag/TokenTag.mjs +2 -2
  488. package/es/chat/TokenTag/TokenTag.mjs.map +1 -1
  489. package/es/chat/types/error.mjs.map +1 -1
  490. package/es/color/ColorScales/ScaleRow.mjs +3 -3
  491. package/es/color/ColorScales/ScaleRow.mjs.map +1 -1
  492. package/es/color/ColorScales/index.d.mts +2 -2
  493. package/es/color/ColorScales/index.mjs +4 -4
  494. package/es/color/ColorScales/index.mjs.map +1 -1
  495. package/es/color/CssVar/ScaleRow.mjs +4 -4
  496. package/es/color/CssVar/ScaleRow.mjs.map +1 -1
  497. package/es/color/CssVar/VarRow.mjs +2 -2
  498. package/es/color/CssVar/VarRow.mjs.map +1 -1
  499. package/es/color/CssVar/index.d.mts +2 -2
  500. package/es/color/CssVar/index.mjs +4 -4
  501. package/es/color/CssVar/index.mjs.map +1 -1
  502. package/es/color/colors/blue.mjs.map +1 -1
  503. package/es/color/colors/cyan.mjs.map +1 -1
  504. package/es/color/colors/geekblue.mjs.map +1 -1
  505. package/es/color/colors/gold.mjs.map +1 -1
  506. package/es/color/colors/gray.mjs.map +1 -1
  507. package/es/color/colors/green.mjs.map +1 -1
  508. package/es/color/colors/lime.mjs.map +1 -1
  509. package/es/color/colors/magenta.mjs.map +1 -1
  510. package/es/color/colors/orange.mjs.map +1 -1
  511. package/es/color/colors/primary.mjs.map +1 -1
  512. package/es/color/colors/purple.mjs.map +1 -1
  513. package/es/color/colors/red.mjs.map +1 -1
  514. package/es/color/colors/volcano.mjs.map +1 -1
  515. package/es/color/colors/yellow.mjs.map +1 -1
  516. package/es/color/neutrals/mauve.mjs.map +1 -1
  517. package/es/color/neutrals/olive.mjs.map +1 -1
  518. package/es/color/neutrals/sage.mjs.map +1 -1
  519. package/es/color/neutrals/sand.mjs.map +1 -1
  520. package/es/color/neutrals/slate.mjs.map +1 -1
  521. package/es/hooks/useFloatingLayer.mjs +2 -2
  522. package/es/hooks/useFloatingLayer.mjs.map +1 -1
  523. package/es/hooks/useHighlight.mjs.map +1 -1
  524. package/es/hooks/useMarkdown/latex.mjs +12 -12
  525. package/es/hooks/useMarkdown/latex.mjs.map +1 -1
  526. package/es/hooks/useMarkdown/useMarkdownComponents.mjs +1 -1
  527. package/es/hooks/useMarkdown/useMarkdownComponents.mjs.map +1 -1
  528. package/es/hooks/useMarkdown/utils.mjs +4 -4
  529. package/es/hooks/useMarkdown/utils.mjs.map +1 -1
  530. package/es/hooks/useNativeButton.mjs.map +1 -1
  531. package/es/hooks/useStreamHighlight.mjs.map +1 -1
  532. package/es/i18n/context.d.mts +3 -3
  533. package/es/i18n/context.mjs.map +1 -1
  534. package/es/icons/Authelia/components/Color.mjs.map +1 -1
  535. package/es/icons/lucideExtra/BotPromptIcon.d.mts +2 -2
  536. package/es/icons/lucideExtra/CreateBotIcon.d.mts +3 -3
  537. package/es/icons/lucideExtra/DiscordIcon.d.mts +2 -2
  538. package/es/icons/lucideExtra/GlobeOffIcon.d.mts +3 -3
  539. package/es/icons/lucideExtra/GroupBotIcon.d.mts +2 -2
  540. package/es/icons/lucideExtra/GroupBotSquareIcon.d.mts +3 -3
  541. package/es/icons/lucideExtra/LeftClickIcon.d.mts +3 -3
  542. package/es/icons/lucideExtra/LeftDoubleClickIcon.d.mts +3 -3
  543. package/es/icons/lucideExtra/McpIcon.d.mts +2 -2
  544. package/es/icons/lucideExtra/ProviderIcon.d.mts +3 -3
  545. package/es/icons/lucideExtra/RightClickIcon.d.mts +3 -3
  546. package/es/icons/lucideExtra/RightDoubleClickIcon.d.mts +3 -3
  547. package/es/icons/lucideExtra/ShapesUploadIcon.d.mts +3 -3
  548. package/es/icons/lucideExtra/TreeDownRightIcon.d.mts +3 -3
  549. package/es/icons/lucideExtra/TreeUpDownRightIcon.d.mts +3 -3
  550. package/es/mdx/Callout/index.mjs +1 -1
  551. package/es/mdx/Callout/index.mjs.map +1 -1
  552. package/es/mdx/Cards/Card.mjs +2 -2
  553. package/es/mdx/Cards/Card.mjs.map +1 -1
  554. package/es/mdx/FileTree/File.mjs +1 -1
  555. package/es/mdx/FileTree/File.mjs.map +1 -1
  556. package/es/mdx/FileTree/Folder.mjs +1 -1
  557. package/es/mdx/FileTree/Folder.mjs.map +1 -1
  558. package/es/mdx/FileTree/index.mjs.map +1 -1
  559. package/es/mdx/Mdx/index.d.mts +2 -2
  560. package/es/mdx/Mdx/index.mjs +3 -3
  561. package/es/mdx/Mdx/index.mjs.map +1 -1
  562. package/es/mdx/Steps/index.mjs.map +1 -1
  563. package/es/mdx/Tabs/Tab.mjs.map +1 -1
  564. package/es/mdx/Tabs/index.mjs +1 -1
  565. package/es/mdx/Tabs/index.mjs.map +1 -1
  566. package/es/mdx/mdxComponents/Citation/PopoverPanel.mjs +3 -3
  567. package/es/mdx/mdxComponents/Citation/PopoverPanel.mjs.map +1 -1
  568. package/es/mdx/mdxComponents/Citation/index.mjs.map +1 -1
  569. package/es/mdx/mdxComponents/Link.mjs +1 -1
  570. package/es/mdx/mdxComponents/Link.mjs.map +1 -1
  571. package/es/mobile/ChatHeader/ChatHeader.mjs +4 -4
  572. package/es/mobile/ChatHeader/ChatHeader.mjs.map +1 -1
  573. package/es/mobile/ChatHeader/ChatHeaderTitle.d.mts +2 -2
  574. package/es/mobile/ChatHeader/ChatHeaderTitle.mjs +5 -5
  575. package/es/mobile/ChatHeader/ChatHeaderTitle.mjs.map +1 -1
  576. package/es/mobile/ChatInputArea/ChatInputArea.mjs +9 -9
  577. package/es/mobile/ChatInputArea/ChatInputArea.mjs.map +1 -1
  578. package/es/mobile/ChatInputArea/components/ChatSendButton.d.mts +2 -2
  579. package/es/mobile/ChatInputArea/components/ChatSendButton.mjs +2 -2
  580. package/es/mobile/ChatInputArea/components/ChatSendButton.mjs.map +1 -1
  581. package/es/mobile/SafeArea/SafeArea.mjs.map +1 -1
  582. package/es/mobile/TabBar/TabBar.d.mts +2 -2
  583. package/es/mobile/TabBar/TabBar.mjs +3 -3
  584. package/es/mobile/TabBar/TabBar.mjs.map +1 -1
  585. package/es/storybook/StoryBook/index.d.mts +2 -2
  586. package/es/storybook/StoryBook/index.mjs.map +1 -1
  587. package/es/styles/theme/algorithms/darkAlgorithm.mjs.map +1 -1
  588. package/es/styles/theme/algorithms/lightAlgorithm.mjs.map +1 -1
  589. package/es/styles/theme/antdTheme.mjs.map +1 -1
  590. package/es/styles/theme/customStylish.mjs.map +1 -1
  591. package/es/styles/theme/customToken.mjs.map +1 -1
  592. package/es/styles/theme/generateColorPalette.mjs.map +1 -1
  593. package/es/styles/theme/token/base.mjs.map +1 -1
  594. package/es/styles/theme/token/dark.mjs.map +1 -1
  595. package/es/styles/theme/token/light.mjs.map +1 -1
  596. package/package.json +79 -1
@@ -15,8 +15,8 @@ import { ContextMenu } from "@base-ui/react/context-menu";
15
15
  const EmptyMenuItem = memo(() => {
16
16
  const { t } = useTranslation(common_default);
17
17
  return /* @__PURE__ */ jsx(ContextMenu.Item, {
18
- className: cx(styles.item, styles.empty),
19
18
  disabled: true,
19
+ className: cx(styles.item, styles.empty),
20
20
  children: /* @__PURE__ */ jsx("div", {
21
21
  className: styles.itemContent,
22
22
  children: /* @__PURE__ */ jsx("span", {
@@ -47,32 +47,44 @@ const ContextMenuSwitchItemInternal = ({ checked: checkedProp, children, closeOn
47
47
  children: [children, /* @__PURE__ */ jsx(Switch, {
48
48
  checked,
49
49
  disabled,
50
- onChange: handleCheckedChange,
51
- onClick: (_, e) => e.stopPropagation(),
52
50
  size: "small",
53
- style: { marginInlineStart: 16 }
51
+ style: { marginInlineStart: 16 },
52
+ onChange: handleCheckedChange,
53
+ onClick: (_, e) => e.stopPropagation()
54
54
  })]
55
55
  });
56
56
  };
57
57
  const renderItemContent = (item, options, iconNode) => {
58
58
  const label = getItemLabel(item);
59
+ const desc = "desc" in item ? item.desc : void 0;
59
60
  const extra = "extra" in item ? item.extra : void 0;
60
61
  const indicatorOnRight = options?.indicatorOnRight;
62
+ const alignStart = Boolean(desc) && options?.iconAlign === "start";
61
63
  const hasCustomIcon = iconNode !== void 0 && !indicatorOnRight;
62
64
  const hasIcon = hasCustomIcon ? Boolean(iconNode) : Boolean(item.icon);
63
65
  const shouldRenderIcon = hasCustomIcon ? Boolean(options?.reserveIconSpace || iconNode) : Boolean(hasIcon || options?.reserveIconSpace);
66
+ const labelNode = desc ? /* @__PURE__ */ jsxs("div", {
67
+ className: styles.labelGroup,
68
+ children: [/* @__PURE__ */ jsx("span", {
69
+ className: styles.label,
70
+ children: label
71
+ }), /* @__PURE__ */ jsx("span", {
72
+ className: styles.desc,
73
+ children: desc
74
+ })]
75
+ }) : /* @__PURE__ */ jsx("span", {
76
+ className: styles.label,
77
+ children: label
78
+ });
64
79
  return /* @__PURE__ */ jsxs("div", {
65
- className: styles.itemContent,
80
+ className: cx(styles.itemContent, alignStart && styles.itemContentAlignStart),
66
81
  children: [
67
82
  shouldRenderIcon ? /* @__PURE__ */ jsx("span", {
68
83
  "aria-hidden": !hasIcon,
69
- className: styles.icon,
84
+ className: cx(styles.icon, alignStart && styles.iconAlignStart),
70
85
  children: hasCustomIcon ? iconNode : hasIcon ? renderIcon(item.icon, "small") : null
71
86
  }) : null,
72
- /* @__PURE__ */ jsx("span", {
73
- className: styles.label,
74
- children: label
75
- }),
87
+ labelNode,
76
88
  extra ? /* @__PURE__ */ jsx("span", {
77
89
  className: styles.extra,
78
90
  children: extra
@@ -97,6 +109,7 @@ const invokeItemClick = (item, keyPath, event) => {
97
109
  item.onClick(info);
98
110
  };
99
111
  const renderContextMenuItems = (items, keyPath = [], options) => {
112
+ const iconAlign = options?.iconAlign;
100
113
  const iconSpaceMode = options?.iconSpaceMode ?? "global";
101
114
  const reserveIconSpace = options?.reserveIconSpace ?? hasAnyIcon(items, iconSpaceMode === "global");
102
115
  const indicatorOnRight = options?.indicatorOnRight ?? hasCheckboxAndIcon(items);
@@ -122,6 +135,7 @@ const renderContextMenuItems = (items, keyPath = [], options) => {
122
135
  label: labelText$1,
123
136
  onCheckedChange: (checked) => checkboxItem.onCheckedChange?.(checked),
124
137
  children: renderItemContent(checkboxItem, {
138
+ iconAlign,
125
139
  indicatorOnRight,
126
140
  reserveIconSpace
127
141
  }, indicator)
@@ -140,7 +154,10 @@ const renderContextMenuItems = (items, keyPath = [], options) => {
140
154
  disabled: switchItem.disabled,
141
155
  label: labelText$1,
142
156
  onCheckedChange: switchItem.onCheckedChange,
143
- children: renderItemContent(switchItem, { reserveIconSpace })
157
+ children: renderItemContent(switchItem, {
158
+ iconAlign,
159
+ reserveIconSpace
160
+ })
144
161
  }, itemKey);
145
162
  }
146
163
  if (item.type === "divider") return /* @__PURE__ */ jsx(ContextMenu.Separator, { className: styles.separator }, itemKey);
@@ -152,6 +169,7 @@ const renderContextMenuItems = (items, keyPath = [], options) => {
152
169
  className: styles.groupLabel,
153
170
  children: group.label
154
171
  }) : null, group.children ? renderContextMenuItems(group.children, nextKeyPath, {
172
+ iconAlign,
155
173
  iconSpaceMode,
156
174
  indicatorOnRight: groupIndicatorOnRight,
157
175
  reserveIconSpace: groupReserveIconSpace
@@ -167,6 +185,7 @@ const renderContextMenuItems = (items, keyPath = [], options) => {
167
185
  disabled: submenu.disabled,
168
186
  label: labelText$1,
169
187
  children: renderItemContent(submenu, {
188
+ iconAlign,
170
189
  reserveIconSpace,
171
190
  submenu: true
172
191
  })
@@ -174,11 +193,14 @@ const renderContextMenuItems = (items, keyPath = [], options) => {
174
193
  alignOffset: -4,
175
194
  className: styles.positioner,
176
195
  "data-submenu": "",
177
- onContextMenu: preventDefaultAndStopPropagation,
178
196
  sideOffset: -1,
197
+ onContextMenu: preventDefaultAndStopPropagation,
179
198
  children: /* @__PURE__ */ jsx(ContextMenu.Popup, {
180
199
  className: styles.popup,
181
- children: submenu.children && submenu.children.length > 0 ? renderContextMenuItems(submenu.children, nextKeyPath, { iconSpaceMode }) : /* @__PURE__ */ jsx(EmptyMenuItem, {})
200
+ children: submenu.children && submenu.children.length > 0 ? renderContextMenuItems(submenu.children, nextKeyPath, {
201
+ iconAlign,
202
+ iconSpaceMode
203
+ }) : /* @__PURE__ */ jsx(EmptyMenuItem, {})
182
204
  })
183
205
  }) })] }, itemKey);
184
206
  }
@@ -192,7 +214,10 @@ const renderContextMenuItems = (items, keyPath = [], options) => {
192
214
  disabled: menuItem.disabled,
193
215
  label: labelText,
194
216
  onClick: (event) => invokeItemClick(menuItem, nextKeyPath, event),
195
- children: renderItemContent(menuItem, { reserveIconSpace })
217
+ children: renderItemContent(menuItem, {
218
+ iconAlign,
219
+ reserveIconSpace
220
+ })
196
221
  }, itemKey);
197
222
  });
198
223
  };
@@ -1 +1 @@
1
- {"version":3,"file":"renderItems.mjs","names":["common","info: MenuInfo","label","labelText","isDanger","Icon"],"sources":["../../src/ContextMenu/renderItems.tsx"],"sourcesContent":["import { ContextMenu } from '@base-ui/react/context-menu';\nimport { Switch } from 'antd';\nimport { cx } from 'antd-style';\nimport { Check, ChevronRight } from 'lucide-react';\nimport type { MenuInfo } from 'rc-menu/es/interface';\nimport type {\n KeyboardEvent as ReactKeyboardEvent,\n MouseEvent as ReactMouseEvent,\n ReactNode,\n} from 'react';\nimport { memo, useCallback, useState } from 'react';\n\nimport Icon from '@/Icon';\nimport {\n type MenuDividerType,\n type MenuItemGroupType,\n type MenuItemType,\n type RenderItemContentOptions,\n type RenderOptions,\n type SubMenuType,\n getItemKey,\n getItemLabel,\n hasAnyIcon,\n hasCheckboxAndIcon,\n renderIcon,\n} from '@/Menu';\nimport common from '@/i18n/resources/en/common';\nimport { useTranslation } from '@/i18n/useTranslation';\nimport { preventDefaultAndStopPropagation } from '@/utils/dom';\n\nimport { styles } from './style';\nimport type { ContextMenuCheckboxItem, ContextMenuItem, ContextMenuSwitchItem } from './type';\n\nexport type { IconSpaceMode } from '@/Menu';\n\nconst EmptyMenuItem = memo(() => {\n const { t } = useTranslation(common);\n return (\n <ContextMenu.Item className={cx(styles.item, styles.empty)} disabled>\n <div className={styles.itemContent}>\n <span className={styles.label}>{t('common.empty')}</span>\n </div>\n </ContextMenu.Item>\n );\n});\n\nEmptyMenuItem.displayName = 'EmptyMenuItem';\n\ninterface ContextMenuSwitchItemInternalProps {\n checked?: boolean;\n children: ReactNode;\n closeOnClick?: boolean;\n danger?: boolean;\n defaultChecked?: boolean;\n disabled?: boolean;\n label?: string;\n onCheckedChange?: (checked: boolean) => void;\n}\n\nconst ContextMenuSwitchItemInternal = ({\n checked: checkedProp,\n children,\n closeOnClick = false,\n danger,\n defaultChecked,\n disabled,\n label,\n onCheckedChange,\n}: ContextMenuSwitchItemInternalProps) => {\n const [internalChecked, setInternalChecked] = useState(defaultChecked ?? false);\n const isControlled = checkedProp !== undefined;\n const checked = isControlled ? checkedProp : internalChecked;\n\n const handleCheckedChange = useCallback(\n (newChecked: boolean) => {\n if (!isControlled) {\n setInternalChecked(newChecked);\n }\n onCheckedChange?.(newChecked);\n },\n [isControlled, onCheckedChange],\n );\n\n return (\n <ContextMenu.Item\n className={cx(styles.item, danger && styles.danger)}\n closeOnClick={closeOnClick}\n disabled={disabled}\n label={label}\n onClick={(e) => {\n e.preventDefault();\n if (!disabled) {\n handleCheckedChange(!checked);\n }\n }}\n >\n {children}\n <Switch\n checked={checked}\n disabled={disabled}\n onChange={handleCheckedChange}\n onClick={(_, e) => e.stopPropagation()}\n size=\"small\"\n style={{ marginInlineStart: 16 }}\n />\n </ContextMenu.Item>\n );\n};\n\nconst renderItemContent = (\n item: MenuItemType | SubMenuType | ContextMenuCheckboxItem | ContextMenuSwitchItem,\n options?: RenderItemContentOptions,\n iconNode?: ReactNode,\n) => {\n const label = getItemLabel(item);\n const extra = 'extra' in item ? item.extra : undefined;\n const indicatorOnRight = options?.indicatorOnRight;\n const hasCustomIcon = iconNode !== undefined && !indicatorOnRight;\n const hasIcon = hasCustomIcon ? Boolean(iconNode) : Boolean(item.icon);\n const shouldRenderIcon = hasCustomIcon\n ? Boolean(options?.reserveIconSpace || iconNode)\n : Boolean(hasIcon || options?.reserveIconSpace);\n\n return (\n <div className={styles.itemContent}>\n {shouldRenderIcon ? (\n <span aria-hidden={!hasIcon} className={styles.icon}>\n {hasCustomIcon ? iconNode : hasIcon ? renderIcon(item.icon, 'small') : null}\n </span>\n ) : null}\n <span className={styles.label}>{label}</span>\n {extra ? <span className={styles.extra}>{extra}</span> : null}\n {indicatorOnRight && iconNode ? iconNode : null}\n {options?.submenu ? (\n <span className={styles.submenuArrow}>\n <ChevronRight size={16} />\n </span>\n ) : null}\n </div>\n );\n};\n\nconst invokeItemClick = (\n item: MenuItemType,\n keyPath: string[],\n event: ReactMouseEvent<HTMLElement> | ReactKeyboardEvent<HTMLElement>,\n) => {\n if (!item.onClick) return;\n const key = item.key ?? keyPath.at(-1) ?? '';\n const info: MenuInfo = {\n domEvent: event,\n item: event.currentTarget as MenuInfo['item'],\n key: String(key),\n keyPath,\n };\n item.onClick(info);\n};\n\nexport const renderContextMenuItems = (\n items: ContextMenuItem[],\n keyPath: string[] = [],\n options?: RenderOptions,\n): ReactNode[] => {\n const iconSpaceMode = options?.iconSpaceMode ?? 'global';\n const reserveIconSpace =\n options?.reserveIconSpace ?? hasAnyIcon(items, iconSpaceMode === 'global');\n const indicatorOnRight = options?.indicatorOnRight ?? hasCheckboxAndIcon(items);\n\n return items.map((item, index) => {\n if (!item) return null;\n\n const fallbackKey = `${keyPath.join('-') || 'root'}-${index}`;\n const itemKey = getItemKey(item, fallbackKey);\n const nextKeyPath = [...keyPath, String(itemKey)];\n\n if ((item as ContextMenuCheckboxItem).type === 'checkbox') {\n const checkboxItem = item as ContextMenuCheckboxItem;\n const label = getItemLabel(checkboxItem);\n const labelText = typeof label === 'string' ? label : undefined;\n const isDanger = Boolean(checkboxItem.danger);\n const indicator = (\n <ContextMenu.CheckboxItemIndicator>\n <Icon icon={Check} size={'small'} />\n </ContextMenu.CheckboxItemIndicator>\n );\n\n return (\n <ContextMenu.CheckboxItem\n checked={checkboxItem.checked}\n className={cx(styles.item, isDanger && styles.danger)}\n closeOnClick={checkboxItem.closeOnClick}\n defaultChecked={checkboxItem.defaultChecked}\n disabled={checkboxItem.disabled}\n key={itemKey}\n label={labelText}\n onCheckedChange={(checked) => checkboxItem.onCheckedChange?.(checked)}\n >\n {renderItemContent(checkboxItem, { indicatorOnRight, reserveIconSpace }, indicator)}\n </ContextMenu.CheckboxItem>\n );\n }\n\n if ((item as ContextMenuSwitchItem).type === 'switch') {\n const switchItem = item as ContextMenuSwitchItem;\n const label = getItemLabel(switchItem);\n const labelText = typeof label === 'string' ? label : undefined;\n const isDanger = Boolean(switchItem.danger);\n\n return (\n <ContextMenuSwitchItemInternal\n checked={switchItem.checked}\n closeOnClick={switchItem.closeOnClick}\n danger={isDanger}\n defaultChecked={switchItem.defaultChecked}\n disabled={switchItem.disabled}\n key={itemKey}\n label={labelText}\n onCheckedChange={switchItem.onCheckedChange}\n >\n {renderItemContent(switchItem, { reserveIconSpace })}\n </ContextMenuSwitchItemInternal>\n );\n }\n\n if ((item as MenuDividerType).type === 'divider') {\n return <ContextMenu.Separator className={styles.separator} key={itemKey} />;\n }\n\n if ((item as MenuItemGroupType).type === 'group') {\n const group = item as MenuItemGroupType;\n const groupReserveIconSpace =\n iconSpaceMode === 'group'\n ? group.children\n ? hasAnyIcon(group.children)\n : false\n : reserveIconSpace;\n const groupIndicatorOnRight = group.children ? hasCheckboxAndIcon(group.children) : false;\n return (\n <ContextMenu.Group key={itemKey}>\n {group.label ? (\n <ContextMenu.GroupLabel className={styles.groupLabel}>\n {group.label}\n </ContextMenu.GroupLabel>\n ) : null}\n {group.children\n ? renderContextMenuItems(group.children, nextKeyPath, {\n iconSpaceMode,\n indicatorOnRight: groupIndicatorOnRight,\n reserveIconSpace: groupReserveIconSpace,\n })\n : null}\n </ContextMenu.Group>\n );\n }\n\n if (\n (item as SubMenuType).type === 'submenu' ||\n ('children' in item && (item as SubMenuType).children)\n ) {\n const submenu = item as SubMenuType;\n const label = getItemLabel(submenu);\n const labelText = typeof label === 'string' ? label : undefined;\n const isDanger = 'danger' in submenu && Boolean(submenu.danger);\n\n return (\n <ContextMenu.SubmenuRoot key={itemKey}>\n <ContextMenu.SubmenuTrigger\n className={cx(styles.item, isDanger && styles.danger)}\n disabled={submenu.disabled}\n label={labelText}\n >\n {renderItemContent(submenu, {\n reserveIconSpace,\n submenu: true,\n })}\n </ContextMenu.SubmenuTrigger>\n <ContextMenu.Portal>\n <ContextMenu.Positioner\n alignOffset={-4}\n className={styles.positioner}\n data-submenu=\"\"\n onContextMenu={preventDefaultAndStopPropagation}\n sideOffset={-1}\n >\n <ContextMenu.Popup className={styles.popup}>\n {submenu.children && submenu.children.length > 0 ? (\n renderContextMenuItems(submenu.children, nextKeyPath, { iconSpaceMode })\n ) : (\n <EmptyMenuItem />\n )}\n </ContextMenu.Popup>\n </ContextMenu.Positioner>\n </ContextMenu.Portal>\n </ContextMenu.SubmenuRoot>\n );\n }\n\n const menuItem = item as MenuItemType;\n const label = getItemLabel(menuItem);\n const labelText = typeof label === 'string' ? label : undefined;\n const isDanger = 'danger' in menuItem && Boolean(menuItem.danger);\n\n return (\n <ContextMenu.Item\n className={cx(styles.item, isDanger && styles.danger)}\n closeOnClick={menuItem.closeOnClick}\n disabled={menuItem.disabled}\n key={itemKey}\n label={labelText}\n onClick={(event) => invokeItemClick(menuItem, nextKeyPath, event)}\n >\n {renderItemContent(menuItem, { reserveIconSpace })}\n </ContextMenu.Item>\n );\n });\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"renderItems.mjs","names":["common","info: MenuInfo","label","labelText","isDanger","Icon"],"sources":["../../src/ContextMenu/renderItems.tsx"],"sourcesContent":["import { ContextMenu } from '@base-ui/react/context-menu';\nimport { Switch } from 'antd';\nimport { cx } from 'antd-style';\nimport { Check, ChevronRight } from 'lucide-react';\nimport { type MenuInfo } from 'rc-menu/es/interface';\nimport {\n type KeyboardEvent as ReactKeyboardEvent,\n type MouseEvent as ReactMouseEvent,\n type ReactNode,\n} from 'react';\nimport { memo, useCallback, useState } from 'react';\n\nimport common from '@/i18n/resources/en/common';\nimport { useTranslation } from '@/i18n/useTranslation';\nimport Icon from '@/Icon';\nimport {\n getItemKey,\n getItemLabel,\n hasAnyIcon,\n hasCheckboxAndIcon,\n type MenuDividerType,\n type MenuItemGroupType,\n type MenuItemType,\n renderIcon,\n type RenderItemContentOptions,\n type RenderOptions,\n type SubMenuType,\n} from '@/Menu';\nimport { preventDefaultAndStopPropagation } from '@/utils/dom';\n\nimport { styles } from './style';\nimport {\n type ContextMenuCheckboxItem,\n type ContextMenuItem,\n type ContextMenuSwitchItem,\n} from './type';\n\nexport type { IconAlign, IconSpaceMode } from '@/Menu';\n\nconst EmptyMenuItem = memo(() => {\n const { t } = useTranslation(common);\n return (\n <ContextMenu.Item disabled className={cx(styles.item, styles.empty)}>\n <div className={styles.itemContent}>\n <span className={styles.label}>{t('common.empty')}</span>\n </div>\n </ContextMenu.Item>\n );\n});\n\nEmptyMenuItem.displayName = 'EmptyMenuItem';\n\ninterface ContextMenuSwitchItemInternalProps {\n checked?: boolean;\n children: ReactNode;\n closeOnClick?: boolean;\n danger?: boolean;\n defaultChecked?: boolean;\n disabled?: boolean;\n label?: string;\n onCheckedChange?: (checked: boolean) => void;\n}\n\nconst ContextMenuSwitchItemInternal = ({\n checked: checkedProp,\n children,\n closeOnClick = false,\n danger,\n defaultChecked,\n disabled,\n label,\n onCheckedChange,\n}: ContextMenuSwitchItemInternalProps) => {\n const [internalChecked, setInternalChecked] = useState(defaultChecked ?? false);\n const isControlled = checkedProp !== undefined;\n const checked = isControlled ? checkedProp : internalChecked;\n\n const handleCheckedChange = useCallback(\n (newChecked: boolean) => {\n if (!isControlled) {\n setInternalChecked(newChecked);\n }\n onCheckedChange?.(newChecked);\n },\n [isControlled, onCheckedChange],\n );\n\n return (\n <ContextMenu.Item\n className={cx(styles.item, danger && styles.danger)}\n closeOnClick={closeOnClick}\n disabled={disabled}\n label={label}\n onClick={(e) => {\n e.preventDefault();\n if (!disabled) {\n handleCheckedChange(!checked);\n }\n }}\n >\n {children}\n <Switch\n checked={checked}\n disabled={disabled}\n size=\"small\"\n style={{ marginInlineStart: 16 }}\n onChange={handleCheckedChange}\n onClick={(_, e) => e.stopPropagation()}\n />\n </ContextMenu.Item>\n );\n};\n\nconst renderItemContent = (\n item: MenuItemType | SubMenuType | ContextMenuCheckboxItem | ContextMenuSwitchItem,\n options?: RenderItemContentOptions,\n iconNode?: ReactNode,\n) => {\n const label = getItemLabel(item);\n const desc = 'desc' in item ? item.desc : undefined;\n const extra = 'extra' in item ? item.extra : undefined;\n const indicatorOnRight = options?.indicatorOnRight;\n const alignStart = Boolean(desc) && options?.iconAlign === 'start';\n const hasCustomIcon = iconNode !== undefined && !indicatorOnRight;\n const hasIcon = hasCustomIcon ? Boolean(iconNode) : Boolean(item.icon);\n const shouldRenderIcon = hasCustomIcon\n ? Boolean(options?.reserveIconSpace || iconNode)\n : Boolean(hasIcon || options?.reserveIconSpace);\n\n const labelNode = desc ? (\n <div className={styles.labelGroup}>\n <span className={styles.label}>{label}</span>\n <span className={styles.desc}>{desc}</span>\n </div>\n ) : (\n <span className={styles.label}>{label}</span>\n );\n\n return (\n <div className={cx(styles.itemContent, alignStart && styles.itemContentAlignStart)}>\n {shouldRenderIcon ? (\n <span\n aria-hidden={!hasIcon}\n className={cx(styles.icon, alignStart && styles.iconAlignStart)}\n >\n {hasCustomIcon ? iconNode : hasIcon ? renderIcon(item.icon, 'small') : null}\n </span>\n ) : null}\n {labelNode}\n {extra ? <span className={styles.extra}>{extra}</span> : null}\n {indicatorOnRight && iconNode ? iconNode : null}\n {options?.submenu ? (\n <span className={styles.submenuArrow}>\n <ChevronRight size={16} />\n </span>\n ) : null}\n </div>\n );\n};\n\nconst invokeItemClick = (\n item: MenuItemType,\n keyPath: string[],\n event: ReactMouseEvent<HTMLElement> | ReactKeyboardEvent<HTMLElement>,\n) => {\n if (!item.onClick) return;\n const key = item.key ?? keyPath.at(-1) ?? '';\n const info: MenuInfo = {\n domEvent: event,\n item: event.currentTarget as MenuInfo['item'],\n key: String(key),\n keyPath,\n };\n item.onClick(info);\n};\n\nexport const renderContextMenuItems = (\n items: ContextMenuItem[],\n keyPath: string[] = [],\n options?: RenderOptions,\n): ReactNode[] => {\n const iconAlign = options?.iconAlign;\n const iconSpaceMode = options?.iconSpaceMode ?? 'global';\n const reserveIconSpace =\n options?.reserveIconSpace ?? hasAnyIcon(items, iconSpaceMode === 'global');\n const indicatorOnRight = options?.indicatorOnRight ?? hasCheckboxAndIcon(items);\n\n return items.map((item, index) => {\n if (!item) return null;\n\n const fallbackKey = `${keyPath.join('-') || 'root'}-${index}`;\n const itemKey = getItemKey(item, fallbackKey);\n const nextKeyPath = [...keyPath, String(itemKey)];\n\n if ((item as ContextMenuCheckboxItem).type === 'checkbox') {\n const checkboxItem = item as ContextMenuCheckboxItem;\n const label = getItemLabel(checkboxItem);\n const labelText = typeof label === 'string' ? label : undefined;\n const isDanger = Boolean(checkboxItem.danger);\n const indicator = (\n <ContextMenu.CheckboxItemIndicator>\n <Icon icon={Check} size={'small'} />\n </ContextMenu.CheckboxItemIndicator>\n );\n\n return (\n <ContextMenu.CheckboxItem\n checked={checkboxItem.checked}\n className={cx(styles.item, isDanger && styles.danger)}\n closeOnClick={checkboxItem.closeOnClick}\n defaultChecked={checkboxItem.defaultChecked}\n disabled={checkboxItem.disabled}\n key={itemKey}\n label={labelText}\n onCheckedChange={(checked) => checkboxItem.onCheckedChange?.(checked)}\n >\n {renderItemContent(\n checkboxItem,\n { iconAlign, indicatorOnRight, reserveIconSpace },\n indicator,\n )}\n </ContextMenu.CheckboxItem>\n );\n }\n\n if ((item as ContextMenuSwitchItem).type === 'switch') {\n const switchItem = item as ContextMenuSwitchItem;\n const label = getItemLabel(switchItem);\n const labelText = typeof label === 'string' ? label : undefined;\n const isDanger = Boolean(switchItem.danger);\n\n return (\n <ContextMenuSwitchItemInternal\n checked={switchItem.checked}\n closeOnClick={switchItem.closeOnClick}\n danger={isDanger}\n defaultChecked={switchItem.defaultChecked}\n disabled={switchItem.disabled}\n key={itemKey}\n label={labelText}\n onCheckedChange={switchItem.onCheckedChange}\n >\n {renderItemContent(switchItem, { iconAlign, reserveIconSpace })}\n </ContextMenuSwitchItemInternal>\n );\n }\n\n if ((item as MenuDividerType).type === 'divider') {\n return <ContextMenu.Separator className={styles.separator} key={itemKey} />;\n }\n\n if ((item as MenuItemGroupType).type === 'group') {\n const group = item as MenuItemGroupType;\n const groupReserveIconSpace =\n iconSpaceMode === 'group'\n ? group.children\n ? hasAnyIcon(group.children)\n : false\n : reserveIconSpace;\n const groupIndicatorOnRight = group.children ? hasCheckboxAndIcon(group.children) : false;\n return (\n <ContextMenu.Group key={itemKey}>\n {group.label ? (\n <ContextMenu.GroupLabel className={styles.groupLabel}>\n {group.label}\n </ContextMenu.GroupLabel>\n ) : null}\n {group.children\n ? renderContextMenuItems(group.children, nextKeyPath, {\n iconAlign,\n iconSpaceMode,\n indicatorOnRight: groupIndicatorOnRight,\n reserveIconSpace: groupReserveIconSpace,\n })\n : null}\n </ContextMenu.Group>\n );\n }\n\n if (\n (item as SubMenuType).type === 'submenu' ||\n ('children' in item && (item as SubMenuType).children)\n ) {\n const submenu = item as SubMenuType;\n const label = getItemLabel(submenu);\n const labelText = typeof label === 'string' ? label : undefined;\n const isDanger = 'danger' in submenu && Boolean(submenu.danger);\n\n return (\n <ContextMenu.SubmenuRoot key={itemKey}>\n <ContextMenu.SubmenuTrigger\n className={cx(styles.item, isDanger && styles.danger)}\n disabled={submenu.disabled}\n label={labelText}\n >\n {renderItemContent(submenu, {\n iconAlign,\n reserveIconSpace,\n submenu: true,\n })}\n </ContextMenu.SubmenuTrigger>\n <ContextMenu.Portal>\n <ContextMenu.Positioner\n alignOffset={-4}\n className={styles.positioner}\n data-submenu=\"\"\n sideOffset={-1}\n onContextMenu={preventDefaultAndStopPropagation}\n >\n <ContextMenu.Popup className={styles.popup}>\n {submenu.children && submenu.children.length > 0 ? (\n renderContextMenuItems(submenu.children, nextKeyPath, {\n iconAlign,\n iconSpaceMode,\n })\n ) : (\n <EmptyMenuItem />\n )}\n </ContextMenu.Popup>\n </ContextMenu.Positioner>\n </ContextMenu.Portal>\n </ContextMenu.SubmenuRoot>\n );\n }\n\n const menuItem = item as MenuItemType;\n const label = getItemLabel(menuItem);\n const labelText = typeof label === 'string' ? label : undefined;\n const isDanger = 'danger' in menuItem && Boolean(menuItem.danger);\n\n return (\n <ContextMenu.Item\n className={cx(styles.item, isDanger && styles.danger)}\n closeOnClick={menuItem.closeOnClick}\n disabled={menuItem.disabled}\n key={itemKey}\n label={labelText}\n onClick={(event) => invokeItemClick(menuItem, nextKeyPath, event)}\n >\n {renderItemContent(menuItem, { iconAlign, reserveIconSpace })}\n </ContextMenu.Item>\n );\n });\n};\n"],"mappings":"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"}
@@ -1,4 +1,5 @@
1
- import { IconSpaceMode } from "../Menu/renderUtils.mjs";
1
+ import { IconAlign, IconSpaceMode } from "../Menu/renderUtils.mjs";
2
+ import "../Menu/index.mjs";
2
3
  import { ContextMenuItem } from "./type.mjs";
3
4
  import "./renderItems.mjs";
4
5
  import "@floating-ui/react";
@@ -6,6 +7,7 @@ import "@floating-ui/react";
6
7
  //#region src/ContextMenu/store.d.ts
7
8
 
8
9
  interface ShowContextMenuOptions {
10
+ iconAlign?: IconAlign;
9
11
  iconSpaceMode?: IconSpaceMode;
10
12
  }
11
13
  declare const showContextMenu: (items: ContextMenuItem[], options?: ShowContextMenuOptions) => void;
@@ -62,6 +62,7 @@ const showContextMenu = (items, options) => {
62
62
  x: lastPointer.x,
63
63
  y: lastPointer.y
64
64
  } : fallbackPoint),
65
+ iconAlign: options?.iconAlign,
65
66
  iconSpaceMode: options?.iconSpaceMode ?? "global",
66
67
  items,
67
68
  open: true,
@@ -1 +1 @@
1
- {"version":3,"file":"store.mjs","names":["emptyState: ContextMenuState","contextMenuState: ContextMenuState"],"sources":["../../src/ContextMenu/store.ts"],"sourcesContent":["import type { VirtualElement } from '@floating-ui/react';\n\nimport type { IconSpaceMode } from './renderItems';\nimport type { ContextMenuItem } from './type';\n\nexport type ContextMenuState = {\n anchor: VirtualElement | null;\n iconSpaceMode: IconSpaceMode;\n items: ContextMenuItem[];\n open: boolean;\n triggerId: string | null;\n};\n\nconst emptyState: ContextMenuState = {\n anchor: null,\n iconSpaceMode: 'global',\n items: [],\n open: false,\n triggerId: null,\n};\n\nlet contextMenuState: ContextMenuState = emptyState;\nconst listeners = new Set<() => void>();\nconst lastPointer = { ready: false, triggerId: null as string | null, x: 0, y: 0 };\n\nconst notify = () => {\n listeners.forEach((listener) => listener());\n};\n\nexport const subscribe = (listener: () => void) => {\n listeners.add(listener);\n return () => listeners.delete(listener);\n};\n\nexport const getSnapshot = () => contextMenuState;\nexport const getServerSnapshot = () => emptyState;\n\nexport const updateLastPointer = (event: MouseEvent | PointerEvent) => {\n lastPointer.x = event.clientX;\n lastPointer.y = event.clientY;\n lastPointer.ready = true;\n if (event.target instanceof Element) {\n const trigger = event.target.closest<HTMLElement>('[data-contextmenu-trigger]');\n lastPointer.triggerId = trigger?.dataset.contextmenuTrigger ?? null;\n } else {\n lastPointer.triggerId = null;\n }\n};\n\nconst createVirtualElement = (point: { x: number; y: number }): VirtualElement => ({\n contextElement: typeof document === 'undefined' ? undefined : document.body,\n getBoundingClientRect: () =>\n ({\n bottom: point.y,\n height: 0,\n left: point.x,\n right: point.x,\n toJSON: () => undefined,\n top: point.y,\n width: 0,\n x: point.x,\n y: point.y,\n }) as DOMRect,\n});\n\nexport const setContextMenuState = (next: Partial<ContextMenuState>) => {\n contextMenuState = { ...contextMenuState, ...next };\n notify();\n};\n\nexport interface ShowContextMenuOptions {\n iconSpaceMode?: IconSpaceMode;\n}\n\nexport const showContextMenu = (items: ContextMenuItem[], options?: ShowContextMenuOptions) => {\n if (typeof window === 'undefined') return;\n\n const fallbackPoint = { x: window.innerWidth / 2, y: window.innerHeight / 2 };\n const point = lastPointer.ready ? { x: lastPointer.x, y: lastPointer.y } : fallbackPoint;\n\n setContextMenuState({\n anchor: createVirtualElement(point),\n iconSpaceMode: options?.iconSpaceMode ?? 'global',\n items,\n open: true,\n triggerId: lastPointer.triggerId ?? null,\n });\n};\n\n/**\n * Update menu items while keeping current anchor/position.\n * Useful for interactive menu items (e.g. checkbox) to avoid re-positioning.\n */\nexport const updateContextMenuItems = (items: ContextMenuItem[]) => {\n if (typeof window === 'undefined') return;\n setContextMenuState({ items });\n};\n\nexport const closeContextMenu = () => {\n setContextMenuState({\n anchor: null,\n iconSpaceMode: 'global',\n items: [],\n open: false,\n triggerId: null,\n });\n};\n"],"mappings":";AAaA,MAAMA,aAA+B;CACnC,QAAQ;CACR,eAAe;CACf,OAAO,EAAE;CACT,MAAM;CACN,WAAW;CACZ;AAED,IAAIC,mBAAqC;AACzC,MAAM,4BAAY,IAAI,KAAiB;AACvC,MAAM,cAAc;CAAE,OAAO;CAAO,WAAW;CAAuB,GAAG;CAAG,GAAG;CAAG;AAElF,MAAM,eAAe;AACnB,WAAU,SAAS,aAAa,UAAU,CAAC;;AAG7C,MAAa,aAAa,aAAyB;AACjD,WAAU,IAAI,SAAS;AACvB,cAAa,UAAU,OAAO,SAAS;;AAGzC,MAAa,oBAAoB;AACjC,MAAa,0BAA0B;AAEvC,MAAa,qBAAqB,UAAqC;AACrE,aAAY,IAAI,MAAM;AACtB,aAAY,IAAI,MAAM;AACtB,aAAY,QAAQ;AACpB,KAAI,MAAM,kBAAkB,QAE1B,aAAY,YADI,MAAM,OAAO,QAAqB,6BAA6B,EAC9C,QAAQ,sBAAsB;KAE/D,aAAY,YAAY;;AAI5B,MAAM,wBAAwB,WAAqD;CACjF,gBAAgB,OAAO,aAAa,cAAc,SAAY,SAAS;CACvE,8BACG;EACC,QAAQ,MAAM;EACd,QAAQ;EACR,MAAM,MAAM;EACZ,OAAO,MAAM;EACb,cAAc;EACd,KAAK,MAAM;EACX,OAAO;EACP,GAAG,MAAM;EACT,GAAG,MAAM;EACV;CACJ;AAED,MAAa,uBAAuB,SAAoC;AACtE,oBAAmB;EAAE,GAAG;EAAkB,GAAG;EAAM;AACnD,SAAQ;;AAOV,MAAa,mBAAmB,OAA0B,YAAqC;AAC7F,KAAI,OAAO,WAAW,YAAa;CAEnC,MAAM,gBAAgB;EAAE,GAAG,OAAO,aAAa;EAAG,GAAG,OAAO,cAAc;EAAG;AAG7E,qBAAoB;EAClB,QAAQ,qBAHI,YAAY,QAAQ;GAAE,GAAG,YAAY;GAAG,GAAG,YAAY;GAAG,GAAG,cAGtC;EACnC,eAAe,SAAS,iBAAiB;EACzC;EACA,MAAM;EACN,WAAW,YAAY,aAAa;EACrC,CAAC;;;;;;AAOJ,MAAa,0BAA0B,UAA6B;AAClE,KAAI,OAAO,WAAW,YAAa;AACnC,qBAAoB,EAAE,OAAO,CAAC;;AAGhC,MAAa,yBAAyB;AACpC,qBAAoB;EAClB,QAAQ;EACR,eAAe;EACf,OAAO,EAAE;EACT,MAAM;EACN,WAAW;EACZ,CAAC"}
1
+ {"version":3,"file":"store.mjs","names":["emptyState: ContextMenuState","contextMenuState: ContextMenuState"],"sources":["../../src/ContextMenu/store.ts"],"sourcesContent":["import type { VirtualElement } from '@floating-ui/react';\n\nimport type { IconAlign } from '@/Menu';\n\nimport type { IconSpaceMode } from './renderItems';\nimport type { ContextMenuItem } from './type';\n\nexport type ContextMenuState = {\n anchor: VirtualElement | null;\n iconAlign?: IconAlign;\n iconSpaceMode: IconSpaceMode;\n items: ContextMenuItem[];\n open: boolean;\n triggerId: string | null;\n};\n\nconst emptyState: ContextMenuState = {\n anchor: null,\n iconSpaceMode: 'global',\n items: [],\n open: false,\n triggerId: null,\n};\n\nlet contextMenuState: ContextMenuState = emptyState;\nconst listeners = new Set<() => void>();\nconst lastPointer = { ready: false, triggerId: null as string | null, x: 0, y: 0 };\n\nconst notify = () => {\n listeners.forEach((listener) => listener());\n};\n\nexport const subscribe = (listener: () => void) => {\n listeners.add(listener);\n return () => listeners.delete(listener);\n};\n\nexport const getSnapshot = () => contextMenuState;\nexport const getServerSnapshot = () => emptyState;\n\nexport const updateLastPointer = (event: MouseEvent | PointerEvent) => {\n lastPointer.x = event.clientX;\n lastPointer.y = event.clientY;\n lastPointer.ready = true;\n if (event.target instanceof Element) {\n const trigger = event.target.closest<HTMLElement>('[data-contextmenu-trigger]');\n lastPointer.triggerId = trigger?.dataset.contextmenuTrigger ?? null;\n } else {\n lastPointer.triggerId = null;\n }\n};\n\nconst createVirtualElement = (point: { x: number; y: number }): VirtualElement => ({\n contextElement: typeof document === 'undefined' ? undefined : document.body,\n getBoundingClientRect: () =>\n ({\n bottom: point.y,\n height: 0,\n left: point.x,\n right: point.x,\n toJSON: () => undefined,\n top: point.y,\n width: 0,\n x: point.x,\n y: point.y,\n }) as DOMRect,\n});\n\nexport const setContextMenuState = (next: Partial<ContextMenuState>) => {\n contextMenuState = { ...contextMenuState, ...next };\n notify();\n};\n\nexport interface ShowContextMenuOptions {\n iconAlign?: IconAlign;\n iconSpaceMode?: IconSpaceMode;\n}\n\nexport const showContextMenu = (items: ContextMenuItem[], options?: ShowContextMenuOptions) => {\n if (typeof window === 'undefined') return;\n\n const fallbackPoint = { x: window.innerWidth / 2, y: window.innerHeight / 2 };\n const point = lastPointer.ready ? { x: lastPointer.x, y: lastPointer.y } : fallbackPoint;\n\n setContextMenuState({\n anchor: createVirtualElement(point),\n iconAlign: options?.iconAlign,\n iconSpaceMode: options?.iconSpaceMode ?? 'global',\n items,\n open: true,\n triggerId: lastPointer.triggerId ?? null,\n });\n};\n\n/**\n * Update menu items while keeping current anchor/position.\n * Useful for interactive menu items (e.g. checkbox) to avoid re-positioning.\n */\nexport const updateContextMenuItems = (items: ContextMenuItem[]) => {\n if (typeof window === 'undefined') return;\n setContextMenuState({ items });\n};\n\nexport const closeContextMenu = () => {\n setContextMenuState({\n anchor: null,\n iconSpaceMode: 'global',\n items: [],\n open: false,\n triggerId: null,\n });\n};\n"],"mappings":";AAgBA,MAAMA,aAA+B;CACnC,QAAQ;CACR,eAAe;CACf,OAAO,EAAE;CACT,MAAM;CACN,WAAW;CACZ;AAED,IAAIC,mBAAqC;AACzC,MAAM,4BAAY,IAAI,KAAiB;AACvC,MAAM,cAAc;CAAE,OAAO;CAAO,WAAW;CAAuB,GAAG;CAAG,GAAG;CAAG;AAElF,MAAM,eAAe;AACnB,WAAU,SAAS,aAAa,UAAU,CAAC;;AAG7C,MAAa,aAAa,aAAyB;AACjD,WAAU,IAAI,SAAS;AACvB,cAAa,UAAU,OAAO,SAAS;;AAGzC,MAAa,oBAAoB;AACjC,MAAa,0BAA0B;AAEvC,MAAa,qBAAqB,UAAqC;AACrE,aAAY,IAAI,MAAM;AACtB,aAAY,IAAI,MAAM;AACtB,aAAY,QAAQ;AACpB,KAAI,MAAM,kBAAkB,QAE1B,aAAY,YADI,MAAM,OAAO,QAAqB,6BAA6B,EAC9C,QAAQ,sBAAsB;KAE/D,aAAY,YAAY;;AAI5B,MAAM,wBAAwB,WAAqD;CACjF,gBAAgB,OAAO,aAAa,cAAc,SAAY,SAAS;CACvE,8BACG;EACC,QAAQ,MAAM;EACd,QAAQ;EACR,MAAM,MAAM;EACZ,OAAO,MAAM;EACb,cAAc;EACd,KAAK,MAAM;EACX,OAAO;EACP,GAAG,MAAM;EACT,GAAG,MAAM;EACV;CACJ;AAED,MAAa,uBAAuB,SAAoC;AACtE,oBAAmB;EAAE,GAAG;EAAkB,GAAG;EAAM;AACnD,SAAQ;;AAQV,MAAa,mBAAmB,OAA0B,YAAqC;AAC7F,KAAI,OAAO,WAAW,YAAa;CAEnC,MAAM,gBAAgB;EAAE,GAAG,OAAO,aAAa;EAAG,GAAG,OAAO,cAAc;EAAG;AAG7E,qBAAoB;EAClB,QAAQ,qBAHI,YAAY,QAAQ;GAAE,GAAG,YAAY;GAAG,GAAG,YAAY;GAAG,GAAG,cAGtC;EACnC,WAAW,SAAS;EACpB,eAAe,SAAS,iBAAiB;EACzC;EACA,MAAM;EACN,WAAW,YAAY,aAAa;EACrC,CAAC;;;;;;AAOJ,MAAa,0BAA0B,UAA6B;AAClE,KAAI,OAAO,WAAW,YAAa;AACnC,qBAAoB,EAAE,OAAO,CAAC;;AAGhC,MAAa,yBAAyB;AACpC,qBAAoB;EAClB,QAAQ;EACR,eAAe;EACf,OAAO,EAAE;EACT,MAAM;EACN,WAAW;EACZ,CAAC"}
@@ -1,8 +1,8 @@
1
1
  import { CopyButtonProps } from "./type.mjs";
2
- import * as react75 from "react";
2
+ import * as react80 from "react";
3
3
 
4
4
  //#region src/CopyButton/CopyButton.d.ts
5
- declare const CopyButton: react75.NamedExoticComponent<CopyButtonProps>;
5
+ declare const CopyButton: react80.NamedExoticComponent<CopyButtonProps>;
6
6
  //#endregion
7
7
  export { CopyButton };
8
8
  //# sourceMappingURL=CopyButton.d.mts.map
@@ -1,8 +1,8 @@
1
1
  import { DatePickerProps } from "./type.mjs";
2
- import * as react72 from "react";
2
+ import * as react24 from "react";
3
3
 
4
4
  //#region src/DatePicker/DatePicker.d.ts
5
- declare const DatePicker: react72.NamedExoticComponent<DatePickerProps>;
5
+ declare const DatePicker: react24.NamedExoticComponent<DatePickerProps>;
6
6
  //#endregion
7
7
  export { DatePicker };
8
8
  //# sourceMappingURL=DatePicker.d.mts.map
@@ -10,11 +10,11 @@ import { cx, useThemeMode } from "antd-style";
10
10
  const DatePicker$1 = memo(({ variant, shadow, className, ...rest }) => {
11
11
  const { isDarkMode } = useThemeMode();
12
12
  return /* @__PURE__ */ jsx(DatePicker, {
13
+ variant: variant || (isDarkMode ? "filled" : "outlined"),
13
14
  className: cx(variants({
14
15
  shadow,
15
16
  variant: variant || (isDarkMode ? "filled" : "outlined")
16
17
  }), className),
17
- variant: variant || (isDarkMode ? "filled" : "outlined"),
18
18
  ...rest
19
19
  });
20
20
  });
@@ -1 +1 @@
1
- {"version":3,"file":"DatePicker.mjs","names":["DatePicker","AntDatePicker"],"sources":["../../src/DatePicker/DatePicker.tsx"],"sourcesContent":["'use client';\n\nimport { DatePicker as AntDatePicker } from 'antd';\nimport { cx, useThemeMode } from 'antd-style';\nimport { memo } from 'react';\n\nimport { variants } from './style';\nimport { DatePickerProps } from './type';\n\nconst DatePicker = memo<DatePickerProps>(({ variant, shadow, className, ...rest }) => {\n const { isDarkMode } = useThemeMode();\n\n return (\n <AntDatePicker\n className={cx(\n variants({ shadow, variant: variant || (isDarkMode ? 'filled' : 'outlined') }),\n className,\n )}\n variant={variant || (isDarkMode ? 'filled' : 'outlined')}\n {...rest}\n />\n );\n});\n\nDatePicker.displayName = 'DatePicker';\n\nexport default DatePicker;\n"],"mappings":";;;;;;;;;AASA,MAAMA,eAAa,MAAuB,EAAE,SAAS,QAAQ,WAAW,GAAG,WAAW;CACpF,MAAM,EAAE,eAAe,cAAc;AAErC,QACE,oBAACC;EACC,WAAW,GACT,SAAS;GAAE;GAAQ,SAAS,YAAY,aAAa,WAAW;GAAa,CAAC,EAC9E,UACD;EACD,SAAS,YAAY,aAAa,WAAW;EAC7C,GAAI;GACJ;EAEJ;AAEF,aAAW,cAAc;AAEzB,yBAAeD"}
1
+ {"version":3,"file":"DatePicker.mjs","names":["DatePicker","AntDatePicker"],"sources":["../../src/DatePicker/DatePicker.tsx"],"sourcesContent":["'use client';\n\nimport { DatePicker as AntDatePicker } from 'antd';\nimport { cx, useThemeMode } from 'antd-style';\nimport { memo } from 'react';\n\nimport { variants } from './style';\nimport type { DatePickerProps } from './type';\n\nconst DatePicker = memo<DatePickerProps>(({ variant, shadow, className, ...rest }) => {\n const { isDarkMode } = useThemeMode();\n\n return (\n <AntDatePicker\n variant={variant || (isDarkMode ? 'filled' : 'outlined')}\n className={cx(\n variants({ shadow, variant: variant || (isDarkMode ? 'filled' : 'outlined') }),\n className,\n )}\n {...rest}\n />\n );\n});\n\nDatePicker.displayName = 'DatePicker';\n\nexport default DatePicker;\n"],"mappings":";;;;;;;;;AASA,MAAMA,eAAa,MAAuB,EAAE,SAAS,QAAQ,WAAW,GAAG,WAAW;CACpF,MAAM,EAAE,eAAe,cAAc;AAErC,QACE,oBAACC;EACC,SAAS,YAAY,aAAa,WAAW;EAC7C,WAAW,GACT,SAAS;GAAE;GAAQ,SAAS,YAAY,aAAa,WAAW;GAAa,CAAC,EAC9E,UACD;EACD,GAAI;GACJ;EAEJ;AAEF,aAAW,cAAc;AAEzB,yBAAeD"}
@@ -1 +1 @@
1
- {"version":3,"file":"style.mjs","names":["lobeStaticStylish"],"sources":["../../src/DatePicker/style.ts"],"sourcesContent":["import { createStaticStyles } from 'antd-style';\nimport { cva } from 'class-variance-authority';\n\nimport { lobeStaticStylish } from '@/styles';\n\nexport const styles = createStaticStyles(({ css }) => {\n return {\n borderless: lobeStaticStylish.variantBorderless,\n filled: lobeStaticStylish.variantFilled,\n outlined: lobeStaticStylish.variantOutlined,\n root: css``,\n shadow: lobeStaticStylish.shadow,\n };\n});\n\nexport const variants = cva(styles.root, {\n defaultVariants: {\n shadow: false,\n },\n /* eslint-disable sort-keys-fix/sort-keys-fix */\n variants: {\n variant: {\n filled: styles.filled,\n outlined: styles.outlined,\n borderless: styles.borderless,\n underlined: null,\n },\n shadow: {\n false: null,\n true: styles.shadow,\n },\n },\n /* eslint-enable sort-keys-fix/sort-keys-fix */\n});\n"],"mappings":";;;;;AAKA,MAAa,SAAS,oBAAoB,EAAE,iBAAU;AACpD,QAAO;EACL,YAAYA,cAAkB;EAC9B,QAAQA,cAAkB;EAC1B,UAAUA,cAAkB;EAC5B,MAAM,KAAG;EACT,QAAQA,cAAkB;EAC3B;EACD;AAEF,MAAa,WAAW,IAAI,OAAO,MAAM;CACvC,iBAAiB,EACf,QAAQ,OACT;CAED,UAAU;EACR,SAAS;GACP,QAAQ,OAAO;GACf,UAAU,OAAO;GACjB,YAAY,OAAO;GACnB,YAAY;GACb;EACD,QAAQ;GACN,OAAO;GACP,MAAM,OAAO;GACd;EACF;CAEF,CAAC"}
1
+ {"version":3,"file":"style.mjs","names":["lobeStaticStylish"],"sources":["../../src/DatePicker/style.ts"],"sourcesContent":["import { createStaticStyles } from 'antd-style';\nimport { cva } from 'class-variance-authority';\n\nimport { lobeStaticStylish } from '@/styles';\n\nexport const styles = createStaticStyles(({ css }) => {\n return {\n borderless: lobeStaticStylish.variantBorderless,\n filled: lobeStaticStylish.variantFilled,\n outlined: lobeStaticStylish.variantOutlined,\n root: css``,\n shadow: lobeStaticStylish.shadow,\n };\n});\n\nexport const variants = cva(styles.root, {\n defaultVariants: {\n shadow: false,\n },\n\n variants: {\n variant: {\n filled: styles.filled,\n outlined: styles.outlined,\n borderless: styles.borderless,\n underlined: null,\n },\n shadow: {\n false: null,\n true: styles.shadow,\n },\n },\n});\n"],"mappings":";;;;;AAKA,MAAa,SAAS,oBAAoB,EAAE,iBAAU;AACpD,QAAO;EACL,YAAYA,cAAkB;EAC9B,QAAQA,cAAkB;EAC1B,UAAUA,cAAkB;EAC5B,MAAM,KAAG;EACT,QAAQA,cAAkB;EAC3B;EACD;AAEF,MAAa,WAAW,IAAI,OAAO,MAAM;CACvC,iBAAiB,EACf,QAAQ,OACT;CAED,UAAU;EACR,SAAS;GACP,QAAQ,OAAO;GACf,UAAU,OAAO;GACjB,YAAY,OAAO;GACnB,YAAY;GACb;EACD,QAAQ;GACN,OAAO;GACP,MAAM,OAAO;GACd;EACF;CACF,CAAC"}
@@ -8,7 +8,7 @@ import { memo, use, useCallback, useEffect, useMemo, useReducer, useRef, useTran
8
8
  import { jsx, jsxs } from "react/jsx-runtime";
9
9
  import { ConfigProvider } from "antd";
10
10
  import { cx } from "antd-style";
11
- import useControlledState from "use-merge-value";
11
+ import useMergeState from "use-merge-value";
12
12
  import { ChevronDown, ChevronLeft, ChevronRight, ChevronUp } from "lucide-react";
13
13
  import { useHover } from "ahooks";
14
14
  import isEqual from "fast-deep-equal";
@@ -57,7 +57,7 @@ const DraggablePanel = memo(({ headerHeight = DEFAULT_HEADER_HEIGHT, fullscreen,
57
57
  "--draggable-panel-bg": backgroundColor || "",
58
58
  "--draggable-panel-header-height": `${headerHeight}px`
59
59
  }), [backgroundColor, headerHeight]);
60
- const [isExpand, setIsExpand] = useControlledState(defaultExpand, {
60
+ const [isExpand, setIsExpand] = useMergeState(defaultExpand, {
61
61
  onChange: onExpandChange,
62
62
  value: expand
63
63
  });
@@ -165,8 +165,8 @@ const DraggablePanel = memo(({ headerHeight = DEFAULT_HEADER_HEIGHT, fullscreen,
165
165
  style: { opacity: isExpand ? pin ? void 0 : 0 : showHandleWhenCollapsed ? 1 : 0 },
166
166
  children: /* @__PURE__ */ jsx(Center_default, {
167
167
  className: classNames?.handle,
168
- onClick: toggleExpand,
169
168
  style: customStyles?.handle,
169
+ onClick: toggleExpand,
170
170
  children: /* @__PURE__ */ jsx(Icon_default, {
171
171
  className: styles.handlerIcon,
172
172
  icon: Arrow,
@@ -214,15 +214,15 @@ const DraggablePanel = memo(({ headerHeight = DEFAULT_HEADER_HEIGHT, fullscreen,
214
214
  className: cx(styles.panel, classNames?.content),
215
215
  enable: canResizing ? resizing : void 0,
216
216
  handleClasses: canResizing ? { [reversePlacement(internalPlacement)]: cx(handleVariants({ placement: reversePlacement(internalPlacement) }), showHandleHighlight && styles.handleHighlight) } : {},
217
- onResize: handleResize,
218
- onResizeStart: handleResizeStart,
219
- onResizeStop: handleResizeStop,
220
217
  style: {
221
218
  ...cssVariables,
222
219
  opacity: isPending ? .95 : 1,
223
220
  transition: state.isResizing ? "unset" : void 0,
224
221
  ...style
225
222
  },
223
+ onResize: handleResize,
224
+ onResizeStart: handleResizeStart,
225
+ onResizeStop: handleResizeStop,
226
226
  children
227
227
  }), [
228
228
  sizeProps,
@@ -249,15 +249,15 @@ const DraggablePanel = memo(({ headerHeight = DEFAULT_HEADER_HEIGHT, fullscreen,
249
249
  children
250
250
  });
251
251
  return /* @__PURE__ */ jsxs("aside", {
252
+ dir,
253
+ ref,
254
+ style: cssVariables,
252
255
  className: cx(panelVariants({
253
256
  isExpand,
254
257
  mode,
255
258
  placement: internalPlacement,
256
259
  showBorder
257
260
  }), className),
258
- dir,
259
- ref,
260
- style: cssVariables,
261
261
  children: [expandable && state.showExpand && handle, destroyOnClose ? isExpand && inner : inner]
262
262
  });
263
263
  }, isEqual);
@@ -1 +1 @@
1
- {"version":3,"file":"DraggablePanel.mjs","names":["defaultSize: Size","Center","Icon"],"sources":["../../src/DraggablePanel/DraggablePanel.tsx"],"sourcesContent":["'use client';\n\nimport { useHover } from 'ahooks';\nimport { ConfigProvider } from 'antd';\nimport { cx } from 'antd-style';\nimport isEqual from 'fast-deep-equal';\nimport { ChevronDown, ChevronLeft, ChevronRight, ChevronUp } from 'lucide-react';\nimport type { Enable, NumberSize, Size } from 're-resizable';\nimport { Resizable } from 're-resizable';\nimport {\n memo,\n use,\n useCallback,\n useEffect,\n useMemo,\n useReducer,\n useRef,\n useTransition,\n} from 'react';\nimport useControlledState from 'use-merge-value';\n\nimport { Center } from '@/Flex';\nimport Icon from '@/Icon';\n\nimport { handleVariants, panelVariants, styles, toggleVariants } from './style';\nimport type { DraggablePanelProps } from './type';\nimport { reversePlacement } from './utils';\n\n// Constants\nconst DEFAULT_HEIGHT = 180;\nconst DEFAULT_WIDTH = 280;\nconst DEFAULT_HEADER_HEIGHT = 0;\nconst DEFAULT_PIN = true;\nconst DEFAULT_MODE = 'fixed';\nconst DEFAULT_EXPANDABLE = true;\nconst DEFAULT_EXPAND = true;\nconst DEFAULT_SHOW_HANDLE_WIDE_AREA = true;\n\n// State reducer for better state management\ninterface DraggablePanelState {\n isResizing: boolean;\n showExpand: boolean;\n}\n\ntype DraggablePanelAction =\n | { type: 'START_RESIZE' }\n | { type: 'STOP_RESIZE' }\n | { payload: boolean; type: 'SET_SHOW_EXPAND' };\n\nfunction draggablePanelReducer(\n state: DraggablePanelState,\n action: DraggablePanelAction,\n): DraggablePanelState {\n switch (action.type) {\n case 'START_RESIZE': {\n return { ...state, isResizing: true, showExpand: false };\n }\n case 'STOP_RESIZE': {\n return { ...state, isResizing: false, showExpand: true };\n }\n case 'SET_SHOW_EXPAND': {\n return { ...state, showExpand: action.payload };\n }\n default: {\n return state;\n }\n }\n}\n\nconst DraggablePanel = memo<DraggablePanelProps>(\n ({\n headerHeight = DEFAULT_HEADER_HEIGHT,\n fullscreen,\n maxHeight,\n pin = DEFAULT_PIN,\n mode = DEFAULT_MODE,\n children,\n placement = 'right',\n resize,\n style,\n showBorder = true,\n showHandleHighlight = false,\n showHandleWideArea = DEFAULT_SHOW_HANDLE_WIDE_AREA,\n backgroundColor,\n size,\n defaultSize: customizeDefaultSize,\n minWidth,\n minHeight,\n maxWidth,\n onSizeChange,\n onSizeDragging,\n expandable = DEFAULT_EXPANDABLE,\n expand,\n defaultExpand = DEFAULT_EXPAND,\n onExpandChange,\n className,\n showHandleWhenCollapsed,\n destroyOnClose,\n styles: customStyles,\n classNames,\n dir,\n }) => {\n const ref = useRef<HTMLDivElement>(null);\n const isHovering = useHover(ref);\n const isVertical = placement === 'top' || placement === 'bottom';\n const [isPending, startTransition] = useTransition();\n\n // Use ref for hover timeout to avoid memory leaks\n const hoverTimeoutRef = useRef<any>(undefined);\n\n // inherit direction from Ant Design ConfigProvider\n const { direction: antdDirection } = use(ConfigProvider.ConfigContext);\n const direction = dir ?? antdDirection;\n\n // Handle RTL direction\n const internalPlacement = useMemo(() => {\n return direction === 'rtl' && ['left', 'right'].includes(placement)\n ? placement === 'left'\n ? 'right'\n : 'left'\n : placement;\n }, [direction, placement]);\n\n const cssVariables = useMemo<Record<string, string>>(\n () => ({\n '--draggable-panel-bg': backgroundColor || '',\n '--draggable-panel-header-height': `${headerHeight}px`,\n }),\n [backgroundColor, headerHeight],\n );\n\n const [isExpand, setIsExpand] = useControlledState(defaultExpand, {\n onChange: onExpandChange,\n value: expand,\n });\n\n // Initialize state with useReducer for better performance\n const initialState: DraggablePanelState = {\n isResizing: false,\n showExpand: true,\n };\n\n const [state, dispatch] = useReducer(draggablePanelReducer, initialState);\n\n // Auto-expand on hover if not pinned with optimized transition\n useEffect(() => {\n if (pin) return;\n\n // Clear previous timeout\n if (hoverTimeoutRef.current) {\n clearTimeout(hoverTimeoutRef.current);\n }\n\n if (isHovering && !isExpand) {\n startTransition(() => {\n setIsExpand(true);\n });\n } else if (!isHovering && isExpand) {\n // Add a small delay before collapsing to prevent flickering\n hoverTimeoutRef.current = setTimeout(() => {\n startTransition(() => {\n setIsExpand(false);\n });\n }, 150);\n }\n }, [pin, isHovering, isExpand, setIsExpand]);\n\n // Cleanup timeout on unmount\n useEffect(() => {\n return () => {\n if (hoverTimeoutRef.current) {\n clearTimeout(hoverTimeoutRef.current);\n }\n };\n }, []);\n\n const canResizing = resize !== false && isExpand;\n\n // Configure resizing handles\n const resizing = useMemo(\n () => ({\n bottom: false,\n bottomLeft: false,\n bottomRight: false,\n left: false,\n right: false,\n top: false,\n topLeft: false,\n topRight: false,\n [reversePlacement(internalPlacement)]: true,\n ...(resize as Enable),\n }),\n [internalPlacement, resize],\n );\n\n // Calculate default size based on orientation\n const defaultSize: Size = useMemo(() => {\n if (isVertical)\n return {\n height: DEFAULT_HEIGHT,\n width: '100%',\n ...customizeDefaultSize,\n };\n\n return {\n height: '100%',\n width: DEFAULT_WIDTH,\n ...customizeDefaultSize,\n };\n }, [isVertical, customizeDefaultSize]);\n\n // Determine appropriate size props based on expand state\n const sizeProps = useMemo(() => {\n if (!isExpand) {\n return isVertical\n ? { minHeight: 0, size: { height: 0 } }\n : { minWidth: 0, size: { width: 0 } };\n }\n\n return {\n defaultSize,\n maxHeight: typeof maxHeight === 'number' ? Math.max(maxHeight, 0) : maxHeight,\n maxWidth: typeof maxWidth === 'number' ? Math.max(maxWidth, 0) : maxWidth,\n minHeight: typeof minHeight === 'number' ? Math.max(minHeight, 0) : minHeight,\n minWidth: typeof minWidth === 'number' ? Math.max(minWidth, 0) : minWidth,\n size: size as Size,\n };\n }, [isExpand, isVertical, defaultSize, maxHeight, maxWidth, minHeight, minWidth, size]);\n\n // Determine the appropriate arrow icon based on placement\n const Arrow = useMemo(() => {\n switch (internalPlacement) {\n case 'top': {\n return ChevronDown;\n }\n case 'bottom': {\n return ChevronUp;\n }\n case 'right': {\n return ChevronLeft;\n }\n case 'left': {\n return ChevronRight;\n }\n default: {\n return ChevronLeft;\n }\n }\n }, [internalPlacement]);\n\n // Toggle expand state with transition for better performance\n const toggleExpand = useCallback(() => {\n if (!expandable) return;\n\n startTransition(() => {\n setIsExpand(!isExpand);\n });\n }, [expandable, isExpand, setIsExpand]);\n\n // Toggle handle component\n const handle = useMemo(\n () => (\n <Center\n className={toggleVariants({ placement: internalPlacement, showHandleWideArea })}\n style={{ opacity: isExpand ? (pin ? undefined : 0) : showHandleWhenCollapsed ? 1 : 0 }}\n >\n <Center\n className={classNames?.handle}\n onClick={toggleExpand}\n style={customStyles?.handle}\n >\n <Icon\n className={styles.handlerIcon}\n icon={Arrow}\n size={16}\n style={{\n marginBottom: internalPlacement === 'top' ? 4 : 0,\n marginLeft: internalPlacement === 'right' ? 4 : 0,\n marginRight: internalPlacement === 'left' ? 4 : 0,\n marginTop: internalPlacement === 'bottom' ? 4 : 0,\n transform: `rotate(${isExpand ? 180 : 0}deg)`,\n transition: 'transform 0.3s ease',\n }}\n />\n </Center>\n </Center>\n ),\n [\n toggleVariants,\n internalPlacement,\n isExpand,\n pin,\n showHandleWhenCollapsed,\n classNames?.handle,\n toggleExpand,\n customStyles?.handle,\n styles.handlerIcon,\n Arrow,\n ],\n );\n\n // Handle resize events with memoization\n const handleResize = useCallback(\n (_: unknown, _direction: unknown, reference_: HTMLElement, delta: NumberSize) => {\n onSizeDragging?.(delta, {\n height: reference_.style.height,\n width: reference_.style.width,\n });\n },\n [onSizeDragging],\n );\n\n const handleResizeStart = useCallback(() => {\n dispatch({ type: 'START_RESIZE' });\n }, []);\n\n const handleResizeStop = useCallback(\n (e: unknown, direction: unknown, reference_: HTMLElement, delta: NumberSize) => {\n dispatch({ type: 'STOP_RESIZE' });\n onSizeChange?.(delta, {\n height: reference_.style.height,\n width: reference_.style.width,\n });\n },\n [onSizeChange],\n );\n\n // Main panel content\n const inner = useMemo(\n () => (\n <Resizable\n {...sizeProps}\n className={cx(styles.panel, classNames?.content)}\n enable={canResizing ? (resizing as Enable) : undefined}\n handleClasses={\n canResizing\n ? {\n [reversePlacement(internalPlacement)]: cx(\n handleVariants({\n placement: reversePlacement(internalPlacement),\n }),\n showHandleHighlight && styles.handleHighlight,\n ),\n }\n : {}\n }\n onResize={handleResize}\n onResizeStart={handleResizeStart}\n onResizeStop={handleResizeStop}\n style={{\n ...cssVariables,\n opacity: isPending ? 0.95 : 1,\n transition: state.isResizing ? 'unset' : undefined,\n ...style,\n }}\n >\n {children}\n </Resizable>\n ),\n [\n sizeProps,\n styles.panel,\n classNames?.content,\n canResizing,\n resizing,\n internalPlacement,\n handleVariants,\n showHandleHighlight,\n styles.handleHighlight,\n handleResize,\n handleResizeStart,\n handleResizeStop,\n state.isResizing,\n isPending,\n style,\n children,\n cx,\n ],\n );\n\n // For fullscreen mode, return a simpler layout\n if (fullscreen) {\n return (\n <div className={cx(styles.fullscreen, className)} style={cssVariables}>\n {children}\n </div>\n );\n }\n\n return (\n <aside\n className={cx(\n panelVariants({\n isExpand,\n mode,\n placement: internalPlacement,\n showBorder,\n }),\n className,\n )}\n dir={dir}\n ref={ref}\n style={cssVariables}\n >\n {expandable && state.showExpand && handle}\n {destroyOnClose ? isExpand && inner : inner}\n </aside>\n );\n },\n isEqual,\n);\n\nDraggablePanel.displayName = 'DraggablePanel';\n\nexport default DraggablePanel;\n"],"mappings":"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"}
1
+ {"version":3,"file":"DraggablePanel.mjs","names":["useControlledState","defaultSize: Size","Center","Icon"],"sources":["../../src/DraggablePanel/DraggablePanel.tsx"],"sourcesContent":["'use client';\n\nimport { useHover } from 'ahooks';\nimport { ConfigProvider } from 'antd';\nimport { cx } from 'antd-style';\nimport isEqual from 'fast-deep-equal';\nimport { ChevronDown, ChevronLeft, ChevronRight, ChevronUp } from 'lucide-react';\nimport type { Enable, NumberSize, Size } from 're-resizable';\nimport { Resizable } from 're-resizable';\nimport {\n memo,\n use,\n useCallback,\n useEffect,\n useMemo,\n useReducer,\n useRef,\n useTransition,\n} from 'react';\nimport useControlledState from 'use-merge-value';\n\nimport { Center } from '@/Flex';\nimport Icon from '@/Icon';\n\nimport { handleVariants, panelVariants, styles, toggleVariants } from './style';\nimport type { DraggablePanelProps } from './type';\nimport { reversePlacement } from './utils';\n\n// Constants\nconst DEFAULT_HEIGHT = 180;\nconst DEFAULT_WIDTH = 280;\nconst DEFAULT_HEADER_HEIGHT = 0;\nconst DEFAULT_PIN = true;\nconst DEFAULT_MODE = 'fixed';\nconst DEFAULT_EXPANDABLE = true;\nconst DEFAULT_EXPAND = true;\nconst DEFAULT_SHOW_HANDLE_WIDE_AREA = true;\n\n// State reducer for better state management\ninterface DraggablePanelState {\n isResizing: boolean;\n showExpand: boolean;\n}\n\ntype DraggablePanelAction =\n | { type: 'START_RESIZE' }\n | { type: 'STOP_RESIZE' }\n | { payload: boolean; type: 'SET_SHOW_EXPAND' };\n\nfunction draggablePanelReducer(\n state: DraggablePanelState,\n action: DraggablePanelAction,\n): DraggablePanelState {\n switch (action.type) {\n case 'START_RESIZE': {\n return { ...state, isResizing: true, showExpand: false };\n }\n case 'STOP_RESIZE': {\n return { ...state, isResizing: false, showExpand: true };\n }\n case 'SET_SHOW_EXPAND': {\n return { ...state, showExpand: action.payload };\n }\n default: {\n return state;\n }\n }\n}\n\nconst DraggablePanel = memo<DraggablePanelProps>(\n ({\n headerHeight = DEFAULT_HEADER_HEIGHT,\n fullscreen,\n maxHeight,\n pin = DEFAULT_PIN,\n mode = DEFAULT_MODE,\n children,\n placement = 'right',\n resize,\n style,\n showBorder = true,\n showHandleHighlight = false,\n showHandleWideArea = DEFAULT_SHOW_HANDLE_WIDE_AREA,\n backgroundColor,\n size,\n defaultSize: customizeDefaultSize,\n minWidth,\n minHeight,\n maxWidth,\n onSizeChange,\n onSizeDragging,\n expandable = DEFAULT_EXPANDABLE,\n expand,\n defaultExpand = DEFAULT_EXPAND,\n onExpandChange,\n className,\n showHandleWhenCollapsed,\n destroyOnClose,\n styles: customStyles,\n classNames,\n dir,\n }) => {\n const ref = useRef<HTMLDivElement>(null);\n const isHovering = useHover(ref);\n const isVertical = placement === 'top' || placement === 'bottom';\n const [isPending, startTransition] = useTransition();\n\n // Use ref for hover timeout to avoid memory leaks\n const hoverTimeoutRef = useRef<any>(undefined);\n\n // inherit direction from Ant Design ConfigProvider\n const { direction: antdDirection } = use(ConfigProvider.ConfigContext);\n const direction = dir ?? antdDirection;\n\n // Handle RTL direction\n const internalPlacement = useMemo(() => {\n return direction === 'rtl' && ['left', 'right'].includes(placement)\n ? placement === 'left'\n ? 'right'\n : 'left'\n : placement;\n }, [direction, placement]);\n\n const cssVariables = useMemo<Record<string, string>>(\n () => ({\n '--draggable-panel-bg': backgroundColor || '',\n '--draggable-panel-header-height': `${headerHeight}px`,\n }),\n [backgroundColor, headerHeight],\n );\n\n const [isExpand, setIsExpand] = useControlledState(defaultExpand, {\n onChange: onExpandChange,\n value: expand,\n });\n\n // Initialize state with useReducer for better performance\n const initialState: DraggablePanelState = {\n isResizing: false,\n showExpand: true,\n };\n\n const [state, dispatch] = useReducer(draggablePanelReducer, initialState);\n\n // Auto-expand on hover if not pinned with optimized transition\n useEffect(() => {\n if (pin) return;\n\n // Clear previous timeout\n if (hoverTimeoutRef.current) {\n clearTimeout(hoverTimeoutRef.current);\n }\n\n if (isHovering && !isExpand) {\n startTransition(() => {\n setIsExpand(true);\n });\n } else if (!isHovering && isExpand) {\n // Add a small delay before collapsing to prevent flickering\n hoverTimeoutRef.current = setTimeout(() => {\n startTransition(() => {\n setIsExpand(false);\n });\n }, 150);\n }\n }, [pin, isHovering, isExpand, setIsExpand]);\n\n // Cleanup timeout on unmount\n useEffect(() => {\n return () => {\n if (hoverTimeoutRef.current) {\n clearTimeout(hoverTimeoutRef.current);\n }\n };\n }, []);\n\n const canResizing = resize !== false && isExpand;\n\n // Configure resizing handles\n const resizing = useMemo(\n () => ({\n bottom: false,\n bottomLeft: false,\n bottomRight: false,\n left: false,\n right: false,\n top: false,\n topLeft: false,\n topRight: false,\n [reversePlacement(internalPlacement)]: true,\n ...(resize as Enable),\n }),\n [internalPlacement, resize],\n );\n\n // Calculate default size based on orientation\n const defaultSize: Size = useMemo(() => {\n if (isVertical)\n return {\n height: DEFAULT_HEIGHT,\n width: '100%',\n ...customizeDefaultSize,\n };\n\n return {\n height: '100%',\n width: DEFAULT_WIDTH,\n ...customizeDefaultSize,\n };\n }, [isVertical, customizeDefaultSize]);\n\n // Determine appropriate size props based on expand state\n const sizeProps = useMemo(() => {\n if (!isExpand) {\n return isVertical\n ? { minHeight: 0, size: { height: 0 } }\n : { minWidth: 0, size: { width: 0 } };\n }\n\n return {\n defaultSize,\n maxHeight: typeof maxHeight === 'number' ? Math.max(maxHeight, 0) : maxHeight,\n maxWidth: typeof maxWidth === 'number' ? Math.max(maxWidth, 0) : maxWidth,\n minHeight: typeof minHeight === 'number' ? Math.max(minHeight, 0) : minHeight,\n minWidth: typeof minWidth === 'number' ? Math.max(minWidth, 0) : minWidth,\n size: size as Size,\n };\n }, [isExpand, isVertical, defaultSize, maxHeight, maxWidth, minHeight, minWidth, size]);\n\n // Determine the appropriate arrow icon based on placement\n const Arrow = useMemo(() => {\n switch (internalPlacement) {\n case 'top': {\n return ChevronDown;\n }\n case 'bottom': {\n return ChevronUp;\n }\n case 'right': {\n return ChevronLeft;\n }\n case 'left': {\n return ChevronRight;\n }\n default: {\n return ChevronLeft;\n }\n }\n }, [internalPlacement]);\n\n // Toggle expand state with transition for better performance\n const toggleExpand = useCallback(() => {\n if (!expandable) return;\n\n startTransition(() => {\n setIsExpand(!isExpand);\n });\n }, [expandable, isExpand, setIsExpand]);\n\n // Toggle handle component\n const handle = useMemo(\n () => (\n <Center\n className={toggleVariants({ placement: internalPlacement, showHandleWideArea })}\n style={{ opacity: isExpand ? (pin ? undefined : 0) : showHandleWhenCollapsed ? 1 : 0 }}\n >\n <Center\n className={classNames?.handle}\n style={customStyles?.handle}\n onClick={toggleExpand}\n >\n <Icon\n className={styles.handlerIcon}\n icon={Arrow}\n size={16}\n style={{\n marginBottom: internalPlacement === 'top' ? 4 : 0,\n marginLeft: internalPlacement === 'right' ? 4 : 0,\n marginRight: internalPlacement === 'left' ? 4 : 0,\n marginTop: internalPlacement === 'bottom' ? 4 : 0,\n transform: `rotate(${isExpand ? 180 : 0}deg)`,\n transition: 'transform 0.3s ease',\n }}\n />\n </Center>\n </Center>\n ),\n [\n toggleVariants,\n internalPlacement,\n isExpand,\n pin,\n showHandleWhenCollapsed,\n classNames?.handle,\n toggleExpand,\n customStyles?.handle,\n styles.handlerIcon,\n Arrow,\n ],\n );\n\n // Handle resize events with memoization\n const handleResize = useCallback(\n (_: unknown, _direction: unknown, reference_: HTMLElement, delta: NumberSize) => {\n onSizeDragging?.(delta, {\n height: reference_.style.height,\n width: reference_.style.width,\n });\n },\n [onSizeDragging],\n );\n\n const handleResizeStart = useCallback(() => {\n dispatch({ type: 'START_RESIZE' });\n }, []);\n\n const handleResizeStop = useCallback(\n (e: unknown, direction: unknown, reference_: HTMLElement, delta: NumberSize) => {\n dispatch({ type: 'STOP_RESIZE' });\n onSizeChange?.(delta, {\n height: reference_.style.height,\n width: reference_.style.width,\n });\n },\n [onSizeChange],\n );\n\n // Main panel content\n const inner = useMemo(\n () => (\n <Resizable\n {...sizeProps}\n className={cx(styles.panel, classNames?.content)}\n enable={canResizing ? (resizing as Enable) : undefined}\n handleClasses={\n canResizing\n ? {\n [reversePlacement(internalPlacement)]: cx(\n handleVariants({\n placement: reversePlacement(internalPlacement),\n }),\n showHandleHighlight && styles.handleHighlight,\n ),\n }\n : {}\n }\n style={{\n ...cssVariables,\n opacity: isPending ? 0.95 : 1,\n transition: state.isResizing ? 'unset' : undefined,\n ...style,\n }}\n onResize={handleResize}\n onResizeStart={handleResizeStart}\n onResizeStop={handleResizeStop}\n >\n {children}\n </Resizable>\n ),\n [\n sizeProps,\n styles.panel,\n classNames?.content,\n canResizing,\n resizing,\n internalPlacement,\n handleVariants,\n showHandleHighlight,\n styles.handleHighlight,\n handleResize,\n handleResizeStart,\n handleResizeStop,\n state.isResizing,\n isPending,\n style,\n children,\n cx,\n ],\n );\n\n // For fullscreen mode, return a simpler layout\n if (fullscreen) {\n return (\n <div className={cx(styles.fullscreen, className)} style={cssVariables}>\n {children}\n </div>\n );\n }\n\n return (\n <aside\n dir={dir}\n ref={ref}\n style={cssVariables}\n className={cx(\n panelVariants({\n isExpand,\n mode,\n placement: internalPlacement,\n showBorder,\n }),\n className,\n )}\n >\n {expandable && state.showExpand && handle}\n {destroyOnClose ? isExpand && inner : inner}\n </aside>\n );\n },\n isEqual,\n);\n\nDraggablePanel.displayName = 'DraggablePanel';\n\nexport default DraggablePanel;\n"],"mappings":"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"}
@@ -1,9 +1,9 @@
1
1
  import { DivProps } from "../../types/index.mjs";
2
- import * as react7 from "react";
2
+ import * as react78 from "react";
3
3
 
4
4
  //#region src/DraggablePanel/components/DraggablePanelBody.d.ts
5
5
  type DraggablePanelBodyProps = DivProps;
6
- declare const DraggablePanelBody: react7.NamedExoticComponent<DivProps>;
6
+ declare const DraggablePanelBody: react78.NamedExoticComponent<DivProps>;
7
7
  //#endregion
8
8
  export { DraggablePanelBody, DraggablePanelBodyProps };
9
9
  //# sourceMappingURL=DraggablePanelBody.d.mts.map
@@ -1,9 +1,9 @@
1
1
  import { DivProps } from "../../types/index.mjs";
2
- import * as react8 from "react";
2
+ import * as react75 from "react";
3
3
 
4
4
  //#region src/DraggablePanel/components/DraggablePanelContainer.d.ts
5
5
  type DraggablePanelContainerProps = DivProps;
6
- declare const DraggablePanelContainer: react8.NamedExoticComponent<DivProps>;
6
+ declare const DraggablePanelContainer: react75.NamedExoticComponent<DivProps>;
7
7
  //#endregion
8
8
  export { DraggablePanelContainer, DraggablePanelContainerProps };
9
9
  //# sourceMappingURL=DraggablePanelContainer.d.mts.map
@@ -1,9 +1,9 @@
1
1
  import { DivProps } from "../../types/index.mjs";
2
- import * as react9 from "react";
2
+ import * as react76 from "react";
3
3
 
4
4
  //#region src/DraggablePanel/components/DraggablePanelFooter.d.ts
5
5
  type DraggablePanelFooterProps = DivProps;
6
- declare const DraggablePanelFooter: react9.NamedExoticComponent<DivProps>;
6
+ declare const DraggablePanelFooter: react76.NamedExoticComponent<DivProps>;
7
7
  //#endregion
8
8
  export { DraggablePanelFooter, DraggablePanelFooterProps };
9
9
  //# sourceMappingURL=DraggablePanelFooter.d.mts.map
@@ -9,11 +9,11 @@ import { cx } from "antd-style";
9
9
  //#region src/DraggablePanel/components/DraggablePanelFooter.tsx
10
10
  const DraggablePanelFooter = memo(({ className, ...rest }) => {
11
11
  return /* @__PURE__ */ jsx(FlexBasic_default, {
12
+ horizontal: true,
12
13
  align: "center",
13
14
  className: cx(styles.footer, className),
14
15
  flex: "none",
15
16
  gap: 8,
16
- horizontal: true,
17
17
  justify: "flex-start",
18
18
  ...rest
19
19
  });
@@ -1 +1 @@
1
- {"version":3,"file":"DraggablePanelFooter.mjs","names":["Flexbox"],"sources":["../../../src/DraggablePanel/components/DraggablePanelFooter.tsx"],"sourcesContent":["'use client';\n\nimport { cx } from 'antd-style';\nimport { memo } from 'react';\n\nimport { Flexbox } from '@/Flex';\nimport { type DivProps } from '@/types';\n\nimport { styles } from './style';\n\nexport type DraggablePanelFooterProps = DivProps;\n\nconst DraggablePanelFooter = memo<DraggablePanelFooterProps>(({ className, ...rest }) => {\n return (\n <Flexbox\n align={'center'}\n className={cx(styles.footer, className)}\n flex={'none'}\n gap={8}\n horizontal\n justify={'flex-start'}\n {...rest}\n />\n );\n});\n\nDraggablePanelFooter.displayName = 'DraggablePanelFooter';\n\nexport default DraggablePanelFooter;\n"],"mappings":";;;;;;;;;AAYA,MAAM,uBAAuB,MAAiC,EAAE,WAAW,GAAG,WAAW;AACvF,QACE,oBAACA;EACC,OAAO;EACP,WAAW,GAAG,OAAO,QAAQ,UAAU;EACvC,MAAM;EACN,KAAK;EACL;EACA,SAAS;EACT,GAAI;GACJ;EAEJ;AAEF,qBAAqB,cAAc;AAEnC,mCAAe"}
1
+ {"version":3,"file":"DraggablePanelFooter.mjs","names":["Flexbox"],"sources":["../../../src/DraggablePanel/components/DraggablePanelFooter.tsx"],"sourcesContent":["'use client';\n\nimport { cx } from 'antd-style';\nimport { memo } from 'react';\n\nimport { Flexbox } from '@/Flex';\nimport { type DivProps } from '@/types';\n\nimport { styles } from './style';\n\nexport type DraggablePanelFooterProps = DivProps;\n\nconst DraggablePanelFooter = memo<DraggablePanelFooterProps>(({ className, ...rest }) => {\n return (\n <Flexbox\n horizontal\n align={'center'}\n className={cx(styles.footer, className)}\n flex={'none'}\n gap={8}\n justify={'flex-start'}\n {...rest}\n />\n );\n});\n\nDraggablePanelFooter.displayName = 'DraggablePanelFooter';\n\nexport default DraggablePanelFooter;\n"],"mappings":";;;;;;;;;AAYA,MAAM,uBAAuB,MAAiC,EAAE,WAAW,GAAG,WAAW;AACvF,QACE,oBAACA;EACC;EACA,OAAO;EACP,WAAW,GAAG,OAAO,QAAQ,UAAU;EACvC,MAAM;EACN,KAAK;EACL,SAAS;EACT,GAAI;GACJ;EAEJ;AAEF,qBAAqB,cAAc;AAEnC,mCAAe"}
@@ -1,5 +1,5 @@
1
1
  import { DivProps } from "../../types/index.mjs";
2
- import * as react10 from "react";
2
+ import * as react77 from "react";
3
3
 
4
4
  //#region src/DraggablePanel/components/DraggablePanelHeader.d.ts
5
5
  interface DraggablePanelHeaderProps extends Omit<DivProps, 'children'> {
@@ -9,7 +9,7 @@ interface DraggablePanelHeaderProps extends Omit<DivProps, 'children'> {
9
9
  setPin?: (pin: boolean) => void;
10
10
  title?: string;
11
11
  }
12
- declare const DraggablePanelHeader: react10.NamedExoticComponent<DraggablePanelHeaderProps>;
12
+ declare const DraggablePanelHeader: react77.NamedExoticComponent<DraggablePanelHeaderProps>;
13
13
  //#endregion
14
14
  export { DraggablePanelHeader, DraggablePanelHeaderProps };
15
15
  //# sourceMappingURL=DraggablePanelHeader.d.mts.map
@@ -6,33 +6,33 @@ import { styles } from "./style.mjs";
6
6
  import { memo } from "react";
7
7
  import { jsx, jsxs } from "react/jsx-runtime";
8
8
  import { cx } from "antd-style";
9
- import useControlledState from "use-merge-value";
9
+ import useMergeState from "use-merge-value";
10
10
  import { PanelLeft, Pin, PinOff } from "lucide-react";
11
11
 
12
12
  //#region src/DraggablePanel/components/DraggablePanelHeader.tsx
13
13
  const DraggablePanelHeader = memo((props) => {
14
14
  const { pin, setPin, className, setExpand, title, position = "left", ...rest } = props;
15
- const [isPinned, setIsPinned] = useControlledState(false, {
15
+ const [isPinned, setIsPinned] = useMergeState(false, {
16
16
  onChange: setPin,
17
17
  value: pin
18
18
  });
19
19
  const panelIcon = /* @__PURE__ */ jsx(ActionIcon_default, {
20
20
  icon: PanelLeft,
21
- onClick: () => setExpand?.(false),
22
- size: "small"
21
+ size: "small",
22
+ onClick: () => setExpand?.(false)
23
23
  });
24
24
  const pinIcon = /* @__PURE__ */ jsx(ActionIcon_default, {
25
25
  active: pin,
26
26
  icon: pin ? Pin : PinOff,
27
- onClick: () => setIsPinned(!isPinned),
28
- size: "small"
27
+ size: "small",
28
+ onClick: () => setIsPinned(!isPinned)
29
29
  });
30
30
  return /* @__PURE__ */ jsxs(FlexBasic_default, {
31
+ horizontal: true,
31
32
  align: "center",
32
33
  className: cx(styles.header, className),
33
34
  flex: "none",
34
35
  gap: 8,
35
- horizontal: true,
36
36
  justify: "space-between",
37
37
  ...rest,
38
38
  children: [
@@ -1 +1 @@
1
- {"version":3,"file":"DraggablePanelHeader.mjs","names":["ActionIcon","Flexbox"],"sources":["../../../src/DraggablePanel/components/DraggablePanelHeader.tsx"],"sourcesContent":["'use client';\n\nimport { cx } from 'antd-style';\nimport { PanelLeft, Pin, PinOff } from 'lucide-react';\nimport { memo } from 'react';\nimport useControlledState from 'use-merge-value';\n\nimport ActionIcon from '@/ActionIcon';\nimport { Flexbox } from '@/Flex';\nimport { type DivProps } from '@/types';\n\nimport { styles } from './style';\n\nexport interface DraggablePanelHeaderProps extends Omit<DivProps, 'children'> {\n pin?: boolean;\n position?: 'left' | 'right';\n setExpand?: (expand: boolean) => void;\n setPin?: (pin: boolean) => void;\n title?: string;\n}\n\nconst DraggablePanelHeader = memo<DraggablePanelHeaderProps>((props) => {\n const { pin, setPin, className, setExpand, title, position = 'left', ...rest } = props;\n\n const [isPinned, setIsPinned] = useControlledState(false, {\n onChange: setPin,\n value: pin,\n });\n\n const panelIcon = (\n <ActionIcon icon={PanelLeft} onClick={() => setExpand?.(false)} size={'small'} />\n );\n const pinIcon = (\n <ActionIcon\n active={pin}\n icon={pin ? Pin : PinOff}\n onClick={() => setIsPinned(!isPinned)}\n size={'small'}\n />\n );\n return (\n <Flexbox\n align={'center'}\n className={cx(styles.header, className)}\n flex={'none'}\n gap={8}\n horizontal\n justify={'space-between'}\n {...rest}\n >\n {position === 'left' ? panelIcon : pinIcon}\n {title}\n {position === 'left' ? pinIcon : panelIcon}\n </Flexbox>\n );\n});\n\nDraggablePanelHeader.displayName = 'DraggablePanelHeader';\n\nexport default DraggablePanelHeader;\n"],"mappings":";;;;;;;;;;;;AAqBA,MAAM,uBAAuB,MAAiC,UAAU;CACtE,MAAM,EAAE,KAAK,QAAQ,WAAW,WAAW,OAAO,WAAW,QAAQ,GAAG,SAAS;CAEjF,MAAM,CAAC,UAAU,eAAe,mBAAmB,OAAO;EACxD,UAAU;EACV,OAAO;EACR,CAAC;CAEF,MAAM,YACJ,oBAACA;EAAW,MAAM;EAAW,eAAe,YAAY,MAAM;EAAE,MAAM;GAAW;CAEnF,MAAM,UACJ,oBAACA;EACC,QAAQ;EACR,MAAM,MAAM,MAAM;EAClB,eAAe,YAAY,CAAC,SAAS;EACrC,MAAM;GACN;AAEJ,QACE,qBAACC;EACC,OAAO;EACP,WAAW,GAAG,OAAO,QAAQ,UAAU;EACvC,MAAM;EACN,KAAK;EACL;EACA,SAAS;EACT,GAAI;;GAEH,aAAa,SAAS,YAAY;GAClC;GACA,aAAa,SAAS,UAAU;;GACzB;EAEZ;AAEF,qBAAqB,cAAc;AAEnC,mCAAe"}
1
+ {"version":3,"file":"DraggablePanelHeader.mjs","names":["useControlledState","ActionIcon","Flexbox"],"sources":["../../../src/DraggablePanel/components/DraggablePanelHeader.tsx"],"sourcesContent":["'use client';\n\nimport { cx } from 'antd-style';\nimport { PanelLeft, Pin, PinOff } from 'lucide-react';\nimport { memo } from 'react';\nimport useControlledState from 'use-merge-value';\n\nimport ActionIcon from '@/ActionIcon';\nimport { Flexbox } from '@/Flex';\nimport { type DivProps } from '@/types';\n\nimport { styles } from './style';\n\nexport interface DraggablePanelHeaderProps extends Omit<DivProps, 'children'> {\n pin?: boolean;\n position?: 'left' | 'right';\n setExpand?: (expand: boolean) => void;\n setPin?: (pin: boolean) => void;\n title?: string;\n}\n\nconst DraggablePanelHeader = memo<DraggablePanelHeaderProps>((props) => {\n const { pin, setPin, className, setExpand, title, position = 'left', ...rest } = props;\n\n const [isPinned, setIsPinned] = useControlledState(false, {\n onChange: setPin,\n value: pin,\n });\n\n const panelIcon = (\n <ActionIcon icon={PanelLeft} size={'small'} onClick={() => setExpand?.(false)} />\n );\n const pinIcon = (\n <ActionIcon\n active={pin}\n icon={pin ? Pin : PinOff}\n size={'small'}\n onClick={() => setIsPinned(!isPinned)}\n />\n );\n return (\n <Flexbox\n horizontal\n align={'center'}\n className={cx(styles.header, className)}\n flex={'none'}\n gap={8}\n justify={'space-between'}\n {...rest}\n >\n {position === 'left' ? panelIcon : pinIcon}\n {title}\n {position === 'left' ? pinIcon : panelIcon}\n </Flexbox>\n );\n});\n\nDraggablePanelHeader.displayName = 'DraggablePanelHeader';\n\nexport default DraggablePanelHeader;\n"],"mappings":";;;;;;;;;;;;AAqBA,MAAM,uBAAuB,MAAiC,UAAU;CACtE,MAAM,EAAE,KAAK,QAAQ,WAAW,WAAW,OAAO,WAAW,QAAQ,GAAG,SAAS;CAEjF,MAAM,CAAC,UAAU,eAAeA,cAAmB,OAAO;EACxD,UAAU;EACV,OAAO;EACR,CAAC;CAEF,MAAM,YACJ,oBAACC;EAAW,MAAM;EAAW,MAAM;EAAS,eAAe,YAAY,MAAM;GAAI;CAEnF,MAAM,UACJ,oBAACA;EACC,QAAQ;EACR,MAAM,MAAM,MAAM;EAClB,MAAM;EACN,eAAe,YAAY,CAAC,SAAS;GACrC;AAEJ,QACE,qBAACC;EACC;EACA,OAAO;EACP,WAAW,GAAG,OAAO,QAAQ,UAAU;EACvC,MAAM;EACN,KAAK;EACL,SAAS;EACT,GAAI;;GAEH,aAAa,SAAS,YAAY;GAClC;GACA,aAAa,SAAS,UAAU;;GACzB;EAEZ;AAEF,qBAAqB,cAAc;AAEnC,mCAAe"}
@@ -1,10 +1,10 @@
1
1
  'use client';
2
2
 
3
- import DraggablePanel_default$1 from "./DraggablePanel.mjs";
4
3
  import DraggablePanelBody_default from "./components/DraggablePanelBody.mjs";
5
4
  import DraggablePanelContainer_default from "./components/DraggablePanelContainer.mjs";
6
5
  import DraggablePanelFooter_default from "./components/DraggablePanelFooter.mjs";
7
6
  import DraggablePanelHeader_default from "./components/DraggablePanelHeader.mjs";
7
+ import DraggablePanel_default$1 from "./DraggablePanel.mjs";
8
8
 
9
9
  //#region src/DraggablePanel/index.ts
10
10
  const DraggablePanel = DraggablePanel_default$1;