@lobehub/ui 5.23.5 → 5.25.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 (375) hide show
  1. package/es/A/index.mjs +2 -1
  2. package/es/A/index.mjs.map +1 -1
  3. package/es/Accordion/Accordion.mjs.map +1 -1
  4. package/es/Accordion/AccordionItem.mjs +0 -1
  5. package/es/Accordion/AccordionItem.mjs.map +1 -1
  6. package/es/Accordion/ArrowIcon.mjs.map +1 -1
  7. package/es/ActionIcon/ActionIcon.mjs.map +1 -1
  8. package/es/ActionIcon/components/utils.mjs +7 -9
  9. package/es/ActionIcon/components/utils.mjs.map +1 -1
  10. package/es/ActionIconGroup/ActionIconGroup.mjs.map +1 -1
  11. package/es/Alert/Alert.mjs.map +1 -1
  12. package/es/Avatar/Avatar.mjs.map +1 -1
  13. package/es/Avatar/AvatarGroup/index.mjs.map +1 -1
  14. package/es/Burger/Burger.mjs.map +1 -1
  15. package/es/Checkbox/Checkbox.mjs.map +1 -1
  16. package/es/Checkbox/CheckboxGroup.mjs +4 -2
  17. package/es/Checkbox/CheckboxGroup.mjs.map +1 -1
  18. package/es/CodeDiff/CodeDiff.mjs +20 -18
  19. package/es/CodeDiff/CodeDiff.mjs.map +1 -1
  20. package/es/CodeDiff/DiffPanel.mjs.map +1 -1
  21. package/es/CodeDiff/PatchDiff.mjs +18 -16
  22. package/es/CodeDiff/PatchDiff.mjs.map +1 -1
  23. package/es/CodeEditor/CodeEditor.mjs.map +1 -1
  24. package/es/Collapse/Collapse.mjs.map +1 -1
  25. package/es/ColorSwatches/ColorSwatches.mjs.map +1 -1
  26. package/es/ConfigProvider/index.mjs.map +1 -1
  27. package/es/ContextMenu/index.d.mts +2 -2
  28. package/es/ContextMenu/index.mjs +2 -2
  29. package/es/CopyButton/CopyButton.mjs +2 -1
  30. package/es/CopyButton/CopyButton.mjs.map +1 -1
  31. package/es/DraggablePanel/DraggablePanel.mjs.map +1 -1
  32. package/es/DraggablePanel/components/DraggablePanelHeader.mjs.map +1 -1
  33. package/es/DraggableSideNav/DraggableSideNav.mjs.map +1 -1
  34. package/es/Drawer/Drawer.mjs.map +1 -1
  35. package/es/Dropdown/Dropdown.mjs.map +1 -1
  36. package/es/EditableText/ControlInput.mjs.map +1 -1
  37. package/es/EditableText/EditableText.mjs.map +1 -1
  38. package/es/EditorSlashMenu/EditorSlashMenu.mjs.map +1 -1
  39. package/es/EditorSlashMenu/MenuItemRenderer.mjs.map +1 -1
  40. package/es/EmojiPicker/AvatarUploader.mjs.map +1 -1
  41. package/es/EmojiPicker/EmojiPicker.mjs.map +1 -1
  42. package/es/Empty/Empty.mjs.map +1 -1
  43. package/es/FileTypeIcon/FileTypeIcon.mjs.map +1 -1
  44. package/es/FileTypeIcon/components/FileIcon.mjs.map +1 -1
  45. package/es/FileTypeIcon/components/FolderIcon.mjs.map +1 -1
  46. package/es/FluentEmoji/FluentEmoji.mjs.map +1 -1
  47. package/es/Footer/Footer.mjs.map +1 -1
  48. package/es/Form/Form.mjs.map +1 -1
  49. package/es/Form/components/FormGroup.mjs.map +1 -1
  50. package/es/Form/components/FormSubmitFooter.mjs.map +1 -1
  51. package/es/Form/components/FormTitle.mjs.map +1 -1
  52. package/es/FormModal/FormModal.mjs.map +1 -1
  53. package/es/Freeze/Freeze.mjs.map +1 -1
  54. package/es/GroupAvatar/GroupAvatar.mjs.map +1 -1
  55. package/es/GuideCard/GuideCard.mjs.map +1 -1
  56. package/es/Header/Header.mjs.map +1 -1
  57. package/es/Highlighter/FullFeatured.mjs.map +1 -1
  58. package/es/Highlighter/Highlighter.mjs.map +1 -1
  59. package/es/Highlighter/LangSelect.mjs +41 -40
  60. package/es/Highlighter/LangSelect.mjs.map +1 -1
  61. package/es/Highlighter/SyntaxHighlighter/StaticRenderer.mjs +2 -1
  62. package/es/Highlighter/SyntaxHighlighter/StaticRenderer.mjs.map +1 -1
  63. package/es/Highlighter/SyntaxHighlighter/StreamRenderer.mjs.map +1 -1
  64. package/es/Highlighter/SyntaxHighlighter/style.mjs +2 -2
  65. package/es/Highlighter/SyntaxHighlighter/style.mjs.map +1 -1
  66. package/es/Hotkey/Hotkey.mjs.map +1 -1
  67. package/es/HotkeyInput/HotkeyInput.mjs +3 -1
  68. package/es/HotkeyInput/HotkeyInput.mjs.map +1 -1
  69. package/es/HtmlPreview/HtmlPreview.mjs.map +1 -1
  70. package/es/HtmlPreview/Iframe.mjs.map +1 -1
  71. package/es/HtmlPreview/const.mjs +1 -1
  72. package/es/HtmlPreview/const.mjs.map +1 -1
  73. package/es/Icon/Icon.mjs.map +1 -1
  74. package/es/Icon/components/utils.mjs +7 -9
  75. package/es/Icon/components/utils.mjs.map +1 -1
  76. package/es/Image/Image.mjs.map +1 -1
  77. package/es/Image/components/Toolbar.mjs +2 -1
  78. package/es/Image/components/Toolbar.mjs.map +1 -1
  79. package/es/Image/components/usePreview.mjs.map +1 -1
  80. package/es/Image/components/usePreviewGroup.mjs.map +1 -1
  81. package/es/ImageSelect/ImageSelect.mjs.map +1 -1
  82. package/es/Img/index.mjs +2 -1
  83. package/es/Img/index.mjs.map +1 -1
  84. package/es/Layout/Layout.mjs.map +1 -1
  85. package/es/List/List.mjs.map +1 -1
  86. package/es/List/ListItem/index.mjs.map +1 -1
  87. package/es/Markdown/Markdown.mjs.map +1 -1
  88. package/es/Markdown/SyntaxMarkdown/MarkdownRender.mjs.map +1 -1
  89. package/es/Markdown/SyntaxMarkdown/StreamdownRender.mjs +2 -1
  90. package/es/Markdown/SyntaxMarkdown/StreamdownRender.mjs.map +1 -1
  91. package/es/Markdown/SyntaxMarkdown/style.mjs.map +1 -1
  92. package/es/Markdown/SyntaxMarkdown/useSmoothStreamContent.mjs +2 -2
  93. package/es/Markdown/SyntaxMarkdown/useSmoothStreamContent.mjs.map +1 -1
  94. package/es/Markdown/components/CodeBlock.mjs.map +1 -1
  95. package/es/Markdown/components/Footnotes.mjs.map +1 -1
  96. package/es/Markdown/components/MarkdownTable/index.mjs.map +1 -1
  97. package/es/Markdown/components/SearchResultCards/SearchResultCard.mjs.map +1 -1
  98. package/es/Markdown/components/SearchResultCards/index.mjs.map +1 -1
  99. package/es/MaterialFileTypeIcon/MaterialFileTypeIcon.mjs.map +1 -1
  100. package/es/Menu/Menu.mjs.map +1 -1
  101. package/es/Mermaid/FullFeatured.mjs.map +1 -1
  102. package/es/Mermaid/Mermaid.mjs.map +1 -1
  103. package/es/Mermaid/SyntaxMermaid/MermaidFallback.mjs +35 -0
  104. package/es/Mermaid/SyntaxMermaid/MermaidFallback.mjs.map +1 -0
  105. package/es/Mermaid/SyntaxMermaid/MermaidSvg.mjs +52 -0
  106. package/es/Mermaid/SyntaxMermaid/MermaidSvg.mjs.map +1 -0
  107. package/es/Mermaid/SyntaxMermaid/StaticMermaid.mjs +13 -42
  108. package/es/Mermaid/SyntaxMermaid/StaticMermaid.mjs.map +1 -1
  109. package/es/Mermaid/SyntaxMermaid/StreamMermaid.mjs +13 -43
  110. package/es/Mermaid/SyntaxMermaid/StreamMermaid.mjs.map +1 -1
  111. package/es/Mermaid/SyntaxMermaid/prepareInlineSvg.mjs +52 -0
  112. package/es/Mermaid/SyntaxMermaid/prepareInlineSvg.mjs.map +1 -0
  113. package/es/Mermaid/SyntaxMermaid/prepareMermaidSvg.mjs +20 -0
  114. package/es/Mermaid/SyntaxMermaid/prepareMermaidSvg.mjs.map +1 -0
  115. package/es/Mermaid/SyntaxMermaid/style.mjs +11 -0
  116. package/es/Mermaid/SyntaxMermaid/style.mjs.map +1 -1
  117. package/es/Mermaid/const.mjs +10 -31
  118. package/es/Mermaid/const.mjs.map +1 -1
  119. package/es/Mermaid/index.d.mts +2 -1
  120. package/es/Mermaid/index.mjs +2 -1
  121. package/es/Mermaid/type.d.mts +2 -2
  122. package/es/Modal/Modal.mjs.map +1 -1
  123. package/es/Modal/ModalStackItem.mjs.map +1 -1
  124. package/es/Modal/RawModalStackItem.mjs +6 -5
  125. package/es/Modal/RawModalStackItem.mjs.map +1 -1
  126. package/es/Modal/imperative.mjs +4 -2
  127. package/es/Modal/imperative.mjs.map +1 -1
  128. package/es/Modal/style.mjs.map +1 -1
  129. package/es/NeuralNetworkLoading/NeuralNetworkLoading.mjs +1 -1
  130. package/es/NeuralNetworkLoading/NeuralNetworkLoading.mjs.map +1 -1
  131. package/es/ScrollShadow/ScrollShadow.mjs +13 -12
  132. package/es/ScrollShadow/ScrollShadow.mjs.map +1 -1
  133. package/es/SearchBar/SearchBar.mjs.map +1 -1
  134. package/es/SideNav/SideNav.mjs.map +1 -1
  135. package/es/Skeleton/Skeleton.mjs.map +1 -1
  136. package/es/Skeleton/SkeletonButton.mjs +2 -1
  137. package/es/Skeleton/SkeletonButton.mjs.map +1 -1
  138. package/es/Skeleton/SkeletonParagraph.mjs.map +1 -1
  139. package/es/Skeleton/SkeletonTags.mjs.map +1 -1
  140. package/es/SliderWithInput/SliderWithInput.mjs.map +1 -1
  141. package/es/Snippet/Snippet.mjs.map +1 -1
  142. package/es/SortableList/SortableList.mjs +5 -1
  143. package/es/SortableList/SortableList.mjs.map +1 -1
  144. package/es/SortableList/components/SortableItem.mjs.map +1 -1
  145. package/es/Text/Text.mjs +22 -21
  146. package/es/Text/Text.mjs.map +1 -1
  147. package/es/ThemeProvider/ThemeProvider.mjs +4 -3
  148. package/es/ThemeProvider/ThemeProvider.mjs.map +1 -1
  149. package/es/ThemeSwitch/ThemeSwitch.mjs.map +1 -1
  150. package/es/Toc/Toc.mjs.map +1 -1
  151. package/es/Toc/TocMobile.mjs.map +1 -1
  152. package/es/Video/index.mjs.map +1 -1
  153. package/es/awesome/AuroraBackground/AuroraBackground.mjs.map +1 -1
  154. package/es/awesome/Features/FeatureItem.mjs.map +1 -1
  155. package/es/awesome/Giscus/Giscus.mjs.map +1 -1
  156. package/es/awesome/GradientButton/GradientButton.mjs +1 -3
  157. package/es/awesome/GradientButton/GradientButton.mjs.map +1 -1
  158. package/es/awesome/GridBackground/GridBackground.mjs.map +1 -1
  159. package/es/awesome/GridBackground/GridShowcase.mjs.map +1 -1
  160. package/es/awesome/GridBackground/components/Grid.mjs.map +1 -1
  161. package/es/awesome/Hero/Hero.mjs.map +1 -1
  162. package/es/awesome/Spline/ParentSize.mjs.map +1 -1
  163. package/es/awesome/Spline/Spine.mjs.map +1 -1
  164. package/es/awesome/Spotlight/Spotlight.mjs +2 -1
  165. package/es/awesome/Spotlight/Spotlight.mjs.map +1 -1
  166. package/es/awesome/SpotlightCard/SpotlightCard.mjs.map +1 -1
  167. package/es/awesome/SpotlightCard/SpotlightCardItem.mjs.map +1 -1
  168. package/es/awesome/TypewriterEffect/TypewriterEffect.mjs.map +1 -1
  169. package/es/base-ui/AutoComplete/AutoComplete.mjs.map +1 -1
  170. package/es/base-ui/Button/Button.mjs +13 -11
  171. package/es/base-ui/Button/Button.mjs.map +1 -1
  172. package/es/base-ui/Button/SplitButton.mjs +2 -1
  173. package/es/base-ui/Button/SplitButton.mjs.map +1 -1
  174. package/es/base-ui/Checkbox/Checkbox.mjs.map +1 -1
  175. package/es/base-ui/Checkbox/CheckboxGroup.mjs.map +1 -1
  176. package/es/base-ui/ContextMenu/ContextMenuHost.mjs.map +1 -1
  177. package/es/base-ui/ContextMenu/ContextMenuTrigger.mjs +2 -1
  178. package/es/base-ui/ContextMenu/ContextMenuTrigger.mjs.map +1 -1
  179. package/es/base-ui/ContextMenu/imperative.d.mts +2 -2
  180. package/es/base-ui/ContextMenu/index.d.mts +2 -2
  181. package/es/base-ui/ContextMenu/renderItems.mjs +2 -1
  182. package/es/base-ui/ContextMenu/renderItems.mjs.map +1 -1
  183. package/es/base-ui/ContextMenu/store.d.mts +13 -1
  184. package/es/base-ui/ContextMenu/store.mjs +29 -4
  185. package/es/base-ui/ContextMenu/store.mjs.map +1 -1
  186. package/es/base-ui/Drawer/Drawer.d.mts +6 -0
  187. package/es/base-ui/Drawer/Drawer.mjs +152 -0
  188. package/es/base-ui/Drawer/Drawer.mjs.map +1 -0
  189. package/es/base-ui/Drawer/DrawerLayerContext.mjs +10 -0
  190. package/es/base-ui/Drawer/DrawerLayerContext.mjs.map +1 -0
  191. package/es/base-ui/Drawer/DrawerPushContext.mjs +27 -0
  192. package/es/base-ui/Drawer/DrawerPushContext.mjs.map +1 -0
  193. package/es/base-ui/Drawer/atoms.d.mts +58 -0
  194. package/es/base-ui/Drawer/atoms.mjs +262 -0
  195. package/es/base-ui/Drawer/atoms.mjs.map +1 -0
  196. package/es/base-ui/Drawer/constants.d.mts +17 -0
  197. package/es/base-ui/Drawer/constants.mjs +72 -0
  198. package/es/base-ui/Drawer/constants.mjs.map +1 -0
  199. package/es/base-ui/Drawer/index.d.mts +5 -0
  200. package/es/base-ui/Drawer/style.mjs +295 -0
  201. package/es/base-ui/Drawer/style.mjs.map +1 -0
  202. package/es/base-ui/Drawer/type.d.mts +65 -0
  203. package/es/base-ui/DropdownMenu/DropdownMenu.mjs +2 -1
  204. package/es/base-ui/DropdownMenu/DropdownMenu.mjs.map +1 -1
  205. package/es/base-ui/DropdownMenu/atoms.mjs +2 -1
  206. package/es/base-ui/DropdownMenu/atoms.mjs.map +1 -1
  207. package/es/base-ui/DropdownMenu/renderItems.mjs +2 -1
  208. package/es/base-ui/DropdownMenu/renderItems.mjs.map +1 -1
  209. package/es/base-ui/DropdownMenu/sharedStyle.mjs +3 -0
  210. package/es/base-ui/DropdownMenu/sharedStyle.mjs.map +1 -1
  211. package/es/base-ui/FloatingPanel/FloatingPanel.mjs.map +1 -1
  212. package/es/base-ui/FloatingSheet/FloatingSheet.mjs +4 -1
  213. package/es/base-ui/FloatingSheet/FloatingSheet.mjs.map +1 -1
  214. package/es/base-ui/FloatingSheet/FloatingSheetHeader.mjs.map +1 -1
  215. package/es/base-ui/Form/Form.mjs.map +1 -1
  216. package/es/base-ui/Form/components/FormField.mjs.map +1 -1
  217. package/es/base-ui/Form/components/FormGroup.mjs.map +1 -1
  218. package/es/base-ui/Form/components/FormSubmitFooter.mjs.map +1 -1
  219. package/es/base-ui/Form/components/FormTitle.mjs.map +1 -1
  220. package/es/base-ui/Input/Input.mjs.map +1 -1
  221. package/es/base-ui/Input/InputNumber.mjs.map +1 -1
  222. package/es/base-ui/Input/InputOTP.mjs.map +1 -1
  223. package/es/base-ui/Input/InputPassword.mjs.map +1 -1
  224. package/es/base-ui/Input/TextArea.mjs.map +1 -1
  225. package/es/base-ui/Modal/Modal.mjs.map +1 -1
  226. package/es/base-ui/Modal/atoms.mjs +7 -5
  227. package/es/base-ui/Modal/atoms.mjs.map +1 -1
  228. package/es/base-ui/Modal/imperative.mjs +2 -1
  229. package/es/base-ui/Modal/imperative.mjs.map +1 -1
  230. package/es/base-ui/Popover/ArrowIcon.mjs.map +1 -1
  231. package/es/base-ui/Popover/PopoverGroup.mjs.map +1 -1
  232. package/es/base-ui/Popover/PopoverStandalone.mjs.map +1 -1
  233. package/es/base-ui/Popover/atoms.mjs +2 -1
  234. package/es/base-ui/Popover/atoms.mjs.map +1 -1
  235. package/es/base-ui/Popover/context.mjs +4 -2
  236. package/es/base-ui/Popover/context.mjs.map +1 -1
  237. package/es/base-ui/Radio/Radio.mjs.map +1 -1
  238. package/es/base-ui/Radio/RadioGroup.mjs.map +1 -1
  239. package/es/base-ui/ScrollArea/ScrollArea.mjs.map +1 -1
  240. package/es/base-ui/Segmented/Segmented.mjs.map +1 -1
  241. package/es/base-ui/Select/Select.mjs.map +1 -1
  242. package/es/base-ui/Select/atoms.mjs +2 -1
  243. package/es/base-ui/Select/atoms.mjs.map +1 -1
  244. package/es/base-ui/Select/parts.mjs.map +1 -1
  245. package/es/base-ui/Select/renderOptions.mjs.map +1 -1
  246. package/es/base-ui/Slider/Slider.mjs.map +1 -1
  247. package/es/base-ui/Slider/SliderWithInput.mjs.map +1 -1
  248. package/es/base-ui/SubmenuArrowIcon.mjs.map +1 -1
  249. package/es/base-ui/Switch/Switch.mjs.map +1 -1
  250. package/es/base-ui/Switch/atoms.d.mts +3 -3
  251. package/es/base-ui/Switch/atoms.mjs +99 -50
  252. package/es/base-ui/Switch/atoms.mjs.map +1 -1
  253. package/es/base-ui/Switch/style.mjs +44 -1
  254. package/es/base-ui/Switch/style.mjs.map +1 -1
  255. package/es/base-ui/Switch/type.d.mts +3 -7
  256. package/es/base-ui/Tabs/Tabs.mjs.map +1 -1
  257. package/es/base-ui/Tabs/atoms.mjs.map +1 -1
  258. package/es/base-ui/Toast/Toast.mjs.map +1 -1
  259. package/es/base-ui/Toast/imperative.mjs.map +1 -1
  260. package/es/base-ui/Tooltip/ArrowIcon.mjs.map +1 -1
  261. package/es/base-ui/Tooltip/TooltipGroup.mjs.map +1 -1
  262. package/es/base-ui/Tooltip/TooltipStandalone.mjs.map +1 -1
  263. package/es/base-ui/index.d.mts +7 -2
  264. package/es/base-ui/index.mjs +5 -2
  265. package/es/brand/LobeChat/index.mjs +0 -1
  266. package/es/brand/LobeChat/index.mjs.map +1 -1
  267. package/es/brand/LobeChatText/index.mjs.map +1 -1
  268. package/es/brand/LobeHub/index.mjs +0 -1
  269. package/es/brand/LobeHub/index.mjs.map +1 -1
  270. package/es/brand/LobeHubText/index.mjs.map +1 -1
  271. package/es/brand/Logo3d/index.mjs +2 -1
  272. package/es/brand/Logo3d/index.mjs.map +1 -1
  273. package/es/brand/LogoThree/Loading.mjs.map +1 -1
  274. package/es/brand/LogoThree/LogoSpline.mjs.map +1 -1
  275. package/es/brand/LogoThree/index.mjs.map +1 -1
  276. package/es/brand/components/Divider.mjs.map +1 -1
  277. package/es/chat/BackBottom/BackBottom.mjs.map +1 -1
  278. package/es/chat/ChatHeader/ChatHeader.mjs.map +1 -1
  279. package/es/chat/ChatHeader/ChatHeaderTitle.mjs.map +1 -1
  280. package/es/chat/ChatInputArea/ChatInputArea.mjs.map +1 -1
  281. package/es/chat/ChatInputArea/components/ChatInputActionBar.mjs.map +1 -1
  282. package/es/chat/ChatInputArea/components/ChatSendButton.mjs.map +1 -1
  283. package/es/chat/ChatItem/ChatItem.mjs.map +1 -1
  284. package/es/chat/ChatItem/components/Actions.mjs +5 -4
  285. package/es/chat/ChatItem/components/Actions.mjs.map +1 -1
  286. package/es/chat/ChatItem/components/Avatar.mjs.map +1 -1
  287. package/es/chat/ChatItem/components/ErrorContent.mjs.map +1 -1
  288. package/es/chat/ChatItem/components/Loading.mjs.map +1 -1
  289. package/es/chat/ChatItem/components/MessageContent.mjs.map +1 -1
  290. package/es/chat/ChatItem/components/Title.mjs.map +1 -1
  291. package/es/chat/ChatList/ChatList.mjs +2 -1
  292. package/es/chat/ChatList/ChatList.mjs.map +1 -1
  293. package/es/chat/ChatList/components/HistoryDivider.mjs.map +1 -1
  294. package/es/chat/EditableMessage/EditableMessage.mjs.map +1 -1
  295. package/es/chat/EditableMessageList/EditableMessageList.mjs.map +1 -1
  296. package/es/chat/LoadingDots/LoadingDots.mjs.map +1 -1
  297. package/es/chat/MessageInput/MessageInput.mjs.map +1 -1
  298. package/es/chat/MessageModal/MessageModal.mjs.map +1 -1
  299. package/es/color/ColorScales/ScaleRow.mjs +0 -2
  300. package/es/color/ColorScales/ScaleRow.mjs.map +1 -1
  301. package/es/color/ColorScales/index.mjs.map +1 -1
  302. package/es/color/CssVar/ScaleRow.mjs.map +1 -1
  303. package/es/color/CssVar/VarRow.mjs.map +1 -1
  304. package/es/color/CssVar/index.mjs.map +1 -1
  305. package/es/hooks/useMarkdown/latex.mjs.map +1 -1
  306. package/es/hooks/useMarkdown/useMarkdownContent.mjs.map +1 -1
  307. package/es/hooks/useMermaid.mjs +81 -116
  308. package/es/hooks/useMermaid.mjs.map +1 -1
  309. package/es/hooks/useMermaidCdn.d.mts +10 -0
  310. package/es/hooks/useMermaidCdn.mjs +97 -0
  311. package/es/hooks/useMermaidCdn.mjs.map +1 -0
  312. package/es/hooks/useStreamMermaid.mjs +19 -70
  313. package/es/hooks/useStreamMermaid.mjs.map +1 -1
  314. package/es/icons/Auth0/components/Mono.mjs.map +1 -1
  315. package/es/icons/Authelia/components/Color.mjs.map +1 -1
  316. package/es/icons/Authelia/components/Mono.mjs.map +1 -1
  317. package/es/icons/Authentik/components/Color.mjs.map +1 -1
  318. package/es/icons/Authentik/components/Mono.mjs.map +1 -1
  319. package/es/icons/Casdoor/components/Color.mjs.map +1 -1
  320. package/es/icons/Casdoor/components/Mono.mjs.map +1 -1
  321. package/es/icons/Clerk/components/Color.mjs.map +1 -1
  322. package/es/icons/Clerk/components/Mono.mjs.map +1 -1
  323. package/es/icons/DingTalk/components/Color.mjs.map +1 -1
  324. package/es/icons/DingTalk/components/Mono.mjs.map +1 -1
  325. package/es/icons/Discord/components/Color.mjs.map +1 -1
  326. package/es/icons/Discord/components/Mono.mjs.map +1 -1
  327. package/es/icons/GoogleChat/components/Color.mjs.map +1 -1
  328. package/es/icons/GoogleChat/components/Mono.mjs.map +1 -1
  329. package/es/icons/IMessage/components/Color.mjs.map +1 -1
  330. package/es/icons/IMessage/components/Inner.mjs.map +1 -1
  331. package/es/icons/IMessage/components/Mono.mjs.map +1 -1
  332. package/es/icons/Lark/components/Color.mjs.map +1 -1
  333. package/es/icons/Lark/components/Mono.mjs.map +1 -1
  334. package/es/icons/Line/components/Color.mjs.map +1 -1
  335. package/es/icons/Line/components/Mono.mjs.map +1 -1
  336. package/es/icons/Logto/components/Color.mjs.map +1 -1
  337. package/es/icons/Logto/components/Mono.mjs.map +1 -1
  338. package/es/icons/MicrosoftEntra/components/Color.mjs.map +1 -1
  339. package/es/icons/MicrosoftEntra/components/Mono.mjs.map +1 -1
  340. package/es/icons/MicrosoftTeams/components/Color.mjs.map +1 -1
  341. package/es/icons/MicrosoftTeams/components/Mono.mjs.map +1 -1
  342. package/es/icons/NextAuth/components/Color.mjs.map +1 -1
  343. package/es/icons/NextAuth/components/Mono.mjs.map +1 -1
  344. package/es/icons/QQ/components/Color.mjs.map +1 -1
  345. package/es/icons/QQ/components/Mono.mjs.map +1 -1
  346. package/es/icons/Slack/components/Color.mjs.map +1 -1
  347. package/es/icons/Slack/components/Mono.mjs.map +1 -1
  348. package/es/icons/Telegram/components/Color.mjs.map +1 -1
  349. package/es/icons/Telegram/components/Inner.mjs.map +1 -1
  350. package/es/icons/Telegram/components/Mono.mjs.map +1 -1
  351. package/es/icons/WeChat/components/Color.mjs.map +1 -1
  352. package/es/icons/WeChat/components/Mono.mjs.map +1 -1
  353. package/es/icons/WhatsApp/components/Color.mjs.map +1 -1
  354. package/es/icons/WhatsApp/components/Mono.mjs.map +1 -1
  355. package/es/icons/Zitadel/components/Color.mjs.map +1 -1
  356. package/es/icons/Zitadel/components/Mono.mjs.map +1 -1
  357. package/es/index.d.mts +2 -2
  358. package/es/index.mjs +2 -2
  359. package/es/mdx/Callout/index.mjs.map +1 -1
  360. package/es/mdx/Cards/Card.mjs.map +1 -1
  361. package/es/mdx/FileTree/File.mjs.map +1 -1
  362. package/es/mdx/FileTree/Folder.mjs.map +1 -1
  363. package/es/mdx/Mdx/index.mjs.map +1 -1
  364. package/es/mdx/Tabs/Tab.mjs.map +1 -1
  365. package/es/mdx/Tabs/index.mjs.map +1 -1
  366. package/es/mdx/mdxComponents/Citation/PopoverPanel.mjs.map +1 -1
  367. package/es/mdx/mdxComponents/Citation/index.mjs.map +1 -1
  368. package/es/mdx/mdxComponents/CodeBlock.mjs.map +1 -1
  369. package/es/mdx/mdxComponents/Link.mjs.map +1 -1
  370. package/es/mobile/ChatHeader/ChatHeader.mjs.map +1 -1
  371. package/es/mobile/ChatHeader/ChatHeaderTitle.mjs.map +1 -1
  372. package/es/mobile/ChatInputArea/ChatInputArea.mjs.map +1 -1
  373. package/es/mobile/TabBar/TabBar.mjs.map +1 -1
  374. package/es/storybook/StoryBook/index.mjs.map +1 -1
  375. package/package.json +3 -4
