@lobehub/ui 5.51.2 → 5.53.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 (325) hide show
  1. package/es/Accordion/Accordion.mjs +1 -1
  2. package/es/Accordion/Accordion.mjs.map +1 -1
  3. package/es/ActionIconGroup/type.d.mts +2 -1
  4. package/es/Alert/Alert.mjs +1 -1
  5. package/es/AutoComplete/Select.mjs +1 -1
  6. package/es/Avatar/Avatar.mjs +2 -2
  7. package/es/Burger/Burger.mjs +2 -2
  8. package/es/Burger/Burger.mjs.map +1 -1
  9. package/es/Button/Button.mjs +1 -1
  10. package/es/CodeDiff/DiffPanel.mjs +1 -1
  11. package/es/CodeDiff/DiffPanel.mjs.map +1 -1
  12. package/es/Collapse/Collapse.mjs +1 -1
  13. package/es/ColorSwatches/ColorSwatches.mjs +21 -21
  14. package/es/ColorSwatches/ColorSwatches.mjs.map +1 -1
  15. package/es/ColorSwatches/style.mjs +3 -12
  16. package/es/ColorSwatches/style.mjs.map +1 -1
  17. package/es/DatePicker/DatePicker.mjs +1 -1
  18. package/es/DraggablePanel/DraggablePanel.mjs +1 -1
  19. package/es/Drawer/Drawer.mjs +1 -1
  20. package/es/EditableText/ControlInput.d.mts +2 -2
  21. package/es/EditableText/ControlInput.mjs +1 -1
  22. package/es/EditableText/ControlInput.mjs.map +1 -1
  23. package/es/EditableText/EditableText.mjs +1 -0
  24. package/es/EditableText/EditableText.mjs.map +1 -1
  25. package/es/EditableText/type.d.mts +5 -1
  26. package/es/EmojiPicker/AvatarUploader.mjs +76 -71
  27. package/es/EmojiPicker/AvatarUploader.mjs.map +1 -1
  28. package/es/EmojiPicker/EmojiPicker.mjs +12 -6
  29. package/es/EmojiPicker/EmojiPicker.mjs.map +1 -1
  30. package/es/EmojiPicker/style.mjs +32 -9
  31. package/es/EmojiPicker/style.mjs.map +1 -1
  32. package/es/EmojiPicker/type.d.mts +2 -1
  33. package/es/Form/Form.mjs +1 -1
  34. package/es/Form/components/FormDivider.mjs +1 -1
  35. package/es/Form/components/FormItem.mjs +1 -1
  36. package/es/Form/components/FormSubmitFooter.mjs +1 -1
  37. package/es/Form/components/FormTitle.mjs +1 -1
  38. package/es/GroupAvatar/GroupAvatar.mjs +1 -1
  39. package/es/GroupAvatar/GroupAvatar.mjs.map +1 -1
  40. package/es/GroupAvatar/type.d.mts +2 -1
  41. package/es/Highlighter/Highlighter.mjs +1 -1
  42. package/es/Highlighter/Highlighter.mjs.map +1 -1
  43. package/es/Highlighter/LangSelect.mjs +23 -13
  44. package/es/Highlighter/LangSelect.mjs.map +1 -1
  45. package/es/Highlighter/style.mjs +1 -1
  46. package/es/Highlighter/style.mjs.map +1 -1
  47. package/es/HtmlPreview/HtmlPreview.mjs +28 -1
  48. package/es/HtmlPreview/HtmlPreview.mjs.map +1 -1
  49. package/es/Image/viewer/ImageViewer.mjs +1 -1
  50. package/es/Image/viewer/ImageViewer.mjs.map +1 -1
  51. package/es/Image/viewer/Toolbar.mjs +1 -1
  52. package/es/Input/Input.mjs +1 -1
  53. package/es/Input/InputNumber.mjs +1 -1
  54. package/es/Input/InputOPT.mjs +1 -1
  55. package/es/Input/InputPassword.mjs +1 -1
  56. package/es/Input/TextArea.mjs +1 -1
  57. package/es/Menu/Menu.mjs +1 -1
  58. package/es/Menu/index.d.mts +2 -1
  59. package/es/Menu/index.mjs +1 -1
  60. package/es/Menu/itemInterface.d.mts +71 -0
  61. package/es/Menu/type.d.mts +8 -8
  62. package/es/Mermaid/Mermaid.mjs +1 -1
  63. package/es/Mermaid/Mermaid.mjs.map +1 -1
  64. package/es/Modal/Modal.mjs +1 -1
  65. package/es/SearchBar/SearchBar.mjs +1 -1
  66. package/es/SearchBar/SearchBar.mjs.map +1 -1
  67. package/es/SearchBar/type.d.mts +2 -2
  68. package/es/Segmented/Segmented.mjs +1 -1
  69. package/es/Select/Select.mjs +1 -1
  70. package/es/SliderWithInput/SliderWithInput.mjs +1 -1
  71. package/es/Tabs/Tabs.mjs +1 -1
  72. package/es/Tag/Tag.mjs +1 -1
  73. package/es/ThemeProvider/ConfigProvider.mjs +1 -1
  74. package/es/ThemeProvider/ThemeProvider.mjs +1 -1
  75. package/es/ThemeSwitch/ThemeSwitch.mjs +1 -1
  76. package/es/Toc/Toc.mjs +1 -1
  77. package/es/Toc/TocMobile.mjs +1 -1
  78. package/es/awesome/AgentSkillCard/AgentSkillCard.mjs +1 -1
  79. package/es/awesome/Hero/Hero.mjs +1 -1
  80. package/es/awesome/LandingSection/LandingSection.mjs +1 -1
  81. package/es/base-ui/Anchor/Anchor.d.mts +6 -0
  82. package/es/base-ui/Anchor/Anchor.mjs +141 -0
  83. package/es/base-ui/Anchor/Anchor.mjs.map +1 -0
  84. package/es/base-ui/Anchor/index.d.mts +3 -0
  85. package/es/base-ui/Anchor/style.mjs +80 -0
  86. package/es/base-ui/Anchor/style.mjs.map +1 -0
  87. package/es/base-ui/Anchor/type.d.mts +20 -0
  88. package/es/base-ui/AutoComplete/AutoComplete.mjs.map +1 -1
  89. package/es/base-ui/Avatar/Avatar.mjs +1 -1
  90. package/es/base-ui/Breadcrumb/Breadcrumb.d.mts +6 -0
  91. package/es/base-ui/Breadcrumb/Breadcrumb.mjs +58 -0
  92. package/es/base-ui/Breadcrumb/Breadcrumb.mjs.map +1 -0
  93. package/es/base-ui/Breadcrumb/index.d.mts +3 -0
  94. package/es/base-ui/Breadcrumb/style.mjs +65 -0
  95. package/es/base-ui/Breadcrumb/style.mjs.map +1 -0
  96. package/es/base-ui/Breadcrumb/type.d.mts +24 -0
  97. package/es/base-ui/Burger/Burger.d.mts +6 -0
  98. package/es/base-ui/Burger/Burger.mjs +69 -0
  99. package/es/base-ui/Burger/Burger.mjs.map +1 -0
  100. package/es/base-ui/Burger/index.d.mts +3 -0
  101. package/es/base-ui/Burger/style.mjs +63 -0
  102. package/es/base-ui/Burger/style.mjs.map +1 -0
  103. package/es/base-ui/Burger/type.d.mts +23 -0
  104. package/es/base-ui/Carousel/Carousel.d.mts +6 -0
  105. package/es/base-ui/Carousel/Carousel.mjs +157 -0
  106. package/es/base-ui/Carousel/Carousel.mjs.map +1 -0
  107. package/es/base-ui/Carousel/index.d.mts +3 -0
  108. package/es/base-ui/Carousel/style.mjs +88 -0
  109. package/es/base-ui/Carousel/style.mjs.map +1 -0
  110. package/es/base-ui/Carousel/type.d.mts +23 -0
  111. package/es/base-ui/ColorPicker/ColorPicker.d.mts +6 -0
  112. package/es/base-ui/ColorPicker/ColorPicker.mjs +227 -0
  113. package/es/base-ui/ColorPicker/ColorPicker.mjs.map +1 -0
  114. package/es/base-ui/ColorPicker/SaturationArea.mjs +64 -0
  115. package/es/base-ui/ColorPicker/SaturationArea.mjs.map +1 -0
  116. package/es/base-ui/ColorPicker/color.mjs +28 -0
  117. package/es/base-ui/ColorPicker/color.mjs.map +1 -0
  118. package/es/base-ui/ColorPicker/index.d.mts +3 -0
  119. package/es/base-ui/ColorPicker/style.mjs +180 -0
  120. package/es/base-ui/ColorPicker/style.mjs.map +1 -0
  121. package/es/base-ui/ColorPicker/type.d.mts +20 -0
  122. package/es/base-ui/ContextMenu/ContextMenuHost.mjs.map +1 -1
  123. package/es/base-ui/ContextMenu/renderItems.d.mts +0 -1
  124. package/es/base-ui/ContextMenu/renderItems.mjs.map +1 -1
  125. package/es/base-ui/DatePicker/CalendarPanel.mjs +188 -0
  126. package/es/base-ui/DatePicker/CalendarPanel.mjs.map +1 -0
  127. package/es/base-ui/DatePicker/DatePicker.d.mts +6 -0
  128. package/es/base-ui/DatePicker/DatePicker.mjs +88 -0
  129. package/es/base-ui/DatePicker/DatePicker.mjs.map +1 -0
  130. package/es/base-ui/DatePicker/DateRangePicker.d.mts +6 -0
  131. package/es/base-ui/DatePicker/DateRangePicker.mjs +128 -0
  132. package/es/base-ui/DatePicker/DateRangePicker.mjs.map +1 -0
  133. package/es/base-ui/DatePicker/PickerShell.mjs +43 -0
  134. package/es/base-ui/DatePicker/PickerShell.mjs.map +1 -0
  135. package/es/base-ui/DatePicker/calendar.d.mts +5 -0
  136. package/es/base-ui/DatePicker/calendar.mjs +46 -0
  137. package/es/base-ui/DatePicker/calendar.mjs.map +1 -0
  138. package/es/base-ui/DatePicker/index.d.mts +5 -0
  139. package/es/base-ui/DatePicker/style.mjs +193 -0
  140. package/es/base-ui/DatePicker/style.mjs.map +1 -0
  141. package/es/base-ui/DatePicker/type.d.mts +35 -0
  142. package/es/base-ui/Descriptions/Descriptions.d.mts +6 -0
  143. package/es/base-ui/Descriptions/Descriptions.mjs +62 -0
  144. package/es/base-ui/Descriptions/Descriptions.mjs.map +1 -0
  145. package/es/base-ui/Descriptions/index.d.mts +3 -0
  146. package/es/base-ui/Descriptions/style.mjs +64 -0
  147. package/es/base-ui/Descriptions/style.mjs.map +1 -0
  148. package/es/base-ui/Descriptions/type.d.mts +28 -0
  149. package/es/base-ui/Divider/Divider.d.mts +6 -0
  150. package/es/base-ui/Divider/Divider.mjs +30 -0
  151. package/es/base-ui/Divider/Divider.mjs.map +1 -0
  152. package/es/base-ui/Divider/index.d.mts +3 -0
  153. package/es/base-ui/Divider/style.mjs +59 -0
  154. package/es/base-ui/Divider/style.mjs.map +1 -0
  155. package/es/base-ui/Divider/type.d.mts +12 -0
  156. package/es/base-ui/Drawer/atoms.mjs.map +1 -1
  157. package/es/base-ui/DropdownMenu/atoms.mjs +1 -1
  158. package/es/base-ui/DropdownMenu/atoms.mjs.map +1 -1
  159. package/es/base-ui/DropdownMenu/renderItems.d.mts +0 -1
  160. package/es/base-ui/DropdownMenu/renderItems.mjs.map +1 -1
  161. package/es/base-ui/Form/components/FormTitle.mjs +1 -1
  162. package/es/base-ui/Form/components/FormTitle.mjs.map +1 -1
  163. package/es/base-ui/Form/type.d.mts +2 -2
  164. package/es/base-ui/Input/ClearButton.mjs +32 -0
  165. package/es/base-ui/Input/ClearButton.mjs.map +1 -0
  166. package/es/base-ui/Input/Input.mjs +30 -4
  167. package/es/base-ui/Input/Input.mjs.map +1 -1
  168. package/es/base-ui/Input/InputNumber.mjs +43 -22
  169. package/es/base-ui/Input/InputNumber.mjs.map +1 -1
  170. package/es/base-ui/Input/TextArea.mjs +50 -13
  171. package/es/base-ui/Input/TextArea.mjs.map +1 -1
  172. package/es/base-ui/Input/clearNativeValue.mjs +12 -0
  173. package/es/base-ui/Input/clearNativeValue.mjs.map +1 -0
  174. package/es/base-ui/Input/pressEnter.mjs +6 -0
  175. package/es/base-ui/Input/pressEnter.mjs.map +1 -0
  176. package/es/base-ui/Input/style.d.mts +5 -1
  177. package/es/base-ui/Input/style.mjs +67 -4
  178. package/es/base-ui/Input/style.mjs.map +1 -1
  179. package/es/base-ui/Input/type.d.mts +13 -2
  180. package/es/base-ui/List/List.d.mts +6 -0
  181. package/es/base-ui/List/List.mjs +50 -0
  182. package/es/base-ui/List/List.mjs.map +1 -0
  183. package/es/base-ui/List/ListRow.mjs +74 -0
  184. package/es/base-ui/List/ListRow.mjs.map +1 -0
  185. package/es/base-ui/List/index.d.mts +3 -0
  186. package/es/base-ui/List/style.mjs +146 -0
  187. package/es/base-ui/List/style.mjs.map +1 -0
  188. package/es/base-ui/List/type.d.mts +48 -0
  189. package/es/base-ui/Modal/atoms.mjs.map +1 -1
  190. package/es/base-ui/Modal/imperative.mjs +1 -1
  191. package/es/base-ui/Modal/imperative.mjs.map +1 -1
  192. package/es/base-ui/Modal/type.d.mts +1 -0
  193. package/es/base-ui/Popover/PopoverPortal.mjs.map +1 -1
  194. package/es/base-ui/Progress/Progress.mjs +16 -14
  195. package/es/base-ui/Progress/Progress.mjs.map +1 -1
  196. package/es/base-ui/Progress/style.mjs +16 -25
  197. package/es/base-ui/Progress/style.mjs.map +1 -1
  198. package/es/base-ui/QRCode/QRCode.d.mts +6 -0
  199. package/es/base-ui/QRCode/QRCode.mjs +105 -0
  200. package/es/base-ui/QRCode/QRCode.mjs.map +1 -0
  201. package/es/base-ui/QRCode/index.d.mts +3 -0
  202. package/es/base-ui/QRCode/qrPath.mjs +16 -0
  203. package/es/base-ui/QRCode/qrPath.mjs.map +1 -0
  204. package/es/base-ui/QRCode/style.mjs +52 -0
  205. package/es/base-ui/QRCode/style.mjs.map +1 -0
  206. package/es/base-ui/QRCode/type.d.mts +19 -0
  207. package/es/base-ui/Rate/Rate.d.mts +6 -0
  208. package/es/base-ui/Rate/Rate.mjs +111 -0
  209. package/es/base-ui/Rate/Rate.mjs.map +1 -0
  210. package/es/base-ui/Rate/index.d.mts +3 -0
  211. package/es/base-ui/Rate/style.mjs +81 -0
  212. package/es/base-ui/Rate/style.mjs.map +1 -0
  213. package/es/base-ui/Rate/type.d.mts +19 -0
  214. package/es/base-ui/Select/atoms.mjs.map +1 -1
  215. package/es/base-ui/Select/hooks.mjs.map +1 -1
  216. package/es/base-ui/Statistic/Statistic.d.mts +6 -0
  217. package/es/base-ui/Statistic/Statistic.mjs +42 -0
  218. package/es/base-ui/Statistic/Statistic.mjs.map +1 -0
  219. package/es/base-ui/Statistic/formatValue.d.mts +5 -0
  220. package/es/base-ui/Statistic/formatValue.mjs +23 -0
  221. package/es/base-ui/Statistic/formatValue.mjs.map +1 -0
  222. package/es/base-ui/Statistic/index.d.mts +4 -0
  223. package/es/base-ui/Statistic/style.mjs +34 -0
  224. package/es/base-ui/Statistic/style.mjs.map +1 -0
  225. package/es/base-ui/Statistic/type.d.mts +23 -0
  226. package/es/base-ui/Steps/Steps.d.mts +6 -0
  227. package/es/base-ui/Steps/Steps.mjs +74 -0
  228. package/es/base-ui/Steps/Steps.mjs.map +1 -0
  229. package/es/base-ui/Steps/index.d.mts +3 -0
  230. package/es/base-ui/Steps/style.mjs +155 -0
  231. package/es/base-ui/Steps/style.mjs.map +1 -0
  232. package/es/base-ui/Steps/type.d.mts +32 -0
  233. package/es/base-ui/Table/FilterMenu.mjs +45 -0
  234. package/es/base-ui/Table/FilterMenu.mjs.map +1 -0
  235. package/es/base-ui/Table/Table.d.mts +10 -0
  236. package/es/base-ui/Table/Table.mjs +134 -0
  237. package/es/base-ui/Table/Table.mjs.map +1 -0
  238. package/es/base-ui/Table/TableBody.mjs +59 -0
  239. package/es/base-ui/Table/TableBody.mjs.map +1 -0
  240. package/es/base-ui/Table/TableHead.mjs +50 -0
  241. package/es/base-ui/Table/TableHead.mjs.map +1 -0
  242. package/es/base-ui/Table/features.mjs +12 -0
  243. package/es/base-ui/Table/features.mjs.map +1 -0
  244. package/es/base-ui/Table/fixedOffsets.mjs +29 -0
  245. package/es/base-ui/Table/fixedOffsets.mjs.map +1 -0
  246. package/es/base-ui/Table/index.d.mts +3 -0
  247. package/es/base-ui/Table/style.mjs +168 -0
  248. package/es/base-ui/Table/style.mjs.map +1 -0
  249. package/es/base-ui/Table/toColumnDefs.mjs +26 -0
  250. package/es/base-ui/Table/toColumnDefs.mjs.map +1 -0
  251. package/es/base-ui/Table/type.d.mts +68 -0
  252. package/es/base-ui/Table/useTableState.mjs +99 -0
  253. package/es/base-ui/Table/useTableState.mjs.map +1 -0
  254. package/es/base-ui/Toast/imperative.mjs.map +1 -1
  255. package/es/base-ui/Tooltip/TooltipGroup.mjs.map +1 -1
  256. package/es/base-ui/Tooltip/TooltipStandalone.mjs.map +1 -1
  257. package/es/base-ui/index.d.mts +66 -21
  258. package/es/base-ui/index.mjs +42 -26
  259. package/es/base-ui/panelStyles.mjs +95 -0
  260. package/es/base-ui/panelStyles.mjs.map +1 -0
  261. package/es/chat/ChatList/components/HistoryDivider.mjs +9 -6
  262. package/es/chat/ChatList/components/HistoryDivider.mjs.map +1 -1
  263. package/es/chat/MessageModal/MessageModal.mjs +1 -1
  264. package/es/chat/TokenTag/TokenTag.mjs +1 -1
  265. package/es/color/CssVar/VarRow.mjs +1 -1
  266. package/es/color/CssVar/index.mjs +1 -1
  267. package/es/dashboard/FilterSidebar/FilterSidebar.mjs +1 -1
  268. package/es/eslint/index.mjs +100 -0
  269. package/es/eslint/index.mjs.map +1 -1
  270. package/es/i18n/resources/en/burger.d.mts +8 -0
  271. package/es/i18n/resources/en/burger.mjs +9 -0
  272. package/es/i18n/resources/en/burger.mjs.map +1 -0
  273. package/es/i18n/resources/en/colorPicker.d.mts +12 -0
  274. package/es/i18n/resources/en/colorPicker.mjs +13 -0
  275. package/es/i18n/resources/en/colorPicker.mjs.map +1 -0
  276. package/es/i18n/resources/en/common.d.mts +1 -0
  277. package/es/i18n/resources/en/common.mjs +1 -0
  278. package/es/i18n/resources/en/common.mjs.map +1 -1
  279. package/es/i18n/resources/en/datePicker.d.mts +13 -0
  280. package/es/i18n/resources/en/datePicker.mjs +14 -0
  281. package/es/i18n/resources/en/datePicker.mjs.map +1 -0
  282. package/es/i18n/resources/en/index.d.mts +15 -11
  283. package/es/i18n/resources/en/index.mjs +9 -1
  284. package/es/i18n/resources/en/index.mjs.map +1 -1
  285. package/es/i18n/resources/en/qrCode.d.mts +9 -0
  286. package/es/i18n/resources/en/qrCode.mjs +10 -0
  287. package/es/i18n/resources/en/qrCode.mjs.map +1 -0
  288. package/es/i18n/resources/zhCn/burger.d.mts +8 -0
  289. package/es/i18n/resources/zhCn/burger.mjs +9 -0
  290. package/es/i18n/resources/zhCn/burger.mjs.map +1 -0
  291. package/es/i18n/resources/zhCn/colorPicker.d.mts +12 -0
  292. package/es/i18n/resources/zhCn/colorPicker.mjs +13 -0
  293. package/es/i18n/resources/zhCn/colorPicker.mjs.map +1 -0
  294. package/es/i18n/resources/zhCn/common.d.mts +1 -0
  295. package/es/i18n/resources/zhCn/common.mjs +1 -0
  296. package/es/i18n/resources/zhCn/common.mjs.map +1 -1
  297. package/es/i18n/resources/zhCn/datePicker.d.mts +13 -0
  298. package/es/i18n/resources/zhCn/datePicker.mjs +14 -0
  299. package/es/i18n/resources/zhCn/datePicker.mjs.map +1 -0
  300. package/es/i18n/resources/zhCn/index.d.mts +15 -11
  301. package/es/i18n/resources/zhCn/index.mjs +9 -1
  302. package/es/i18n/resources/zhCn/index.mjs.map +1 -1
  303. package/es/i18n/resources/zhCn/qrCode.d.mts +9 -0
  304. package/es/i18n/resources/zhCn/qrCode.mjs +10 -0
  305. package/es/i18n/resources/zhCn/qrCode.mjs.map +1 -0
  306. package/es/i18n/types.d.mts +14 -10
  307. package/es/index.d.mts +12 -11
  308. package/es/index.mjs +23 -23
  309. package/es/mdx/Cards/Card.d.mts +2 -2
  310. package/es/mdx/Cards/Card.mjs +1 -1
  311. package/es/mdx/Cards/Card.mjs.map +1 -1
  312. package/es/mdx/Mdx/index.mjs +1 -1
  313. package/es/mdx/Mdx/index.mjs.map +1 -1
  314. package/es/mdx/Tabs/index.d.mts +2 -2
  315. package/es/mdx/Tabs/index.mjs +7 -2
  316. package/es/mdx/Tabs/index.mjs.map +1 -1
  317. package/es/mdx/Tabs/style.mjs +33 -1
  318. package/es/mdx/Tabs/style.mjs.map +1 -1
  319. package/es/mdx/mdxComponents/Citation/PopoverPanel.mjs +1 -1
  320. package/es/mdx/mdxComponents/Citation/PopoverPanel.mjs.map +1 -1
  321. package/es/node_modules/.pnpm/unist-util-visit@5.1.0/node_modules/unist-util-visit/lib/index.mjs.map +1 -1
  322. package/es/static-css/baseline.mjs +1 -4
  323. package/es/static-css/baseline.mjs.map +1 -1
  324. package/es/static-css/buildAntdStaticCss.mjs +1 -1
  325. package/package.json +3 -1
