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,716 @@
1
+ <script lang="ts">
2
+ import { onMount, onDestroy, tick } from "svelte";
3
+ import { slide } from "svelte/transition";
4
+ import { createDropdownTransition } from "../utils";
5
+ import Icon from "../Icon/Icon.svelte";
6
+ import Checkbox from "../Checkbox";
7
+ import Tag from "../Tag";
8
+ import { ChevronDown, ChevronRight, X, Check, Loader2 } from "lucide";
9
+ import type { TreeSelectNode, TreeSelectProps } from "./types";
10
+
11
+ let {
12
+ modelValue = $bindable(),
13
+ data = [],
14
+ placeholder = "请选择",
15
+ disabled = false,
16
+ clearable = false,
17
+ multiple = false,
18
+ collapseTags = false,
19
+ maxCollapseTags = 1,
20
+ size = "default",
21
+ filterable = false,
22
+ filterMethod,
23
+ noMatchText = "无匹配数据",
24
+ noDataText = "暂无数据",
25
+ showCheckbox = false,
26
+ checkStrictly = false,
27
+ checkOnClickNode = false,
28
+ defaultExpandAll = false,
29
+ defaultExpandedKeys = [],
30
+ leafOnly = true,
31
+ props: propsConfig,
32
+ highlightCurrent = false,
33
+ lazy = false,
34
+ load,
35
+ showMenuArrow = true,
36
+ onvisiblechange,
37
+ onchange,
38
+ onnodeclick,
39
+ onclear,
40
+ onremove,
41
+ renderLabel,
42
+ class: cls = "",
43
+ ...attrs
44
+ }: TreeSelectProps = $props();
45
+
46
+ // 属性映射
47
+ const getNodeValue = (node: TreeSelectNode): string | number => {
48
+ const key = propsConfig?.value ?? "value";
49
+ return (node as Record<string, unknown>)[key] as string | number;
50
+ };
51
+
52
+ const getNodeLabel = (node: TreeSelectNode): string => {
53
+ const key = propsConfig?.label ?? "label";
54
+ return String((node as Record<string, unknown>)[key] ?? "");
55
+ };
56
+
57
+ const getNodeChildren = (
58
+ node: TreeSelectNode,
59
+ ): TreeSelectNode[] | undefined => {
60
+ const key = propsConfig?.children ?? "children";
61
+ return (node as Record<string, unknown>)[key] as
62
+ | TreeSelectNode[]
63
+ | undefined;
64
+ };
65
+
66
+ const isNodeDisabled = (node: TreeSelectNode): boolean => {
67
+ const key = propsConfig?.disabled ?? "disabled";
68
+ return Boolean((node as Record<string, unknown>)[key]);
69
+ };
70
+
71
+ const isNodeLeaf = (node: TreeSelectNode): boolean => {
72
+ const key = propsConfig?.isLeaf ?? "isLeaf";
73
+ const children = getNodeChildren(node);
74
+ if ((node as Record<string, unknown>)[key] !== undefined) {
75
+ return Boolean((node as Record<string, unknown>)[key]);
76
+ }
77
+ return !children || children.length === 0;
78
+ };
79
+
80
+ // 状态
81
+ let visible = $state(false);
82
+ let filterQuery = $state("");
83
+ let containerRef: HTMLDivElement | null = $state(null);
84
+ let inputRef: HTMLInputElement | null = $state(null);
85
+ let expandedKeys = $state(new Set<string | number>());
86
+ let loadingKeys = $state(new Set<string | number>());
87
+ let currentKey = $state<string | number | null>(null);
88
+ let loadedLazyData = $state(new Map<string | number, TreeSelectNode[]>());
89
+ let reduceMotion = $state(false);
90
+
91
+ const expandCollapseDuration = $derived(reduceMotion ? 0 : 180);
92
+
93
+ const dropdownTransition = $derived(createDropdownTransition(reduceMotion));
94
+
95
+ // 计算选中值数组
96
+ const selectedValues = $derived.by((): (string | number)[] => {
97
+ if (multiple) return Array.isArray(modelValue) ? modelValue : [];
98
+ return modelValue !== undefined &&
99
+ modelValue !== null &&
100
+ !Array.isArray(modelValue)
101
+ ? [modelValue]
102
+ : [];
103
+ });
104
+
105
+ // 构建扁平节点映射
106
+ const flattenNodes = $derived.by(() => {
107
+ const map = new Map<string | number, TreeSelectNode>();
108
+ const traverse = (nodes: TreeSelectNode[]): void => {
109
+ for (const node of nodes) {
110
+ map.set(getNodeValue(node), node);
111
+ const children = getNodeChildren(node);
112
+ if (children) traverse(children);
113
+ }
114
+ };
115
+ traverse(data);
116
+ // 也遍历懒加载的数据
117
+ loadedLazyData.forEach((children) => traverse(children));
118
+ return map;
119
+ });
120
+
121
+ // 查找节点
122
+ const findNode = (value: string | number): TreeSelectNode | undefined => {
123
+ return flattenNodes.get(value);
124
+ };
125
+
126
+ // 获取所有 key
127
+ const getAllKeys = (nodes: TreeSelectNode[]): (string | number)[] => {
128
+ const keys: (string | number)[] = [];
129
+ const traverse = (items: TreeSelectNode[]): void => {
130
+ for (const item of items) {
131
+ keys.push(getNodeValue(item));
132
+ const children = getNodeChildren(item);
133
+ if (children) traverse(children);
134
+ }
135
+ };
136
+ traverse(nodes);
137
+ return keys;
138
+ };
139
+
140
+ // 过滤节点
141
+ const defaultFilterMethod = (
142
+ query: string,
143
+ node: TreeSelectNode,
144
+ ): boolean => {
145
+ return getNodeLabel(node).toLowerCase().includes(query.toLowerCase());
146
+ };
147
+
148
+ const filterNodes = (
149
+ nodes: TreeSelectNode[],
150
+ query: string,
151
+ ): TreeSelectNode[] => {
152
+ if (!query) return nodes;
153
+
154
+ const filter = filterMethod ?? defaultFilterMethod;
155
+ const result: TreeSelectNode[] = [];
156
+
157
+ for (const node of nodes) {
158
+ const children = getNodeChildren(node);
159
+ const filteredChildren = children ? filterNodes(children, query) : [];
160
+ const nodeMatches = filter(query, node);
161
+
162
+ if (nodeMatches || filteredChildren.length > 0) {
163
+ result.push({
164
+ ...node,
165
+ children: filteredChildren.length > 0 ? filteredChildren : children,
166
+ });
167
+ }
168
+ }
169
+
170
+ return result;
171
+ };
172
+
173
+ const filteredData = $derived.by(() => {
174
+ if (!filterable || !filterQuery) return data;
175
+ return filterNodes(data, filterQuery);
176
+ });
177
+
178
+ const hasData = $derived(filteredData.length > 0);
179
+ const showNoMatch = $derived(filterable && filterQuery && !hasData);
180
+ const showNoData = $derived(!filterable && data.length === 0);
181
+
182
+ // 展开/收起
183
+ const toggleExpand = async (
184
+ node: TreeSelectNode,
185
+ e?: MouseEvent,
186
+ ): Promise<void> => {
187
+ e?.stopPropagation();
188
+ const value = getNodeValue(node);
189
+
190
+ // 懒加载
191
+ if (lazy && !isNodeLeaf(node) && !loadedLazyData.has(value) && load) {
192
+ loadingKeys = new Set([...loadingKeys, value]);
193
+
194
+ await new Promise<void>((resolve) => {
195
+ load(node, (children) => {
196
+ loadedLazyData = new Map([...loadedLazyData, [value, children]]);
197
+ loadingKeys = new Set([...loadingKeys].filter((k) => k !== value));
198
+ resolve();
199
+ });
200
+ });
201
+ }
202
+
203
+ const newExpanded = new Set(expandedKeys);
204
+ if (newExpanded.has(value)) {
205
+ newExpanded.delete(value);
206
+ } else {
207
+ newExpanded.add(value);
208
+ }
209
+ expandedKeys = newExpanded;
210
+ };
211
+
212
+ // 选中节点
213
+ const selectNode = (node: TreeSelectNode): void => {
214
+ if (isNodeDisabled(node)) return;
215
+
216
+ const value = getNodeValue(node);
217
+
218
+ // leafOnly 模式下只能选择叶子节点(非叶子点击由上层逻辑负责展开/收起)
219
+ if (leafOnly && !isNodeLeaf(node)) return;
220
+
221
+ onnodeclick?.(node);
222
+
223
+ if (multiple) {
224
+ const values = Array.isArray(modelValue) ? [...modelValue] : [];
225
+ const index = values.indexOf(value);
226
+ if (index > -1) {
227
+ values.splice(index, 1);
228
+ } else {
229
+ values.push(value);
230
+ }
231
+ modelValue = values;
232
+ onchange?.(values);
233
+ } else {
234
+ modelValue = value;
235
+ onchange?.(value);
236
+ visible = false;
237
+ }
238
+
239
+ if (highlightCurrent) {
240
+ currentKey = value;
241
+ }
242
+ };
243
+
244
+ // 复选框逻辑(支持父子关联或不关联)
245
+ const handleCheck = (node: TreeSelectNode, checked: boolean): void => {
246
+ if (isNodeDisabled(node)) return;
247
+
248
+ // leafOnly 模式下只允许勾选叶子节点
249
+ if (leafOnly && !isNodeLeaf(node)) return;
250
+
251
+ const value = getNodeValue(node);
252
+ let values = Array.isArray(modelValue) ? [...modelValue] : [];
253
+
254
+ if (checkStrictly) {
255
+ // 父子不关联
256
+ if (checked) {
257
+ if (!values.includes(value)) values.push(value);
258
+ } else {
259
+ values = values.filter((v) => v !== value);
260
+ }
261
+ } else {
262
+ // 父子关联
263
+ const getAllDescendants = (n: TreeSelectNode): (string | number)[] => {
264
+ const descendants: (string | number)[] = [getNodeValue(n)];
265
+ const children = getNodeChildren(n);
266
+ if (children) {
267
+ for (const child of children) {
268
+ descendants.push(...getAllDescendants(child));
269
+ }
270
+ }
271
+ return descendants;
272
+ };
273
+
274
+ const descendants = getAllDescendants(node);
275
+
276
+ if (checked) {
277
+ for (const d of descendants) {
278
+ if (!values.includes(d)) values.push(d);
279
+ }
280
+ } else {
281
+ values = values.filter((v) => !descendants.includes(v));
282
+ }
283
+ }
284
+
285
+ modelValue = values;
286
+ onchange?.(values);
287
+ };
288
+
289
+ // 是否选中
290
+ const isSelected = (node: TreeSelectNode): boolean => {
291
+ return selectedValues.includes(getNodeValue(node));
292
+ };
293
+
294
+ // 是否展开
295
+ const isExpanded = (node: TreeSelectNode): boolean => {
296
+ return expandedKeys.has(getNodeValue(node));
297
+ };
298
+
299
+ // 是否正在加载
300
+ const isLoading = (node: TreeSelectNode): boolean => {
301
+ return loadingKeys.has(getNodeValue(node));
302
+ };
303
+
304
+ // 获取节点的实际子节点(支持懒加载)
305
+ const getActualChildren = (
306
+ node: TreeSelectNode,
307
+ ): TreeSelectNode[] | undefined => {
308
+ const value = getNodeValue(node);
309
+ if (lazy && loadedLazyData.has(value)) {
310
+ return loadedLazyData.get(value);
311
+ }
312
+ return getNodeChildren(node);
313
+ };
314
+
315
+ // 复选框状态(半选)
316
+ const getCheckState = (
317
+ node: TreeSelectNode,
318
+ ): "checked" | "indeterminate" | "unchecked" => {
319
+ const value = getNodeValue(node);
320
+ if (selectedValues.includes(value)) return "checked";
321
+
322
+ if (!checkStrictly) {
323
+ const children = getActualChildren(node);
324
+ if (children && children.length > 0) {
325
+ const checkedCount = children.filter((c) =>
326
+ selectedValues.includes(getNodeValue(c)),
327
+ ).length;
328
+ if (checkedCount === children.length) return "checked";
329
+ if (checkedCount > 0) return "indeterminate";
330
+ }
331
+ }
332
+
333
+ return "unchecked";
334
+ };
335
+
336
+ // 显示值
337
+ const displayLabels = $derived.by(() => {
338
+ return selectedValues.map((v) => {
339
+ const node = findNode(v);
340
+ return node ? getNodeLabel(node) : String(v);
341
+ });
342
+ });
343
+
344
+ const displayValue = $derived.by(() => {
345
+ if (multiple) return "";
346
+ return displayLabels[0] ?? "";
347
+ });
348
+
349
+ // 打开/关闭
350
+ const open = (): void => {
351
+ if (disabled) return;
352
+ visible = true;
353
+ onvisiblechange?.(true);
354
+ if (filterable) {
355
+ tick().then(() => inputRef?.focus());
356
+ }
357
+ };
358
+
359
+ const close = (): void => {
360
+ visible = false;
361
+ filterQuery = "";
362
+ onvisiblechange?.(false);
363
+ };
364
+
365
+ const toggle = (): void => {
366
+ if (visible) close();
367
+ else open();
368
+ };
369
+
370
+ // 清空
371
+ const handleClear = (e: MouseEvent): void => {
372
+ e.stopPropagation();
373
+ modelValue = multiple ? [] : undefined;
374
+ filterQuery = "";
375
+ onchange?.(multiple ? [] : undefined);
376
+ onclear?.();
377
+ };
378
+
379
+ // 移除 Tag
380
+ const handleRemoveTag = (value: string | number): void => {
381
+ if (disabled) return;
382
+ const values = (Array.isArray(modelValue) ? modelValue : []).filter(
383
+ (v) => v !== value,
384
+ );
385
+ modelValue = values;
386
+ onchange?.(values);
387
+ onremove?.(value);
388
+ };
389
+
390
+ // 点击外部关闭
391
+ const handleClickOutside = (e: MouseEvent): void => {
392
+ if (containerRef && !containerRef.contains(e.target as Node)) {
393
+ close();
394
+ }
395
+ };
396
+
397
+ // 键盘事件
398
+ const handleKeydown = (e: KeyboardEvent): void => {
399
+ if (e.key === "Escape") {
400
+ close();
401
+ } else if (e.key === "Enter" && !visible) {
402
+ open();
403
+ }
404
+ };
405
+
406
+ // 输入过滤
407
+ const handleFilterInput = (e: Event): void => {
408
+ const target = e.target as HTMLInputElement;
409
+ filterQuery = target.value;
410
+
411
+ // 过滤时自动展开匹配的节点
412
+ if (filterQuery) {
413
+ const matchedKeys = new Set<string | number>();
414
+ const findMatchedParents = (
415
+ nodes: TreeSelectNode[],
416
+ parents: (string | number)[] = [],
417
+ ): void => {
418
+ for (const node of nodes) {
419
+ const value = getNodeValue(node);
420
+ const children = getNodeChildren(node);
421
+ const currentPath = [...parents, value];
422
+
423
+ const filter = filterMethod ?? defaultFilterMethod;
424
+ if (filter(filterQuery, node)) {
425
+ parents.forEach((p) => matchedKeys.add(p));
426
+ }
427
+
428
+ if (children) {
429
+ findMatchedParents(children, currentPath);
430
+ }
431
+ }
432
+ };
433
+ findMatchedParents(data);
434
+ expandedKeys = new Set([...expandedKeys, ...matchedKeys]);
435
+ }
436
+ };
437
+
438
+ // 初始化
439
+ onMount(() => {
440
+ document.addEventListener("click", handleClickOutside);
441
+
442
+ if (typeof window !== "undefined") {
443
+ reduceMotion =
444
+ window.matchMedia?.("(prefers-reduced-motion: reduce)")?.matches ??
445
+ false;
446
+ }
447
+
448
+ // 默认展开
449
+ if (defaultExpandAll) {
450
+ expandedKeys = new Set(getAllKeys(data));
451
+ } else if (defaultExpandedKeys.length > 0) {
452
+ expandedKeys = new Set(defaultExpandedKeys);
453
+ }
454
+ });
455
+
456
+ onDestroy(() => {
457
+ document.removeEventListener("click", handleClickOutside);
458
+ });
459
+
460
+ // 节点点击处理
461
+ const handleNodeClick = (node: TreeSelectNode): void => {
462
+ // 非叶子节点点击:展开/收起(而不是选中)
463
+ if (
464
+ (lazy && !isNodeLeaf(node)) ||
465
+ (getActualChildren(node)?.length ?? 0) > 0
466
+ ) {
467
+ if (!isNodeDisabled(node)) {
468
+ void toggleExpand(node);
469
+ }
470
+ return;
471
+ }
472
+
473
+ if (showCheckbox && multiple) {
474
+ // 有复选框时,点击节点切换复选框
475
+ if (checkOnClickNode) {
476
+ const state = getCheckState(node);
477
+ handleCheck(node, state !== "checked");
478
+ }
479
+ } else {
480
+ selectNode(node);
481
+ }
482
+ };
483
+
484
+ const classes = $derived(
485
+ [
486
+ "lm-tree-select",
487
+ disabled && "is-disabled",
488
+ visible && "is-focus",
489
+ multiple && "is-multiple",
490
+ size !== "default" && `lm-tree-select--${size}`,
491
+ cls,
492
+ ]
493
+ .filter(Boolean)
494
+ .join(" "),
495
+ );
496
+ </script>
497
+
498
+ {#snippet treeNode(node: TreeSelectNode, level: number = 0)}
499
+ {@const nodeValue = getNodeValue(node)}
500
+ {@const nodeLabel = getNodeLabel(node)}
501
+ {@const nodeDisabled = isNodeDisabled(node)}
502
+ {@const nodeLeaf = isNodeLeaf(node)}
503
+ {@const children = getActualChildren(node)}
504
+ {@const hasChildren = children && children.length > 0}
505
+ {@const expanded = isExpanded(node)}
506
+ {@const loading = isLoading(node)}
507
+ {@const selected = isSelected(node)}
508
+ {@const checkState = showCheckbox ? getCheckState(node) : "unchecked"}
509
+ {@const isCurrent = currentKey === nodeValue}
510
+
511
+ <div
512
+ class="lm-tree-select__tree-node"
513
+ class:is-current={highlightCurrent && isCurrent}
514
+ >
515
+ <div
516
+ class="lm-tree-select__node-content"
517
+ class:is-selected={selected && !showCheckbox}
518
+ class:is-disabled={nodeDisabled}
519
+ style="padding-left: {level * 18 + 8}px"
520
+ onclick={() => handleNodeClick(node)}
521
+ onkeydown={(e: KeyboardEvent) => {
522
+ if (e.key === "Enter" || e.key === " ") {
523
+ e.preventDefault();
524
+ handleNodeClick(node);
525
+ }
526
+ }}
527
+ role="treeitem"
528
+ tabindex={nodeDisabled ? -1 : 0}
529
+ aria-selected={selected}
530
+ aria-expanded={hasChildren || (lazy && !nodeLeaf) ? expanded : undefined}
531
+ aria-disabled={nodeDisabled}
532
+ >
533
+ <!-- 展开/收起按钮 -->
534
+ <button
535
+ type="button"
536
+ class="lm-tree-select__expand-icon"
537
+ class:is-expanded={expanded}
538
+ class:is-leaf={nodeLeaf && !lazy}
539
+ onclick={(e: MouseEvent) => toggleExpand(node, e)}
540
+ aria-label={expanded ? "收起" : "展开"}
541
+ tabindex="-1"
542
+ >
543
+ {#if loading}
544
+ <span class="lm-tree-select__loading">
545
+ <Icon icon={Loader2} size={14} />
546
+ </span>
547
+ {:else if !nodeLeaf || (lazy && !loadedLazyData.has(nodeValue) && !node.isLeaf)}
548
+ <Icon icon={ChevronRight} size={14} />
549
+ {/if}
550
+ </button>
551
+
552
+ <!-- 复选框 -->
553
+ {#if showCheckbox && multiple}
554
+ <span class="lm-tree-select__checkbox" role="presentation">
555
+ <Checkbox
556
+ checked={checkState === "checked"}
557
+ indeterminate={checkState === "indeterminate"}
558
+ disabled={nodeDisabled}
559
+ onchange={(checked) => handleCheck(node, checked)}
560
+ />
561
+ </span>
562
+ {/if}
563
+
564
+ <!-- 节点内容 -->
565
+ <span class="lm-tree-select__node-label">
566
+ {#if renderLabel}
567
+ {@render renderLabel({ node })}
568
+ {:else}
569
+ {nodeLabel}
570
+ {/if}
571
+ </span>
572
+
573
+ <!-- 选中标记(单选无复选框模式) -->
574
+ {#if selected && !showCheckbox && !multiple}
575
+ <span class="lm-tree-select__check-icon">
576
+ <Icon icon={Check} size={14} />
577
+ </span>
578
+ {/if}
579
+ </div>
580
+
581
+ <!-- 子节点 -->
582
+ {#if (hasChildren || loading) && expanded}
583
+ <div
584
+ class="lm-tree-select__children"
585
+ transition:slide={{ duration: expandCollapseDuration }}
586
+ >
587
+ {#if children}
588
+ {#each children as child (getNodeValue(child))}
589
+ {@render treeNode(child, level + 1)}
590
+ {/each}
591
+ {/if}
592
+ </div>
593
+ {/if}
594
+ </div>
595
+ {/snippet}
596
+
597
+ <div bind:this={containerRef} class={classes} {...attrs}>
598
+ <!-- 触发器 -->
599
+ <div
600
+ class="lm-tree-select__trigger"
601
+ class:is-focus={visible}
602
+ onclick={toggle}
603
+ onkeydown={handleKeydown}
604
+ role="combobox"
605
+ tabindex={disabled ? -1 : 0}
606
+ aria-expanded={visible}
607
+ aria-controls="lm-tree-select-dropdown"
608
+ aria-haspopup="tree"
609
+ aria-disabled={disabled}
610
+ >
611
+ {#if multiple && selectedValues.length > 0}
612
+ <!-- 多选 Tags -->
613
+ <div class="lm-tree-select__tags">
614
+ {#if collapseTags}
615
+ {#each displayLabels.slice(0, maxCollapseTags) as label, i (selectedValues[i])}
616
+ <Tag
617
+ size="small"
618
+ closable
619
+ onclose={() => handleRemoveTag(selectedValues[i])}
620
+ >
621
+ {label}
622
+ </Tag>
623
+ {/each}
624
+ {#if selectedValues.length > maxCollapseTags}
625
+ <Tag size="small">+{selectedValues.length - maxCollapseTags}</Tag>
626
+ {/if}
627
+ {:else}
628
+ {#each displayLabels as label, i (selectedValues[i])}
629
+ <Tag
630
+ size="small"
631
+ closable
632
+ onclose={() => handleRemoveTag(selectedValues[i])}
633
+ >
634
+ {label}
635
+ </Tag>
636
+ {/each}
637
+ {/if}
638
+
639
+ {#if filterable}
640
+ <input
641
+ bind:this={inputRef}
642
+ class="lm-tree-select__filter-input"
643
+ type="text"
644
+ value={filterQuery}
645
+ oninput={handleFilterInput}
646
+ onclick={(e: MouseEvent) => e.stopPropagation()}
647
+ placeholder={selectedValues.length === 0 ? placeholder : ""}
648
+ />
649
+ {/if}
650
+ </div>
651
+ {:else}
652
+ <!-- 单选显示 -->
653
+ {#if filterable && visible}
654
+ <input
655
+ bind:this={inputRef}
656
+ class="lm-tree-select__input"
657
+ type="text"
658
+ value={filterQuery}
659
+ oninput={handleFilterInput}
660
+ {placeholder}
661
+ />
662
+ {:else}
663
+ <span
664
+ class="lm-tree-select__value"
665
+ class:is-placeholder={!displayValue}
666
+ >
667
+ {displayValue || placeholder}
668
+ </span>
669
+ {/if}
670
+ {/if}
671
+
672
+ <!-- 清空/箭头 -->
673
+ <span class="lm-tree-select__suffix">
674
+ {#if clearable && selectedValues.length > 0 && !disabled}
675
+ <button
676
+ type="button"
677
+ class="lm-tree-select__clear"
678
+ onclick={handleClear}
679
+ aria-label="清除"
680
+ >
681
+ <Icon icon={X} size={14} />
682
+ </button>
683
+ {:else}
684
+ <span class="lm-tree-select__arrow" class:is-open={visible}>
685
+ <Icon icon={ChevronDown} size={14} />
686
+ </span>
687
+ {/if}
688
+ </span>
689
+ </div>
690
+
691
+ <!-- 下拉面板 -->
692
+ {#if visible}
693
+ <div
694
+ class="lm-tree-select__dropdown"
695
+ role="tree"
696
+ id="lm-tree-select-dropdown"
697
+ transition:dropdownTransition
698
+ >
699
+ {#if showMenuArrow}
700
+ <div class="lm-tree-select__menu-arrow" aria-hidden="true"></div>
701
+ {/if}
702
+
703
+ <div class="lm-tree-select__dropdown-content">
704
+ {#if showNoData}
705
+ <div class="lm-tree-select__empty">{noDataText}</div>
706
+ {:else if showNoMatch}
707
+ <div class="lm-tree-select__empty">{noMatchText}</div>
708
+ {:else}
709
+ {#each filteredData as node (getNodeValue(node))}
710
+ {@render treeNode(node, 0)}
711
+ {/each}
712
+ {/if}
713
+ </div>
714
+ </div>
715
+ {/if}
716
+ </div>
@@ -0,0 +1,4 @@
1
+ import type { TreeSelectProps } from './types';
2
+ declare const TreeSelect: import("svelte").Component<TreeSelectProps, {}, "modelValue">;
3
+ type TreeSelect = ReturnType<typeof TreeSelect>;
4
+ export default TreeSelect;