luna-plus 0.0.5

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 (459) hide show
  1. package/README.md +242 -0
  2. package/dist/Affix/Affix.svelte +97 -0
  3. package/dist/Affix/Affix.svelte.d.ts +14 -0
  4. package/dist/Affix/index.d.ts +4 -0
  5. package/dist/Affix/index.js +3 -0
  6. package/dist/Affix/types.d.ts +11 -0
  7. package/dist/Affix/types.js +1 -0
  8. package/dist/Alert/Alert.svelte +97 -0
  9. package/dist/Alert/Alert.svelte.d.ts +16 -0
  10. package/dist/Alert/index.d.ts +4 -0
  11. package/dist/Alert/index.js +3 -0
  12. package/dist/Alert/types.d.ts +23 -0
  13. package/dist/Alert/types.js +1 -0
  14. package/dist/Autocomplete/Autocomplete.svelte +163 -0
  15. package/dist/Autocomplete/Autocomplete.svelte.d.ts +20 -0
  16. package/dist/Autocomplete/index.d.ts +3 -0
  17. package/dist/Autocomplete/index.js +3 -0
  18. package/dist/Avatar/Avatar.svelte +97 -0
  19. package/dist/Avatar/Avatar.svelte.d.ts +14 -0
  20. package/dist/Avatar/index.d.ts +4 -0
  21. package/dist/Avatar/index.js +3 -0
  22. package/dist/Avatar/types.d.ts +26 -0
  23. package/dist/Avatar/types.js +1 -0
  24. package/dist/Backtop/Backtop.svelte +60 -0
  25. package/dist/Backtop/Backtop.svelte.d.ts +13 -0
  26. package/dist/Backtop/index.d.ts +4 -0
  27. package/dist/Backtop/index.js +3 -0
  28. package/dist/Backtop/types.d.ts +18 -0
  29. package/dist/Backtop/types.js +1 -0
  30. package/dist/Badge/Badge.svelte +68 -0
  31. package/dist/Badge/Badge.svelte.d.ts +13 -0
  32. package/dist/Badge/index.d.ts +4 -0
  33. package/dist/Badge/index.js +3 -0
  34. package/dist/Badge/types.d.ts +20 -0
  35. package/dist/Badge/types.js +1 -0
  36. package/dist/Breadcrumb/Breadcrumb.svelte +66 -0
  37. package/dist/Breadcrumb/Breadcrumb.svelte.d.ts +6 -0
  38. package/dist/Breadcrumb/BreadcrumbContext.d.ts +4 -0
  39. package/dist/Breadcrumb/BreadcrumbContext.js +1 -0
  40. package/dist/Breadcrumb/BreadcrumbItem.svelte +56 -0
  41. package/dist/Breadcrumb/BreadcrumbItem.svelte.d.ts +12 -0
  42. package/dist/Breadcrumb/index.d.ts +4 -0
  43. package/dist/Breadcrumb/index.js +3 -0
  44. package/dist/Breadcrumb/types.d.ts +10 -0
  45. package/dist/Breadcrumb/types.js +1 -0
  46. package/dist/Button/Button.svelte +61 -0
  47. package/dist/Button/Button.svelte.d.ts +4 -0
  48. package/dist/Button/index.d.ts +4 -0
  49. package/dist/Button/index.js +3 -0
  50. package/dist/Button/types.d.ts +42 -0
  51. package/dist/Button/types.js +1 -0
  52. package/dist/Calendar/Calendar.svelte +115 -0
  53. package/dist/Calendar/Calendar.svelte.d.ts +7 -0
  54. package/dist/Calendar/index.d.ts +3 -0
  55. package/dist/Calendar/index.js +3 -0
  56. package/dist/Card/Card.svelte +59 -0
  57. package/dist/Card/Card.svelte.d.ts +4 -0
  58. package/dist/Card/index.d.ts +4 -0
  59. package/dist/Card/index.js +4 -0
  60. package/dist/Card/types.d.ts +26 -0
  61. package/dist/Card/types.js +1 -0
  62. package/dist/Carousel/Carousel.svelte +206 -0
  63. package/dist/Carousel/Carousel.svelte.d.ts +19 -0
  64. package/dist/Carousel/CarouselContext.d.ts +6 -0
  65. package/dist/Carousel/CarouselContext.js +1 -0
  66. package/dist/Carousel/CarouselItem.svelte +42 -0
  67. package/dist/Carousel/CarouselItem.svelte.d.ts +11 -0
  68. package/dist/Carousel/index.d.ts +5 -0
  69. package/dist/Carousel/index.js +4 -0
  70. package/dist/Carousel/types.d.ts +43 -0
  71. package/dist/Carousel/types.js +1 -0
  72. package/dist/Cascader/Cascader.svelte +219 -0
  73. package/dist/Cascader/Cascader.svelte.d.ts +4 -0
  74. package/dist/Cascader/index.d.ts +4 -0
  75. package/dist/Cascader/index.js +3 -0
  76. package/dist/Cascader/types.d.ts +19 -0
  77. package/dist/Cascader/types.js +1 -0
  78. package/dist/Checkbox/Checkbox.svelte +55 -0
  79. package/dist/Checkbox/Checkbox.svelte.d.ts +15 -0
  80. package/dist/Checkbox/CheckboxGroup.svelte +43 -0
  81. package/dist/Checkbox/CheckboxGroup.svelte.d.ts +12 -0
  82. package/dist/Checkbox/index.d.ts +4 -0
  83. package/dist/Checkbox/index.js +3 -0
  84. package/dist/Checkbox/types.d.ts +24 -0
  85. package/dist/Checkbox/types.js +1 -0
  86. package/dist/Collapse/Collapse.svelte +62 -0
  87. package/dist/Collapse/Collapse.svelte.d.ts +11 -0
  88. package/dist/Collapse/CollapseContext.d.ts +6 -0
  89. package/dist/Collapse/CollapseContext.js +1 -0
  90. package/dist/Collapse/CollapseItem.svelte +175 -0
  91. package/dist/Collapse/CollapseItem.svelte.d.ts +11 -0
  92. package/dist/Collapse/index.d.ts +5 -0
  93. package/dist/Collapse/index.js +4 -0
  94. package/dist/Collapse/types.d.ts +27 -0
  95. package/dist/Collapse/types.js +1 -0
  96. package/dist/ColorPicker/ColorPicker.svelte +157 -0
  97. package/dist/ColorPicker/ColorPicker.svelte.d.ts +12 -0
  98. package/dist/ColorPicker/index.d.ts +4 -0
  99. package/dist/ColorPicker/index.js +3 -0
  100. package/dist/ColorPicker/types.d.ts +17 -0
  101. package/dist/ColorPicker/types.js +1 -0
  102. package/dist/Container/Aside.svelte +20 -0
  103. package/dist/Container/Aside.svelte.d.ts +9 -0
  104. package/dist/Container/Container.svelte +19 -0
  105. package/dist/Container/Container.svelte.d.ts +9 -0
  106. package/dist/Container/Footer.svelte +20 -0
  107. package/dist/Container/Footer.svelte.d.ts +9 -0
  108. package/dist/Container/Header.svelte +20 -0
  109. package/dist/Container/Header.svelte.d.ts +9 -0
  110. package/dist/Container/Main.svelte +18 -0
  111. package/dist/Container/Main.svelte.d.ts +8 -0
  112. package/dist/Container/index.d.ts +14 -0
  113. package/dist/Container/index.js +13 -0
  114. package/dist/Container/types.d.ts +46 -0
  115. package/dist/Container/types.js +1 -0
  116. package/dist/DatePicker/DatePicker.svelte +278 -0
  117. package/dist/DatePicker/DatePicker.svelte.d.ts +17 -0
  118. package/dist/DatePicker/index.d.ts +4 -0
  119. package/dist/DatePicker/index.js +3 -0
  120. package/dist/DatePicker/types.d.ts +29 -0
  121. package/dist/DatePicker/types.js +1 -0
  122. package/dist/DateTimePicker/DateTimePicker.svelte +500 -0
  123. package/dist/DateTimePicker/DateTimePicker.svelte.d.ts +4 -0
  124. package/dist/DateTimePicker/index.d.ts +4 -0
  125. package/dist/DateTimePicker/index.js +3 -0
  126. package/dist/DateTimePicker/types.d.ts +21 -0
  127. package/dist/DateTimePicker/types.js +1 -0
  128. package/dist/Descriptions/Descriptions.svelte +69 -0
  129. package/dist/Descriptions/Descriptions.svelte.d.ts +15 -0
  130. package/dist/Descriptions/DescriptionsContext.d.ts +8 -0
  131. package/dist/Descriptions/DescriptionsContext.js +1 -0
  132. package/dist/Descriptions/DescriptionsItem.svelte +59 -0
  133. package/dist/Descriptions/DescriptionsItem.svelte.d.ts +13 -0
  134. package/dist/Descriptions/index.d.ts +5 -0
  135. package/dist/Descriptions/index.js +4 -0
  136. package/dist/Descriptions/types.d.ts +41 -0
  137. package/dist/Descriptions/types.js +1 -0
  138. package/dist/Dialog/Dialog.svelte +151 -0
  139. package/dist/Dialog/Dialog.svelte.d.ts +20 -0
  140. package/dist/Dialog/index.d.ts +4 -0
  141. package/dist/Dialog/index.js +3 -0
  142. package/dist/Dialog/types.d.ts +32 -0
  143. package/dist/Dialog/types.js +1 -0
  144. package/dist/Divider/Divider.svelte +47 -0
  145. package/dist/Divider/Divider.svelte.d.ts +11 -0
  146. package/dist/Divider/index.d.ts +4 -0
  147. package/dist/Divider/index.js +3 -0
  148. package/dist/Divider/types.d.ts +20 -0
  149. package/dist/Divider/types.js +1 -0
  150. package/dist/Drawer/Drawer.svelte +141 -0
  151. package/dist/Drawer/Drawer.svelte.d.ts +26 -0
  152. package/dist/Drawer/index.d.ts +4 -0
  153. package/dist/Drawer/index.js +3 -0
  154. package/dist/Drawer/types.d.ts +40 -0
  155. package/dist/Drawer/types.js +1 -0
  156. package/dist/Dropdown/Dropdown.svelte +222 -0
  157. package/dist/Dropdown/Dropdown.svelte.d.ts +4 -0
  158. package/dist/Dropdown/DropdownContext.d.ts +7 -0
  159. package/dist/Dropdown/DropdownContext.js +8 -0
  160. package/dist/Dropdown/DropdownItem.svelte +51 -0
  161. package/dist/Dropdown/DropdownItem.svelte.d.ts +4 -0
  162. package/dist/Dropdown/DropdownMenu.svelte +13 -0
  163. package/dist/Dropdown/DropdownMenu.svelte.d.ts +4 -0
  164. package/dist/Dropdown/index.d.ts +5 -0
  165. package/dist/Dropdown/index.js +5 -0
  166. package/dist/Dropdown/types.d.ts +68 -0
  167. package/dist/Dropdown/types.js +1 -0
  168. package/dist/Empty/Empty.svelte +40 -0
  169. package/dist/Empty/Empty.svelte.d.ts +11 -0
  170. package/dist/Empty/index.d.ts +4 -0
  171. package/dist/Empty/index.js +3 -0
  172. package/dist/Empty/types.d.ts +14 -0
  173. package/dist/Empty/types.js +1 -0
  174. package/dist/Form/Form.svelte +88 -0
  175. package/dist/Form/Form.svelte.d.ts +15 -0
  176. package/dist/Form/FormContext.d.ts +19 -0
  177. package/dist/Form/FormContext.js +1 -0
  178. package/dist/Form/FormInternals.d.ts +40 -0
  179. package/dist/Form/FormInternals.js +152 -0
  180. package/dist/Form/FormItem.svelte +191 -0
  181. package/dist/Form/FormItem.svelte.d.ts +8 -0
  182. package/dist/Form/index.d.ts +3 -0
  183. package/dist/Form/index.js +2 -0
  184. package/dist/Form/types.d.ts +61 -0
  185. package/dist/Form/types.js +1 -0
  186. package/dist/Icon/Icon.svelte +59 -0
  187. package/dist/Icon/Icon.svelte.d.ts +11 -0
  188. package/dist/Icon/index.d.ts +5 -0
  189. package/dist/Icon/index.js +15 -0
  190. package/dist/Icon/types.d.ts +14 -0
  191. package/dist/Icon/types.js +1 -0
  192. package/dist/Image/Image.svelte +134 -0
  193. package/dist/Image/Image.svelte.d.ts +20 -0
  194. package/dist/Image/index.d.ts +4 -0
  195. package/dist/Image/index.js +3 -0
  196. package/dist/Image/types.d.ts +32 -0
  197. package/dist/Image/types.js +1 -0
  198. package/dist/Input/Input.svelte +177 -0
  199. package/dist/Input/Input.svelte.d.ts +4 -0
  200. package/dist/Input/index.d.ts +4 -0
  201. package/dist/Input/index.js +3 -0
  202. package/dist/Input/types.d.ts +72 -0
  203. package/dist/Input/types.js +1 -0
  204. package/dist/InputNumber/InputNumber.svelte +110 -0
  205. package/dist/InputNumber/InputNumber.svelte.d.ts +18 -0
  206. package/dist/InputNumber/index.d.ts +4 -0
  207. package/dist/InputNumber/index.js +3 -0
  208. package/dist/InputNumber/types.d.ts +29 -0
  209. package/dist/InputNumber/types.js +1 -0
  210. package/dist/InputTag/InputTag.svelte +160 -0
  211. package/dist/InputTag/InputTag.svelte.d.ts +4 -0
  212. package/dist/InputTag/index.d.ts +4 -0
  213. package/dist/InputTag/index.js +3 -0
  214. package/dist/InputTag/types.d.ts +21 -0
  215. package/dist/InputTag/types.js +1 -0
  216. package/dist/Link/Link.svelte +38 -0
  217. package/dist/Link/Link.svelte.d.ts +15 -0
  218. package/dist/Link/index.d.ts +4 -0
  219. package/dist/Link/index.js +3 -0
  220. package/dist/Link/types.d.ts +26 -0
  221. package/dist/Link/types.js +1 -0
  222. package/dist/Loading/Loading.svelte +56 -0
  223. package/dist/Loading/Loading.svelte.d.ts +14 -0
  224. package/dist/Loading/index.d.ts +4 -0
  225. package/dist/Loading/index.js +3 -0
  226. package/dist/Loading/types.d.ts +20 -0
  227. package/dist/Loading/types.js +1 -0
  228. package/dist/Menu/Menu.svelte +301 -0
  229. package/dist/Menu/Menu.svelte.d.ts +4 -0
  230. package/dist/Menu/types.d.ts +35 -0
  231. package/dist/Menu/types.js +1 -0
  232. package/dist/Message/Message.svelte +60 -0
  233. package/dist/Message/Message.svelte.d.ts +13 -0
  234. package/dist/Message/MessageQueue.svelte +65 -0
  235. package/dist/Message/MessageQueue.svelte.d.ts +10 -0
  236. package/dist/Message/index.d.ts +4 -0
  237. package/dist/Message/index.js +3 -0
  238. package/dist/Message/message.d.ts +19 -0
  239. package/dist/Message/message.js +95 -0
  240. package/dist/Message/types.d.ts +28 -0
  241. package/dist/Message/types.js +1 -0
  242. package/dist/MessageBox/MessageBox.svelte +133 -0
  243. package/dist/MessageBox/MessageBox.svelte.d.ts +7 -0
  244. package/dist/MessageBox/index.d.ts +4 -0
  245. package/dist/MessageBox/index.js +3 -0
  246. package/dist/MessageBox/messageBox.d.ts +13 -0
  247. package/dist/MessageBox/messageBox.js +32 -0
  248. package/dist/MessageBox/types.d.ts +23 -0
  249. package/dist/MessageBox/types.js +1 -0
  250. package/dist/Notification/Notification.svelte +142 -0
  251. package/dist/Notification/Notification.svelte.d.ts +7 -0
  252. package/dist/Notification/index.d.ts +4 -0
  253. package/dist/Notification/index.js +3 -0
  254. package/dist/Notification/notification.d.ts +11 -0
  255. package/dist/Notification/notification.js +19 -0
  256. package/dist/Notification/types.d.ts +26 -0
  257. package/dist/Notification/types.js +1 -0
  258. package/dist/Pagination/Pagination.svelte +413 -0
  259. package/dist/Pagination/Pagination.svelte.d.ts +21 -0
  260. package/dist/Pagination/index.d.ts +4 -0
  261. package/dist/Pagination/index.js +3 -0
  262. package/dist/Pagination/types.d.ts +32 -0
  263. package/dist/Pagination/types.js +1 -0
  264. package/dist/PinInput/PinInput.svelte +175 -0
  265. package/dist/PinInput/PinInput.svelte.d.ts +4 -0
  266. package/dist/PinInput/index.d.ts +4 -0
  267. package/dist/PinInput/index.js +3 -0
  268. package/dist/PinInput/types.d.ts +31 -0
  269. package/dist/PinInput/types.js +1 -0
  270. package/dist/Popconfirm/Popconfirm.svelte +293 -0
  271. package/dist/Popconfirm/Popconfirm.svelte.d.ts +4 -0
  272. package/dist/Popconfirm/index.d.ts +2 -0
  273. package/dist/Popconfirm/index.js +1 -0
  274. package/dist/Popconfirm/types.d.ts +53 -0
  275. package/dist/Popconfirm/types.js +1 -0
  276. package/dist/Popover/Popover.svelte +245 -0
  277. package/dist/Popover/Popover.svelte.d.ts +7 -0
  278. package/dist/Popover/index.d.ts +4 -0
  279. package/dist/Popover/index.js +3 -0
  280. package/dist/Popover/types.d.ts +24 -0
  281. package/dist/Popover/types.js +1 -0
  282. package/dist/Progress/Progress.svelte +33 -0
  283. package/dist/Progress/Progress.svelte.d.ts +11 -0
  284. package/dist/Progress/index.d.ts +4 -0
  285. package/dist/Progress/index.js +3 -0
  286. package/dist/Progress/types.d.ts +17 -0
  287. package/dist/Progress/types.js +1 -0
  288. package/dist/Radio/Radio.svelte +66 -0
  289. package/dist/Radio/Radio.svelte.d.ts +15 -0
  290. package/dist/Radio/RadioGroup.svelte +40 -0
  291. package/dist/Radio/RadioGroup.svelte.d.ts +13 -0
  292. package/dist/Radio/index.d.ts +4 -0
  293. package/dist/Radio/index.js +3 -0
  294. package/dist/Radio/types.d.ts +24 -0
  295. package/dist/Radio/types.js +1 -0
  296. package/dist/Rating/Rating.svelte +226 -0
  297. package/dist/Rating/Rating.svelte.d.ts +27 -0
  298. package/dist/Rating/index.d.ts +4 -0
  299. package/dist/Rating/index.js +3 -0
  300. package/dist/Rating/types.d.ts +43 -0
  301. package/dist/Rating/types.js +1 -0
  302. package/dist/Result/Result.svelte +58 -0
  303. package/dist/Result/Result.svelte.d.ts +14 -0
  304. package/dist/Result/index.d.ts +4 -0
  305. package/dist/Result/index.js +3 -0
  306. package/dist/Result/types.d.ts +20 -0
  307. package/dist/Result/types.js +1 -0
  308. package/dist/Segmented/Segmented.svelte +49 -0
  309. package/dist/Segmented/Segmented.svelte.d.ts +12 -0
  310. package/dist/Segmented/index.d.ts +4 -0
  311. package/dist/Segmented/index.js +3 -0
  312. package/dist/Segmented/types.d.ts +29 -0
  313. package/dist/Segmented/types.js +1 -0
  314. package/dist/Select/Option.svelte +30 -0
  315. package/dist/Select/Option.svelte.d.ts +9 -0
  316. package/dist/Select/OptionGroup.svelte +33 -0
  317. package/dist/Select/OptionGroup.svelte.d.ts +10 -0
  318. package/dist/Select/Select.svelte +245 -0
  319. package/dist/Select/Select.svelte.d.ts +4 -0
  320. package/dist/Select/index.d.ts +4 -0
  321. package/dist/Select/index.js +3 -0
  322. package/dist/Select/types.d.ts +41 -0
  323. package/dist/Select/types.js +1 -0
  324. package/dist/Skeleton/Skeleton.svelte +44 -0
  325. package/dist/Skeleton/Skeleton.svelte.d.ts +13 -0
  326. package/dist/Skeleton/SkeletonItem.svelte +14 -0
  327. package/dist/Skeleton/SkeletonItem.svelte.d.ts +8 -0
  328. package/dist/Skeleton/index.d.ts +5 -0
  329. package/dist/Skeleton/index.js +4 -0
  330. package/dist/Skeleton/types.d.ts +27 -0
  331. package/dist/Skeleton/types.js +1 -0
  332. package/dist/Slider/Slider.svelte +342 -0
  333. package/dist/Slider/Slider.svelte.d.ts +18 -0
  334. package/dist/Slider/index.d.ts +4 -0
  335. package/dist/Slider/index.js +3 -0
  336. package/dist/Slider/types.d.ts +28 -0
  337. package/dist/Slider/types.js +1 -0
  338. package/dist/Space/Space.svelte +89 -0
  339. package/dist/Space/Space.svelte.d.ts +17 -0
  340. package/dist/Space/index.d.ts +4 -0
  341. package/dist/Space/index.js +3 -0
  342. package/dist/Space/types.d.ts +32 -0
  343. package/dist/Space/types.js +1 -0
  344. package/dist/Statistic/Countdown.svelte +108 -0
  345. package/dist/Statistic/Countdown.svelte.d.ts +14 -0
  346. package/dist/Statistic/Statistic.svelte +63 -0
  347. package/dist/Statistic/Statistic.svelte.d.ts +15 -0
  348. package/dist/Statistic/index.d.ts +5 -0
  349. package/dist/Statistic/index.js +4 -0
  350. package/dist/Statistic/types.d.ts +41 -0
  351. package/dist/Statistic/types.js +1 -0
  352. package/dist/Steps/Step.svelte +58 -0
  353. package/dist/Steps/Step.svelte.d.ts +14 -0
  354. package/dist/Steps/Steps.svelte +60 -0
  355. package/dist/Steps/Steps.svelte.d.ts +15 -0
  356. package/dist/Steps/StepsContext.d.ts +12 -0
  357. package/dist/Steps/StepsContext.js +1 -0
  358. package/dist/Steps/index.d.ts +5 -0
  359. package/dist/Steps/index.js +4 -0
  360. package/dist/Steps/types.d.ts +41 -0
  361. package/dist/Steps/types.js +1 -0
  362. package/dist/Switch/Switch.svelte +122 -0
  363. package/dist/Switch/Switch.svelte.d.ts +22 -0
  364. package/dist/Switch/index.d.ts +4 -0
  365. package/dist/Switch/index.js +3 -0
  366. package/dist/Switch/types.d.ts +37 -0
  367. package/dist/Switch/types.js +1 -0
  368. package/dist/Table/Table.svelte +700 -0
  369. package/dist/Table/Table.svelte.d.ts +11 -0
  370. package/dist/Table/index.d.ts +4 -0
  371. package/dist/Table/index.js +3 -0
  372. package/dist/Table/types.d.ts +180 -0
  373. package/dist/Table/types.js +1 -0
  374. package/dist/Tabs/TabPane.svelte +37 -0
  375. package/dist/Tabs/TabPane.svelte.d.ts +13 -0
  376. package/dist/Tabs/Tabs.svelte +251 -0
  377. package/dist/Tabs/Tabs.svelte.d.ts +13 -0
  378. package/dist/Tabs/TabsContext.d.ts +11 -0
  379. package/dist/Tabs/TabsContext.js +1 -0
  380. package/dist/Tabs/index.d.ts +3 -0
  381. package/dist/Tabs/index.js +2 -0
  382. package/dist/Tabs/types.d.ts +39 -0
  383. package/dist/Tabs/types.js +1 -0
  384. package/dist/Tag/Tag.svelte +39 -0
  385. package/dist/Tag/Tag.svelte.d.ts +13 -0
  386. package/dist/Tag/index.d.ts +4 -0
  387. package/dist/Tag/index.js +3 -0
  388. package/dist/Tag/types.d.ts +22 -0
  389. package/dist/Tag/types.js +1 -0
  390. package/dist/Textarea/Textarea.svelte +76 -0
  391. package/dist/Textarea/Textarea.svelte.d.ts +16 -0
  392. package/dist/Textarea/index.d.ts +4 -0
  393. package/dist/Textarea/index.js +3 -0
  394. package/dist/Textarea/types.d.ts +25 -0
  395. package/dist/Textarea/types.js +1 -0
  396. package/dist/TimePicker/TimePicker.svelte +364 -0
  397. package/dist/TimePicker/TimePicker.svelte.d.ts +14 -0
  398. package/dist/TimePicker/index.d.ts +3 -0
  399. package/dist/TimePicker/index.js +3 -0
  400. package/dist/TimePicker/types.d.ts +21 -0
  401. package/dist/TimePicker/types.js +1 -0
  402. package/dist/Timeline/Timeline.svelte +18 -0
  403. package/dist/Timeline/Timeline.svelte.d.ts +8 -0
  404. package/dist/Timeline/TimelineItem.svelte +67 -0
  405. package/dist/Timeline/TimelineItem.svelte.d.ts +18 -0
  406. package/dist/Timeline/index.d.ts +5 -0
  407. package/dist/Timeline/index.js +4 -0
  408. package/dist/Timeline/types.d.ts +39 -0
  409. package/dist/Timeline/types.js +1 -0
  410. package/dist/Tooltip/OverflowTooltip.svelte +81 -0
  411. package/dist/Tooltip/OverflowTooltip.svelte.d.ts +4 -0
  412. package/dist/Tooltip/Tooltip.svelte +77 -0
  413. package/dist/Tooltip/Tooltip.svelte.d.ts +16 -0
  414. package/dist/Tooltip/index.d.ts +6 -0
  415. package/dist/Tooltip/index.js +5 -0
  416. package/dist/Tooltip/types.d.ts +51 -0
  417. package/dist/Tooltip/types.js +1 -0
  418. package/dist/Transfer/Transfer.svelte +145 -0
  419. package/dist/Transfer/Transfer.svelte.d.ts +14 -0
  420. package/dist/Transfer/index.d.ts +4 -0
  421. package/dist/Transfer/index.js +3 -0
  422. package/dist/Transfer/types.d.ts +16 -0
  423. package/dist/Transfer/types.js +1 -0
  424. package/dist/Tree/Tree.svelte +148 -0
  425. package/dist/Tree/Tree.svelte.d.ts +17 -0
  426. package/dist/Tree/TreeNode.svelte +133 -0
  427. package/dist/Tree/TreeNode.svelte.d.ts +19 -0
  428. package/dist/Tree/index.d.ts +4 -0
  429. package/dist/Tree/index.js +3 -0
  430. package/dist/Tree/types.d.ts +65 -0
  431. package/dist/Tree/types.js +1 -0
  432. package/dist/TreeSelect/TreeSelect.svelte +716 -0
  433. package/dist/TreeSelect/TreeSelect.svelte.d.ts +4 -0
  434. package/dist/TreeSelect/index.d.ts +4 -0
  435. package/dist/TreeSelect/index.js +3 -0
  436. package/dist/TreeSelect/types.d.ts +98 -0
  437. package/dist/TreeSelect/types.js +1 -0
  438. package/dist/Upload/Upload.svelte +396 -0
  439. package/dist/Upload/Upload.svelte.d.ts +28 -0
  440. package/dist/Upload/index.d.ts +4 -0
  441. package/dist/Upload/index.js +3 -0
  442. package/dist/Upload/types.d.ts +67 -0
  443. package/dist/Upload/types.js +1 -0
  444. package/dist/Watermark/Watermark.svelte +174 -0
  445. package/dist/Watermark/Watermark.svelte.d.ts +20 -0
  446. package/dist/Watermark/index.d.ts +4 -0
  447. package/dist/Watermark/index.js +3 -0
  448. package/dist/Watermark/types.d.ts +32 -0
  449. package/dist/Watermark/types.js +1 -0
  450. package/dist/index.d.ts +140 -0
  451. package/dist/index.js +85 -0
  452. package/dist/utils/floating.d.ts +28 -0
  453. package/dist/utils/floating.js +140 -0
  454. package/dist/utils/index.d.ts +3 -0
  455. package/dist/utils/index.js +34 -0
  456. package/dist/utils/portal.d.ts +9 -0
  457. package/dist/utils/portal.js +33 -0
  458. package/package.json +115 -0
  459. package/styles/index.css +1 -0