@@ -1,35 +1,14 @@
1
+ import { THEMES } from "beautiful-mermaid";
1
2
  //#region src/Mermaid/const.ts
2
- const mermaidThemes = [
3
- {
4
- displayName: "Lobe Theme",
5
- id: "lobe-theme"
6
- },
7
- {
8
- background: "#fbf9ff",
9
- displayName: "Mermaid Default",
10
- id: "default"
11
- },
12
- {
13
- background: "#fffcf8",
14
- displayName: "Mermaid Base",
15
- id: "base"
16
- },
17
- {
18
- background: "#000",
19
- displayName: "Mermaid Dark",
20
- id: "dark"
21
- },
22
- {
23
- background: "#f9ffeb",
24
- displayName: "Mermaid Forest",
25
- id: "forest"
26
- },
27
- {
28
- background: "#fff",
29
- displayName: "Mermaid Neutral",
30
- id: "neutral"
31
- }
32
- ];
3
+ const toDisplayName = (id) => id.split("-").map((word) => word.charAt(0).toUpperCase() + word.slice(1)).join(" ");
4
+ const mermaidThemes = [{
5
+ displayName: "Lobe Theme",
6
+ id: "lobe-theme"
7
+ }, ...Object.entries(THEMES).map(([id, colors]) => ({
8
+ background: colors.bg,
9
+ displayName: toDisplayName(id),
10
+ id
11
+ }))];
33
12
  //#endregion
34
13
  export { mermaidThemes };
35
14
 
@@ -1 +1 @@
1
- {"version":3,"file":"const.mjs","names":[],"sources":["../../src/Mermaid/const.ts"],"sourcesContent":["interface MermaidThemeItem {\n background?: string;\n displayName: string;\n id: string;\n}\n\nexport const mermaidThemes: MermaidThemeItem[] = [\n {\n displayName: 'Lobe Theme',\n id: 'lobe-theme',\n },\n {\n background: '#fbf9ff',\n displayName: 'Mermaid Default',\n id: 'default',\n },\n {\n background: '#fffcf8',\n displayName: 'Mermaid Base',\n id: 'base',\n },\n {\n background: '#000',\n displayName: 'Mermaid Dark',\n id: 'dark',\n },\n {\n background: '#f9ffeb',\n displayName: 'Mermaid Forest',\n id: 'forest',\n },\n {\n background: '#fff',\n displayName: 'Mermaid Neutral',\n id: 'neutral',\n },\n];\n"],"mappings":";AAMA,MAAa,gBAAoC;CAC/C;EACE,aAAa;EACb,IAAI;CACN;CACA;EACE,YAAY;EACZ,aAAa;EACb,IAAI;CACN;CACA;EACE,YAAY;EACZ,aAAa;EACb,IAAI;CACN;CACA;EACE,YAAY;EACZ,aAAa;EACb,IAAI;CACN;CACA;EACE,YAAY;EACZ,aAAa;EACb,IAAI;CACN;CACA;EACE,YAAY;EACZ,aAAa;EACb,IAAI;CACN;AACF"}
1
+ {"version":3,"file":"const.mjs","names":[],"sources":["../../src/Mermaid/const.ts"],"sourcesContent":["import { THEMES } from 'beautiful-mermaid';\n\ninterface MermaidThemeItem {\n background?: string;\n displayName: string;\n id: string;\n}\n\nconst toDisplayName = (id: string) =>\n id\n .split('-')\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(' ');\n\nexport const mermaidThemes: MermaidThemeItem[] = [\n {\n displayName: 'Lobe Theme',\n id: 'lobe-theme',\n },\n ...Object.entries(THEMES).map(([id, colors]) => ({\n background: colors.bg,\n displayName: toDisplayName(id),\n id,\n })),\n];\n"],"mappings":";;AAQA,MAAM,iBAAiB,OACrB,GACG,MAAM,GAAG,CAAC,CACV,KAAK,SAAS,KAAK,OAAO,CAAC,CAAC,CAAC,YAAY,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,CAC3D,KAAK,GAAG;AAEb,MAAa,gBAAoC,CAC/C;CACE,aAAa;CACb,IAAI;AACN,GACA,GAAG,OAAO,QAAQ,MAAM,CAAC,CAAC,KAAK,CAAC,IAAI,aAAa;CAC/C,YAAY,OAAO;CACnB,aAAa,cAAc,EAAE;CAC7B;AACF,EAAE,CACJ"}
@@ -2,4 +2,5 @@ import { mermaidThemes } from "./const.mjs";
2
2
  import { MermaidProps, SyntaxMermaidProps } from "./type.mjs";
3
3
  import Mermaid from "./Mermaid.mjs";
4
4
  import SyntaxMermaid from "./SyntaxMermaid/index.mjs";
5
- export { type MermaidProps, SyntaxMermaid, type SyntaxMermaidProps, Mermaid as default, mermaidThemes };
5
+ import { getMermaidCdnUrl, setMermaidCdnUrl } from "../hooks/useMermaidCdn.mjs";
6
+ export { type MermaidProps, SyntaxMermaid, type SyntaxMermaidProps, Mermaid as default, getMermaidCdnUrl, mermaidThemes, setMermaidCdnUrl };
@@ -1,4 +1,5 @@
1
1
  import { mermaidThemes } from "./const.mjs";
2
+ import { getMermaidCdnUrl, setMermaidCdnUrl } from "../hooks/useMermaidCdn.mjs";
2
3
  import SyntaxMermaid from "./SyntaxMermaid/index.mjs";
3
4
  import Mermaid from "./Mermaid.mjs";
4
- export { SyntaxMermaid, Mermaid as default, mermaidThemes };
5
+ export { SyntaxMermaid, Mermaid as default, getMermaidCdnUrl, mermaidThemes, setMermaidCdnUrl };
@@ -2,7 +2,7 @@ import { DivProps } from "../types/index.mjs";
2
2
  import { ActionIconProps } from "../ActionIcon/type.mjs";
3
3
  import "../ActionIcon/index.mjs";
4
4
  import { CSSProperties, ReactNode, Ref } from "react";
5
- import { MermaidConfig } from "mermaid";
5
+ import { ThemeName } from "beautiful-mermaid";
6
6
  //#region src/Mermaid/type.d.ts
7
7
  interface SyntaxMermaidProps {
8
8
  animated?: boolean;
@@ -45,7 +45,7 @@ interface MermaidProps extends DivProps {
45
45
  content?: CSSProperties;
46
46
  header?: CSSProperties;
47
47
  };
48
- theme?: 'lobe-theme' | MermaidConfig['theme'];
48
+ theme?: 'lobe-theme' | ThemeName;
49
49
  variant?: 'filled' | 'outlined' | 'borderless';
50
50
  }
51
51
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"Modal.mjs","names":["Modal","AntModal"],"sources":["../../src/Modal/Modal.tsx"],"sourcesContent":["'use client';\n\nimport { Button, ConfigProvider, Drawer, type DrawerProps, Modal as AntModal } from 'antd';\nimport { cssVar, cx, useResponsive } from 'antd-style';\nimport { Maximize2, Minimize2, X } from 'lucide-react';\nimport { memo, type ReactNode, useState } from 'react';\n\nimport ActionIcon from '@/ActionIcon';\nimport Icon from '@/Icon';\n\nimport { styles } from './style';\nimport { type ModalProps } from './type';\n\n/**\n * @deprecated Use `Modal` from `@lobehub/ui/base-ui` instead.\n */\nconst Modal = memo<ModalProps>(\n ({\n panelRef,\n allowFullscreen,\n children,\n title = ' ',\n className,\n classNames,\n width = 700,\n onCancel,\n open,\n destroyOnHidden,\n paddings,\n height = '75dvh',\n enableResponsive = true,\n footer,\n styles: customStyles,\n okText,\n onOk,\n cancelText,\n okButtonProps,\n cancelButtonProps,\n confirmLoading,\n ...rest\n }) => {\n const [fullscreen, setFullscreen] = useState(false);\n const { mobile } = useResponsive();\n const hideFooter = footer === false || footer === null;\n if (enableResponsive && mobile)\n return (\n <ConfigProvider\n theme={{\n token: {\n colorBgElevated: cssVar.colorBgContainer,\n },\n }}\n >\n <Drawer\n className={cx(styles.drawerContent, className)}\n closeIcon={<ActionIcon icon={X} />}\n destroyOnHidden={destroyOnHidden}\n height={fullscreen ? 'calc(100% - env(safe-area-inset-top))' : height}\n open={open}\n panelRef={panelRef}\n placement={'bottom'}\n title={title}\n classNames={\n (typeof classNames === 'function'\n ? classNames\n : {\n ...classNames,\n wrapper: cx(styles.wrap, classNames?.wrapper),\n }) as DrawerProps['classNames']\n }\n extra={\n allowFullscreen && (\n <ActionIcon\n icon={fullscreen ? Minimize2 : Maximize2}\n onClick={() => setFullscreen(!fullscreen)}\n />\n )\n }\n footer={\n hideFooter\n ? null\n : (footer as ReactNode) || (\n <>\n <Button\n color={'default'}\n variant={'filled'}\n onClick={onCancel as any}\n {...cancelButtonProps}\n >\n {cancelText || 'Cancel'}\n </Button>\n <Button\n loading={confirmLoading}\n type=\"primary\"\n onClick={onOk as any}\n {...okButtonProps}\n style={{\n marginInlineStart: 8,\n ...okButtonProps?.style,\n }}\n >\n {okText || 'OK'}\n </Button>\n </>\n )\n }\n styles={\n (typeof customStyles === 'function'\n ? customStyles\n : {\n ...customStyles,\n body: {\n paddingBlock: `16px ${footer ? 0 : '16px'}`,\n paddingInline: paddings?.desktop ?? 16,\n ...customStyles?.body,\n },\n }) as DrawerProps['styles']\n }\n onClose={onCancel as any}\n {...rest}\n >\n {children}\n </Drawer>\n </ConfigProvider>\n );\n\n return (\n <ConfigProvider\n theme={{\n token: {\n colorBgElevated: cssVar.colorBgContainer,\n },\n }}\n >\n <AntModal\n closable\n cancelText={cancelText}\n className={cx(styles.content, className)}\n closeIcon={<Icon icon={X} size={20} />}\n confirmLoading={confirmLoading}\n destroyOnHidden={destroyOnHidden}\n footer={hideFooter ? null : footer}\n mask={{ closable: true }}\n okButtonProps={okButtonProps}\n okText={okText}\n open={open}\n panelRef={panelRef}\n title={title}\n width={width}\n cancelButtonProps={{\n color: 'default',\n variant: 'filled',\n ...cancelButtonProps,\n }}\n classNames={\n typeof classNames === 'function'\n ? classNames\n : {\n ...classNames,\n wrapper: cx(styles.wrap, classNames?.wrapper),\n }\n }\n styles={\n typeof customStyles === 'function'\n ? customStyles\n : {\n ...customStyles,\n body: {\n maxHeight: height,\n overflow: 'hidden auto',\n paddingBlock: `0 ${footer === null ? '16px' : 0}`,\n paddingInline: paddings?.desktop ?? 16,\n ...customStyles?.body,\n },\n }\n }\n onCancel={onCancel}\n onOk={onOk}\n {...rest}\n >\n {children}\n </AntModal>\n </ConfigProvider>\n );\n },\n);\n\nModal.displayName = 'Modal';\n\nexport default Modal;\n"],"mappings":";;;;;;;;;;;;;AAgBA,MAAMA,UAAQ,MACX,EACC,UACA,iBACA,UACA,QAAQ,KACR,WACA,YACA,QAAQ,KACR,UACA,MACA,iBACA,UACA,SAAS,SACT,mBAAmB,MACnB,QACA,QAAQ,cACR,QACA,MACA,YACA,eACA,mBACA,gBACA,GAAG,WACC;CACJ,MAAM,CAAC,YAAY,iBAAiB,SAAS,KAAK;CAClD,MAAM,EAAE,WAAW,cAAc;CACjC,MAAM,aAAa,WAAW,SAAS,WAAW;CAClD,IAAI,oBAAoB,QACtB,OACE,oBAAC,gBAAD;EACE,OAAO,EACL,OAAO,EACL,iBAAiB,OAAO,iBAC1B,EACF;YAEA,oBAAC,QAAD;GACE,WAAW,GAAG,OAAO,eAAe,SAAS;GAC7C,WAAW,oBAAC,YAAD,EAAY,MAAM,EAAI,CAAA;GAChB;GACjB,QAAQ,aAAa,0CAA0C;GACzD;GACI;GACV,WAAW;GACJ;GACP,YACG,OAAO,eAAe,aACnB,aACA;IACE,GAAG;IACH,SAAS,GAAG,OAAO,MAAM,YAAY,OAAO;GAC9C;GAEN,OACE,mBACE,oBAAC,YAAD;IACE,MAAM,aAAa,YAAY;IAC/B,eAAe,cAAc,CAAC,UAAU;GACzC,CAAA;GAGL,QACE,aACI,OACC,UACC,qBAAA,YAAA,EAAA,UAAA,CACE,oBAAC,QAAD;IACE,OAAO;IACP,SAAS;IACT,SAAS;IACT,GAAI;cAEH,cAAc;GACT,CAAA,GACR,oBAAC,QAAD;IACE,SAAS;IACT,MAAK;IACL,SAAS;IACT,GAAI;IACJ,OAAO;KACL,mBAAmB;KACnB,GAAG,eAAe;IACpB;cAEC,UAAU;GACL,CAAA,CACR,EAAA,CAAA;GAGV,QACG,OAAO,iBAAiB,aACrB,eACA;IACE,GAAG;IACH,MAAM;KACJ,cAAc,QAAQ,SAAS,IAAI;KACnC,eAAe,UAAU,WAAW;KACpC,GAAG,cAAc;IACnB;GACF;GAEN,SAAS;GACT,GAAI;GAEH;EACK,CAAA;CACM,CAAA;CAGpB,OACE,oBAAC,gBAAD;EACE,OAAO,EACL,OAAO,EACL,iBAAiB,OAAO,iBAC1B,EACF;YAEA,oBAACC,OAAD;GACE,UAAA;GACY;GACZ,WAAW,GAAG,OAAO,SAAS,SAAS;GACvC,WAAW,oBAAC,MAAD;IAAM,MAAM;IAAG,MAAM;GAAK,CAAA;GACrB;GACC;GACjB,QAAQ,aAAa,OAAO;GAC5B,MAAM,EAAE,UAAU,KAAK;GACR;GACP;GACF;GACI;GACH;GACA;GACP,mBAAmB;IACjB,OAAO;IACP,SAAS;IACT,GAAG;GACL;GACA,YACE,OAAO,eAAe,aAClB,aACA;IACE,GAAG;IACH,SAAS,GAAG,OAAO,MAAM,YAAY,OAAO;GAC9C;GAEN,QACE,OAAO,iBAAiB,aACpB,eACA;IACE,GAAG;IACH,MAAM;KACJ,WAAW;KACX,UAAU;KACV,cAAc,KAAK,WAAW,OAAO,SAAS;KAC9C,eAAe,UAAU,WAAW;KACpC,GAAG,cAAc;IACnB;GACF;GAEI;GACJ;GACN,GAAI;GAEH;EACO,CAAA;CACI,CAAA;AAEpB,CACF;AAEA,QAAM,cAAc"}
1
+ {"version":3,"file":"Modal.mjs","names":["Modal","AntModal"],"sources":["../../src/Modal/Modal.tsx"],"sourcesContent":["'use client';\n\nimport { Button, ConfigProvider, Drawer, type DrawerProps, Modal as AntModal } from 'antd';\nimport { cssVar, cx, useResponsive } from 'antd-style';\nimport { Maximize2, Minimize2, X } from 'lucide-react';\nimport { memo, type ReactNode, useState } from 'react';\n\nimport ActionIcon from '@/ActionIcon';\nimport Icon from '@/Icon';\n\nimport { styles } from './style';\nimport { type ModalProps } from './type';\n\n/**\n * @deprecated Use `Modal` from `@lobehub/ui/base-ui` instead.\n */\nconst Modal = memo<ModalProps>(\n ({\n panelRef,\n allowFullscreen,\n children,\n title = ' ',\n className,\n classNames,\n width = 700,\n onCancel,\n open,\n destroyOnHidden,\n paddings,\n height = '75dvh',\n enableResponsive = true,\n footer,\n styles: customStyles,\n okText,\n onOk,\n cancelText,\n okButtonProps,\n cancelButtonProps,\n confirmLoading,\n ...rest\n }) => {\n const [fullscreen, setFullscreen] = useState(false);\n const { mobile } = useResponsive();\n const hideFooter = footer === false || footer === null;\n if (enableResponsive && mobile)\n return (\n <ConfigProvider\n theme={{\n token: {\n colorBgElevated: cssVar.colorBgContainer,\n },\n }}\n >\n <Drawer\n className={cx(styles.drawerContent, className)}\n closeIcon={<ActionIcon icon={X} />}\n destroyOnHidden={destroyOnHidden}\n height={fullscreen ? 'calc(100% - env(safe-area-inset-top))' : height}\n open={open}\n panelRef={panelRef}\n placement={'bottom'}\n title={title}\n classNames={\n (typeof classNames === 'function'\n ? classNames\n : {\n ...classNames,\n wrapper: cx(styles.wrap, classNames?.wrapper),\n }) as DrawerProps['classNames']\n }\n extra={\n allowFullscreen && (\n <ActionIcon\n icon={fullscreen ? Minimize2 : Maximize2}\n onClick={() => setFullscreen(!fullscreen)}\n />\n )\n }\n footer={\n hideFooter\n ? null\n : (footer as ReactNode) || (\n <>\n <Button\n color={'default'}\n variant={'filled'}\n onClick={onCancel as any}\n {...cancelButtonProps}\n >\n {cancelText || 'Cancel'}\n </Button>\n <Button\n loading={confirmLoading}\n type=\"primary\"\n onClick={onOk as any}\n {...okButtonProps}\n style={{\n marginInlineStart: 8,\n ...okButtonProps?.style,\n }}\n >\n {okText || 'OK'}\n </Button>\n </>\n )\n }\n styles={\n (typeof customStyles === 'function'\n ? customStyles\n : {\n ...customStyles,\n body: {\n paddingBlock: `16px ${footer ? 0 : '16px'}`,\n paddingInline: paddings?.desktop ?? 16,\n ...customStyles?.body,\n },\n }) as DrawerProps['styles']\n }\n onClose={onCancel as any}\n {...rest}\n >\n {children}\n </Drawer>\n </ConfigProvider>\n );\n\n return (\n <ConfigProvider\n theme={{\n token: {\n colorBgElevated: cssVar.colorBgContainer,\n },\n }}\n >\n <AntModal\n closable\n cancelText={cancelText}\n className={cx(styles.content, className)}\n closeIcon={<Icon icon={X} size={20} />}\n confirmLoading={confirmLoading}\n destroyOnHidden={destroyOnHidden}\n footer={hideFooter ? null : footer}\n mask={{ closable: true }}\n okButtonProps={okButtonProps}\n okText={okText}\n open={open}\n panelRef={panelRef}\n title={title}\n width={width}\n cancelButtonProps={{\n color: 'default',\n variant: 'filled',\n ...cancelButtonProps,\n }}\n classNames={\n typeof classNames === 'function'\n ? classNames\n : {\n ...classNames,\n wrapper: cx(styles.wrap, classNames?.wrapper),\n }\n }\n styles={\n typeof customStyles === 'function'\n ? customStyles\n : {\n ...customStyles,\n body: {\n maxHeight: height,\n overflow: 'hidden auto',\n paddingBlock: `0 ${footer === null ? '16px' : 0}`,\n paddingInline: paddings?.desktop ?? 16,\n ...customStyles?.body,\n },\n }\n }\n onCancel={onCancel}\n onOk={onOk}\n {...rest}\n >\n {children}\n </AntModal>\n </ConfigProvider>\n );\n },\n);\n\nModal.displayName = 'Modal';\n\nexport default Modal;\n"],"mappings":";;;;;;;;;;;;;AAgBA,MAAMA,UAAQ,MACX,EACC,UACA,iBACA,UACA,QAAQ,KACR,WACA,YACA,QAAQ,KACR,UACA,MACA,iBACA,UACA,SAAS,SACT,mBAAmB,MACnB,QACA,QAAQ,cACR,QACA,MACA,YACA,eACA,mBACA,gBACA,GAAG,WACC;CACJ,MAAM,CAAC,YAAY,iBAAiB,SAAS,KAAK;CAClD,MAAM,EAAE,WAAW,cAAc;CACjC,MAAM,aAAa,WAAW,SAAS,WAAW;CAClD,IAAI,oBAAoB,QACtB,OACE,oBAAC,gBAAD;EACE,OAAO,EACL,OAAO,EACL,iBAAiB,OAAO,iBAC1B,EACF;EAEA,UAAA,oBAAC,QAAD;GACE,WAAW,GAAG,OAAO,eAAe,SAAS;GAC7C,WAAW,oBAAC,YAAD,EAAY,MAAM,EAAI,CAAA;GAChB;GACjB,QAAQ,aAAa,0CAA0C;GACzD;GACI;GACV,WAAW;GACJ;GACP,YACG,OAAO,eAAe,aACnB,aACA;IACE,GAAG;IACH,SAAS,GAAG,OAAO,MAAM,YAAY,OAAO;GAC9C;GAEN,OACE,mBACE,oBAAC,YAAD;IACE,MAAM,aAAa,YAAY;IAC/B,eAAe,cAAc,CAAC,UAAU;GACzC,CAAA;GAGL,QACE,aACI,OACC,UACC,qBAAA,YAAA,EAAA,UAAA,CACE,oBAAC,QAAD;IACE,OAAO;IACP,SAAS;IACT,SAAS;IACT,GAAI;IAEH,UAAA,cAAc;GACT,CAAA,GACR,oBAAC,QAAD;IACE,SAAS;IACT,MAAK;IACL,SAAS;IACT,GAAI;IACJ,OAAO;KACL,mBAAmB;KACnB,GAAG,eAAe;IACpB;IAEC,UAAA,UAAU;GACL,CAAA,CACR,EAAA,CAAA;GAGV,QACG,OAAO,iBAAiB,aACrB,eACA;IACE,GAAG;IACH,MAAM;KACJ,cAAc,QAAQ,SAAS,IAAI;KACnC,eAAe,UAAU,WAAW;KACpC,GAAG,cAAc;IACnB;GACF;GAEN,SAAS;GACT,GAAI;GAEH;EACK,CAAA;CACM,CAAA;CAGpB,OACE,oBAAC,gBAAD;EACE,OAAO,EACL,OAAO,EACL,iBAAiB,OAAO,iBAC1B,EACF;EAEA,UAAA,oBAACC,OAAD;GACE,UAAA;GACY;GACZ,WAAW,GAAG,OAAO,SAAS,SAAS;GACvC,WAAW,oBAAC,MAAD;IAAM,MAAM;IAAG,MAAM;GAAK,CAAA;GACrB;GACC;GACjB,QAAQ,aAAa,OAAO;GAC5B,MAAM,EAAE,UAAU,KAAK;GACR;GACP;GACF;GACI;GACH;GACA;GACP,mBAAmB;IACjB,OAAO;IACP,SAAS;IACT,GAAG;GACL;GACA,YACE,OAAO,eAAe,aAClB,aACA;IACE,GAAG;IACH,SAAS,GAAG,OAAO,MAAM,YAAY,OAAO;GAC9C;GAEN,QACE,OAAO,iBAAiB,aACpB,eACA;IACE,GAAG;IACH,MAAM;KACJ,WAAW;KACX,UAAU;KACV,cAAc,KAAK,WAAW,OAAO,SAAS;KAC9C,eAAe,UAAU,WAAW;KACpC,GAAG,cAAc;IACnB;GACF;GAEI;GACJ;GACN,GAAI;GAEH;EACO,CAAA;CACI,CAAA;AAEpB,CACF;AAEA,QAAM,cAAc"}
@@ -1 +1 @@
1
- {"version":3,"file":"ModalStackItem.mjs","names":[],"sources":["../../src/Modal/ModalStackItem.tsx"],"sourcesContent":["'use client';\n\nimport { memo, useCallback, useMemo } from 'react';\n\nimport { useEventCallback } from '@/hooks/useEventCallback';\n\nimport Modal from './Modal';\nimport { ModalProvider } from './ModalProvider';\nimport type { ImperativeModalProps } from './type';\n\nexport type ModalStackItemProps = {\n id: string;\n onClose: (id: string) => void;\n onDestroy: (id: string) => void;\n onUpdate: (id: string, nextProps: Partial<ImperativeModalProps>) => void;\n props: ImperativeModalProps;\n};\n\nconst noop = () => {};\nexport const ModalStackItem = memo(\n ({ id, props, onClose, onUpdate, onDestroy }: ModalStackItemProps) => {\n const { afterClose, afterOpenChange, children, onCancel, open, ...rest } = props;\n const stableAfterClose = useEventCallback(afterClose ?? noop);\n const stableAfterOpenChange = useEventCallback(afterOpenChange ?? noop);\n const stableOnCancel = useEventCallback(onCancel ?? noop);\n const close = useEventCallback(() => onClose(id));\n const setCanDismissByClickOutside = useEventCallback((value: boolean) =>\n onUpdate(id, { mask: { closable: value } }),\n );\n const stableContextValue = useMemo(\n () => ({ close, setCanDismissByClickOutside }),\n [close, setCanDismissByClickOutside],\n );\n\n return (\n <Modal\n {...rest}\n open={open ?? true}\n afterClose={useCallback(() => {\n stableAfterClose?.();\n onDestroy(id);\n }, [stableAfterClose, onDestroy, id])}\n afterOpenChange={useCallback(\n (nextOpen: boolean) => {\n stableAfterOpenChange?.(nextOpen);\n if (!nextOpen) onDestroy(id);\n },\n [stableAfterOpenChange, onDestroy, id],\n )}\n onCancel={useCallback(\n (e: React.MouseEvent<HTMLButtonElement> | React.KeyboardEvent<HTMLElement>) => {\n stableOnCancel?.(e);\n close();\n },\n [stableOnCancel, close],\n )}\n >\n <ModalProvider value={stableContextValue}>{children}</ModalProvider>\n </Modal>\n );\n },\n);\n\nModalStackItem.displayName = 'ModalStackItem';\n"],"mappings":";;;;;;;AAkBA,MAAM,aAAa,CAAC;AACpB,MAAa,iBAAiB,MAC3B,EAAE,IAAI,OAAO,SAAS,UAAU,gBAAqC;CACpE,MAAM,EAAE,YAAY,iBAAiB,UAAU,UAAU,MAAM,GAAG,SAAS;CAC3E,MAAM,mBAAmB,iBAAiB,cAAc,IAAI;CAC5D,MAAM,wBAAwB,iBAAiB,mBAAmB,IAAI;CACtE,MAAM,iBAAiB,iBAAiB,YAAY,IAAI;CACxD,MAAM,QAAQ,uBAAuB,QAAQ,EAAE,CAAC;CAChD,MAAM,8BAA8B,kBAAkB,UACpD,SAAS,IAAI,EAAE,MAAM,EAAE,UAAU,MAAM,EAAE,CAAC,CAC5C;CACA,MAAM,qBAAqB,eAClB;EAAE;EAAO;CAA4B,IAC5C,CAAC,OAAO,2BAA2B,CACrC;CAEA,OACE,oBAAC,OAAD;EACE,GAAI;EACJ,MAAM,QAAQ;EACd,YAAY,kBAAkB;GAC5B,mBAAmB;GACnB,UAAU,EAAE;EACd,GAAG;GAAC;GAAkB;GAAW;EAAE,CAAC;EACpC,iBAAiB,aACd,aAAsB;GACrB,wBAAwB,QAAQ;GAChC,IAAI,CAAC,UAAU,UAAU,EAAE;EAC7B,GACA;GAAC;GAAuB;GAAW;EAAE,CACvC;EACA,UAAU,aACP,MAA8E;GAC7E,iBAAiB,CAAC;GAClB,MAAM;EACR,GACA,CAAC,gBAAgB,KAAK,CACxB;YAEA,oBAAC,eAAD;GAAe,OAAO;GAAqB;EAAwB,CAAA;CAC9D,CAAA;AAEX,CACF;AAEA,eAAe,cAAc"}
1
+ {"version":3,"file":"ModalStackItem.mjs","names":[],"sources":["../../src/Modal/ModalStackItem.tsx"],"sourcesContent":["'use client';\n\nimport { memo, useCallback, useMemo } from 'react';\n\nimport { useEventCallback } from '@/hooks/useEventCallback';\n\nimport Modal from './Modal';\nimport { ModalProvider } from './ModalProvider';\nimport type { ImperativeModalProps } from './type';\n\nexport type ModalStackItemProps = {\n id: string;\n onClose: (id: string) => void;\n onDestroy: (id: string) => void;\n onUpdate: (id: string, nextProps: Partial<ImperativeModalProps>) => void;\n props: ImperativeModalProps;\n};\n\nconst noop = () => {};\nexport const ModalStackItem = memo(\n ({ id, props, onClose, onUpdate, onDestroy }: ModalStackItemProps) => {\n const { afterClose, afterOpenChange, children, onCancel, open, ...rest } = props;\n const stableAfterClose = useEventCallback(afterClose ?? noop);\n const stableAfterOpenChange = useEventCallback(afterOpenChange ?? noop);\n const stableOnCancel = useEventCallback(onCancel ?? noop);\n const close = useEventCallback(() => onClose(id));\n const setCanDismissByClickOutside = useEventCallback((value: boolean) =>\n onUpdate(id, { mask: { closable: value } }),\n );\n const stableContextValue = useMemo(\n () => ({ close, setCanDismissByClickOutside }),\n [close, setCanDismissByClickOutside],\n );\n\n return (\n <Modal\n {...rest}\n open={open ?? true}\n afterClose={useCallback(() => {\n stableAfterClose?.();\n onDestroy(id);\n }, [stableAfterClose, onDestroy, id])}\n afterOpenChange={useCallback(\n (nextOpen: boolean) => {\n stableAfterOpenChange?.(nextOpen);\n if (!nextOpen) onDestroy(id);\n },\n [stableAfterOpenChange, onDestroy, id],\n )}\n onCancel={useCallback(\n (e: React.MouseEvent<HTMLButtonElement> | React.KeyboardEvent<HTMLElement>) => {\n stableOnCancel?.(e);\n close();\n },\n [stableOnCancel, close],\n )}\n >\n <ModalProvider value={stableContextValue}>{children}</ModalProvider>\n </Modal>\n );\n },\n);\n\nModalStackItem.displayName = 'ModalStackItem';\n"],"mappings":";;;;;;;AAkBA,MAAM,aAAa,CAAC;AACpB,MAAa,iBAAiB,MAC3B,EAAE,IAAI,OAAO,SAAS,UAAU,gBAAqC;CACpE,MAAM,EAAE,YAAY,iBAAiB,UAAU,UAAU,MAAM,GAAG,SAAS;CAC3E,MAAM,mBAAmB,iBAAiB,cAAc,IAAI;CAC5D,MAAM,wBAAwB,iBAAiB,mBAAmB,IAAI;CACtE,MAAM,iBAAiB,iBAAiB,YAAY,IAAI;CACxD,MAAM,QAAQ,uBAAuB,QAAQ,EAAE,CAAC;CAChD,MAAM,8BAA8B,kBAAkB,UACpD,SAAS,IAAI,EAAE,MAAM,EAAE,UAAU,MAAM,EAAE,CAAC,CAC5C;CACA,MAAM,qBAAqB,eAClB;EAAE;EAAO;CAA4B,IAC5C,CAAC,OAAO,2BAA2B,CACrC;CAEA,OACE,oBAAC,OAAD;EACE,GAAI;EACJ,MAAM,QAAQ;EACd,YAAY,kBAAkB;GAC5B,mBAAmB;GACnB,UAAU,EAAE;EACd,GAAG;GAAC;GAAkB;GAAW;EAAE,CAAC;EACpC,iBAAiB,aACd,aAAsB;GACrB,wBAAwB,QAAQ;GAChC,IAAI,CAAC,UAAU,UAAU,EAAE;EAC7B,GACA;GAAC;GAAuB;GAAW;EAAE,CACvC;EACA,UAAU,aACP,MAA8E;GAC7E,iBAAiB,CAAC;GAClB,MAAM;EACR,GACA,CAAC,gBAAgB,KAAK,CACxB;EAEA,UAAA,oBAAC,eAAD;GAAe,OAAO;GAAqB;EAAwB,CAAA;CAC9D,CAAA;AAEX,CACF;AAEA,eAAe,cAAc"}
@@ -16,13 +16,14 @@ const RawModalStackItem = memo(({ component: Component, id, onClose, onUpdate, o
16
16
  }), [close, setCanDismissByClickOutside]);
