@chenzy-design/svelte 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (476) hide show
  1. package/dist/components.json +1 -1
  2. package/package.json +7 -8
  3. package/src/_floating/use-floating.ts +0 -208
  4. package/src/anchor/Anchor.a11y.test.ts +0 -49
  5. package/src/anchor/Anchor.kbd.test.ts +0 -70
  6. package/src/anchor/Anchor.svelte +0 -359
  7. package/src/anchor/AnchorKbdFixture.svelte +0 -24
  8. package/src/anchor/index.ts +0 -3
  9. package/src/anchor/meta.ts +0 -70
  10. package/src/anchor/types.ts +0 -8
  11. package/src/autocomplete/AutoComplete.a11y.test.ts +0 -49
  12. package/src/autocomplete/AutoComplete.kbd.test.ts +0 -69
  13. package/src/autocomplete/AutoComplete.svelte +0 -706
  14. package/src/autocomplete/AutoCompleteKbdFixture.svelte +0 -24
  15. package/src/autocomplete/index.ts +0 -2
  16. package/src/autocomplete/meta.ts +0 -41
  17. package/src/avatar/Avatar.a11y.test.ts +0 -37
  18. package/src/avatar/Avatar.svelte +0 -315
  19. package/src/avatar/AvatarGroup.svelte +0 -142
  20. package/src/avatar/context.ts +0 -21
  21. package/src/avatar/index.ts +0 -10
  22. package/src/avatar/meta.ts +0 -73
  23. package/src/back-top/BackTop.a11y.test.ts +0 -40
  24. package/src/back-top/BackTop.svelte +0 -314
  25. package/src/back-top/index.ts +0 -2
  26. package/src/back-top/meta.ts +0 -108
  27. package/src/badge/Badge.a11y.test.ts +0 -35
  28. package/src/badge/Badge.svelte +0 -328
  29. package/src/badge/BadgeA11yFixture.svelte +0 -18
  30. package/src/badge/index.ts +0 -2
  31. package/src/badge/meta.ts +0 -62
  32. package/src/banner/Banner.a11y.test.ts +0 -48
  33. package/src/banner/Banner.svelte +0 -368
  34. package/src/banner/index.ts +0 -3
  35. package/src/banner/meta.ts +0 -121
  36. package/src/breadcrumb/Breadcrumb.a11y.test.ts +0 -35
  37. package/src/breadcrumb/Breadcrumb.kbd.test.ts +0 -45
  38. package/src/breadcrumb/Breadcrumb.svelte +0 -414
  39. package/src/breadcrumb/BreadcrumbKbdFixture.svelte +0 -23
  40. package/src/breadcrumb/Item.svelte +0 -77
  41. package/src/breadcrumb/context.ts +0 -27
  42. package/src/breadcrumb/index.ts +0 -21
  43. package/src/breadcrumb/meta.ts +0 -128
  44. package/src/breadcrumb/types.ts +0 -4
  45. package/src/button/Button.a11y.test.ts +0 -54
  46. package/src/button/Button.svelte +0 -176
  47. package/src/button/index.ts +0 -2
  48. package/src/button/meta.ts +0 -28
  49. package/src/calendar/Calendar.a11y.test.ts +0 -51
  50. package/src/calendar/Calendar.kbd.test.ts +0 -59
  51. package/src/calendar/Calendar.svelte +0 -1344
  52. package/src/calendar/CalendarKbdFixture.svelte +0 -23
  53. package/src/calendar/index.ts +0 -3
  54. package/src/calendar/meta.ts +0 -117
  55. package/src/card/Card.a11y.test.ts +0 -38
  56. package/src/card/Card.svelte +0 -341
  57. package/src/card/CardMeta.svelte +0 -60
  58. package/src/card/index.ts +0 -8
  59. package/src/card/meta.ts +0 -83
  60. package/src/carousel/Carousel.a11y.test.ts +0 -53
  61. package/src/carousel/Carousel.kbd.test.ts +0 -67
  62. package/src/carousel/Carousel.svelte +0 -806
  63. package/src/carousel/CarouselA11yFixture.svelte +0 -25
  64. package/src/carousel/CarouselKbdFixture.svelte +0 -24
  65. package/src/carousel/index.ts +0 -2
  66. package/src/carousel/meta.ts +0 -74
  67. package/src/cascader/Cascader.a11y.test.ts +0 -59
  68. package/src/cascader/Cascader.kbd.test.ts +0 -56
  69. package/src/cascader/Cascader.svelte +0 -1570
  70. package/src/cascader/CascaderKbdFixture.svelte +0 -31
  71. package/src/cascader/index.ts +0 -3
  72. package/src/cascader/meta.ts +0 -57
  73. package/src/cascader/types.ts +0 -9
  74. package/src/checkbox/Checkbox.svelte +0 -281
  75. package/src/checkbox/CheckboxGroup.a11y.test.ts +0 -43
  76. package/src/checkbox/CheckboxGroup.kbd.test.ts +0 -40
  77. package/src/checkbox/CheckboxGroup.svelte +0 -122
  78. package/src/checkbox/CheckboxGroupKbdFixture.svelte +0 -20
  79. package/src/checkbox/context.ts +0 -31
  80. package/src/checkbox/index.ts +0 -4
  81. package/src/checkbox/meta.ts +0 -67
  82. package/src/collapse/Collapse.a11y.test.ts +0 -53
  83. package/src/collapse/Collapse.kbd.test.ts +0 -89
  84. package/src/collapse/Collapse.svelte +0 -406
  85. package/src/collapse/CollapseA11yFixture.svelte +0 -27
  86. package/src/collapse/CollapseKbdFixture.svelte +0 -25
  87. package/src/collapse/CollapsePanel.svelte +0 -102
  88. package/src/collapse/context.ts +0 -54
  89. package/src/collapse/index.ts +0 -17
  90. package/src/collapse/meta.ts +0 -79
  91. package/src/collapse/types.ts +0 -5
  92. package/src/color-picker/ColorPicker.a11y.test.ts +0 -60
  93. package/src/color-picker/ColorPicker.kbd.test.ts +0 -73
  94. package/src/color-picker/ColorPicker.svelte +0 -985
  95. package/src/color-picker/ColorPickerKbdFixture.svelte +0 -25
  96. package/src/color-picker/index.ts +0 -2
  97. package/src/color-picker/meta.ts +0 -47
  98. package/src/config-provider/ConfigProvider.svelte +0 -227
  99. package/src/config-provider/context.ts +0 -29
  100. package/src/config-provider/index.ts +0 -48
  101. package/src/config-provider/meta.ts +0 -128
  102. package/src/date-picker/DatePicker.a11y.test.ts +0 -45
  103. package/src/date-picker/DatePicker.kbd.test.ts +0 -71
  104. package/src/date-picker/DatePicker.svelte +0 -1798
  105. package/src/date-picker/DatePickerKbdFixture.svelte +0 -26
  106. package/src/date-picker/RangePicker.kbd.test.ts +0 -69
  107. package/src/date-picker/RangePicker.svelte +0 -775
  108. package/src/date-picker/RangePickerKbdFixture.svelte +0 -30
  109. package/src/date-picker/index.ts +0 -4
  110. package/src/date-picker/meta.ts +0 -67
  111. package/src/date-picker/range-meta.ts +0 -44
  112. package/src/descriptions/Descriptions.a11y.test.ts +0 -33
  113. package/src/descriptions/Descriptions.svelte +0 -287
  114. package/src/descriptions/DescriptionsItem.svelte +0 -43
  115. package/src/descriptions/context.ts +0 -21
  116. package/src/descriptions/index.ts +0 -16
  117. package/src/descriptions/meta.ts +0 -45
  118. package/src/descriptions/types.ts +0 -6
  119. package/src/divider/Divider.a11y.test.ts +0 -23
  120. package/src/divider/Divider.svelte +0 -154
  121. package/src/divider/index.ts +0 -2
  122. package/src/divider/meta.ts +0 -23
  123. package/src/drawer/Drawer.a11y.test.ts +0 -41
  124. package/src/drawer/Drawer.kbd.test.ts +0 -67
  125. package/src/drawer/Drawer.svelte +0 -554
  126. package/src/drawer/DrawerKbdFixture.svelte +0 -28
  127. package/src/drawer/index.ts +0 -2
  128. package/src/drawer/meta.ts +0 -127
  129. package/src/dropdown/Dropdown.a11y.test.ts +0 -46
  130. package/src/dropdown/Dropdown.kbd.test.ts +0 -56
  131. package/src/dropdown/Dropdown.svelte +0 -573
  132. package/src/dropdown/DropdownA11yFixture.svelte +0 -24
  133. package/src/dropdown/DropdownDivider.svelte +0 -17
  134. package/src/dropdown/DropdownItem.svelte +0 -127
  135. package/src/dropdown/DropdownItemNode.svelte +0 -355
  136. package/src/dropdown/DropdownKbdFixture.svelte +0 -26
  137. package/src/dropdown/DropdownMenu.svelte +0 -24
  138. package/src/dropdown/DropdownSubMenu.svelte +0 -212
  139. package/src/dropdown/DropdownTitle.svelte +0 -34
  140. package/src/dropdown/context.ts +0 -13
  141. package/src/dropdown/index.ts +0 -36
  142. package/src/dropdown/meta.ts +0 -97
  143. package/src/dropdown/types.test.ts +0 -50
  144. package/src/dropdown/types.ts +0 -67
  145. package/src/empty/Empty.a11y.test.ts +0 -24
  146. package/src/empty/Empty.svelte +0 -304
  147. package/src/empty/index.ts +0 -2
  148. package/src/empty/meta.ts +0 -41
  149. package/src/form/Field.svelte +0 -492
  150. package/src/form/FieldArray.svelte +0 -75
  151. package/src/form/Form.a11y.test.ts +0 -39
  152. package/src/form/Form.svelte +0 -243
  153. package/src/form/FormA11yFixture.svelte +0 -31
  154. package/src/form/FormCascader.svelte +0 -82
  155. package/src/form/FormCheckbox.svelte +0 -83
  156. package/src/form/FormDatePicker.svelte +0 -80
  157. package/src/form/FormErrorMessage.svelte +0 -44
  158. package/src/form/FormInput.svelte +0 -95
  159. package/src/form/FormLabel.svelte +0 -46
  160. package/src/form/FormRadio.svelte +0 -83
  161. package/src/form/FormRating.svelte +0 -85
  162. package/src/form/FormSection.svelte +0 -45
  163. package/src/form/FormSelect.svelte +0 -96
  164. package/src/form/FormSlider.svelte +0 -95
  165. package/src/form/FormSlot.svelte +0 -51
  166. package/src/form/FormSwitch.svelte +0 -82
  167. package/src/form/FormTagInput.svelte +0 -79
  168. package/src/form/FormTreeSelect.svelte +0 -85
  169. package/src/form/FormUpload.svelte +0 -92
  170. package/src/form/context.ts +0 -47
  171. package/src/form/index.ts +0 -22
  172. package/src/form/meta.ts +0 -85
  173. package/src/grid/Col.svelte +0 -142
  174. package/src/grid/Grid.a11y.test.ts +0 -14
  175. package/src/grid/GridA11yFixture.svelte +0 -12
  176. package/src/grid/Row.svelte +0 -116
  177. package/src/grid/index.ts +0 -3
  178. package/src/grid/meta.ts +0 -72
  179. package/src/grid/use-breakpoint.svelte.ts +0 -48
  180. package/src/highlight/Highlight.a11y.test.ts +0 -25
  181. package/src/highlight/Highlight.svelte +0 -99
  182. package/src/highlight/index.ts +0 -2
  183. package/src/highlight/meta.ts +0 -80
  184. package/src/icon/Icon.svelte +0 -156
  185. package/src/icon/index.ts +0 -2
  186. package/src/icon/meta.ts +0 -41
  187. package/src/image/Image.a11y.test.ts +0 -30
  188. package/src/image/Image.svelte +0 -387
  189. package/src/image/ImagePreview.kbd.test.ts +0 -52
  190. package/src/image/ImagePreview.svelte +0 -309
  191. package/src/image/ImagePreviewGroup.svelte +0 -93
  192. package/src/image/ImagePreviewKbdFixture.svelte +0 -32
  193. package/src/image/context.ts +0 -26
  194. package/src/image/index.ts +0 -15
  195. package/src/image/meta.ts +0 -131
  196. package/src/index.ts +0 -208
  197. package/src/input/Input.a11y.test.ts +0 -58
  198. package/src/input/Input.svelte +0 -505
  199. package/src/input/index.ts +0 -2
  200. package/src/input/meta.ts +0 -40
  201. package/src/input-number/InputNumber.a11y.test.ts +0 -43
  202. package/src/input-number/InputNumber.kbd.test.ts +0 -41
  203. package/src/input-number/InputNumber.svelte +0 -674
  204. package/src/input-number/InputNumberKbdFixture.svelte +0 -15
  205. package/src/input-number/index.ts +0 -2
  206. package/src/input-number/meta.ts +0 -65
  207. package/src/layout/Content.svelte +0 -37
  208. package/src/layout/Footer.svelte +0 -49
  209. package/src/layout/Header.svelte +0 -46
  210. package/src/layout/Layout.a11y.test.ts +0 -34
  211. package/src/layout/Layout.svelte +0 -60
  212. package/src/layout/LayoutA11yFixture.svelte +0 -21
  213. package/src/layout/Sider.svelte +0 -207
  214. package/src/layout/index.ts +0 -26
  215. package/src/layout/meta.ts +0 -116
  216. package/src/list/List.a11y.test.ts +0 -69
  217. package/src/list/List.bench.ts +0 -26
  218. package/src/list/List.kbd.test.ts +0 -71
  219. package/src/list/List.svelte +0 -920
  220. package/src/list/ListA11yFixture.svelte +0 -38
  221. package/src/list/ListBenchFixture.svelte +0 -22
  222. package/src/list/ListItem.svelte +0 -175
  223. package/src/list/ListKbdFixture.svelte +0 -31
  224. package/src/list/ListMeta.svelte +0 -73
  225. package/src/list/context.ts +0 -39
  226. package/src/list/index.ts +0 -21
  227. package/src/list/meta.ts +0 -99
  228. package/src/locale-provider/LocaleProvider.svelte +0 -110
  229. package/src/locale-provider/context.ts +0 -22
  230. package/src/locale-provider/index.ts +0 -21
  231. package/src/locale-provider/meta.ts +0 -93
  232. package/src/locale-provider/use-locale.ts +0 -25
  233. package/src/lottie-icon/LottieIcon.svelte +0 -330
  234. package/src/lottie-icon/index.ts +0 -9
  235. package/src/lottie-icon/meta.ts +0 -162
  236. package/src/menu/Menu.a11y.test.ts +0 -54
  237. package/src/menu/Menu.kbd.test.ts +0 -69
  238. package/src/menu/Menu.svelte +0 -762
  239. package/src/menu/MenuKbdFixture.svelte +0 -22
  240. package/src/menu/MenuPopupNode.svelte +0 -525
  241. package/src/menu/index.ts +0 -4
  242. package/src/menu/meta.ts +0 -137
  243. package/src/menu/types.ts +0 -120
  244. package/src/meta.test.ts +0 -173
  245. package/src/modal/ConfirmModal.svelte +0 -173
  246. package/src/modal/Modal.a11y.test.ts +0 -46
  247. package/src/modal/Modal.kbd.test.ts +0 -65
  248. package/src/modal/Modal.svelte +0 -511
  249. package/src/modal/ModalKbdFixture.svelte +0 -24
  250. package/src/modal/command.svelte.ts +0 -103
  251. package/src/modal/index.ts +0 -30
  252. package/src/modal/meta.ts +0 -165
  253. package/src/modal/z-stack.ts +0 -26
  254. package/src/notification/NotificationContainer.svelte +0 -192
  255. package/src/notification/NotificationItem.a11y.test.ts +0 -73
  256. package/src/notification/NotificationItem.svelte +0 -368
  257. package/src/notification/index.ts +0 -9
  258. package/src/notification/meta.ts +0 -120
  259. package/src/notification/store.ts +0 -191
  260. package/src/overflow-list/OverflowList.a11y.test.ts +0 -46
  261. package/src/overflow-list/OverflowList.kbd.test.ts +0 -34
  262. package/src/overflow-list/OverflowList.svelte +0 -539
  263. package/src/overflow-list/OverflowListA11yFixture.svelte +0 -22
  264. package/src/overflow-list/OverflowListKbdFixture.svelte +0 -21
  265. package/src/overflow-list/index.ts +0 -2
  266. package/src/overflow-list/meta.ts +0 -138
  267. package/src/pagination/Pagination.a11y.test.ts +0 -62
  268. package/src/pagination/Pagination.kbd.test.ts +0 -66
  269. package/src/pagination/Pagination.svelte +0 -428
  270. package/src/pagination/PaginationKbdFixture.svelte +0 -15
  271. package/src/pagination/index.ts +0 -2
  272. package/src/pagination/meta.ts +0 -73
  273. package/src/popconfirm/Popconfirm.a11y.test.ts +0 -46
  274. package/src/popconfirm/Popconfirm.kbd.test.ts +0 -42
  275. package/src/popconfirm/Popconfirm.svelte +0 -724
  276. package/src/popconfirm/PopconfirmA11yFixture.svelte +0 -34
  277. package/src/popconfirm/PopconfirmKbdFixture.svelte +0 -17
  278. package/src/popconfirm/index.ts +0 -2
  279. package/src/popconfirm/meta.ts +0 -200
  280. package/src/popover/Popover.a11y.test.ts +0 -58
  281. package/src/popover/Popover.kbd.test.ts +0 -42
  282. package/src/popover/Popover.svelte +0 -643
  283. package/src/popover/PopoverA11yFixture.svelte +0 -35
  284. package/src/popover/PopoverKbdFixture.svelte +0 -18
  285. package/src/popover/index.ts +0 -2
  286. package/src/popover/meta.ts +0 -103
  287. package/src/progress/Progress.a11y.test.ts +0 -37
  288. package/src/progress/Progress.svelte +0 -423
  289. package/src/progress/index.ts +0 -3
  290. package/src/progress/meta.ts +0 -132
  291. package/src/radio/Radio.svelte +0 -330
  292. package/src/radio/RadioGroup.a11y.test.ts +0 -43
  293. package/src/radio/RadioGroup.kbd.test.ts +0 -75
  294. package/src/radio/RadioGroup.svelte +0 -199
  295. package/src/radio/RadioGroupKbdFixture.svelte +0 -21
  296. package/src/radio/context.ts +0 -42
  297. package/src/radio/index.ts +0 -4
  298. package/src/radio/meta.ts +0 -68
  299. package/src/rating/Rating.a11y.test.ts +0 -41
  300. package/src/rating/Rating.kbd.test.ts +0 -48
  301. package/src/rating/Rating.svelte +0 -407
  302. package/src/rating/RatingKbdFixture.svelte +0 -15
  303. package/src/rating/index.ts +0 -2
  304. package/src/rating/meta.ts +0 -40
  305. package/src/resize-observer/ResizeObserver.svelte +0 -169
  306. package/src/resize-observer/action.ts +0 -80
  307. package/src/resize-observer/index.ts +0 -9
  308. package/src/resize-observer/meta.ts +0 -102
  309. package/src/scroll-list/ScrollColumn.svelte +0 -592
  310. package/src/scroll-list/ScrollList.svelte +0 -257
  311. package/src/scroll-list/index.ts +0 -4
  312. package/src/scroll-list/meta.ts +0 -93
  313. package/src/scroll-list/types.ts +0 -18
  314. package/src/select/Select.a11y.test.ts +0 -59
  315. package/src/select/Select.kbd.test.ts +0 -59
  316. package/src/select/Select.svelte +0 -1155
  317. package/src/select/SelectKbdFixture.svelte +0 -29
  318. package/src/select/index.ts +0 -3
  319. package/src/select/meta.ts +0 -78
  320. package/src/select/types.ts +0 -2
  321. package/src/side-sheet/SideSheet.a11y.test.ts +0 -53
  322. package/src/side-sheet/SideSheet.kbd.test.ts +0 -63
  323. package/src/side-sheet/SideSheet.svelte +0 -659
  324. package/src/side-sheet/SideSheetKbdFixture.svelte +0 -30
  325. package/src/side-sheet/index.ts +0 -2
  326. package/src/side-sheet/meta.ts +0 -116
  327. package/src/skeleton/Skeleton.a11y.test.ts +0 -35
  328. package/src/skeleton/Skeleton.svelte +0 -131
  329. package/src/skeleton/SkeletonAvatar.svelte +0 -82
  330. package/src/skeleton/SkeletonButton.svelte +0 -90
  331. package/src/skeleton/SkeletonImage.svelte +0 -100
  332. package/src/skeleton/SkeletonParagraph.svelte +0 -103
  333. package/src/skeleton/SkeletonTitle.svelte +0 -74
  334. package/src/skeleton/context.ts +0 -11
  335. package/src/skeleton/index.ts +0 -8
  336. package/src/skeleton/meta.ts +0 -65
  337. package/src/slider/Slider.a11y.test.ts +0 -44
  338. package/src/slider/Slider.kbd.test.ts +0 -74
  339. package/src/slider/Slider.svelte +0 -716
  340. package/src/slider/SliderKbdFixture.svelte +0 -21
  341. package/src/slider/index.ts +0 -2
  342. package/src/slider/meta.ts +0 -55
  343. package/src/space/Space.a11y.test.ts +0 -22
  344. package/src/space/Space.svelte +0 -109
  345. package/src/space/SpaceA11yFixture.svelte +0 -17
  346. package/src/space/index.ts +0 -2
  347. package/src/space/meta.ts +0 -27
  348. package/src/spin/Spin.a11y.test.ts +0 -29
  349. package/src/spin/Spin.svelte +0 -293
  350. package/src/spin/SpinA11yFixture.svelte +0 -18
  351. package/src/spin/index.ts +0 -2
  352. package/src/spin/meta.ts +0 -72
  353. package/src/steps/Steps.a11y.test.ts +0 -39
  354. package/src/steps/Steps.kbd.test.ts +0 -73
  355. package/src/steps/Steps.svelte +0 -392
  356. package/src/steps/StepsKbdFixture.svelte +0 -21
  357. package/src/steps/index.ts +0 -3
  358. package/src/steps/meta.ts +0 -59
  359. package/src/steps/types.ts +0 -8
  360. package/src/switch/Switch.a11y.test.ts +0 -46
  361. package/src/switch/Switch.kbd.test.ts +0 -40
  362. package/src/switch/Switch.svelte +0 -310
  363. package/src/switch/SwitchKbdFixture.svelte +0 -22
  364. package/src/switch/index.ts +0 -2
  365. package/src/switch/meta.ts +0 -44
  366. package/src/table/Table.a11y.test.ts +0 -70
  367. package/src/table/Table.bench.ts +0 -51
  368. package/src/table/Table.kbd.test.ts +0 -94
  369. package/src/table/Table.svelte +0 -2327
  370. package/src/table/TableKbdFixture.svelte +0 -35
  371. package/src/table/grid-nav.test.ts +0 -173
  372. package/src/table/grid-nav.ts +0 -146
  373. package/src/table/index.ts +0 -13
  374. package/src/table/meta.ts +0 -121
  375. package/src/table/types.ts +0 -133
  376. package/src/tabs/TabPane.svelte +0 -92
  377. package/src/tabs/Tabs.a11y.test.ts +0 -47
  378. package/src/tabs/Tabs.kbd.test.ts +0 -74
  379. package/src/tabs/Tabs.svelte +0 -1128
  380. package/src/tabs/TabsA11yFixture.svelte +0 -20
  381. package/src/tabs/TabsKbdFixture.svelte +0 -25
  382. package/src/tabs/context.ts +0 -43
  383. package/src/tabs/index.ts +0 -14
  384. package/src/tabs/meta.ts +0 -152
  385. package/src/tabs/types.ts +0 -6
  386. package/src/tag/Tag.a11y.test.ts +0 -33
  387. package/src/tag/Tag.svelte +0 -366
  388. package/src/tag/TagA11yFixture.svelte +0 -18
  389. package/src/tag/index.ts +0 -2
  390. package/src/tag/meta.ts +0 -92
  391. package/src/tag-input/TagInput.a11y.test.ts +0 -41
  392. package/src/tag-input/TagInput.svelte +0 -544
  393. package/src/tag-input/index.ts +0 -2
  394. package/src/tag-input/meta.ts +0 -43
  395. package/src/tag-input/reorder.test.ts +0 -59
  396. package/src/tag-input/reorder.ts +0 -41
  397. package/src/test-utils/LocaleHarness.svelte +0 -29
  398. package/src/test-utils/a11y.ts +0 -108
  399. package/src/test-utils/kbd.ts +0 -52
  400. package/src/textarea/TextArea.a11y.test.ts +0 -44
  401. package/src/textarea/TextArea.svelte +0 -420
  402. package/src/textarea/index.ts +0 -2
  403. package/src/textarea/meta.ts +0 -104
  404. package/src/time-picker/TimePicker.a11y.test.ts +0 -45
  405. package/src/time-picker/TimePicker.kbd.test.ts +0 -70
  406. package/src/time-picker/TimePicker.svelte +0 -1023
  407. package/src/time-picker/TimePickerKbdFixture.svelte +0 -23
  408. package/src/time-picker/index.ts +0 -2
  409. package/src/time-picker/meta.ts +0 -64
  410. package/src/timeline/Timeline.a11y.test.ts +0 -54
  411. package/src/timeline/Timeline.svelte +0 -599
  412. package/src/timeline/TimelineItem.svelte +0 -164
  413. package/src/timeline/context.ts +0 -28
  414. package/src/timeline/index.ts +0 -16
  415. package/src/timeline/meta.ts +0 -129
  416. package/src/timeline/types.ts +0 -9
  417. package/src/toast/Toast.a11y.test.ts +0 -67
  418. package/src/toast/ToastContainer.svelte +0 -184
  419. package/src/toast/ToastItem.svelte +0 -247
  420. package/src/toast/index.ts +0 -9
  421. package/src/toast/live-region.ts +0 -78
  422. package/src/toast/meta.ts +0 -95
  423. package/src/toast/store.ts +0 -187
  424. package/src/tooltip/Tooltip.a11y.test.ts +0 -41
  425. package/src/tooltip/Tooltip.kbd.test.ts +0 -37
  426. package/src/tooltip/Tooltip.svelte +0 -416
  427. package/src/tooltip/TooltipA11yFixture.svelte +0 -31
  428. package/src/tooltip/TooltipKbdFixture.svelte +0 -16
  429. package/src/tooltip/index.ts +0 -2
  430. package/src/tooltip/meta.ts +0 -59
  431. package/src/tooltip/placement.ts +0 -6
  432. package/src/transfer/Transfer.a11y.test.ts +0 -63
  433. package/src/transfer/Transfer.kbd.test.ts +0 -75
  434. package/src/transfer/Transfer.svelte +0 -1451
  435. package/src/transfer/TransferKbdFixture.svelte +0 -23
  436. package/src/transfer/group.test.ts +0 -55
  437. package/src/transfer/group.ts +0 -61
  438. package/src/transfer/index.ts +0 -3
  439. package/src/transfer/meta.ts +0 -55
  440. package/src/transfer/reorder.test.ts +0 -52
  441. package/src/transfer/reorder.ts +0 -42
  442. package/src/transfer/tree.test.ts +0 -44
  443. package/src/transfer/tree.ts +0 -52
  444. package/src/transfer/types.ts +0 -32
  445. package/src/tree/Tree.a11y.test.ts +0 -63
  446. package/src/tree/Tree.kbd.test.ts +0 -91
  447. package/src/tree/Tree.svelte +0 -1500
  448. package/src/tree/TreeKbdFixture.svelte +0 -30
  449. package/src/tree/index.ts +0 -3
  450. package/src/tree/meta.ts +0 -152
  451. package/src/tree-select/TreeSelect.a11y.test.ts +0 -52
  452. package/src/tree-select/TreeSelect.kbd.test.ts +0 -53
  453. package/src/tree-select/TreeSelect.svelte +0 -1611
  454. package/src/tree-select/TreeSelectKbdFixture.svelte +0 -20
  455. package/src/tree-select/index.ts +0 -3
  456. package/src/tree-select/meta.ts +0 -73
  457. package/src/tree-select/types.ts +0 -11
  458. package/src/tree-select/virtual.test.ts +0 -104
  459. package/src/typography/Link.svelte +0 -120
  460. package/src/typography/Paragraph.svelte +0 -92
  461. package/src/typography/Text.svelte +0 -93
  462. package/src/typography/Title.svelte +0 -91
  463. package/src/typography/Typography.a11y.test.ts +0 -34
  464. package/src/typography/TypographyA11yFixture.svelte +0 -27
  465. package/src/typography/TypographyBase.svelte +0 -807
  466. package/src/typography/index.ts +0 -16
  467. package/src/typography/meta.ts +0 -158
  468. package/src/upload/Upload.a11y.test.ts +0 -58
  469. package/src/upload/Upload.svelte +0 -1094
  470. package/src/upload/UploadA11yFixture.svelte +0 -23
  471. package/src/upload/index.ts +0 -3
  472. package/src/upload/meta.ts +0 -64
  473. package/src/upload/types.ts +0 -16
  474. package/src/virtual-list/VirtualList.svelte +0 -401
  475. package/src/virtual-list/index.ts +0 -2
  476. package/src/virtual-list/meta.ts +0 -106
