asterui 0.10.2

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 (366) hide show
  1. package/LICENSE +15 -0
  2. package/README.md +214 -0
  3. package/dist/components/Affix.d.ts +14 -0
  4. package/dist/components/Alert.d.ts +10 -0
  5. package/dist/components/Autocomplete.d.ts +18 -0
  6. package/dist/components/Avatar.d.ts +28 -0
  7. package/dist/components/Badge.d.ts +20 -0
  8. package/dist/components/Breadcrumb.d.ts +15 -0
  9. package/dist/components/Browser.d.ts +7 -0
  10. package/dist/components/Button.d.ts +23 -0
  11. package/dist/components/Card.d.ts +26 -0
  12. package/dist/components/Carousel.d.ts +14 -0
  13. package/dist/components/Cascader.d.ts +19 -0
  14. package/dist/components/Chart.d.ts +19 -0
  15. package/dist/components/Chat.d.ts +11 -0
  16. package/dist/components/Checkbox.d.ts +27 -0
  17. package/dist/components/Code.d.ts +14 -0
  18. package/dist/components/Collapse.d.ts +25 -0
  19. package/dist/components/ColorPicker.d.ts +10 -0
  20. package/dist/components/Container.d.ts +6 -0
  21. package/dist/components/ContextMenu.d.ts +23 -0
  22. package/dist/components/Countdown.d.ts +27 -0
  23. package/dist/components/DatePicker.d.ts +11 -0
  24. package/dist/components/Descriptions.d.ts +34 -0
  25. package/dist/components/Divider.d.ts +8 -0
  26. package/dist/components/Drawer.d.ts +10 -0
  27. package/dist/components/Dropdown.d.ts +39 -0
  28. package/dist/components/Empty.d.ts +8 -0
  29. package/dist/components/Fieldset.d.ts +15 -0
  30. package/dist/components/FileInput.d.ts +9 -0
  31. package/dist/components/Flex.d.ts +14 -0
  32. package/dist/components/FloatButton.d.ts +34 -0
  33. package/dist/components/Footer.d.ts +16 -0
  34. package/dist/components/Form.d.ts +66 -0
  35. package/dist/components/Grid.d.ts +26 -0
  36. package/dist/components/Hero.d.ts +9 -0
  37. package/dist/components/Image.d.ts +14 -0
  38. package/dist/components/Indicator.d.ts +7 -0
  39. package/dist/components/Input.d.ts +14 -0
  40. package/dist/components/InputNumber.d.ts +19 -0
  41. package/dist/components/Join.d.ts +6 -0
  42. package/dist/components/Label.d.ts +15 -0
  43. package/dist/components/Layout.d.ts +59 -0
  44. package/dist/components/List.d.ts +13 -0
  45. package/dist/components/Loading.d.ts +9 -0
  46. package/dist/components/Masonry.d.ts +15 -0
  47. package/dist/components/Mention.d.ts +30 -0
  48. package/dist/components/Menu.d.ts +45 -0
  49. package/dist/components/Modal.d.ts +42 -0
  50. package/dist/components/Navbar.d.ts +8 -0
  51. package/dist/components/Notification.d.ts +43 -0
  52. package/dist/components/OTPInput.d.ts +32 -0
  53. package/dist/components/PageLayout.d.ts +9 -0
  54. package/dist/components/Pagination.d.ts +18 -0
  55. package/dist/components/Phone.d.ts +8 -0
  56. package/dist/components/Popconfirm.d.ts +17 -0
  57. package/dist/components/Popover.d.ts +15 -0
  58. package/dist/components/Progress.d.ts +5 -0
  59. package/dist/components/QRCode.d.ts +19 -0
  60. package/dist/components/RadialProgress.d.ts +10 -0
  61. package/dist/components/Radio.d.ts +20 -0
  62. package/dist/components/Range.d.ts +16 -0
  63. package/dist/components/Rating.d.ts +22 -0
  64. package/dist/components/Responsive.d.ts +18 -0
  65. package/dist/components/Result.d.ts +12 -0
  66. package/dist/components/Select.d.ts +10 -0
  67. package/dist/components/Skeleton.d.ts +9 -0
  68. package/dist/components/Space.d.ts +10 -0
  69. package/dist/components/Splitter.d.ts +27 -0
  70. package/dist/components/Stack.d.ts +10 -0
  71. package/dist/components/Stat.d.ts +18 -0
  72. package/dist/components/Steps.d.ts +16 -0
  73. package/dist/components/Table.d.ts +51 -0
  74. package/dist/components/Tabs.d.ts +21 -0
  75. package/dist/components/Tag.d.ts +18 -0
  76. package/dist/components/Textarea.d.ts +9 -0
  77. package/dist/components/ThemeController.d.ts +20 -0
  78. package/dist/components/TimePicker.d.ts +12 -0
  79. package/dist/components/Timeline.d.ts +24 -0
  80. package/dist/components/Toggle.d.ts +7 -0
  81. package/dist/components/Tooltip.d.ts +9 -0
  82. package/dist/components/Transfer.d.ts +22 -0
  83. package/dist/components/Tree.d.ts +40 -0
  84. package/dist/components/TreeSelect.d.ts +20 -0
  85. package/dist/components/Typography.d.ts +53 -0
  86. package/dist/components/Upload.d.ts +38 -0
  87. package/dist/components/Window.d.ts +7 -0
  88. package/dist/hooks/useBreakpoint.d.ts +10 -0
  89. package/dist/index.d.ts +172 -0
  90. package/dist/index.js +182 -0
  91. package/dist/index.js.map +1 -0
  92. package/dist/index10.js +33 -0
  93. package/dist/index10.js.map +1 -0
  94. package/dist/index100.js +24 -0
  95. package/dist/index100.js.map +1 -0
  96. package/dist/index101.js +27 -0
  97. package/dist/index101.js.map +1 -0
  98. package/dist/index102.js +23 -0
  99. package/dist/index102.js.map +1 -0
  100. package/dist/index103.js +103 -0
  101. package/dist/index103.js.map +1 -0
  102. package/dist/index104.js +363 -0
  103. package/dist/index104.js.map +1 -0
  104. package/dist/index105.js +28 -0
  105. package/dist/index105.js.map +1 -0
  106. package/dist/index106.js +76 -0
  107. package/dist/index106.js.map +1 -0
  108. package/dist/index107.js +19 -0
  109. package/dist/index107.js.map +1 -0
  110. package/dist/index108.js +69 -0
  111. package/dist/index108.js.map +1 -0
  112. package/dist/index109.js +147 -0
  113. package/dist/index109.js.map +1 -0
  114. package/dist/index11.js +268 -0
  115. package/dist/index11.js.map +1 -0
  116. package/dist/index110.js +5 -0
  117. package/dist/index110.js.map +1 -0
  118. package/dist/index111.js +59 -0
  119. package/dist/index111.js.map +1 -0
  120. package/dist/index112.js +5 -0
  121. package/dist/index112.js.map +1 -0
  122. package/dist/index113.js +5 -0
  123. package/dist/index113.js.map +1 -0
  124. package/dist/index114.js +5 -0
  125. package/dist/index114.js.map +1 -0
  126. package/dist/index115.js +5 -0
  127. package/dist/index115.js.map +1 -0
  128. package/dist/index116.js +5 -0
  129. package/dist/index116.js.map +1 -0
  130. package/dist/index117.js +5 -0
  131. package/dist/index117.js.map +1 -0
  132. package/dist/index118.js +5 -0
  133. package/dist/index118.js.map +1 -0
  134. package/dist/index119.js +5 -0
  135. package/dist/index119.js.map +1 -0
  136. package/dist/index12.js +98 -0
  137. package/dist/index12.js.map +1 -0
  138. package/dist/index120.js +35 -0
  139. package/dist/index120.js.map +1 -0
  140. package/dist/index121.js +5 -0
  141. package/dist/index121.js.map +1 -0
  142. package/dist/index122.js +11 -0
  143. package/dist/index122.js.map +1 -0
  144. package/dist/index123.js +5 -0
  145. package/dist/index123.js.map +1 -0
  146. package/dist/index124.js +5 -0
  147. package/dist/index124.js.map +1 -0
  148. package/dist/index125.js +24 -0
  149. package/dist/index125.js.map +1 -0
  150. package/dist/index126.js +5 -0
  151. package/dist/index126.js.map +1 -0
  152. package/dist/index127.js +27 -0
  153. package/dist/index127.js.map +1 -0
  154. package/dist/index128.js +74 -0
  155. package/dist/index128.js.map +1 -0
  156. package/dist/index129.js +24 -0
  157. package/dist/index129.js.map +1 -0
  158. package/dist/index13.js +161 -0
  159. package/dist/index13.js.map +1 -0
  160. package/dist/index130.js +37 -0
  161. package/dist/index130.js.map +1 -0
  162. package/dist/index131.js +73 -0
  163. package/dist/index131.js.map +1 -0
  164. package/dist/index132.js +5 -0
  165. package/dist/index132.js.map +1 -0
  166. package/dist/index133.js +25 -0
  167. package/dist/index133.js.map +1 -0
  168. package/dist/index134.js +5 -0
  169. package/dist/index134.js.map +1 -0
  170. package/dist/index135.js +5 -0
  171. package/dist/index135.js.map +1 -0
  172. package/dist/index136.js +5 -0
  173. package/dist/index136.js.map +1 -0
  174. package/dist/index137.js +5 -0
  175. package/dist/index137.js.map +1 -0
  176. package/dist/index138.js +7 -0
  177. package/dist/index138.js.map +1 -0
  178. package/dist/index14.js +153 -0
  179. package/dist/index14.js.map +1 -0
  180. package/dist/index15.js +8 -0
  181. package/dist/index15.js.map +1 -0
  182. package/dist/index16.js +74 -0
  183. package/dist/index16.js.map +1 -0
  184. package/dist/index17.js +20 -0
  185. package/dist/index17.js.map +1 -0
  186. package/dist/index18.js +101 -0
  187. package/dist/index18.js.map +1 -0
  188. package/dist/index19.js +117 -0
  189. package/dist/index19.js.map +1 -0
  190. package/dist/index2.js +50 -0
  191. package/dist/index2.js.map +1 -0
  192. package/dist/index20.js +187 -0
  193. package/dist/index20.js.map +1 -0
  194. package/dist/index21.js +113 -0
  195. package/dist/index21.js.map +1 -0
  196. package/dist/index22.js +35 -0
  197. package/dist/index22.js.map +1 -0
  198. package/dist/index23.js +44 -0
  199. package/dist/index23.js.map +1 -0
  200. package/dist/index24.js +15 -0
  201. package/dist/index24.js.map +1 -0
  202. package/dist/index25.js +36 -0
  203. package/dist/index25.js.map +1 -0
  204. package/dist/index26.js +66 -0
  205. package/dist/index26.js.map +1 -0
  206. package/dist/index27.js +83 -0
  207. package/dist/index27.js.map +1 -0
  208. package/dist/index28.js +21 -0
  209. package/dist/index28.js.map +1 -0
  210. package/dist/index29.js +164 -0
  211. package/dist/index29.js.map +1 -0
  212. package/dist/index3.js +31 -0
  213. package/dist/index3.js.map +1 -0
  214. package/dist/index30.js +1085 -0
  215. package/dist/index30.js.map +1 -0
  216. package/dist/index31.js +21 -0
  217. package/dist/index31.js.map +1 -0
  218. package/dist/index32.js +125 -0
  219. package/dist/index32.js.map +1 -0
  220. package/dist/index33.js +43 -0
  221. package/dist/index33.js.map +1 -0
  222. package/dist/index34.js +194 -0
  223. package/dist/index34.js.map +1 -0
  224. package/dist/index35.js +100 -0
  225. package/dist/index35.js.map +1 -0
  226. package/dist/index36.js +165 -0
  227. package/dist/index36.js.map +1 -0
  228. package/dist/index37.js +149 -0
  229. package/dist/index37.js.map +1 -0
  230. package/dist/index38.js +18 -0
  231. package/dist/index38.js.map +1 -0
  232. package/dist/index39.js +24 -0
  233. package/dist/index39.js.map +1 -0
  234. package/dist/index4.js +104 -0
  235. package/dist/index4.js.map +1 -0
  236. package/dist/index40.js +122 -0
  237. package/dist/index40.js.map +1 -0
  238. package/dist/index41.js +16 -0
  239. package/dist/index41.js.map +1 -0
  240. package/dist/index42.js +38 -0
  241. package/dist/index42.js.map +1 -0
  242. package/dist/index43.js +119 -0
  243. package/dist/index43.js.map +1 -0
  244. package/dist/index44.js +179 -0
  245. package/dist/index44.js.map +1 -0
  246. package/dist/index45.js +150 -0
  247. package/dist/index45.js.map +1 -0
  248. package/dist/index46.js +15 -0
  249. package/dist/index46.js.map +1 -0
  250. package/dist/index47.js +25 -0
  251. package/dist/index47.js.map +1 -0
  252. package/dist/index48.js +17 -0
  253. package/dist/index48.js.map +1 -0
  254. package/dist/index49.js +10 -0
  255. package/dist/index49.js.map +1 -0
  256. package/dist/index5.js +64 -0
  257. package/dist/index5.js.map +1 -0
  258. package/dist/index50.js +269 -0
  259. package/dist/index50.js.map +1 -0
  260. package/dist/index51.js +20 -0
  261. package/dist/index51.js.map +1 -0
  262. package/dist/index52.js +125 -0
  263. package/dist/index52.js.map +1 -0
  264. package/dist/index53.js +113 -0
  265. package/dist/index53.js.map +1 -0
  266. package/dist/index54.js +173 -0
  267. package/dist/index54.js.map +1 -0
  268. package/dist/index55.js +35 -0
  269. package/dist/index55.js.map +1 -0
  270. package/dist/index56.js +125 -0
  271. package/dist/index56.js.map +1 -0
  272. package/dist/index57.js +89 -0
  273. package/dist/index57.js.map +1 -0
  274. package/dist/index58.js +23 -0
  275. package/dist/index58.js.map +1 -0
  276. package/dist/index59.js +77 -0
  277. package/dist/index59.js.map +1 -0
  278. package/dist/index6.js +133 -0
  279. package/dist/index6.js.map +1 -0
  280. package/dist/index60.js +60 -0
  281. package/dist/index60.js.map +1 -0
  282. package/dist/index61.js +48 -0
  283. package/dist/index61.js.map +1 -0
  284. package/dist/index62.js +55 -0
  285. package/dist/index62.js.map +1 -0
  286. package/dist/index63.js +65 -0
  287. package/dist/index63.js.map +1 -0
  288. package/dist/index64.js +110 -0
  289. package/dist/index64.js.map +1 -0
  290. package/dist/index65.js +44 -0
  291. package/dist/index65.js.map +1 -0
  292. package/dist/index66.js +24 -0
  293. package/dist/index66.js.map +1 -0
  294. package/dist/index67.js +49 -0
  295. package/dist/index67.js.map +1 -0
  296. package/dist/index68.js +137 -0
  297. package/dist/index68.js.map +1 -0
  298. package/dist/index69.js +55 -0
  299. package/dist/index69.js.map +1 -0
  300. package/dist/index7.js +14 -0
  301. package/dist/index7.js.map +1 -0
  302. package/dist/index70.js +25 -0
  303. package/dist/index70.js.map +1 -0
  304. package/dist/index71.js +25 -0
  305. package/dist/index71.js.map +1 -0
  306. package/dist/index72.js +332 -0
  307. package/dist/index72.js.map +1 -0
  308. package/dist/index73.js +59 -0
  309. package/dist/index73.js.map +1 -0
  310. package/dist/index74.js +43 -0
  311. package/dist/index74.js.map +1 -0
  312. package/dist/index75.js +98 -0
  313. package/dist/index75.js.map +1 -0
  314. package/dist/index76.js +133 -0
  315. package/dist/index76.js.map +1 -0
  316. package/dist/index77.js +164 -0
  317. package/dist/index77.js.map +1 -0
  318. package/dist/index78.js +68 -0
  319. package/dist/index78.js.map +1 -0
  320. package/dist/index79.js +38 -0
  321. package/dist/index79.js.map +1 -0
  322. package/dist/index8.js +73 -0
  323. package/dist/index8.js.map +1 -0
  324. package/dist/index80.js +37 -0
  325. package/dist/index80.js.map +1 -0
  326. package/dist/index81.js +213 -0
  327. package/dist/index81.js.map +1 -0
  328. package/dist/index82.js +216 -0
  329. package/dist/index82.js.map +1 -0
  330. package/dist/index83.js +298 -0
  331. package/dist/index83.js.map +1 -0
  332. package/dist/index84.js +181 -0
  333. package/dist/index84.js.map +1 -0
  334. package/dist/index85.js +261 -0
  335. package/dist/index85.js.map +1 -0
  336. package/dist/index86.js +17 -0
  337. package/dist/index86.js.map +1 -0
  338. package/dist/index87.js +36 -0
  339. package/dist/index87.js.map +1 -0
  340. package/dist/index88.js +10796 -0
  341. package/dist/index88.js.map +1 -0
  342. package/dist/index89.js +8 -0
  343. package/dist/index89.js.map +1 -0
  344. package/dist/index9.js +95 -0
  345. package/dist/index9.js.map +1 -0
  346. package/dist/index90.js +45 -0
  347. package/dist/index90.js.map +1 -0
  348. package/dist/index91.js +5 -0
  349. package/dist/index91.js.map +1 -0
  350. package/dist/index92.js +10 -0
  351. package/dist/index92.js.map +1 -0
  352. package/dist/index93.js +155 -0
  353. package/dist/index93.js.map +1 -0
  354. package/dist/index94.js +33 -0
  355. package/dist/index94.js.map +1 -0
  356. package/dist/index95.js +33 -0
  357. package/dist/index95.js.map +1 -0
  358. package/dist/index96.js +5 -0
  359. package/dist/index96.js.map +1 -0
  360. package/dist/index97.js +75 -0
  361. package/dist/index97.js.map +1 -0
  362. package/dist/index98.js +42 -0
  363. package/dist/index98.js.map +1 -0
  364. package/dist/index99.js +29 -0
  365. package/dist/index99.js.map +1 -0
  366. package/package.json +71 -0