@@ -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;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
+ {"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 { Input } from '@/base-ui/Input';\nimport Hotkey from '@/Hotkey';\nimport Icon from '@/Icon';\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,5 +1,5 @@
1
- import { InputProps } from "../Input/type.mjs";
2
- import "../Input/index.mjs";
1
+ import { InputProps } from "../base-ui/Input/type.mjs";
2
+ import "../base-ui/Input/index.mjs";
3
3
  import { CSSProperties } from "react";
4
4
  //#region src/SearchBar/type.d.ts
5
5
  interface SearchBarProps extends Omit<InputProps, 'styles' | 'classNames'> {
@@ -2,8 +2,8 @@
2
2
  import { variants } from "./style.mjs";
3
3
  import { memo } from "react";
4
4
  import { jsx } from "react/jsx-runtime";
5
- import { Segmented } from "antd";
6
5
  import { cx } from "antd-style";
6
+ import { Segmented } from "antd";
7
7
  //#region src/Segmented/Segmented.tsx
8
8
  /**
9
9
  * @deprecated Use `Segmented` from `@lobehub/ui/base-ui` instead.
@@ -3,9 +3,9 @@ import Icon from "../Icon/Icon.mjs";
3
3
  import { variants } from "./style.mjs";
4
4
  import { memo } from "react";
5
5
  import { jsx } from "react/jsx-runtime";
6
- import { Select } from "antd";
7
6
  import { cx, useThemeMode } from "antd-style";
8
7
  import { ChevronDownIcon } from "lucide-react";
8
+ import { Select } from "antd";
9
9
  //#region src/Select/Select.tsx
10
10
  /**
11
11
  * @deprecated Use `Select` from `@lobehub/ui/base-ui` instead.
@@ -3,8 +3,8 @@ import FlexBasic_default from "../Flex/FlexBasic.mjs";
3
3
  import InputNumber$1 from "../Input/InputNumber.mjs";
4
4
  import { memo } from "react";
5
5
  import { jsx, jsxs } from "react/jsx-runtime";
6
- import { Slider } from "antd";
7
6
  import { isNull } from "es-toolkit/compat";
7
+ import { Slider } from "antd";
8
8
  //#region src/SliderWithInput/SliderWithInput.tsx
9
9
  const SliderWithInput = memo(({ step, value, onChange, max, min, defaultValue, size, controls, gap = 16, style, className, classNames, styles, disabled, unlimitedInput = false, changeOnWheel, ...rest }) => {
10
10
  const handleOnchange = (value) => {
package/es/Tabs/Tabs.mjs CHANGED
@@ -2,9 +2,9 @@
2
2
  import ActionIcon from "../base-ui/ActionIcon/ActionIcon.mjs";
3
3
  import { styles, variants } from "./style.mjs";
4
4
  import { jsx } from "react/jsx-runtime";
5
- import { Tabs } from "antd";
6
5
  import { cx } from "antd-style";
7
6
  import { MoreHorizontalIcon } from "lucide-react";
7
+ import { Tabs } from "antd";
8
8
  //#region src/Tabs/Tabs.tsx
9
9
  /**
10
10
  * @deprecated Use `Tabs` from `@lobehub/ui/base-ui` instead.
package/es/Tag/Tag.mjs CHANGED
@@ -4,8 +4,8 @@ import { colorsPreset, colorsPresetSystem, presetColors, presetSystemColors } fr
4
4
  import { variants } from "./styles.mjs";
5
5
  import { useMemo } from "react";
6
6
  import { jsx } from "react/jsx-runtime";
7
- import { Tag } from "antd";
8
7
  import { cssVar, cx } from "antd-style";
8
+ import { Tag } from "antd";
9
9
  //#region src/Tag/Tag.tsx
10
10
  /**
11
11
  * @deprecated Use `Tag` from `@lobehub/ui/base-ui` instead.
@@ -1,8 +1,8 @@
1
1
  "use client";
2
2
  import { memo } from "react";
3
3
  import { jsx } from "react/jsx-runtime";
4
- import { ConfigProvider } from "antd";
5
4
  import { cssVar } from "antd-style";
5
+ import { ConfigProvider } from "antd";
6
6
  //#region src/ThemeProvider/ConfigProvider.tsx
7
7
  const ConfigProvider$1 = memo(({ children }) => {
8
8
  return /* @__PURE__ */ jsx(ConfigProvider, {
@@ -10,9 +10,9 @@ import ConfigProvider$1 from "./ConfigProvider.mjs";
10
10
  import GlobalStyle, { EssentialStyle } from "./GlobalStyle/index.mjs";
11
11
  import { memo, useCallback, useMemo, useState } from "react";
12
12
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
13
- import { App } from "antd";
14
13
  import { ThemeProvider } from "antd-style";
15
14
  import { merge } from "es-toolkit/compat";
15
+ import { App } from "antd";
16
16
  //#region src/ThemeProvider/ThemeProvider.tsx
17
17
  const ThemeProvider$1 = memo(({ appId = LOBE_THEME_APP_ID, children, customStylish, customToken, enableCustomFonts = true, enableGlobalStyle = true, customFonts, customTheme = {}, className, style, theme: antdTheme, ...rest }) => {
18
18
  const genCdnUrl = useCdnFn();
@@ -5,8 +5,8 @@ import DropdownMenu from "../base-ui/DropdownMenu/DropdownMenu.mjs";
5
5
  import ActionIcon from "../base-ui/ActionIcon/ActionIcon.mjs";
6
6
  import { useMemo } from "react";
7
7
  import { jsx, jsxs } from "react/jsx-runtime";
8
- import { Select } from "antd";
9
8
  import { Monitor, Moon, Sun } from "lucide-react";
9
+ import { Select } from "antd";
10
10
  //#region src/ThemeSwitch/ThemeSwitch.tsx
11
11
  const DEFAULT_ICON_SET = {
12
12
  auto: Monitor,
package/es/Toc/Toc.mjs CHANGED
@@ -4,8 +4,8 @@ import { mapItems } from "./utils.mjs";
4
4
  import TocMobile from "./TocMobile.mjs";
5
5
  import { memo, useMemo } from "react";
6
6
  import { jsx, jsxs } from "react/jsx-runtime";
7
- import { Anchor } from "antd";
8
7
  import { cx } from "antd-style";
8
+ import { Anchor } from "antd";
9
9
  //#region src/Toc/Toc.tsx
10
10
  const Toc = memo(({ activeKey, items, getContainer, isMobile, headerHeight = 64, tocWidth = 176 }) => {
11
11
  const cssVariables = useMemo(() => ({
@@ -4,9 +4,9 @@ import { styles } from "./style.mjs";
4
4
  import { mapItems } from "./utils.mjs";
5
5
  import { memo, useMemo } from "react";
6
6
  import { jsx } from "react/jsx-runtime";
7
- import { Anchor, Collapse, ConfigProvider } from "antd";
8
7
  import useMergeState from "use-merge-value";
9
8
  import { PanelTopClose, PanelTopOpen } from "lucide-react";
9
+ import { Anchor, Collapse, ConfigProvider } from "antd";
10
10
  //#region src/Toc/TocMobile.tsx
11
11
  const TocMobile = memo(({ items, activeKey, onChange, getContainer, headerHeight = 64, tocWidth = 176 }) => {
12
12
  const [activeLink, setActiveLink] = useMergeState("", {
@@ -1,9 +1,9 @@
1
1
  "use client";
2
2
  import Icon from "../../Icon/Icon.mjs";
3
+ import Segmented from "../../base-ui/Segmented/Segmented.mjs";
3
4
  import Snippet from "../../Snippet/Snippet.mjs";
4
5
  import { DEFAULT_SKILL_AGENTS } from "./agents.mjs";
5
6
  import { renderLandingIcon } from "../landingIcon.mjs";
6
- import Segmented from "../../base-ui/Segmented/Segmented.mjs";
7
7
  import { styles } from "./style.mjs";
8
8
  import { memo, useState } from "react";
9
9
  import { jsx, jsxs } from "react/jsx-runtime";
@@ -9,8 +9,8 @@ import GithubIcon from "../../icons/lucideExtra/GithubIcon.mjs";
9
9
  import { styles } from "./style.mjs";
10
10
  import { memo, useCallback } from "react";
11
11
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
12
- import { ConfigProvider } from "antd";
13
12
  import { useResponsive } from "antd-style";
13
+ import { ConfigProvider } from "antd";
14
14
  //#region src/awesome/Hero/Hero.tsx
15
15
  const Hero = memo(({ title, description, actions, Link }) => {
16
16
  const { mobile } = useResponsive();
@@ -1,6 +1,6 @@
1
1
  "use client";
2
- import { LandingActions } from "../landingActions.mjs";
3
2
  import Tag from "../../base-ui/Tag/Tag.mjs";
3
+ import { LandingActions } from "../landingActions.mjs";
4
4
  import { styles } from "./style.mjs";
5
5
  import { memo } from "react";
6
6
  import { jsx, jsxs } from "react/jsx-runtime";
@@ -0,0 +1,6 @@
1
+ import { AnchorProps } from "./type.mjs";
2
+ //#region src/base-ui/Anchor/Anchor.d.ts
3
+ declare const Anchor: import("react").NamedExoticComponent<AnchorProps>;
4
+ //#endregion
5
+ export { Anchor as default };
6
+ //# sourceMappingURL=Anchor.d.mts.map
@@ -0,0 +1,141 @@
1
+ "use client";
2
+ import { useEventCallback } from "../../hooks/useEventCallback.mjs";
3
+ import { styles } from "./style.mjs";
4
+ import { memo, useEffect, useLayoutEffect, useRef, useState } from "react";
5
+ import { jsx, jsxs } from "react/jsx-runtime";
6
+ import { cx } from "antd-style";
7
+ import useMergeState from "use-merge-value";
8
+ import { useMergeRefs } from "react-merge-refs";
9
+ //#region src/base-ui/Anchor/Anchor.tsx
10
+ const SCROLL_LOCK_FALLBACK_MS = 1e3;
11
+ const flatten = (items) => items.flatMap((item) => [item, ...flatten(item.children ?? [])]);
12
+ const getTarget = (href) => {
13
+ const hash = href.split("#")[1];
14
+ if (!hash) return null;
15
+ try {
16
+ return document.getElementById(decodeURIComponent(hash));
17
+ } catch {
18
+ return document.getElementById(hash);
19
+ }
20
+ };
21
+ const isWindow = (container) => container === window;
22
+ const getRelativeTop = (element, container) => element.getBoundingClientRect().top - (isWindow(container) ? 0 : container.getBoundingClientRect().top);
23
+ const getScrollTop = (container) => isWindow(container) ? window.scrollY : container.scrollTop;
24
+ const getActiveKey = (items, container, offset) => {
25
+ let activeKey = null;
26
+ let activeTop = -Infinity;
27
+ for (const item of flatten(items)) {
28
+ const target = getTarget(item.href);
29
+ if (!target) continue;
30
+ const top = getRelativeTop(target, container);
31
+ if (top <= offset + 1 && top >= activeTop) {
32
+ activeKey = item.key;
33
+ activeTop = top;
34
+ }
35
+ }
36
+ return activeKey;
37
+ };
38
+ const Anchor = memo(({ activeKey, className, getContainer, items, offset = 0, onChange, onClick, ref, ...rest }) => {
39
+ const [mergedActiveKey, setMergedActiveKey] = useMergeState(null, {
40
+ onChange,
41
+ value: activeKey
42
+ });
43
+ const scrollLockRef = useRef(false);
44
+ const navRef = useRef(null);
45
+ const mergedRef = useMergeRefs([ref, navRef]);
46
+ const [marker, setMarker] = useState();
47
+ const lockTimerRef = useRef(void 0);
48
+ const resolveContainer = useEventCallback(() => getContainer?.() ?? window);
49
+ const setActive = useEventCallback(setMergedActiveKey);
50
+ const spy = useEventCallback(() => {
51
+ if (scrollLockRef.current) return;
52
+ setActive(getActiveKey(items, resolveContainer(), offset));
53
+ });
54
+ useEffect(() => {
55
+ const container = resolveContainer();
56
+ let frame = 0;
57
+ const handleScroll = () => {
58
+ cancelAnimationFrame(frame);
59
+ frame = requestAnimationFrame(spy);
60
+ };
61
+ spy();
62
+ container.addEventListener("scroll", handleScroll, { passive: true });
63
+ return () => {
64
+ cancelAnimationFrame(frame);
65
+ container.removeEventListener("scroll", handleScroll);
66
+ };
67
+ }, [
68
+ items,
69
+ offset,
70
+ resolveContainer,
71
+ spy
72
+ ]);
73
+ useEffect(() => () => clearTimeout(lockTimerRef.current), []);
74
+ useLayoutEffect(() => {
75
+ const nav = navRef.current;
76
+ if (!nav) return;
77
+ const place = () => {
78
+ const link = [...nav.querySelectorAll("a[data-key]")].find((element) => element.dataset.key === mergedActiveKey);
79
+ setMarker(link ? {
80
+ height: link.offsetHeight,
81
+ insetBlockStart: link.offsetTop
82
+ } : void 0);
83
+ };
84
+ place();
85
+ if (typeof ResizeObserver === "undefined") return;
86
+ const observer = new ResizeObserver(place);
87
+ observer.observe(nav);
88
+ return () => observer.disconnect();
89
+ }, [items, mergedActiveKey]);
90
+ const handleClick = (event, item) => {
91
+ onClick?.(event, item);
92
+ if (event.defaultPrevented || event.button !== 0) return;
93
+ if (event.metaKey || event.ctrlKey || event.shiftKey || event.altKey) return;
94
+ const target = getTarget(item.href);
95
+ if (!target) return;
96
+ event.preventDefault();
97
+ const container = resolveContainer();
98
+ const top = getRelativeTop(target, container) + getScrollTop(container) - offset;
99
+ const reduceMotion = window.matchMedia?.("(prefers-reduced-motion: reduce)").matches;
100
+ const release = () => {
101
+ scrollLockRef.current = false;
102
+ };
103
+ scrollLockRef.current = true;
104
+ setActive(item.key);
105
+ clearTimeout(lockTimerRef.current);
106
+ lockTimerRef.current = setTimeout(release, SCROLL_LOCK_FALLBACK_MS);
107
+ container.addEventListener("scrollend", release, { once: true });
108
+ container.scrollTo({
109
+ behavior: reduceMotion ? "auto" : "smooth",
110
+ top
111
+ });
112
+ };
113
+ const renderList = (list) => /* @__PURE__ */ jsx("ul", {
114
+ className: styles.list,
115
+ children: list.map((item) => /* @__PURE__ */ jsxs("li", { children: [/* @__PURE__ */ jsx("a", {
116
+ "aria-current": item.key === mergedActiveKey ? "location" : void 0,
117
+ className: styles.link,
118
+ "data-key": item.key,
119
+ href: item.href,
120
+ title: typeof item.title === "string" ? item.title : void 0,
121
+ onClick: (event) => handleClick(event, item),
122
+ children: item.title
123
+ }), item.children && item.children.length > 0 && renderList(item.children)] }, item.key))
124
+ });
125
+ return /* @__PURE__ */ jsxs("nav", {
126
+ className: cx(styles.root, className),
127
+ ref: mergedRef,
128
+ ...rest,
129
+ children: [/* @__PURE__ */ jsx("span", {
130
+ "aria-hidden": true,
131
+ className: styles.marker,
132
+ hidden: !marker,
133
+ style: marker
134
+ }), renderList(items)]
135
+ });
136
+ });
137
+ Anchor.displayName = "Anchor";
138
+ //#endregion
139
+ export { Anchor as default };
140
+
141
+ //# sourceMappingURL=Anchor.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Anchor.mjs","names":["useControlledState"],"sources":["../../../src/base-ui/Anchor/Anchor.tsx"],"sourcesContent":["'use client';\n\nimport { cx } from 'antd-style';\nimport {\n type CSSProperties,\n memo,\n type MouseEvent,\n useEffect,\n useLayoutEffect,\n useRef,\n useState,\n} from 'react';\nimport { useMergeRefs } from 'react-merge-refs';\nimport useControlledState from 'use-merge-value';\n\nimport { useEventCallback } from '@/hooks/useEventCallback';\n\nimport { styles } from './style';\nimport type { AnchorItem, AnchorProps } from './type';\n\ntype ScrollContainer = HTMLElement | Window;\n\nconst SCROLL_LOCK_FALLBACK_MS = 1000;\n\nconst flatten = (items: AnchorItem[]): AnchorItem[] =>\n items.flatMap((item) => [item, ...flatten(item.children ?? [])]);\n\nconst getTarget = (href: string) => {\n const hash = href.split('#')[1];\n if (!hash) return null;\n try {\n return document.getElementById(decodeURIComponent(hash));\n } catch {\n return document.getElementById(hash);\n }\n};\n\nconst isWindow = (container: ScrollContainer): container is Window => container === window;\n\nconst getRelativeTop = (element: HTMLElement, container: ScrollContainer) =>\n element.getBoundingClientRect().top -\n (isWindow(container) ? 0 : container.getBoundingClientRect().top);\n\nconst getScrollTop = (container: ScrollContainer) =>\n isWindow(container) ? window.scrollY : container.scrollTop;\n\nconst getActiveKey = (\n items: AnchorItem[],\n container: ScrollContainer,\n offset: number,\n): string | null => {\n let activeKey: string | null = null;\n let activeTop = -Infinity;\n for (const item of flatten(items)) {\n const target = getTarget(item.href);\n if (!target) continue;\n const top = getRelativeTop(target, container);\n if (top <= offset + 1 && top >= activeTop) {\n activeKey = item.key;\n activeTop = top;\n }\n }\n return activeKey;\n};\n\nconst Anchor = memo<AnchorProps>(\n ({ activeKey, className, getContainer, items, offset = 0, onChange, onClick, ref, ...rest }) => {\n const [mergedActiveKey, setMergedActiveKey] = useControlledState<string | null>(null, {\n onChange,\n value: activeKey,\n });\n const scrollLockRef = useRef(false);\n const navRef = useRef<HTMLElement>(null);\n const mergedRef = useMergeRefs([ref, navRef]);\n const [marker, setMarker] = useState<CSSProperties>();\n const lockTimerRef = useRef<ReturnType<typeof setTimeout>>(undefined);\n\n const resolveContainer = useEventCallback((): ScrollContainer => getContainer?.() ?? window);\n const setActive = useEventCallback(setMergedActiveKey);\n const spy = useEventCallback(() => {\n if (scrollLockRef.current) return;\n setActive(getActiveKey(items, resolveContainer(), offset));\n });\n\n useEffect(() => {\n const container = resolveContainer();\n let frame = 0;\n const handleScroll = () => {\n cancelAnimationFrame(frame);\n frame = requestAnimationFrame(spy);\n };\n spy();\n container.addEventListener('scroll', handleScroll, { passive: true });\n return () => {\n cancelAnimationFrame(frame);\n container.removeEventListener('scroll', handleScroll);\n };\n }, [items, offset, resolveContainer, spy]);\n\n useEffect(() => () => clearTimeout(lockTimerRef.current), []);\n\n useLayoutEffect(() => {\n const nav = navRef.current;\n if (!nav) return;\n const place = () => {\n const link = [...nav.querySelectorAll<HTMLElement>('a[data-key]')].find(\n (element) => element.dataset.key === mergedActiveKey,\n );\n setMarker(\n link ? { height: link.offsetHeight, insetBlockStart: link.offsetTop } : undefined,\n );\n };\n place();\n if (typeof ResizeObserver === 'undefined') return;\n const observer = new ResizeObserver(place);\n observer.observe(nav);\n return () => observer.disconnect();\n }, [items, mergedActiveKey]);\n\n const handleClick = (event: MouseEvent<HTMLAnchorElement>, item: AnchorItem) => {\n onClick?.(event, item);\n if (event.defaultPrevented || event.button !== 0) return;\n if (event.metaKey || event.ctrlKey || event.shiftKey || event.altKey) return;\n\n const target = getTarget(item.href);\n if (!target) return;\n event.preventDefault();\n\n const container = resolveContainer();\n const top = getRelativeTop(target, container) + getScrollTop(container) - offset;\n const reduceMotion = window.matchMedia?.('(prefers-reduced-motion: reduce)').matches;\n\n // Smooth scrolling may never bring a heading near the page end up to the offset line, so the\n // clicked item is pinned as active until the scroll settles.\n const release = () => {\n scrollLockRef.current = false;\n };\n scrollLockRef.current = true;\n setActive(item.key);\n clearTimeout(lockTimerRef.current);\n lockTimerRef.current = setTimeout(release, SCROLL_LOCK_FALLBACK_MS);\n container.addEventListener('scrollend', release, { once: true });\n container.scrollTo({ behavior: reduceMotion ? 'auto' : 'smooth', top });\n };\n\n const renderList = (list: AnchorItem[]) => (\n <ul className={styles.list}>\n {list.map((item) => (\n <li key={item.key}>\n <a\n aria-current={item.key === mergedActiveKey ? 'location' : undefined}\n className={styles.link}\n data-key={item.key}\n href={item.href}\n title={typeof item.title === 'string' ? item.title : undefined}\n onClick={(event) => handleClick(event, item)}\n >\n {item.title}\n </a>\n {item.children && item.children.length > 0 && renderList(item.children)}\n </li>\n ))}\n </ul>\n );\n\n return (\n <nav className={cx(styles.root, className)} ref={mergedRef} {...rest}>\n <span aria-hidden className={styles.marker} hidden={!marker} style={marker} />\n {renderList(items)}\n </nav>\n );\n },\n);\n\nAnchor.displayName = 'Anchor';\n\nexport default Anchor;\n"],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { AnchorItem, AnchorProps } from "./type.mjs";
2
+ import Anchor from "./Anchor.mjs";
3
+ export { type AnchorItem, type AnchorProps, Anchor as default };
@@ -0,0 +1,80 @@
1
+ import { createStaticStyles } from "antd-style";
2
+ //#region src/base-ui/Anchor/style.ts
3
+ const styles = createStaticStyles(({ css, cssVar }) => ({
4
+ link: css`
5
+ overflow: hidden;
6
+ display: -webkit-box;
7
+ -webkit-box-orient: vertical;
8
+ -webkit-line-clamp: 2;
9
+
10
+ font-size: 14px;
11
+ line-height: 1.4;
12
+ color: ${cssVar.colorTextSecondary};
13
+ overflow-wrap: anywhere;
14
+
15
+ transition: color 0.15s ease;
16
+
17
+ &:hover {
18
+ color: ${cssVar.colorText};
19
+ }
20
+
21
+ &[aria-current='location'] {
22
+ font-weight: 500;
23
+ color: ${cssVar.colorText};
24
+ }
25
+
26
+ &:focus-visible {
27
+ border-radius: 4px;
28
+ outline: 2px solid ${cssVar.colorText};
29
+ outline-offset: 2px;
30
+ }
31
+ `,
32
+ list: css`
33
+ display: flex;
34
+ flex-direction: column;
35
+ gap: 8px;
36
+
37
+ margin: 0;
38
+ padding-block: 0;
39
+ padding-inline: 14px 0;
40
+ border-inline-start: 1px solid ${cssVar.colorBorderSecondary};
41
+
42
+ list-style: none;
43
+
44
+ & & {
45
+ margin-block-start: 8px;
46
+ padding-inline-start: 12px;
47
+ border-inline-start: none;
48
+
49
+ a {
50
+ font-size: 13px;
51
+ }
52
+ }
53
+ `,
54
+ marker: css`
55
+ pointer-events: none;
56
+
57
+ position: absolute;
58
+ inset-inline-start: -1px;
59
+
60
+ width: 2px;
61
+ border-radius: 2px;
62
+
63
+ background: ${cssVar.colorText};
64
+
65
+ transition:
66
+ inset-block-start 0.2s ${cssVar.motionEaseOut},
67
+ height 0.2s ${cssVar.motionEaseOut};
68
+
69
+ @media (prefers-reduced-motion: reduce) {
70
+ transition: none;
71
+ }
72
+ `,
73
+ root: css`
74
+ position: relative;
75
+ `
76
+ }));
77
+ //#endregion
78
+ export { styles };
79
+
80
+ //# sourceMappingURL=style.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"style.mjs","names":[],"sources":["../../../src/base-ui/Anchor/style.ts"],"sourcesContent":["import { createStaticStyles } from 'antd-style';\n\nexport const styles = createStaticStyles(({ css, cssVar }) => ({\n link: css`\n overflow: hidden;\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 2;\n\n font-size: 14px;\n line-height: 1.4;\n color: ${cssVar.colorTextSecondary};\n overflow-wrap: anywhere;\n\n transition: color 0.15s ease;\n\n &:hover {\n color: ${cssVar.colorText};\n }\n\n &[aria-current='location'] {\n font-weight: 500;\n color: ${cssVar.colorText};\n }\n\n &:focus-visible {\n border-radius: 4px;\n outline: 2px solid ${cssVar.colorText};\n outline-offset: 2px;\n }\n `,\n list: css`\n display: flex;\n flex-direction: column;\n gap: 8px;\n\n margin: 0;\n padding-block: 0;\n padding-inline: 14px 0;\n border-inline-start: 1px solid ${cssVar.colorBorderSecondary};\n\n list-style: none;\n\n & & {\n margin-block-start: 8px;\n padding-inline-start: 12px;\n border-inline-start: none;\n\n a {\n font-size: 13px;\n }\n }\n `,\n marker: css`\n pointer-events: none;\n\n position: absolute;\n inset-inline-start: -1px;\n\n width: 2px;\n border-radius: 2px;\n\n background: ${cssVar.colorText};\n\n transition:\n inset-block-start 0.2s ${cssVar.motionEaseOut},\n height 0.2s ${cssVar.motionEaseOut};\n\n @media (prefers-reduced-motion: reduce) {\n transition: none;\n }\n `,\n root: css`\n position: relative;\n `,\n}));\n"],"mappings":";;AAEA,MAAa,SAAS,oBAAoB,EAAE,KAAK,cAAc;CAC7D,MAAM,GAAG;;;;;;;;aAQE,OAAO,mBAAmB;;;;;;eAMxB,OAAO,UAAU;;;;;eAKjB,OAAO,UAAU;;;;;2BAKL,OAAO,UAAU;;;;CAI1C,MAAM,GAAG;;;;;;;;qCAQ0B,OAAO,qBAAqB;;;;;;;;;;;;;;CAc/D,QAAQ,GAAG;;;;;;;;;kBASK,OAAO,UAAU;;;+BAGJ,OAAO,cAAc;oBAChC,OAAO,cAAc;;;;;;CAMvC,MAAM,GAAG;;;AAGX,EAAE"}
@@ -0,0 +1,20 @@
1
+ import { ComponentProps, MouseEvent, ReactNode, Ref } from "react";
2
+ //#region src/base-ui/Anchor/type.d.ts
3
+ interface AnchorItem {
4
+ children?: AnchorItem[];
5
+ href: string;
6
+ key: string;
7
+ title: ReactNode;
8
+ }
9
+ interface AnchorProps extends Omit<ComponentProps<'nav'>, 'children' | 'onChange' | 'onClick'> {
10
+ activeKey?: string | null;
11
+ getContainer?: () => HTMLElement | Window | null | undefined;
12
+ items: AnchorItem[];
13
+ offset?: number;
14
+ onChange?: (key: string | null) => void;
15
+ onClick?: (event: MouseEvent<HTMLAnchorElement>, item: AnchorItem) => void;
16
+ ref?: Ref<HTMLElement>;
17
+ }
18
+ //#endregion
19
+ export { AnchorItem, AnchorProps };
20
+ //# sourceMappingURL=type.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AutoComplete.mjs","names":["inputVariants","inputStyles","styles"],"sources":["../../../src/base-ui/AutoComplete/AutoComplete.tsx"],"sourcesContent":["'use client';\n\nimport { Autocomplete } from '@base-ui/react/autocomplete';\nimport { cx, useThemeMode } from 'antd-style';\nimport { XIcon } from 'lucide-react';\nimport { memo, useMemo, useRef } from 'react';\n\nimport { getFloatingCollisionPadding } from '@/base-ui/floating';\nimport { inputStyles, inputVariants } from '@/base-ui/Input';\nimport { useLayerZIndex } from '@/base-ui/zIndex';\nimport Icon from '@/Icon';\nimport { useAppElement } from '@/ThemeProvider';\n\nimport { styles } from './style';\nimport type { AutoCompleteOption, AutoCompleteProps } from './type';\n\nconst AutoComplete = memo<AutoCompleteProps>(\n ({\n className,\n classNames,\n styles: customStyles,\n style,\n variant,\n shadow,\n size = 'middle',\n options = [],\n onChange,\n onSearch,\n allowClear,\n disabled,\n placeholder,\n prefix,\n suffix,\n emptyText,\n ...rest\n }) => {\n const { isDarkMode } = useThemeMode();\n const appElement = useAppElement();\n const anchorRef = useRef<HTMLDivElement>(null);\n const { ref: positionerRef, zIndex } = useLayerZIndex<HTMLDivElement>('floating');\n const mergedVariant = variant || (isDarkMode ? 'filled' : 'outlined');\n\n const items = useMemo<AutoCompleteOption[]>(\n () => options.map((option) => (typeof option === 'string' ? { value: option } : option)),\n [options],\n );\n\n return (\n <Autocomplete.Root\n openOnInputClick\n disabled={disabled}\n itemToStringValue={(item) => (item as AutoCompleteOption).value}\n items={items}\n onValueChange={(value) => {\n onChange?.(value);\n onSearch?.(value);\n }}\n {...rest}\n >\n <div\n className={cx(inputVariants({ shadow, size, variant: mergedVariant }), className)}\n data-disabled={disabled ? '' : undefined}\n ref={anchorRef}\n style={style}\n >\n {prefix && <span className={inputStyles.slot}>{prefix}</span>}\n <Autocomplete.Input\n className={cx(inputStyles.input, classNames?.input)}\n placeholder={placeholder}\n style={customStyles?.input}\n />\n {allowClear && (\n <Autocomplete.Clear aria-label={'Clear'} className={styles.clear}>\n <Icon icon={XIcon} size={14} />\n </Autocomplete.Clear>\n )}\n {suffix && <span className={inputStyles.slot}>{suffix}</span>}\n </div>\n <Autocomplete.Portal container={appElement ?? undefined}>\n <Autocomplete.Positioner\n anchor={anchorRef}\n className={styles.positioner}\n collisionPadding={getFloatingCollisionPadding()}\n ref={positionerRef}\n sideOffset={4}\n style={zIndex === undefined ? undefined : { zIndex }}\n >\n <Autocomplete.Popup\n className={cx(styles.popup, classNames?.popup)}\n style={customStyles?.popup}\n >\n {emptyText && (\n <Autocomplete.Empty className={styles.empty}>{emptyText}</Autocomplete.Empty>\n )}\n <Autocomplete.List className={styles.list}>\n {(item: AutoCompleteOption) => (\n <Autocomplete.Item\n className={cx(styles.item, classNames?.item)}\n disabled={item.disabled}\n key={item.value}\n style={customStyles?.item}\n value={item}\n >\n {item.label ?? item.value}\n </Autocomplete.Item>\n )}\n </Autocomplete.List>\n </Autocomplete.Popup>\n </Autocomplete.Positioner>\n </Autocomplete.Portal>\n </Autocomplete.Root>\n );\n },\n);\n\nAutoComplete.displayName = 'AutoComplete';\n\nexport default AutoComplete;\n"],"mappings":";;;;;;;;;;;;;AAgBA,MAAM,eAAe,MAClB,EACC,WACA,YACA,QAAQ,cACR,OACA,SACA,QACA,OAAO,UACP,UAAU,CAAC,GACX,UACA,UACA,YACA,UACA,aACA,QACA,QACA,WACA,GAAG,WACC;CACJ,MAAM,EAAE,eAAe,aAAa;CACpC,MAAM,aAAa,cAAc;CACjC,MAAM,YAAY,OAAuB,IAAI;CAC7C,MAAM,EAAE,KAAK,eAAe,WAAW,eAA+B,UAAU;CAChF,MAAM,gBAAgB,YAAY,aAAa,WAAW;CAE1D,MAAM,QAAQ,cACN,QAAQ,KAAK,WAAY,OAAO,WAAW,WAAW,EAAE,OAAO,OAAO,IAAI,MAAO,GACvF,CAAC,OAAO,CACV;CAEA,OACE,qBAAC,aAAa,MAAd;EACE,kBAAA;EACU;EACV,oBAAoB,SAAU,KAA4B;EACnD;EACP,gBAAgB,UAAU;GACxB,WAAW,KAAK;GAChB,WAAW,KAAK;EAClB;EACA,GAAI;EATN,UAAA,CAWE,qBAAC,OAAD;GACE,WAAW,GAAGA,aAAc;IAAE;IAAQ;IAAM,SAAS;GAAc,CAAC,GAAG,SAAS;GAChF,iBAAe,WAAW,KAAK,KAAA;GAC/B,KAAK;GACE;GAJT,UAAA;IAMG,UAAU,oBAAC,QAAD;KAAM,WAAWC,OAAY;KAAO,UAAA;IAAa,CAAA;IAC5D,oBAAC,aAAa,OAAd;KACE,WAAW,GAAGA,OAAY,OAAO,YAAY,KAAK;KACrC;KACb,OAAO,cAAc;IACtB,CAAA;IACA,cACC,oBAAC,aAAa,OAAd;KAAoB,cAAY;KAAS,WAAWC,SAAO;KACzD,UAAA,oBAAC,MAAD;MAAM,MAAM;MAAO,MAAM;KAAK,CAAA;IACZ,CAAA;IAErB,UAAU,oBAAC,QAAD;KAAM,WAAWD,OAAY;KAAO,UAAA;IAAa,CAAA;GACzD;EACL,CAAA,GAAA,oBAAC,aAAa,QAAd;GAAqB,WAAW,cAAc,KAAA;GAC5C,UAAA,oBAAC,aAAa,YAAd;IACE,QAAQ;IACR,WAAWC,SAAO;IAClB,kBAAkB,4BAA4B;IAC9C,KAAK;IACL,YAAY;IACZ,OAAO,WAAW,KAAA,IAAY,KAAA,IAAY,EAAE,OAAO;IAEnD,UAAA,qBAAC,aAAa,OAAd;KACE,WAAW,GAAGA,SAAO,OAAO,YAAY,KAAK;KAC7C,OAAO,cAAc;KAFvB,UAAA,CAIG,aACC,oBAAC,aAAa,OAAd;MAAoB,WAAWA,SAAO;MAAQ,UAAA;KAA8B,CAAA,GAE9E,oBAAC,aAAa,MAAd;MAAmB,WAAWA,SAAO;MACjC,WAAA,SACA,oBAAC,aAAa,MAAd;OACE,WAAW,GAAGA,SAAO,MAAM,YAAY,IAAI;OAC3C,UAAU,KAAK;OAEf,OAAO,cAAc;OACrB,OAAO;OAEN,UAAA,KAAK,SAAS,KAAK;MACH,GALZ,KAAK,KAKO;KAEJ,CAAA,CACD;;GACG,CAAA;EACN,CAAA,CACJ;;AAEvB,CACF;AAEA,aAAa,cAAc"}
1
+ {"version":3,"file":"AutoComplete.mjs","names":["inputVariants","inputStyles","styles"],"sources":["../../../src/base-ui/AutoComplete/AutoComplete.tsx"],"sourcesContent":["'use client';\n\nimport { Autocomplete } from '@base-ui/react/autocomplete';\nimport { cx, useThemeMode } from 'antd-style';\nimport { XIcon } from 'lucide-react';\nimport { memo, useMemo, useRef } from 'react';\n\nimport { getFloatingCollisionPadding } from '@/base-ui/floating';\nimport { inputStyles, inputVariants } from '@/base-ui/Input';\nimport { useLayerZIndex } from '@/base-ui/zIndex';\nimport Icon from '@/Icon';\nimport { useAppElement } from '@/ThemeProvider/AppElementContext';\n\nimport { styles } from './style';\nimport type { AutoCompleteOption, AutoCompleteProps } from './type';\n\nconst AutoComplete = memo<AutoCompleteProps>(\n ({\n className,\n classNames,\n styles: customStyles,\n style,\n variant,\n shadow,\n size = 'middle',\n options = [],\n onChange,\n onSearch,\n allowClear,\n disabled,\n placeholder,\n prefix,\n suffix,\n emptyText,\n ...rest\n }) => {\n const { isDarkMode } = useThemeMode();\n const appElement = useAppElement();\n const anchorRef = useRef<HTMLDivElement>(null);\n const { ref: positionerRef, zIndex } = useLayerZIndex<HTMLDivElement>('floating');\n const mergedVariant = variant || (isDarkMode ? 'filled' : 'outlined');\n\n const items = useMemo<AutoCompleteOption[]>(\n () => options.map((option) => (typeof option === 'string' ? { value: option } : option)),\n [options],\n );\n\n return (\n <Autocomplete.Root\n openOnInputClick\n disabled={disabled}\n itemToStringValue={(item) => (item as AutoCompleteOption).value}\n items={items}\n onValueChange={(value) => {\n onChange?.(value);\n onSearch?.(value);\n }}\n {...rest}\n >\n <div\n className={cx(inputVariants({ shadow, size, variant: mergedVariant }), className)}\n data-disabled={disabled ? '' : undefined}\n ref={anchorRef}\n style={style}\n >\n {prefix && <span className={inputStyles.slot}>{prefix}</span>}\n <Autocomplete.Input\n className={cx(inputStyles.input, classNames?.input)}\n placeholder={placeholder}\n style={customStyles?.input}\n />\n {allowClear && (\n <Autocomplete.Clear aria-label={'Clear'} className={styles.clear}>\n <Icon icon={XIcon} size={14} />\n </Autocomplete.Clear>\n )}\n {suffix && <span className={inputStyles.slot}>{suffix}</span>}\n </div>\n <Autocomplete.Portal container={appElement ?? undefined}>\n <Autocomplete.Positioner\n anchor={anchorRef}\n className={styles.positioner}\n collisionPadding={getFloatingCollisionPadding()}\n ref={positionerRef}\n sideOffset={4}\n style={zIndex === undefined ? undefined : { zIndex }}\n >\n <Autocomplete.Popup\n className={cx(styles.popup, classNames?.popup)}\n style={customStyles?.popup}\n >\n {emptyText && (\n <Autocomplete.Empty className={styles.empty}>{emptyText}</Autocomplete.Empty>\n )}\n <Autocomplete.List className={styles.list}>\n {(item: AutoCompleteOption) => (\n <Autocomplete.Item\n className={cx(styles.item, classNames?.item)}\n disabled={item.disabled}\n key={item.value}\n style={customStyles?.item}\n value={item}\n >\n {item.label ?? item.value}\n </Autocomplete.Item>\n )}\n </Autocomplete.List>\n </Autocomplete.Popup>\n </Autocomplete.Positioner>\n </Autocomplete.Portal>\n </Autocomplete.Root>\n );\n },\n);\n\nAutoComplete.displayName = 'AutoComplete';\n\nexport default AutoComplete;\n"],"mappings":";;;;;;;;;;;;;AAgBA,MAAM,eAAe,MAClB,EACC,WACA,YACA,QAAQ,cACR,OACA,SACA,QACA,OAAO,UACP,UAAU,CAAC,GACX,UACA,UACA,YACA,UACA,aACA,QACA,QACA,WACA,GAAG,WACC;CACJ,MAAM,EAAE,eAAe,aAAa;CACpC,MAAM,aAAa,cAAc;CACjC,MAAM,YAAY,OAAuB,IAAI;CAC7C,MAAM,EAAE,KAAK,eAAe,WAAW,eAA+B,UAAU;CAChF,MAAM,gBAAgB,YAAY,aAAa,WAAW;CAE1D,MAAM,QAAQ,cACN,QAAQ,KAAK,WAAY,OAAO,WAAW,WAAW,EAAE,OAAO,OAAO,IAAI,MAAO,GACvF,CAAC,OAAO,CACV;CAEA,OACE,qBAAC,aAAa,MAAd;EACE,kBAAA;EACU;EACV,oBAAoB,SAAU,KAA4B;EACnD;EACP,gBAAgB,UAAU;GACxB,WAAW,KAAK;GAChB,WAAW,KAAK;EAClB;EACA,GAAI;EATN,UAAA,CAWE,qBAAC,OAAD;GACE,WAAW,GAAGA,aAAc;IAAE;IAAQ;IAAM,SAAS;GAAc,CAAC,GAAG,SAAS;GAChF,iBAAe,WAAW,KAAK,KAAA;GAC/B,KAAK;GACE;GAJT,UAAA;IAMG,UAAU,oBAAC,QAAD;KAAM,WAAWC,OAAY;KAAO,UAAA;IAAa,CAAA;IAC5D,oBAAC,aAAa,OAAd;KACE,WAAW,GAAGA,OAAY,OAAO,YAAY,KAAK;KACrC;KACb,OAAO,cAAc;IACtB,CAAA;IACA,cACC,oBAAC,aAAa,OAAd;KAAoB,cAAY;KAAS,WAAWC,SAAO;KACzD,UAAA,oBAAC,MAAD;MAAM,MAAM;MAAO,MAAM;KAAK,CAAA;IACZ,CAAA;IAErB,UAAU,oBAAC,QAAD;KAAM,WAAWD,OAAY;KAAO,UAAA;IAAa,CAAA;GACzD;EACL,CAAA,GAAA,oBAAC,aAAa,QAAd;GAAqB,WAAW,cAAc,KAAA;GAC5C,UAAA,oBAAC,aAAa,YAAd;IACE,QAAQ;IACR,WAAWC,SAAO;IAClB,kBAAkB,4BAA4B;IAC9C,KAAK;IACL,YAAY;IACZ,OAAO,WAAW,KAAA,IAAY,KAAA,IAAY,EAAE,OAAO;IAEnD,UAAA,qBAAC,aAAa,OAAd;KACE,WAAW,GAAGA,SAAO,OAAO,YAAY,KAAK;KAC7C,OAAO,cAAc;KAFvB,UAAA,CAIG,aACC,oBAAC,aAAa,OAAd;MAAoB,WAAWA,SAAO;MAAQ,UAAA;KAA8B,CAAA,GAE9E,oBAAC,aAAa,MAAd;MAAmB,WAAWA,SAAO;MACjC,WAAA,SACA,oBAAC,aAAa,MAAd;OACE,WAAW,GAAGA,SAAO,MAAM,YAAY,IAAI;OAC3C,UAAU,KAAK;OAEf,OAAO,cAAc;OACrB,OAAO;OAEN,UAAA,KAAK,SAAS,KAAK;MACH,GALZ,KAAK,KAKO;KAEJ,CAAA,CACD;;GACG,CAAA;EACN,CAAA,CACJ;;AAEvB,CACF;AAEA,aAAa,cAAc"}
@@ -1,8 +1,8 @@
1
1
  "use client";
2
2
  import Center from "../../Flex/Center.mjs";
3
- import { safeReadableColor } from "../../utils/safeReadableColor.mjs";
4
3
  import Icon from "../../Icon/Icon.mjs";
5
4
  import FluentEmoji from "../../FluentEmoji/FluentEmoji.mjs";
5
+ import { safeReadableColor } from "../../utils/safeReadableColor.mjs";
6
6
  import { styles, variants } from "./style.mjs";
7
7
  import { calculateEmojiSize, formatAvatarText, hasValidBackground, isDefaultAntAvatar } from "./utils.mjs";
8
8
  import { memo, useMemo, useState } from "react";
@@ -0,0 +1,6 @@
1
+ import { BreadcrumbProps } from "./type.mjs";
2
+ //#region src/base-ui/Breadcrumb/Breadcrumb.d.ts
3
+ declare const Breadcrumb: import("react").NamedExoticComponent<BreadcrumbProps>;
4
+ //#endregion
5
+ export { Breadcrumb as default };
6
+ //# sourceMappingURL=Breadcrumb.d.mts.map
@@ -0,0 +1,58 @@
1
+ "use client";
2
+ import A from "../../A/index.mjs";
3
+ import Icon from "../../Icon/Icon.mjs";
4
+ import { styles } from "./style.mjs";
5
+ import { memo } from "react";
6
+ import { jsx, jsxs } from "react/jsx-runtime";
7
+ import { cx } from "antd-style";
8
+ import { ChevronRight } from "lucide-react";
9
+ //#region src/base-ui/Breadcrumb/Breadcrumb.tsx
10
+ const renderTitle = (item) => {
11
+ if (item.href) return /* @__PURE__ */ jsx(A, {
12
+ className: styles.link,
13
+ href: item.href,
14
+ onClick: item.onClick,
15
+ children: item.title
16
+ });
17
+ if (item.onClick) return /* @__PURE__ */ jsx("button", {
18
+ className: styles.button,
19
+ type: "button",
20
+ onClick: item.onClick,
21
+ children: item.title
22
+ });
23
+ return item.title;
24
+ };
25
+ const Breadcrumb = memo(({ className, classNames, items, ref, separator, styles: customStyles, ...rest }) => {
26
+ const separatorNode = separator ?? /* @__PURE__ */ jsx(Icon, {
27
+ icon: ChevronRight,
28
+ size: 14
29
+ });
30
+ return /* @__PURE__ */ jsx("nav", {
31
+ "aria-label": "breadcrumb",
32
+ className: cx(styles.root, className),
33
+ ref,
34
+ ...rest,
35
+ children: /* @__PURE__ */ jsx("ol", {
36
+ className: styles.list,
37
+ children: items.map((item, index) => {
38
+ const isLast = index === items.length - 1;
39
+ return /* @__PURE__ */ jsxs("li", {
40
+ "aria-current": isLast ? "page" : void 0,
41
+ className: cx(styles.item, classNames?.item),
42
+ style: customStyles?.item,
43
+ children: [renderTitle(item), !isLast && /* @__PURE__ */ jsx("span", {
44
+ "aria-hidden": "true",
45
+ className: cx(styles.separator, classNames?.separator),
46
+ style: customStyles?.separator,
47
+ children: separatorNode
48
+ })]
49
+ }, item.key ?? index);
50
+ })
51
+ })
52
+ });
53
+ });
54
+ Breadcrumb.displayName = "Breadcrumb";
55
+ //#endregion
56
+ export { Breadcrumb as default };
57
+
58
+ //# sourceMappingURL=Breadcrumb.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Breadcrumb.mjs","names":[],"sources":["../../../src/base-ui/Breadcrumb/Breadcrumb.tsx"],"sourcesContent":["'use client';\n\nimport { cx } from 'antd-style';\nimport { ChevronRight } from 'lucide-react';\nimport { memo, type ReactNode } from 'react';\n\nimport A from '@/A';\nimport Icon from '@/Icon';\n\nimport { styles } from './style';\nimport type { BreadcrumbItem, BreadcrumbProps } from './type';\n\nconst renderTitle = (item: BreadcrumbItem): ReactNode => {\n if (item.href) {\n return (\n <A className={styles.link} href={item.href} onClick={item.onClick}>\n {item.title}\n </A>\n );\n }\n\n if (item.onClick) {\n return (\n <button className={styles.button} type=\"button\" onClick={item.onClick}>\n {item.title}\n </button>\n );\n }\n\n return item.title;\n};\n\nconst Breadcrumb = memo<BreadcrumbProps>(\n ({ className, classNames, items, ref, separator, styles: customStyles, ...rest }) => {\n const separatorNode = separator ?? <Icon icon={ChevronRight} size={14} />;\n\n return (\n <nav aria-label=\"breadcrumb\" className={cx(styles.root, className)} ref={ref} {...rest}>\n <ol className={styles.list}>\n {items.map((item, index) => {\n const isLast = index === items.length - 1;\n\n return (\n <li\n aria-current={isLast ? 'page' : undefined}\n className={cx(styles.item, classNames?.item)}\n key={item.key ?? index}\n style={customStyles?.item}\n >\n {renderTitle(item)}\n {!isLast && (\n <span\n aria-hidden=\"true\"\n className={cx(styles.separator, classNames?.separator)}\n style={customStyles?.separator}\n >\n {separatorNode}\n </span>\n )}\n </li>\n );\n })}\n </ol>\n </nav>\n );\n },\n);\n\nBreadcrumb.displayName = 'Breadcrumb';\n\nexport default Breadcrumb;\n"],"mappings":";;;;;;;;;AAYA,MAAM,eAAe,SAAoC;CACvD,IAAI,KAAK,MACP,OACE,oBAAC,GAAD;EAAG,WAAW,OAAO;EAAM,MAAM,KAAK;EAAM,SAAS,KAAK;EACvD,UAAA,KAAK;CACL,CAAA;CAIP,IAAI,KAAK,SACP,OACE,oBAAC,UAAD;EAAQ,WAAW,OAAO;EAAQ,MAAK;EAAS,SAAS,KAAK;EAC3D,UAAA,KAAK;CACA,CAAA;CAIZ,OAAO,KAAK;AACd;AAEA,MAAM,aAAa,MAChB,EAAE,WAAW,YAAY,OAAO,KAAK,WAAW,QAAQ,cAAc,GAAG,WAAW;CACnF,MAAM,gBAAgB,aAAa,oBAAC,MAAD;EAAM,MAAM;EAAc,MAAM;CAAK,CAAA;CAExE,OACE,oBAAC,OAAD;EAAK,cAAW;EAAa,WAAW,GAAG,OAAO,MAAM,SAAS;EAAQ;EAAK,GAAI;EAChF,UAAA,oBAAC,MAAD;GAAI,WAAW,OAAO;GACnB,UAAA,MAAM,KAAK,MAAM,UAAU;IAC1B,MAAM,SAAS,UAAU,MAAM,SAAS;IAExC,OACE,qBAAC,MAAD;KACE,gBAAc,SAAS,SAAS,KAAA;KAChC,WAAW,GAAG,OAAO,MAAM,YAAY,IAAI;KAE3C,OAAO,cAAc;KAJvB,UAAA,CAMG,YAAY,IAAI,GAChB,CAAC,UACA,oBAAC,QAAD;MACE,eAAY;MACZ,WAAW,GAAG,OAAO,WAAW,YAAY,SAAS;MACrD,OAAO,cAAc;MAEpB,UAAA;KACG,CAAA,CAEN;IAbG,GAAA,KAAK,OAAO,KAaf;GAER,CAAC;EACC,CAAA;CACD,CAAA;AAET,CACF;AAEA,WAAW,cAAc"}
@@ -0,0 +1,3 @@
1
+ import { BreadcrumbItem, BreadcrumbProps } from "./type.mjs";
2
+ import Breadcrumb from "./Breadcrumb.mjs";
3
+ export { type BreadcrumbItem, type BreadcrumbProps, Breadcrumb as default };