@@ -1,706 +0,0 @@
1
- <!--
2
- AutoComplete — see specs/components/input/AutoComplete.spec.md
3
- 输入联想 + 本地过滤 + 键盘选择。Token-driven, a11y-correct (combobox + listbox)。
4
- remote:提供 onSearch 时输入防抖回调(searchDebounce ms),由外部更新 data;loading 显示 spinner。
5
- remote 模式本地不再过滤(外部已按 query 准备 data)。maxCount:建议项最多渲染条数(0=不限)。
6
- insetLabel:输入框内嵌前缀标签(string | Snippet)。openOnFocus:聚焦即展开建议列表。
7
- 分组:data 支持 { label, options }[],逻辑/键盘/maxCount 基于扁平序列(红线 #2 派生纯函数)。
8
- -->
9
- <script lang="ts">
10
- import type { Snippet } from 'svelte';
11
- import { useId, useDismiss } from '@chenzy-design/core';
12
- import { useLocale } from '../locale-provider/index.js';
13
-
14
- type ItemValue = string | number;
15
- type Item = ItemValue | { value: ItemValue; label?: string; disabled?: boolean };
16
- /** 分组项:含 options 即为分组 */
17
- type ItemGroup = { label: string; options: Item[] };
18
- type ItemOrGroup = Item | ItemGroup;
19
- type NormalizedItem = { value: ItemValue; label: string; disabled: boolean };
20
- type Size = 'small' | 'default' | 'large';
21
- type Status = 'default' | 'warning' | 'error';
22
- type Position = 'bottomLeft' | 'bottomRight' | 'topLeft' | 'topRight';
23
-
24
- function isGroup(o: ItemOrGroup): o is ItemGroup {
25
- return typeof o === 'object' && o !== null && Array.isArray((o as ItemGroup).options);
26
- }
27
-
28
- interface Props {
29
- value?: string;
30
- defaultValue?: string;
31
- /** 候选数据;可含分组项 { label, options: [] } */
32
- data?: ItemOrGroup[];
33
- open?: boolean;
34
- defaultOpen?: boolean;
35
- placeholder?: string;
36
- /** combobox 输入框可访问名;缺省回退到 placeholder 或 locale 默认 */
37
- ariaLabel?: string;
38
- /** 关联外部 label 的 id(优先于 ariaLabel) */
39
- ariaLabelledby?: string;
40
- /** 输入框内嵌前缀标签 */
41
- insetLabel?: string | Snippet;
42
- /** 聚焦即展开建议列表(默认 false,仅输入时展开) */
43
- openOnFocus?: boolean;
44
- size?: Size;
45
- status?: Status;
46
- disabled?: boolean;
47
- filter?: boolean;
48
- defaultActiveFirstOption?: boolean;
49
- clearable?: boolean;
50
- /** 远程搜索:输入防抖后回调(由外部更新 data,本地不再过滤) */
51
- onSearch?: (query: string) => void;
52
- /** 远程加载中(显示 spinner) */
53
- loading?: boolean;
54
- /** onSearch 防抖毫秒(默认 300) */
55
- searchDebounce?: number;
56
- /** 建议项最多渲染条数(0=不限制) */
57
- maxCount?: number;
58
- onChange?: (v: string) => void;
59
- onSelect?: (value: ItemValue) => void;
60
- onOpenChange?: (open: boolean) => void;
61
- /** 浮层宽度与触发器同宽(默认 true) */
62
- dropdownMatchSelectWidth?: boolean;
63
- /** 浮层挂载容器 */
64
- getPopupContainer?: () => HTMLElement;
65
- /** 浮层 className */
66
- dropdownClassName?: string;
67
- /** 浮层样式 */
68
- dropdownStyle?: string | Record<string, string>;
69
- /** 完全自定义触发器 */
70
- triggerRender?: Snippet<[{ value: string; placeholder: string; disabled: boolean }]>;
71
- /** 自定义候选项渲染 */
72
- renderItem?: Snippet<[{ item: NormalizedItem; isSelected: boolean }]>;
73
- /** 自定义已选项显示 */
74
- renderSelectedItem?: Snippet<[{ item: NormalizedItem }]>;
75
- /** 无候选时展示内容 */
76
- emptyContent?: Snippet | string;
77
- /** 输入框前缀 */
78
- prefix?: Snippet | string;
79
- /** 输入框后缀 */
80
- suffix?: Snippet | string;
81
- /** 显示清除按钮(clearable 的别名,showClear 优先) */
82
- showClear?: boolean;
83
- /** 自定义清除图标 */
84
- clearIcon?: Snippet;
85
- onBlur?: (e: FocusEvent) => void;
86
- onFocus?: (e: FocusEvent) => void;
87
- onClear?: () => void;
88
- /** 显式远程模式(关闭本地过滤),不依赖 onSearch 是否存在 */
89
- remote?: boolean;
90
- /** 挂载自动聚焦 */
91
- autoFocus?: boolean;
92
- /** 浮层位置 */
93
- position?: Position;
94
- }
95
-
96
- let {
97
- value = $bindable(),
98
- defaultValue = '',
99
- data = [],
100
- open = $bindable(),
101
- defaultOpen = false,
102
- placeholder = '',
103
- ariaLabel,
104
- ariaLabelledby,
105
- insetLabel,
106
- openOnFocus = false,
107
- size = 'default',
108
- status = 'default',
109
- disabled = false,
110
- filter = true,
111
- defaultActiveFirstOption = true,
112
- clearable = false,
113
- onSearch,
114
- loading = false,
115
- searchDebounce = 300,
116
- maxCount = 0,
117
- onChange,
118
- onSelect,
119
- onOpenChange,
120
- dropdownMatchSelectWidth = true,
121
- getPopupContainer,
122
- dropdownClassName,
123
- dropdownStyle,
124
- triggerRender,
125
- renderItem,
126
- renderSelectedItem,
127
- emptyContent,
128
- prefix,
129
- suffix,
130
- showClear,
131
- clearIcon,
132
- onBlur,
133
- onFocus,
134
- onClear,
135
- remote = false,
136
- autoFocus = false,
137
- position = 'bottomLeft',
138
- }: Props = $props();
139
-
140
- const loc = useLocale();
141
-
142
- const listId = useId('cd-autocomplete-list');
143
-
144
- // --- 受控值 (红线 #1): 不无条件回写 value,仅 onChange ---
145
- const isValueControlled = $derived(value !== undefined);
146
- let innerValue = $state(getInitialValue());
147
- const currentValue = $derived(isValueControlled ? (value ?? '') : innerValue);
148
-
149
- function getInitialValue(): string {
150
- return defaultValue;
151
- }
152
-
153
- function setValue(next: string) {
154
- if (!isValueControlled) innerValue = next;
155
- onChange?.(next);
156
- }
157
-
158
- // --- 受控 open (红线 #1): 不无条件回写 open,仅 onOpenChange ---
159
- const isOpenControlled = $derived(open !== undefined);
160
- let innerOpen = $state(getInitialOpen());
161
- const isOpen = $derived(isOpenControlled ? !!open : innerOpen);
162
-
163
- function getInitialOpen(): boolean {
164
- return defaultOpen;
165
- }
166
-
167
- function setOpen(next: boolean) {
168
- if (next === isOpen) return;
169
- if (!isOpenControlled) innerOpen = next;
170
- onOpenChange?.(next);
171
- if (!next) activeIndex = -1;
172
- }
173
-
174
- function normalize(it: Item): NormalizedItem {
175
- if (typeof it === 'string' || typeof it === 'number') {
176
- return { value: it, label: String(it), disabled: false };
177
- }
178
- return { value: it.value, label: it.label ?? String(it.value), disabled: it.disabled ?? false };
179
- }
180
-
181
- // remote 模式:外部已按 query 更新 data,本地不再过滤。
182
- // remote prop 显式开启时也禁用本地过滤,无需 onSearch。
183
- const isRemote = $derived(remote || onSearch !== undefined);
184
-
185
- // 是否含分组:决定渲染走分组结构还是扁平。
186
- const hasGroups = $derived(data.some(isGroup));
187
-
188
- // 过滤纯函数:复用于扁平序列与分组视图,保证两者一致。
189
- function matchOption(o: NormalizedItem): boolean {
190
- if (isRemote || !filter || currentValue === '') return true;
191
- const q = currentValue.toLowerCase();
192
- return (
193
- o.label.toLowerCase().includes(q) || String(o.value).toLowerCase().includes(q)
194
- );
195
- }
196
-
197
- // 候选条目:归一化 + 记录所属组(groupKey:组序号,无组为 -1),用于分组视图重组。
198
- type FlatItem = NormalizedItem & { groupKey: number };
199
-
200
- // 扁平候选序列(拍平分组并过滤/截断)——逻辑/键盘/maxCount/高亮统一基于它(红线 #2)。
201
- const options = $derived.by<FlatItem[]>(() => {
202
- const all: FlatItem[] = [];
203
- data.forEach((o, gi) => {
204
- if (isGroup(o)) {
205
- for (const child of o.options) all.push({ ...normalize(child), groupKey: gi });
206
- } else {
207
- all.push({ ...normalize(o), groupKey: -1 });
208
- }
209
- });
210
- const matched = all.filter(matchOption);
211
- return maxCount > 0 ? matched.slice(0, maxCount) : matched;
212
- });
213
-
214
- // 分组渲染视图:按原始组顺序聚合过滤后的候选 + 全局扁平索引(与 activeIndex 对齐)。
215
- // 仅 hasGroups 时使用;纯派生,无副作用(红线 #2)。
216
- const groupedView = $derived.by<{ key: number; label: string | null; items: { opt: FlatItem; flatIndex: number }[] }[]>(() => {
217
- if (!hasGroups) return [];
218
- const out: { key: number; label: string | null; items: { opt: FlatItem; flatIndex: number }[] }[] = [];
219
- options.forEach((opt, flatIndex) => {
220
- const label = opt.groupKey >= 0 ? (data[opt.groupKey] as ItemGroup).label : null;
221
- const last = out[out.length - 1];
222
- // 连续同组合并为同一段,保留原始相邻关系。
223
- if (last && last.key === opt.groupKey) {
224
- last.items.push({ opt, flatIndex });
225
- } else {
226
- out.push({ key: opt.groupKey, label, items: [{ opt, flatIndex }] });
227
- }
228
- });
229
- return out;
230
- });
231
-
232
- // --- roving 高亮 (红线 #2): activeIndex 本地 $state,不依赖挂载 registry ---
233
- let activeIndex = $state(-1);
234
-
235
- const activeOptionId = $derived(
236
- activeIndex >= 0 && activeIndex < options.length
237
- ? `${listId}-opt-${activeIndex}`
238
- : undefined,
239
- );
240
-
241
- // remote 模式下即便暂无候选也展开(显示 spinner / 空文案);本地模式无候选则不展开。
242
- const showDropdown = $derived(isOpen && (options.length > 0 || isRemote));
243
-
244
- // showClear 优先,clearable 兜底;两者任一为 true 时显示清除按钮。
245
- const effectiveClearable = $derived(showClear ?? clearable);
246
- const showClearBtn = $derived(effectiveClearable && !disabled && currentValue.length > 0);
247
-
248
- // 已选项:options 里找到与 currentValue 匹配的 label 对应项。
249
- const selectedItem = $derived(
250
- options.find((o) => o.label === currentValue) ?? null,
251
- );
252
-
253
- function openWithOptions() {
254
- if (!isRemote && options.length === 0) {
255
- setOpen(false);
256
- return;
257
- }
258
- setOpen(true);
259
- if (defaultActiveFirstOption) activeIndex = firstEnabledIndex();
260
- }
261
-
262
- function firstEnabledIndex(): number {
263
- return options.findIndex((o) => !o.disabled);
264
- }
265
-
266
- // --- remote 搜索防抖(命令式定时器 + cleanup,红线 #3)---
267
- let searchTimer: ReturnType<typeof setTimeout> | undefined;
268
- function scheduleSearch(q: string) {
269
- if (searchTimer !== undefined) clearTimeout(searchTimer);
270
- searchTimer = setTimeout(() => {
271
- searchTimer = undefined;
272
- onSearch?.(q);
273
- }, Math.max(0, searchDebounce));
274
- }
275
- // 卸载兜底清理。
276
- $effect(() => () => {
277
- if (searchTimer !== undefined) clearTimeout(searchTimer);
278
- });
279
-
280
- function handleInput(e: Event & { currentTarget: HTMLInputElement }) {
281
- const next = e.currentTarget.value;
282
- setValue(next);
283
- // 输入即打开浮层。openWithOptions 读取 derived options,
284
- // 它在本次更新已随 currentValue 变化;调用在事件处理器内,非 render 期。
285
- openWithOptions();
286
- // remote:防抖回调外部更新 data(受控值红线 #1:仅 onSearch,不回写)。
287
- if (onSearch) scheduleSearch(next);
288
- }
289
-
290
- function handleFocus(e: FocusEvent) {
291
- if (!disabled && openOnFocus) openWithOptions();
292
- onFocus?.(e);
293
- }
294
-
295
- function handleBlur(e: FocusEvent) {
296
- onBlur?.(e);
297
- }
298
-
299
- function commit(opt: NormalizedItem) {
300
- if (opt.disabled || disabled) return;
301
- setValue(opt.label);
302
- onSelect?.(opt.value);
303
- setOpen(false);
304
- }
305
-
306
- function clearAll() {
307
- if (disabled) return;
308
- setValue('');
309
- setOpen(false);
310
- onClear?.();
311
- }
312
-
313
- function moveActive(delta: number) {
314
- const len = options.length;
315
- if (len === 0) return;
316
- let next = activeIndex;
317
- for (let i = 0; i < len; i += 1) {
318
- next = (next + delta + len) % len;
319
- if (!options[next]?.disabled) {
320
- activeIndex = next;
321
- return;
322
- }
323
- }
324
- }
325
-
326
- function handleKeydown(e: KeyboardEvent) {
327
- if (disabled) return;
328
- switch (e.key) {
329
- case 'ArrowDown':
330
- e.preventDefault();
331
- if (!isOpen) openWithOptions();
332
- else moveActive(1);
333
- break;
334
- case 'ArrowUp':
335
- e.preventDefault();
336
- if (!isOpen) openWithOptions();
337
- else moveActive(-1);
338
- break;
339
- case 'Enter':
340
- if (isOpen && activeIndex >= 0) {
341
- e.preventDefault();
342
- const opt = options[activeIndex];
343
- if (opt) commit(opt);
344
- }
345
- break;
346
- case 'Escape':
347
- if (isOpen) {
348
- e.preventDefault();
349
- setOpen(false);
350
- }
351
- break;
352
- default:
353
- break;
354
- }
355
- }
356
-
357
- // autoFocus:命令式聚焦一次(红线 #3,SSR 安全)。
358
- let inputEl = $state<HTMLInputElement | null>(null);
359
- $effect(() => {
360
- if (autoFocus && inputEl && !disabled) {
361
- inputEl.focus();
362
- }
363
- });
364
-
365
- // --- useDismiss (红线 #3): 绑定放进 $effect,open 时绑、cleanup 解绑 ---
366
- let rootEl = $state<HTMLDivElement | null>(null);
367
-
368
- $effect(() => {
369
- if (!isOpen || !rootEl) return;
370
- const cleanup = useDismiss(rootEl, {
371
- onDismiss: () => setOpen(false),
372
- escape: true,
373
- outsideClick: true,
374
- });
375
- return cleanup;
376
- });
377
-
378
- // 浮层样式:dropdownMatchSelectWidth 时宽度与触发器同宽(inline-size: 100%)。
379
- const dropdownStyleStr = $derived.by(() => {
380
- const base = dropdownMatchSelectWidth ? 'inline-size: 100%' : '';
381
- if (!dropdownStyle) return base;
382
- if (typeof dropdownStyle === 'string') return base ? `${base}; ${dropdownStyle}` : dropdownStyle;
383
- const obj = Object.entries(dropdownStyle).map(([k, v]) => `${k}: ${v}`).join('; ');
384
- return base ? `${base}; ${obj}` : obj;
385
- });
386
-
387
- // 浮层位置映射到 CSS 定位。
388
- const dropdownPositionStyle = $derived.by(() => {
389
- switch (position) {
390
- case 'bottomRight':
391
- return 'inset-block-start: calc(100% + var(--cd-spacing-1)); inset-inline-end: 0; inset-inline-start: auto';
392
- case 'topLeft':
393
- return 'inset-block-end: calc(100% + var(--cd-spacing-1)); inset-block-start: auto; inset-inline-start: 0';
394
- case 'topRight':
395
- return 'inset-block-end: calc(100% + var(--cd-spacing-1)); inset-block-start: auto; inset-inline-end: 0; inset-inline-start: auto';
396
- default: // bottomLeft
397
- return '';
398
- }
399
- });
400
-
401
- const cls = $derived(
402
- [
403
- 'cd-autocomplete',
404
- `cd-autocomplete--${size}`,
405
- `cd-autocomplete--${status}`,
406
- disabled && 'cd-autocomplete--disabled',
407
- isOpen && 'cd-autocomplete--open',
408
- ]
409
- .filter(Boolean)
410
- .join(' '),
411
- );
412
-
413
- // combobox 输入框可访问名:ariaLabelledby > ariaLabel > placeholder(非空) > locale 默认
414
- const inputAriaLabel = $derived(
415
- ariaLabelledby ? undefined : (ariaLabel || placeholder || loc().t('AutoComplete.ariaLabel')),
416
- );
417
- </script>
418
-
419
- {#snippet optionRow(opt: NormalizedItem, i: number)}
420
- <!-- svelte-ignore a11y_click_events_have_key_events -->
421
- <div
422
- class="cd-autocomplete__option"
423
- class:cd-autocomplete__option--active={i === activeIndex}
424
- id={`${listId}-opt-${i}`}
425
- role="option"
426
- aria-selected={i === activeIndex}
427
- aria-disabled={opt.disabled || undefined}
428
- tabindex="-1"
429
- onpointerenter={() => {
430
- if (!opt.disabled) activeIndex = i;
431
- }}
432
- onclick={() => commit(opt)}
433
- >
434
- {#if renderItem}
435
- {@render renderItem({ item: opt, isSelected: opt.label === currentValue })}
436
- {:else}
437
- {opt.label}
438
- {/if}
439
- </div>
440
- {/snippet}
441
-
442
- <div class={cls} bind:this={rootEl}>
443
- {#if triggerRender}
444
- {@render triggerRender({ value: currentValue, placeholder, disabled })}
445
- {:else}
446
- <div class="cd-autocomplete__control">
447
- {#if prefix}
448
- <span class="cd-autocomplete__prefix">
449
- {#if typeof prefix === 'string'}{prefix}{:else}{@render prefix()}{/if}
450
- </span>
451
- {/if}
452
- {#if insetLabel}
453
- <span class="cd-autocomplete__inset-label">
454
- {#if typeof insetLabel === 'string'}{insetLabel}{:else}{@render insetLabel()}{/if}
455
- </span>
456
- {/if}
457
- <input
458
- class="cd-autocomplete__input"
459
- bind:this={inputEl}
460
- type="text"
461
- role="combobox"
462
- value={currentValue}
463
- {placeholder}
464
- {disabled}
465
- aria-label={inputAriaLabel}
466
- aria-labelledby={ariaLabelledby}
467
- aria-expanded={showDropdown}
468
- aria-controls={listId}
469
- aria-autocomplete="list"
470
- aria-activedescendant={activeOptionId}
471
- aria-invalid={status === 'error' || undefined}
472
- oninput={handleInput}
473
- onkeydown={handleKeydown}
474
- onfocus={handleFocus}
475
- onblur={handleBlur}
476
- />
477
-
478
- {#if renderSelectedItem && selectedItem}
479
- <span class="cd-autocomplete__selected">
480
- {@render renderSelectedItem({ item: selectedItem })}
481
- </span>
482
- {/if}
483
-
484
- {#if showClearBtn}
485
- <button type="button" class="cd-autocomplete__clear" aria-label={loc().t('AutoComplete.clear')} onclick={clearAll}>
486
- {#if clearIcon}
487
- {@render clearIcon()}
488
- {:else}
489
- <svg viewBox="0 0 16 16" width="14" height="14" aria-hidden="true" focusable="false">
490
- <path
491
- fill="currentColor"
492
- d="M8 1a7 7 0 1 0 0 14A7 7 0 0 0 8 1Zm2.5 9.1-1.4 1.4L8 9.4 6.5 11l-1.4-1.4L6.6 8 5.1 6.5 6.5 5.1 8 6.6 9.5 5.1l1.4 1.4L9.4 8l1.1 1.1Z"
493
- />
494
- </svg>
495
- {/if}
496
- </button>
497
- {/if}
498
-
499
- {#if suffix}
500
- <span class="cd-autocomplete__suffix">
501
- {#if typeof suffix === 'string'}{suffix}{:else}{@render suffix()}{/if}
502
- </span>
503
- {/if}
504
- </div>
505
- {/if}
506
-
507
- {#if showDropdown}
508
- <div
509
- class={['cd-autocomplete__dropdown', dropdownClassName].filter(Boolean).join(' ')}
510
- role="listbox"
511
- id={listId}
512
- aria-busy={loading || undefined}
513
- style={[dropdownPositionStyle, dropdownStyleStr].filter(Boolean).join('; ')}
514
- >
515
- {#if loading}
516
- <div class="cd-autocomplete__loading">
517
- <span class="cd-autocomplete__spinner" aria-hidden="true"></span>
518
- <span>{loc().t('AutoComplete.loading')}</span>
519
- </div>
520
- {/if}
521
- {#if options.length === 0 && !loading}
522
- <div class="cd-autocomplete__empty">
523
- {#if emptyContent}
524
- {#if typeof emptyContent === 'string'}{emptyContent}{:else}{@render emptyContent()}{/if}
525
- {:else}
526
- {loc().t('AutoComplete.emptyText')}
527
- {/if}
528
- </div>
529
- {:else if hasGroups}
530
- {#each groupedView as group, gi (group.label === null ? `g-${gi}` : `${group.key}-${group.label}`)}
531
- {#if group.label !== null}
532
- <div class="cd-autocomplete__group-label" role="presentation">{group.label}</div>
533
- {/if}
534
- {#each group.items as it (it.opt.value)}
535
- {@render optionRow(it.opt, it.flatIndex)}
536
- {/each}
537
- {/each}
538
- {:else}
539
- {#each options as opt, i (opt.value)}
540
- {@render optionRow(opt, i)}
541
- {/each}
542
- {/if}
543
- </div>
544
- {/if}
545
- </div>
546
-
547
- <style>
548
- .cd-autocomplete {
549
- position: relative;
550
- display: inline-flex;
551
- inline-size: 100%;
552
- font-size: var(--cd-input-font-size);
553
- }
554
- .cd-autocomplete__control {
555
- display: flex;
556
- align-items: center;
557
- gap: var(--cd-spacing-2);
558
- inline-size: 100%;
559
- block-size: var(--cd-input-height-default);
560
- padding-inline: var(--cd-input-padding-x);
561
- background: var(--cd-input-color-bg);
562
- border: 1px solid var(--cd-input-border);
563
- border-radius: var(--cd-input-radius);
564
- transition: border-color var(--cd-motion-duration-fast) var(--cd-motion-ease-standard);
565
- }
566
- .cd-autocomplete--small .cd-autocomplete__control {
567
- block-size: var(--cd-input-height-small);
568
- }
569
- .cd-autocomplete--large .cd-autocomplete__control {
570
- block-size: var(--cd-input-height-large);
571
- }
572
- .cd-autocomplete__control:focus-within {
573
- border-color: var(--cd-input-border-active);
574
- box-shadow: var(--cd-focus-ring);
575
- }
576
- .cd-autocomplete--warning .cd-autocomplete__control {
577
- border-color: var(--cd-input-border-warning);
578
- }
579
- .cd-autocomplete--error .cd-autocomplete__control {
580
- border-color: var(--cd-input-border-error);
581
- }
582
- .cd-autocomplete--disabled .cd-autocomplete__control {
583
- background: var(--cd-color-fill-0);
584
- color: var(--cd-color-text-3);
585
- cursor: not-allowed;
586
- }
587
- .cd-autocomplete__inset-label {
588
- display: inline-flex;
589
- align-items: center;
590
- flex: 0 0 auto;
591
- color: var(--cd-color-text-2);
592
- user-select: none;
593
- white-space: nowrap;
594
- }
595
- .cd-autocomplete__prefix,
596
- .cd-autocomplete__suffix {
597
- display: inline-flex;
598
- align-items: center;
599
- flex: 0 0 auto;
600
- color: var(--cd-color-text-2);
601
- user-select: none;
602
- white-space: nowrap;
603
- }
604
- .cd-autocomplete__input {
605
- flex: 1 1 auto;
606
- inline-size: 100%;
607
- min-inline-size: 0;
608
- block-size: 100%;
609
- margin: 0;
610
- padding: 0;
611
- border: none;
612
- background: transparent;
613
- color: inherit;
614
- font: inherit;
615
- outline: none;
616
- }
617
- .cd-autocomplete__input::placeholder {
618
- color: var(--cd-input-color-placeholder);
619
- }
620
- .cd-autocomplete__input:disabled {
621
- cursor: not-allowed;
622
- }
623
- .cd-autocomplete__clear {
624
- display: inline-flex;
625
- align-items: center;
626
- justify-content: center;
627
- flex: 0 0 auto;
628
- padding: 0;
629
- border: none;
630
- background: transparent;
631
- color: var(--cd-color-text-2);
632
- cursor: pointer;
633
- }
634
- .cd-autocomplete__clear:hover {
635
- color: var(--cd-color-text-0);
636
- }
637
- .cd-autocomplete__selected {
638
- display: inline-flex;
639
- align-items: center;
640
- flex: 0 0 auto;
641
- }
642
- .cd-autocomplete__dropdown {
643
- position: absolute;
644
- inset-block-start: calc(100% + var(--cd-spacing-1));
645
- inset-inline: 0;
646
- z-index: var(--cd-select-dropdown-z);
647
- max-block-size: 16rem;
648
- overflow-y: auto;
649
- padding-block: var(--cd-spacing-1);
650
- background: var(--cd-select-dropdown-bg);
651
- border-radius: var(--cd-select-dropdown-radius);
652
- box-shadow: var(--cd-select-dropdown-shadow);
653
- }
654
- .cd-autocomplete__option {
655
- padding: var(--cd-select-option-padding);
656
- cursor: pointer;
657
- }
658
- .cd-autocomplete__option--active {
659
- background: var(--cd-select-option-bg-hover);
660
- }
661
- .cd-autocomplete__option[aria-disabled='true'] {
662
- color: var(--cd-color-text-3);
663
- cursor: not-allowed;
664
- }
665
- .cd-autocomplete__group-label {
666
- padding: var(--cd-spacing-1) var(--cd-select-option-padding, var(--cd-spacing-2));
667
- color: var(--cd-color-text-3);
668
- font-size: var(--cd-font-size-1);
669
- font-weight: var(--cd-font-weight-medium, 500);
670
- user-select: none;
671
- }
672
- .cd-autocomplete__empty {
673
- padding: var(--cd-select-option-padding);
674
- color: var(--cd-color-text-3);
675
- text-align: center;
676
- }
677
- .cd-autocomplete__loading {
678
- display: flex;
679
- align-items: center;
680
- justify-content: center;
681
- gap: var(--cd-spacing-2);
682
- padding: var(--cd-select-option-padding);
683
- color: var(--cd-color-text-3);
684
- }
685
- .cd-autocomplete__spinner {
686
- inline-size: 1em;
687
- block-size: 1em;
688
- border: 2px solid var(--cd-color-border);
689
- border-block-start-color: var(--cd-color-primary);
690
- border-radius: var(--cd-radius-full);
691
- animation: cd-autocomplete-spin 0.7s linear infinite;
692
- }
693
- @keyframes cd-autocomplete-spin {
694
- to {
695
- transform: rotate(360deg);
696
- }
697
- }
698
- @media (prefers-reduced-motion: reduce) {
699
- .cd-autocomplete__control {
700
- transition: none;
701
- }
702
- .cd-autocomplete__spinner {
703
- animation: none;
704
- }
705
- }
706
- </style>