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
@@ -0,0 +1,39 @@
1
+ import type { Snippet } from 'svelte';
2
+ /** TimelineItem 类型 */
3
+ export type TimelineItemType = 'primary' | 'success' | 'warning' | 'danger' | 'info';
4
+ /** TimelineItem 尺寸 */
5
+ export type TimelineItemSize = 'normal' | 'large';
6
+ /** TimelineItem 时间戳位置 */
7
+ export type TimelineItemPlacement = 'top' | 'bottom';
8
+ /** Timeline 属性 */
9
+ export interface TimelineProps {
10
+ /** 子内容 */
11
+ children?: Snippet;
12
+ /** 自定义类名 */
13
+ class?: string;
14
+ }
15
+ /** TimelineItem 属性 */
16
+ export interface TimelineItemProps {
17
+ /** 时间戳 */
18
+ timestamp?: string;
19
+ /** 是否隐藏时间戳 */
20
+ hideTimestamp?: boolean;
21
+ /** 时间戳位置 */
22
+ placement?: TimelineItemPlacement;
23
+ /** 节点类型 */
24
+ type?: TimelineItemType;
25
+ /** 节点颜色 */
26
+ color?: string;
27
+ /** 节点尺寸 */
28
+ size?: TimelineItemSize;
29
+ /** 是否空心 */
30
+ hollow?: boolean;
31
+ /** 图标插槽 */
32
+ icon?: Snippet;
33
+ /** 自定义节点插槽 */
34
+ dot?: Snippet;
35
+ /** 子内容 */
36
+ children?: Snippet;
37
+ /** 自定义类名 */
38
+ class?: string;
39
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,81 @@
1
+ <script lang="ts">
2
+ import type { Snippet } from 'svelte'
3
+ import type { OverflowTooltipProps, TooltipPlacement, TooltipEffect } from './types'
4
+
5
+ let {
6
+ content,
7
+ text,
8
+ placement = 'top',
9
+ disabled = false,
10
+ showArrow = true,
11
+ effect: tooltipEffect = 'dark',
12
+ children,
13
+ class: cls = '',
14
+ ...attrs
15
+ }: OverflowTooltipProps = $props()
16
+
17
+ let isOverflowing = $state(false)
18
+ let tooltipVisible = $state(false)
19
+ let textRef = $state<HTMLElement | null>(null)
20
+ let tooltipTimeout: ReturnType<typeof setTimeout> | null = null
21
+
22
+ const displayContent = $derived(content ?? String(text ?? ''))
23
+ const displayText = $derived(String(text ?? ''))
24
+
25
+ const checkOverflow = () => {
26
+ if (textRef) {
27
+ isOverflowing = textRef.scrollWidth > textRef.clientWidth
28
+ }
29
+ }
30
+
31
+ const handleMouseEnter = () => {
32
+ if (disabled) return
33
+ checkOverflow()
34
+ if (!isOverflowing) return
35
+
36
+ tooltipTimeout = setTimeout(() => {
37
+ tooltipVisible = true
38
+ }, 300)
39
+ }
40
+
41
+ const handleMouseLeave = () => {
42
+ if (tooltipTimeout) {
43
+ clearTimeout(tooltipTimeout)
44
+ tooltipTimeout = null
45
+ }
46
+ tooltipVisible = false
47
+ }
48
+
49
+ // Re-check on resize or content change
50
+ $effect(() => {
51
+ if (textRef) {
52
+ const observer = new ResizeObserver(() => {
53
+ checkOverflow()
54
+ })
55
+ observer.observe(textRef)
56
+ return () => observer.disconnect()
57
+ }
58
+ })
59
+
60
+ const tooltipClasses = $derived(`lm-tooltip__popper is-${placement}${showArrow ? ' has-arrow' : ''}${tooltipEffect === 'light' ? ' is-light' : ''}`)
61
+ </script>
62
+
63
+ <div {...attrs} class="lm-overflow-tooltip lm-tooltip{cls ? ` ${cls}` : ''}" class:is-visible={tooltipVisible} onmouseenter={handleMouseEnter} onmouseleave={handleMouseLeave}>
64
+ {#if children}
65
+ <div class="lm-overflow-tooltip__text" bind:this={textRef}>
66
+ {@render children()}
67
+ </div>
68
+ {:else}
69
+ <span class="lm-overflow-tooltip__text" bind:this={textRef}>
70
+ {displayText}
71
+ </span>
72
+ {/if}
73
+ {#if tooltipVisible && displayContent}
74
+ <div class={tooltipClasses} role="tooltip">
75
+ {displayContent}
76
+ {#if showArrow}
77
+ <div class="lm-tooltip__arrow"></div>
78
+ {/if}
79
+ </div>
80
+ {/if}
81
+ </div>
@@ -0,0 +1,4 @@
1
+ import type { OverflowTooltipProps } from './types';
2
+ declare const OverflowTooltip: import("svelte").Component<OverflowTooltipProps, {}, "">;
3
+ type OverflowTooltip = ReturnType<typeof OverflowTooltip>;
4
+ export default OverflowTooltip;
@@ -0,0 +1,77 @@
1
+ <script lang="ts">
2
+ import type { Snippet } from "svelte";
3
+ import { scale } from "svelte/transition";
4
+
5
+ interface TooltipProps {
6
+ content?: string;
7
+ placement?: "top" | "bottom" | "left" | "right";
8
+ trigger?: "hover" | "click";
9
+ disabled?: boolean;
10
+ showArrow?: boolean;
11
+ effect?: "dark" | "light";
12
+ visible?: boolean;
13
+ children?: Snippet;
14
+ class?: string;
15
+ [key: string]: any;
16
+ }
17
+
18
+ let {
19
+ content = "",
20
+ placement = "top",
21
+ trigger = "hover",
22
+ disabled = false,
23
+ showArrow = true,
24
+ effect: tooltipEffect = "dark",
25
+ visible = undefined,
26
+ children,
27
+ class: cls = "",
28
+ ...attrs
29
+ }: TooltipProps = $props();
30
+
31
+ let internalVisible = $state(false);
32
+ let isVisible = $derived(visible !== undefined ? visible : internalVisible);
33
+
34
+ const handleMouseEnter = (): void => {
35
+ if (trigger === "hover" && !disabled) internalVisible = true;
36
+ };
37
+
38
+ const handleMouseLeave = (): void => {
39
+ if (trigger === "hover") internalVisible = false;
40
+ };
41
+
42
+ const handleClick = (): void => {
43
+ if (trigger === "click" && !disabled) internalVisible = !internalVisible;
44
+ };
45
+
46
+ const classes = $derived(
47
+ `lm-tooltip${isVisible ? " is-visible" : ""}${cls ? ` ${cls}` : ""}`,
48
+ );
49
+
50
+ const tooltipClasses = $derived(
51
+ `lm-tooltip__popper is-${placement}${tooltipEffect === "light" ? " is-light" : ""}${showArrow ? " has-arrow" : ""}`,
52
+ );
53
+ </script>
54
+
55
+ <div
56
+ {...attrs}
57
+ class={classes}
58
+ onmouseenter={handleMouseEnter}
59
+ onmouseleave={handleMouseLeave}
60
+ onclick={handleClick}
61
+ >
62
+ {#if children}
63
+ {@render children()}
64
+ {/if}
65
+ {#if isVisible && content}
66
+ <div
67
+ class={tooltipClasses}
68
+ role="tooltip"
69
+ transition:scale={{ duration: 150, start: 0.9 }}
70
+ >
71
+ {content}
72
+ {#if showArrow}
73
+ <div class="lm-tooltip__arrow"></div>
74
+ {/if}
75
+ </div>
76
+ {/if}
77
+ </div>
@@ -0,0 +1,16 @@
1
+ import type { Snippet } from 'svelte';
2
+ interface TooltipProps {
3
+ content?: string;
4
+ placement?: 'top' | 'bottom' | 'left' | 'right';
5
+ trigger?: 'hover' | 'click';
6
+ disabled?: boolean;
7
+ showArrow?: boolean;
8
+ effect?: 'dark' | 'light';
9
+ visible?: boolean;
10
+ children?: Snippet;
11
+ class?: string;
12
+ [key: string]: any;
13
+ }
14
+ declare const Tooltip: import("svelte").Component<TooltipProps, {}, "">;
15
+ type Tooltip = ReturnType<typeof Tooltip>;
16
+ export default Tooltip;
@@ -0,0 +1,6 @@
1
+ import Tooltip from './Tooltip.svelte';
2
+ import OverflowTooltip from './OverflowTooltip.svelte';
3
+ export { Tooltip };
4
+ export { OverflowTooltip };
5
+ export type { TooltipProps, TooltipPlacement, TooltipTrigger, TooltipEffect, OverflowTooltipProps } from './types';
6
+ export default Tooltip;
@@ -0,0 +1,5 @@
1
+ import Tooltip from './Tooltip.svelte';
2
+ import OverflowTooltip from './OverflowTooltip.svelte';
3
+ export { Tooltip };
4
+ export { OverflowTooltip };
5
+ export default Tooltip;
@@ -0,0 +1,51 @@
1
+ import type { Snippet } from 'svelte';
2
+ /** Tooltip 位置 */
3
+ export type TooltipPlacement = 'top' | 'bottom' | 'left' | 'right';
4
+ /** Tooltip 触发方式 */
5
+ export type TooltipTrigger = 'hover' | 'click';
6
+ /** Tooltip 效果 */
7
+ export type TooltipEffect = 'dark' | 'light';
8
+ /** Tooltip 属性 */
9
+ export interface TooltipProps {
10
+ /** 提示内容 */
11
+ content?: string;
12
+ /** 位置 */
13
+ placement?: TooltipPlacement;
14
+ /** 触发方式 */
15
+ trigger?: TooltipTrigger;
16
+ /** 是否禁用 */
17
+ disabled?: boolean;
18
+ /** 是否显示箭头 */
19
+ showArrow?: boolean;
20
+ /** 效果 */
21
+ effect?: TooltipEffect;
22
+ /** 是否可见 */
23
+ visible?: boolean;
24
+ /** 子内容 */
25
+ children?: Snippet;
26
+ /** 自定义类名 */
27
+ class?: string;
28
+ /** 其他属性 */
29
+ [key: string]: unknown;
30
+ }
31
+ /** OverflowTooltip 属性 */
32
+ export interface OverflowTooltipProps {
33
+ /** Tooltip 内容(默认取 text) */
34
+ content?: string;
35
+ /** 要展示的文本(不传 children 时使用) */
36
+ text?: string | number | null | undefined;
37
+ /** 位置 */
38
+ placement?: TooltipPlacement;
39
+ /** 是否禁用 */
40
+ disabled?: boolean;
41
+ /** 是否显示箭头 */
42
+ showArrow?: boolean;
43
+ /** 效果 */
44
+ effect?: TooltipEffect;
45
+ /** 子内容(用于自定义渲染,仍会做溢出检测) */
46
+ children?: Snippet;
47
+ /** 自定义类名 */
48
+ class?: string;
49
+ /** 其他属性 */
50
+ [key: string]: unknown;
51
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,145 @@
1
+ <script lang="ts">
2
+ import type { TransferItem, TransferDirection } from './types'
3
+ import Icon from '../Icon/Icon.svelte'
4
+ import { ChevronLeft, ChevronRight } from 'lucide'
5
+ import Checkbox from '../Checkbox'
6
+
7
+ interface TransferProps {
8
+ data?: TransferItem[]
9
+ modelValue?: (string | number)[]
10
+ filterable?: boolean
11
+ filterPlaceholder?: string
12
+ titles?: [string, string]
13
+ buttonTexts?: [string, string]
14
+ disabled?: boolean
15
+ class?: string
16
+ }
17
+
18
+ let {
19
+ data = [],
20
+ modelValue = $bindable([]),
21
+ filterable = false,
22
+ filterPlaceholder = '请输入搜索内容',
23
+ titles = ['列表 1', '列表 2'],
24
+ buttonTexts = ['', ''],
25
+ disabled = false,
26
+ class: cls = '',
27
+ ...attrs
28
+ }: TransferProps = $props()
29
+
30
+ let leftChecked = $state<Set<string | number>>(new Set())
31
+ let rightChecked = $state<Set<string | number>>(new Set())
32
+ let leftFilter = $state('')
33
+ let rightFilter = $state('')
34
+
35
+ // 优化: 直接使用表达式,避免函数调用开销
36
+ const leftData = $derived(data.filter((item) => !modelValue.includes(item.key)))
37
+ const rightData = $derived(data.filter((item) => modelValue.includes(item.key)))
38
+ const filteredLeftData = $derived(leftFilter ? leftData.filter((item) => item.label.toLowerCase().includes(leftFilter.toLowerCase())) : leftData)
39
+ const filteredRightData = $derived(rightFilter ? rightData.filter((item) => item.label.toLowerCase().includes(rightFilter.toLowerCase())) : rightData)
40
+
41
+ // 优化: 缓存 enabledItems 计算
42
+ const leftEnabledItems = $derived(filteredLeftData.filter((item) => !item.disabled))
43
+ const rightEnabledItems = $derived(filteredRightData.filter((item) => !item.disabled))
44
+
45
+ const isAllLeftChecked = $derived(leftEnabledItems.length > 0 && leftEnabledItems.every((item) => leftChecked.has(item.key)))
46
+ const isAllRightChecked = $derived(rightEnabledItems.length > 0 && rightEnabledItems.every((item) => rightChecked.has(item.key)))
47
+
48
+ const leftCheckedCount = $derived(leftEnabledItems.filter((item) => leftChecked.has(item.key)).length)
49
+ const rightCheckedCount = $derived(rightEnabledItems.filter((item) => rightChecked.has(item.key)).length)
50
+
51
+ const isLeftIndeterminate = $derived(leftCheckedCount > 0 && leftCheckedCount < leftEnabledItems.length)
52
+ const isRightIndeterminate = $derived(rightCheckedCount > 0 && rightCheckedCount < rightEnabledItems.length)
53
+
54
+ const classes = $derived(`lm-transfer${disabled ? ' is-disabled' : ''}${cls ? ` ${cls}` : ''}`)
55
+
56
+ const handleCheck = (direction: TransferDirection, key: string | number, checked: boolean): void => {
57
+ const targetSet = direction === 'left' ? leftChecked : rightChecked
58
+ const newSet = new Set(targetSet)
59
+ checked ? newSet.add(key) : newSet.delete(key)
60
+ direction === 'left' ? (leftChecked = newSet) : (rightChecked = newSet)
61
+ }
62
+
63
+ const handleCheckAll = (direction: TransferDirection, checked: boolean): void => {
64
+ const items = direction === 'left' ? leftEnabledItems : rightEnabledItems
65
+ const newSet = checked ? new Set(items.map((item) => item.key)) : new Set<string | number>()
66
+ direction === 'left' ? (leftChecked = newSet) : (rightChecked = newSet)
67
+ }
68
+
69
+ const moveToRight = (): void => {
70
+ if (leftChecked.size === 0 || disabled) return
71
+ modelValue = [...modelValue, ...leftChecked]
72
+ leftChecked = new Set()
73
+ }
74
+
75
+ const moveToLeft = (): void => {
76
+ if (rightChecked.size === 0 || disabled) return
77
+ modelValue = modelValue.filter((key) => !rightChecked.has(key))
78
+ rightChecked = new Set()
79
+ }
80
+ </script>
81
+
82
+ <div class={classes} {...attrs}>
83
+ <div class="lm-transfer__panel">
84
+ <div class="lm-transfer__header">
85
+ <Checkbox checked={isAllLeftChecked} indeterminate={isLeftIndeterminate} disabled={disabled || filteredLeftData.length === 0} onchange={(c: boolean) => handleCheckAll('left', c)} />
86
+ <span class="lm-transfer__title">{titles[0]}</span>
87
+ <span class="lm-transfer__count">{leftChecked.size}/{filteredLeftData.length}</span>
88
+ </div>
89
+ {#if filterable}
90
+ <div class="lm-transfer__filter">
91
+ <input type="text" class="lm-transfer__filter-input" placeholder={filterPlaceholder} bind:value={leftFilter} {disabled} />
92
+ </div>
93
+ {/if}
94
+ <div class="lm-transfer__body">
95
+ {#if filteredLeftData.length > 0}
96
+ <ul class="lm-transfer__list">
97
+ {#each filteredLeftData as item (item.key)}
98
+ <li class="lm-transfer__item{leftChecked.has(item.key) ? ' is-checked' : ''}{item.disabled ? ' is-disabled' : ''}">
99
+ <Checkbox checked={leftChecked.has(item.key)} disabled={disabled || item.disabled} onchange={(c: boolean) => handleCheck('left', item.key, c)} label={item.label} />
100
+ </li>
101
+ {/each}
102
+ </ul>
103
+ {:else}
104
+ <div class="lm-transfer__empty">无数据</div>
105
+ {/if}
106
+ </div>
107
+ </div>
108
+
109
+ <div class="lm-transfer__buttons">
110
+ <button type="button" class="lm-transfer__button" disabled={disabled || leftChecked.size === 0} onclick={moveToRight}>
111
+ {#if buttonTexts[1]}<span>{buttonTexts[1]}</span>{/if}
112
+ <Icon icon={ChevronRight} size={14} />
113
+ </button>
114
+ <button type="button" class="lm-transfer__button" disabled={disabled || rightChecked.size === 0} onclick={moveToLeft}>
115
+ <Icon icon={ChevronLeft} size={14} />
116
+ {#if buttonTexts[0]}<span>{buttonTexts[0]}</span>{/if}
117
+ </button>
118
+ </div>
119
+
120
+ <div class="lm-transfer__panel">
121
+ <div class="lm-transfer__header">
122
+ <Checkbox checked={isAllRightChecked} indeterminate={isRightIndeterminate} disabled={disabled || filteredRightData.length === 0} onchange={(c: boolean) => handleCheckAll('right', c)} />
123
+ <span class="lm-transfer__title">{titles[1]}</span>
124
+ <span class="lm-transfer__count">{rightChecked.size}/{filteredRightData.length}</span>
125
+ </div>
126
+ {#if filterable}
127
+ <div class="lm-transfer__filter">
128
+ <input type="text" class="lm-transfer__filter-input" placeholder={filterPlaceholder} bind:value={rightFilter} {disabled} />
129
+ </div>
130
+ {/if}
131
+ <div class="lm-transfer__body">
132
+ {#if filteredRightData.length > 0}
133
+ <ul class="lm-transfer__list">
134
+ {#each filteredRightData as item (item.key)}
135
+ <li class="lm-transfer__item{rightChecked.has(item.key) ? ' is-checked' : ''}{item.disabled ? ' is-disabled' : ''}">
136
+ <Checkbox checked={rightChecked.has(item.key)} disabled={disabled || item.disabled} onchange={(c: boolean) => handleCheck('right', item.key, c)} label={item.label} />
137
+ </li>
138
+ {/each}
139
+ </ul>
140
+ {:else}
141
+ <div class="lm-transfer__empty">无数据</div>
142
+ {/if}
143
+ </div>
144
+ </div>
145
+ </div>
@@ -0,0 +1,14 @@
1
+ import type { TransferItem } from './types';
2
+ interface TransferProps {
3
+ data?: TransferItem[];
4
+ modelValue?: (string | number)[];
5
+ filterable?: boolean;
6
+ filterPlaceholder?: string;
7
+ titles?: [string, string];
8
+ buttonTexts?: [string, string];
9
+ disabled?: boolean;
10
+ class?: string;
11
+ }
12
+ declare const Transfer: import("svelte").Component<TransferProps, {}, "modelValue">;
13
+ type Transfer = ReturnType<typeof Transfer>;
14
+ export default Transfer;
@@ -0,0 +1,4 @@
1
+ import Transfer from './Transfer.svelte';
2
+ export default Transfer;
3
+ export { Transfer };
4
+ export type { TransferProps, TransferItem, TransferDirection } from './types';
@@ -0,0 +1,3 @@
1
+ import Transfer from './Transfer.svelte';
2
+ export default Transfer;
3
+ export { Transfer };
@@ -0,0 +1,16 @@
1
+ export interface TransferItem {
2
+ key: string | number;
3
+ label: string;
4
+ disabled?: boolean;
5
+ }
6
+ export type TransferDirection = 'left' | 'right';
7
+ export interface TransferProps {
8
+ data?: TransferItem[];
9
+ modelValue?: (string | number)[];
10
+ filterable?: boolean;
11
+ filterPlaceholder?: string;
12
+ titles?: [string, string];
13
+ buttonTexts?: [string, string];
14
+ disabled?: boolean;
15
+ class?: string;
16
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,148 @@
1
+ <script lang="ts">
2
+ import type { TreeNode as TreeNodeType } from './types'
3
+ import { onMount } from 'svelte'
4
+ import TreeNode from './TreeNode.svelte'
5
+
6
+ interface TreeProps {
7
+ data?: TreeNodeType[]
8
+ showCheckbox?: boolean
9
+ defaultExpandedKeys?: (string | number)[]
10
+ defaultCheckedKeys?: (string | number)[]
11
+ defaultExpandAll?: boolean
12
+ highlightCurrent?: boolean
13
+ accordion?: boolean
14
+ expandOnClickNode?: boolean
15
+ onnodeclick?: (node: TreeNodeType) => void
16
+ oncheck?: (checkedKeys: (string | number)[], node: TreeNodeType) => void
17
+ class?: string
18
+ }
19
+
20
+ let {
21
+ data = [],
22
+ showCheckbox = false,
23
+ defaultExpandedKeys = [],
24
+ defaultCheckedKeys = [],
25
+ defaultExpandAll = false,
26
+ highlightCurrent = false,
27
+ accordion = false,
28
+ expandOnClickNode = true,
29
+ onnodeclick,
30
+ oncheck,
31
+ class: cls = '',
32
+ ...attrs
33
+ }: TreeProps = $props()
34
+
35
+ let expandedKeys = $state(new Set<string | number>())
36
+ let checkedKeys = $state(new Set<string | number>())
37
+ let currentKey = $state<string | number | null>(null)
38
+ let reduceMotion = $state(false)
39
+
40
+ const expandCollapseDuration = $derived(reduceMotion ? 0 : 180)
41
+
42
+ // 初始化展开所有
43
+ const getAllKeys = (nodes: TreeNodeType[]): (string | number)[] => {
44
+ const keys: (string | number)[] = []
45
+ const traverse = (items: TreeNodeType[]): void => {
46
+ items.forEach((item) => {
47
+ keys.push(item.id)
48
+ if (item.children) traverse(item.children)
49
+ })
50
+ }
51
+ traverse(nodes)
52
+ return keys
53
+ }
54
+
55
+ const buildParentMap = (nodes: TreeNodeType[]): Map<string | number, string | number | null> => {
56
+ const map = new Map<string | number, string | number | null>()
57
+ const traverse = (items: TreeNodeType[], parentId: string | number | null): void => {
58
+ for (const item of items) {
59
+ map.set(item.id, parentId)
60
+ if (item.children && item.children.length > 0) {
61
+ traverse(item.children, item.id)
62
+ }
63
+ }
64
+ }
65
+ traverse(nodes, null)
66
+ return map
67
+ }
68
+
69
+ const parentMap = $derived.by(() => buildParentMap(data))
70
+
71
+ // 初始化默认展开和选中的节点
72
+ $effect(() => {
73
+ if (defaultExpandAll && data.length > 0) {
74
+ expandedKeys = new Set(getAllKeys(data))
75
+ } else if (defaultExpandedKeys.length > 0) {
76
+ expandedKeys = new Set(defaultExpandedKeys)
77
+ }
78
+ })
79
+
80
+ $effect(() => {
81
+ if (defaultCheckedKeys.length > 0) {
82
+ checkedKeys = new Set(defaultCheckedKeys)
83
+ }
84
+ })
85
+
86
+ const handleToggle = (node: TreeNodeType): void => {
87
+ const newKeys = new Set(expandedKeys)
88
+ if (newKeys.has(node.id)) {
89
+ newKeys.delete(node.id)
90
+ } else {
91
+ if (accordion) {
92
+ // 手风琴模式:关闭同级其他节点(同一 parent 下)
93
+ const parentId = parentMap.get(node.id) ?? null
94
+ for (const key of newKeys) {
95
+ const keyParent = parentMap.get(key) ?? null
96
+ if (keyParent === parentId) {
97
+ newKeys.delete(key)
98
+ }
99
+ }
100
+ }
101
+ newKeys.add(node.id)
102
+ }
103
+ expandedKeys = newKeys
104
+ }
105
+
106
+ onMount(() => {
107
+ if (typeof window !== 'undefined') {
108
+ reduceMotion = window.matchMedia?.('(prefers-reduced-motion: reduce)')?.matches ?? false
109
+ }
110
+ })
111
+
112
+ const handleNodeClick = (node: TreeNodeType): void => {
113
+ if (highlightCurrent) currentKey = node.id
114
+ onnodeclick?.(node)
115
+ }
116
+
117
+ const handleCheck = (node: TreeNodeType, checked: boolean): void => {
118
+ const newKeys = new Set(checkedKeys)
119
+ if (checked) {
120
+ newKeys.add(node.id)
121
+ } else {
122
+ newKeys.delete(node.id)
123
+ }
124
+ checkedKeys = newKeys
125
+ oncheck?.(Array.from(newKeys), node)
126
+ }
127
+
128
+ const classes = $derived(`lm-tree${cls ? ` ${cls}` : ''}`)
129
+ </script>
130
+
131
+ <div class={classes} role="tree" {...attrs}>
132
+ {#each data as node (node.id)}
133
+ <TreeNode
134
+ {node}
135
+ level={0}
136
+ {showCheckbox}
137
+ {expandedKeys}
138
+ {checkedKeys}
139
+ {currentKey}
140
+ {accordion}
141
+ {expandOnClickNode}
142
+ {expandCollapseDuration}
143
+ onnodeclick={handleNodeClick}
144
+ ontoggle={handleToggle}
145
+ oncheck={handleCheck}
146
+ />
147
+ {/each}
148
+ </div>
@@ -0,0 +1,17 @@
1
+ import type { TreeNode as TreeNodeType } from './types';
2
+ interface TreeProps {
3
+ data?: TreeNodeType[];
4
+ showCheckbox?: boolean;
5
+ defaultExpandedKeys?: (string | number)[];
6
+ defaultCheckedKeys?: (string | number)[];
7
+ defaultExpandAll?: boolean;
8
+ highlightCurrent?: boolean;
9
+ accordion?: boolean;
10
+ expandOnClickNode?: boolean;
11
+ onnodeclick?: (node: TreeNodeType) => void;
12
+ oncheck?: (checkedKeys: (string | number)[], node: TreeNodeType) => void;
13
+ class?: string;
14
+ }
15
+ declare const Tree: import("svelte").Component<TreeProps, {}, "">;
16
+ type Tree = ReturnType<typeof Tree>;
17
+ export default Tree;