17
17
  const openKey = options?.openKey ?? "open";
18
18
  const onCloseKey = options?.onCloseKey ?? "onClose";
19
+ const injectedProps = {
20
+ ...props,
21
+ [onCloseKey]: close,
22
+ [openKey]: open
23
+ };
19
24
  return /* @__PURE__ */ jsx(ModalProvider, {
20
25
  value: contextValue,
21
- children: /* @__PURE__ */ jsx(Component, {
22
- ...props,
23
- [onCloseKey]: close,
24
- [openKey]: open
25
- })
26
+ children: /* @__PURE__ */ jsx(Component, { ...injectedProps })
26
27
  });
27
28
  });
28
29
  RawModalStackItem.displayName = "RawModalStackItem";
@@ -1 +1 @@
1
- {"version":3,"file":"RawModalStackItem.mjs","names":[],"sources":["../../src/Modal/RawModalStackItem.tsx"],"sourcesContent":["'use client';\n\nimport type { ComponentType } from 'react';\nimport { memo, useMemo } from 'react';\n\nimport { useEventCallback } from '@/hooks/useEventCallback';\n\nimport { ModalProvider } from './ModalProvider';\nimport type { ModalContextValue, RawModalOptions } from './type';\n\nexport type RawModalStackItemProps = {\n component: ComponentType<any>;\n id: string;\n onClose: (id: string) => void;\n onUpdate: (id: string, nextProps: Record<string, unknown>) => void;\n open: boolean;\n options?: RawModalOptions<PropertyKey, PropertyKey>;\n props: Record<string, unknown>;\n};\n\nexport const RawModalStackItem = memo(\n ({\n component: Component,\n id,\n onClose,\n onUpdate,\n open,\n options,\n props,\n }: RawModalStackItemProps) => {\n const stableOnClose = useEventCallback(onClose);\n const close = useEventCallback(() => stableOnClose(id));\n\n const setCanDismissByClickOutside = useEventCallback((value: boolean) => {\n onUpdate(id, { mask: { closable: value } });\n });\n const contextValue: ModalContextValue = useMemo(\n () => ({ close, setCanDismissByClickOutside }),\n [close, setCanDismissByClickOutside],\n );\n const openKey = options?.openKey ?? 'open';\n const onCloseKey = options?.onCloseKey ?? 'onClose';\n const injectedProps = {\n ...props,\n [onCloseKey]: close,\n [openKey]: open,\n };\n\n return (\n <ModalProvider value={contextValue}>\n <Component {...injectedProps} />\n </ModalProvider>\n );\n },\n);\n\nRawModalStackItem.displayName = 'RawModalStackItem';\n"],"mappings":";;;;;;AAoBA,MAAa,oBAAoB,MAC9B,EACC,WAAW,WACX,IACA,SACA,UACA,MACA,SACA,YAC4B;CAC5B,MAAM,gBAAgB,iBAAiB,OAAO;CAC9C,MAAM,QAAQ,uBAAuB,cAAc,EAAE,CAAC;CAEtD,MAAM,8BAA8B,kBAAkB,UAAmB;EACvE,SAAS,IAAI,EAAE,MAAM,EAAE,UAAU,MAAM,EAAE,CAAC;CAC5C,CAAC;CACD,MAAM,eAAkC,eAC/B;EAAE;EAAO;CAA4B,IAC5C,CAAC,OAAO,2BAA2B,CACrC;CACA,MAAM,UAAU,SAAS,WAAW;CACpC,MAAM,aAAa,SAAS,cAAc;CAO1C,OACE,oBAAC,eAAD;EAAe,OAAO;YACpB,oBAAC,WAAD;GAPF,GAAG;IACF,aAAa;IACb,UAAU;EAKsB,CAAA;CAClB,CAAA;AAEnB,CACF;AAEA,kBAAkB,cAAc"}
1
+ {"version":3,"file":"RawModalStackItem.mjs","names":[],"sources":["../../src/Modal/RawModalStackItem.tsx"],"sourcesContent":["'use client';\n\nimport type { ComponentType } from 'react';\nimport { memo, useMemo } from 'react';\n\nimport { useEventCallback } from '@/hooks/useEventCallback';\n\nimport { ModalProvider } from './ModalProvider';\nimport type { ModalContextValue, RawModalOptions } from './type';\n\nexport type RawModalStackItemProps = {\n component: ComponentType<any>;\n id: string;\n onClose: (id: string) => void;\n onUpdate: (id: string, nextProps: Record<string, unknown>) => void;\n open: boolean;\n options?: RawModalOptions<PropertyKey, PropertyKey>;\n props: Record<string, unknown>;\n};\n\nexport const RawModalStackItem = memo(\n ({\n component: Component,\n id,\n onClose,\n onUpdate,\n open,\n options,\n props,\n }: RawModalStackItemProps) => {\n const stableOnClose = useEventCallback(onClose);\n const close = useEventCallback(() => stableOnClose(id));\n\n const setCanDismissByClickOutside = useEventCallback((value: boolean) => {\n onUpdate(id, { mask: { closable: value } });\n });\n const contextValue: ModalContextValue = useMemo(\n () => ({ close, setCanDismissByClickOutside }),\n [close, setCanDismissByClickOutside],\n );\n const openKey = options?.openKey ?? 'open';\n const onCloseKey = options?.onCloseKey ?? 'onClose';\n const injectedProps = {\n ...props,\n [onCloseKey]: close,\n [openKey]: open,\n };\n\n return (\n <ModalProvider value={contextValue}>\n <Component {...injectedProps} />\n </ModalProvider>\n );\n },\n);\n\nRawModalStackItem.displayName = 'RawModalStackItem';\n"],"mappings":";;;;;;AAoBA,MAAa,oBAAoB,MAC9B,EACC,WAAW,WACX,IACA,SACA,UACA,MACA,SACA,YAC4B;CAC5B,MAAM,gBAAgB,iBAAiB,OAAO;CAC9C,MAAM,QAAQ,uBAAuB,cAAc,EAAE,CAAC;CAEtD,MAAM,8BAA8B,kBAAkB,UAAmB;EACvE,SAAS,IAAI,EAAE,MAAM,EAAE,UAAU,MAAM,EAAE,CAAC;CAC5C,CAAC;CACD,MAAM,eAAkC,eAC/B;EAAE;EAAO;CAA4B,IAC5C,CAAC,OAAO,2BAA2B,CACrC;CACA,MAAM,UAAU,SAAS,WAAW;CACpC,MAAM,aAAa,SAAS,cAAc;CAC1C,MAAM,gBAAgB;EACpB,GAAG;GACF,aAAa;GACb,UAAU;CACb;CAEA,OACE,oBAAC,eAAD;EAAe,OAAO;EACpB,UAAA,oBAAC,WAAD,EAAW,GAAI,cAAgB,CAAA;CAClB,CAAA;AAEnB,CACF;AAEA,kBAAkB,cAAc"}
@@ -24,7 +24,8 @@ const getSnapshot = () => modalStack;
24
24
  const getServerSnapshot = () => EMPTY_STACK;
25
25
  const ModalPortal = ({ children, root }) => {
26
26
  const appElement = useAppElement();
27
- return createPortal(children, root ?? appElement ?? document.body);
27
+ const container = root ?? appElement ?? document.body;
28
+ return createPortal(children, container);
28
29
  };
