@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,807 +0,0 @@
1
- <!--
2
- TypographyBase — shared render core for Title / Text / Paragraph / Link.
3
- See specs/components/basic/Typography.spec.md §3 (分层), §4, §6, §12.
4
-
5
- 纯文本路径(无 ellipsis/copyable/editable):零 hook、零 observer、零 timer,仅 class 拼接,
6
- 与旧行为完全一致(向后兼容,红线:不传三 prop 行为不变)。
7
-
8
- 交互路径组合 @chenzy-design/core 三原语(createEllipsis/createCopyable/createEditable)。
9
- - 受控编辑 value + onChange,组件内不回写(红线 #1)。
10
- - 剪贴板 / 编辑 textarea / ellipsis 测量(ResizeObserver+rAF) 命令式 + cleanup(红线 #3)。
11
- - 省略/复制态/编辑态派生纯函数,core 持纯逻辑(红线 #2)。
12
- - 测量写 state 在 rAF/observer 回调里(异步首测),避免与渲染读形成同步 effect 自循环。
13
- -->
14
- <script lang="ts">
15
- import type { Snippet } from 'svelte';
16
- import { untrack, onMount } from 'svelte';
17
- import {
18
- useId,
19
- createCopyable,
20
- createEditable,
21
- createEllipsis,
22
- computeAutosizeHeight,
23
- type EllipsisPos,
24
- } from '@chenzy-design/core';
25
- import { useLocale } from '../locale-provider/index.js';
26
- import Tooltip from '../tooltip/Tooltip.svelte';
27
- import Popover from '../popover/Popover.svelte';
28
-
29
- type TypoType = 'default' | 'secondary' | 'tertiary' | 'warning' | 'danger' | 'success';
30
- type TypoWeight = number | 'regular' | 'medium' | 'semibold' | 'bold';
31
- type TypoSize = 'small' | 'default' | 'large';
32
-
33
- /**
34
- * showTooltip 浮层透传选项(对齐 Semi opts)。content 指定浮层显示的自定义内容
35
- * (非原文);theme/placement/maxWidth 透传 Tooltip;popover 额外接受 title。
36
- */
37
- export interface EllipsisTooltipOpts {
38
- /** 浮层显示的内容;缺省用完整原文(fullText) */
39
- content?: string;
40
- /** Popover 模式标题 */
41
- title?: string;
42
- theme?: 'dark' | 'light';
43
- placement?: string;
44
- position?: 'top' | 'bottom' | 'left' | 'right';
45
- maxWidth?: number | string;
46
- }
47
- /**
48
- * showTooltip 配置(对齐 Semi):
49
- * - `true`:默认 Tooltip,浮层 = 完整原文。
50
- * - `{ opts: { content } }`:浮层显示自定义内容。
51
- * - `{ type: 'popover', opts }`:用 Popover 而非 Tooltip。
52
- * - `{ renderTooltip }`:完全自定义浮层。Semi 的 `(content, children) => VNode`
53
- * 在 Svelte 中表达为 snippet `(fullText, trigger) => 浮层`,其中 trigger 是
54
- * 渲染好的截断文本(须作为浮层触发器渲染出来),fullText 为完整原文。
55
- */
56
- export interface EllipsisShowTooltip {
57
- type?: 'tooltip' | 'popover';
58
- opts?: EllipsisTooltipOpts;
59
- renderTooltip?: Snippet<[string, Snippet]>;
60
- }
61
-
62
- export interface EllipsisConfig {
63
- rows?: number;
64
- expandable?: boolean;
65
- /** 展开后是否可折叠回去(Semi collapsible);默认 false */
66
- collapsible?: boolean;
67
- expandText?: string;
68
- collapseText?: string;
69
- suffix?: string;
70
- pos?: EllipsisPos;
71
- showTooltip?: boolean | EllipsisShowTooltip;
72
- onExpand?: (expanded: boolean) => void;
73
- }
74
- export interface CopyableConfig {
75
- content?: string;
76
- successText?: string;
77
- icon?: Snippet;
78
- successIcon?: Snippet;
79
- }
80
- export interface EditableConfig {
81
- editing?: boolean;
82
- trigger?: 'click' | 'dblclick' | 'icon';
83
- maxLength?: number;
84
- autosize?: boolean;
85
- }
86
-
87
- interface Props {
88
- /** rendered tag */
89
- element: string;
90
- baseClass: string;
91
- extraClass?: string;
92
- type?: TypoType;
93
- /** 字号档(Text/Paragraph)。Title 由 heading 决定,不传 size。spec §4.1 L60 */
94
- size?: TypoSize;
95
- strong?: boolean;
96
- weight?: TypoWeight | undefined;
97
- disabled?: boolean;
98
- mark?: boolean;
99
- underline?: boolean;
100
- delete?: boolean;
101
- code?: boolean;
102
- class?: string;
103
- /** ellipsis / copyable / editable */
104
- ellipsis?: boolean | EllipsisConfig;
105
- copyable?: boolean | CopyableConfig;
106
- editable?: boolean | EditableConfig;
107
- /** controlled text value (editable). undefined → uncontrolled-ish: read from DOM/children */
108
- value?: string | undefined;
109
- onChange?: ((value: string) => void) | undefined;
110
- onCopy?: ((content: string) => void) | undefined;
111
- onEditStart?: (() => void) | undefined;
112
- onEditCancel?: (() => void) | undefined;
113
- onExpand?: ((expanded: boolean) => void) | undefined;
114
- /** extra attributes spread onto the host element (href/target/rel for Link) */
115
- hostAttrs?: Record<string, unknown> | undefined;
116
- children?: Snippet | undefined;
117
- }
118
-
119
- let {
120
- element,
121
- baseClass,
122
- extraClass,
123
- type = 'default',
124
- size = 'default',
125
- strong = false,
126
- weight,
127
- disabled = false,
128
- mark = false,
129
- underline = false,
130
- delete: del = false,
131
- code = false,
132
- class: className = '',
133
- ellipsis = false,
134
- copyable = false,
135
- editable = false,
136
- value,
137
- onChange,
138
- onCopy,
139
- onEditStart,
140
- onEditCancel,
141
- onExpand,
142
- hostAttrs,
143
- children,
144
- }: Props = $props();
145
-
146
- const loc = useLocale();
147
- const baseId = useId('cd-typography');
148
-
149
- const weightMap: Record<string, string> = {
150
- regular: 'var(--cd-font-weight-regular)',
151
- medium: 'var(--cd-font-weight-medium)',
152
- semibold: 'var(--cd-font-weight-semibold)',
153
- bold: '700',
154
- };
155
- const resolvedWeight = $derived.by(() => {
156
- if (weight === undefined) return undefined;
157
- return typeof weight === 'number' ? String(weight) : weightMap[weight];
158
- });
159
- const inlineWeight = $derived(resolvedWeight ? `font-weight:${resolvedWeight};` : '');
160
-
161
- // --- feature flags + normalized configs (纯派生, 红线 #2) ---
162
- const ellipsisCfg = $derived.by<EllipsisConfig | null>(() => {
163
- if (!ellipsis) return null;
164
- return typeof ellipsis === 'object' ? ellipsis : {};
165
- });
166
- const copyableCfg = $derived.by<CopyableConfig | null>(() => {
167
- if (!copyable) return null;
168
- return typeof copyable === 'object' ? copyable : {};
169
- });
170
- const editableCfg = $derived.by<EditableConfig | null>(() => {
171
- if (!editable) return null;
172
- return typeof editable === 'object' ? editable : {};
173
- });
174
-
175
- const rows = $derived(ellipsisCfg?.rows ?? 1);
176
- const expandable = $derived(ellipsisCfg?.expandable ?? false);
177
- const collapsible = $derived(ellipsisCfg?.collapsible ?? false);
178
- const pos = $derived(ellipsisCfg?.pos ?? 'end');
179
- const showTooltip = $derived(Boolean(ellipsisCfg?.showTooltip));
180
- // 归一化 showTooltip 配置(对齐 Semi:true → 默认 tooltip)。
181
- const tooltipCfg = $derived.by<EllipsisShowTooltip | null>(() => {
182
- const st = ellipsisCfg?.showTooltip;
183
- if (!st) return null;
184
- return st === true ? {} : st;
185
- });
186
- const tooltipType = $derived(tooltipCfg?.type ?? 'tooltip');
187
- const tooltipOpts = $derived(tooltipCfg?.opts ?? {});
188
- const renderTooltip = $derived(tooltipCfg?.renderTooltip);
189
-
190
- // 纯文本快路径:三特性全关 → 不实例化任何 core hook / observer / timer。
191
- const isInteractive = $derived(
192
- ellipsisCfg !== null || copyableCfg !== null || editableCfg !== null,
193
- );
194
-
195
- // 构造期一次性快照(untrack:原语在 init 实例化一次,不随 config 重建;
196
- // 渲染仍读 $derived 版本保持响应)。避免 state_referenced_locally 警告。
197
- const initEllipsis = untrack(() => ellipsisCfg);
198
- const initCopyable = untrack(() => copyableCfg);
199
- const initEditable = untrack(() => editableCfg);
200
-
201
- // --- core primitives (lazily constructed only when interactive) ---
202
- // copyable
203
- let copied = $state(false);
204
- const copyApi = initCopyable
205
- ? createCopyable({
206
- onChange: (c) => (copied = c),
207
- onCopy: (content) => {
208
- announce(loc().t('Typography.copied'));
209
- onCopy?.(content);
210
- },
211
- onError: () => announce(loc().t('Typography.copyFailed')),
212
- })
213
- : null;
214
- $effect(() => () => copyApi?.destroy());
215
-
216
- async function doCopy(): Promise<void> {
217
- if (!copyApi) return;
218
- const content = copyableCfg?.content ?? value ?? textContent();
219
- await copyApi.copy(content);
220
- }
221
-
222
- // ellipsis
223
- let expanded = $state(false);
224
- let truncated = $state<boolean | null>(null);
225
- const ellipsisApi = initEllipsis
226
- ? createEllipsis({
227
- rows: initEllipsis.rows ?? 1,
228
- expandable: initEllipsis.expandable ?? false,
229
- collapsible: initEllipsis.collapsible ?? false,
230
- pos: initEllipsis.pos ?? 'end',
231
- onExpand: (e) => {
232
- expanded = e;
233
- ellipsisCfg?.onExpand?.(e);
234
- onExpand?.(e);
235
- },
236
- onChange: (s) => {
237
- truncated = s.truncated;
238
- },
239
- })
240
- : null;
241
-
242
- // editable — controlled value + onChange (红线 #1: 不回写)
243
- let editing = $state(false);
244
- let draft = $state('');
245
- const editApi = initEditable
246
- ? createEditable({
247
- get value() {
248
- return value ?? textContent();
249
- },
250
- ...(initEditable.maxLength !== undefined ? { maxLength: initEditable.maxLength } : {}),
251
- ...(initEditable.trigger !== undefined ? { trigger: initEditable.trigger } : {}),
252
- onChange: (s) => {
253
- editing = s.editing;
254
- draft = s.draft;
255
- },
256
- onCommit: (v) => onChange?.(v),
257
- onStart: () => onEditStart?.(),
258
- onCancel: () => onEditCancel?.(),
259
- })
260
- : null;
261
-
262
- // 受控 editing: 父传 editableCfg.editing 时与内部状态同步(命令式驱动 start/cancel)。
263
- $effect(() => {
264
- if (!editApi || editableCfg?.editing === undefined) return;
265
- const want = editableCfg.editing;
266
- untrack(() => {
267
- if (want && !editApi.editing) editApi.start();
268
- else if (!want && editApi.editing) editApi.cancel();
269
- });
270
- });
271
-
272
- // --- DOM refs ---
273
- let hostEl: HTMLElement | undefined = $state();
274
- let textareaEl: HTMLTextAreaElement | undefined = $state();
275
- let lastTrigger: HTMLElement | null = null;
276
-
277
- function textContent(): string {
278
- return hostEl?.textContent?.trim() ?? '';
279
- }
280
-
281
- // --- single live region for copy/announce (命令式, cleanup) ---
282
- let liveEl: HTMLDivElement | undefined;
283
- function ensureLive(): HTMLDivElement | null {
284
- if (typeof document === 'undefined') return null;
285
- if (!liveEl) {
286
- liveEl = document.createElement('div');
287
- liveEl.setAttribute('aria-live', 'polite');
288
- liveEl.setAttribute('role', 'status');
289
- const s = liveEl.style;
290
- s.position = 'absolute';
291
- s.width = '1px';
292
- s.height = '1px';
293
- s.margin = '-1px';
294
- s.padding = '0';
295
- s.overflow = 'hidden';
296
- s.clipPath = 'inset(50%)';
297
- s.whiteSpace = 'nowrap';
298
- document.body.appendChild(liveEl);
299
- }
300
- return liveEl;
301
- }
302
- function announce(msg: string): void {
303
- const el = ensureLive();
304
- if (!el || !msg) return;
305
- el.textContent = '';
306
- el.textContent = msg;
307
- }
308
- $effect(() => () => {
309
- liveEl?.remove();
310
- liveEl = undefined;
311
- });
312
-
313
- // --- ellipsis measurement (精确路径: expandable / suffix / showTooltip) ---
314
- // CSS clamp 为默认;仅当需要 truncated 判定时才挂 ResizeObserver。
315
- // needsMeasure 为构造期常量(基于 untrack 快照),保证测量 effect 只随 hostEl 建立/销毁一次,
316
- // 不被 ellipsisCfg 等派生的重算反复 re-run(否则会反复 cancel rAF,测量永不落地)。
317
- const measureRows = initEllipsis?.rows ?? 1;
318
- const needsMeasure =
319
- initEllipsis !== null &&
320
- ((initEllipsis.expandable ?? false) ||
321
- Boolean(initEllipsis.showTooltip) ||
322
- initEllipsis.suffix !== undefined);
323
-
324
- // onMount 一次性建立 ResizeObserver + rAF 测量,卸载时清理。
325
- // 用 onMount 而非 $effect(hostEl) —— 避免 host 因模板派生重渲染导致 effect 反复 teardown,
326
- // 把 pending rAF cancel 掉(测量永不落地)的坑(svelte:element 不支持 use: 动作)。
327
- // 命令式 + cleanup(红线 #3);rAF 首测异步避免与渲染读写同栈(红线 #4)。
328
- onMount(() => {
329
- if (!needsMeasure || typeof window === 'undefined' || !ellipsisApi) return;
330
- const el = hostEl;
331
- if (!el) return;
332
- let frame = 0;
333
- const measure = (): void => {
334
- frame = 0;
335
- // 展开态 clamp 已撤除, scrollHeight==clientHeight, 不会误判
336
- ellipsisApi.measure({
337
- scrollHeight: el.scrollHeight,
338
- clientHeight: el.clientHeight,
339
- scrollWidth: el.scrollWidth,
340
- clientWidth: el.clientWidth,
341
- rows: measureRows,
342
- });
343
- };
344
- // 首测:DOM 已布局,直接同步测一次落定 truncated(写 state 在 onMount 内,渲染读分离,无自循环)。
345
- measure();
346
- const schedule = (): void => {
347
- if (frame) return;
348
- frame = window.requestAnimationFrame(measure);
349
- };
350
- const ro = new ResizeObserver(schedule);
351
- ro.observe(el);
352
- return () => {
353
- if (frame) window.cancelAnimationFrame(frame);
354
- ro.disconnect();
355
- };
356
- });
357
-
358
- // --- editable: 进入编辑聚焦 textarea;退出后焦点归还触发器(命令式, 红线 #3) ---
359
- $effect(() => {
360
- if (!editApi) return;
361
- if (editing) {
362
- const ta = textareaEl;
363
- if (ta) {
364
- ta.focus();
365
- ta.setSelectionRange(ta.value.length, ta.value.length);
366
- applyAutosize();
367
- }
368
- } else if (lastTrigger) {
369
- const t = lastTrigger;
370
- lastTrigger = null;
371
- t.focus?.();
372
- }
373
- });
374
-
375
- function applyAutosize(): void {
376
- const ta = textareaEl;
377
- if (!ta || editableCfg?.autosize === false) return;
378
- ta.style.height = 'auto';
379
- const cs = window.getComputedStyle(ta);
380
- const lineHeight = parseFloat(cs.lineHeight) || 20;
381
- const vPad = parseFloat(cs.paddingTop) + parseFloat(cs.paddingBottom);
382
- const vBorder = parseFloat(cs.borderTopWidth) + parseFloat(cs.borderBottomWidth);
383
- const { height } = computeAutosizeHeight({
384
- scrollHeight: ta.scrollHeight,
385
- lineHeight,
386
- verticalPadding: vPad,
387
- verticalBorder: vBorder,
388
- minRows: 1,
389
- maxRows: 6,
390
- });
391
- ta.style.height = `${height}px`;
392
- }
393
-
394
- function startEdit(e: Event): void {
395
- if (disabled || !editApi) return;
396
- lastTrigger = (e.currentTarget as HTMLElement) ?? null;
397
- editApi.start();
398
- }
399
- function onTriggerHost(e: Event): void {
400
- if (!editApi) return;
401
- const trig = editableCfg?.trigger ?? 'icon';
402
- if (trig === 'click' && e.type === 'click') startEdit(e);
403
- else if (trig === 'dblclick' && e.type === 'dblclick') startEdit(e);
404
- }
405
- // 合并 hostAttrs.onclick (如 Link 的 handleClick) 与编辑 click 触发
406
- function hostClick(e: MouseEvent): void {
407
- (hostAttrs?.onclick as ((ev: MouseEvent) => void) | undefined)?.(e);
408
- onTriggerHost(e);
409
- }
410
- function onTextareaInput(e: Event): void {
411
- editApi?.setDraft((e.target as HTMLTextAreaElement).value);
412
- applyAutosize();
413
- }
414
- function onTextareaKeydown(e: KeyboardEvent): void {
415
- if (!editApi) return;
416
- const action = editApi.handleKey({ key: e.key, shiftKey: e.shiftKey });
417
- if (action === 'confirm' || action === 'cancel') e.preventDefault();
418
- }
419
-
420
- // --- class (与旧实现一致 + 交互修饰) ---
421
- const cls = $derived(
422
- [
423
- baseClass,
424
- extraClass,
425
- type !== 'default' && `${baseClass}--${type}`,
426
- // 字号档:Title (extraClass 含 --title) 由 heading 决定, 忽略 size (spec §4.1 L60)
427
- size !== 'default' && !extraClass?.includes(`${baseClass}--title`) && `${baseClass}--size-${size}`,
428
- strong && `${baseClass}--strong`,
429
- disabled && `${baseClass}--disabled`,
430
- mark && `${baseClass}--mark`,
431
- underline && `${baseClass}--underline`,
432
- del && `${baseClass}--delete`,
433
- code && `${baseClass}--code`,
434
- ellipsisCfg && !expanded && `${baseClass}--ellipsis`,
435
- ellipsisCfg && rows > 1 && !expanded && `${baseClass}--ellipsis-multi`,
436
- className,
437
- ]
438
- .filter(Boolean)
439
- .join(' '),
440
- );
441
-
442
- // ellipsis 行内样式: 多行用 line-clamp; 单行用 text-overflow.
443
- const ellipsisStyle = $derived.by(() => {
444
- if (!ellipsisCfg || expanded) return '';
445
- if (rows > 1) return `--cd-typo-clamp:${rows};`;
446
- return '';
447
- });
448
- const hostStyle = $derived(`${inlineWeight}${ellipsisStyle}`);
449
-
450
- // tooltip: 仅在确实溢出且 showTooltip 时启用
451
- const tooltipEnabled = $derived(showTooltip && truncated === true && !expanded);
452
- // textContent() 非响应式:用 truncated/expanded 变化作为重算触发器(measure 写 state 后重新取 DOM 全文)。
453
- const fullText = $derived.by(() => {
454
- void truncated;
455
- void expanded;
456
- return textContent();
457
- });
458
- // 浮层显示内容:opts.content 自定义优先,否则用完整原文。
459
- const tooltipContent = $derived(tooltipOpts.content ?? fullText);
460
-
461
- const copyLabel = $derived(loc().t('Typography.copy'));
462
- const editLabel = $derived(loc().t('Typography.edit'));
463
- const expandLabel = $derived(ellipsisCfg?.expandText ?? loc().t('Typography.expand'));
464
- const collapseLabel = $derived(ellipsisCfg?.collapseText ?? loc().t('Typography.collapse'));
465
- </script>
466
-
467
- {#snippet copyIconDefault()}
468
- <svg viewBox="0 0 24 24" width="1em" height="1em" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true">
469
- <rect x="9" y="9" width="11" height="11" rx="2" />
470
- <path d="M5 15V5a2 2 0 0 1 2-2h10" stroke-linecap="round" />
471
- </svg>
472
- {/snippet}
473
- {#snippet copiedIconDefault()}
474
- <svg viewBox="0 0 24 24" width="1em" height="1em" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true">
475
- <path d="M5 13l4 4L19 7" stroke-linecap="round" stroke-linejoin="round" />
476
- </svg>
477
- {/snippet}
478
- {#snippet editIconDefault()}
479
- <svg viewBox="0 0 24 24" width="1em" height="1em" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true">
480
- <path d="M4 20h4l10-10-4-4L4 16v4z" stroke-linejoin="round" />
481
- <path d="M13.5 6.5l4 4" stroke-linecap="round" />
482
- </svg>
483
- {/snippet}
484
-
485
- {#snippet actions()}
486
- {#if copyableCfg}
487
- <button
488
- type="button"
489
- class="{baseClass}__action {baseClass}__action--copy"
490
- class:is-copied={copied}
491
- aria-label={copyLabel}
492
- title={copyLabel}
493
- onclick={doCopy}
494
- >
495
- {#if copied}
496
- {#if copyableCfg.successIcon}{@render copyableCfg.successIcon()}{:else}{@render copiedIconDefault()}{/if}
497
- {:else if copyableCfg.icon}{@render copyableCfg.icon()}{:else}{@render copyIconDefault()}{/if}
498
- </button>
499
- {/if}
500
- {#if editableCfg && (editableCfg.trigger ?? 'icon') === 'icon'}
501
- <button
502
- type="button"
503
- class="{baseClass}__action {baseClass}__action--edit"
504
- aria-label={editLabel}
505
- title={editLabel}
506
- onclick={startEdit}
507
- >
508
- {@render editIconDefault()}
509
- </button>
510
- {/if}
511
- {/snippet}
512
-
513
- {#if editApi && editing}
514
- <!-- inline edit mode: textarea 替换文本 -->
515
- <span class="{baseClass}__edit-wrap">
516
- <textarea
517
- bind:this={textareaEl}
518
- class="{baseClass}__edit-input"
519
- value={draft}
520
- maxlength={editableCfg?.maxLength}
521
- aria-label={editLabel}
522
- rows="1"
523
- oninput={onTextareaInput}
524
- onkeydown={onTextareaKeydown}
525
- onblur={() => editApi?.confirm()}
526
- ></textarea>
527
- </span>
528
- {:else if !isInteractive}
529
- <!-- 纯文本快路径: 与旧实现完全一致 (向后兼容) -->
530
- <svelte:element this={element} class={cls} style={hostStyle || undefined} aria-disabled={disabled || undefined} {...hostAttrs}>
531
- {@render children?.()}
532
- </svelte:element>
533
- {:else}
534
- <!-- showTooltip: 把截断后的文本宿主(hostNode,触发器)用 Tooltip/Popover 包裹,
535
- 浮层 content = 完整原文 / 自定义内容(Semi renderTipWrapper 模式)。
536
- 注意:以 showTooltip(静态配置)而非 tooltipEnabled(随 truncated 变化)决定是否包裹,
537
- 使 hostNode 在浮层内位置稳定,避免 truncated 翻转时 host 被 {#if} 销毁重建、
538
- 导致 onMount 建立的 ResizeObserver 观察到失效节点(测量永不再落地)。
539
- 未溢出/展开时用浮层 disabled / 空内容关闭浮层,不渲染浮层。 -->
540
- {#if showTooltip}
541
- {#if renderTooltip}
542
- {@render renderTooltip(fullText, hostNode)}
543
- {:else if tooltipType === 'popover'}
544
- <Popover
545
- content={tooltipEnabled ? tooltipContent : ''}
546
- title={tooltipOpts.title ?? ''}
547
- position={tooltipOpts.position ?? 'top'}
548
- trigger="hover"
549
- disabled={!tooltipEnabled}
550
- >
551
- {@render hostNode()}
552
- </Popover>
553
- {:else}
554
- <Tooltip
555
- content={tooltipEnabled ? tooltipContent : ''}
556
- placement={(tooltipOpts.placement ?? 'top') as never}
557
- theme={tooltipOpts.theme ?? 'dark'}
558
- maxWidth={tooltipOpts.maxWidth ?? 300}
559
- disabled={!tooltipEnabled}
560
- >
561
- {@render hostNode()}
562
- </Tooltip>
563
- {/if}
564
- {:else}
565
- {@render hostNode()}
566
- {/if}
567
-
568
- {#if (expandable && !expanded && truncated === true) || (collapsible && expanded)}
569
- <button
570
- type="button"
571
- class="{baseClass}__expand"
572
- aria-expanded={expanded}
573
- onclick={() => ellipsisApi?.toggle()}
574
- >
575
- {expanded ? collapseLabel : expandLabel}
576
- </button>
577
- {/if}
578
-
579
- {@render actions()}
580
- {/if}
581
-
582
- {#snippet hostNode()}
583
- <svelte:element
584
- this={element}
585
- bind:this={hostEl}
586
- class={cls}
587
- style={hostStyle || undefined}
588
- aria-disabled={disabled || undefined}
589
- {...hostAttrs}
590
- onclick={hostClick}
591
- ondblclick={onTriggerHost}
592
- >
593
- {@render children?.()}{#if ellipsisCfg?.suffix && truncated === true && !expanded}<!--
594
- -->{ellipsisCfg.suffix}{/if}
595
- </svelte:element>
596
- {/snippet}
597
-
598
- <style>
599
- /* ── 基础排版样式 (统一源, 因实际元素由本组件渲染, 子组件 scoped 不生效) ── */
600
- :global(.cd-typography) {
601
- color: var(--cd-typography-color);
602
- }
603
- :global(.cd-typography--paragraph),
604
- :global(.cd-typography--title) {
605
- margin: 0;
606
- }
607
- :global(.cd-typography--paragraph) {
608
- margin-block-end: var(--cd-spacing-4);
609
- }
610
- :global(.cd-typography--title) {
611
- font-weight: var(--cd-font-weight-semibold);
612
- }
613
- :global(.cd-typography--h1) {
614
- font-size: var(--cd-font-size-6);
615
- }
616
- :global(.cd-typography--h2) {
617
- font-size: var(--cd-font-size-5);
618
- }
619
- :global(.cd-typography--h3) {
620
- font-size: var(--cd-font-size-4);
621
- }
622
- :global(.cd-typography--h4) {
623
- font-size: var(--cd-font-size-3);
624
- }
625
- :global(.cd-typography--h5) {
626
- font-size: var(--cd-font-size-2);
627
- }
628
- :global(.cd-typography--h6) {
629
- font-size: var(--cd-font-size-1);
630
- }
631
- :global(.cd-typography--link) {
632
- color: var(--cd-typography-color-link);
633
- text-decoration: none;
634
- cursor: pointer;
635
- transition: color var(--cd-motion-duration-fast) var(--cd-motion-ease-standard);
636
- }
637
- :global(.cd-typography--link:hover) {
638
- color: var(--cd-typography-color-link-hover);
639
- }
640
- :global(.cd-typography--link:focus-visible) {
641
- outline: none;
642
- box-shadow: var(--cd-focus-ring);
643
- border-radius: 2px;
644
- }
645
- :global(.cd-typography--link.cd-typography--disabled) {
646
- pointer-events: none;
647
- }
648
- :global(.cd-typography--secondary) {
649
- color: var(--cd-typography-color-secondary);
650
- }
651
- :global(.cd-typography--tertiary) {
652
- color: var(--cd-typography-color-tertiary);
653
- }
654
- :global(.cd-typography--warning) {
655
- color: var(--cd-color-warning);
656
- }
657
- :global(.cd-typography--danger) {
658
- color: var(--cd-color-danger);
659
- }
660
- :global(.cd-typography--success) {
661
- color: var(--cd-color-success);
662
- }
663
- :global(.cd-typography--strong) {
664
- font-weight: var(--cd-font-weight-semibold);
665
- }
666
- /* 字号档 (Text/Paragraph) — spec §4.1 size + §5 token 表; default 沿用继承字号保持向后兼容 */
667
- :global(.cd-typography--size-small) {
668
- font-size: var(--cd-typography-font-size-small, var(--cd-font-size-1));
669
- }
670
- :global(.cd-typography--size-large) {
671
- font-size: var(--cd-typography-font-size-large, var(--cd-font-size-3));
672
- }
673
- :global(.cd-typography--disabled) {
674
- opacity: 0.5;
675
- cursor: not-allowed;
676
- }
677
- :global(.cd-typography--mark) {
678
- background-color: var(--cd-typography-mark-bg);
679
- }
680
- :global(.cd-typography--underline) {
681
- text-decoration-line: underline;
682
- }
683
- :global(.cd-typography--delete) {
684
- text-decoration-line: line-through;
685
- }
686
- :global(.cd-typography--underline.cd-typography--delete) {
687
- text-decoration-line: underline line-through;
688
- }
689
- :global(.cd-typography--code) {
690
- font-family: var(--cd-font-family-mono, monospace);
691
- font-size: var(--cd-typography-code-font-size);
692
- background-color: var(--cd-typography-code-bg);
693
- padding-inline: 0.4em;
694
- padding-block: 0.1em;
695
- border-radius: 3px;
696
- }
697
- @media (prefers-reduced-motion: reduce) {
698
- :global(.cd-typography--link) {
699
- transition: none;
700
- }
701
- }
702
-
703
- /* ── 交互态样式 ── */
704
- :global(.cd-typography--ellipsis) {
705
- /* Text 渲染为 <span>(display:inline);text-overflow/overflow 在 inline 上不生效,
706
- 需 inline-block 才能截断。max-inline-size 令其受父容器宽度约束,
707
- vertical-align 避免 inline-block 基线下沉。 */
708
- display: inline-block;
709
- max-inline-size: 100%;
710
- vertical-align: bottom;
711
- overflow: hidden;
712
- white-space: nowrap;
713
- text-overflow: ellipsis;
714
- }
715
- :global(.cd-typography--ellipsis-multi) {
716
- display: -webkit-box;
717
- -webkit-box-orient: vertical;
718
- -webkit-line-clamp: var(--cd-typo-clamp, 1);
719
- line-clamp: var(--cd-typo-clamp, 1);
720
- white-space: normal;
721
- overflow: hidden;
722
- }
723
- /* showTooltip:Tooltip/Popover 触发包裹默认 inline-block 收缩到内容宽,
724
- 会让被包裹宿主的 max-inline-size:100% 退化为内容宽(永不溢出、tooltip 永不触发)。
725
- 当包裹的是省略宿主时,让包裹层撑满父容器宽度,使宽度约束正确传递到宿主。 */
726
- :global(.cd-tooltip:has(> .cd-tooltip__trigger > .cd-typography--ellipsis)),
727
- :global(.cd-tooltip:has(> .cd-tooltip__trigger > .cd-typography--ellipsis-multi)),
728
- :global(.cd-popover:has(> .cd-popover__trigger > .cd-typography--ellipsis)),
729
- :global(.cd-popover:has(> .cd-popover__trigger > .cd-typography--ellipsis-multi)) {
730
- display: block;
731
- max-inline-size: 100%;
732
- }
733
- :global(.cd-tooltip:has(> .cd-tooltip__trigger > .cd-typography--ellipsis) > .cd-tooltip__trigger),
734
- :global(.cd-tooltip:has(> .cd-tooltip__trigger > .cd-typography--ellipsis-multi) > .cd-tooltip__trigger),
735
- :global(.cd-popover:has(> .cd-popover__trigger > .cd-typography--ellipsis) > .cd-popover__trigger),
736
- :global(.cd-popover:has(> .cd-popover__trigger > .cd-typography--ellipsis-multi) > .cd-popover__trigger) {
737
- display: block;
738
- max-inline-size: 100%;
739
- }
740
- :global(.cd-typography__action) {
741
- display: inline-flex;
742
- align-items: center;
743
- justify-content: center;
744
- margin-inline-start: 4px;
745
- padding: 2px;
746
- border: 0;
747
- background: transparent;
748
- color: var(--cd-typography-action-color, var(--cd-color-text-2));
749
- cursor: pointer;
750
- border-radius: 3px;
751
- vertical-align: middle;
752
- transition: color var(--cd-motion-duration-fast, 120ms) ease;
753
- }
754
- :global(.cd-typography__action:hover) {
755
- color: var(--cd-typography-action-color-hover, var(--cd-color-primary));
756
- }
757
- :global(.cd-typography__action:focus-visible) {
758
- outline: none;
759
- box-shadow: var(--cd-focus-ring);
760
- }
761
- :global(.cd-typography__action--copy.is-copied) {
762
- color: var(--cd-color-success);
763
- }
764
- :global(.cd-typography__expand) {
765
- margin-inline-start: 4px;
766
- padding: 0;
767
- border: 0;
768
- background: transparent;
769
- color: var(--cd-color-link, var(--cd-color-primary));
770
- cursor: pointer;
771
- font: inherit;
772
- }
773
- :global(.cd-typography__expand:hover) {
774
- color: var(--cd-color-link-hover, var(--cd-color-primary));
775
- }
776
- :global(.cd-typography__expand:focus-visible) {
777
- outline: none;
778
- box-shadow: var(--cd-focus-ring);
779
- border-radius: 2px;
780
- }
781
- :global(.cd-typography__edit-wrap) {
782
- display: inline-block;
783
- width: 100%;
784
- }
785
- :global(.cd-typography__edit-input) {
786
- width: 100%;
787
- box-sizing: border-box;
788
- font: inherit;
789
- color: inherit;
790
- padding: 2px 6px;
791
- border: 1px solid var(--cd-color-border, #d9d9d9);
792
- border-radius: var(--cd-border-radius, 4px);
793
- background: var(--cd-color-bg-1, #fff);
794
- resize: none;
795
- overflow: hidden;
796
- }
797
- :global(.cd-typography__edit-input:focus-visible) {
798
- outline: none;
799
- border-color: var(--cd-color-primary);
800
- box-shadow: var(--cd-focus-ring);
801
- }
802
- @media (prefers-reduced-motion: reduce) {
803
- :global(.cd-typography__action) {
804
- transition: none;
805
- }
806
- }
807
- </style>