package/README.md ADDED
@@ -0,0 +1,242 @@
1
+ # luna-ui
2
+
3
+ A modern, feature-rich Svelte 5 component library with 60+ beautifully designed components.
4
+
5
+ ## Features
6
+
7
+ - 🚀 **Svelte 5** - Built with the latest Svelte 5 features including runes and snippets
8
+ - 📦 **60+ Components** - Comprehensive set of UI components for any application
9
+ - 🎨 **Customizable** - CSS variables for easy theming and customization
10
+ - 📱 **Responsive** - Mobile-first design with responsive components
11
+ - 🔧 **TypeScript** - Full TypeScript support with type definitions
12
+ - 🌙 **Dark Mode** - Built-in dark mode support
13
+
14
+ ## Installation
15
+
16
+ ```bash
17
+ # Using bun
18
+ bun add luna-ui lucide
19
+
20
+ # Using npm
21
+ npm install luna-ui lucide
22
+
23
+ # Using pnpm
24
+ pnpm add luna-ui lucide
25
+ ```
26
+
27
+ ## Quick Start
28
+
29
+ 1. Import the styles in your main entry file:
30
+
31
+ ```js
32
+ import 'luna-ui/styles';
33
+ ```
34
+
35
+ 2. Use components in your Svelte files:
36
+
37
+ ```svelte
38
+ <script>
39
+ import { Button, Input, Table, Dialog } from 'luna-ui';
40
+ </script>
41
+
42
+ <Button type="primary">Click me</Button>
43
+ ```
44
+
45
+ ## Components
46
+
47
+ ### Basic
48
+ - Button
49
+ - Icon
50
+ - Link
51
+
52
+ ### Form
53
+ - Input
54
+ - InputNumber
55
+ - InputTag
56
+ - Textarea
57
+ - Select
58
+ - Checkbox
59
+ - Radio
60
+ - Switch
61
+ - Slider
62
+ - Rating
63
+ - ColorPicker
64
+ - DatePicker
65
+ - TimePicker
66
+ - DateTimePicker
67
+ - Cascader
68
+ - Transfer
69
+ - Upload
70
+ - Form
71
+
72
+ ### Data Display
73
+ - Table
74
+ - Tag
75
+ - Badge
76
+ - Avatar
77
+ - Card
78
+ - Carousel
79
+ - Collapse
80
+ - Descriptions
81
+ - Empty
82
+ - Image
83
+ - Pagination
84
+ - Progress
85
+ - Result
86
+ - Skeleton
87
+ - Statistic
88
+ - Timeline
89
+ - Tree
90
+ - TreeSelect
91
+
92
+ ### Navigation
93
+ - Breadcrumb
94
+ - Dropdown
95
+ - Menu
96
+ - Tabs
97
+ - Steps
98
+
99
+ ### Feedback
100
+ - Alert
101
+ - Dialog
102
+ - Drawer
103
+ - Loading
104
+ - Message
105
+ - MessageBox
106
+ - Notification
107
+ - Popconfirm
108
+ - Popover
109
+ - Tooltip
110
+
111
+ ### Layout
112
+ - Container
113
+ - Divider
114
+ - Space
115
+ - Watermark
116
+
117
+ ### Other
118
+ - Affix
119
+ - Backtop
120
+ - Calendar
121
+ - Segmented
122
+ - PinInput
123
+ - Autocomplete
124
+
125
+ ## Example Usage
126
+
127
+ ### Table with Sorting and Selection
128
+
129
+ ```svelte
130
+ <script lang="ts">
131
+ import { Table } from 'lumen-plus';
132
+ import type { TableColumn } from 'lumen-plus';
133
+
134
+ const columns: TableColumn[] = [
135
+ { type: 'selection' },
136
+ { prop: 'name', label: 'Name', sortable: true, width: 150 },
137
+ { prop: 'email', label: 'Email', minWidth: 200 },
138
+ { prop: 'role', label: 'Role', width: 120 },
139
+ {
140
+ type: 'actions',
141
+ label: 'Actions',
142
+ width: 200,
143
+ actions: [
144
+ { label: 'Edit', type: 'primary', onClick: (row) => console.log('Edit', row) },
145
+ { label: 'Delete', type: 'danger', onClick: (row) => console.log('Delete', row) }
146
+ ]
147
+ }
148
+ ];
149
+
150
+ const data = [
151
+ { id: 1, name: 'John Doe', email: 'john@example.com', role: 'Admin' },
152
+ { id: 2, name: 'Jane Smith', email: 'jane@example.com', role: 'User' },
153
+ ];
154
+ </script>
155
+
156
+ <Table {columns} {data} stripe border />
157
+ ```
158
+
159
+ ### Form Validation
160
+
161
+ ```svelte
162
+ <script>
163
+ import { Form, FormItem, Input, Button } from 'lumen-plus';
164
+
165
+ let form = { username: '', email: '' };
166
+
167
+ const rules = {
168
+ username: [{ required: true, message: 'Username is required' }],
169
+ email: [{ required: true, type: 'email', message: 'Valid email required' }]
170
+ };
171
+ </script>
172
+
173
+ <Form model={form} {rules}>
174
+ <FormItem label="Username" prop="username">
175
+ <Input bind:value={form.username} />
176
+ </FormItem>
177
+ <FormItem label="Email" prop="email">
178
+ <Input bind:value={form.email} />
179
+ </FormItem>
180
+ <FormItem>
181
+ <Button type="primary">Submit</Button>
182
+ </FormItem>
183
+ </Form>
184
+ ```
185
+
186
+ ### Dialog
187
+
188
+ ```svelte
189
+ <script>
190
+ import { Dialog, Button } from 'lumen-plus';
191
+
192
+ let visible = false;
193
+ </script>
194
+
195
+ <Button onclick={() => visible = true}>Open Dialog</Button>
196
+
197
+ <Dialog bind:visible title="Hello">
198
+ <p>This is a dialog content.</p>
199
+ </Dialog>
200
+ ```
201
+
202
+ ## Theming
203
+
204
+ Customize the theme using CSS variables:
205
+
206
+ ```css
207
+ :root {
208
+ --lm-color-primary: #0062FF;
209
+ --lm-color-success: #31C27C;
210
+ --lm-color-warning: #FF974A;
211
+ --lm-color-danger: #FC5A5A;
212
+ --lm-color-info: #92929D;
213
+
214
+ --lm-border-radius-base: 6px;
215
+ --lm-font-size-base: 14px;
216
+ }
217
+ ```
218
+
219
+ ## Dark Mode
220
+
221
+ Enable dark mode by adding the `dark` class to your root element:
222
+
223
+ ```html
224
+ <html class="dark">
225
+ <!-- Your app -->
226
+ </html>
227
+ ```
228
+
229
+ ## Related Packages
230
+
231
+ - `@lumen-plus/theme-chalk` - Default theme styles (SCSS source)
232
+
233
+ ## Browser Support
234
+
235
+ - Chrome >= 87
236
+ - Firefox >= 78
237
+ - Safari >= 14
238
+ - Edge >= 88
239
+
240
+ ## License
241
+
242
+ MIT
@@ -0,0 +1,97 @@
1
+ <script lang="ts">
2
+ import type { Snippet } from 'svelte'
3
+ import type { AffixPosition } from './types'
4
+ import { onMount, onDestroy } from 'svelte'
5
+
6
+ interface AffixProps {
7
+ offset?: number
8
+ position?: AffixPosition
9
+ target?: string
10
+ zIndex?: number
11
+ onchange?: (fixed: boolean) => void
12
+ children?: Snippet
13
+ class?: string
14
+ }
15
+
16
+ let { offset = 0, position = 'top', target, zIndex = 100, onchange, children, class: cls = '', ...attrs }: AffixProps = $props()
17
+
18
+ let fixed = $state(false)
19
+ let affixRef: HTMLDivElement | null = $state(null)
20
+ let placeholderRef: HTMLDivElement | null = $state(null)
21
+ let container: HTMLElement | Window = $state(window)
22
+ let width = $state(0)
23
+ let height = $state(0)
24
+ let fixedTop = $state<number | undefined>(undefined)
25
+ let fixedBottom = $state<number | undefined>(undefined)
26
+
27
+ const updateFixed = (): void => {
28
+ if (!affixRef) return
29
+
30
+ const rect = (placeholderRef || affixRef).getBoundingClientRect()
31
+ const containerRect = container === window ? { top: 0, bottom: window.innerHeight } : (container as HTMLElement).getBoundingClientRect()
32
+
33
+ let shouldFix = false
34
+
35
+ if (position === 'top') {
36
+ shouldFix = rect.top - containerRect.top < offset
37
+ if (shouldFix) {
38
+ fixedTop = containerRect.top + offset
39
+ fixedBottom = undefined
40
+ }
41
+ } else {
42
+ shouldFix = containerRect.bottom - rect.bottom < offset
43
+ if (shouldFix) {
44
+ fixedBottom = window.innerHeight - containerRect.bottom + offset
45
+ fixedTop = undefined
46
+ }
47
+ }
48
+
49
+ if (shouldFix !== fixed) {
50
+ fixed = shouldFix
51
+ onchange?.(fixed)
52
+ }
53
+
54
+ if (fixed) {
55
+ width = rect.width
56
+ height = rect.height
57
+ }
58
+ }
59
+
60
+ onMount(() => {
61
+ if (target) {
62
+ const el = document.querySelector(target)
63
+ if (el) container = el as HTMLElement
64
+ }
65
+
66
+ const scrollEl = container === window ? window : container
67
+ scrollEl.addEventListener('scroll', updateFixed, { passive: true })
68
+ window.addEventListener('resize', updateFixed, { passive: true })
69
+ updateFixed()
70
+ })
71
+
72
+ onDestroy(() => {
73
+ const scrollEl = container === window ? window : container
74
+ scrollEl.removeEventListener('scroll', updateFixed)
75
+ window.removeEventListener('resize', updateFixed)
76
+ })
77
+
78
+ const classes = $derived(`lm-affix${fixed ? ' is-fixed' : ''}${cls ? ` ${cls}` : ''}`)
79
+
80
+ const affixStyle = $derived.by(() => {
81
+ if (!fixed) return undefined
82
+ const styles: string[] = [`z-index: ${zIndex}`, `width: ${width}px`]
83
+ if (fixedTop !== undefined) styles.push(`top: ${fixedTop}px`)
84
+ if (fixedBottom !== undefined) styles.push(`bottom: ${fixedBottom}px`)
85
+ return styles.join('; ')
86
+ })
87
+
88
+ const placeholderStyle = $derived(fixed ? `width: ${width}px; height: ${height}px` : undefined)
89
+ </script>
90
+
91
+ <div bind:this={placeholderRef} style={placeholderStyle}>
92
+ <div bind:this={affixRef} class={classes} style={affixStyle} {...attrs}>
93
+ {#if children}
94
+ {@render children()}
95
+ {/if}
96
+ </div>
97
+ </div>
@@ -0,0 +1,14 @@
1
+ import type { Snippet } from 'svelte';
2
+ import type { AffixPosition } from './types';
3
+ interface AffixProps {
4
+ offset?: number;
5
+ position?: AffixPosition;
6
+ target?: string;
7
+ zIndex?: number;
8
+ onchange?: (fixed: boolean) => void;
9
+ children?: Snippet;
10
+ class?: string;
11
+ }
12
+ declare const Affix: import("svelte").Component<AffixProps, {}, "">;
13
+ type Affix = ReturnType<typeof Affix>;
14
+ export default Affix;
@@ -0,0 +1,4 @@
1
+ import Affix from './Affix.svelte';
2
+ export { Affix };
3
+ export type { AffixProps, AffixPosition } from './types';
4
+ export default Affix;
@@ -0,0 +1,3 @@
1
+ import Affix from './Affix.svelte';
2
+ export { Affix };
3
+ export default Affix;
@@ -0,0 +1,11 @@
1
+ import type { Snippet } from 'svelte';
2
+ export type AffixPosition = 'top' | 'bottom';
3
+ export interface AffixProps {
4
+ offset?: number;
5
+ position?: AffixPosition;
6
+ target?: string;
7
+ zIndex?: number;
8
+ onchange?: (fixed: boolean) => void;
9
+ children?: Snippet;
10
+ class?: string;
11
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,97 @@
1
+ <script lang="ts">
2
+ import type { Snippet } from "svelte";
3
+ import type { IconNode } from "lucide";
4
+ import { CheckCircle, AlertTriangle, AlertCircle, Info, X } from "lucide";
5
+ import Icon from "../Icon/Icon.svelte";
6
+
7
+ interface AlertProps {
8
+ type?: "info" | "success" | "warning" | "danger" | "error";
9
+ title?: string;
10
+ closable?: boolean;
11
+ showIcon?: boolean;
12
+ center?: boolean;
13
+ closeText?: string;
14
+ duration?: number;
15
+ children?: Snippet;
16
+ onclose?: () => void;
17
+ class?: string;
18
+ }
19
+
20
+ const ICON_MAP: Record<string, IconNode> = {
21
+ success: CheckCircle,
22
+ warning: AlertTriangle,
23
+ danger: AlertCircle,
24
+ error: AlertCircle,
25
+ info: Info,
26
+ };
27
+
28
+ let {
29
+ type = "info",
30
+ title,
31
+ closable = false,
32
+ showIcon = true,
33
+ center = false,
34
+ closeText,
35
+ duration = 0,
36
+ children,
37
+ onclose,
38
+ class: cls = "",
39
+ ...attrs
40
+ }: AlertProps = $props();
41
+
42
+ let visible = $state(true);
43
+
44
+ let timer: ReturnType<typeof setTimeout> | null = null;
45
+
46
+ const classes = $derived(
47
+ `lm-alert lm-alert--${type}${!visible ? " is-hidden" : ""}${center ? " is-center" : ""}${cls ? ` ${cls}` : ""}`,
48
+ );
49
+
50
+ const handleClose = (): void => {
51
+ visible = false;
52
+ onclose?.();
53
+ };
54
+
55
+ $effect(() => {
56
+ if (!visible || !duration || duration <= 0) return;
57
+ if (timer) clearTimeout(timer);
58
+ timer = setTimeout(handleClose, duration);
59
+ return () => {
60
+ if (timer) clearTimeout(timer);
61
+ };
62
+ });
63
+ </script>
64
+
65
+ {#if visible}
66
+ <div {...attrs} class={classes} role="alert">
67
+ {#if showIcon}
68
+ <div class="lm-alert__icon">
69
+ <Icon icon={ICON_MAP[type]} size={20} />
70
+ </div>
71
+ {/if}
72
+ <div class="lm-alert__content">
73
+ {#if title}
74
+ <div class="lm-alert__title">{title}</div>
75
+ {/if}
76
+ {#if children}
77
+ <div class="lm-alert__description">
78
+ {@render children()}
79
+ </div>
80
+ {/if}
81
+ </div>
82
+ {#if closable}
83
+ <button
84
+ type="button"
85
+ class="lm-alert__close"
86
+ onclick={handleClose}
87
+ aria-label="Close"
88
+ >
89
+ {#if closeText}
90
+ {closeText}
91
+ {:else}
92
+ <Icon icon={X} size={16} />
93
+ {/if}
94
+ </button>
95
+ {/if}
96
+ </div>
97
+ {/if}
@@ -0,0 +1,16 @@
1
+ import type { Snippet } from 'svelte';
2
+ interface AlertProps {
3
+ type?: 'info' | 'success' | 'warning' | 'danger' | 'error';
4
+ title?: string;
5
+ closable?: boolean;
6
+ showIcon?: boolean;
7
+ center?: boolean;
8
+ closeText?: string;
9
+ duration?: number;
10
+ children?: Snippet;
11
+ onclose?: () => void;
12
+ class?: string;
13
+ }
14
+ declare const Alert: import("svelte").Component<AlertProps, {}, "">;
15
+ type Alert = ReturnType<typeof Alert>;
16
+ export default Alert;
@@ -0,0 +1,4 @@
1
+ import Alert from './Alert.svelte';
2
+ export { Alert };
3
+ export type { AlertProps, AlertType } from './types';
4
+ export default Alert;
@@ -0,0 +1,3 @@
1
+ import Alert from './Alert.svelte';
2
+ export { Alert };
3
+ export default Alert;
@@ -0,0 +1,23 @@
1
+ import type { Snippet } from 'svelte';
2
+ export type AlertType = 'info' | 'success' | 'warning' | 'danger' | 'error';
3
+ export interface AlertProps {
4
+ type?: AlertType;
5
+ title?: string;
6
+ closable?: boolean;
7
+ showIcon?: boolean;
8
+ center?: boolean;
9
+ closeText?: string;
10
+ duration?: number;
11
+ children?: Snippet;
12
+ onclose?: () => void;
13
+ class?: string;
14
+ }
15
+ export interface AlertEmits {
16
+ close: void;
17
+ }
18
+ export interface AlertSlots {
19
+ icon?: any;
20
+ title?: any;
21
+ default?: any;
22
+ actions?: any;
23
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,163 @@
1
+ <script lang="ts">
2
+ import Icon from '../Icon/Icon.svelte'
3
+ import { X, Loader2, ChevronDown } from 'lucide'
4
+
5
+ interface SuggestionItem {
6
+ value: string
7
+ [key: string]: any
8
+ }
9
+
10
+ interface Props {
11
+ modelValue?: string
12
+ placeholder?: string
13
+ disabled?: boolean
14
+ clearable?: boolean
15
+ loading?: boolean
16
+ debounce?: number
17
+ valueKey?: string
18
+ fetchSuggestions?: (query: string) => Promise<SuggestionItem[]> | SuggestionItem[]
19
+ size?: 'small' | 'default' | 'large'
20
+ showMenuArrow?: boolean
21
+ class?: string
22
+ }
23
+
24
+ let {
25
+ modelValue = $bindable(''),
26
+ placeholder = '',
27
+ disabled = false,
28
+ clearable = false,
29
+ loading = $bindable(false),
30
+ debounce = 300,
31
+ valueKey = 'value',
32
+ fetchSuggestions,
33
+ size = 'default',
34
+ showMenuArrow = true,
35
+ class: cls = '',
36
+ ...attrs
37
+ }: Props = $props()
38
+
39
+ let visible = $state(false)
40
+ let suggestions = $state<SuggestionItem[]>([])
41
+ let highlightIndex = $state(-1)
42
+ let inputRef: HTMLElement | null = $state(null)
43
+ let debounceTimer: ReturnType<typeof setTimeout> | null = null
44
+
45
+ const handleInput = (e: Event): void => {
46
+ modelValue = (e.target as HTMLInputElement).value
47
+ highlightIndex = -1
48
+ if (debounceTimer) clearTimeout(debounceTimer)
49
+ debounceTimer = setTimeout(() => fetchData(modelValue), debounce)
50
+ }
51
+
52
+ const fetchData = async (query: string): Promise<void> => {
53
+ if (!fetchSuggestions) {
54
+ suggestions = []
55
+ visible = false
56
+ return
57
+ }
58
+ loading = true
59
+ try {
60
+ suggestions = await fetchSuggestions(query)
61
+ visible = suggestions.length > 0
62
+ } catch {
63
+ suggestions = []
64
+ visible = false
65
+ } finally {
66
+ loading = false
67
+ }
68
+ }
69
+
70
+ const handleSelect = (item: SuggestionItem): void => {
71
+ modelValue = item[valueKey]
72
+ visible = false
73
+ suggestions = []
74
+ }
75
+
76
+ const handleClear = (e: MouseEvent): void => {
77
+ e.stopPropagation()
78
+ modelValue = ''
79
+ suggestions = []
80
+ visible = false
81
+ }
82
+
83
+ const handleKeydown = (e: KeyboardEvent): void => {
84
+ if (!visible) return
85
+ if (e.key === 'ArrowDown') {
86
+ e.preventDefault()
87
+ highlightIndex = Math.min(highlightIndex + 1, suggestions.length - 1)
88
+ } else if (e.key === 'ArrowUp') {
89
+ e.preventDefault()
90
+ highlightIndex = Math.max(highlightIndex - 1, 0)
91
+ } else if (e.key === 'Enter' && highlightIndex >= 0 && suggestions[highlightIndex]) {
92
+ e.preventDefault()
93
+ handleSelect(suggestions[highlightIndex])
94
+ } else if (e.key === 'Escape') {
95
+ visible = false
96
+ }
97
+ }
98
+
99
+ const handleClickOutside = (e: MouseEvent): void => {
100
+ if (inputRef && !inputRef.contains(e.target as Node)) visible = false
101
+ }
102
+
103
+ $effect(() => {
104
+ if (visible) document.addEventListener('click', handleClickOutside)
105
+ return () => document.removeEventListener('click', handleClickOutside)
106
+ })
107
+
108
+ const classes = $derived(['lm-autocomplete', disabled && 'is-disabled', size !== 'default' && `lm-autocomplete--${size}`, cls].filter(Boolean).join(' '))
109
+ </script>
110
+
111
+ <div bind:this={inputRef} class={classes} {...attrs}>
112
+ <div class="lm-autocomplete__input" class:is-focus={visible}>
113
+ <input
114
+ type="text"
115
+ value={modelValue}
116
+ {placeholder}
117
+ {disabled}
118
+ role="combobox"
119
+ aria-expanded={visible}
120
+ aria-controls="autocomplete-listbox"
121
+ aria-autocomplete="list"
122
+ oninput={handleInput}
123
+ onfocus={() => suggestions.length > 0 && (visible = true)}
124
+ onkeydown={handleKeydown}
125
+ />
126
+ {#if loading}
127
+ <span class="lm-autocomplete__loading" aria-label="加载中">
128
+ <Icon icon={Loader2} size={14} />
129
+ </span>
130
+ {:else if clearable && modelValue && !disabled}
131
+ <button type="button" class="lm-autocomplete__clear" onclick={handleClear} aria-label="清除">
132
+ <Icon icon={X} size={14} />
133
+ </button>
134
+ {:else}
135
+ <span class="lm-autocomplete__arrow" class:is-open={visible} aria-hidden="true">
136
+ <Icon icon={ChevronDown} size={14} />
137
+ </span>
138
+ {/if}
139
+ </div>
140
+
141
+ {#if visible && suggestions.length > 0}
142
+ <div class="lm-autocomplete__dropdown" role="listbox" id="autocomplete-listbox">
143
+ {#if showMenuArrow}
144
+ <div class="lm-autocomplete__menu-arrow" aria-hidden="true"></div>
145
+ {/if}
146
+
147
+ <ul class="lm-autocomplete__menu" role="group">
148
+ {#each suggestions as item, index (item[valueKey])}
149
+ <li
150
+ class="lm-autocomplete__item"
151
+ class:is-highlighted={index === highlightIndex}
152
+ role="option"
153
+ aria-selected={index === highlightIndex}
154
+ onmousedown={() => handleSelect(item)}
155
+ onmouseenter={() => (highlightIndex = index)}
156
+ >
157
+ {item[valueKey]}
158
+ </li>
159
+ {/each}
160
+ </ul>
161
+ </div>
162
+ {/if}
163
+ </div>