29
30
  const updateModal = (id, nextProps) => {
30
31
  let changed = false;
@@ -135,7 +136,8 @@ const ModalHost = ({ root }) => {
135
136
  const isClient = useIsClient();
136
137
  useEffect(() => {
137
138
  if (!isClient) return;
138
- return registerDevSingleton("ModalHost", root ?? document.body);
139
+ const scope = root ?? document.body;
140
+ return registerDevSingleton("ModalHost", scope);
139
141
  }, [isClient, root]);
140
142
  if (!isClient) return null;
141
143
  if (stack.length === 0) return null;
@@ -1 +1 @@
1
- {"version":3,"file":"imperative.mjs","names":[],"sources":["../../src/Modal/imperative.tsx"],"sourcesContent":["'use client';\n\nimport type { ReactNode } from 'react';\nimport { memo, useEffect, useSyncExternalStore } from 'react';\nimport { createPortal } from 'react-dom';\n\nimport { useIsClient } from '@/hooks/useIsClient';\nimport { useAppElement } from '@/ThemeProvider';\nimport { registerDevSingleton } from '@/utils/devSingleton';\n\nimport { ModalStackItem } from './ModalStackItem';\nimport { RawModalStackItem } from './RawModalStackItem';\nimport type {\n ImperativeModalProps,\n ModalInstance,\n RawModalComponent,\n RawModalComponentProps,\n RawModalInstance,\n RawModalKeyOptions,\n RawModalOptions,\n} from './type';\n\ntype ModalStackItemBase = {\n id: string;\n};\n\ntype ModalStackItemModal = ModalStackItemBase & {\n kind: 'modal';\n props: ImperativeModalProps;\n};\n\ntype ModalStackItemRaw = ModalStackItemBase & {\n component: RawModalComponent;\n kind: 'raw';\n open: boolean;\n options?: RawModalOptions<PropertyKey, PropertyKey>;\n props: Record<string, unknown>;\n};\n\ntype TModalStackItem = ModalStackItemModal | ModalStackItemRaw;\n\ntype ModalStackProps = {\n stack: TModalStackItem[];\n};\n\nexport type ModalHostProps = {\n root?: HTMLElement | ShadowRoot | null;\n};\n\nlet modalStack: TModalStackItem[] = [];\nlet modalSeed = 0;\nconst listeners = new Set<() => void>();\nconst rawDestroyTimers = new Map<string, number>();\n\nconst notify = () => {\n listeners.forEach((listener) => listener());\n};\n\nconst subscribe = (listener: () => void) => {\n listeners.add(listener);\n return () => listeners.delete(listener);\n};\n\nconst EMPTY_STACK: TModalStackItem[] = [];\nconst getSnapshot = () => modalStack;\nconst getServerSnapshot = () => EMPTY_STACK;\n\nconst ModalPortal = ({\n children,\n root,\n}: {\n children: ReactNode;\n root?: HTMLElement | ShadowRoot | null;\n}) => {\n const appElement = useAppElement();\n const container = root ?? appElement ?? document.body;\n\n return createPortal(children, container);\n};\n\nconst updateModal = (id: string, nextProps: Partial<ImperativeModalProps>) => {\n let changed = false;\n modalStack = modalStack.map((item) => {\n if (item.id !== id) return item;\n if (item.kind !== 'modal') return item;\n changed = true;\n return {\n ...item,\n props: { ...item.props, ...nextProps },\n };\n });\n\n if (changed) notify();\n};\n\nconst updateRawProps = (id: string, nextProps: Record<string, unknown>) => {\n let changed = false;\n modalStack = modalStack.map((item) => {\n if (item.id !== id) return item;\n if (item.kind !== 'raw') return item;\n changed = true;\n return {\n ...item,\n props: { ...item.props, ...nextProps },\n };\n });\n\n if (changed) notify();\n};\n\nconst setRawOpen = (id: string, open: boolean) => {\n let changed = false;\n modalStack = modalStack.map((item) => {\n if (item.id !== id) return item;\n if (item.kind !== 'raw') return item;\n if (item.open === open) return item;\n changed = true;\n return { ...item, open };\n });\n\n if (open) {\n const timer = rawDestroyTimers.get(id);\n if (timer) {\n clearTimeout(timer);\n rawDestroyTimers.delete(id);\n }\n }\n\n if (changed) notify();\n};\n\nconst closeModal = (id: string) => {\n const target = modalStack.find((item) => item.id === id);\n if (!target) return;\n\n if (target.kind === 'modal') {\n updateModal(id, { open: false });\n return;\n }\n\n setRawOpen(id, false);\n\n const shouldDestroy = target.options?.destroyOnClose ?? true;\n if (!shouldDestroy) return;\n\n const delay = target.options?.destroyDelay ?? 200;\n const existing = rawDestroyTimers.get(id);\n if (existing) clearTimeout(existing);\n const timer = window.setTimeout(() => {\n rawDestroyTimers.delete(id);\n\n destroyModal(id);\n }, delay);\n rawDestroyTimers.set(id, timer);\n};\n\nconst destroyModal = (id: string) => {\n const timer = rawDestroyTimers.get(id);\n if (timer) {\n clearTimeout(timer);\n rawDestroyTimers.delete(id);\n }\n const nextStack = modalStack.filter((item) => item.id !== id);\n if (nextStack.length === modalStack.length) return;\n modalStack = nextStack;\n notify();\n};\n\nconst ModalStack = memo(({ stack }: ModalStackProps) => {\n const isClient = useIsClient();\n if (!isClient) return null;\n return stack.map((item) => {\n if (item.kind === 'modal') {\n return (\n <ModalStackItem\n id={item.id}\n key={item.id}\n props={item.props}\n onClose={closeModal}\n onDestroy={destroyModal}\n onUpdate={updateModal}\n />\n );\n }\n\n return (\n <RawModalStackItem\n component={item.component}\n id={item.id}\n key={item.id}\n open={item.open}\n options={item.options}\n props={item.props}\n onClose={closeModal}\n onUpdate={updateRawProps}\n />\n );\n });\n});\n\nModalStack.displayName = 'ModalStack';\n\nexport const ModalHost = ({ root }: ModalHostProps) => {\n const stack = useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);\n const isClient = useIsClient();\n\n useEffect(() => {\n if (!isClient) return;\n // Enforce singleton per portal root (dev-only).\n const scope = root ?? document.body;\n return registerDevSingleton('ModalHost', scope);\n }, [isClient, root]);\n\n if (!isClient) return null;\n if (stack.length === 0) return null;\n\n return (\n <ModalPortal root={root}>\n <ModalStack stack={stack} />\n </ModalPortal>\n );\n};\n\nexport const createModal = (props: ImperativeModalProps): ModalInstance => {\n const id = `modal-${Date.now()}-${modalSeed++}`;\n modalStack = [\n ...modalStack,\n { id, kind: 'modal', props: { ...props, open: props.open ?? true } },\n ];\n notify();\n\n return {\n close: () => closeModal(id),\n destroy: () => destroyModal(id),\n setCanDismissByClickOutside: (value) => updateModal(id, { mask: { closable: value } }),\n update: (nextProps) => updateModal(id, nextProps),\n };\n};\n\nexport function createRawModal<P extends RawModalComponentProps>(\n component: RawModalComponent<P>,\n props: Omit<P, 'open' | 'onClose'>,\n options?: RawModalOptions,\n): RawModalInstance<P>;\n\nexport function createRawModal<P, OpenKey extends keyof P, CloseKey extends keyof P>(\n component: RawModalComponent<P>,\n props: Omit<P, OpenKey | CloseKey>,\n options: RawModalKeyOptions<OpenKey, CloseKey>,\n): RawModalInstance<P, OpenKey, CloseKey>;\n\nexport function createRawModal<P, OpenKey extends keyof P, CloseKey extends keyof P>(\n component: RawModalComponent<P>,\n props: Omit<P, OpenKey | CloseKey>,\n options?: RawModalOptions<OpenKey, CloseKey>,\n): RawModalInstance<P, OpenKey, CloseKey> {\n const id = `modal-${Date.now()}-${modalSeed++}`;\n modalStack = [\n ...modalStack,\n {\n component,\n id,\n kind: 'raw',\n open: true,\n options,\n props: props as Record<string, unknown>,\n },\n ];\n notify();\n\n return {\n close: () => closeModal(id),\n destroy: () => destroyModal(id),\n setCanDismissByClickOutside: (value) => updateRawProps(id, { mask: { closable: value } }),\n update: (nextProps) => updateRawProps(id, nextProps as Record<string, unknown>),\n };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"imperative.mjs","names":[],"sources":["../../src/Modal/imperative.tsx"],"sourcesContent":["'use client';\n\nimport type { ReactNode } from 'react';\nimport { memo, useEffect, useSyncExternalStore } from 'react';\nimport { createPortal } from 'react-dom';\n\nimport { useIsClient } from '@/hooks/useIsClient';\nimport { useAppElement } from '@/ThemeProvider';\nimport { registerDevSingleton } from '@/utils/devSingleton';\n\nimport { ModalStackItem } from './ModalStackItem';\nimport { RawModalStackItem } from './RawModalStackItem';\nimport type {\n ImperativeModalProps,\n ModalInstance,\n RawModalComponent,\n RawModalComponentProps,\n RawModalInstance,\n RawModalKeyOptions,\n RawModalOptions,\n} from './type';\n\ntype ModalStackItemBase = {\n id: string;\n};\n\ntype ModalStackItemModal = ModalStackItemBase & {\n kind: 'modal';\n props: ImperativeModalProps;\n};\n\ntype ModalStackItemRaw = ModalStackItemBase & {\n component: RawModalComponent;\n kind: 'raw';\n open: boolean;\n options?: RawModalOptions<PropertyKey, PropertyKey>;\n props: Record<string, unknown>;\n};\n\ntype TModalStackItem = ModalStackItemModal | ModalStackItemRaw;\n\ntype ModalStackProps = {\n stack: TModalStackItem[];\n};\n\nexport type ModalHostProps = {\n root?: HTMLElement | ShadowRoot | null;\n};\n\nlet modalStack: TModalStackItem[] = [];\nlet modalSeed = 0;\nconst listeners = new Set<() => void>();\nconst rawDestroyTimers = new Map<string, number>();\n\nconst notify = () => {\n listeners.forEach((listener) => listener());\n};\n\nconst subscribe = (listener: () => void) => {\n listeners.add(listener);\n return () => listeners.delete(listener);\n};\n\nconst EMPTY_STACK: TModalStackItem[] = [];\nconst getSnapshot = () => modalStack;\nconst getServerSnapshot = () => EMPTY_STACK;\n\nconst ModalPortal = ({\n children,\n root,\n}: {\n children: ReactNode;\n root?: HTMLElement | ShadowRoot | null;\n}) => {\n const appElement = useAppElement();\n const container = root ?? appElement ?? document.body;\n\n return createPortal(children, container);\n};\n\nconst updateModal = (id: string, nextProps: Partial<ImperativeModalProps>) => {\n let changed = false;\n modalStack = modalStack.map((item) => {\n if (item.id !== id) return item;\n if (item.kind !== 'modal') return item;\n changed = true;\n return {\n ...item,\n props: { ...item.props, ...nextProps },\n };\n });\n\n if (changed) notify();\n};\n\nconst updateRawProps = (id: string, nextProps: Record<string, unknown>) => {\n let changed = false;\n modalStack = modalStack.map((item) => {\n if (item.id !== id) return item;\n if (item.kind !== 'raw') return item;\n changed = true;\n return {\n ...item,\n props: { ...item.props, ...nextProps },\n };\n });\n\n if (changed) notify();\n};\n\nconst setRawOpen = (id: string, open: boolean) => {\n let changed = false;\n modalStack = modalStack.map((item) => {\n if (item.id !== id) return item;\n if (item.kind !== 'raw') return item;\n if (item.open === open) return item;\n changed = true;\n return { ...item, open };\n });\n\n if (open) {\n const timer = rawDestroyTimers.get(id);\n if (timer) {\n clearTimeout(timer);\n rawDestroyTimers.delete(id);\n }\n }\n\n if (changed) notify();\n};\n\nconst closeModal = (id: string) => {\n const target = modalStack.find((item) => item.id === id);\n if (!target) return;\n\n if (target.kind === 'modal') {\n updateModal(id, { open: false });\n return;\n }\n\n setRawOpen(id, false);\n\n const shouldDestroy = target.options?.destroyOnClose ?? true;\n if (!shouldDestroy) return;\n\n const delay = target.options?.destroyDelay ?? 200;\n const existing = rawDestroyTimers.get(id);\n if (existing) clearTimeout(existing);\n const timer = window.setTimeout(() => {\n rawDestroyTimers.delete(id);\n\n destroyModal(id);\n }, delay);\n rawDestroyTimers.set(id, timer);\n};\n\nconst destroyModal = (id: string) => {\n const timer = rawDestroyTimers.get(id);\n if (timer) {\n clearTimeout(timer);\n rawDestroyTimers.delete(id);\n }\n const nextStack = modalStack.filter((item) => item.id !== id);\n if (nextStack.length === modalStack.length) return;\n modalStack = nextStack;\n notify();\n};\n\nconst ModalStack = memo(({ stack }: ModalStackProps) => {\n const isClient = useIsClient();\n if (!isClient) return null;\n return stack.map((item) => {\n if (item.kind === 'modal') {\n return (\n <ModalStackItem\n id={item.id}\n key={item.id}\n props={item.props}\n onClose={closeModal}\n onDestroy={destroyModal}\n onUpdate={updateModal}\n />\n );\n }\n\n return (\n <RawModalStackItem\n component={item.component}\n id={item.id}\n key={item.id}\n open={item.open}\n options={item.options}\n props={item.props}\n onClose={closeModal}\n onUpdate={updateRawProps}\n />\n );\n });\n});\n\nModalStack.displayName = 'ModalStack';\n\nexport const ModalHost = ({ root }: ModalHostProps) => {\n const stack = useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);\n const isClient = useIsClient();\n\n useEffect(() => {\n if (!isClient) return;\n // Enforce singleton per portal root (dev-only).\n const scope = root ?? document.body;\n return registerDevSingleton('ModalHost', scope);\n }, [isClient, root]);\n\n if (!isClient) return null;\n if (stack.length === 0) return null;\n\n return (\n <ModalPortal root={root}>\n <ModalStack stack={stack} />\n </ModalPortal>\n );\n};\n\nexport const createModal = (props: ImperativeModalProps): ModalInstance => {\n const id = `modal-${Date.now()}-${modalSeed++}`;\n modalStack = [\n ...modalStack,\n { id, kind: 'modal', props: { ...props, open: props.open ?? true } },\n ];\n notify();\n\n return {\n close: () => closeModal(id),\n destroy: () => destroyModal(id),\n setCanDismissByClickOutside: (value) => updateModal(id, { mask: { closable: value } }),\n update: (nextProps) => updateModal(id, nextProps),\n };\n};\n\nexport function createRawModal<P extends RawModalComponentProps>(\n component: RawModalComponent<P>,\n props: Omit<P, 'open' | 'onClose'>,\n options?: RawModalOptions,\n): RawModalInstance<P>;\n\nexport function createRawModal<P, OpenKey extends keyof P, CloseKey extends keyof P>(\n component: RawModalComponent<P>,\n props: Omit<P, OpenKey | CloseKey>,\n options: RawModalKeyOptions<OpenKey, CloseKey>,\n): RawModalInstance<P, OpenKey, CloseKey>;\n\nexport function createRawModal<P, OpenKey extends keyof P, CloseKey extends keyof P>(\n component: RawModalComponent<P>,\n props: Omit<P, OpenKey | CloseKey>,\n options?: RawModalOptions<OpenKey, CloseKey>,\n): RawModalInstance<P, OpenKey, CloseKey> {\n const id = `modal-${Date.now()}-${modalSeed++}`;\n modalStack = [\n ...modalStack,\n {\n component,\n id,\n kind: 'raw',\n open: true,\n options,\n props: props as Record<string, unknown>,\n },\n ];\n notify();\n\n return {\n close: () => closeModal(id),\n destroy: () => destroyModal(id),\n setCanDismissByClickOutside: (value) => updateRawProps(id, { mask: { closable: value } }),\n update: (nextProps) => updateRawProps(id, nextProps as Record<string, unknown>),\n };\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"style.mjs","names":[],"sources":["../../src/Modal/style.ts"],"sourcesContent":["import { createStaticStyles } from 'antd-style';\n\nexport const HEADER_HEIGHT = 56;\nexport const FOOTER_HEIGHT = 68;\n\nexport const styles = createStaticStyles(({ css, cssVar }) => {\n return {\n content: css`\n [class*='ant-modal-footer'] {\n margin: 0;\n padding: 16px;\n }\n\n [class*='ant-modal-header'] {\n display: flex;\n gap: 4px;\n align-items: center;\n justify-content: center;\n\n height: 56px;\n margin-block-end: 0;\n padding: 16px;\n }\n\n [class*='ant-modal-container'] {\n overflow: hidden;\n padding: 0;\n border: 1px solid ${cssVar.colorSplit};\n border-radius: ${cssVar.borderRadiusLG};\n }\n `,\n drawerContent: css`\n [class*='ant-drawer-close'] {\n padding: 0;\n }\n\n [class*='ant-drawer-header'] {\n flex: none;\n height: ${HEADER_HEIGHT}px !important;\n padding-block: 0;\n padding-inline: 16px;\n }\n\n [class*='ant-drawer-footer'] {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n\n padding: 16px;\n border: none;\n }\n `,\n wrap: css`\n overflow: hidden auto;\n `,\n };\n});\n"],"mappings":";AAKA,MAAa,SAAS,oBAAoB,EAAE,KAAK,aAAa;CAC5D,OAAO;EACL,SAAS,GAAG;;;;;;;;;;;;;;;;;;;;4BAoBY,OAAO,WAAW;yBACrB,OAAO,eAAe;;;EAG3C,eAAe,GAAG;;;;;;;qBAOU;;;;;;;;;;;;;;EAc5B,MAAM,GAAG;;;CAGX;AACF,CAAC"}
1
+ {"version":3,"file":"style.mjs","names":[],"sources":["../../src/Modal/style.ts"],"sourcesContent":["import { createStaticStyles } from 'antd-style';\n\nexport const HEADER_HEIGHT = 56;\nexport const FOOTER_HEIGHT = 68;\n\nexport const styles = createStaticStyles(({ css, cssVar }) => {\n return {\n content: css`\n [class*='ant-modal-footer'] {\n margin: 0;\n padding: 16px;\n }\n\n [class*='ant-modal-header'] {\n display: flex;\n gap: 4px;\n align-items: center;\n justify-content: center;\n\n height: 56px;\n margin-block-end: 0;\n padding: 16px;\n }\n\n [class*='ant-modal-container'] {\n overflow: hidden;\n padding: 0;\n border: 1px solid ${cssVar.colorSplit};\n border-radius: ${cssVar.borderRadiusLG};\n }\n `,\n drawerContent: css`\n [class*='ant-drawer-close'] {\n padding: 0;\n }\n\n [class*='ant-drawer-header'] {\n flex: none;\n height: ${HEADER_HEIGHT}px !important;\n padding-block: 0;\n padding-inline: 16px;\n }\n\n [class*='ant-drawer-footer'] {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n\n padding: 16px;\n border: none;\n }\n `,\n wrap: css`\n overflow: hidden auto;\n `,\n };\n});\n"],"mappings":";AAKA,MAAa,SAAS,oBAAoB,EAAE,KAAK,aAAa;CAC5D,OAAO;EACL,SAAS,GAAG;;;;;;;;;;;;;;;;;;;;4BAoBY,OAAO,WAAW;yBACrB,OAAO,eAAe;;;EAG3C,eAAe,GAAG;;;;;;;kBAOU,GAAA;;;;;;;;;;;;;;EAc5B,MAAM,GAAG;;;CAGX;AACF,CAAC"}
@@ -74,7 +74,7 @@ const NeuralNetworkLoading = memo(({ size = 16, className, style }) => {
74
74
  }, `node-${layerIndex}-${nodeIndex}`));
75
75
  }
76
76
  const connections = [];
77
- for (let layerIndex = 0; layerIndex < LAYER_COUNT - 1; layerIndex++) for (let nodeIndex = 0; nodeIndex < NODE_COUNT; nodeIndex++) {
77
+ for (let layerIndex = 0; layerIndex < 2; layerIndex++) for (let nodeIndex = 0; nodeIndex < NODE_COUNT; nodeIndex++) {
78
78
  const x1 = 25 + layerIndex * 25;
79
79
  const y1 = 25 + nodeIndex * 25;
80
80
  for (let targetIndex = 0; targetIndex < NODE_COUNT; targetIndex++) {
@@ -1 +1 @@
1
- {"version":3,"file":"NeuralNetworkLoading.mjs","names":[],"sources":["../../src/NeuralNetworkLoading/NeuralNetworkLoading.tsx"],"sourcesContent":["'use client';\n\nimport { createStaticStyles, keyframes } from 'antd-style';\nimport { type CSSProperties, memo } from 'react';\n\nimport type { NeuralNetworkLoadingProps } from './type';\n\nconst pulseAnim = keyframes`\n 0%, 100% { opacity: 0.3; }\n 50% { opacity: 1; }\n`;\n\nconst flowAnim = keyframes`\n 0% { transform: translateX(0); opacity: 0.5; }\n 50% { opacity: 1; }\n 100% { transform: translateX(var(--flow-distance)); opacity: 0.5; }\n`;\n\nconst rotateAnim = keyframes`\n 100% { transform: rotate(360deg); }\n`;\n\nconst scaleAnim = keyframes`\n 0%, 100% { transform: scale(0.8); opacity: 0.5; }\n 50% { transform: scale(1); opacity: 1; }\n`;\n\nconst styles = createStaticStyles(({ css, cssVar }) => ({\n center: css`\n fill: ${cssVar.colorTextSecondary};\n animation: ${scaleAnim} 2s infinite;\n `,\n connection: css`\n opacity: 0.3;\n stroke: ${cssVar.colorTextSecondary};\n stroke-width: 0.5;\n `,\n container: css`\n display: flex;\n align-items: center;\n justify-content: center;\n `,\n node: css`\n fill: ${cssVar.colorTextSecondary};\n animation: ${pulseAnim} 2s infinite;\n `,\n particle: css`\n fill: ${cssVar.colorTextSecondary};\n animation: ${flowAnim} 2s infinite;\n `,\n ring: css`\n transform-origin: center;\n\n fill: none;\n stroke: ${cssVar.colorFill};\n stroke-dasharray: 0 8;\n stroke-width: 1;\n\n animation: ${rotateAnim} 20s infinite linear;\n `,\n svg: css`\n width: 100%;\n height: 100%;\n `,\n}));\n\nconst LAYER_COUNT = 3;\nconst NODE_COUNT = 3;\n\nconst NeuralNetworkLoading = memo<NeuralNetworkLoadingProps>(({ size = 16, className, style }) => {\n const nodes = [];\n for (let layerIndex = 0; layerIndex < LAYER_COUNT; layerIndex++) {\n for (let nodeIndex = 0; nodeIndex < NODE_COUNT; nodeIndex++) {\n const x = 25 + layerIndex * 25;\n const y = 25 + nodeIndex * 25;\n const delay = (layerIndex * NODE_COUNT + nodeIndex) * 0.2;\n nodes.push(\n <circle\n className={styles.node}\n cx={x}\n cy={y}\n key={`node-${layerIndex}-${nodeIndex}`}\n r=\"3\"\n style={{ animationDelay: `${delay}s` }}\n />,\n );\n }\n }\n\n const connections = [];\n for (let layerIndex = 0; layerIndex < LAYER_COUNT - 1; layerIndex++) {\n for (let nodeIndex = 0; nodeIndex < NODE_COUNT; nodeIndex++) {\n const x1 = 25 + layerIndex * 25;\n const y1 = 25 + nodeIndex * 25;\n for (let targetIndex = 0; targetIndex < NODE_COUNT; targetIndex++) {\n const x2 = 25 + (layerIndex + 1) * 25;\n const y2 = 25 + targetIndex * 25;\n connections.push(\n <line\n className={styles.connection}\n key={`connection-${layerIndex}-${nodeIndex}-${targetIndex}`}\n x1={x1}\n x2={x2}\n y1={y1}\n y2={y2}\n />,\n );\n }\n }\n }\n\n const particles = [0, 1, 2].map((index) => (\n <circle\n className={styles.particle}\n cx={25}\n cy={50}\n key={`particle-${index}`}\n r=\"1.5\"\n style={\n {\n '--flow-distance': '50px',\n 'animationDelay': `${index * 0.6}s`,\n } as CSSProperties\n }\n />\n ));\n\n return (\n <div\n className={[styles.container, className].filter(Boolean).join(' ')}\n style={{ height: size, width: size, ...style }}\n >\n <svg className={styles.svg} viewBox=\"0 0 100 100\" xmlns=\"http://www.w3.org/2000/svg\">\n {connections}\n {nodes}\n {particles}\n <rect className={styles.center} height=\"6\" width=\"6\" x=\"47\" y=\"47\" />\n <circle className={styles.ring} cx=\"50\" cy=\"50\" r=\"40\" />\n </svg>\n </div>\n );\n});\n\nNeuralNetworkLoading.displayName = 'NeuralNetworkLoading';\n\nexport default NeuralNetworkLoading;\n"],"mappings":";;;;;AAOA,MAAM,YAAY,SAAS;;;;AAK3B,MAAM,WAAW,SAAS;;;;;AAM1B,MAAM,aAAa,SAAS;;;AAI5B,MAAM,YAAY,SAAS;;;;AAK3B,MAAM,SAAS,oBAAoB,EAAE,KAAK,cAAc;CACtD,QAAQ,GAAG;YACD,OAAO,mBAAmB;iBACrB,UAAU;;CAEzB,YAAY,GAAG;;cAEH,OAAO,mBAAmB;;;CAGtC,WAAW,GAAG;;;;;CAKd,MAAM,GAAG;YACC,OAAO,mBAAmB;iBACrB,UAAU;;CAEzB,UAAU,GAAG;YACH,OAAO,mBAAmB;iBACrB,SAAS;;CAExB,MAAM,GAAG;;;;cAIG,OAAO,UAAU;;;;iBAId,WAAW;;CAE1B,KAAK,GAAG;;;;AAIV,EAAE;AAEF,MAAM,cAAc;AACpB,MAAM,aAAa;AAEnB,MAAM,uBAAuB,MAAiC,EAAE,OAAO,IAAI,WAAW,YAAY;CAChG,MAAM,QAAQ,CAAC;CACf,KAAK,IAAI,aAAa,GAAG,aAAa,aAAa,cACjD,KAAK,IAAI,YAAY,GAAG,YAAY,YAAY,aAAa;EAC3D,MAAM,IAAI,KAAK,aAAa;EAC5B,MAAM,IAAI,KAAK,YAAY;EAC3B,MAAM,SAAS,aAAa,aAAa,aAAa;EACtD,MAAM,KACJ,oBAAC,UAAD;GACE,WAAW,OAAO;GAClB,IAAI;GACJ,IAAI;GAEJ,GAAE;GACF,OAAO,EAAE,gBAAgB,GAAG,MAAM,GAAG;EACtC,GAHM,QAAQ,WAAW,GAAG,WAG5B,CACH;CACF;CAGF,MAAM,cAAc,CAAC;CACrB,KAAK,IAAI,aAAa,GAAG,aAAa,cAAc,GAAG,cACrD,KAAK,IAAI,YAAY,GAAG,YAAY,YAAY,aAAa;EAC3D,MAAM,KAAK,KAAK,aAAa;EAC7B,MAAM,KAAK,KAAK,YAAY;EAC5B,KAAK,IAAI,cAAc,GAAG,cAAc,YAAY,eAAe;GACjE,MAAM,KAAK,MAAM,aAAa,KAAK;GACnC,MAAM,KAAK,KAAK,cAAc;GAC9B,YAAY,KACV,oBAAC,QAAD;IACE,WAAW,OAAO;IAEd;IACA;IACA;IACA;GACL,GALM,cAAc,WAAW,GAAG,UAAU,GAAG,aAK/C,CACH;EACF;CACF;CAGF,MAAM,YAAY;EAAC;EAAG;EAAG;CAAC,CAAC,CAAC,KAAK,UAC/B,oBAAC,UAAD;EACE,WAAW,OAAO;EAClB,IAAI;EACJ,IAAI;EAEJ,GAAE;EACF,OACE;GACE,mBAAmB;GACnB,kBAAkB,GAAG,QAAQ,GAAI;EACnC;CAEH,GARM,YAAY,OAQlB,CACF;CAED,OACE,oBAAC,OAAD;EACE,WAAW,CAAC,OAAO,WAAW,SAAS,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG;EACjE,OAAO;GAAE,QAAQ;GAAM,OAAO;GAAM,GAAG;EAAM;YAE7C,qBAAC,OAAD;GAAK,WAAW,OAAO;GAAK,SAAQ;GAAc,OAAM;aAAxD;IACG;IACA;IACA;IACD,oBAAC,QAAD;KAAM,WAAW,OAAO;KAAQ,QAAO;KAAI,OAAM;KAAI,GAAE;KAAK,GAAE;IAAM,CAAA;IACpE,oBAAC,UAAD;KAAQ,WAAW,OAAO;KAAM,IAAG;KAAK,IAAG;KAAK,GAAE;IAAM,CAAA;GACrD;;CACF,CAAA;AAET,CAAC;AAED,qBAAqB,cAAc"}
1
+ {"version":3,"file":"NeuralNetworkLoading.mjs","names":[],"sources":["../../src/NeuralNetworkLoading/NeuralNetworkLoading.tsx"],"sourcesContent":["'use client';\n\nimport { createStaticStyles, keyframes } from 'antd-style';\nimport { type CSSProperties, memo } from 'react';\n\nimport type { NeuralNetworkLoadingProps } from './type';\n\nconst pulseAnim = keyframes`\n 0%, 100% { opacity: 0.3; }\n 50% { opacity: 1; }\n`;\n\nconst flowAnim = keyframes`\n 0% { transform: translateX(0); opacity: 0.5; }\n 50% { opacity: 1; }\n 100% { transform: translateX(var(--flow-distance)); opacity: 0.5; }\n`;\n\nconst rotateAnim = keyframes`\n 100% { transform: rotate(360deg); }\n`;\n\nconst scaleAnim = keyframes`\n 0%, 100% { transform: scale(0.8); opacity: 0.5; }\n 50% { transform: scale(1); opacity: 1; }\n`;\n\nconst styles = createStaticStyles(({ css, cssVar }) => ({\n center: css`\n fill: ${cssVar.colorTextSecondary};\n animation: ${scaleAnim} 2s infinite;\n `,\n connection: css`\n opacity: 0.3;\n stroke: ${cssVar.colorTextSecondary};\n stroke-width: 0.5;\n `,\n container: css`\n display: flex;\n align-items: center;\n justify-content: center;\n `,\n node: css`\n fill: ${cssVar.colorTextSecondary};\n animation: ${pulseAnim} 2s infinite;\n `,\n particle: css`\n fill: ${cssVar.colorTextSecondary};\n animation: ${flowAnim} 2s infinite;\n `,\n ring: css`\n transform-origin: center;\n\n fill: none;\n stroke: ${cssVar.colorFill};\n stroke-dasharray: 0 8;\n stroke-width: 1;\n\n animation: ${rotateAnim} 20s infinite linear;\n `,\n svg: css`\n width: 100%;\n height: 100%;\n `,\n}));\n\nconst LAYER_COUNT = 3;\nconst NODE_COUNT = 3;\n\nconst NeuralNetworkLoading = memo<NeuralNetworkLoadingProps>(({ size = 16, className, style }) => {\n const nodes = [];\n for (let layerIndex = 0; layerIndex < LAYER_COUNT; layerIndex++) {\n for (let nodeIndex = 0; nodeIndex < NODE_COUNT; nodeIndex++) {\n const x = 25 + layerIndex * 25;\n const y = 25 + nodeIndex * 25;\n const delay = (layerIndex * NODE_COUNT + nodeIndex) * 0.2;\n nodes.push(\n <circle\n className={styles.node}\n cx={x}\n cy={y}\n key={`node-${layerIndex}-${nodeIndex}`}\n r=\"3\"\n style={{ animationDelay: `${delay}s` }}\n />,\n );\n }\n }\n\n const connections = [];\n for (let layerIndex = 0; layerIndex < LAYER_COUNT - 1; layerIndex++) {\n for (let nodeIndex = 0; nodeIndex < NODE_COUNT; nodeIndex++) {\n const x1 = 25 + layerIndex * 25;\n const y1 = 25 + nodeIndex * 25;\n for (let targetIndex = 0; targetIndex < NODE_COUNT; targetIndex++) {\n const x2 = 25 + (layerIndex + 1) * 25;\n const y2 = 25 + targetIndex * 25;\n connections.push(\n <line\n className={styles.connection}\n key={`connection-${layerIndex}-${nodeIndex}-${targetIndex}`}\n x1={x1}\n x2={x2}\n y1={y1}\n y2={y2}\n />,\n );\n }\n }\n }\n\n const particles = [0, 1, 2].map((index) => (\n <circle\n className={styles.particle}\n cx={25}\n cy={50}\n key={`particle-${index}`}\n r=\"1.5\"\n style={\n {\n '--flow-distance': '50px',\n 'animationDelay': `${index * 0.6}s`,\n } as CSSProperties\n }\n />\n ));\n\n return (\n <div\n className={[styles.container, className].filter(Boolean).join(' ')}\n style={{ height: size, width: size, ...style }}\n >\n <svg className={styles.svg} viewBox=\"0 0 100 100\" xmlns=\"http://www.w3.org/2000/svg\">\n {connections}\n {nodes}\n {particles}\n <rect className={styles.center} height=\"6\" width=\"6\" x=\"47\" y=\"47\" />\n <circle className={styles.ring} cx=\"50\" cy=\"50\" r=\"40\" />\n </svg>\n </div>\n );\n});\n\nNeuralNetworkLoading.displayName = 'NeuralNetworkLoading';\n\nexport default NeuralNetworkLoading;\n"],"mappings":";;;;;AAOA,MAAM,YAAY,SAAS;;;;AAK3B,MAAM,WAAW,SAAS;;;;;AAM1B,MAAM,aAAa,SAAS;;;AAI5B,MAAM,YAAY,SAAS;;;;AAK3B,MAAM,SAAS,oBAAoB,EAAE,KAAK,cAAc;CACtD,QAAQ,GAAG;YACD,OAAO,mBAAmB;iBACrB,UAAU;;CAEzB,YAAY,GAAG;;cAEH,OAAO,mBAAmB;;;CAGtC,WAAW,GAAG;;;;;CAKd,MAAM,GAAG;YACC,OAAO,mBAAmB;iBACrB,UAAU;;CAEzB,UAAU,GAAG;YACH,OAAO,mBAAmB;iBACrB,SAAS;;CAExB,MAAM,GAAG;;;;cAIG,OAAO,UAAU;;;;iBAId,WAAW;;CAE1B,KAAK,GAAG;;;;AAIV,EAAE;AAEF,MAAM,cAAc;AACpB,MAAM,aAAa;AAEnB,MAAM,uBAAuB,MAAiC,EAAE,OAAO,IAAI,WAAW,YAAY;CAChG,MAAM,QAAQ,CAAC;CACf,KAAK,IAAI,aAAa,GAAG,aAAa,aAAa,cACjD,KAAK,IAAI,YAAY,GAAG,YAAY,YAAY,aAAa;EAC3D,MAAM,IAAI,KAAK,aAAa;EAC5B,MAAM,IAAI,KAAK,YAAY;EAC3B,MAAM,SAAS,aAAa,aAAa,aAAa;EACtD,MAAM,KACJ,oBAAC,UAAD;GACE,WAAW,OAAO;GAClB,IAAI;GACJ,IAAI;GAEJ,GAAE;GACF,OAAO,EAAE,gBAAgB,GAAG,MAAM,GAAG;EACtC,GAHM,QAAQ,WAAW,GAAG,WAG5B,CACH;CACF;CAGF,MAAM,cAAc,CAAC;CACrB,KAAK,IAAI,aAAa,GAAG,aAAa,GAAiB,cACrD,KAAK,IAAI,YAAY,GAAG,YAAY,YAAY,aAAa;EAC3D,MAAM,KAAK,KAAK,aAAa;EAC7B,MAAM,KAAK,KAAK,YAAY;EAC5B,KAAK,IAAI,cAAc,GAAG,cAAc,YAAY,eAAe;GACjE,MAAM,KAAK,MAAM,aAAa,KAAK;GACnC,MAAM,KAAK,KAAK,cAAc;GAC9B,YAAY,KACV,oBAAC,QAAD;IACE,WAAW,OAAO;IAEd;IACA;IACA;IACA;GACL,GALM,cAAc,WAAW,GAAG,UAAU,GAAG,aAK/C,CACH;EACF;CACF;CAGF,MAAM,YAAY;EAAC;EAAG;EAAG;CAAC,CAAC,CAAC,KAAK,UAC/B,oBAAC,UAAD;EACE,WAAW,OAAO;EAClB,IAAI;EACJ,IAAI;EAEJ,GAAE;EACF,OACE;GACE,mBAAmB;GACnB,kBAAkB,GAAG,QAAQ,GAAI;EACnC;CAEH,GARM,YAAY,OAQlB,CACF;CAED,OACE,oBAAC,OAAD;EACE,WAAW,CAAC,OAAO,WAAW,SAAS,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG;EACjE,OAAO;GAAE,QAAQ;GAAM,OAAO;GAAM,GAAG;EAAM;EAE7C,UAAA,qBAAC,OAAD;GAAK,WAAW,OAAO;GAAK,SAAQ;GAAc,OAAM;GAAxD,UAAA;IACG;IACA;IACA;IACD,oBAAC,QAAD;KAAM,WAAW,OAAO;KAAQ,QAAO;KAAI,OAAM;KAAI,GAAE;KAAK,GAAE;IAAM,CAAA;IACpE,oBAAC,UAAD;KAAQ,WAAW,OAAO;KAAM,IAAG;KAAK,IAAG;KAAK,GAAE;IAAM,CAAA;GACrD;;CACF,CAAA;AAET,CAAC;AAED,qBAAqB,cAAc"}
@@ -48,22 +48,23 @@ const ScrollShadow = ({ className, children, orientation = "vertical", hideScrol
48
48
  else if (finalScrollState.right) attributes["data-right-scroll"] = true;
49
49
  return attributes;
50
50
  }, [orientation, finalScrollState]);
51
+ const scrollPosition = useMemo(() => {
52
+ if (orientation === "vertical") {
53
+ if (finalScrollState.top && finalScrollState.bottom) return "top-bottom";
54
+ if (finalScrollState.top) return "top";
55
+ if (finalScrollState.bottom) return "bottom";
56
+ } else {
57
+ if (finalScrollState.left && finalScrollState.right) return "left-right";
58
+ if (finalScrollState.left) return "left";
59
+ if (finalScrollState.right) return "right";
60
+ }
61
+ return "none";
62
+ }, [orientation, finalScrollState]);
51
63
  return /* @__PURE__ */ jsx(FlexBasic_default, {
52
64
  className: cx(variants({
53
65
  hideScrollBar,
54
66
  orientation,
55
- scrollPosition: useMemo(() => {
56
- if (orientation === "vertical") {
57
- if (finalScrollState.top && finalScrollState.bottom) return "top-bottom";
58
- if (finalScrollState.top) return "top";
59
- if (finalScrollState.bottom) return "bottom";
60
- } else {
61
- if (finalScrollState.left && finalScrollState.right) return "left-right";
62
- if (finalScrollState.left) return "left";
63
- if (finalScrollState.right) return "right";
64
- }
65
- return "none";
66
- }, [orientation, finalScrollState])
67
+ scrollPosition
67
68
  }), className),
68
69
  ref: mergeRefs([domRef, ref]),
69
70
  style: {
@@ -1 +1 @@
1
- {"version":3,"file":"ScrollShadow.mjs","names":["Flexbox"],"sources":["../../src/ScrollShadow/ScrollShadow.tsx"],"sourcesContent":["'use client';\n\nimport { cx } from 'antd-style';\nimport type { FC } from 'react';\nimport { useMemo, useRef } from 'react';\nimport { mergeRefs } from 'react-merge-refs';\n\nimport { Flexbox } from '@/Flex';\nimport { useEventCallback } from '@/hooks/useEventCallback';\n\nimport { variants } from './style';\nimport type { ScrollShadowProps } from './type';\nimport { useScrollOverflow } from './useScrollOverflow';\n\nconst ScrollShadow: FC<ScrollShadowProps> = ({\n className,\n children,\n orientation = 'vertical',\n hideScrollBar = false,\n size = 16,\n offset = 8,\n visibility = 'auto',\n isEnabled = true,\n onVisibilityChange,\n style,\n ref,\n ...rest\n}) => {\n // Convert size prop to CSS variable\n const cssVariables = useMemo<Record<string, string>>(\n () => ({\n '--scroll-shadow-size': `${size}%`,\n }),\n [size],\n );\n const domRef = useRef<HTMLDivElement>(null);\n\n const onVisibilityChangeEvent = useEventCallback<\n NonNullable<ScrollShadowProps['onVisibilityChange']>\n >((visibility) => {\n onVisibilityChange?.(visibility);\n });\n // 使用滚动检测钩子\n const scrollState = useScrollOverflow({\n domRef,\n isEnabled: isEnabled && visibility === 'auto',\n offset,\n onVisibilityChange: onVisibilityChangeEvent,\n orientation,\n updateDeps: [children],\n });\n\n // 决定最终的滚动状态\n const finalScrollState = useMemo(() => {\n if (visibility === 'always') {\n return {\n bottom: true,\n left: true,\n right: true,\n top: true,\n };\n }\n\n if (visibility === 'never') {\n return {\n bottom: false,\n left: false,\n right: false,\n top: false,\n };\n }\n\n return scrollState;\n }, [visibility, scrollState]);\n\n // 计算数据属性\n const dataAttributes = useMemo(() => {\n const attributes: Record<string, boolean | string> = {\n 'data-orientation': orientation,\n };\n\n if (orientation === 'vertical') {\n if (finalScrollState.top && finalScrollState.bottom) {\n attributes['data-top-bottom-scroll'] = true;\n } else if (finalScrollState.top) {\n attributes['data-top-scroll'] = true;\n } else if (finalScrollState.bottom) {\n attributes['data-bottom-scroll'] = true;\n }\n } else {\n if (finalScrollState.left && finalScrollState.right) {\n attributes['data-left-right-scroll'] = true;\n } else if (finalScrollState.left) {\n attributes['data-left-scroll'] = true;\n } else if (finalScrollState.right) {\n attributes['data-right-scroll'] = true;\n }\n }\n\n return attributes;\n }, [orientation, finalScrollState]);\n\n // 计算滚动位置变体\n const scrollPosition = useMemo(() => {\n if (orientation === 'vertical') {\n if (finalScrollState.top && finalScrollState.bottom) return 'top-bottom';\n if (finalScrollState.top) return 'top';\n if (finalScrollState.bottom) return 'bottom';\n } else {\n if (finalScrollState.left && finalScrollState.right) return 'left-right';\n if (finalScrollState.left) return 'left';\n if (finalScrollState.right) return 'right';\n }\n return 'none';\n }, [orientation, finalScrollState]);\n\n return (\n <Flexbox\n className={cx(variants({ hideScrollBar, orientation, scrollPosition }), className)}\n ref={mergeRefs<HTMLDivElement>([domRef, ref])}\n style={{\n ...cssVariables,\n ...style,\n }}\n {...dataAttributes}\n {...rest}\n >\n {children}\n </Flexbox>\n );\n};\n\nScrollShadow.displayName = 'ScrollShadow';\n\nexport default ScrollShadow;\n"],"mappings":";;;;;;;;;;AAcA,MAAM,gBAAuC,EAC3C,WACA,UACA,cAAc,YACd,gBAAgB,OAChB,OAAO,IACP,SAAS,GACT,aAAa,QACb,YAAY,MACZ,oBACA,OACA,KACA,GAAG,WACC;CAEJ,MAAM,eAAe,eACZ,EACL,wBAAwB,GAAG,KAAK,GAClC,IACA,CAAC,IAAI,CACP;CACA,MAAM,SAAS,OAAuB,IAAI;CAE1C,MAAM,0BAA0B,kBAE7B,eAAe;EAChB,qBAAqB,UAAU;CACjC,CAAC;CAED,MAAM,cAAc,kBAAkB;EACpC;EACA,WAAW,aAAa,eAAe;EACvC;EACA,oBAAoB;EACpB;EACA,YAAY,CAAC,QAAQ;CACvB,CAAC;CAGD,MAAM,mBAAmB,cAAc;EACrC,IAAI,eAAe,UACjB,OAAO;GACL,QAAQ;GACR,MAAM;GACN,OAAO;GACP,KAAK;EACP;EAGF,IAAI,eAAe,SACjB,OAAO;GACL,QAAQ;GACR,MAAM;GACN,OAAO;GACP,KAAK;EACP;EAGF,OAAO;CACT,GAAG,CAAC,YAAY,WAAW,CAAC;CAG5B,MAAM,iBAAiB,cAAc;EACnC,MAAM,aAA+C,EACnD,oBAAoB,YACtB;EAEA,IAAI,gBAAgB;OACd,iBAAiB,OAAO,iBAAiB,QAC3C,WAAW,4BAA4B;QAClC,IAAI,iBAAiB,KAC1B,WAAW,qBAAqB;QAC3B,IAAI,iBAAiB,QAC1B,WAAW,wBAAwB;EAAA,OAGrC,IAAI,iBAAiB,QAAQ,iBAAiB,OAC5C,WAAW,4BAA4B;OAClC,IAAI,iBAAiB,MAC1B,WAAW,sBAAsB;OAC5B,IAAI,iBAAiB,OAC1B,WAAW,uBAAuB;EAItC,OAAO;CACT,GAAG,CAAC,aAAa,gBAAgB,CAAC;CAgBlC,OACE,oBAACA,mBAAD;EACE,WAAW,GAAG,SAAS;GAAE;GAAe;GAAa,gBAflC,cAAc;IACnC,IAAI,gBAAgB,YAAY;KAC9B,IAAI,iBAAiB,OAAO,iBAAiB,QAAQ,OAAO;KAC5D,IAAI,iBAAiB,KAAK,OAAO;KACjC,IAAI,iBAAiB,QAAQ,OAAO;IACtC,OAAO;KACL,IAAI,iBAAiB,QAAQ,iBAAiB,OAAO,OAAO;KAC5D,IAAI,iBAAiB,MAAM,OAAO;KAClC,IAAI,iBAAiB,OAAO,OAAO;IACrC;IACA,OAAO;GACT,GAAG,CAAC,aAAa,gBAAgB,CAIqC;EAAE,CAAC,GAAG,SAAS;EACjF,KAAK,UAA0B,CAAC,QAAQ,GAAG,CAAC;EAC5C,OAAO;GACL,GAAG;GACH,GAAG;EACL;EACA,GAAI;EACJ,GAAI;EAEH;CACM,CAAA;AAEb;AAEA,aAAa,cAAc"}
1
+ {"version":3,"file":"ScrollShadow.mjs","names":["Flexbox"],"sources":["../../src/ScrollShadow/ScrollShadow.tsx"],"sourcesContent":["'use client';\n\nimport { cx } from 'antd-style';\nimport type { FC } from 'react';\nimport { useMemo, useRef } from 'react';\nimport { mergeRefs } from 'react-merge-refs';\n\nimport { Flexbox } from '@/Flex';\nimport { useEventCallback } from '@/hooks/useEventCallback';\n\nimport { variants } from './style';\nimport type { ScrollShadowProps } from './type';\nimport { useScrollOverflow } from './useScrollOverflow';\n\nconst ScrollShadow: FC<ScrollShadowProps> = ({\n className,\n children,\n orientation = 'vertical',\n hideScrollBar = false,\n size = 16,\n offset = 8,\n visibility = 'auto',\n isEnabled = true,\n onVisibilityChange,\n style,\n ref,\n ...rest\n}) => {\n // Convert size prop to CSS variable\n const cssVariables = useMemo<Record<string, string>>(\n () => ({\n '--scroll-shadow-size': `${size}%`,\n }),\n [size],\n );\n const domRef = useRef<HTMLDivElement>(null);\n\n const onVisibilityChangeEvent = useEventCallback<\n NonNullable<ScrollShadowProps['onVisibilityChange']>\n >((visibility) => {\n onVisibilityChange?.(visibility);\n });\n // 使用滚动检测钩子\n const scrollState = useScrollOverflow({\n domRef,\n isEnabled: isEnabled && visibility === 'auto',\n offset,\n onVisibilityChange: onVisibilityChangeEvent,\n orientation,\n updateDeps: [children],\n });\n\n // 决定最终的滚动状态\n const finalScrollState = useMemo(() => {\n if (visibility === 'always') {\n return {\n bottom: true,\n left: true,\n right: true,\n top: true,\n };\n }\n\n if (visibility === 'never') {\n return {\n bottom: false,\n left: false,\n right: false,\n top: false,\n };\n }\n\n return scrollState;\n }, [visibility, scrollState]);\n\n // 计算数据属性\n const dataAttributes = useMemo(() => {\n const attributes: Record<string, boolean | string> = {\n 'data-orientation': orientation,\n };\n\n if (orientation === 'vertical') {\n if (finalScrollState.top && finalScrollState.bottom) {\n attributes['data-top-bottom-scroll'] = true;\n } else if (finalScrollState.top) {\n attributes['data-top-scroll'] = true;\n } else if (finalScrollState.bottom) {\n attributes['data-bottom-scroll'] = true;\n }\n } else {\n if (finalScrollState.left && finalScrollState.right) {\n attributes['data-left-right-scroll'] = true;\n } else if (finalScrollState.left) {\n attributes['data-left-scroll'] = true;\n } else if (finalScrollState.right) {\n attributes['data-right-scroll'] = true;\n }\n }\n\n return attributes;\n }, [orientation, finalScrollState]);\n\n // 计算滚动位置变体\n const scrollPosition = useMemo(() => {\n if (orientation === 'vertical') {\n if (finalScrollState.top && finalScrollState.bottom) return 'top-bottom';\n if (finalScrollState.top) return 'top';\n if (finalScrollState.bottom) return 'bottom';\n } else {\n if (finalScrollState.left && finalScrollState.right) return 'left-right';\n if (finalScrollState.left) return 'left';\n if (finalScrollState.right) return 'right';\n }\n return 'none';\n }, [orientation, finalScrollState]);\n\n return (\n <Flexbox\n className={cx(variants({ hideScrollBar, orientation, scrollPosition }), className)}\n ref={mergeRefs<HTMLDivElement>([domRef, ref])}\n style={{\n ...cssVariables,\n ...style,\n }}\n {...dataAttributes}\n {...rest}\n >\n {children}\n </Flexbox>\n );\n};\n\nScrollShadow.displayName = 'ScrollShadow';\n\nexport default ScrollShadow;\n"],"mappings":";;;;;;;;;;AAcA,MAAM,gBAAuC,EAC3C,WACA,UACA,cAAc,YACd,gBAAgB,OAChB,OAAO,IACP,SAAS,GACT,aAAa,QACb,YAAY,MACZ,oBACA,OACA,KACA,GAAG,WACC;CAEJ,MAAM,eAAe,eACZ,EACL,wBAAwB,GAAG,KAAK,GAClC,IACA,CAAC,IAAI,CACP;CACA,MAAM,SAAS,OAAuB,IAAI;CAE1C,MAAM,0BAA0B,kBAE7B,eAAe;EAChB,qBAAqB,UAAU;CACjC,CAAC;CAED,MAAM,cAAc,kBAAkB;EACpC;EACA,WAAW,aAAa,eAAe;EACvC;EACA,oBAAoB;EACpB;EACA,YAAY,CAAC,QAAQ;CACvB,CAAC;CAGD,MAAM,mBAAmB,cAAc;EACrC,IAAI,eAAe,UACjB,OAAO;GACL,QAAQ;GACR,MAAM;GACN,OAAO;GACP,KAAK;EACP;EAGF,IAAI,eAAe,SACjB,OAAO;GACL,QAAQ;GACR,MAAM;GACN,OAAO;GACP,KAAK;EACP;EAGF,OAAO;CACT,GAAG,CAAC,YAAY,WAAW,CAAC;CAG5B,MAAM,iBAAiB,cAAc;EACnC,MAAM,aAA+C,EACnD,oBAAoB,YACtB;EAEA,IAAI,gBAAgB,YACd;OAAA,iBAAiB,OAAO,iBAAiB,QAC3C,WAAW,4BAA4B;QAClC,IAAI,iBAAiB,KAC1B,WAAW,qBAAqB;QAC3B,IAAI,iBAAiB,QAC1B,WAAW,wBAAwB;EAAA,OAGrC,IAAI,iBAAiB,QAAQ,iBAAiB,OAC5C,WAAW,4BAA4B;OAClC,IAAI,iBAAiB,MAC1B,WAAW,sBAAsB;OAC5B,IAAI,iBAAiB,OAC1B,WAAW,uBAAuB;EAItC,OAAO;CACT,GAAG,CAAC,aAAa,gBAAgB,CAAC;CAGlC,MAAM,iBAAiB,cAAc;EACnC,IAAI,gBAAgB,YAAY;GAC9B,IAAI,iBAAiB,OAAO,iBAAiB,QAAQ,OAAO;GAC5D,IAAI,iBAAiB,KAAK,OAAO;GACjC,IAAI,iBAAiB,QAAQ,OAAO;EACtC,OAAO;GACL,IAAI,iBAAiB,QAAQ,iBAAiB,OAAO,OAAO;GAC5D,IAAI,iBAAiB,MAAM,OAAO;GAClC,IAAI,iBAAiB,OAAO,OAAO;EACrC;EACA,OAAO;CACT,GAAG,CAAC,aAAa,gBAAgB,CAAC;CAElC,OACE,oBAACA,mBAAD;EACE,WAAW,GAAG,SAAS;GAAE;GAAe;GAAa;EAAe,CAAC,GAAG,SAAS;EACjF,KAAK,UAA0B,CAAC,QAAQ,GAAG,CAAC;EAC5C,OAAO;GACL,GAAG;GACH,GAAG;EACL;EACA,GAAI;EACJ,GAAI;EAEH;CACM,CAAA;AAEb;AAEA,aAAa,cAAc"}
@@ -1 +1 @@
1
- {"version":3,"file":"SearchBar.mjs","names":["useControlledState"],"sources":["../../src/SearchBar/SearchBar.tsx"],"sourcesContent":["'use client';\n\nimport { cx } from 'antd-style';\nimport { LucideLoader2, Search } from 'lucide-react';\nimport { memo, useMemo, useRef, useState } from 'react';\nimport { useHotkeys } from 'react-hotkeys-hook';\nimport useControlledState from 'use-merge-value';\n\nimport Spotlight from '@/awesome/Spotlight';\nimport Hotkey from '@/Hotkey';\nimport Icon from '@/Icon';\nimport Input from '@/Input';\n\nimport { styles } from './style';\nimport { type SearchBarProps } from './type';\n\nconst SearchBar = memo<SearchBarProps>(\n ({\n defaultValue = '',\n spotlight,\n className,\n value,\n onInputChange,\n placeholder,\n enableShortKey,\n shortKey = 'mod+k',\n onSearch,\n loading,\n style,\n onChange,\n onBlur,\n onPressEnter,\n onFocus,\n styles: { input: inputStyle, shortKey: shortKeyStyle } = {},\n classNames: { input: inputClassName, shortKey: shortKeyClassName } = {},\n ...rest\n }) => {\n const [inputValue, setInputValue] = useControlledState(defaultValue, {\n defaultValue,\n onChange: onInputChange,\n value,\n });\n\n const [showTag, setShowTag] = useState<boolean>(true);\n const inputReference: any = useRef<HTMLInputElement>(null);\n const hotkey = useMemo(\n () => (shortKey.includes('+') ? shortKey : `mod+${shortKey}`),\n [shortKey],\n );\n\n useHotkeys(\n hotkey,\n () => {\n if (!enableShortKey) return;\n inputReference.current?.focus();\n },\n {\n enableOnFormTags: true,\n enabled: !!enableShortKey && !!shortKey,\n preventDefault: true,\n },\n );\n\n return (\n <div className={cx(styles.search, className)} style={style}>\n {spotlight && <Spotlight />}\n <Input\n allowClear\n className={inputClassName}\n placeholder={placeholder ?? 'Type keywords...'}\n ref={inputReference}\n style={inputStyle}\n value={inputValue}\n prefix={\n <Icon\n className={styles.icon}\n icon={loading ? LucideLoader2 : Search}\n size=\"small\"\n spin={loading}\n style={{ marginRight: 4 }}\n />\n }\n onBlur={(e) => {\n onBlur?.(e);\n setInputValue(e.target.value);\n setShowTag(true);\n }}\n onChange={(e) => {\n setInputValue(e.target.value);\n onChange?.(e);\n }}\n onFocus={(e) => {\n onFocus?.(e);\n setShowTag(false);\n }}\n onPressEnter={(e) => {\n onPressEnter?.(e);\n onSearch?.(inputValue);\n }}\n {...rest}\n />\n {enableShortKey && showTag && !inputValue && (\n <Hotkey\n compact\n className={cx(styles.tag, shortKeyClassName)}\n keys={hotkey}\n style={shortKeyStyle}\n />\n )}\n </div>\n );\n },\n);\n\nSearchBar.displayName = 'SearchBar';\n\nexport default SearchBar;\n"],"mappings":";;;;;;;;;;;;;AAgBA,MAAM,YAAY,MACf,EACC,eAAe,IACf,WACA,WACA,OACA,eACA,aACA,gBACA,WAAW,SACX,UACA,SACA,OACA,UACA,QACA,cACA,SACA,QAAQ,EAAE,OAAO,YAAY,UAAU,kBAAkB,CAAC,GAC1D,YAAY,EAAE,OAAO,gBAAgB,UAAU,sBAAsB,CAAC,GACtE,GAAG,WACC;CACJ,MAAM,CAAC,YAAY,iBAAiBA,cAAmB,cAAc;EACnE;EACA,UAAU;EACV;CACF,CAAC;CAED,MAAM,CAAC,SAAS,cAAc,SAAkB,IAAI;CACpD,MAAM,iBAAsB,OAAyB,IAAI;CACzD,MAAM,SAAS,cACN,SAAS,SAAS,GAAG,IAAI,WAAW,OAAO,YAClD,CAAC,QAAQ,CACX;CAEA,WACE,cACM;EACJ,IAAI,CAAC,gBAAgB;EACrB,eAAe,SAAS,MAAM;CAChC,GACA;EACE,kBAAkB;EAClB,SAAS,CAAC,CAAC,kBAAkB,CAAC,CAAC;EAC/B,gBAAgB;CAClB,CACF;CAEA,OACE,qBAAC,OAAD;EAAK,WAAW,GAAG,OAAO,QAAQ,SAAS;EAAU;YAArD;GACG,aAAa,oBAAC,WAAD,CAAY,CAAA;GAC1B,oBAAC,OAAD;IACE,YAAA;IACA,WAAW;IACX,aAAa,eAAe;IAC5B,KAAK;IACL,OAAO;IACP,OAAO;IACP,QACE,oBAAC,MAAD;KACE,WAAW,OAAO;KAClB,MAAM,UAAU,gBAAgB;KAChC,MAAK;KACL,MAAM;KACN,OAAO,EAAE,aAAa,EAAE;IACzB,CAAA;IAEH,SAAS,MAAM;KACb,SAAS,CAAC;KACV,cAAc,EAAE,OAAO,KAAK;KAC5B,WAAW,IAAI;IACjB;IACA,WAAW,MAAM;KACf,cAAc,EAAE,OAAO,KAAK;KAC5B,WAAW,CAAC;IACd;IACA,UAAU,MAAM;KACd,UAAU,CAAC;KACX,WAAW,KAAK;IAClB;IACA,eAAe,MAAM;KACnB,eAAe,CAAC;KAChB,WAAW,UAAU;IACvB;IACA,GAAI;GACL,CAAA;GACA,kBAAkB,WAAW,CAAC,cAC7B,oBAAC,QAAD;IACE,SAAA;IACA,WAAW,GAAG,OAAO,KAAK,iBAAiB;IAC3C,MAAM;IACN,OAAO;GACR,CAAA;EAEA;;AAET,CACF;AAEA,UAAU,cAAc"}
1
+ {"version":3,"file":"SearchBar.mjs","names":["useControlledState"],"sources":["../../src/SearchBar/SearchBar.tsx"],"sourcesContent":["'use client';\n\nimport { cx } from 'antd-style';\nimport { LucideLoader2, Search } from 'lucide-react';\nimport { memo, useMemo, useRef, useState } from 'react';\nimport { useHotkeys } from 'react-hotkeys-hook';\nimport useControlledState from 'use-merge-value';\n\nimport Spotlight from '@/awesome/Spotlight';\nimport Hotkey from '@/Hotkey';\nimport Icon from '@/Icon';\nimport Input from '@/Input';\n\nimport { styles } from './style';\nimport { type SearchBarProps } from './type';\n\nconst SearchBar = memo<SearchBarProps>(\n ({\n defaultValue = '',\n spotlight,\n className,\n value,\n onInputChange,\n placeholder,\n enableShortKey,\n shortKey = 'mod+k',\n onSearch,\n loading,\n style,\n onChange,\n onBlur,\n onPressEnter,\n onFocus,\n styles: { input: inputStyle, shortKey: shortKeyStyle } = {},\n classNames: { input: inputClassName, shortKey: shortKeyClassName } = {},\n ...rest\n }) => {\n const [inputValue, setInputValue] = useControlledState(defaultValue, {\n defaultValue,\n onChange: onInputChange,\n value,\n });\n\n const [showTag, setShowTag] = useState<boolean>(true);\n const inputReference: any = useRef<HTMLInputElement>(null);\n const hotkey = useMemo(\n () => (shortKey.includes('+') ? shortKey : `mod+${shortKey}`),\n [shortKey],\n );\n\n useHotkeys(\n hotkey,\n () => {\n if (!enableShortKey) return;\n inputReference.current?.focus();\n },\n {\n enableOnFormTags: true,\n enabled: !!enableShortKey && !!shortKey,\n preventDefault: true,\n },\n );\n\n return (\n <div className={cx(styles.search, className)} style={style}>\n {spotlight && <Spotlight />}\n <Input\n allowClear\n className={inputClassName}\n placeholder={placeholder ?? 'Type keywords...'}\n ref={inputReference}\n style={inputStyle}\n value={inputValue}\n prefix={\n <Icon\n className={styles.icon}\n icon={loading ? LucideLoader2 : Search}\n size=\"small\"\n spin={loading}\n style={{ marginRight: 4 }}\n />\n }\n onBlur={(e) => {\n onBlur?.(e);\n setInputValue(e.target.value);\n setShowTag(true);\n }}\n onChange={(e) => {\n setInputValue(e.target.value);\n onChange?.(e);\n }}\n onFocus={(e) => {\n onFocus?.(e);\n setShowTag(false);\n }}\n onPressEnter={(e) => {\n onPressEnter?.(e);\n onSearch?.(inputValue);\n }}\n {...rest}\n />\n {enableShortKey && showTag && !inputValue && (\n <Hotkey\n compact\n className={cx(styles.tag, shortKeyClassName)}\n keys={hotkey}\n style={shortKeyStyle}\n />\n )}\n </div>\n );\n },\n);\n\nSearchBar.displayName = 'SearchBar';\n\nexport default SearchBar;\n"],"mappings":";;;;;;;;;;;;;AAgBA,MAAM,YAAY,MACf,EACC,eAAe,IACf,WACA,WACA,OACA,eACA,aACA,gBACA,WAAW,SACX,UACA,SACA,OACA,UACA,QACA,cACA,SACA,QAAQ,EAAE,OAAO,YAAY,UAAU,kBAAkB,CAAC,GAC1D,YAAY,EAAE,OAAO,gBAAgB,UAAU,sBAAsB,CAAC,GACtE,GAAG,WACC;CACJ,MAAM,CAAC,YAAY,iBAAiBA,cAAmB,cAAc;EACnE;EACA,UAAU;EACV;CACF,CAAC;CAED,MAAM,CAAC,SAAS,cAAc,SAAkB,IAAI;CACpD,MAAM,iBAAsB,OAAyB,IAAI;CACzD,MAAM,SAAS,cACN,SAAS,SAAS,GAAG,IAAI,WAAW,OAAO,YAClD,CAAC,QAAQ,CACX;CAEA,WACE,cACM;EACJ,IAAI,CAAC,gBAAgB;EACrB,eAAe,SAAS,MAAM;CAChC,GACA;EACE,kBAAkB;EAClB,SAAS,CAAC,CAAC,kBAAkB,CAAC,CAAC;EAC/B,gBAAgB;CAClB,CACF;CAEA,OACE,qBAAC,OAAD;EAAK,WAAW,GAAG,OAAO,QAAQ,SAAS;EAAU;EAArD,UAAA;GACG,aAAa,oBAAC,WAAD,CAAY,CAAA;GAC1B,oBAAC,OAAD;IACE,YAAA;IACA,WAAW;IACX,aAAa,eAAe;IAC5B,KAAK;IACL,OAAO;IACP,OAAO;IACP,QACE,oBAAC,MAAD;KACE,WAAW,OAAO;KAClB,MAAM,UAAU,gBAAgB;KAChC,MAAK;KACL,MAAM;KACN,OAAO,EAAE,aAAa,EAAE;IACzB,CAAA;IAEH,SAAS,MAAM;KACb,SAAS,CAAC;KACV,cAAc,EAAE,OAAO,KAAK;KAC5B,WAAW,IAAI;IACjB;IACA,WAAW,MAAM;KACf,cAAc,EAAE,OAAO,KAAK;KAC5B,WAAW,CAAC;IACd;IACA,UAAU,MAAM;KACd,UAAU,CAAC;KACX,WAAW,KAAK;IAClB;IACA,eAAe,MAAM;KACnB,eAAe,CAAC;KAChB,WAAW,UAAU;IACvB;IACA,GAAI;GACL,CAAA;GACA,kBAAkB,WAAW,CAAC,cAC7B,oBAAC,QAAD;IACE,SAAA;IACA,WAAW,GAAG,OAAO,KAAK,iBAAiB;IAC3C,MAAM;IACN,OAAO;GACR,CAAA;EAEA;;AAET,CACF;AAEA,UAAU,cAAc"}
@@ -1 +1 @@
1
- {"version":3,"file":"SideNav.mjs","names":["Flexbox"],"sources":["../../src/SideNav/SideNav.tsx"],"sourcesContent":["'use client';\n\nimport { cx } from 'antd-style';\nimport { memo } from 'react';\n\nimport { Flexbox } from '@/Flex';\n\nimport { styles } from './style';\nimport type { SideNavProps } from './type';\n\nconst SideNav = memo<SideNavProps>(({ className, avatar, topActions, bottomActions, ...rest }) => {\n return (\n <Flexbox\n align={'center'}\n className={cx(styles, className)}\n flex={'none'}\n justify={'space-between'}\n {...rest}\n >\n <Flexbox align=\"center\" direction=\"vertical\" gap={12}>\n {avatar}\n <Flexbox align=\"center\" direction=\"vertical\" gap={8}>\n {topActions}\n </Flexbox>\n </Flexbox>\n <Flexbox align=\"center\" direction=\"vertical\" gap={4}>\n {bottomActions}\n </Flexbox>\n </Flexbox>\n );\n});\n\nSideNav.displayName = 'SideNav';\n\nexport default SideNav;\n"],"mappings":";;;;;;;AAUA,MAAM,UAAU,MAAoB,EAAE,WAAW,QAAQ,YAAY,eAAe,GAAG,WAAW;CAChG,OACE,qBAACA,mBAAD;EACE,OAAO;EACP,WAAW,GAAG,QAAQ,SAAS;EAC/B,MAAM;EACN,SAAS;EACT,GAAI;YALN,CAOE,qBAACA,mBAAD;GAAS,OAAM;GAAS,WAAU;GAAW,KAAK;aAAlD,CACG,QACD,oBAACA,mBAAD;IAAS,OAAM;IAAS,WAAU;IAAW,KAAK;cAC/C;GACM,CAAA,CACF;MACT,oBAACA,mBAAD;GAAS,OAAM;GAAS,WAAU;GAAW,KAAK;aAC/C;EACM,CAAA,CACF;;AAEb,CAAC;AAED,QAAQ,cAAc"}
1
+ {"version":3,"file":"SideNav.mjs","names":["Flexbox"],"sources":["../../src/SideNav/SideNav.tsx"],"sourcesContent":["'use client';\n\nimport { cx } from 'antd-style';\nimport { memo } from 'react';\n\nimport { Flexbox } from '@/Flex';\n\nimport { styles } from './style';\nimport type { SideNavProps } from './type';\n\nconst SideNav = memo<SideNavProps>(({ className, avatar, topActions, bottomActions, ...rest }) => {\n return (\n <Flexbox\n align={'center'}\n className={cx(styles, className)}\n flex={'none'}\n justify={'space-between'}\n {...rest}\n >\n <Flexbox align=\"center\" direction=\"vertical\" gap={12}>\n {avatar}\n <Flexbox align=\"center\" direction=\"vertical\" gap={8}>\n {topActions}\n </Flexbox>\n </Flexbox>\n <Flexbox align=\"center\" direction=\"vertical\" gap={4}>\n {bottomActions}\n </Flexbox>\n </Flexbox>\n );\n});\n\nSideNav.displayName = 'SideNav';\n\nexport default SideNav;\n"],"mappings":";;;;;;;AAUA,MAAM,UAAU,MAAoB,EAAE,WAAW,QAAQ,YAAY,eAAe,GAAG,WAAW;CAChG,OACE,qBAACA,mBAAD;EACE,OAAO;EACP,WAAW,GAAG,QAAQ,SAAS;EAC/B,MAAM;EACN,SAAS;EACT,GAAI;EALN,UAAA,CAOE,qBAACA,mBAAD;GAAS,OAAM;GAAS,WAAU;GAAW,KAAK;GAAlD,UAAA,CACG,QACD,oBAACA,mBAAD;IAAS,OAAM;IAAS,WAAU;IAAW,KAAK;IAC/C,UAAA;GACM,CAAA,CACF;EACT,CAAA,GAAA,oBAACA,mBAAD;GAAS,OAAM;GAAS,WAAU;GAAW,KAAK;GAC/C,UAAA;EACM,CAAA,CACF;;AAEb,CAAC;AAED,QAAQ,cAAc"}
@@ -1 +1 @@
1
- {"version":3,"file":"Skeleton.mjs","names":["Flexbox"],"sources":["../../src/Skeleton/Skeleton.tsx"],"sourcesContent":["'use client';\n\nimport { cx } from 'antd-style';\nimport { type FC } from 'react';\n\nimport { Flexbox } from '@/Flex';\n\nimport SkeletonAvatar from './SkeletonAvatar';\nimport SkeletonParagraph from './SkeletonParagraph';\nimport SkeletonTitle from './SkeletonTitle';\nimport { styles } from './style';\nimport type { SkeletonProps } from './type';\n\nconst Skeleton: FC<SkeletonProps> = ({\n active,\n avatar = false,\n title = true,\n paragraph = true,\n className,\n classNames,\n styles: customStyles,\n style,\n width,\n height,\n gap = 16,\n ...rest\n}) => {\n const showAvatar = Boolean(avatar);\n const showTitle = Boolean(title);\n const showParagraph = Boolean(paragraph);\n const avatarProps = typeof avatar === 'object' ? avatar : undefined;\n const titleProps = typeof title === 'object' ? title : undefined;\n const paragraphProps = typeof paragraph === 'object' ? paragraph : undefined;\n const rootStyle = {\n ...style,\n ...customStyles?.root,\n ...(width !== undefined ? { width } : {}),\n ...(height !== undefined ? { height } : {}),\n };\n\n const avatarActive = avatarProps?.active ?? active;\n const titleActive = titleProps?.active ?? active;\n const paragraphActive = paragraphProps?.active ?? active;\n\n return (\n <Flexbox\n horizontal\n align={showParagraph ? 'flex-start' : 'center'}\n className={cx(className, classNames?.root)}\n gap={gap}\n style={rootStyle}\n width={'100%'}\n {...rest}\n >\n {showAvatar && (\n <SkeletonAvatar\n {...avatarProps}\n active={avatarActive}\n className={cx(styles.avatar, classNames?.avatar, avatarProps?.className)}\n style={{\n ...avatarProps?.style,\n ...customStyles?.avatar,\n }}\n />\n )}\n <Flexbox gap={gap} width={'100%'}>\n {showTitle && (\n <SkeletonTitle\n {...titleProps}\n active={titleActive}\n className={cx(classNames?.title, titleProps?.className)}\n style={{\n ...titleProps?.style,\n ...customStyles?.title,\n }}\n />\n )}\n {showParagraph && (\n <SkeletonParagraph\n {...paragraphProps}\n active={paragraphActive}\n className={cx(classNames?.paragraph, paragraphProps?.className)}\n style={{\n ...paragraphProps?.style,\n ...customStyles?.paragraph,\n }}\n />\n )}\n </Flexbox>\n </Flexbox>\n );\n};\n\nSkeleton.displayName = 'Skeleton';\n\nexport default Skeleton;\n"],"mappings":";;;;;;;;;AAaA,MAAM,YAA+B,EACnC,QACA,SAAS,OACT,QAAQ,MACR,YAAY,MACZ,WACA,YACA,QAAQ,cACR,OACA,OACA,QACA,MAAM,IACN,GAAG,WACC;CACJ,MAAM,aAAa,QAAQ,MAAM;CACjC,MAAM,YAAY,QAAQ,KAAK;CAC/B,MAAM,gBAAgB,QAAQ,SAAS;CACvC,MAAM,cAAc,OAAO,WAAW,WAAW,SAAS,KAAA;CAC1D,MAAM,aAAa,OAAO,UAAU,WAAW,QAAQ,KAAA;CACvD,MAAM,iBAAiB,OAAO,cAAc,WAAW,YAAY,KAAA;CACnE,MAAM,YAAY;EAChB,GAAG;EACH,GAAG,cAAc;EACjB,GAAI,UAAU,KAAA,IAAY,EAAE,MAAM,IAAI,CAAC;EACvC,GAAI,WAAW,KAAA,IAAY,EAAE,OAAO,IAAI,CAAC;CAC3C;CAEA,MAAM,eAAe,aAAa,UAAU;CAC5C,MAAM,cAAc,YAAY,UAAU;CAC1C,MAAM,kBAAkB,gBAAgB,UAAU;CAElD,OACE,qBAACA,mBAAD;EACE,YAAA;EACA,OAAO,gBAAgB,eAAe;EACtC,WAAW,GAAG,WAAW,YAAY,IAAI;EACpC;EACL,OAAO;EACP,OAAO;EACP,GAAI;YAPN,CASG,cACC,oBAAC,gBAAD;GACE,GAAI;GACJ,QAAQ;GACR,WAAW,GAAG,OAAO,QAAQ,YAAY,QAAQ,aAAa,SAAS;GACvE,OAAO;IACL,GAAG,aAAa;IAChB,GAAG,cAAc;GACnB;EACD,CAAA,GAEH,qBAACA,mBAAD;GAAc;GAAK,OAAO;aAA1B,CACG,aACC,oBAAC,eAAD;IACE,GAAI;IACJ,QAAQ;IACR,WAAW,GAAG,YAAY,OAAO,YAAY,SAAS;IACtD,OAAO;KACL,GAAG,YAAY;KACf,GAAG,cAAc;IACnB;GACD,CAAA,GAEF,iBACC,oBAAC,mBAAD;IACE,GAAI;IACJ,QAAQ;IACR,WAAW,GAAG,YAAY,WAAW,gBAAgB,SAAS;IAC9D,OAAO;KACL,GAAG,gBAAgB;KACnB,GAAG,cAAc;IACnB;GACD,CAAA,CAEI;IACF;;AAEb;AAEA,SAAS,cAAc"}
1
+ {"version":3,"file":"Skeleton.mjs","names":["Flexbox"],"sources":["../../src/Skeleton/Skeleton.tsx"],"sourcesContent":["'use client';\n\nimport { cx } from 'antd-style';\nimport { type FC } from 'react';\n\nimport { Flexbox } from '@/Flex';\n\nimport SkeletonAvatar from './SkeletonAvatar';\nimport SkeletonParagraph from './SkeletonParagraph';\nimport SkeletonTitle from './SkeletonTitle';\nimport { styles } from './style';\nimport type { SkeletonProps } from './type';\n\nconst Skeleton: FC<SkeletonProps> = ({\n active,\n avatar = false,\n title = true,\n paragraph = true,\n className,\n classNames,\n styles: customStyles,\n style,\n width,\n height,\n gap = 16,\n ...rest\n}) => {\n const showAvatar = Boolean(avatar);\n const showTitle = Boolean(title);\n const showParagraph = Boolean(paragraph);\n const avatarProps = typeof avatar === 'object' ? avatar : undefined;\n const titleProps = typeof title === 'object' ? title : undefined;\n const paragraphProps = typeof paragraph === 'object' ? paragraph : undefined;\n const rootStyle = {\n ...style,\n ...customStyles?.root,\n ...(width !== undefined ? { width } : {}),\n ...(height !== undefined ? { height } : {}),\n };\n\n const avatarActive = avatarProps?.active ?? active;\n const titleActive = titleProps?.active ?? active;\n const paragraphActive = paragraphProps?.active ?? active;\n\n return (\n <Flexbox\n horizontal\n align={showParagraph ? 'flex-start' : 'center'}\n className={cx(className, classNames?.root)}\n gap={gap}\n style={rootStyle}\n width={'100%'}\n {...rest}\n >\n {showAvatar && (\n <SkeletonAvatar\n {...avatarProps}\n active={avatarActive}\n className={cx(styles.avatar, classNames?.avatar, avatarProps?.className)}\n style={{\n ...avatarProps?.style,\n ...customStyles?.avatar,\n }}\n />\n )}\n <Flexbox gap={gap} width={'100%'}>\n {showTitle && (\n <SkeletonTitle\n {...titleProps}\n active={titleActive}\n className={cx(classNames?.title, titleProps?.className)}\n style={{\n ...titleProps?.style,\n ...customStyles?.title,\n }}\n />\n )}\n {showParagraph && (\n <SkeletonParagraph\n {...paragraphProps}\n active={paragraphActive}\n className={cx(classNames?.paragraph, paragraphProps?.className)}\n style={{\n ...paragraphProps?.style,\n ...customStyles?.paragraph,\n }}\n />\n )}\n </Flexbox>\n </Flexbox>\n );\n};\n\nSkeleton.displayName = 'Skeleton';\n\nexport default Skeleton;\n"],"mappings":";;;;;;;;;AAaA,MAAM,YAA+B,EACnC,QACA,SAAS,OACT,QAAQ,MACR,YAAY,MACZ,WACA,YACA,QAAQ,cACR,OACA,OACA,QACA,MAAM,IACN,GAAG,WACC;CACJ,MAAM,aAAa,QAAQ,MAAM;CACjC,MAAM,YAAY,QAAQ,KAAK;CAC/B,MAAM,gBAAgB,QAAQ,SAAS;CACvC,MAAM,cAAc,OAAO,WAAW,WAAW,SAAS,KAAA;CAC1D,MAAM,aAAa,OAAO,UAAU,WAAW,QAAQ,KAAA;CACvD,MAAM,iBAAiB,OAAO,cAAc,WAAW,YAAY,KAAA;CACnE,MAAM,YAAY;EAChB,GAAG;EACH,GAAG,cAAc;EACjB,GAAI,UAAU,KAAA,IAAY,EAAE,MAAM,IAAI,CAAC;EACvC,GAAI,WAAW,KAAA,IAAY,EAAE,OAAO,IAAI,CAAC;CAC3C;CAEA,MAAM,eAAe,aAAa,UAAU;CAC5C,MAAM,cAAc,YAAY,UAAU;CAC1C,MAAM,kBAAkB,gBAAgB,UAAU;CAElD,OACE,qBAACA,mBAAD;EACE,YAAA;EACA,OAAO,gBAAgB,eAAe;EACtC,WAAW,GAAG,WAAW,YAAY,IAAI;EACpC;EACL,OAAO;EACP,OAAO;EACP,GAAI;EAPN,UAAA,CASG,cACC,oBAAC,gBAAD;GACE,GAAI;GACJ,QAAQ;GACR,WAAW,GAAG,OAAO,QAAQ,YAAY,QAAQ,aAAa,SAAS;GACvE,OAAO;IACL,GAAG,aAAa;IAChB,GAAG,cAAc;GACnB;EACD,CAAA,GAEH,qBAACA,mBAAD;GAAc;GAAK,OAAO;GAA1B,UAAA,CACG,aACC,oBAAC,eAAD;IACE,GAAI;IACJ,QAAQ;IACR,WAAW,GAAG,YAAY,OAAO,YAAY,SAAS;IACtD,OAAO;KACL,GAAG,YAAY;KACf,GAAG,cAAc;IACnB;GACD,CAAA,GAEF,iBACC,oBAAC,mBAAD;IACE,GAAI;IACJ,QAAQ;IACR,WAAW,GAAG,YAAY,WAAW,gBAAgB,SAAS;IAC9D,OAAO;KACL,GAAG,gBAAgB;KACnB,GAAG,cAAc;IACnB;GACD,CAAA,CAEI;EACF,CAAA,CAAA;;AAEb;AAEA,SAAS,cAAc"}
@@ -17,12 +17,13 @@ const SkeletonButton = ({ active, block = false, shape = "default", size = "defa
17
17
  large: cssVar.borderRadiusLG,
18
18
  small: cssVar.borderRadiusSM
19
19
  };
20
+ const borderRadius = shape === "circle" ? "50%" : shape === "round" ? `calc(${cssVar.borderRadius} * 2)` : RADIUS_MAP[resolvedSize];
20
21
  return /* @__PURE__ */ jsx(SkeletonBlock, {
21
22
  active,
22
23
  className,
23
24
  height: baseHeight,
24
25
  style: {
25
- borderRadius: shape === "circle" ? "50%" : shape === "round" ? `calc(${cssVar.borderRadius} * 2)` : RADIUS_MAP[resolvedSize],
26
+ borderRadius,
26
27
  ...style
27
28
  },
28
29
  width: finalWidth,
@@ -1 +1 @@
1
- {"version":3,"file":"SkeletonButton.mjs","names":[],"sources":["../../src/Skeleton/SkeletonButton.tsx"],"sourcesContent":["'use client';\n\nimport { cssVar } from 'antd-style';\nimport { type FC } from 'react';\n\nimport SkeletonBlock from './SkeletonBlock';\nimport type { SkeletonButtonProps } from './type';\n\nconst HEIGHT_MAP: Record<'large' | 'small' | 'default', number> = {\n default: 36,\n large: 46,\n small: 28,\n};\n\nconst SkeletonButton: FC<SkeletonButtonProps> = ({\n active,\n block = false,\n shape = 'default',\n size = 'default',\n width,\n height,\n style,\n className,\n ...rest\n}) => {\n const resolvedSize = size ?? 'default';\n const baseHeight = height ?? HEIGHT_MAP[resolvedSize];\n const defaultWidth = block ? '100%' : shape === 'circle' ? baseHeight : 80;\n const finalWidth = width ?? defaultWidth;\n\n const RADIUS_MAP: Record<'large' | 'small' | 'default', string> = {\n default: cssVar.borderRadius,\n large: cssVar.borderRadiusLG,\n small: cssVar.borderRadiusSM,\n };\n\n const borderRadius =\n shape === 'circle'\n ? '50%'\n : shape === 'round'\n ? `calc(${cssVar.borderRadius} * 2)`\n : RADIUS_MAP[resolvedSize];\n\n return (\n <SkeletonBlock\n active={active}\n className={className}\n height={baseHeight}\n style={{ borderRadius, ...style }}\n width={finalWidth}\n {...rest}\n />\n );\n};\n\nSkeletonButton.displayName = 'SkeletonButton';\n\nexport default SkeletonButton;\n"],"mappings":";;;;;AAQA,MAAM,aAA4D;CAChE,SAAS;CACT,OAAO;CACP,OAAO;AACT;AAEA,MAAM,kBAA2C,EAC/C,QACA,QAAQ,OACR,QAAQ,WACR,OAAO,WACP,OACA,QACA,OACA,WACA,GAAG,WACC;CACJ,MAAM,eAAe,QAAQ;CAC7B,MAAM,aAAa,UAAU,WAAW;CAExC,MAAM,aAAa,UADE,QAAQ,SAAS,UAAU,WAAW,aAAa;CAGxE,MAAM,aAA4D;EAChE,SAAS,OAAO;EAChB,OAAO,OAAO;EACd,OAAO,OAAO;CAChB;CASA,OACE,oBAAC,eAAD;EACU;EACG;EACX,QAAQ;EACR,OAAO;GAAE,cAXX,UAAU,WACN,QACA,UAAU,UACR,QAAQ,OAAO,aAAa,SAC5B,WAAW;GAOQ,GAAG;EAAM;EAChC,OAAO;EACP,GAAI;CACL,CAAA;AAEL;AAEA,eAAe,cAAc"}
1
+ {"version":3,"file":"SkeletonButton.mjs","names":[],"sources":["../../src/Skeleton/SkeletonButton.tsx"],"sourcesContent":["'use client';\n\nimport { cssVar } from 'antd-style';\nimport { type FC } from 'react';\n\nimport SkeletonBlock from './SkeletonBlock';\nimport type { SkeletonButtonProps } from './type';\n\nconst HEIGHT_MAP: Record<'large' | 'small' | 'default', number> = {\n default: 36,\n large: 46,\n small: 28,\n};\n\nconst SkeletonButton: FC<SkeletonButtonProps> = ({\n active,\n block = false,\n shape = 'default',\n size = 'default',\n width,\n height,\n style,\n className,\n ...rest\n}) => {\n const resolvedSize = size ?? 'default';\n const baseHeight = height ?? HEIGHT_MAP[resolvedSize];\n const defaultWidth = block ? '100%' : shape === 'circle' ? baseHeight : 80;\n const finalWidth = width ?? defaultWidth;\n\n const RADIUS_MAP: Record<'large' | 'small' | 'default', string> = {\n default: cssVar.borderRadius,\n large: cssVar.borderRadiusLG,\n small: cssVar.borderRadiusSM,\n };\n\n const borderRadius =\n shape === 'circle'\n ? '50%'\n : shape === 'round'\n ? `calc(${cssVar.borderRadius} * 2)`\n : RADIUS_MAP[resolvedSize];\n\n return (\n <SkeletonBlock\n active={active}\n className={className}\n height={baseHeight}\n style={{ borderRadius, ...style }}\n width={finalWidth}\n {...rest}\n />\n );\n};\n\nSkeletonButton.displayName = 'SkeletonButton';\n\nexport default SkeletonButton;\n"],"mappings":";;;;;AAQA,MAAM,aAA4D;CAChE,SAAS;CACT,OAAO;CACP,OAAO;AACT;AAEA,MAAM,kBAA2C,EAC/C,QACA,QAAQ,OACR,QAAQ,WACR,OAAO,WACP,OACA,QACA,OACA,WACA,GAAG,WACC;CACJ,MAAM,eAAe,QAAQ;CAC7B,MAAM,aAAa,UAAU,WAAW;CAExC,MAAM,aAAa,UADE,QAAQ,SAAS,UAAU,WAAW,aAAa;CAGxE,MAAM,aAA4D;EAChE,SAAS,OAAO;EAChB,OAAO,OAAO;EACd,OAAO,OAAO;CAChB;CAEA,MAAM,eACJ,UAAU,WACN,QACA,UAAU,UACR,QAAQ,OAAO,aAAa,SAC5B,WAAW;CAEnB,OACE,oBAAC,eAAD;EACU;EACG;EACX,QAAQ;EACR,OAAO;GAAE;GAAc,GAAG;EAAM;EAChC,OAAO;EACP,GAAI;CACL,CAAA;AAEL;AAEA,eAAe,cAAc"}
@@ -1 +1 @@
1
- {"version":3,"file":"SkeletonParagraph.mjs","names":["Flexbox"],"sources":["../../src/Skeleton/SkeletonParagraph.tsx"],"sourcesContent":["'use client';\n\nimport { type FC } from 'react';\n\nimport { Flexbox } from '@/Flex';\n\nimport SkeletonBlock from './SkeletonBlock';\nimport type { SkeletonParagraphProps } from './type';\n\nconst DEFAULT_ROWS = 3;\n\nconst SkeletonParagraph: FC<SkeletonParagraphProps> = ({\n active,\n rows = DEFAULT_ROWS,\n gap,\n width,\n height,\n fontSize,\n lineHeight,\n style,\n className,\n ...rest\n}) => {\n const rowGap = gap;\n const rowCount = Math.max(rows, 1);\n const baseFontSize = fontSize ?? 14;\n const resolvedLineHeight = lineHeight ?? 1.6;\n const computedHeight = height ? height : Math.round(baseFontSize * resolvedLineHeight);\n const marginBlock = computedHeight - baseFontSize;\n const widthList = Array.isArray(width) ? width : null;\n\n const getRowWidth = (index: number): string | number => {\n if (widthList) return widthList[index] ?? widthList.at(-1) ?? '100%';\n if (width !== undefined) return width as string | number;\n if (index === rowCount - 1) return '66%';\n return '100%';\n };\n\n const containerStyle = { gap: rowGap, ...style };\n\n return (\n <Flexbox\n className={className}\n gap={gap || marginBlock}\n style={containerStyle}\n width={'100%'}\n {...rest}\n >\n {Array.from({ length: rowCount }).map((_, index) => (\n <SkeletonBlock\n active={active}\n height={baseFontSize}\n key={index}\n width={getRowWidth(index)}\n />\n ))}\n </Flexbox>\n );\n};\n\nSkeletonParagraph.displayName = 'SkeletonParagraph';\n\nexport default SkeletonParagraph;\n"],"mappings":";;;;;AASA,MAAM,eAAe;AAErB,MAAM,qBAAiD,EACrD,QACA,OAAO,cACP,KACA,OACA,QACA,UACA,YACA,OACA,WACA,GAAG,WACC;CACJ,MAAM,SAAS;CACf,MAAM,WAAW,KAAK,IAAI,MAAM,CAAC;CACjC,MAAM,eAAe,YAAY;CAGjC,MAAM,eADiB,SAAS,SAAS,KAAK,MAAM,gBADzB,cAAc,IAC4C,KAChD;CACrC,MAAM,YAAY,MAAM,QAAQ,KAAK,IAAI,QAAQ;CAEjD,MAAM,eAAe,UAAmC;EACtD,IAAI,WAAW,OAAO,UAAU,UAAU,UAAU,GAAG,EAAE,KAAK;EAC9D,IAAI,UAAU,KAAA,GAAW,OAAO;EAChC,IAAI,UAAU,WAAW,GAAG,OAAO;EACnC,OAAO;CACT;CAEA,MAAM,iBAAiB;EAAE,KAAK;EAAQ,GAAG;CAAM;CAE/C,OACE,oBAACA,mBAAD;EACa;EACX,KAAK,OAAO;EACZ,OAAO;EACP,OAAO;EACP,GAAI;YAEH,MAAM,KAAK,EAAE,QAAQ,SAAS,CAAC,CAAC,CAAC,KAAK,GAAG,UACxC,oBAAC,eAAD;GACU;GACR,QAAQ;GAER,OAAO,YAAY,KAAK;EACzB,GAFM,KAEN,CACF;CACM,CAAA;AAEb;AAEA,kBAAkB,cAAc"}
1
+ {"version":3,"file":"SkeletonParagraph.mjs","names":["Flexbox"],"sources":["../../src/Skeleton/SkeletonParagraph.tsx"],"sourcesContent":["'use client';\n\nimport { type FC } from 'react';\n\nimport { Flexbox } from '@/Flex';\n\nimport SkeletonBlock from './SkeletonBlock';\nimport type { SkeletonParagraphProps } from './type';\n\nconst DEFAULT_ROWS = 3;\n\nconst SkeletonParagraph: FC<SkeletonParagraphProps> = ({\n active,\n rows = DEFAULT_ROWS,\n gap,\n width,\n height,\n fontSize,\n lineHeight,\n style,\n className,\n ...rest\n}) => {\n const rowGap = gap;\n const rowCount = Math.max(rows, 1);\n const baseFontSize = fontSize ?? 14;\n const resolvedLineHeight = lineHeight ?? 1.6;\n const computedHeight = height ? height : Math.round(baseFontSize * resolvedLineHeight);\n const marginBlock = computedHeight - baseFontSize;\n const widthList = Array.isArray(width) ? width : null;\n\n const getRowWidth = (index: number): string | number => {\n if (widthList) return widthList[index] ?? widthList.at(-1) ?? '100%';\n if (width !== undefined) return width as string | number;\n if (index === rowCount - 1) return '66%';\n return '100%';\n };\n\n const containerStyle = { gap: rowGap, ...style };\n\n return (\n <Flexbox\n className={className}\n gap={gap || marginBlock}\n style={containerStyle}\n width={'100%'}\n {...rest}\n >\n {Array.from({ length: rowCount }).map((_, index) => (\n <SkeletonBlock\n active={active}\n height={baseFontSize}\n key={index}\n width={getRowWidth(index)}\n />\n ))}\n </Flexbox>\n );\n};\n\nSkeletonParagraph.displayName = 'SkeletonParagraph';\n\nexport default SkeletonParagraph;\n"],"mappings":";;;;;AASA,MAAM,eAAe;AAErB,MAAM,qBAAiD,EACrD,QACA,OAAO,cACP,KACA,OACA,QACA,UACA,YACA,OACA,WACA,GAAG,WACC;CACJ,MAAM,SAAS;CACf,MAAM,WAAW,KAAK,IAAI,MAAM,CAAC;CACjC,MAAM,eAAe,YAAY;CAGjC,MAAM,eADiB,SAAS,SAAS,KAAK,MAAM,gBADzB,cAAc,IAC4C,KAChD;CACrC,MAAM,YAAY,MAAM,QAAQ,KAAK,IAAI,QAAQ;CAEjD,MAAM,eAAe,UAAmC;EACtD,IAAI,WAAW,OAAO,UAAU,UAAU,UAAU,GAAG,EAAE,KAAK;EAC9D,IAAI,UAAU,KAAA,GAAW,OAAO;EAChC,IAAI,UAAU,WAAW,GAAG,OAAO;EACnC,OAAO;CACT;CAEA,MAAM,iBAAiB;EAAE,KAAK;EAAQ,GAAG;CAAM;CAE/C,OACE,oBAACA,mBAAD;EACa;EACX,KAAK,OAAO;EACZ,OAAO;EACP,OAAO;EACP,GAAI;EAEH,UAAA,MAAM,KAAK,EAAE,QAAQ,SAAS,CAAC,CAAC,CAAC,KAAK,GAAG,UACxC,oBAAC,eAAD;GACU;GACR,QAAQ;GAER,OAAO,YAAY,KAAK;EACzB,GAFM,KAEN,CACF;CACM,CAAA;AAEb;AAEA,kBAAkB,cAAc"}
@@ -1 +1 @@
1
- {"version":3,"file":"SkeletonTags.mjs","names":["Flexbox"],"sources":["../../src/Skeleton/SkeletonTags.tsx"],"sourcesContent":["'use client';\n\nimport { cssVar } from 'antd-style';\nimport { type FC } from 'react';\n\nimport { Flexbox } from '@/Flex';\n\nimport SkeletonBlock from './SkeletonBlock';\nimport type { SkeletonTagsProps } from './type';\n\nconst DEFAULT_COUNT = 1;\n\nconst HEIGHT_MAP: Record<'small' | 'middle' | 'large', number> = {\n large: 28,\n middle: 22,\n small: 20,\n};\n\nconst DEFAULT_WIDTH_MAP: Record<'small' | 'middle' | 'large', number> = {\n large: 64,\n middle: 48,\n small: 36,\n};\n\nconst SkeletonTags: FC<SkeletonTagsProps> = ({\n active,\n className,\n count = DEFAULT_COUNT,\n gap,\n height,\n size = 'middle',\n style,\n width,\n ...rest\n}) => {\n const resolvedGap = gap !== undefined ? `${gap}px` : cssVar.paddingXS;\n const resolvedCount = Math.max(count, 1);\n const resolvedHeight = height ?? HEIGHT_MAP[size];\n const widthList = Array.isArray(width) ? width : null;\n const defaultWidth = DEFAULT_WIDTH_MAP[size];\n\n const RADIUS_MAP: Record<'large' | 'small' | 'middle', string> = {\n large: cssVar.borderRadius,\n middle: cssVar.borderRadiusSM,\n small: cssVar.borderRadiusXS,\n };\n\n const getWidth = (index: number) => {\n if (widthList) return widthList[index] ?? widthList.at(-1) ?? defaultWidth;\n if (width !== undefined) return width as string | number;\n return defaultWidth;\n };\n\n return (\n <Flexbox horizontal className={className} style={{ gap: resolvedGap, ...style }} {...rest}>\n {Array.from({ length: resolvedCount }).map((_, index) => (\n <SkeletonBlock\n active={active}\n height={resolvedHeight}\n key={index}\n width={getWidth(index)}\n style={{\n borderRadius: RADIUS_MAP[size],\n }}\n />\n ))}\n </Flexbox>\n );\n};\n\nSkeletonTags.displayName = 'SkeletonTags';\n\nexport default SkeletonTags;\n"],"mappings":";;;;;;AAUA,MAAM,gBAAgB;AAEtB,MAAM,aAA2D;CAC/D,OAAO;CACP,QAAQ;CACR,OAAO;AACT;AAEA,MAAM,oBAAkE;CACtE,OAAO;CACP,QAAQ;CACR,OAAO;AACT;AAEA,MAAM,gBAAuC,EAC3C,QACA,WACA,QAAQ,eACR,KACA,QACA,OAAO,UACP,OACA,OACA,GAAG,WACC;CACJ,MAAM,cAAc,QAAQ,KAAA,IAAY,GAAG,IAAI,MAAM,OAAO;CAC5D,MAAM,gBAAgB,KAAK,IAAI,OAAO,CAAC;CACvC,MAAM,iBAAiB,UAAU,WAAW;CAC5C,MAAM,YAAY,MAAM,QAAQ,KAAK,IAAI,QAAQ;CACjD,MAAM,eAAe,kBAAkB;CAEvC,MAAM,aAA2D;EAC/D,OAAO,OAAO;EACd,QAAQ,OAAO;EACf,OAAO,OAAO;CAChB;CAEA,MAAM,YAAY,UAAkB;EAClC,IAAI,WAAW,OAAO,UAAU,UAAU,UAAU,GAAG,EAAE,KAAK;EAC9D,IAAI,UAAU,KAAA,GAAW,OAAO;EAChC,OAAO;CACT;CAEA,OACE,oBAACA,mBAAD;EAAS,YAAA;EAAsB;EAAW,OAAO;GAAE,KAAK;GAAa,GAAG;EAAM;EAAG,GAAI;YAClF,MAAM,KAAK,EAAE,QAAQ,cAAc,CAAC,CAAC,CAAC,KAAK,GAAG,UAC7C,oBAAC,eAAD;GACU;GACR,QAAQ;GAER,OAAO,SAAS,KAAK;GACrB,OAAO,EACL,cAAc,WAAW,MAC3B;EACD,GALM,KAKN,CACF;CACM,CAAA;AAEb;AAEA,aAAa,cAAc"}
1
+ {"version":3,"file":"SkeletonTags.mjs","names":["Flexbox"],"sources":["../../src/Skeleton/SkeletonTags.tsx"],"sourcesContent":["'use client';\n\nimport { cssVar } from 'antd-style';\nimport { type FC } from 'react';\n\nimport { Flexbox } from '@/Flex';\n\nimport SkeletonBlock from './SkeletonBlock';\nimport type { SkeletonTagsProps } from './type';\n\nconst DEFAULT_COUNT = 1;\n\nconst HEIGHT_MAP: Record<'small' | 'middle' | 'large', number> = {\n large: 28,\n middle: 22,\n small: 20,\n};\n\nconst DEFAULT_WIDTH_MAP: Record<'small' | 'middle' | 'large', number> = {\n large: 64,\n middle: 48,\n small: 36,\n};\n\nconst SkeletonTags: FC<SkeletonTagsProps> = ({\n active,\n className,\n count = DEFAULT_COUNT,\n gap,\n height,\n size = 'middle',\n style,\n width,\n ...rest\n}) => {\n const resolvedGap = gap !== undefined ? `${gap}px` : cssVar.paddingXS;\n const resolvedCount = Math.max(count, 1);\n const resolvedHeight = height ?? HEIGHT_MAP[size];\n const widthList = Array.isArray(width) ? width : null;\n const defaultWidth = DEFAULT_WIDTH_MAP[size];\n\n const RADIUS_MAP: Record<'large' | 'small' | 'middle', string> = {\n large: cssVar.borderRadius,\n middle: cssVar.borderRadiusSM,\n small: cssVar.borderRadiusXS,\n };\n\n const getWidth = (index: number) => {\n if (widthList) return widthList[index] ?? widthList.at(-1) ?? defaultWidth;\n if (width !== undefined) return width as string | number;\n return defaultWidth;\n };\n\n return (\n <Flexbox horizontal className={className} style={{ gap: resolvedGap, ...style }} {...rest}>\n {Array.from({ length: resolvedCount }).map((_, index) => (\n <SkeletonBlock\n active={active}\n height={resolvedHeight}\n key={index}\n width={getWidth(index)}\n style={{\n borderRadius: RADIUS_MAP[size],\n }}\n />\n ))}\n </Flexbox>\n );\n};\n\nSkeletonTags.displayName = 'SkeletonTags';\n\nexport default SkeletonTags;\n"],"mappings":";;;;;;AAUA,MAAM,gBAAgB;AAEtB,MAAM,aAA2D;CAC/D,OAAO;CACP,QAAQ;CACR,OAAO;AACT;AAEA,MAAM,oBAAkE;CACtE,OAAO;CACP,QAAQ;CACR,OAAO;AACT;AAEA,MAAM,gBAAuC,EAC3C,QACA,WACA,QAAQ,eACR,KACA,QACA,OAAO,UACP,OACA,OACA,GAAG,WACC;CACJ,MAAM,cAAc,QAAQ,KAAA,IAAY,GAAG,IAAI,MAAM,OAAO;CAC5D,MAAM,gBAAgB,KAAK,IAAI,OAAO,CAAC;CACvC,MAAM,iBAAiB,UAAU,WAAW;CAC5C,MAAM,YAAY,MAAM,QAAQ,KAAK,IAAI,QAAQ;CACjD,MAAM,eAAe,kBAAkB;CAEvC,MAAM,aAA2D;EAC/D,OAAO,OAAO;EACd,QAAQ,OAAO;EACf,OAAO,OAAO;CAChB;CAEA,MAAM,YAAY,UAAkB;EAClC,IAAI,WAAW,OAAO,UAAU,UAAU,UAAU,GAAG,EAAE,KAAK;EAC9D,IAAI,UAAU,KAAA,GAAW,OAAO;EAChC,OAAO;CACT;CAEA,OACE,oBAACA,mBAAD;EAAS,YAAA;EAAsB;EAAW,OAAO;GAAE,KAAK;GAAa,GAAG;EAAM;EAAG,GAAI;EAClF,UAAA,MAAM,KAAK,EAAE,QAAQ,cAAc,CAAC,CAAC,CAAC,KAAK,GAAG,UAC7C,oBAAC,eAAD;GACU;GACR,QAAQ;GAER,OAAO,SAAS,KAAK;GACrB,OAAO,EACL,cAAc,WAAW,MAC3B;EACD,GALM,KAKN,CACF;CACM,CAAA;AAEb;AAEA,aAAa,cAAc"}
@@ -1 +1 @@
1
- {"version":3,"file":"SliderWithInput.mjs","names":["Flexbox","InputNumber"],"sources":["../../src/SliderWithInput/SliderWithInput.tsx"],"sourcesContent":["'use client';\n\nimport { Slider } from 'antd';\nimport { isNull } from 'es-toolkit/compat';\nimport { memo } from 'react';\n\nimport { Flexbox } from '@/Flex';\nimport InputNumber from '@/Input/InputNumber';\n\nimport type { SliderWithInputProps } from './type';\n\nconst SliderWithInput = memo<SliderWithInputProps>(\n ({\n step,\n value,\n onChange,\n max,\n min,\n defaultValue,\n size,\n controls,\n gap = 16,\n style,\n className,\n classNames,\n styles,\n disabled,\n unlimitedInput = false,\n changeOnWheel,\n ...rest\n }) => {\n const handleOnchange = (value: number | null) => {\n if (Number.isNaN(value) || isNull(value)) return;\n onChange?.(value);\n };\n const inputDisabled = Array.isArray(disabled) ? disabled.some(Boolean) : disabled;\n\n const { slider: sliderClassName, input: inputClassName, ...restClassNames } = classNames || {};\n const { slider: sliderStyle, input: inputStyle, ...restStyles } = styles || {};\n\n return (\n <Flexbox\n align={'center'}\n className={className}\n direction={'horizontal'}\n gap={gap}\n style={style}\n >\n <Slider\n className={sliderClassName}\n classNames={restClassNames}\n defaultValue={defaultValue}\n disabled={disabled}\n max={max}\n min={min}\n step={step}\n style={{ flex: 1, margin: size === 'small' ? 0 : undefined, ...sliderStyle }}\n styles={restStyles}\n tooltip={{ open: false }}\n value={typeof value === 'number' ? value : 0}\n onChange={handleOnchange}\n {...rest}\n />\n <InputNumber\n changeOnWheel={changeOnWheel}\n className={inputClassName}\n controls={size !== 'small' || controls}\n defaultValue={defaultValue}\n disabled={inputDisabled}\n max={unlimitedInput ? undefined : max}\n min={min}\n size={size}\n step={Number.isNaN(step) || isNull(step) ? undefined : step}\n style={{ flex: 1, maxWidth: size === 'small' ? 40 : 64, ...inputStyle }}\n value={typeof value === 'number' ? value : 0}\n onChange={(v) => handleOnchange(Number(v))}\n />\n </Flexbox>\n );\n },\n);\n\nSliderWithInput.displayName = 'SliderWithInput';\n\nexport default SliderWithInput;\n"],"mappings":";;;;;;;;AAWA,MAAM,kBAAkB,MACrB,EACC,MACA,OACA,UACA,KACA,KACA,cACA,MACA,UACA,MAAM,IACN,OACA,WACA,YACA,QACA,UACA,iBAAiB,OACjB,eACA,GAAG,WACC;CACJ,MAAM,kBAAkB,UAAyB;EAC/C,IAAI,OAAO,MAAM,KAAK,KAAK,OAAO,KAAK,GAAG;EAC1C,WAAW,KAAK;CAClB;CACA,MAAM,gBAAgB,MAAM,QAAQ,QAAQ,IAAI,SAAS,KAAK,OAAO,IAAI;CAEzE,MAAM,EAAE,QAAQ,iBAAiB,OAAO,gBAAgB,GAAG,mBAAmB,cAAc,CAAC;CAC7F,MAAM,EAAE,QAAQ,aAAa,OAAO,YAAY,GAAG,eAAe,UAAU,CAAC;CAE7E,OACE,qBAACA,mBAAD;EACE,OAAO;EACI;EACX,WAAW;EACN;EACE;YALT,CAOE,oBAAC,QAAD;GACE,WAAW;GACX,YAAY;GACE;GACJ;GACL;GACA;GACC;GACN,OAAO;IAAE,MAAM;IAAG,QAAQ,SAAS,UAAU,IAAI,KAAA;IAAW,GAAG;GAAY;GAC3E,QAAQ;GACR,SAAS,EAAE,MAAM,MAAM;GACvB,OAAO,OAAO,UAAU,WAAW,QAAQ;GAC3C,UAAU;GACV,GAAI;EACL,CAAA,GACD,oBAACC,eAAD;GACiB;GACf,WAAW;GACX,UAAU,SAAS,WAAW;GAChB;GACd,UAAU;GACV,KAAK,iBAAiB,KAAA,IAAY;GAC7B;GACC;GACN,MAAM,OAAO,MAAM,IAAI,KAAK,OAAO,IAAI,IAAI,KAAA,IAAY;GACvD,OAAO;IAAE,MAAM;IAAG,UAAU,SAAS,UAAU,KAAK;IAAI,GAAG;GAAW;GACtE,OAAO,OAAO,UAAU,WAAW,QAAQ;GAC3C,WAAW,MAAM,eAAe,OAAO,CAAC,CAAC;EAC1C,CAAA,CACM;;AAEb,CACF;AAEA,gBAAgB,cAAc"}
1
+ {"version":3,"file":"SliderWithInput.mjs","names":["Flexbox","InputNumber"],"sources":["../../src/SliderWithInput/SliderWithInput.tsx"],"sourcesContent":["'use client';\n\nimport { Slider } from 'antd';\nimport { isNull } from 'es-toolkit/compat';\nimport { memo } from 'react';\n\nimport { Flexbox } from '@/Flex';\nimport InputNumber from '@/Input/InputNumber';\n\nimport type { SliderWithInputProps } from './type';\n\nconst SliderWithInput = memo<SliderWithInputProps>(\n ({\n step,\n value,\n onChange,\n max,\n min,\n defaultValue,\n size,\n controls,\n gap = 16,\n style,\n className,\n classNames,\n styles,\n disabled,\n unlimitedInput = false,\n changeOnWheel,\n ...rest\n }) => {\n const handleOnchange = (value: number | null) => {\n if (Number.isNaN(value) || isNull(value)) return;\n onChange?.(value);\n };\n const inputDisabled = Array.isArray(disabled) ? disabled.some(Boolean) : disabled;\n\n const { slider: sliderClassName, input: inputClassName, ...restClassNames } = classNames || {};\n const { slider: sliderStyle, input: inputStyle, ...restStyles } = styles || {};\n\n return (\n <Flexbox\n align={'center'}\n className={className}\n direction={'horizontal'}\n gap={gap}\n style={style}\n >\n <Slider\n className={sliderClassName}\n classNames={restClassNames}\n defaultValue={defaultValue}\n disabled={disabled}\n max={max}\n min={min}\n step={step}\n style={{ flex: 1, margin: size === 'small' ? 0 : undefined, ...sliderStyle }}\n styles={restStyles}\n tooltip={{ open: false }}\n value={typeof value === 'number' ? value : 0}\n onChange={handleOnchange}\n {...rest}\n />\n <InputNumber\n changeOnWheel={changeOnWheel}\n className={inputClassName}\n controls={size !== 'small' || controls}\n defaultValue={defaultValue}\n disabled={inputDisabled}\n max={unlimitedInput ? undefined : max}\n min={min}\n size={size}\n step={Number.isNaN(step) || isNull(step) ? undefined : step}\n style={{ flex: 1, maxWidth: size === 'small' ? 40 : 64, ...inputStyle }}\n value={typeof value === 'number' ? value : 0}\n onChange={(v) => handleOnchange(Number(v))}\n />\n </Flexbox>\n );\n },\n);\n\nSliderWithInput.displayName = 'SliderWithInput';\n\nexport default SliderWithInput;\n"],"mappings":";;;;;;;;AAWA,MAAM,kBAAkB,MACrB,EACC,MACA,OACA,UACA,KACA,KACA,cACA,MACA,UACA,MAAM,IACN,OACA,WACA,YACA,QACA,UACA,iBAAiB,OACjB,eACA,GAAG,WACC;CACJ,MAAM,kBAAkB,UAAyB;EAC/C,IAAI,OAAO,MAAM,KAAK,KAAK,OAAO,KAAK,GAAG;EAC1C,WAAW,KAAK;CAClB;CACA,MAAM,gBAAgB,MAAM,QAAQ,QAAQ,IAAI,SAAS,KAAK,OAAO,IAAI;CAEzE,MAAM,EAAE,QAAQ,iBAAiB,OAAO,gBAAgB,GAAG,mBAAmB,cAAc,CAAC;CAC7F,MAAM,EAAE,QAAQ,aAAa,OAAO,YAAY,GAAG,eAAe,UAAU,CAAC;CAE7E,OACE,qBAACA,mBAAD;EACE,OAAO;EACI;EACX,WAAW;EACN;EACE;EALT,UAAA,CAOE,oBAAC,QAAD;GACE,WAAW;GACX,YAAY;GACE;GACJ;GACL;GACA;GACC;GACN,OAAO;IAAE,MAAM;IAAG,QAAQ,SAAS,UAAU,IAAI,KAAA;IAAW,GAAG;GAAY;GAC3E,QAAQ;GACR,SAAS,EAAE,MAAM,MAAM;GACvB,OAAO,OAAO,UAAU,WAAW,QAAQ;GAC3C,UAAU;GACV,GAAI;EACL,CAAA,GACD,oBAACC,eAAD;GACiB;GACf,WAAW;GACX,UAAU,SAAS,WAAW;GAChB;GACd,UAAU;GACV,KAAK,iBAAiB,KAAA,IAAY;GAC7B;GACC;GACN,MAAM,OAAO,MAAM,IAAI,KAAK,OAAO,IAAI,IAAI,KAAA,IAAY;GACvD,OAAO;IAAE,MAAM;IAAG,UAAU,SAAS,UAAU,KAAK;IAAI,GAAG;GAAW;GACtE,OAAO,OAAO,UAAU,WAAW,QAAQ;GAC3C,WAAW,MAAM,eAAe,OAAO,CAAC,CAAC;EAC1C,CAAA,CACM;;AAEb,CACF;AAEA,gBAAgB,cAAc"}
@@ -1 +1 @@
1
- {"version":3,"file":"Snippet.mjs","names":["Flexbox"],"sources":["../../src/Snippet/Snippet.tsx"],"sourcesContent":["'use client';\n\nimport { cx } from 'antd-style';\nimport type { FC } from 'react';\n\nimport Spotlight from '@/awesome/Spotlight';\nimport CopyButton from '@/CopyButton';\nimport { Flexbox } from '@/Flex';\nimport SyntaxHighlighter from '@/Highlighter/SyntaxHighlighter';\n\nimport { styles, variants } from './style';\nimport { type SnippetProps } from './type';\n\nconst Snippet: FC<SnippetProps> = ({\n ref,\n prefix,\n language = 'tsx',\n children,\n copyable = true,\n variant = 'filled',\n spotlight,\n shadow,\n className,\n ...rest\n}) => {\n const tirmedChildren = children.trim();\n\n return (\n <Flexbox\n horizontal\n align={'center'}\n className={cx(variants({ shadow, variant }), className)}\n data-code-type=\"highlighter\"\n gap={8}\n ref={ref}\n {...rest}\n >\n {spotlight && <Spotlight />}\n <SyntaxHighlighter className={styles.hightlight} language={language}>\n {[prefix, tirmedChildren].filter(Boolean).join(' ')}\n </SyntaxHighlighter>\n {copyable && <CopyButton content={tirmedChildren} size={'small'} />}\n </Flexbox>\n );\n};\n\nSnippet.displayName = 'Snippet';\n\nexport default Snippet;\n"],"mappings":";;;;;;;;;AAaA,MAAM,WAA6B,EACjC,KACA,QACA,WAAW,OACX,UACA,WAAW,MACX,UAAU,UACV,WACA,QACA,WACA,GAAG,WACC;CACJ,MAAM,iBAAiB,SAAS,KAAK;CAErC,OACE,qBAACA,mBAAD;EACE,YAAA;EACA,OAAO;EACP,WAAW,GAAG,SAAS;GAAE;GAAQ;EAAQ,CAAC,GAAG,SAAS;EACtD,kBAAe;EACf,KAAK;EACA;EACL,GAAI;YAPN;GASG,aAAa,oBAAC,WAAD,CAAY,CAAA;GAC1B,oBAAC,mBAAD;IAAmB,WAAW,OAAO;IAAsB;cACxD,CAAC,QAAQ,cAAc,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG;GACjC,CAAA;GAClB,YAAY,oBAAC,YAAD;IAAY,SAAS;IAAgB,MAAM;GAAU,CAAA;EAC3D;;AAEb;AAEA,QAAQ,cAAc"}
1
+ {"version":3,"file":"Snippet.mjs","names":["Flexbox"],"sources":["../../src/Snippet/Snippet.tsx"],"sourcesContent":["'use client';\n\nimport { cx } from 'antd-style';\nimport type { FC } from 'react';\n\nimport Spotlight from '@/awesome/Spotlight';\nimport CopyButton from '@/CopyButton';\nimport { Flexbox } from '@/Flex';\nimport SyntaxHighlighter from '@/Highlighter/SyntaxHighlighter';\n\nimport { styles, variants } from './style';\nimport { type SnippetProps } from './type';\n\nconst Snippet: FC<SnippetProps> = ({\n ref,\n prefix,\n language = 'tsx',\n children,\n copyable = true,\n variant = 'filled',\n spotlight,\n shadow,\n className,\n ...rest\n}) => {\n const tirmedChildren = children.trim();\n\n return (\n <Flexbox\n horizontal\n align={'center'}\n className={cx(variants({ shadow, variant }), className)}\n data-code-type=\"highlighter\"\n gap={8}\n ref={ref}\n {...rest}\n >\n {spotlight && <Spotlight />}\n <SyntaxHighlighter className={styles.hightlight} language={language}>\n {[prefix, tirmedChildren].filter(Boolean).join(' ')}\n </SyntaxHighlighter>\n {copyable && <CopyButton content={tirmedChildren} size={'small'} />}\n </Flexbox>\n );\n};\n\nSnippet.displayName = 'Snippet';\n\nexport default Snippet;\n"],"mappings":";;;;;;;;;AAaA,MAAM,WAA6B,EACjC,KACA,QACA,WAAW,OACX,UACA,WAAW,MACX,UAAU,UACV,WACA,QACA,WACA,GAAG,WACC;CACJ,MAAM,iBAAiB,SAAS,KAAK;CAErC,OACE,qBAACA,mBAAD;EACE,YAAA;EACA,OAAO;EACP,WAAW,GAAG,SAAS;GAAE;GAAQ;EAAQ,CAAC,GAAG,SAAS;EACtD,kBAAe;EACf,KAAK;EACA;EACL,GAAI;EAPN,UAAA;GASG,aAAa,oBAAC,WAAD,CAAY,CAAA;GAC1B,oBAAC,mBAAD;IAAmB,WAAW,OAAO;IAAsB;IACxD,UAAA,CAAC,QAAQ,cAAc,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG;GACjC,CAAA;GAClB,YAAY,oBAAC,YAAD;IAAY,SAAS;IAAgB,MAAM;GAAU,CAAA;EAC3D;;AAEb;AAEA,QAAQ,cAAc"}
@@ -25,7 +25,11 @@ const SortableListParent = memo(({ ref, items, onChange, renderItem, renderOverl
25
25
  setActive(null);
26
26
  },
27
27
  onDragEnd: ({ active, over }) => {
28
- if (over && active.id !== over?.id) onChange(arrayMove(items, items.findIndex(({ id }) => id === active.id), items.findIndex(({ id }) => id === over.id)));
28
+ if (over && active.id !== over?.id) {
29
+ const activeIndex = items.findIndex(({ id }) => id === active.id);
30
+ const overIndex = items.findIndex(({ id }) => id === over.id);
31
+ onChange(arrayMove(items, activeIndex, overIndex));
32
+ }
29
33
  setActive(null);
30
34
  },
31
35
  onDragStart: ({ active }) => {
@@ -1 +1 @@
1
- {"version":3,"file":"SortableList.mjs","names":["Flexbox"],"sources":["../../src/SortableList/SortableList.tsx"],"sourcesContent":["'use client';\n\nimport {\n type Active,\n closestCenter,\n DndContext,\n KeyboardSensor,\n MeasuringStrategy,\n PointerSensor,\n useSensor,\n useSensors,\n} from '@dnd-kit/core';\nimport { restrictToVerticalAxis, restrictToWindowEdges } from '@dnd-kit/modifiers';\nimport {\n arrayMove,\n SortableContext,\n sortableKeyboardCoordinates,\n verticalListSortingStrategy,\n} from '@dnd-kit/sortable';\nimport { Fragment, memo, type ReactNode, useMemo, useState } from 'react';\n\nimport { Flexbox } from '@/Flex';\n\nimport DragHandle from './components/DragHandle';\nimport SortableItem from './components/SortableItem';\nimport SortableOverlay from './components/SortableOverlay';\nimport { styles } from './style';\nimport { type SortableListItem, type SortableListProps } from './type';\n\nconst measuringConfig = {\n droppable: {\n strategy: MeasuringStrategy.Always,\n },\n};\n\nconst SortableListParent = memo<SortableListProps>(\n ({ ref, items, onChange, renderItem, renderOverlay, gap = 8, ...rest }) => {\n const [active, setActive] = useState<Active | null>(null);\n const activeItem = useMemo(() => items.find((item) => item.id === active?.id), [active, items]);\n const sensors = useSensors(\n useSensor(PointerSensor),\n useSensor(KeyboardSensor, {\n coordinateGetter: sortableKeyboardCoordinates,\n }),\n );\n\n const overlayRenderer = renderOverlay ?? renderItem;\n\n return (\n <DndContext\n collisionDetection={closestCenter}\n measuring={measuringConfig}\n modifiers={[restrictToVerticalAxis, restrictToWindowEdges]}\n sensors={sensors}\n onDragCancel={() => {\n setActive(null);\n }}\n onDragEnd={({ active, over }) => {\n if (over && active.id !== over?.id) {\n const activeIndex = items.findIndex(({ id }) => id === active.id);\n const overIndex = items.findIndex(({ id }) => id === over.id);\n\n onChange(arrayMove(items, activeIndex, overIndex));\n }\n setActive(null);\n }}\n onDragStart={({ active }) => {\n setActive(active);\n }}\n >\n <SortableContext items={items} strategy={verticalListSortingStrategy}>\n <Flexbox as={'ul'} className={styles.container} gap={gap} ref={ref} {...rest}>\n {items.map((item) => (\n <Fragment key={item.id}>{renderItem(item)}</Fragment>\n ))}\n </Flexbox>\n </SortableContext>\n <SortableOverlay>{activeItem ? overlayRenderer(activeItem) : null}</SortableOverlay>\n </DndContext>\n );\n },\n);\n\nSortableListParent.displayName = 'SortableList';\n\nexport interface ISortableList {\n <T extends SortableListItem = SortableListItem>(props: SortableListProps<T>): ReactNode;\n DragHandle: typeof DragHandle;\n Item: typeof SortableItem;\n}\n\nconst SortableList = SortableListParent as unknown as ISortableList;\n\nSortableList.Item = SortableItem;\nSortableList.DragHandle = DragHandle;\n\nexport default SortableList;\n"],"mappings":";;;;;;;;;;;;AA6BA,MAAM,kBAAkB,EACtB,WAAW,EACT,UAAU,kBAAkB,OAC9B,EACF;AAEA,MAAM,qBAAqB,MACxB,EAAE,KAAK,OAAO,UAAU,YAAY,eAAe,MAAM,GAAG,GAAG,WAAW;CACzE,MAAM,CAAC,QAAQ,aAAa,SAAwB,IAAI;CACxD,MAAM,aAAa,cAAc,MAAM,MAAM,SAAS,KAAK,OAAO,QAAQ,EAAE,GAAG,CAAC,QAAQ,KAAK,CAAC;CAC9F,MAAM,UAAU,WACd,UAAU,aAAa,GACvB,UAAU,gBAAgB,EACxB,kBAAkB,4BACpB,CAAC,CACH;CAEA,MAAM,kBAAkB,iBAAiB;CAEzC,OACE,qBAAC,YAAD;EACE,oBAAoB;EACpB,WAAW;EACX,WAAW,CAAC,wBAAwB,qBAAqB;EAChD;EACT,oBAAoB;GAClB,UAAU,IAAI;EAChB;EACA,YAAY,EAAE,QAAQ,WAAW;GAC/B,IAAI,QAAQ,OAAO,OAAO,MAAM,IAI9B,SAAS,UAAU,OAHC,MAAM,WAAW,EAAE,SAAS,OAAO,OAAO,EAG1B,GAFlB,MAAM,WAAW,EAAE,SAAS,OAAO,KAAK,EAEX,CAAC,CAAC;GAEnD,UAAU,IAAI;EAChB;EACA,cAAc,EAAE,aAAa;GAC3B,UAAU,MAAM;EAClB;YAnBF,CAqBE,oBAAC,iBAAD;GAAwB;GAAO,UAAU;aACvC,oBAACA,mBAAD;IAAS,IAAI;IAAM,WAAW,OAAO;IAAgB;IAAU;IAAK,GAAI;cACrE,MAAM,KAAK,SACV,oBAAC,UAAD,EAAA,UAAyB,WAAW,IAAI,EAAY,GAArC,KAAK,EAAgC,CACrD;GACM,CAAA;EACM,CAAA,GACjB,oBAAC,iBAAD,EAAA,UAAkB,aAAa,gBAAgB,UAAU,IAAI,KAAsB,CAAA,CACzE;;AAEhB,CACF;AAEA,mBAAmB,cAAc;AAQjC,MAAM,eAAe;AAErB,aAAa,OAAO;AACpB,aAAa,aAAa"}
1
+ {"version":3,"file":"SortableList.mjs","names":["Flexbox"],"sources":["../../src/SortableList/SortableList.tsx"],"sourcesContent":["'use client';\n\nimport {\n type Active,\n closestCenter,\n DndContext,\n KeyboardSensor,\n MeasuringStrategy,\n PointerSensor,\n useSensor,\n useSensors,\n} from '@dnd-kit/core';\nimport { restrictToVerticalAxis, restrictToWindowEdges } from '@dnd-kit/modifiers';\nimport {\n arrayMove,\n SortableContext,\n sortableKeyboardCoordinates,\n verticalListSortingStrategy,\n} from '@dnd-kit/sortable';\nimport { Fragment, memo, type ReactNode, useMemo, useState } from 'react';\n\nimport { Flexbox } from '@/Flex';\n\nimport DragHandle from './components/DragHandle';\nimport SortableItem from './components/SortableItem';\nimport SortableOverlay from './components/SortableOverlay';\nimport { styles } from './style';\nimport { type SortableListItem, type SortableListProps } from './type';\n\nconst measuringConfig = {\n droppable: {\n strategy: MeasuringStrategy.Always,\n },\n};\n\nconst SortableListParent = memo<SortableListProps>(\n ({ ref, items, onChange, renderItem, renderOverlay, gap = 8, ...rest }) => {\n const [active, setActive] = useState<Active | null>(null);\n const activeItem = useMemo(() => items.find((item) => item.id === active?.id), [active, items]);\n const sensors = useSensors(\n useSensor(PointerSensor),\n useSensor(KeyboardSensor, {\n coordinateGetter: sortableKeyboardCoordinates,\n }),\n );\n\n const overlayRenderer = renderOverlay ?? renderItem;\n\n return (\n <DndContext\n collisionDetection={closestCenter}\n measuring={measuringConfig}\n modifiers={[restrictToVerticalAxis, restrictToWindowEdges]}\n sensors={sensors}\n onDragCancel={() => {\n setActive(null);\n }}\n onDragEnd={({ active, over }) => {\n if (over && active.id !== over?.id) {\n const activeIndex = items.findIndex(({ id }) => id === active.id);\n const overIndex = items.findIndex(({ id }) => id === over.id);\n\n onChange(arrayMove(items, activeIndex, overIndex));\n }\n setActive(null);\n }}\n onDragStart={({ active }) => {\n setActive(active);\n }}\n >\n <SortableContext items={items} strategy={verticalListSortingStrategy}>\n <Flexbox as={'ul'} className={styles.container} gap={gap} ref={ref} {...rest}>\n {items.map((item) => (\n <Fragment key={item.id}>{renderItem(item)}</Fragment>\n ))}\n </Flexbox>\n </SortableContext>\n <SortableOverlay>{activeItem ? overlayRenderer(activeItem) : null}</SortableOverlay>\n </DndContext>\n );\n },\n);\n\nSortableListParent.displayName = 'SortableList';\n\nexport interface ISortableList {\n <T extends SortableListItem = SortableListItem>(props: SortableListProps<T>): ReactNode;\n DragHandle: typeof DragHandle;\n Item: typeof SortableItem;\n}\n\nconst SortableList = SortableListParent as unknown as ISortableList;\n\nSortableList.Item = SortableItem;\nSortableList.DragHandle = DragHandle;\n\nexport default SortableList;\n"],"mappings":";;;;;;;;;;;;AA6BA,MAAM,kBAAkB,EACtB,WAAW,EACT,UAAU,kBAAkB,OAC9B,EACF;AAEA,MAAM,qBAAqB,MACxB,EAAE,KAAK,OAAO,UAAU,YAAY,eAAe,MAAM,GAAG,GAAG,WAAW;CACzE,MAAM,CAAC,QAAQ,aAAa,SAAwB,IAAI;CACxD,MAAM,aAAa,cAAc,MAAM,MAAM,SAAS,KAAK,OAAO,QAAQ,EAAE,GAAG,CAAC,QAAQ,KAAK,CAAC;CAC9F,MAAM,UAAU,WACd,UAAU,aAAa,GACvB,UAAU,gBAAgB,EACxB,kBAAkB,4BACpB,CAAC,CACH;CAEA,MAAM,kBAAkB,iBAAiB;CAEzC,OACE,qBAAC,YAAD;EACE,oBAAoB;EACpB,WAAW;EACX,WAAW,CAAC,wBAAwB,qBAAqB;EAChD;EACT,oBAAoB;GAClB,UAAU,IAAI;EAChB;EACA,YAAY,EAAE,QAAQ,WAAW;GAC/B,IAAI,QAAQ,OAAO,OAAO,MAAM,IAAI;IAClC,MAAM,cAAc,MAAM,WAAW,EAAE,SAAS,OAAO,OAAO,EAAE;IAChE,MAAM,YAAY,MAAM,WAAW,EAAE,SAAS,OAAO,KAAK,EAAE;IAE5D,SAAS,UAAU,OAAO,aAAa,SAAS,CAAC;GACnD;GACA,UAAU,IAAI;EAChB;EACA,cAAc,EAAE,aAAa;GAC3B,UAAU,MAAM;EAClB;EAnBF,UAAA,CAqBE,oBAAC,iBAAD;GAAwB;GAAO,UAAU;GACvC,UAAA,oBAACA,mBAAD;IAAS,IAAI;IAAM,WAAW,OAAO;IAAgB;IAAU;IAAK,GAAI;IACrE,UAAA,MAAM,KAAK,SACV,oBAAC,UAAD,EAAA,UAAyB,WAAW,IAAI,EAAY,GAArC,KAAK,EAAgC,CACrD;GACM,CAAA;EACM,CAAA,GACjB,oBAAC,iBAAD,EAAA,UAAkB,aAAa,gBAAgB,UAAU,IAAI,KAAsB,CAAA,CACzE;;AAEhB,CACF;AAEA,mBAAmB,cAAc;AAQjC,MAAM,eAAe;AAErB,aAAa,OAAO;AACpB,aAAa,aAAa"}