@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
@@ -0,0 +1,227 @@
1
+ "use client";
2
+ import Icon from "../../Icon/Icon.mjs";
3
+ import { useTranslation } from "../../i18n/useTranslation.mjs";
4
+ import { rootVariants } from "../Input/style.mjs";
5
+ import Input from "../Input/Input.mjs";
6
+ import InputNumber from "../Input/InputNumber.mjs";
7
+ import { panelStyles } from "../panelStyles.mjs";
8
+ import { PopoverPopup, PopoverPortal, PopoverPositioner, PopoverRoot, PopoverTriggerElement } from "../Popover/atoms.mjs";
9
+ import Slider from "../Slider/Slider.mjs";
10
+ import colorPicker_default from "../../i18n/resources/en/colorPicker.mjs";
11
+ import { formatColor, normalizeHexInput, parseColor } from "./color.mjs";
12
+ import { styles } from "./style.mjs";
13
+ import SaturationArea from "./SaturationArea.mjs";
14
+ import { memo, useEffect, useRef, useState } from "react";
15
+ import { jsx, jsxs } from "react/jsx-runtime";
16
+ import { cx, useThemeMode } from "antd-style";
17
+ import useMergeState from "use-merge-value";
18
+ import { Pipette } from "lucide-react";
19
+ //#region src/base-ui/ColorPicker/ColorPicker.tsx
20
+ const DEFAULT_COLOR = "#000000";
21
+ const hasEyeDropper = () => typeof window !== "undefined" && "EyeDropper" in window;
22
+ const ColorPicker = memo(({ alpha = false, children, className, defaultValue = DEFAULT_COLOR, disabled, onChange, onChangeComplete, presets, showText, size = "middle", style, value }) => {
23
+ const { t } = useTranslation(colorPicker_default);
24
+ const { isDarkMode } = useThemeMode();
25
+ const [hex, setHex] = useMergeState(defaultValue, {
26
+ defaultValue,
27
+ onChange,
28
+ value
29
+ });
30
+ const [hsva, setHsva] = useState(() => parseColor(hex));
31
+ const [draft, setDraft] = useState(hex.slice(1).toUpperCase());
32
+ const popupRef = useRef(null);
33
+ useEffect(() => {
34
+ setHsva((current) => formatColor(current, alpha) === hex.toLowerCase() ? current : parseColor(hex, current.h));
35
+ setDraft(hex.slice(1).toUpperCase());
36
+ }, [hex, alpha]);
37
+ const update = (next) => {
38
+ setHsva(next);
39
+ setHex(formatColor(next, alpha));
40
+ };
41
+ const commit = (next) => onChangeComplete?.(formatColor(next, alpha));
42
+ const apply = (next) => {
43
+ update(next);
44
+ commit(next);
45
+ };
46
+ const commitDraft = () => {
47
+ const normalized = normalizeHexInput(draft);
48
+ if (!normalized) return setDraft(hex.slice(1).toUpperCase());
49
+ apply(parseColor(normalized, hsva.h));
50
+ };
51
+ const swatch = (dimension) => /* @__PURE__ */ jsx("span", {
52
+ className: styles.swatch,
53
+ style: {
54
+ height: dimension,
55
+ width: dimension
56
+ },
57
+ children: /* @__PURE__ */ jsx("span", { style: { background: hex } })
58
+ });
59
+ const trigger = children ?? (showText ? /* @__PURE__ */ jsxs("button", {
60
+ "aria-label": t("colorPicker.trigger"),
61
+ disabled,
62
+ style,
63
+ type: "button",
64
+ className: cx(rootVariants({
65
+ size,
66
+ variant: isDarkMode ? "filled" : "outlined"
67
+ }), styles.textTrigger, className),
68
+ children: [swatch(18), /* @__PURE__ */ jsx("span", {
69
+ style: { fontFamily: "var(--lobe-font-family-code, monospace)" },
70
+ children: hex.toUpperCase()
71
+ })]
72
+ }) : /* @__PURE__ */ jsx("button", {
73
+ "aria-label": t("colorPicker.trigger"),
74
+ className: cx(styles.swatchButton, className),
75
+ disabled,
76
+ style,
77
+ type: "button",
78
+ children: swatch(24)
79
+ }));
80
+ return /* @__PURE__ */ jsxs(PopoverRoot, { children: [/* @__PURE__ */ jsx(PopoverTriggerElement, { children: trigger }), /* @__PURE__ */ jsx(PopoverPortal, { children: /* @__PURE__ */ jsx(PopoverPositioner, {
81
+ placement: "bottomLeft",
82
+ children: /* @__PURE__ */ jsx(PopoverPopup, {
83
+ className: panelStyles.popup,
84
+ ref: popupRef,
85
+ initialFocus: () => popupRef.current?.querySelector("[role=\"slider\"]") ?? true,
86
+ children: /* @__PURE__ */ jsxs("div", {
87
+ className: styles.panel,
88
+ children: [
89
+ /* @__PURE__ */ jsxs("div", {
90
+ className: styles.summary,
91
+ children: [
92
+ swatch(40),
93
+ /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("div", {
94
+ className: styles.value,
95
+ children: hex.toUpperCase()
96
+ }), /* @__PURE__ */ jsx("div", {
97
+ className: panelStyles.label,
98
+ children: alpha ? `HEX · ${Math.round(hsva.a * 100)}%` : "HEX"
99
+ })] }),
100
+ hasEyeDropper() && /* @__PURE__ */ jsx("button", {
101
+ "aria-label": t("colorPicker.eyeDropper"),
102
+ className: panelStyles.nav,
103
+ style: { marginInlineStart: "auto" },
104
+ type: "button",
105
+ onClick: async () => {
106
+ const result = await new window.EyeDropper().open().catch(() => null);
107
+ if (result) apply({
108
+ ...parseColor(result.sRGBHex, hsva.h),
109
+ a: hsva.a
110
+ });
111
+ },
112
+ children: /* @__PURE__ */ jsx(Icon, {
113
+ icon: Pipette,
114
+ size: 14
115
+ })
116
+ })
117
+ ]
118
+ }),
119
+ /* @__PURE__ */ jsx(SaturationArea, {
120
+ hue: hsva.h,
121
+ label: t("colorPicker.saturation"),
122
+ saturation: hsva.s,
123
+ value: hsva.v,
124
+ onChange: (s, v) => update({
125
+ ...hsva,
126
+ s,
127
+ v
128
+ }),
129
+ onChangeComplete: (s, v) => commit({
130
+ ...hsva,
131
+ s,
132
+ v
133
+ })
134
+ }),
135
+ /* @__PURE__ */ jsx(Slider, {
136
+ "aria-label": t("colorPicker.hue"),
137
+ max: 360,
138
+ min: 0,
139
+ value: hsva.h,
140
+ classNames: {
141
+ indicator: styles.hidden,
142
+ thumb: styles.sliderThumb,
143
+ track: styles.hueTrack
144
+ },
145
+ onChange: (h) => update({
146
+ ...hsva,
147
+ h
148
+ }),
149
+ onChangeComplete: (h) => commit({
150
+ ...hsva,
151
+ h
152
+ })
153
+ }),
154
+ alpha && /* @__PURE__ */ jsx(Slider, {
155
+ "aria-label": t("colorPicker.alpha"),
156
+ max: 100,
157
+ min: 0,
158
+ value: Math.round(hsva.a * 100),
159
+ classNames: {
160
+ indicator: styles.hidden,
161
+ thumb: styles.sliderThumb,
162
+ track: styles.alphaTrack
163
+ },
164
+ styles: { track: { "--lobe-color-picker-alpha": formatColor(hsva, false) } },
165
+ onChange: (a) => update({
166
+ ...hsva,
167
+ a: a / 100
168
+ }),
169
+ onChangeComplete: (a) => commit({
170
+ ...hsva,
171
+ a: a / 100
172
+ })
173
+ }),
174
+ /* @__PURE__ */ jsxs("div", {
175
+ className: styles.hexRow,
176
+ children: [/* @__PURE__ */ jsx(Input, {
177
+ "aria-label": "HEX",
178
+ prefix: /* @__PURE__ */ jsx("span", {
179
+ className: panelStyles.label,
180
+ children: "HEX"
181
+ }),
182
+ value: draft,
183
+ variant: "filled",
184
+ onBlur: commitDraft,
185
+ onChange: (event) => setDraft(event.target.value),
186
+ onPressEnter: commitDraft
187
+ }), alpha && /* @__PURE__ */ jsx(InputNumber, {
188
+ "aria-label": t("colorPicker.alpha"),
189
+ className: styles.alphaField,
190
+ controls: false,
191
+ max: 100,
192
+ min: 0,
193
+ suffix: "%",
194
+ value: Math.round(hsva.a * 100),
195
+ variant: "filled",
196
+ onChange: (a) => a !== null && apply({
197
+ ...hsva,
198
+ a: a / 100
199
+ })
200
+ })]
201
+ }),
202
+ presets && presets.length > 0 && /* @__PURE__ */ jsx("div", {
203
+ "aria-label": t("colorPicker.presets"),
204
+ className: styles.presets,
205
+ role: "group",
206
+ children: presets.map((color) => /* @__PURE__ */ jsx("button", {
207
+ "aria-label": color,
208
+ "aria-pressed": color.toLowerCase() === hex.slice(0, 7).toLowerCase(),
209
+ className: styles.preset,
210
+ style: { background: color },
211
+ type: "button",
212
+ onClick: () => apply({
213
+ ...parseColor(color, hsva.h),
214
+ a: parseColor(color).a
215
+ })
216
+ }, color))
217
+ })
218
+ ]
219
+ })
220
+ })
221
+ }) })] });
222
+ });
223
+ ColorPicker.displayName = "ColorPicker";
224
+ //#endregion
225
+ export { ColorPicker as default };
226
+
227
+ //# sourceMappingURL=ColorPicker.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ColorPicker.mjs","names":["colorPickerMessages","useControlledState"],"sources":["../../../src/base-ui/ColorPicker/ColorPicker.tsx"],"sourcesContent":["'use client';\n\nimport { cx, useThemeMode } from 'antd-style';\nimport { Pipette } from 'lucide-react';\nimport { type CSSProperties, memo, useEffect, useRef, useState } from 'react';\nimport useControlledState from 'use-merge-value';\n\nimport { Input, InputNumber } from '@/base-ui/Input';\nimport { rootVariants } from '@/base-ui/Input/style';\nimport { panelStyles } from '@/base-ui/panelStyles';\nimport {\n PopoverPopup,\n PopoverPortal,\n PopoverPositioner,\n PopoverRoot,\n PopoverTriggerElement,\n} from '@/base-ui/Popover';\nimport { Slider } from '@/base-ui/Slider';\nimport colorPickerMessages from '@/i18n/resources/en/colorPicker';\nimport { useTranslation } from '@/i18n/useTranslation';\nimport Icon from '@/Icon';\n\nimport { formatColor, type Hsva, normalizeHexInput, parseColor } from './color';\nimport SaturationArea from './SaturationArea';\nimport { styles } from './style';\nimport type { ColorPickerProps } from './type';\n\nconst DEFAULT_COLOR = '#000000';\n\nconst hasEyeDropper = () => typeof window !== 'undefined' && 'EyeDropper' in window;\n\nconst ColorPicker = memo<ColorPickerProps>(\n ({\n alpha = false,\n children,\n className,\n defaultValue = DEFAULT_COLOR,\n disabled,\n onChange,\n onChangeComplete,\n presets,\n showText,\n size = 'middle',\n style,\n value,\n }) => {\n const { t } = useTranslation(colorPickerMessages);\n const { isDarkMode } = useThemeMode();\n const [hex, setHex] = useControlledState<string>(defaultValue, {\n defaultValue,\n onChange,\n value,\n });\n const [hsva, setHsva] = useState<Hsva>(() => parseColor(hex));\n const [draft, setDraft] = useState(hex.slice(1).toUpperCase());\n const popupRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n setHsva((current) =>\n formatColor(current, alpha) === hex.toLowerCase() ? current : parseColor(hex, current.h),\n );\n setDraft(hex.slice(1).toUpperCase());\n }, [hex, alpha]);\n\n const update = (next: Hsva) => {\n setHsva(next);\n setHex(formatColor(next, alpha));\n };\n const commit = (next: Hsva) => onChangeComplete?.(formatColor(next, alpha));\n const apply = (next: Hsva) => {\n update(next);\n commit(next);\n };\n\n const commitDraft = () => {\n const normalized = normalizeHexInput(draft);\n if (!normalized) return setDraft(hex.slice(1).toUpperCase());\n apply(parseColor(normalized, hsva.h));\n };\n\n const swatch = (dimension: number) => (\n <span className={styles.swatch} style={{ height: dimension, width: dimension }}>\n <span style={{ background: hex }} />\n </span>\n );\n\n const trigger =\n children ??\n (showText ? (\n <button\n aria-label={t('colorPicker.trigger')}\n disabled={disabled}\n style={style}\n type=\"button\"\n className={cx(\n rootVariants({ size, variant: isDarkMode ? 'filled' : 'outlined' }),\n styles.textTrigger,\n className,\n )}\n >\n {swatch(18)}\n <span style={{ fontFamily: 'var(--lobe-font-family-code, monospace)' }}>\n {hex.toUpperCase()}\n </span>\n </button>\n ) : (\n <button\n aria-label={t('colorPicker.trigger')}\n className={cx(styles.swatchButton, className)}\n disabled={disabled}\n style={style}\n type=\"button\"\n >\n {swatch(24)}\n </button>\n ));\n\n return (\n <PopoverRoot>\n <PopoverTriggerElement>{trigger}</PopoverTriggerElement>\n <PopoverPortal>\n <PopoverPositioner placement=\"bottomLeft\">\n <PopoverPopup\n className={panelStyles.popup}\n ref={popupRef}\n initialFocus={() =>\n popupRef.current?.querySelector<HTMLElement>('[role=\"slider\"]') ?? true\n }\n >\n <div className={styles.panel}>\n <div className={styles.summary}>\n {swatch(40)}\n <div>\n <div className={styles.value}>{hex.toUpperCase()}</div>\n <div className={panelStyles.label}>\n {alpha ? `HEX · ${Math.round(hsva.a * 100)}%` : 'HEX'}\n </div>\n </div>\n {hasEyeDropper() && (\n <button\n aria-label={t('colorPicker.eyeDropper')}\n className={panelStyles.nav}\n style={{ marginInlineStart: 'auto' }}\n type=\"button\"\n onClick={async () => {\n const dropper = new (\n window as unknown as {\n EyeDropper: new () => { open: () => Promise<{ sRGBHex: string }> };\n }\n ).EyeDropper();\n const result = await dropper.open().catch(() => null);\n if (result) apply({ ...parseColor(result.sRGBHex, hsva.h), a: hsva.a });\n }}\n >\n <Icon icon={Pipette} size={14} />\n </button>\n )}\n </div>\n <SaturationArea\n hue={hsva.h}\n label={t('colorPicker.saturation')}\n saturation={hsva.s}\n value={hsva.v}\n onChange={(s, v) => update({ ...hsva, s, v })}\n onChangeComplete={(s, v) => commit({ ...hsva, s, v })}\n />\n <Slider\n aria-label={t('colorPicker.hue')}\n max={360}\n min={0}\n value={hsva.h}\n classNames={{\n indicator: styles.hidden,\n thumb: styles.sliderThumb,\n track: styles.hueTrack,\n }}\n onChange={(h) => update({ ...hsva, h })}\n onChangeComplete={(h) => commit({ ...hsva, h })}\n />\n {alpha && (\n <Slider\n aria-label={t('colorPicker.alpha')}\n max={100}\n min={0}\n value={Math.round(hsva.a * 100)}\n classNames={{\n indicator: styles.hidden,\n thumb: styles.sliderThumb,\n track: styles.alphaTrack,\n }}\n styles={{\n track: {\n '--lobe-color-picker-alpha': formatColor(hsva, false),\n } as CSSProperties,\n }}\n onChange={(a) => update({ ...hsva, a: a / 100 })}\n onChangeComplete={(a) => commit({ ...hsva, a: a / 100 })}\n />\n )}\n <div className={styles.hexRow}>\n <Input\n aria-label=\"HEX\"\n prefix={<span className={panelStyles.label}>HEX</span>}\n value={draft}\n variant=\"filled\"\n onBlur={commitDraft}\n onChange={(event) => setDraft(event.target.value)}\n onPressEnter={commitDraft}\n />\n {alpha && (\n <InputNumber\n aria-label={t('colorPicker.alpha')}\n className={styles.alphaField}\n controls={false}\n max={100}\n min={0}\n suffix=\"%\"\n value={Math.round(hsva.a * 100)}\n variant=\"filled\"\n onChange={(a) => a !== null && apply({ ...hsva, a: a / 100 })}\n />\n )}\n </div>\n {presets && presets.length > 0 && (\n <div\n aria-label={t('colorPicker.presets')}\n className={styles.presets}\n role=\"group\"\n >\n {presets.map((color) => (\n <button\n aria-label={color}\n aria-pressed={color.toLowerCase() === hex.slice(0, 7).toLowerCase()}\n className={styles.preset}\n key={color}\n style={{ background: color }}\n type=\"button\"\n onClick={() =>\n apply({ ...parseColor(color, hsva.h), a: parseColor(color).a })\n }\n />\n ))}\n </div>\n )}\n </div>\n </PopoverPopup>\n </PopoverPositioner>\n </PopoverPortal>\n </PopoverRoot>\n );\n },\n);\n\nColorPicker.displayName = 'ColorPicker';\n\nexport default ColorPicker;\n"],"mappings":"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"}
@@ -0,0 +1,64 @@
1
+ "use client";
2
+ import { styles } from "./style.mjs";
3
+ import { memo, useRef } from "react";
4
+ import { jsx } from "react/jsx-runtime";
5
+ //#region src/base-ui/ColorPicker/SaturationArea.tsx
6
+ const clamp = (n) => Math.min(1, Math.max(0, Math.round(n * 100) / 100));
7
+ const SaturationArea = memo(({ hue, label, onChange, onChangeComplete, saturation, value }) => {
8
+ const areaRef = useRef(null);
9
+ const fromPointer = (event) => {
10
+ const rect = areaRef.current.getBoundingClientRect();
11
+ const next = [clamp((event.clientX - rect.left) / rect.width), clamp(1 - (event.clientY - rect.top) / rect.height)];
12
+ onChange(...next);
13
+ return next;
14
+ };
15
+ return /* @__PURE__ */ jsx("div", {
16
+ "aria-label": label,
17
+ "aria-valuemax": 100,
18
+ "aria-valuemin": 0,
19
+ "aria-valuenow": Math.round(saturation * 100),
20
+ "aria-valuetext": `Saturation ${Math.round(saturation * 100)}%, brightness ${Math.round(value * 100)}%`,
21
+ className: styles.saturation,
22
+ ref: areaRef,
23
+ role: "slider",
24
+ tabIndex: 0,
25
+ style: { background: `linear-gradient(to top, #000, transparent), linear-gradient(to right, #fff, hsl(${hue} 100% 50%))` },
26
+ onKeyDown: (event) => {
27
+ const delta = event.shiftKey ? .1 : .01;
28
+ const move = {
29
+ ArrowDown: [0, -delta],
30
+ ArrowLeft: [-delta, 0],
31
+ ArrowRight: [delta, 0],
32
+ ArrowUp: [0, delta]
33
+ }[event.key];
34
+ if (!move) return;
35
+ event.preventDefault();
36
+ const next = [clamp(saturation + move[0]), clamp(value + move[1])];
37
+ onChange(...next);
38
+ onChangeComplete(...next);
39
+ },
40
+ onPointerDown: (event) => {
41
+ event.currentTarget.setPointerCapture(event.pointerId);
42
+ fromPointer(event);
43
+ },
44
+ onPointerMove: (event) => {
45
+ if (event.currentTarget.hasPointerCapture(event.pointerId)) fromPointer(event);
46
+ },
47
+ onPointerUp: (event) => {
48
+ event.currentTarget.releasePointerCapture(event.pointerId);
49
+ onChangeComplete(...fromPointer(event));
50
+ },
51
+ children: /* @__PURE__ */ jsx("span", {
52
+ className: styles.thumb,
53
+ style: {
54
+ left: `${saturation * 100}%`,
55
+ top: `${(1 - value) * 100}%`
56
+ }
57
+ })
58
+ });
59
+ });
60
+ SaturationArea.displayName = "ColorPickerSaturationArea";
61
+ //#endregion
62
+ export { SaturationArea as default };
63
+
64
+ //# sourceMappingURL=SaturationArea.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SaturationArea.mjs","names":[],"sources":["../../../src/base-ui/ColorPicker/SaturationArea.tsx"],"sourcesContent":["'use client';\n\nimport { memo, type PointerEvent, useRef } from 'react';\n\nimport { styles } from './style';\n\nexport interface SaturationAreaProps {\n hue: number;\n label: string;\n onChange: (saturation: number, value: number) => void;\n onChangeComplete: (saturation: number, value: number) => void;\n saturation: number;\n value: number;\n}\n\nconst clamp = (n: number) => Math.min(1, Math.max(0, Math.round(n * 100) / 100));\n\nconst SaturationArea = memo<SaturationAreaProps>(\n ({ hue, label, onChange, onChangeComplete, saturation, value }) => {\n const areaRef = useRef<HTMLDivElement>(null);\n\n const fromPointer = (event: PointerEvent<HTMLDivElement>): [number, number] => {\n const rect = areaRef.current!.getBoundingClientRect();\n const next: [number, number] = [\n clamp((event.clientX - rect.left) / rect.width),\n clamp(1 - (event.clientY - rect.top) / rect.height),\n ];\n onChange(...next);\n return next;\n };\n\n return (\n <div\n aria-label={label}\n aria-valuemax={100}\n aria-valuemin={0}\n aria-valuenow={Math.round(saturation * 100)}\n aria-valuetext={`Saturation ${Math.round(saturation * 100)}%, brightness ${Math.round(value * 100)}%`}\n className={styles.saturation}\n ref={areaRef}\n role=\"slider\"\n tabIndex={0}\n style={{\n background: `linear-gradient(to top, #000, transparent), linear-gradient(to right, #fff, hsl(${hue} 100% 50%))`,\n }}\n onKeyDown={(event) => {\n const delta = event.shiftKey ? 0.1 : 0.01;\n const moves: Record<string, [number, number]> = {\n ArrowDown: [0, -delta],\n ArrowLeft: [-delta, 0],\n ArrowRight: [delta, 0],\n ArrowUp: [0, delta],\n };\n const move = moves[event.key];\n if (!move) return;\n event.preventDefault();\n const next: [number, number] = [clamp(saturation + move[0]), clamp(value + move[1])];\n onChange(...next);\n onChangeComplete(...next);\n }}\n onPointerDown={(event) => {\n event.currentTarget.setPointerCapture(event.pointerId);\n fromPointer(event);\n }}\n onPointerMove={(event) => {\n if (event.currentTarget.hasPointerCapture(event.pointerId)) fromPointer(event);\n }}\n onPointerUp={(event) => {\n event.currentTarget.releasePointerCapture(event.pointerId);\n onChangeComplete(...fromPointer(event));\n }}\n >\n <span\n className={styles.thumb}\n style={{ left: `${saturation * 100}%`, top: `${(1 - value) * 100}%` }}\n />\n </div>\n );\n },\n);\n\nSaturationArea.displayName = 'ColorPickerSaturationArea';\n\nexport default SaturationArea;\n"],"mappings":";;;;;AAeA,MAAM,SAAS,MAAc,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC;AAE/E,MAAM,iBAAiB,MACpB,EAAE,KAAK,OAAO,UAAU,kBAAkB,YAAY,YAAY;CACjE,MAAM,UAAU,OAAuB,IAAI;CAE3C,MAAM,eAAe,UAA0D;EAC7E,MAAM,OAAO,QAAQ,QAAS,sBAAsB;EACpD,MAAM,OAAyB,CAC7B,OAAO,MAAM,UAAU,KAAK,QAAQ,KAAK,KAAK,GAC9C,MAAM,KAAK,MAAM,UAAU,KAAK,OAAO,KAAK,MAAM,CACpD;EACA,SAAS,GAAG,IAAI;EAChB,OAAO;CACT;CAEA,OACE,oBAAC,OAAD;EACE,cAAY;EACZ,iBAAe;EACf,iBAAe;EACf,iBAAe,KAAK,MAAM,aAAa,GAAG;EAC1C,kBAAgB,cAAc,KAAK,MAAM,aAAa,GAAG,EAAE,gBAAgB,KAAK,MAAM,QAAQ,GAAG,EAAE;EACnG,WAAW,OAAO;EAClB,KAAK;EACL,MAAK;EACL,UAAU;EACV,OAAO,EACL,YAAY,mFAAmF,IAAI,aACrG;EACA,YAAY,UAAU;GACpB,MAAM,QAAQ,MAAM,WAAW,KAAM;GAOrC,MAAM,OAAO;IALX,WAAW,CAAC,GAAG,CAAC,KAAK;IACrB,WAAW,CAAC,CAAC,OAAO,CAAC;IACrB,YAAY,CAAC,OAAO,CAAC;IACrB,SAAS,CAAC,GAAG,KAAK;GAEH,EAAE,MAAM;GACzB,IAAI,CAAC,MAAM;GACX,MAAM,eAAe;GACrB,MAAM,OAAyB,CAAC,MAAM,aAAa,KAAK,EAAE,GAAG,MAAM,QAAQ,KAAK,EAAE,CAAC;GACnF,SAAS,GAAG,IAAI;GAChB,iBAAiB,GAAG,IAAI;EAC1B;EACA,gBAAgB,UAAU;GACxB,MAAM,cAAc,kBAAkB,MAAM,SAAS;GACrD,YAAY,KAAK;EACnB;EACA,gBAAgB,UAAU;GACxB,IAAI,MAAM,cAAc,kBAAkB,MAAM,SAAS,GAAG,YAAY,KAAK;EAC/E;EACA,cAAc,UAAU;GACtB,MAAM,cAAc,sBAAsB,MAAM,SAAS;GACzD,iBAAiB,GAAG,YAAY,KAAK,CAAC;EACxC;EAEA,UAAA,oBAAC,QAAD;GACE,WAAW,OAAO;GAClB,OAAO;IAAE,MAAM,GAAG,aAAa,IAAI;IAAI,KAAK,IAAI,IAAI,SAAS,IAAI;GAAG;EACrE,CAAA;CACE,CAAA;AAET,CACF;AAEA,eAAe,cAAc"}
@@ -0,0 +1,28 @@
1
+ import chroma from "chroma-js";
2
+ //#region src/base-ui/ColorPicker/color.ts
3
+ const parseColor = (value, fallbackHue = 0) => {
4
+ if (!value || !chroma.valid(value)) return {
5
+ a: 1,
6
+ h: fallbackHue,
7
+ s: 0,
8
+ v: 0
9
+ };
10
+ const color = chroma(value);
11
+ const [h, s, v] = color.hsv();
12
+ return {
13
+ a: color.alpha(),
14
+ h: Number.isNaN(h) ? fallbackHue : h,
15
+ s,
16
+ v
17
+ };
18
+ };
19
+ const formatColor = ({ a, h, s, v }, alpha) => chroma.hsv(h, s, v).alpha(alpha ? a : 1).hex(alpha ? "rgba" : "rgb");
20
+ const normalizeHexInput = (input) => {
21
+ const raw = input.trim().replace(/^#/, "");
22
+ if (!/^([\da-f]{3}|[\da-f]{6}|[\da-f]{8})$/i.test(raw)) return null;
23
+ return `#${raw.toLowerCase()}`;
24
+ };
25
+ //#endregion
26
+ export { formatColor, normalizeHexInput, parseColor };
27
+
28
+ //# sourceMappingURL=color.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"color.mjs","names":[],"sources":["../../../src/base-ui/ColorPicker/color.ts"],"sourcesContent":["import chroma from 'chroma-js';\n\nexport interface Hsva {\n a: number;\n h: number;\n s: number;\n v: number;\n}\n\nexport const parseColor = (value: string | undefined, fallbackHue = 0): Hsva => {\n if (!value || !chroma.valid(value)) return { a: 1, h: fallbackHue, s: 0, v: 0 };\n const color = chroma(value);\n const [h, s, v] = color.hsv();\n return { a: color.alpha(), h: Number.isNaN(h) ? fallbackHue : h, s, v };\n};\n\nexport const formatColor = ({ a, h, s, v }: Hsva, alpha: boolean): string =>\n chroma\n .hsv(h, s, v)\n .alpha(alpha ? a : 1)\n .hex(alpha ? 'rgba' : 'rgb');\n\nexport const normalizeHexInput = (input: string): string | null => {\n const raw = input.trim().replace(/^#/, '');\n if (!/^([\\da-f]{3}|[\\da-f]{6}|[\\da-f]{8})$/i.test(raw)) return null;\n return `#${raw.toLowerCase()}`;\n};\n"],"mappings":";;AASA,MAAa,cAAc,OAA2B,cAAc,MAAY;CAC9E,IAAI,CAAC,SAAS,CAAC,OAAO,MAAM,KAAK,GAAG,OAAO;EAAE,GAAG;EAAG,GAAG;EAAa,GAAG;EAAG,GAAG;CAAE;CAC9E,MAAM,QAAQ,OAAO,KAAK;CAC1B,MAAM,CAAC,GAAG,GAAG,KAAK,MAAM,IAAI;CAC5B,OAAO;EAAE,GAAG,MAAM,MAAM;EAAG,GAAG,OAAO,MAAM,CAAC,IAAI,cAAc;EAAG;EAAG;CAAE;AACxE;AAEA,MAAa,eAAe,EAAE,GAAG,GAAG,GAAG,KAAW,UAChD,OACG,IAAI,GAAG,GAAG,CAAC,CAAC,CACZ,MAAM,QAAQ,IAAI,CAAC,CAAC,CACpB,IAAI,QAAQ,SAAS,KAAK;AAE/B,MAAa,qBAAqB,UAAiC;CACjE,MAAM,MAAM,MAAM,KAAK,CAAC,CAAC,QAAQ,MAAM,EAAE;CACzC,IAAI,CAAC,wCAAwC,KAAK,GAAG,GAAG,OAAO;CAC/D,OAAO,IAAI,IAAI,YAAY;AAC7B"}
@@ -0,0 +1,3 @@
1
+ import { ColorPickerProps } from "./type.mjs";
2
+ import ColorPicker from "./ColorPicker.mjs";
3
+ export { ColorPicker, type ColorPickerProps };
@@ -0,0 +1,180 @@
1
+ import { focusRing } from "../focusRing.mjs";
2
+ import { createStaticStyles } from "antd-style";
3
+ //#region src/base-ui/ColorPicker/style.ts
4
+ const checker = (color) => `
5
+ background-image:
6
+ linear-gradient(45deg, ${color} 25%, transparent 25%, transparent 75%, ${color} 75%),
7
+ linear-gradient(45deg, ${color} 25%, transparent 25%, transparent 75%, ${color} 75%);
8
+ background-position: 0 0, 4px 4px;
9
+ background-size: 8px 8px;
10
+ `;
11
+ const styles = createStaticStyles(({ css, cssVar }) => ({
12
+ alphaField: css`
13
+ flex: none;
14
+ width: 76px;
15
+ `,
16
+ alphaTrack: css`
17
+ height: 10px;
18
+ border-radius: 999px;
19
+
20
+ background-image:
21
+ linear-gradient(to right, transparent, var(--lobe-color-picker-alpha)),
22
+ linear-gradient(
23
+ 45deg,
24
+ ${cssVar.colorFillSecondary} 25%,
25
+ transparent 25%,
26
+ transparent 75%,
27
+ ${cssVar.colorFillSecondary} 75%
28
+ ),
29
+ linear-gradient(
30
+ 45deg,
31
+ ${cssVar.colorFillSecondary} 25%,
32
+ transparent 25%,
33
+ transparent 75%,
34
+ ${cssVar.colorFillSecondary} 75%
35
+ );
36
+ background-position:
37
+ 0 0,
38
+ 0 0,
39
+ 4px 4px;
40
+ background-size:
41
+ 100% 100%,
42
+ 8px 8px,
43
+ 8px 8px;
44
+ `,
45
+ hexRow: css`
46
+ display: flex;
47
+ gap: 6px;
48
+
49
+ & > * {
50
+ min-width: 0;
51
+ }
52
+ `,
53
+ hidden: css`
54
+ background: transparent !important;
55
+ `,
56
+ hueTrack: css`
57
+ height: 10px;
58
+ border-radius: 999px;
59
+ background: linear-gradient(to right, #f00, #ff0, #0f0, #0ff, #00f, #f0f, #f00);
60
+ `,
61
+ panel: css`
62
+ display: flex;
63
+ flex-direction: column;
64
+ gap: 14px;
65
+ width: 240px;
66
+ `,
67
+ preset: css`
68
+ ${focusRing};
69
+ cursor: pointer;
70
+
71
+ width: 22px;
72
+ height: 22px;
73
+ padding: 0;
74
+ border: 0;
75
+ border-radius: 50%;
76
+
77
+ &[aria-pressed='true'] {
78
+ box-shadow:
79
+ 0 0 0 2px ${cssVar.colorBgElevated},
80
+ 0 0 0 4px ${cssVar.colorText};
81
+ }
82
+ `,
83
+ presets: css`
84
+ display: flex;
85
+ flex-wrap: wrap;
86
+ gap: 8px;
87
+
88
+ padding-block-start: 14px;
89
+ border-block-start: 1px solid ${cssVar.colorBorderSecondary};
90
+ `,
91
+ saturation: css`
92
+ ${focusRing};
93
+ touch-action: none;
94
+ cursor: crosshair;
95
+
96
+ position: relative;
97
+
98
+ height: 164px;
99
+ border-radius: 12px;
100
+ `,
101
+ swatch: css`
102
+ ${checker(cssVar.colorFillSecondary)};
103
+ overflow: hidden;
104
+ display: inline-flex;
105
+ flex: none;
106
+
107
+ border-radius: 50%;
108
+
109
+ box-shadow: inset 0 0 0 1px ${cssVar.colorFillSecondary};
110
+
111
+ & > span {
112
+ flex: 1;
113
+ }
114
+ `,
115
+ swatchButton: css`
116
+ ${focusRing};
117
+ cursor: pointer;
118
+
119
+ display: inline-flex;
120
+ align-items: center;
121
+ justify-content: center;
122
+
123
+ width: 32px;
124
+ height: 32px;
125
+ padding: 0;
126
+ border: 0;
127
+ border-radius: 50%;
128
+
129
+ background: none;
130
+
131
+ &:disabled {
132
+ cursor: not-allowed;
133
+ opacity: 0.5;
134
+ }
135
+ `,
136
+ textTrigger: css`
137
+ cursor: pointer;
138
+ width: auto;
139
+ `,
140
+ thumb: css`
141
+ position: absolute;
142
+
143
+ box-sizing: border-box;
144
+ width: 18px;
145
+ height: 18px;
146
+ margin-block: -9px 0;
147
+ margin-inline: -9px 0;
148
+ border: 3px solid #fff;
149
+ border-radius: 50%;
150
+
151
+ box-shadow:
152
+ 0 0 0 1px rgb(0 0 0 / 12%),
153
+ 0 2px 6px rgb(0 0 0 / 25%);
154
+ `,
155
+ sliderThumb: css`
156
+ width: 18px !important;
157
+ height: 18px !important;
158
+ border: 3px solid #fff !important;
159
+
160
+ background: transparent !important;
161
+ box-shadow:
162
+ 0 0 0 1px rgb(0 0 0 / 12%),
163
+ 0 2px 6px rgb(0 0 0 / 25%) !important;
164
+ `,
165
+ summary: css`
166
+ display: flex;
167
+ gap: 12px;
168
+ align-items: center;
169
+ `,
170
+ value: css`
171
+ font-family: ${cssVar.fontFamilyCode};
172
+ font-size: 20px;
173
+ font-weight: 600;
174
+ line-height: 1.2;
175
+ `
176
+ }));
177
+ //#endregion
178
+ export { styles };
179
+
180
+ //# sourceMappingURL=style.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"style.mjs","names":[],"sources":["../../../src/base-ui/ColorPicker/style.ts"],"sourcesContent":["import { createStaticStyles } from 'antd-style';\n\nimport { focusRing } from '@/base-ui/focusRing';\n\nconst checker = (color: string) => `\n background-image:\n linear-gradient(45deg, ${color} 25%, transparent 25%, transparent 75%, ${color} 75%),\n linear-gradient(45deg, ${color} 25%, transparent 25%, transparent 75%, ${color} 75%);\n background-position: 0 0, 4px 4px;\n background-size: 8px 8px;\n`;\n\nexport const styles = createStaticStyles(({ css, cssVar }) => ({\n alphaField: css`\n flex: none;\n width: 76px;\n `,\n alphaTrack: css`\n height: 10px;\n border-radius: 999px;\n\n background-image:\n linear-gradient(to right, transparent, var(--lobe-color-picker-alpha)),\n linear-gradient(\n 45deg,\n ${cssVar.colorFillSecondary} 25%,\n transparent 25%,\n transparent 75%,\n ${cssVar.colorFillSecondary} 75%\n ),\n linear-gradient(\n 45deg,\n ${cssVar.colorFillSecondary} 25%,\n transparent 25%,\n transparent 75%,\n ${cssVar.colorFillSecondary} 75%\n );\n background-position:\n 0 0,\n 0 0,\n 4px 4px;\n background-size:\n 100% 100%,\n 8px 8px,\n 8px 8px;\n `,\n hexRow: css`\n display: flex;\n gap: 6px;\n\n & > * {\n min-width: 0;\n }\n `,\n hidden: css`\n background: transparent !important;\n `,\n hueTrack: css`\n height: 10px;\n border-radius: 999px;\n background: linear-gradient(to right, #f00, #ff0, #0f0, #0ff, #00f, #f0f, #f00);\n `,\n panel: css`\n display: flex;\n flex-direction: column;\n gap: 14px;\n width: 240px;\n `,\n preset: css`\n ${focusRing};\n cursor: pointer;\n\n width: 22px;\n height: 22px;\n padding: 0;\n border: 0;\n border-radius: 50%;\n\n &[aria-pressed='true'] {\n box-shadow:\n 0 0 0 2px ${cssVar.colorBgElevated},\n 0 0 0 4px ${cssVar.colorText};\n }\n `,\n presets: css`\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n\n padding-block-start: 14px;\n border-block-start: 1px solid ${cssVar.colorBorderSecondary};\n `,\n saturation: css`\n ${focusRing};\n touch-action: none;\n cursor: crosshair;\n\n position: relative;\n\n height: 164px;\n border-radius: 12px;\n `,\n swatch: css`\n ${checker(cssVar.colorFillSecondary)};\n overflow: hidden;\n display: inline-flex;\n flex: none;\n\n border-radius: 50%;\n\n box-shadow: inset 0 0 0 1px ${cssVar.colorFillSecondary};\n\n & > span {\n flex: 1;\n }\n `,\n swatchButton: css`\n ${focusRing};\n cursor: pointer;\n\n display: inline-flex;\n align-items: center;\n justify-content: center;\n\n width: 32px;\n height: 32px;\n padding: 0;\n border: 0;\n border-radius: 50%;\n\n background: none;\n\n &:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n }\n `,\n textTrigger: css`\n cursor: pointer;\n width: auto;\n `,\n thumb: css`\n position: absolute;\n\n box-sizing: border-box;\n width: 18px;\n height: 18px;\n margin-block: -9px 0;\n margin-inline: -9px 0;\n border: 3px solid #fff;\n border-radius: 50%;\n\n box-shadow:\n 0 0 0 1px rgb(0 0 0 / 12%),\n 0 2px 6px rgb(0 0 0 / 25%);\n `,\n sliderThumb: css`\n width: 18px !important;\n height: 18px !important;\n border: 3px solid #fff !important;\n\n background: transparent !important;\n box-shadow:\n 0 0 0 1px rgb(0 0 0 / 12%),\n 0 2px 6px rgb(0 0 0 / 25%) !important;\n `,\n summary: css`\n display: flex;\n gap: 12px;\n align-items: center;\n `,\n value: css`\n font-family: ${cssVar.fontFamilyCode};\n font-size: 20px;\n font-weight: 600;\n line-height: 1.2;\n `,\n}));\n"],"mappings":";;;AAIA,MAAM,WAAW,UAAkB;;6BAEN,MAAM,0CAA0C,MAAM;6BACtD,MAAM,0CAA0C,MAAM;;;;AAKnF,MAAa,SAAS,oBAAoB,EAAE,KAAK,cAAc;CAC7D,YAAY,GAAG;;;;CAIf,YAAY,GAAG;;;;;;;;UAQP,OAAO,mBAAmB;;;UAG1B,OAAO,mBAAmB;;;;UAI1B,OAAO,mBAAmB;;;UAG1B,OAAO,mBAAmB;;;;;;;;;;;CAWlC,QAAQ,GAAG;;;;;;;;CAQX,QAAQ,GAAG;;;CAGX,UAAU,GAAG;;;;;CAKb,OAAO,GAAG;;;;;;CAMV,QAAQ,GAAG;MACP,UAAU;;;;;;;;;;;oBAWI,OAAO,gBAAgB;oBACvB,OAAO,UAAU;;;CAGnC,SAAS,GAAG;;;;;;oCAMsB,OAAO,qBAAqB;;CAE9D,YAAY,GAAG;MACX,UAAU;;;;;;;;;CASd,QAAQ,GAAG;MACP,QAAQ,OAAO,kBAAkB,EAAE;;;;;;;kCAOP,OAAO,mBAAmB;;;;;;CAM1D,cAAc,GAAG;MACb,UAAU;;;;;;;;;;;;;;;;;;;;CAoBd,aAAa,GAAG;;;;CAIhB,OAAO,GAAG;;;;;;;;;;;;;;;CAeV,aAAa,GAAG;;;;;;;;;;CAUhB,SAAS,GAAG;;;;;CAKZ,OAAO,GAAG;mBACO,OAAO,eAAe;;;;;AAKzC,EAAE"}
@@ -0,0 +1,20 @@
1
+ import { InputSize } from "../Input/type.mjs";
2
+ import { CSSProperties, ReactElement } from "react";
3
+ //#region src/base-ui/ColorPicker/type.d.ts
4
+ interface ColorPickerProps {
5
+ alpha?: boolean;
6
+ children?: ReactElement;
7
+ className?: string;
8
+ defaultValue?: string;
9
+ disabled?: boolean;
10
+ onChange?: (hex: string) => void;
11
+ onChangeComplete?: (hex: string) => void;
12
+ presets?: string[];
13
+ showText?: boolean;
14
+ size?: InputSize;
15
+ style?: CSSProperties;
16
+ value?: string;
17
+ }
18
+ //#endregion
19
+ export { ColorPickerProps };
20
+ //# sourceMappingURL=type.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ContextMenuHost.mjs","names":[],"sources":["../../../src/base-ui/ContextMenu/ContextMenuHost.tsx"],"sourcesContent":["'use client';\n\nimport { ContextMenu } from '@base-ui/react/context-menu';\nimport { cx } from 'antd-style';\nimport { memo, useEffect, useMemo, useSyncExternalStore } from 'react';\n\nimport { getFloatingCollisionPadding } from '@/base-ui/floating';\nimport { MenuVirtualList } from '@/base-ui/virtual';\nimport { useIsClient } from '@/hooks/useIsClient';\nimport { useAppElement } from '@/ThemeProvider';\nimport { registerDevSingleton } from '@/utils/devSingleton';\nimport { preventDefaultAndStopPropagation } from '@/utils/dom';\n\nimport { useLayerZIndex } from '../zIndex';\nimport { renderContextMenuItems } from './renderItems';\nimport {\n closeContextMenu,\n getServerSnapshot,\n getSnapshot,\n setContextMenuState,\n subscribe,\n updateLastPointer,\n} from './store';\nimport { styles } from './style';\n\nconst noAnimationStyles = { '--lobe-dropdown-animation-duration': '0ms' } as React.CSSProperties;\n\nexport const ContextMenuHost = memo(() => {\n const isClient = useIsClient();\n const appElement = useAppElement();\n const state = useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);\n\n useEffect(() => {\n const DEV = process.env.NODE_ENV === 'development';\n if (!isClient || !DEV) return;\n return registerDevSingleton('ContextMenuHost', document.body);\n }, [isClient]);\n\n useEffect(() => {\n const handler = (event: MouseEvent | PointerEvent) => updateLastPointer(event);\n window.addEventListener('pointerdown', handler, true);\n window.addEventListener('contextmenu', handler, true);\n return () => {\n window.removeEventListener('pointerdown', handler, true);\n window.removeEventListener('contextmenu', handler, true);\n };\n }, []);\n\n const menuItems = useMemo(\n () =>\n renderContextMenuItems(state.items, [], {\n iconAlign: state.iconAlign,\n iconSpaceMode: state.iconSpaceMode,\n }),\n [state.items, state.iconAlign, state.iconSpaceMode],\n );\n const { zIndex, ref: zRef } = useLayerZIndex<HTMLDivElement>('floating');\n const hasSlots = state.header != null || state.footer != null;\n if (!isClient) return null;\n if (!state.open && state.items.length === 0) return null;\n\n return (\n <ContextMenu.Root\n open={state.open}\n onOpenChange={(open) => {\n if (open) {\n setContextMenuState({ open });\n return;\n }\n closeContextMenu();\n }}\n >\n <ContextMenu.Portal container={appElement}>\n <ContextMenu.Positioner\n anchor={state.anchor ?? undefined}\n className={styles.positioner}\n collisionPadding={getFloatingCollisionPadding()}\n ref={zRef as any}\n sideOffset={6}\n style={{ ...noAnimationStyles, zIndex }}\n >\n <ContextMenu.Popup\n className={cx(styles.popup, hasSlots && styles.popupWithSlots)}\n data-has-footer={state.footer == null ? undefined : ''}\n data-has-header={state.header == null ? undefined : ''}\n onContextMenu={preventDefaultAndStopPropagation}\n >\n {state.header == null ? null : <div className={styles.header}>{state.header}</div>}\n {state.virtual ? (\n <MenuVirtualList itemSize={state.listItemHeight}>{menuItems}</MenuVirtualList>\n ) : hasSlots ? (\n <div className={styles.slotViewport}>{menuItems}</div>\n ) : (\n menuItems\n )}\n {state.footer == null ? null : <div className={styles.footer}>{state.footer}</div>}\n </ContextMenu.Popup>\n </ContextMenu.Positioner>\n </ContextMenu.Portal>\n </ContextMenu.Root>\n );\n});\n\nContextMenuHost.displayName = 'ContextMenuHost';\n"],"mappings":";;;;;;;;;;;;;;;;AAyBA,MAAM,oBAAoB,EAAE,sCAAsC,MAAM;AAExE,MAAa,kBAAkB,WAAW;CACxC,MAAM,WAAW,YAAY;CAC7B,MAAM,aAAa,cAAc;CACjC,MAAM,QAAQ,qBAAqB,WAAW,aAAa,iBAAiB;CAE5E,gBAAgB;EACd,MAAM,MAAM,QAAQ,IAAI,aAAa;EACrC,IAAI,CAAC,YAAY,CAAC,KAAK;EACvB,OAAO,qBAAqB,mBAAmB,SAAS,IAAI;CAC9D,GAAG,CAAC,QAAQ,CAAC;CAEb,gBAAgB;EACd,MAAM,WAAW,UAAqC,kBAAkB,KAAK;EAC7E,OAAO,iBAAiB,eAAe,SAAS,IAAI;EACpD,OAAO,iBAAiB,eAAe,SAAS,IAAI;EACpD,aAAa;GACX,OAAO,oBAAoB,eAAe,SAAS,IAAI;GACvD,OAAO,oBAAoB,eAAe,SAAS,IAAI;EACzD;CACF,GAAG,CAAC,CAAC;CAEL,MAAM,YAAY,cAEd,uBAAuB,MAAM,OAAO,CAAC,GAAG;EACtC,WAAW,MAAM;EACjB,eAAe,MAAM;CACvB,CAAC,GACH;EAAC,MAAM;EAAO,MAAM;EAAW,MAAM;CAAa,CACpD;CACA,MAAM,EAAE,QAAQ,KAAK,SAAS,eAA+B,UAAU;CACvE,MAAM,WAAW,MAAM,UAAU,QAAQ,MAAM,UAAU;CACzD,IAAI,CAAC,UAAU,OAAO;CACtB,IAAI,CAAC,MAAM,QAAQ,MAAM,MAAM,WAAW,GAAG,OAAO;CAEpD,OACE,oBAAC,YAAY,MAAb;EACE,MAAM,MAAM;EACZ,eAAe,SAAS;GACtB,IAAI,MAAM;IACR,oBAAoB,EAAE,KAAK,CAAC;IAC5B;GACF;GACA,iBAAiB;EACnB;EAEA,UAAA,oBAAC,YAAY,QAAb;GAAoB,WAAW;GAC7B,UAAA,oBAAC,YAAY,YAAb;IACE,QAAQ,MAAM,UAAU,KAAA;IACxB,WAAW,OAAO;IAClB,kBAAkB,4BAA4B;IAC9C,KAAK;IACL,YAAY;IACZ,OAAO;KAAE,GAAG;KAAmB;IAAO;IAEtC,UAAA,qBAAC,YAAY,OAAb;KACE,WAAW,GAAG,OAAO,OAAO,YAAY,OAAO,cAAc;KAC7D,mBAAiB,MAAM,UAAU,OAAO,KAAA,IAAY;KACpD,mBAAiB,MAAM,UAAU,OAAO,KAAA,IAAY;KACpD,eAAe;KAJjB,UAAA;MAMG,MAAM,UAAU,OAAO,OAAO,oBAAC,OAAD;OAAK,WAAW,OAAO;OAAS,UAAA,MAAM;MAAY,CAAA;MAChF,MAAM,UACL,oBAAC,iBAAD;OAAiB,UAAU,MAAM;OAAiB,UAAA;MAA2B,CAAA,IAC3E,WACF,oBAAC,OAAD;OAAK,WAAW,OAAO;OAAe,UAAA;MAAe,CAAA,IAErD;MAED,MAAM,UAAU,OAAO,OAAO,oBAAC,OAAD;OAAK,WAAW,OAAO;OAAS,UAAA,MAAM;MAAY,CAAA;KAChE;;GACG,CAAA;EACN,CAAA;CACJ,CAAA;AAEtB,CAAC;AAED,gBAAgB,cAAc"}
1
+ {"version":3,"file":"ContextMenuHost.mjs","names":[],"sources":["../../../src/base-ui/ContextMenu/ContextMenuHost.tsx"],"sourcesContent":["'use client';\n\nimport { ContextMenu } from '@base-ui/react/context-menu';\nimport { cx } from 'antd-style';\nimport { memo, useEffect, useMemo, useSyncExternalStore } from 'react';\n\nimport { getFloatingCollisionPadding } from '@/base-ui/floating';\nimport { MenuVirtualList } from '@/base-ui/virtual';\nimport { useIsClient } from '@/hooks/useIsClient';\nimport { useAppElement } from '@/ThemeProvider/AppElementContext';\nimport { registerDevSingleton } from '@/utils/devSingleton';\nimport { preventDefaultAndStopPropagation } from '@/utils/dom';\n\nimport { useLayerZIndex } from '../zIndex';\nimport { renderContextMenuItems } from './renderItems';\nimport {\n closeContextMenu,\n getServerSnapshot,\n getSnapshot,\n setContextMenuState,\n subscribe,\n updateLastPointer,\n} from './store';\nimport { styles } from './style';\n\nconst noAnimationStyles = { '--lobe-dropdown-animation-duration': '0ms' } as React.CSSProperties;\n\nexport const ContextMenuHost = memo(() => {\n const isClient = useIsClient();\n const appElement = useAppElement();\n const state = useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);\n\n useEffect(() => {\n const DEV = process.env.NODE_ENV === 'development';\n if (!isClient || !DEV) return;\n return registerDevSingleton('ContextMenuHost', document.body);\n }, [isClient]);\n\n useEffect(() => {\n const handler = (event: MouseEvent | PointerEvent) => updateLastPointer(event);\n window.addEventListener('pointerdown', handler, true);\n window.addEventListener('contextmenu', handler, true);\n return () => {\n window.removeEventListener('pointerdown', handler, true);\n window.removeEventListener('contextmenu', handler, true);\n };\n }, []);\n\n const menuItems = useMemo(\n () =>\n renderContextMenuItems(state.items, [], {\n iconAlign: state.iconAlign,\n iconSpaceMode: state.iconSpaceMode,\n }),\n [state.items, state.iconAlign, state.iconSpaceMode],\n );\n const { zIndex, ref: zRef } = useLayerZIndex<HTMLDivElement>('floating');\n const hasSlots = state.header != null || state.footer != null;\n if (!isClient) return null;\n if (!state.open && state.items.length === 0) return null;\n\n return (\n <ContextMenu.Root\n open={state.open}\n onOpenChange={(open) => {\n if (open) {\n setContextMenuState({ open });\n return;\n }\n closeContextMenu();\n }}\n >\n <ContextMenu.Portal container={appElement}>\n <ContextMenu.Positioner\n anchor={state.anchor ?? undefined}\n className={styles.positioner}\n collisionPadding={getFloatingCollisionPadding()}\n ref={zRef as any}\n sideOffset={6}\n style={{ ...noAnimationStyles, zIndex }}\n >\n <ContextMenu.Popup\n className={cx(styles.popup, hasSlots && styles.popupWithSlots)}\n data-has-footer={state.footer == null ? undefined : ''}\n data-has-header={state.header == null ? undefined : ''}\n onContextMenu={preventDefaultAndStopPropagation}\n >\n {state.header == null ? null : <div className={styles.header}>{state.header}</div>}\n {state.virtual ? (\n <MenuVirtualList itemSize={state.listItemHeight}>{menuItems}</MenuVirtualList>\n ) : hasSlots ? (\n <div className={styles.slotViewport}>{menuItems}</div>\n ) : (\n menuItems\n )}\n {state.footer == null ? null : <div className={styles.footer}>{state.footer}</div>}\n </ContextMenu.Popup>\n </ContextMenu.Positioner>\n </ContextMenu.Portal>\n </ContextMenu.Root>\n );\n});\n\nContextMenuHost.displayName = 'ContextMenuHost';\n"],"mappings":";;;;;;;;;;;;;;;;AAyBA,MAAM,oBAAoB,EAAE,sCAAsC,MAAM;AAExE,MAAa,kBAAkB,WAAW;CACxC,MAAM,WAAW,YAAY;CAC7B,MAAM,aAAa,cAAc;CACjC,MAAM,QAAQ,qBAAqB,WAAW,aAAa,iBAAiB;CAE5E,gBAAgB;EACd,MAAM,MAAM,QAAQ,IAAI,aAAa;EACrC,IAAI,CAAC,YAAY,CAAC,KAAK;EACvB,OAAO,qBAAqB,mBAAmB,SAAS,IAAI;CAC9D,GAAG,CAAC,QAAQ,CAAC;CAEb,gBAAgB;EACd,MAAM,WAAW,UAAqC,kBAAkB,KAAK;EAC7E,OAAO,iBAAiB,eAAe,SAAS,IAAI;EACpD,OAAO,iBAAiB,eAAe,SAAS,IAAI;EACpD,aAAa;GACX,OAAO,oBAAoB,eAAe,SAAS,IAAI;GACvD,OAAO,oBAAoB,eAAe,SAAS,IAAI;EACzD;CACF,GAAG,CAAC,CAAC;CAEL,MAAM,YAAY,cAEd,uBAAuB,MAAM,OAAO,CAAC,GAAG;EACtC,WAAW,MAAM;EACjB,eAAe,MAAM;CACvB,CAAC,GACH;EAAC,MAAM;EAAO,MAAM;EAAW,MAAM;CAAa,CACpD;CACA,MAAM,EAAE,QAAQ,KAAK,SAAS,eAA+B,UAAU;CACvE,MAAM,WAAW,MAAM,UAAU,QAAQ,MAAM,UAAU;CACzD,IAAI,CAAC,UAAU,OAAO;CACtB,IAAI,CAAC,MAAM,QAAQ,MAAM,MAAM,WAAW,GAAG,OAAO;CAEpD,OACE,oBAAC,YAAY,MAAb;EACE,MAAM,MAAM;EACZ,eAAe,SAAS;GACtB,IAAI,MAAM;IACR,oBAAoB,EAAE,KAAK,CAAC;IAC5B;GACF;GACA,iBAAiB;EACnB;EAEA,UAAA,oBAAC,YAAY,QAAb;GAAoB,WAAW;GAC7B,UAAA,oBAAC,YAAY,YAAb;IACE,QAAQ,MAAM,UAAU,KAAA;IACxB,WAAW,OAAO;IAClB,kBAAkB,4BAA4B;IAC9C,KAAK;IACL,YAAY;IACZ,OAAO;KAAE,GAAG;KAAmB;IAAO;IAEtC,UAAA,qBAAC,YAAY,OAAb;KACE,WAAW,GAAG,OAAO,OAAO,YAAY,OAAO,cAAc;KAC7D,mBAAiB,MAAM,UAAU,OAAO,KAAA,IAAY;KACpD,mBAAiB,MAAM,UAAU,OAAO,KAAA,IAAY;KACpD,eAAe;KAJjB,UAAA;MAMG,MAAM,UAAU,OAAO,OAAO,oBAAC,OAAD;OAAK,WAAW,OAAO;OAAS,UAAA,MAAM;MAAY,CAAA;MAChF,MAAM,UACL,oBAAC,iBAAD;OAAiB,UAAU,MAAM;OAAiB,UAAA;MAA2B,CAAA,IAC3E,WACF,oBAAC,OAAD;OAAK,WAAW,OAAO;OAAe,UAAA;MAAe,CAAA,IAErD;MAED,MAAM,UAAU,OAAO,OAAO,oBAAC,OAAD;OAAK,WAAW,OAAO;OAAS,UAAA,MAAM;MAAY,CAAA;KAChE;;GACG,CAAA;EACN,CAAA;CACJ,CAAA;AAEtB,CAAC;AAED,gBAAgB,cAAc"}
@@ -1,5 +1,4 @@
1
1
  import { IconAlign, IconSpaceMode } from "../../Menu/renderUtils.mjs";
2
- import "../../Menu/index.mjs";
3
2
  import "./type.mjs";
4
3
  import { ReactNode } from "react";
5
4
  export type { IconSpaceMode };