@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,505 +0,0 @@
1
- <!--
2
- Input — see specs/components/input/Input.spec.md
3
- Token-driven, a11y-correct (native <input>), controlled / uncontrolled.
4
- -->
5
- <script lang="ts">
6
- import type { Snippet } from 'svelte';
7
- import { tick } from 'svelte';
8
- import { useLocale } from '../locale-provider/index.js';
9
-
10
- type Size = 'small' | 'default' | 'large';
11
- type Status = 'default' | 'warning' | 'error';
12
-
13
- interface Props {
14
- value?: string;
15
- defaultValue?: string;
16
- size?: Size;
17
- disabled?: boolean;
18
- readonly?: boolean;
19
- placeholder?: string;
20
- clearable?: boolean;
21
- showCount?: boolean;
22
- maxLength?: number;
23
- status?: Status;
24
- type?: 'text' | 'password';
25
- prefix?: Snippet;
26
- suffix?: Snippet;
27
- /** 前置标签(在 input 框外左侧,如 "https://");传 Snippet 可自定义渲染 */
28
- addonBefore?: Snippet | string;
29
- /** 后置标签(在 input 框外右侧,如 ".com");传 Snippet 可自定义渲染 */
30
- addonAfter?: Snippet | string;
31
- /** 无边框模式 */
32
- borderless?: boolean;
33
- /** 自定义字符计数函数,替代默认 value.length(用于 showCount 展示和 maxLength 校验) */
34
- getValueLength?: (value: string) => number;
35
- /** 有值时隐藏 suffix(常用于清除按钮/搜索图标场景) */
36
- hideSuffix?: boolean;
37
- /** 调用 focus() 时传入 { preventScroll } 参数 */
38
- preventScroll?: boolean;
39
- /** 组件挂载时自动聚焦 */
40
- autoFocus?: boolean;
41
- name?: string;
42
- id?: string;
43
- ariaLabel?: string;
44
- ariaDescribedby?: string;
45
- /** 必填语义(Form.Field required 透传):输出 aria-required="true"。 */
46
- ariaRequired?: boolean;
47
- onChange?: (v: string) => void;
48
- onInput?: (v: string) => void;
49
- onClear?: () => void;
50
- /** 回车按下(spec §4 on:enterPress)。Enter 触发,composition 中不触发。 */
51
- onEnterPress?: (e: KeyboardEvent) => void;
52
- /** @deprecated 改用 onEnterPress(保留向后兼容)。 */
53
- onEnter?: (e: KeyboardEvent) => void;
54
- onFocus?: (e: FocusEvent) => void;
55
- onBlur?: (e: FocusEvent) => void;
56
- }
57
-
58
- let {
59
- value = $bindable(),
60
- defaultValue = '',
61
- size = 'default',
62
- disabled = false,
63
- readonly = false,
64
- placeholder,
65
- clearable = false,
66
- showCount = false,
67
- maxLength,
68
- status = 'default',
69
- type = 'text',
70
- prefix,
71
- suffix,
72
- addonBefore,
73
- addonAfter,
74
- borderless = false,
75
- getValueLength,
76
- hideSuffix = false,
77
- preventScroll = false,
78
- autoFocus = false,
79
- name,
80
- id,
81
- ariaLabel,
82
- ariaDescribedby,
83
- ariaRequired,
84
- onChange,
85
- onInput,
86
- onClear,
87
- onEnterPress,
88
- onEnter,
89
- onFocus,
90
- onBlur,
91
- }: Props = $props();
92
-
93
- const loc = useLocale();
94
-
95
- const isControlled = $derived(value !== undefined);
96
- let inner = $state(getInitialValue());
97
- const current = $derived(isControlled ? (value ?? '') : inner);
98
-
99
- function getInitialValue(): string {
100
- return defaultValue;
101
- }
102
-
103
- let composing = $state(false);
104
- let revealed = $state(false);
105
- const inputType = $derived(type === 'password' && !revealed ? 'password' : 'text');
106
-
107
- const len = $derived(getValueLength ? getValueLength(current) : [...current].length);
108
-
109
- function setValue(next: string) {
110
- // Controlled (`value=` / `bind:value`): the parent owns `value`. We do NOT
111
- // write the prop here — the change is propagated via `onChange` (callers
112
- // always invoke it). Writing the prop AND firing `onChange` is what creates
113
- // the value -> onChange -> value update loop (effect_update_depth_exceeded).
114
- // Uncontrolled: keep our own state in sync.
115
- if (!isControlled) inner = next;
116
- }
117
-
118
- function handleInput(e: Event & { currentTarget: HTMLInputElement }) {
119
- const next = e.currentTarget.value;
120
- setValue(next);
121
- onInput?.(next);
122
- if (!composing) onChange?.(next);
123
- }
124
-
125
- function handleChange(e: Event & { currentTarget: HTMLInputElement }) {
126
- if (composing) return;
127
- onChange?.(e.currentTarget.value);
128
- }
129
-
130
- function handleCompositionStart() {
131
- composing = true;
132
- }
133
-
134
- function handleCompositionEnd(e: Event & { currentTarget: HTMLInputElement }) {
135
- composing = false;
136
- const next = e.currentTarget.value;
137
- setValue(next);
138
- onChange?.(next);
139
- }
140
-
141
- function handleKeydown(e: KeyboardEvent) {
142
- if (e.key === 'Enter' && !composing) {
143
- onEnterPress?.(e);
144
- onEnter?.(e);
145
- }
146
- }
147
-
148
- function clear() {
149
- setValue('');
150
- onClear?.();
151
- onChange?.('');
152
- }
153
-
154
- function toggleReveal() {
155
- revealed = !revealed;
156
- }
157
-
158
- const showClear = $derived(clearable && !disabled && !readonly && current.length > 0);
159
-
160
- // suffix 显示条件:hideSuffix 为 true 且有值时隐藏
161
- const showSuffix = $derived(suffix && !(hideSuffix && current.length > 0));
162
-
163
- // addonBefore/addonAfter 的 Snippet 判断
164
- const addonBeforeSnippet = $derived(typeof addonBefore === 'function' ? (addonBefore as Snippet) : undefined);
165
- const addonAfterSnippet = $derived(typeof addonAfter === 'function' ? (addonAfter as Snippet) : undefined);
166
-
167
- const cls = $derived(
168
- [
169
- 'cd-input',
170
- `cd-input--${size}`,
171
- `cd-input--${status}`,
172
- disabled && 'cd-input--disabled',
173
- borderless && 'cd-input--borderless',
174
- ]
175
- .filter(Boolean)
176
- .join(' '),
177
- );
178
-
179
- // --- autoFocus 命令式(红线 #3)---
180
- let inputEl: HTMLInputElement | undefined;
181
-
182
- $effect(() => {
183
- if (!autoFocus || !inputEl) return;
184
- const el = inputEl;
185
- let raf: number;
186
- tick().then(() => {
187
- raf = requestAnimationFrame(() => el.focus({ preventScroll }));
188
- });
189
- return () => {
190
- if (raf !== undefined) cancelAnimationFrame(raf);
191
- };
192
- });
193
- </script>
194
-
195
- {#if addonBefore != null || addonAfter != null}
196
- <div class="cd-input-group">
197
- {#if addonBefore != null}
198
- <span class="cd-input__addon cd-input__addon--before">
199
- {#if addonBeforeSnippet}{@render addonBeforeSnippet()}{:else}{addonBefore}{/if}
200
- </span>
201
- {/if}
202
-
203
- <div class={cls} aria-invalid={status === 'error' || undefined}>
204
- {#if prefix}<span class="cd-input__affix cd-input__prefix">{@render prefix()}</span>{/if}
205
-
206
- <input
207
- bind:this={inputEl}
208
- class="cd-input__native"
209
- type={inputType}
210
- {name}
211
- {id}
212
- {disabled}
213
- {readonly}
214
- {placeholder}
215
- maxlength={maxLength}
216
- value={current}
217
- aria-label={ariaLabel}
218
- aria-describedby={ariaDescribedby}
219
- aria-required={ariaRequired || undefined}
220
- aria-invalid={status === 'error' || undefined}
221
- oninput={handleInput}
222
- onchange={handleChange}
223
- onkeydown={handleKeydown}
224
- oncompositionstart={handleCompositionStart}
225
- oncompositionend={handleCompositionEnd}
226
- onfocus={onFocus}
227
- onblur={onBlur}
228
- />
229
-
230
- {#if showClear}
231
- <button
232
- type="button"
233
- class="cd-input__action cd-input__clear"
234
- aria-label={loc().t('Input.clear')}
235
- onclick={clear}
236
- >
237
- <svg viewBox="0 0 16 16" width="14" height="14" aria-hidden="true" focusable="false">
238
- <path
239
- fill="currentColor"
240
- 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"
241
- />
242
- </svg>
243
- </button>
244
- {/if}
245
-
246
- {#if type === 'password'}
247
- <button
248
- type="button"
249
- class="cd-input__action cd-input__reveal"
250
- aria-label={revealed ? loc().t('Input.hidePassword') : loc().t('Input.showPassword')}
251
- aria-pressed={revealed}
252
- onclick={toggleReveal}
253
- >
254
- <svg viewBox="0 0 16 16" width="14" height="14" aria-hidden="true" focusable="false">
255
- {#if revealed}
256
- <path
257
- fill="currentColor"
258
- d="M8 3C4.5 3 1.7 5.1.5 8c1.2 2.9 4 5 7.5 5s6.3-2.1 7.5-5C14.3 5.1 11.5 3 8 3Zm0 8a3 3 0 1 1 0-6 3 3 0 0 1 0 6Zm0-4.5a1.5 1.5 0 1 0 0 3 1.5 1.5 0 0 0 0-3Z"
259
- />
260
- {:else}
261
- <path
262
- fill="currentColor"
263
- d="M2.1 1.4 1 2.5l2.3 2.3C2 5.6 1 6.7.5 8c1.2 2.9 4 5 7.5 5 1.3 0 2.6-.3 3.7-.8l2.3 2.3 1.1-1.1L2.1 1.4ZM8 11a3 3 0 0 1-2.8-4.1l1.3 1.3a1.5 1.5 0 0 0 2.3 2.3l1.3 1.3c-.6.2-1.3.2-2.1.2Zm0-8c3.5 0 6.3 2.1 7.5 5-.5 1.1-1.2 2.1-2.1 2.8l-2-2A3 3 0 0 0 8 5h-.4L6.1 3.5C6.7 3.2 7.3 3 8 3Z"
264
- />
265
- {/if}
266
- </svg>
267
- </button>
268
- {/if}
269
-
270
- {#if showCount}
271
- <span class="cd-input__count">
272
- {len}{#if maxLength !== undefined}/{maxLength}{/if}
273
- </span>
274
- {/if}
275
-
276
- {#if showSuffix}<span class="cd-input__affix cd-input__suffix">{@render suffix!()}</span>{/if}
277
- </div>
278
-
279
- {#if addonAfter != null}
280
- <span class="cd-input__addon cd-input__addon--after">
281
- {#if addonAfterSnippet}{@render addonAfterSnippet()}{:else}{addonAfter}{/if}
282
- </span>
283
- {/if}
284
- </div>
285
- {:else}
286
- <div class={cls} aria-invalid={status === 'error' || undefined}>
287
- {#if prefix}<span class="cd-input__affix cd-input__prefix">{@render prefix()}</span>{/if}
288
-
289
- <input
290
- bind:this={inputEl}
291
- class="cd-input__native"
292
- type={inputType}
293
- {name}
294
- {id}
295
- {disabled}
296
- {readonly}
297
- {placeholder}
298
- maxlength={maxLength}
299
- value={current}
300
- aria-label={ariaLabel}
301
- aria-describedby={ariaDescribedby}
302
- aria-required={ariaRequired || undefined}
303
- aria-invalid={status === 'error' || undefined}
304
- oninput={handleInput}
305
- onchange={handleChange}
306
- onkeydown={handleKeydown}
307
- oncompositionstart={handleCompositionStart}
308
- oncompositionend={handleCompositionEnd}
309
- onfocus={onFocus}
310
- onblur={onBlur}
311
- />
312
-
313
- {#if showClear}
314
- <button
315
- type="button"
316
- class="cd-input__action cd-input__clear"
317
- aria-label={loc().t('Input.clear')}
318
- onclick={clear}
319
- >
320
- <svg viewBox="0 0 16 16" width="14" height="14" aria-hidden="true" focusable="false">
321
- <path
322
- fill="currentColor"
323
- 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"
324
- />
325
- </svg>
326
- </button>
327
- {/if}
328
-
329
- {#if type === 'password'}
330
- <button
331
- type="button"
332
- class="cd-input__action cd-input__reveal"
333
- aria-label={revealed ? loc().t('Input.hidePassword') : loc().t('Input.showPassword')}
334
- aria-pressed={revealed}
335
- onclick={toggleReveal}
336
- >
337
- <svg viewBox="0 0 16 16" width="14" height="14" aria-hidden="true" focusable="false">
338
- {#if revealed}
339
- <path
340
- fill="currentColor"
341
- d="M8 3C4.5 3 1.7 5.1.5 8c1.2 2.9 4 5 7.5 5s6.3-2.1 7.5-5C14.3 5.1 11.5 3 8 3Zm0 8a3 3 0 1 1 0-6 3 3 0 0 1 0 6Zm0-4.5a1.5 1.5 0 1 0 0 3 1.5 1.5 0 0 0 0-3Z"
342
- />
343
- {:else}
344
- <path
345
- fill="currentColor"
346
- d="M2.1 1.4 1 2.5l2.3 2.3C2 5.6 1 6.7.5 8c1.2 2.9 4 5 7.5 5 1.3 0 2.6-.3 3.7-.8l2.3 2.3 1.1-1.1L2.1 1.4ZM8 11a3 3 0 0 1-2.8-4.1l1.3 1.3a1.5 1.5 0 0 0 2.3 2.3l1.3 1.3c-.6.2-1.3.2-2.1.2Zm0-8c3.5 0 6.3 2.1 7.5 5-.5 1.1-1.2 2.1-2.1 2.8l-2-2A3 3 0 0 0 8 5h-.4L6.1 3.5C6.7 3.2 7.3 3 8 3Z"
347
- />
348
- {/if}
349
- </svg>
350
- </button>
351
- {/if}
352
-
353
- {#if showCount}
354
- <span class="cd-input__count">
355
- {len}{#if maxLength !== undefined}/{maxLength}{/if}
356
- </span>
357
- {/if}
358
-
359
- {#if showSuffix}<span class="cd-input__affix cd-input__suffix">{@render suffix!()}</span>{/if}
360
- </div>
361
- {/if}
362
-
363
- <style>
364
- .cd-input-group {
365
- display: inline-flex;
366
- align-items: stretch;
367
- inline-size: 100%;
368
- }
369
- .cd-input__addon {
370
- display: inline-flex;
371
- align-items: center;
372
- flex: 0 0 auto;
373
- padding-inline: var(--cd-input-padding-x);
374
- background: var(--cd-color-fill-0);
375
- color: var(--cd-color-text-2);
376
- border: 1px solid var(--cd-input-border);
377
- font-size: var(--cd-input-font-size);
378
- white-space: nowrap;
379
- user-select: none;
380
- }
381
- .cd-input__addon--before {
382
- border-inline-end: none;
383
- border-start-start-radius: var(--cd-input-radius);
384
- border-end-start-radius: var(--cd-input-radius);
385
- }
386
- .cd-input__addon--after {
387
- border-inline-start: none;
388
- border-start-end-radius: var(--cd-input-radius);
389
- border-end-end-radius: var(--cd-input-radius);
390
- }
391
- /* 有 addon 时,input wrapper 的圆角需要调整 */
392
- .cd-input-group .cd-input {
393
- flex: 1 1 auto;
394
- min-inline-size: 0;
395
- }
396
- .cd-input-group .cd-input:not(:first-child) {
397
- border-start-start-radius: 0;
398
- border-end-start-radius: 0;
399
- }
400
- .cd-input-group .cd-input:not(:last-child) {
401
- border-start-end-radius: 0;
402
- border-end-end-radius: 0;
403
- }
404
- .cd-input {
405
- display: inline-flex;
406
- align-items: center;
407
- gap: var(--cd-spacing-2);
408
- inline-size: 100%;
409
- block-size: var(--cd-input-height-default);
410
- padding-inline: var(--cd-input-padding-x);
411
- background: var(--cd-input-color-bg);
412
- color: var(--cd-input-color-text);
413
- border: 1px solid var(--cd-input-border);
414
- border-radius: var(--cd-input-radius);
415
- font-size: var(--cd-input-font-size);
416
- transition: border-color var(--cd-motion-duration-fast) var(--cd-motion-ease-standard);
417
- }
418
- .cd-input--small {
419
- block-size: var(--cd-input-height-small);
420
- font-size: var(--cd-font-size-1);
421
- }
422
- .cd-input--large {
423
- block-size: var(--cd-input-height-large);
424
- font-size: var(--cd-font-size-3);
425
- }
426
- .cd-input:focus-within {
427
- border-color: var(--cd-input-border-active);
428
- box-shadow: var(--cd-focus-ring);
429
- }
430
- .cd-input--warning {
431
- border-color: var(--cd-input-border-warning);
432
- }
433
- .cd-input--error {
434
- border-color: var(--cd-input-border-error);
435
- }
436
- .cd-input--disabled {
437
- background: var(--cd-color-fill-0);
438
- color: var(--cd-color-text-3);
439
- cursor: not-allowed;
440
- }
441
- .cd-input--borderless {
442
- border-color: transparent;
443
- background: transparent;
444
- box-shadow: none;
445
- }
446
- .cd-input--borderless:focus-within {
447
- border-color: transparent;
448
- box-shadow: none;
449
- }
450
- .cd-input__native {
451
- flex: 1 1 auto;
452
- inline-size: 100%;
453
- min-inline-size: 0;
454
- block-size: 100%;
455
- margin: 0;
456
- padding: 0;
457
- border: none;
458
- background: transparent;
459
- color: inherit;
460
- font: inherit;
461
- outline: none;
462
- }
463
- .cd-input__native::placeholder {
464
- color: var(--cd-input-color-placeholder);
465
- }
466
- .cd-input__native:disabled {
467
- cursor: not-allowed;
468
- }
469
- .cd-input__affix {
470
- display: inline-flex;
471
- align-items: center;
472
- color: var(--cd-color-text-2);
473
- flex: 0 0 auto;
474
- }
475
- .cd-input__action {
476
- display: inline-flex;
477
- align-items: center;
478
- justify-content: center;
479
- flex: 0 0 auto;
480
- padding: 0;
481
- border: none;
482
- background: transparent;
483
- color: var(--cd-color-text-2);
484
- cursor: pointer;
485
- border-radius: var(--cd-radius-1);
486
- }
487
- .cd-input__action:hover {
488
- color: var(--cd-color-text-0);
489
- }
490
- .cd-input__action:focus-visible {
491
- outline: none;
492
- box-shadow: var(--cd-focus-ring);
493
- }
494
- .cd-input__count {
495
- flex: 0 0 auto;
496
- color: var(--cd-color-text-3);
497
- font-size: var(--cd-font-size-1);
498
- white-space: nowrap;
499
- }
500
- @media (prefers-reduced-motion: reduce) {
501
- .cd-input {
502
- transition: none;
503
- }
504
- }
505
- </style>
@@ -1,2 +0,0 @@
1
- export { default as Input } from './Input.svelte';
2
- export { meta as inputMeta } from './meta.js';
package/src/input/meta.ts DELETED
@@ -1,40 +0,0 @@
1
- /**
2
- * Machine-readable component metadata for AI/docs consumption.
3
- * See specs/00-foundation/ai-friendly.spec.md.
4
- */
5
- export const meta = {
6
- name: 'Input',
7
- category: 'input',
8
- description: '单行文本录入框,支持前后缀、清除、计数、密码显隐与 IME。',
9
- props: [
10
- { name: 'value', type: 'string', default: 'undefined', desc: '受控值;提供则为受控' },
11
- { name: 'defaultValue', type: 'string', default: "''", desc: '非受控初始值' },
12
- { name: 'size', type: "'small'|'default'|'large'", default: 'default' },
13
- { name: 'disabled', type: 'boolean', default: 'false' },
14
- { name: 'readonly', type: 'boolean', default: 'false' },
15
- { name: 'placeholder', type: 'string', default: 'undefined' },
16
- { name: 'clearable', type: 'boolean', default: 'false' },
17
- { name: 'showCount', type: 'boolean', default: 'false' },
18
- { name: 'maxLength', type: 'number', default: 'undefined' },
19
- { name: 'status', type: "'default'|'warning'|'error'", default: 'default' },
20
- { name: 'type', type: "'text'|'password'", default: 'text' },
21
- { name: 'prefix', type: 'Snippet', default: 'undefined' },
22
- { name: 'suffix', type: 'Snippet', default: 'undefined' },
23
- { name: 'name', type: 'string', default: 'undefined' },
24
- { name: 'id', type: 'string', default: 'undefined', desc: '透传到原生 <input id>,供 <label for> 精确关联' },
25
- { name: 'ariaLabel', type: 'string', default: 'undefined' },
26
- { name: 'ariaDescribedby', type: 'string', default: 'undefined', desc: '透传到 aria-describedby,关联说明/错误文本' },
27
- { name: 'onChange', type: '(v: string) => void', default: 'undefined' },
28
- { name: 'onInput', type: '(v: string) => void', default: 'undefined' },
29
- { name: 'onClear', type: '() => void', default: 'undefined' },
30
- { name: 'onEnterPress', type: '(e: KeyboardEvent) => void', default: 'undefined', desc: '回车按下(spec on:enterPress)' },
31
- { name: 'onEnter', type: '(e: KeyboardEvent) => void', default: 'undefined', desc: '已废弃,改用 onEnterPress' },
32
- { name: 'onFocus', type: '(e: FocusEvent) => void', default: 'undefined' },
33
- { name: 'onBlur', type: '(e: FocusEvent) => void', default: 'undefined' },
34
- ],
35
- a11y: {
36
- role: 'textbox',
37
- notes: ['原生 input', 'error 时 aria-invalid', '密码切换 aria-pressed', '清除按钮 aria-label'],
38
- },
39
- tokens: ['--cd-input-*', '--cd-focus-ring', '--cd-motion-*'],
40
- } as const;
@@ -1,43 +0,0 @@
1
- // InputNumber a11y:role=spinbutton + aria-valuenow/min/max;步进按钮 locale 可访问名。
2
- import { describe, it, expect } from 'vitest';
3
- import { renderWithLocale, expectNoAxeViolations } from '../test-utils/a11y.js';
4
- import InputNumber from './InputNumber.svelte';
5
-
6
- describe('InputNumber a11y', () => {
7
- it('默认渲染:role=spinbutton + aria-valuenow/min/max,ariaLabel 提供可访问名', async () => {
8
- const { container } = renderWithLocale(InputNumber, {
9
- props: { ariaLabel: 'Quantity', defaultValue: 5, min: 0, max: 10 },
10
- });
11
- const spin = container.querySelector('[role="spinbutton"]');
12
- expect(spin).not.toBeNull();
13
- expect(spin?.getAttribute('aria-label')).toBe('Quantity');
14
- expect(spin?.getAttribute('aria-valuenow')).toBe('5');
15
- expect(spin?.getAttribute('aria-valuemin')).toBe('0');
16
- expect(spin?.getAttribute('aria-valuemax')).toBe('10');
17
- // 步进按钮可访问名来自 en_US locale(InputNumber.increase / decrease)。
18
- const inc = container.querySelector('.cd-input-number__increment');
19
- const dec = container.querySelector('.cd-input-number__decrement');
20
- expect(inc?.getAttribute('aria-label')).toBeTruthy();
21
- expect(inc?.getAttribute('aria-label')).not.toBe('InputNumber.increase');
22
- expect(dec?.getAttribute('aria-label')).toBeTruthy();
23
- await expectNoAxeViolations(container);
24
- });
25
-
26
- it('error 状态:aria-invalid=true', async () => {
27
- const { container } = renderWithLocale(InputNumber, {
28
- props: { ariaLabel: 'Amount', status: 'error' },
29
- });
30
- const spin = container.querySelector('[role="spinbutton"]');
31
- expect(spin?.getAttribute('aria-invalid')).toBe('true');
32
- await expectNoAxeViolations(container);
33
- });
34
-
35
- it('readonly + 无 controls:aria-readonly,无 axe violations', async () => {
36
- const { container } = renderWithLocale(InputNumber, {
37
- props: { ariaLabel: 'Score', defaultValue: 7, readonly: true, controls: false },
38
- });
39
- const spin = container.querySelector('[role="spinbutton"]');
40
- expect(spin?.getAttribute('aria-readonly')).toBe('true');
41
- await expectNoAxeViolations(container);
42
- });
43
- });
@@ -1,41 +0,0 @@
1
- // InputNumber 键盘 e2e(browser project / 真实 chromium)。
2
- // 焦点落在原生 <input role="spinbutton">:↑ 步进 +step、↓ -step,
3
- // PageUp/PageDown 大步进(shiftStep,默认 step*10),aria-valuenow 真实变化,
4
- // 钳到 min/max。jsdom 焦点/方向键步进合成不可靠,故在真浏览器里测。
5
- import { describe, it, expect } from 'vitest';
6
- import { page } from 'vitest/browser';
7
- import { renderKbdFixture, userEvent } from '../test-utils/kbd.js';
8
- import InputNumberKbdFixture from './InputNumberKbdFixture.svelte';
9
-
10
- function loc(el: Element) {
11
- return page.elementLocator(el);
12
- }
13
-
14
- describe('InputNumber 键盘 e2e(role=spinbutton ↑↓ 步进)', () => {
15
- it('Tab 聚焦 + ↑↓ 步进 + PageUp/PageDown 大步进 + 钳到 max', async () => {
16
- const { baseElement } = renderKbdFixture(InputNumberKbdFixture);
17
-
18
- const spin = baseElement.querySelector('[role="spinbutton"]') as HTMLElement;
19
- expect(spin).not.toBeNull();
20
- expect(spin.getAttribute('aria-valuenow')).toBe('5');
21
-
22
- // Tab 从 before 进入,焦点落在 spinbutton。
23
- const before = baseElement.querySelector('[data-testid="before"]') as HTMLElement;
24
- before.focus();
25
- await expect.element(loc(before)).toHaveFocus();
26
- await userEvent.tab();
27
- await expect.element(loc(spin)).toHaveFocus();
28
-
29
- // ↑ +1(6),↓ -1(5)。
30
- await userEvent.keyboard('{ArrowUp}');
31
- await expect.element(loc(spin)).toHaveAttribute('aria-valuenow', '6');
32
- await userEvent.keyboard('{ArrowDown}');
33
- await expect.element(loc(spin)).toHaveAttribute('aria-valuenow', '5');
34
-
35
- // PageUp 大步进 +10(15),PageDown -10(5)。
36
- await userEvent.keyboard('{PageUp}');
37
- await expect.element(loc(spin)).toHaveAttribute('aria-valuenow', '15');
38
- await userEvent.keyboard('{PageDown}');
39
- await expect.element(loc(spin)).toHaveAttribute('aria-valuenow', '5');
40
- });
41
- });