package/LICENSE ADDED
@@ -0,0 +1,15 @@
1
+ ISC License
2
+
3
+ Copyright (c) 2025
4
+
5
+ Permission to use, copy, modify, and/or distribute this software for any
6
+ purpose with or without fee is hereby granted, provided that the above
7
+ copyright notice and this permission notice appear in all copies.
8
+
9
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10
+ WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11
+ MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12
+ ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13
+ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14
+ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15
+ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,214 @@
1
+ # BloomUI
2
+
3
+ A comprehensive React component library built with [DaisyUI](https://daisyui.com) and [Tailwind CSS](https://tailwindcss.com).
4
+
5
+ ## Prerequisites
6
+
7
+ BloomUI requires Tailwind CSS v4 and DaisyUI v5 to be configured in your project.
8
+
9
+ Install Tailwind and DaisyUI:
10
+
11
+ ```bash
12
+ npm install -D tailwindcss @tailwindcss/vite daisyui
13
+ ```
14
+
15
+ Add the Tailwind plugin to your `vite.config.ts`:
16
+
17
+ ```ts
18
+ import { defineConfig } from 'vite'
19
+ import react from '@vitejs/plugin-react'
20
+ import tailwindcss from '@tailwindcss/vite'
21
+
22
+ export default defineConfig({
23
+ plugins: [react(), tailwindcss()],
24
+ })
25
+ ```
26
+
27
+ Configure your CSS file (e.g., `src/index.css`):
28
+
29
+ ```css
30
+ @import "tailwindcss";
31
+ @plugin "daisyui";
32
+ @source "../node_modules/@edadma/bloomui";
33
+ ```
34
+
35
+ The `@source` directive tells Tailwind to scan the BloomUI package for classes to include in your build.
36
+
37
+ ## Installation
38
+
39
+ ```bash
40
+ npm install bloomui
41
+ # or
42
+ pnpm add bloomui
43
+ # or
44
+ yarn add bloomui
45
+ ```
46
+
47
+ ## Usage
48
+
49
+ ```tsx
50
+ import { Form, Input, Checkbox, Button, Modal, Card, Space, Flex, Typography } from '@edadma/bloomui'
51
+
52
+ const { Link, Paragraph } = Typography
53
+
54
+ export default function App() {
55
+ const handleSubmit = (values: { email: string; password: string; remember: boolean }) => {
56
+ Modal.success({
57
+ title: 'Login Successful',
58
+ content: <pre className="text-left">{JSON.stringify(values, null, 2)}</pre>,
59
+ })
60
+ }
61
+
62
+ return (
63
+ <Flex justify="center" align="center" minHeight="screen" className="bg-base-200 p-4">
64
+ <Card title="Sign In" className="w-full max-w-md">
65
+ <Form onFinish={handleSubmit} initialValues={{ remember: false }}>
66
+ <Form.Item name="email" label="Email" rules={[{ required: true }, { type: 'email' }]}>
67
+ <Input placeholder="you@example.com" />
68
+ </Form.Item>
69
+ <Form.Item
70
+ name="password"
71
+ label="Password"
72
+ rules={[
73
+ { required: true },
74
+ { min: 8, message: 'Password must be at least 8 characters' },
75
+ { pattern: /[A-Z]/, message: 'Must contain an uppercase letter' },
76
+ { pattern: /[a-z]/, message: 'Must contain a lowercase letter' },
77
+ { pattern: /[0-9]/, message: 'Must contain a number' },
78
+ { pattern: /[!@#$%^&*.?]/, message: 'Must contain a special character' },
79
+ ]}
80
+ >
81
+ <Input type="password" placeholder="Enter your password" />
82
+ </Form.Item>
83
+ <Space justify="between" align="center" className="mb-4">
84
+ <Form.Item name="remember" valuePropName="checked" inline>
85
+ <Checkbox>Remember me</Checkbox>
86
+ </Form.Item>
87
+ <Link size="sm">Forgot password?</Link>
88
+ </Space>
89
+ <Button type="primary" htmlType="submit" shape="block">
90
+ Sign In
91
+ </Button>
92
+ <Divider>or</Divider>
93
+ <Paragraph align="center" size="sm">
94
+ Don't have an account? <Link>Sign up</Link>
95
+ </Paragraph>
96
+ </Form>
97
+ </Card>
98
+ </Flex>
99
+ )
100
+ }
101
+ ```
102
+
103
+ ## Components
104
+
105
+ ### General
106
+ - **Typography** - Text, Title, Paragraph, and Link components with consistent styling
107
+
108
+ ### Actions
109
+ - **Button** - Buttons with multiple types, sizes, and variants
110
+ - **Dropdown** - Composable dropdown menu with trigger, items, and dividers
111
+ - **FloatButton** - Floating action button with BackTop variant
112
+ - **ThemeController** - Theme switcher with swap and dropdown modes
113
+
114
+ ### Data Entry
115
+ - **Autocomplete** - Search and select with keyboard navigation and filtering
116
+ - **Cascader** - Cascade selection for hierarchical data
117
+ - **Checkbox** - Checkboxes with sizes, colors, and indeterminate state
118
+ - **ColorPicker** - Color selection with presets and custom colors
119
+ - **DatePicker** - Interactive calendar date picker with custom formatting
120
+ - **Fieldset** - Fieldset container with legend
121
+ - **FileInput** - File input with sizes and colors
122
+ - **Form** - Form component with React Hook Form integration and validation
123
+ - **Input** - Text inputs with types, sizes, colors, and input masking
124
+ - **InputNumber** - Numeric input with increment/decrement controls
125
+ - **Label** - Form labels with required indicator and floating labels
126
+ - **Mention** - Input with @mention support for tagging users
127
+ - **Radio** - Radio buttons with group support
128
+ - **Range** - Range slider with min, max, and step support
129
+ - **Rating** - Star rating component
130
+ - **Select** - Select dropdown with sizes and colors
131
+ - **Textarea** - Multiline text input
132
+ - **TimePicker** - Time input with hour and minute selection
133
+ - **Toggle** - Toggle switches with sizes and colors
134
+ - **Transfer** - Double-column transfer for moving items between lists
135
+ - **TreeSelect** - Tree selection dropdown for hierarchical data
136
+ - **Upload** - File upload with drag and drop support
137
+
138
+ ### Data Display
139
+ - **Avatar** - User avatars with sizes, shapes, and group support
140
+ - **Badge** - Notification badges, status indicators, and ribbons
141
+ - **Card** - Composable card component with body, title, actions, and figure
142
+ - **Carousel** - Image carousel with navigation and indicators
143
+ - **Chart** - Data visualization with ApexCharts and theme integration
144
+ - **Chat** - Chat message bubbles with avatars and timestamps
145
+ - **Collapse** - Collapsible content panels
146
+ - **Descriptions** - Display multiple read-only fields in groups
147
+ - **Empty** - Empty state placeholder with custom images and actions
148
+ - **Image** - Image component with fallback and preview support
149
+ - **List** - Vertical list layout with customizable rows
150
+ - **Pagination** - Page navigation with multiple sizes
151
+ - **QRCode** - QR code generator
152
+ - **Stats** - Statistics display with figures and actions
153
+ - **Steps** - Step progress indicator
154
+ - **Table** - Feature-rich data table with sorting and pagination
155
+ - **Tag** - Categorization labels with colors and close button
156
+ - **Timeline** - Timeline component for displaying chronological events
157
+ - **Tree** - Hierarchical tree view with expand/collapse and selection
158
+
159
+ ### Layout
160
+ - **Affix** - Make elements stick to viewport when scrolling
161
+ - **Divider** - Horizontal and vertical dividers with optional text
162
+ - **Drawer** - Sidebar drawer with multiple placements
163
+ - **Footer** - Footer component with title sections
164
+ - **Grid** - Flexible grid system with Row and Col components
165
+ - **Hero** - Hero section with overlay and content wrapping
166
+ - **Indicator** - Position indicators on elements
167
+ - **Join** - Join multiple elements together seamlessly
168
+ - **Layout** - Page layout with Header, Sider, Content, and Footer
169
+ - **Masonry** - Responsive masonry grid layout
170
+ - **Space** - Layout component for consistent spacing between elements
171
+ - **Splitter** - Resizable split panes for adjustable layouts
172
+
173
+ ### Responsive
174
+ - **Show/Hide** - Conditionally render content based on breakpoint
175
+ - **useBreakpoint** - Hook for detecting current breakpoint and screen width
176
+
177
+ ### Navigation
178
+ - **Breadcrumb** - Breadcrumb navigation trail
179
+ - **Menu** - Menu with vertical, horizontal, and inline modes
180
+ - **Navbar** - Navigation bar with start, center, and end sections
181
+ - **Tabs** - Tab navigation with multiple variants
182
+
183
+ ### Feedback
184
+ - **Alert** - Alert messages with multiple types and dismissible option
185
+ - **Loading** - Loading spinners with sizes and overlay support
186
+ - **Modal** - Modal dialogs with imperative API
187
+ - **Notification** - Toast notifications with auto-dismiss and stacking
188
+ - **Popconfirm** - Confirmation popover for actions
189
+ - **Popover** - Floating content triggered by hover or click
190
+ - **Progress** - Progress bars with colors and indeterminate state
191
+ - **RadialProgress** - Circular progress indicator
192
+ - **Result** - Result pages for operation outcomes
193
+ - **Skeleton** - Loading placeholder with animated shimmer effect
194
+ - **Tooltip** - Tooltips with multiple placements
195
+
196
+ ### Mockup
197
+ - **Browser** - Browser window mockup with URL bar
198
+ - **Code** - Terminal-style code display with line highlighting
199
+ - **Phone** - iPhone-style phone frame mockup
200
+ - **Window** - OS-style window frame mockup
201
+
202
+ ## Demo
203
+
204
+ View live examples and documentation at [https://bloomui.io](https://bloomui.io)
205
+
206
+ ## Requirements
207
+
208
+ - React 18 or 19
209
+ - Tailwind CSS 4+
210
+ - DaisyUI 5+
211
+
212
+ ## License
213
+
214
+ ISC
@@ -0,0 +1,14 @@
1
+ import { default as React } from 'react';
2
+ export interface AffixProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {
3
+ /** Content to make sticky */
4
+ children: React.ReactNode;
5
+ /** Offset from top when fixed (pixels) */
6
+ offsetTop?: number;
7
+ /** Offset from bottom when fixed (pixels) */
8
+ offsetBottom?: number;
9
+ /** Scroll target (default: window) */
10
+ target?: () => HTMLElement | Window;
11
+ /** Callback when affix state changes */
12
+ onChange?: (affixed: boolean) => void;
13
+ }
14
+ export declare const Affix: React.FC<AffixProps>;
@@ -0,0 +1,10 @@
1
+ import { default as React } from 'react';
2
+ export interface AlertProps extends React.HTMLAttributes<HTMLDivElement> {
3
+ children: React.ReactNode;
4
+ type?: 'info' | 'success' | 'warning' | 'error';
5
+ outline?: boolean;
6
+ dash?: boolean;
7
+ soft?: boolean;
8
+ vertical?: boolean;
9
+ }
10
+ export declare const Alert: React.FC<AlertProps>;
@@ -0,0 +1,18 @@
1
+ import { default as React } from 'react';
2
+ export interface AutocompleteOption {
3
+ value: string;
4
+ label: string;
5
+ }
6
+ export interface AutocompleteProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {
7
+ value?: string;
8
+ defaultValue?: string;
9
+ onChange?: (value: string) => void;
10
+ options: AutocompleteOption[] | string[];
11
+ placeholder?: string;
12
+ disabled?: boolean;
13
+ size?: 'xs' | 'sm' | 'md' | 'lg';
14
+ allowCustomValue?: boolean;
15
+ filterOption?: (option: AutocompleteOption, inputValue: string) => boolean;
16
+ notFoundContent?: React.ReactNode;
17
+ }
18
+ export declare const Autocomplete: React.FC<AutocompleteProps>;
@@ -0,0 +1,28 @@
1
+ import { default as React } from 'react';
2
+ export type AvatarSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
3
+ export type AvatarShape = 'circle' | 'square';
4
+ export type AvatarStatus = 'online' | 'offline';
5
+ export interface AvatarProps extends React.HTMLAttributes<HTMLDivElement> {
6
+ src?: string;
7
+ alt?: string;
8
+ icon?: React.ReactNode;
9
+ children?: React.ReactNode;
10
+ size?: AvatarSize;
11
+ shape?: AvatarShape;
12
+ status?: AvatarStatus;
13
+ online?: boolean;
14
+ offline?: boolean;
15
+ placeholder?: boolean;
16
+ }
17
+ export interface AvatarGroupProps extends React.HTMLAttributes<HTMLDivElement> {
18
+ children: React.ReactNode;
19
+ max?: number;
20
+ size?: AvatarSize;
21
+ }
22
+ declare function AvatarRoot({ src, alt, icon, children, size, shape, status, className, style, online, offline, placeholder, ...rest }: AvatarProps): import("react/jsx-runtime").JSX.Element;
23
+ declare function AvatarGroup({ children, max, size, className, style, ...rest }: AvatarGroupProps): import("react/jsx-runtime").JSX.Element;
24
+ export declare const Avatar: typeof AvatarRoot & {
25
+ Group: typeof AvatarGroup;
26
+ };
27
+ export { AvatarGroup };
28
+ export default Avatar;
@@ -0,0 +1,20 @@
1
+ import { default as React } from 'react';
2
+ export type BadgePosition = 'top-start' | 'top-center' | 'top-end' | 'middle-start' | 'middle-center' | 'middle-end' | 'bottom-start' | 'bottom-center' | 'bottom-end';
3
+ export type BadgeStatus = 'success' | 'processing' | 'error' | 'default' | 'warning';
4
+ export interface BadgeProps extends React.HTMLAttributes<HTMLSpanElement> {
5
+ count?: number;
6
+ showZero?: boolean;
7
+ overflowCount?: number;
8
+ position?: BadgePosition;
9
+ offset?: [number, number];
10
+ status?: BadgeStatus;
11
+ text?: string;
12
+ ribbon?: string;
13
+ ribbonPlacement?: 'start' | 'end';
14
+ type?: 'default' | 'primary' | 'secondary' | 'accent' | 'neutral' | 'info' | 'success' | 'warning' | 'error' | 'ghost';
15
+ size?: 'xs' | 'sm' | 'md' | 'lg';
16
+ dot?: boolean;
17
+ outline?: boolean;
18
+ children?: React.ReactNode;
19
+ }
20
+ export declare const Badge: React.FC<BadgeProps>;
@@ -0,0 +1,15 @@
1
+ import { default as React } from 'react';
2
+ export interface BreadcrumbProps extends React.HTMLAttributes<HTMLDivElement> {
3
+ children: React.ReactNode;
4
+ }
5
+ export interface BreadcrumbItemProps extends Omit<React.LiHTMLAttributes<HTMLLIElement>, 'onClick'> {
6
+ children: React.ReactNode;
7
+ href?: string;
8
+ onClick?: () => void;
9
+ }
10
+ declare function BreadcrumbRoot({ children, className, ...rest }: BreadcrumbProps): import("react/jsx-runtime").JSX.Element;
11
+ declare function BreadcrumbItem({ children, href, onClick, className, ...rest }: BreadcrumbItemProps): import("react/jsx-runtime").JSX.Element;
12
+ export declare const Breadcrumb: typeof BreadcrumbRoot & {
13
+ Item: typeof BreadcrumbItem;
14
+ };
15
+ export {};
@@ -0,0 +1,7 @@
1
+ import { default as React } from 'react';
2
+ export interface BrowserProps extends React.HTMLAttributes<HTMLDivElement> {
3
+ children: React.ReactNode;
4
+ url?: string;
5
+ contentClassName?: string;
6
+ }
7
+ export declare const Browser: React.FC<BrowserProps>;
@@ -0,0 +1,23 @@
1
+ import { default as React } from 'react';
2
+ type BaseButtonProps = {
3
+ type?: 'primary' | 'secondary' | 'accent' | 'info' | 'success' | 'warning' | 'error' | 'neutral' | 'ghost' | 'link';
4
+ size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';
5
+ outline?: boolean;
6
+ dash?: boolean;
7
+ soft?: boolean;
8
+ active?: boolean;
9
+ loading?: boolean;
10
+ shape?: 'square' | 'circle' | 'wide' | 'block';
11
+ noAnimation?: boolean;
12
+ };
13
+ type ButtonAsButton = BaseButtonProps & Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'type'> & {
14
+ href?: undefined;
15
+ htmlType?: 'button' | 'submit' | 'reset';
16
+ };
17
+ type ButtonAsAnchor = BaseButtonProps & Omit<React.AnchorHTMLAttributes<HTMLAnchorElement>, 'type'> & {
18
+ href: string;
19
+ htmlType?: undefined;
20
+ };
21
+ export type ButtonProps = ButtonAsButton | ButtonAsAnchor;
22
+ export declare const Button: React.FC<ButtonProps>;
23
+ export {};
@@ -0,0 +1,26 @@
1
+ import { default as React } from 'react';
2
+ export interface CardProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {
3
+ children: React.ReactNode;
4
+ title?: React.ReactNode;
5
+ cover?: React.ReactNode;
6
+ actions?: React.ReactNode;
7
+ size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';
8
+ bordered?: boolean;
9
+ side?: boolean;
10
+ imageFull?: boolean;
11
+ actionsJustify?: 'start' | 'center' | 'end';
12
+ loading?: boolean;
13
+ hoverable?: boolean;
14
+ avatar?: React.ReactNode;
15
+ description?: React.ReactNode;
16
+ }
17
+ export interface CardGridProps extends React.HTMLAttributes<HTMLDivElement> {
18
+ children: React.ReactNode;
19
+ hoverable?: boolean;
20
+ }
21
+ declare function CardGrid({ children, hoverable, className, style, ...rest }: CardGridProps): import("react/jsx-runtime").JSX.Element;
22
+ declare function CardRoot({ children, title, cover, actions, className, style, size, bordered, side, imageFull, actionsJustify, loading, hoverable, avatar, description, ...rest }: CardProps): import("react/jsx-runtime").JSX.Element;
23
+ export declare const Card: typeof CardRoot & {
24
+ Grid: typeof CardGrid;
25
+ };
26
+ export default Card;
@@ -0,0 +1,14 @@
1
+ import { default as React } from 'react';
2
+ export interface CarouselItemProps extends React.HTMLAttributes<HTMLDivElement> {
3
+ id?: string;
4
+ children: React.ReactNode;
5
+ }
6
+ export declare const CarouselItem: React.FC<CarouselItemProps>;
7
+ export interface CarouselProps extends React.HTMLAttributes<HTMLDivElement> {
8
+ children: React.ReactNode;
9
+ snap?: 'start' | 'center' | 'end';
10
+ vertical?: boolean;
11
+ }
12
+ export declare const Carousel: React.FC<CarouselProps> & {
13
+ Item: typeof CarouselItem;
14
+ };
@@ -0,0 +1,19 @@
1
+ import { default as React } from 'react';
2
+ export interface CascaderOption {
3
+ value: string | number;
4
+ label: React.ReactNode;
5
+ disabled?: boolean;
6
+ children?: CascaderOption[];
7
+ }
8
+ export interface CascaderProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {
9
+ options: CascaderOption[];
10
+ value?: (string | number)[];
11
+ onChange?: (value: (string | number)[], selectedOptions: CascaderOption[]) => void;
12
+ placeholder?: string;
13
+ disabled?: boolean;
14
+ allowClear?: boolean;
15
+ expandTrigger?: 'click' | 'hover';
16
+ displayRender?: (labels: React.ReactNode[], selectedOptions: CascaderOption[]) => React.ReactNode;
17
+ size?: 'xs' | 'sm' | 'md' | 'lg';
18
+ }
19
+ export declare function Cascader({ options, value, onChange, placeholder, disabled, allowClear, expandTrigger, displayRender, size, className, ...rest }: CascaderProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,19 @@
1
+ import { default as React } from 'react';
2
+ import { ApexOptions } from 'apexcharts';
3
+ export interface ChartProps {
4
+ /** Chart type */
5
+ type: 'line' | 'area' | 'bar' | 'pie' | 'donut' | 'radialBar' | 'scatter' | 'bubble' | 'heatmap' | 'candlestick' | 'boxPlot' | 'radar' | 'polarArea' | 'rangeBar' | 'rangeArea' | 'treemap';
6
+ /** Chart series data */
7
+ series: ApexAxisChartSeries | ApexNonAxisChartSeries;
8
+ /** Chart width */
9
+ width?: string | number;
10
+ /** Chart height */
11
+ height?: string | number;
12
+ /** ApexCharts options (merged with theme defaults) */
13
+ options?: ApexOptions;
14
+ /** Use daisyUI theme colors */
15
+ themed?: boolean;
16
+ /** Additional CSS classes */
17
+ className?: string;
18
+ }
19
+ export declare const Chart: React.FC<ChartProps>;
@@ -0,0 +1,11 @@
1
+ import { default as React } from 'react';
2
+ export interface ChatProps extends React.HTMLAttributes<HTMLDivElement> {
3
+ message: React.ReactNode;
4
+ position?: 'start' | 'end';
5
+ avatar?: string;
6
+ avatarAlt?: string;
7
+ header?: React.ReactNode;
8
+ footer?: React.ReactNode;
9
+ color?: 'primary' | 'secondary' | 'accent' | 'neutral' | 'info' | 'success' | 'warning' | 'error';
10
+ }
11
+ export declare const Chat: React.FC<ChatProps>;
@@ -0,0 +1,27 @@
1
+ import { default as React } from 'react';
2
+ export interface CheckboxProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size' | 'type'> {
3
+ children?: React.ReactNode;
4
+ size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';
5
+ color?: 'primary' | 'secondary' | 'accent' | 'neutral' | 'success' | 'warning' | 'info' | 'error';
6
+ indeterminate?: boolean;
7
+ className?: string;
8
+ }
9
+ export interface CheckboxOptionType {
10
+ label: React.ReactNode;
11
+ value: string | number;
12
+ disabled?: boolean;
13
+ }
14
+ export interface CheckboxGroupProps {
15
+ children?: React.ReactNode;
16
+ value?: (string | number)[];
17
+ defaultValue?: (string | number)[];
18
+ onChange?: (values: (string | number)[]) => void;
19
+ disabled?: boolean;
20
+ options?: (string | number | CheckboxOptionType)[];
21
+ className?: string;
22
+ }
23
+ declare function CheckboxGroup({ children, value, defaultValue, onChange, disabled, options, className }: CheckboxGroupProps): import("react/jsx-runtime").JSX.Element;
24
+ export declare const Checkbox: React.ForwardRefExoticComponent<CheckboxProps & React.RefAttributes<HTMLInputElement>> & {
25
+ Group: typeof CheckboxGroup;
26
+ };
27
+ export {};
@@ -0,0 +1,14 @@
1
+ import { default as React } from 'react';
2
+ export interface CodeLineProps extends React.HTMLAttributes<HTMLPreElement> {
3
+ children: React.ReactNode;
4
+ prefix?: string;
5
+ highlight?: boolean;
6
+ }
7
+ declare const Line: React.FC<CodeLineProps>;
8
+ export interface CodeProps extends React.HTMLAttributes<HTMLDivElement> {
9
+ children: React.ReactNode;
10
+ }
11
+ export declare const Code: React.FC<CodeProps> & {
12
+ Line: typeof Line;
13
+ };
14
+ export {};
@@ -0,0 +1,25 @@
1
+ import { default as React } from 'react';
2
+ export interface CollapseProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title' | 'onChange'> {
3
+ children: React.ReactNode;
4
+ title?: React.ReactNode;
5
+ open?: boolean;
6
+ defaultOpen?: boolean;
7
+ onChange?: (open: boolean) => void;
8
+ icon?: 'arrow' | 'plus' | 'none';
9
+ }
10
+ export interface CollapseTitleProps {
11
+ children: React.ReactNode;
12
+ className?: string;
13
+ }
14
+ export interface CollapseContentProps {
15
+ children: React.ReactNode;
16
+ className?: string;
17
+ }
18
+ declare function CollapseRoot({ children, title, open, defaultOpen, onChange, icon, className, ...rest }: CollapseProps): import("react/jsx-runtime").JSX.Element;
19
+ declare function CollapseTitle({ children, className }: CollapseTitleProps): import("react/jsx-runtime").JSX.Element;
20
+ declare function CollapseContent({ children, className }: CollapseContentProps): import("react/jsx-runtime").JSX.Element;
21
+ export declare const Collapse: typeof CollapseRoot & {
22
+ Title: typeof CollapseTitle;
23
+ Content: typeof CollapseContent;
24
+ };
25
+ export {};
@@ -0,0 +1,10 @@
1
+ import { default as React } from 'react';
2
+ export interface ColorPickerProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {
3
+ value?: string;
4
+ onChange?: (color: string) => void;
5
+ mode?: 'swatches' | 'picker' | 'both';
6
+ presets?: string[];
7
+ size?: 'xs' | 'sm' | 'md' | 'lg';
8
+ disabled?: boolean;
9
+ }
10
+ export declare function ColorPicker({ value, onChange, mode, presets, size, disabled, className, ...rest }: ColorPickerProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,6 @@
1
+ import { default as React } from 'react';
2
+ export interface ContainerProps extends React.HTMLAttributes<HTMLDivElement> {
3
+ children: React.ReactNode;
4
+ size?: 'sm' | 'md' | 'lg' | 'xl' | 'full';
5
+ }
6
+ export declare const Container: React.FC<ContainerProps>;
@@ -0,0 +1,23 @@
1
+ import { default as React } from 'react';
2
+ export interface ContextMenuItem {
3
+ key: string;
4
+ label: React.ReactNode;
5
+ icon?: React.ReactNode;
6
+ disabled?: boolean;
7
+ danger?: boolean;
8
+ divider?: boolean;
9
+ children?: ContextMenuItem[];
10
+ }
11
+ export interface ContextMenuProps {
12
+ /** Element that triggers the context menu on right-click */
13
+ children: React.ReactNode;
14
+ /** Menu items */
15
+ items: ContextMenuItem[];
16
+ /** Callback when an item is selected */
17
+ onSelect?: (key: string) => void;
18
+ /** Whether the context menu is disabled */
19
+ disabled?: boolean;
20
+ /** Additional CSS classes for the menu */
21
+ className?: string;
22
+ }
23
+ export declare const ContextMenu: React.FC<ContextMenuProps>;
@@ -0,0 +1,27 @@
1
+ import { default as React } from 'react';
2
+ export interface CountdownProps {
3
+ /** Target timestamp in milliseconds or Date object */
4
+ value: number | Date;
5
+ /** Format string: 'D' days, 'H' hours, 'M' minutes, 'S' seconds */
6
+ format?: string;
7
+ /** Callback when countdown reaches zero */
8
+ onFinish?: () => void;
9
+ /** Callback on each tick with remaining time */
10
+ onChange?: (value: number) => void;
11
+ /** Additional CSS classes */
12
+ className?: string;
13
+ /** Size variant */
14
+ size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';
15
+ /** Show labels under each unit */
16
+ showLabels?: boolean;
17
+ /** Custom labels */
18
+ labels?: {
19
+ days?: string;
20
+ hours?: string;
21
+ minutes?: string;
22
+ seconds?: string;
23
+ };
24
+ /** Show box style around each unit */
25
+ boxed?: boolean;
26
+ }
27
+ export declare const Countdown: React.FC<CountdownProps>;
@@ -0,0 +1,11 @@
1
+ import { default as React } from 'react';
2
+ export interface DatePickerProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange' | 'defaultValue'> {
3
+ value?: Date | null;
4
+ defaultValue?: Date | null;
5
+ onChange?: (date: Date | null) => void;
6
+ format?: string;
7
+ placeholder?: string;
8
+ disabled?: boolean;
9
+ size?: 'xs' | 'sm' | 'md' | 'lg';
10
+ }
11
+ export declare const DatePicker: React.FC<DatePickerProps>;
@@ -0,0 +1,34 @@
1
+ import { default as React } from 'react';
2
+ export type DescriptionsSize = 'small' | 'default' | 'large';
3
+ export type DescriptionsLayout = 'horizontal' | 'vertical';
4
+ export interface DescriptionsItemProps {
5
+ label?: React.ReactNode;
6
+ span?: number;
7
+ children?: React.ReactNode;
8
+ labelStyle?: React.CSSProperties;
9
+ contentStyle?: React.CSSProperties;
10
+ }
11
+ export interface DescriptionsProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {
12
+ title?: React.ReactNode;
13
+ bordered?: boolean;
14
+ column?: number | {
15
+ xs?: number;
16
+ sm?: number;
17
+ md?: number;
18
+ lg?: number;
19
+ xl?: number;
20
+ '2xl'?: number;
21
+ };
22
+ size?: DescriptionsSize;
23
+ layout?: DescriptionsLayout;
24
+ colon?: boolean;
25
+ labelStyle?: React.CSSProperties;
26
+ contentStyle?: React.CSSProperties;
27
+ children?: React.ReactNode;
28
+ }
29
+ declare function DescriptionsItem(_props: DescriptionsItemProps): null;
30
+ declare function DescriptionsRoot({ title, bordered, column, size, layout, colon, labelStyle, contentStyle, className, style, children, ...rest }: DescriptionsProps): import("react/jsx-runtime").JSX.Element;
31
+ export declare const Descriptions: typeof DescriptionsRoot & {
32
+ Item: typeof DescriptionsItem;
33
+ };
34
+ export default Descriptions;