@chenzy-design/svelte 0.2.1 → 0.3.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 (241) hide show
  1. package/dist/anchor/Anchor.svelte +1 -1
  2. package/dist/anchor/meta.d.ts +1 -1
  3. package/dist/anchor/meta.js +1 -1
  4. package/dist/autocomplete/AutoComplete.svelte +10 -10
  5. package/dist/avatar/Avatar.svelte +12 -7
  6. package/dist/avatar/AvatarGroup.svelte +2 -2
  7. package/dist/avatar/context.d.ts +1 -1
  8. package/dist/avatar/context.d.ts.map +1 -1
  9. package/dist/avatar/meta.d.ts +2 -2
  10. package/dist/avatar/meta.d.ts.map +1 -1
  11. package/dist/avatar/meta.js +3 -1
  12. package/dist/badge/Badge.svelte +5 -5
  13. package/dist/banner/Banner.svelte +1 -1
  14. package/dist/breadcrumb/Breadcrumb.svelte +9 -8
  15. package/dist/breadcrumb/meta.d.ts +1 -1
  16. package/dist/breadcrumb/meta.js +1 -1
  17. package/dist/button/Button.svelte +289 -55
  18. package/dist/button/Button.svelte.d.ts +20 -4
  19. package/dist/button/Button.svelte.d.ts.map +1 -1
  20. package/dist/button/ButtonGroup.svelte +107 -0
  21. package/dist/button/ButtonGroup.svelte.d.ts +21 -0
  22. package/dist/button/ButtonGroup.svelte.d.ts.map +1 -0
  23. package/dist/button/SplitButtonGroup.svelte +127 -0
  24. package/dist/button/SplitButtonGroup.svelte.d.ts +35 -0
  25. package/dist/button/SplitButtonGroup.svelte.d.ts.map +1 -0
  26. package/dist/button/context.d.ts +14 -0
  27. package/dist/button/context.d.ts.map +1 -0
  28. package/dist/button/context.js +14 -0
  29. package/dist/button/index.d.ts +3 -0
  30. package/dist/button/index.d.ts.map +1 -1
  31. package/dist/button/index.js +3 -0
  32. package/dist/button/meta.d.ts +173 -4
  33. package/dist/button/meta.d.ts.map +1 -1
  34. package/dist/button/meta.js +58 -9
  35. package/dist/calendar/Calendar.svelte +16 -16
  36. package/dist/card/Card.svelte +10 -10
  37. package/dist/card/Card.svelte.d.ts +1 -1
  38. package/dist/card/Card.svelte.d.ts.map +1 -1
  39. package/dist/card/CardMeta.svelte +6 -6
  40. package/dist/card/CardMeta.svelte.d.ts +1 -1
  41. package/dist/card/CardMeta.svelte.d.ts.map +1 -1
  42. package/dist/card/index.d.ts +8 -0
  43. package/dist/card/index.d.ts.map +1 -0
  44. package/dist/card/meta.d.ts +1 -1
  45. package/dist/card/meta.d.ts.map +1 -1
  46. package/dist/card/meta.js +4 -0
  47. package/dist/carousel/Carousel.svelte +14 -14
  48. package/dist/carousel/meta.d.ts +1 -1
  49. package/dist/carousel/meta.js +2 -2
  50. package/dist/cascader/Cascader.svelte +18 -10
  51. package/dist/checkbox/Checkbox.svelte +19 -5
  52. package/dist/checkbox/Checkbox.svelte.d.ts +3 -0
  53. package/dist/checkbox/Checkbox.svelte.d.ts.map +1 -1
  54. package/dist/checkbox/CheckboxGroup.svelte +1 -1
  55. package/dist/checkbox/meta.d.ts +15 -0
  56. package/dist/checkbox/meta.d.ts.map +1 -1
  57. package/dist/checkbox/meta.js +3 -0
  58. package/dist/collapse/Collapse.svelte +6 -2
  59. package/dist/collapse/meta.d.ts +1 -1
  60. package/dist/collapse/meta.js +2 -2
  61. package/dist/color-picker/ColorPicker.svelte +69 -33
  62. package/dist/color-picker/ColorPicker.svelte.d.ts +13 -0
  63. package/dist/color-picker/ColorPicker.svelte.d.ts.map +1 -1
  64. package/dist/color-picker/meta.d.ts +30 -0
  65. package/dist/color-picker/meta.d.ts.map +1 -1
  66. package/dist/color-picker/meta.js +6 -0
  67. package/dist/components.d.ts +25 -9
  68. package/dist/components.json +986 -76
  69. package/dist/date-picker/DatePicker.svelte +43 -42
  70. package/dist/date-picker/RangePicker.svelte +10 -10
  71. package/dist/descriptions/Descriptions.svelte +7 -3
  72. package/dist/divider/Divider.svelte +1 -1
  73. package/dist/drawer/Drawer.svelte +1 -1
  74. package/dist/dropdown/Dropdown.svelte +6 -5
  75. package/dist/dropdown/DropdownDivider.svelte +1 -1
  76. package/dist/dropdown/DropdownItem.svelte +1 -1
  77. package/dist/dropdown/DropdownItemNode.svelte +4 -4
  78. package/dist/dropdown/DropdownSubMenu.svelte +2 -2
  79. package/dist/dropdown/DropdownTitle.svelte +1 -1
  80. package/dist/dropdown/meta.d.ts +1 -1
  81. package/dist/dropdown/meta.js +1 -1
  82. package/dist/empty/Empty.svelte +1 -0
  83. package/dist/form/Field.svelte +14 -14
  84. package/dist/form/Form.svelte +2 -2
  85. package/dist/form/FormCascader.svelte +6 -6
  86. package/dist/form/FormCheckbox.svelte +6 -6
  87. package/dist/form/FormDatePicker.svelte +5 -5
  88. package/dist/form/FormLabel.svelte +2 -2
  89. package/dist/form/FormRadio.svelte +5 -5
  90. package/dist/form/FormRating.svelte +7 -7
  91. package/dist/form/FormSection.svelte +2 -2
  92. package/dist/form/FormSelect.svelte +12 -12
  93. package/dist/form/FormSlider.svelte +10 -10
  94. package/dist/form/FormSwitch.svelte +5 -5
  95. package/dist/form/FormTagInput.svelte +5 -5
  96. package/dist/form/FormTreeSelect.svelte +7 -7
  97. package/dist/form/FormUpload.svelte +10 -10
  98. package/dist/highlight/Highlight.svelte +2 -2
  99. package/dist/highlight/meta.d.ts +1 -1
  100. package/dist/highlight/meta.d.ts.map +1 -1
  101. package/dist/highlight/meta.js +6 -1
  102. package/dist/image/ImagePreview.svelte +7 -7
  103. package/dist/image/meta.d.ts +1 -1
  104. package/dist/image/meta.js +1 -1
  105. package/dist/index.d.ts +2 -1
  106. package/dist/index.d.ts.map +1 -1
  107. package/dist/index.js +2 -1
  108. package/dist/input/Input.svelte +14 -7
  109. package/dist/input-number/InputNumber.svelte +25 -19
  110. package/dist/layout/Content.svelte +17 -3
  111. package/dist/layout/Content.svelte.d.ts +6 -0
  112. package/dist/layout/Content.svelte.d.ts.map +1 -1
  113. package/dist/layout/Footer.svelte +22 -5
  114. package/dist/layout/Footer.svelte.d.ts +6 -0
  115. package/dist/layout/Footer.svelte.d.ts.map +1 -1
  116. package/dist/layout/Header.svelte +20 -3
  117. package/dist/layout/Header.svelte.d.ts +6 -0
  118. package/dist/layout/Header.svelte.d.ts.map +1 -1
  119. package/dist/layout/Layout.svelte +15 -2
  120. package/dist/layout/Layout.svelte.d.ts +6 -0
  121. package/dist/layout/Layout.svelte.d.ts.map +1 -1
  122. package/dist/layout/Sider.svelte +29 -4
  123. package/dist/layout/Sider.svelte.d.ts +8 -0
  124. package/dist/layout/Sider.svelte.d.ts.map +1 -1
  125. package/dist/layout/meta.d.ts +88 -0
  126. package/dist/layout/meta.d.ts.map +1 -1
  127. package/dist/layout/meta.js +22 -5
  128. package/dist/list/List.svelte +3 -3
  129. package/dist/list/ListItem.svelte +5 -5
  130. package/dist/list/ListMeta.svelte +1 -1
  131. package/dist/list/meta.d.ts +1 -1
  132. package/dist/list/meta.js +2 -2
  133. package/dist/menu/Menu.svelte +119 -38
  134. package/dist/menu/Menu.svelte.d.ts +16 -1
  135. package/dist/menu/Menu.svelte.d.ts.map +1 -1
  136. package/dist/menu/MenuPopupNode.svelte +37 -37
  137. package/dist/menu/MenuPopupNode.svelte.d.ts +1 -1
  138. package/dist/menu/MenuPopupNode.svelte.d.ts.map +1 -1
  139. package/dist/menu/meta.d.ts +21 -1
  140. package/dist/menu/meta.d.ts.map +1 -1
  141. package/dist/menu/meta.js +6 -1
  142. package/dist/menu/types.d.ts +6 -0
  143. package/dist/menu/types.d.ts.map +1 -1
  144. package/dist/modal/ConfirmModal.svelte +1 -1
  145. package/dist/modal/Modal.svelte +1 -1
  146. package/dist/nav/Nav.svelte +293 -0
  147. package/dist/nav/Nav.svelte.d.ts +75 -0
  148. package/dist/nav/Nav.svelte.d.ts.map +1 -0
  149. package/dist/nav/NavFooter.svelte +82 -0
  150. package/dist/nav/NavFooter.svelte.d.ts +14 -0
  151. package/dist/nav/NavFooter.svelte.d.ts.map +1 -0
  152. package/dist/nav/NavHeader.svelte +66 -0
  153. package/dist/nav/NavHeader.svelte.d.ts +18 -0
  154. package/dist/nav/NavHeader.svelte.d.ts.map +1 -0
  155. package/dist/nav/NavItem.svelte +68 -0
  156. package/dist/nav/NavItem.svelte.d.ts +28 -0
  157. package/dist/nav/NavItem.svelte.d.ts.map +1 -0
  158. package/dist/nav/NavSub.svelte +57 -0
  159. package/dist/nav/NavSub.svelte.d.ts +18 -0
  160. package/dist/nav/NavSub.svelte.d.ts.map +1 -0
  161. package/dist/nav/context.d.ts +31 -0
  162. package/dist/nav/context.d.ts.map +1 -0
  163. package/dist/nav/context.js +15 -0
  164. package/dist/nav/index.d.ts +20 -0
  165. package/dist/nav/index.d.ts.map +1 -0
  166. package/dist/nav/index.js +18 -0
  167. package/dist/nav/meta.d.ts +296 -0
  168. package/dist/nav/meta.d.ts.map +1 -0
  169. package/dist/nav/meta.js +119 -0
  170. package/dist/nav/types.d.ts +52 -0
  171. package/dist/nav/types.d.ts.map +1 -0
  172. package/dist/nav/types.js +31 -0
  173. package/dist/notification/NotificationItem.svelte +5 -5
  174. package/dist/notification/meta.d.ts +1 -1
  175. package/dist/notification/meta.d.ts.map +1 -1
  176. package/dist/notification/meta.js +1 -0
  177. package/dist/overflow-list/OverflowList.svelte +4 -4
  178. package/dist/pagination/Pagination.svelte +5 -5
  179. package/dist/popconfirm/Popconfirm.svelte +10 -14
  180. package/dist/popconfirm/Popconfirm.svelte.d.ts.map +1 -1
  181. package/dist/popconfirm/meta.d.ts +1 -1
  182. package/dist/popconfirm/meta.d.ts.map +1 -1
  183. package/dist/popconfirm/meta.js +1 -0
  184. package/dist/popover/Popover.svelte +13 -13
  185. package/dist/progress/Progress.svelte +1 -1
  186. package/dist/radio/Radio.svelte +58 -11
  187. package/dist/radio/Radio.svelte.d.ts +11 -0
  188. package/dist/radio/Radio.svelte.d.ts.map +1 -1
  189. package/dist/radio/RadioGroup.svelte +1 -1
  190. package/dist/radio/meta.d.ts +54 -1
  191. package/dist/radio/meta.d.ts.map +1 -1
  192. package/dist/radio/meta.js +12 -1
  193. package/dist/rating/Rating.svelte +20 -4
  194. package/dist/rating/Rating.svelte.d.ts +5 -0
  195. package/dist/rating/Rating.svelte.d.ts.map +1 -1
  196. package/dist/rating/meta.d.ts +25 -0
  197. package/dist/rating/meta.d.ts.map +1 -1
  198. package/dist/rating/meta.js +5 -0
  199. package/dist/scroll-list/ScrollColumn.svelte +1 -1
  200. package/dist/select/Select.svelte +26 -18
  201. package/dist/side-sheet/SideSheet.svelte +4 -4
  202. package/dist/slider/Slider.svelte +93 -17
  203. package/dist/slider/Slider.svelte.d.ts +20 -0
  204. package/dist/slider/Slider.svelte.d.ts.map +1 -1
  205. package/dist/slider/meta.d.ts +36 -1
  206. package/dist/slider/meta.d.ts.map +1 -1
  207. package/dist/slider/meta.js +8 -1
  208. package/dist/steps/Steps.svelte +7 -7
  209. package/dist/steps/meta.d.ts +1 -1
  210. package/dist/steps/meta.js +1 -1
  211. package/dist/switch/Switch.svelte +6 -6
  212. package/dist/switch/meta.d.ts +1 -1
  213. package/dist/switch/meta.js +1 -1
  214. package/dist/table/Table.svelte +17 -17
  215. package/dist/tabs/Tabs.svelte +12 -12
  216. package/dist/tabs/meta.d.ts +1 -1
  217. package/dist/tabs/meta.js +1 -1
  218. package/dist/tag/Tag.svelte +4 -2
  219. package/dist/tag/meta.d.ts +1 -1
  220. package/dist/tag/meta.d.ts.map +1 -1
  221. package/dist/tag/meta.js +2 -0
  222. package/dist/tag-input/TagInput.svelte +25 -14
  223. package/dist/textarea/TextArea.svelte +8 -8
  224. package/dist/time-picker/TimePicker.svelte +16 -16
  225. package/dist/timeline/Timeline.svelte +3 -3
  226. package/dist/timeline/meta.d.ts +1 -1
  227. package/dist/timeline/meta.js +1 -1
  228. package/dist/toast/ToastItem.svelte +2 -1
  229. package/dist/toast/meta.d.ts +1 -1
  230. package/dist/toast/meta.d.ts.map +1 -1
  231. package/dist/toast/meta.js +1 -0
  232. package/dist/tooltip/Tooltip.svelte +1 -1
  233. package/dist/transfer/Transfer.svelte +19 -19
  234. package/dist/tree/Tree.svelte +7 -6
  235. package/dist/tree-select/TreeSelect.svelte +20 -11
  236. package/dist/typography/TypographyBase.svelte +21 -12
  237. package/dist/typography/meta.d.ts +1 -1
  238. package/dist/typography/meta.d.ts.map +1 -1
  239. package/dist/typography/meta.js +3 -1
  240. package/dist/upload/Upload.svelte +44 -41
  241. package/package.json +3 -3
@@ -0,0 +1,31 @@
1
+ /**
2
+ * 把 Nav 项(Semi 字段)递归映射为 Menu 的 MenuItemDef。
3
+ * itemKey→key、text→label、items→children、link→href,icon/target/rel/disabled 直传。
4
+ */
5
+ export function navItemsToMenuItems(items = []) {
6
+ return items.map((it) => {
7
+ const node = {
8
+ key: it.itemKey,
9
+ label: it.text,
10
+ };
11
+ if (it.icon)
12
+ node.icon = it.icon;
13
+ if (it.disabled)
14
+ node.disabled = it.disabled;
15
+ if (it.link)
16
+ node.href = it.link;
17
+ if (it.target)
18
+ node.target = it.target;
19
+ if (it.rel)
20
+ node.rel = it.rel;
21
+ if (it.onClick)
22
+ node.onClick = it.onClick;
23
+ if (it.onMouseEnter)
24
+ node.onMouseEnter = it.onMouseEnter;
25
+ if (it.onMouseLeave)
26
+ node.onMouseLeave = it.onMouseLeave;
27
+ if (it.items && it.items.length)
28
+ node.children = navItemsToMenuItems(it.items);
29
+ return node;
30
+ });
31
+ }
@@ -248,14 +248,14 @@
248
248
 
249
249
  .cd-notification-item__title {
250
250
  font-size: var(--cd-notification-title-size);
251
- font-weight: 600;
251
+ font-weight: var(--cd-notification-title-weight);
252
252
  line-height: 1.4;
253
253
  color: var(--cd-notification-color-title);
254
254
  overflow-wrap: anywhere;
255
255
  }
256
256
 
257
257
  .cd-notification-item__content {
258
- margin-block-start: var(--cd-spacing-1);
258
+ margin-block-start: var(--cd-spacing-extra-tight);
259
259
  font-size: var(--cd-notification-content-size);
260
260
  line-height: 1.5;
261
261
  color: var(--cd-notification-color-content);
@@ -265,9 +265,9 @@
265
265
  .cd-notification-item__footer {
266
266
  display: flex;
267
267
  flex-wrap: wrap;
268
- gap: var(--cd-spacing-2);
268
+ gap: var(--cd-spacing-tight);
269
269
  align-items: center;
270
- margin-block-start: var(--cd-spacing-3);
270
+ margin-block-start: var(--cd-spacing-base-tight);
271
271
  }
272
272
 
273
273
  .cd-notification-item__progress {
@@ -342,7 +342,7 @@
342
342
  background: transparent;
343
343
  color: var(--cd-notification-close-color);
344
344
  cursor: pointer;
345
- border-radius: var(--cd-radius-1);
345
+ border-radius: var(--cd-border-radius-small);
346
346
  transition: color var(--cd-notification-motion-duration) ease;
347
347
  }
348
348
 
@@ -88,7 +88,7 @@ export declare const meta: {
88
88
  readonly focusable: false;
89
89
  readonly note: "error/warning 用 role=alert + aria-live=assertive,其余 role=status + aria-live=polite;标题 aria-labelledby、内容 aria-describedby;关闭按钮 button + aria-label「关闭」。不抢焦点、不锁滚动。";
90
90
  };
91
- readonly tokens: readonly ["--cd-notification-width", "--cd-notification-bg", "--cd-notification-color-title", "--cd-notification-color-content", "--cd-notification-border", "--cd-notification-radius", "--cd-notification-shadow", "--cd-notification-padding", "--cd-notification-gap", "--cd-notification-icon-success", "--cd-notification-icon-info", "--cd-notification-icon-warning", "--cd-notification-icon-error", "--cd-notification-close-color", "--cd-notification-close-color-hover", "--cd-notification-title-size", "--cd-notification-content-size", "--cd-notification-z", "--cd-notification-offset", "--cd-notification-motion-duration", "--cd-notification-progress-height", "--cd-notification-progress-color", "--cd-notification-bg-dark", "--cd-notification-border-dark", "--cd-notification-color-title-dark", "--cd-notification-color-content-dark", "--cd-notification-close-color-dark", "--cd-notification-close-color-hover-dark"];
91
+ readonly tokens: readonly ["--cd-notification-width", "--cd-notification-bg", "--cd-notification-color-title", "--cd-notification-color-content", "--cd-notification-border", "--cd-notification-radius", "--cd-notification-shadow", "--cd-notification-padding", "--cd-notification-gap", "--cd-notification-icon-success", "--cd-notification-icon-info", "--cd-notification-icon-warning", "--cd-notification-icon-error", "--cd-notification-close-color", "--cd-notification-close-color-hover", "--cd-notification-title-size", "--cd-notification-title-weight", "--cd-notification-content-size", "--cd-notification-z", "--cd-notification-offset", "--cd-notification-motion-duration", "--cd-notification-progress-height", "--cd-notification-progress-color", "--cd-notification-bg-dark", "--cd-notification-border-dark", "--cd-notification-color-title-dark", "--cd-notification-color-content-dark", "--cd-notification-close-color-dark", "--cd-notification-close-color-hover-dark"];
92
92
  readonly responsive: false;
93
93
  readonly examples: readonly [{
94
94
  readonly title: "成功";
@@ -1 +1 @@
1
- {"version":3,"file":"meta.d.ts","sourceRoot":"","sources":["../../src/notification/meta.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmHP,CAAC"}
1
+ {"version":3,"file":"meta.d.ts","sourceRoot":"","sources":["../../src/notification/meta.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoHP,CAAC"}
@@ -91,6 +91,7 @@ export const meta = {
91
91
  '--cd-notification-close-color',
92
92
  '--cd-notification-close-color-hover',
93
93
  '--cd-notification-title-size',
94
+ '--cd-notification-title-weight',
94
95
  '--cd-notification-content-size',
95
96
  '--cd-notification-z',
96
97
  '--cd-notification-offset',
@@ -415,14 +415,14 @@
415
415
 
416
416
  <style>
417
417
  .cd-overflow-list {
418
- --cd-overflow-list-gap: var(--cd-spacing-2, 8px);
419
- --cd-overflow-list-gap-small: var(--cd-spacing-1, 4px);
420
- --cd-overflow-list-gap-large: var(--cd-spacing-3, 12px);
418
+ --cd-overflow-list-gap: var(--cd-spacing-tight, 8px);
419
+ --cd-overflow-list-gap-small: var(--cd-spacing-extra-tight, 4px);
420
+ --cd-overflow-list-gap-large: var(--cd-spacing-base-tight, 12px);
421
421
  --cd-overflow-list-overflow-color: var(--cd-color-text-1, #4e5969);
422
422
  --cd-overflow-list-overflow-color-hover: var(--cd-color-text-0, #1d2129);
423
423
  --cd-overflow-list-overflow-bg: var(--cd-color-fill-0, #f2f3f5);
424
424
  --cd-overflow-list-overflow-bg-hover: var(--cd-color-fill-1, #e5e6eb);
425
- --cd-overflow-list-overflow-radius: var(--cd-radius-default, 4px);
425
+ --cd-overflow-list-overflow-radius: var(--cd-border-radius-small);
426
426
  --cd-overflow-list-focus-ring: var(--cd-color-primary, #165dff);
427
427
 
428
428
  position: relative;
@@ -351,7 +351,7 @@
351
351
  justify-content: center;
352
352
  min-inline-size: var(--cd-pagination-item-size);
353
353
  block-size: var(--cd-pagination-item-size);
354
- padding-inline: var(--cd-spacing-2);
354
+ padding-inline: var(--cd-spacing-tight);
355
355
  border: var(--cd-pagination-item-border);
356
356
  border-radius: var(--cd-pagination-item-radius);
357
357
  background: transparent;
@@ -392,7 +392,7 @@
392
392
  .cd-pagination__simple {
393
393
  display: inline-flex;
394
394
  align-items: center;
395
- gap: var(--cd-spacing-1);
395
+ gap: var(--cd-spacing-extra-tight);
396
396
  }
397
397
  .cd-pagination__size-changer {
398
398
  display: inline-flex;
@@ -401,7 +401,7 @@
401
401
  .cd-pagination__jumper {
402
402
  display: inline-flex;
403
403
  align-items: center;
404
- gap: var(--cd-spacing-1);
404
+ gap: var(--cd-spacing-extra-tight);
405
405
  }
406
406
  .cd-pagination__jumper-input {
407
407
  inline-size: var(--cd-pagination-jumper-width, 3.5rem);
@@ -410,13 +410,13 @@
410
410
  .cd-pagination--small .cd-pagination__prev,
411
411
  .cd-pagination--small .cd-pagination__next,
412
412
  .cd-pagination--small .cd-pagination__ellipsis {
413
- font-size: var(--cd-font-size-1);
413
+ font-size: var(--cd-font-size-small);
414
414
  }
415
415
  .cd-pagination--large .cd-pagination__page,
416
416
  .cd-pagination--large .cd-pagination__prev,
417
417
  .cd-pagination--large .cd-pagination__next,
418
418
  .cd-pagination--large .cd-pagination__ellipsis {
419
- font-size: var(--cd-font-size-3);
419
+ font-size: var(--cd-font-size-header-6);
420
420
  }
421
421
  @media (prefers-reduced-motion: reduce) {
422
422
  .cd-pagination__page,
@@ -366,7 +366,8 @@
366
366
  $effect(() => {
367
367
  if (!isOpen || !popupEl) return;
368
368
  // guardFocus=true(默认)激活 Tab 循环焦点陷阱;false 时跳过(允许 Tab 离开浮层)。
369
- const trap = guardFocus ? useFocusTrap(popupEl) : null;
369
+ // returnFocusOnClose 在构造期决定 deactivate 是否归还焦点(true 默认归还)。
370
+ const trap = guardFocus ? useFocusTrap(popupEl, { returnFocus: returnFocusOnClose }) : null;
370
371
  trap?.activate();
371
372
  let undismiss = () => {};
372
373
  // popup portal 到 body 后不在 rootEl 子树内:把 popupEl 列为 extraTargets,
@@ -398,14 +399,9 @@
398
399
  }
399
400
  return () => {
400
401
  undismiss();
401
- // returnFocusOnClose=true(默认)时归还焦点给触发元素;false 时不归还。
402
- if (trap) {
403
- if (returnFocusOnClose) {
404
- trap.deactivate();
405
- } else {
406
- trap.deactivate({ returnFocus: false });
407
- }
408
- }
402
+ // returnFocusOnClose=true(默认)时归还焦点给触发元素;false 时不归还
403
+ // (归还策略已在 useFocusTrap 构造期通过 returnFocus 选项决定)。
404
+ trap?.deactivate();
409
405
  // 浮层关闭即复位 loading(覆盖受控 open 在 loading 中被外部关闭的边界)。
410
406
  confirmLoading = false;
411
407
  };
@@ -606,7 +602,7 @@
606
602
  .cd-popconfirm__trigger:focus-visible {
607
603
  outline: none;
608
604
  box-shadow: var(--cd-focus-ring);
609
- border-radius: var(--cd-radius-1);
605
+ border-radius: var(--cd-border-radius-small);
610
606
  }
611
607
  .cd-popconfirm__trigger[aria-disabled='true'] {
612
608
  cursor: not-allowed;
@@ -675,7 +671,7 @@
675
671
 
676
672
  .cd-popconfirm__body {
677
673
  display: flex;
678
- gap: var(--cd-spacing-2);
674
+ gap: var(--cd-spacing-tight);
679
675
  }
680
676
  .cd-popconfirm__icon {
681
677
  display: inline-flex;
@@ -698,11 +694,11 @@
698
694
  .cd-popconfirm__title {
699
695
  color: var(--cd-popconfirm-title-color);
700
696
  font-size: var(--cd-popconfirm-title-size);
701
- font-weight: 600;
697
+ font-weight: var(--cd-popconfirm-title-weight);
702
698
  line-height: 1.4;
703
699
  }
704
700
  .cd-popconfirm__content {
705
- margin-block-start: var(--cd-spacing-1);
701
+ margin-block-start: var(--cd-spacing-extra-tight);
706
702
  color: var(--cd-popconfirm-color-text-secondary);
707
703
  font-size: var(--cd-popconfirm-content-size);
708
704
  line-height: 1.5;
@@ -712,7 +708,7 @@
712
708
  display: flex;
713
709
  justify-content: flex-end;
714
710
  gap: var(--cd-popconfirm-gap-footer);
715
- margin-block-start: var(--cd-spacing-3);
711
+ margin-block-start: var(--cd-spacing-base-tight);
716
712
  }
717
713
 
718
714
  /* reduced-motion:禁用进场动画 */
@@ -1 +1 @@
1
- {"version":3,"file":"Popconfirm.svelte.d.ts","sourceRoot":"","sources":["../../src/popconfirm/Popconfirm.svelte.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Popconfirm.svelte.d.ts","sourceRoot":"","sources":["../../src/popconfirm/Popconfirm.svelte.ts"],"names":[],"mappings":"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"}
@@ -257,7 +257,7 @@ export declare const meta: {
257
257
  readonly hasRole: true;
258
258
  readonly note: "触发器 aria-haspopup=dialog + aria-expanded + aria-controls;浮层 role=dialog(non-modal,不设 aria-modal)+ aria-labelledby(title) + aria-describedby(content);Esc 关闭,Tab 在浮层内循环(useFocusTrap),关闭归还焦点;危险/警示图标 aria-hidden(语义靠文案)。";
259
259
  };
260
- readonly tokens: readonly ["--cd-popconfirm-bg", "--cd-popconfirm-color-text", "--cd-popconfirm-color-text-secondary", "--cd-popconfirm-border", "--cd-popconfirm-shadow", "--cd-popconfirm-radius", "--cd-popconfirm-padding", "--cd-popconfirm-icon-color-danger", "--cd-popconfirm-icon-color-warning", "--cd-popconfirm-icon-color-info", "--cd-popconfirm-title-color", "--cd-popconfirm-title-size", "--cd-popconfirm-content-size", "--cd-popconfirm-max-width", "--cd-popconfirm-z", "--cd-popconfirm-gap-footer", "--cd-popconfirm-arrow-size", "--cd-popconfirm-motion-duration", "--cd-popconfirm-motion-easing"];
260
+ readonly tokens: readonly ["--cd-popconfirm-bg", "--cd-popconfirm-color-text", "--cd-popconfirm-color-text-secondary", "--cd-popconfirm-border", "--cd-popconfirm-shadow", "--cd-popconfirm-radius", "--cd-popconfirm-padding", "--cd-popconfirm-icon-color-danger", "--cd-popconfirm-icon-color-warning", "--cd-popconfirm-icon-color-info", "--cd-popconfirm-title-color", "--cd-popconfirm-title-size", "--cd-popconfirm-title-weight", "--cd-popconfirm-content-size", "--cd-popconfirm-max-width", "--cd-popconfirm-z", "--cd-popconfirm-gap-footer", "--cd-popconfirm-arrow-size", "--cd-popconfirm-motion-duration", "--cd-popconfirm-motion-easing"];
261
261
  readonly responsive: false;
262
262
  readonly examples: readonly [{
263
263
  readonly title: "删除确认(danger)";
@@ -1 +1 @@
1
- {"version":3,"file":"meta.d.ts","sourceRoot":"","sources":["../../src/popconfirm/meta.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmMP,CAAC"}
1
+ {"version":3,"file":"meta.d.ts","sourceRoot":"","sources":["../../src/popconfirm/meta.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoMP,CAAC"}
@@ -173,6 +173,7 @@ export const meta = {
173
173
  '--cd-popconfirm-icon-color-info',
174
174
  '--cd-popconfirm-title-color',
175
175
  '--cd-popconfirm-title-size',
176
+ '--cd-popconfirm-title-weight',
176
177
  '--cd-popconfirm-content-size',
177
178
  '--cd-popconfirm-max-width',
178
179
  '--cd-popconfirm-z',
@@ -529,14 +529,14 @@
529
529
  /* 关闭按钮:绝对定位于浮层右上角 */
530
530
  .cd-popover__close-btn {
531
531
  position: absolute;
532
- inset-block-start: var(--cd-spacing-2);
533
- inset-inline-end: var(--cd-spacing-2);
532
+ inset-block-start: var(--cd-spacing-tight);
533
+ inset-inline-end: var(--cd-spacing-tight);
534
534
  display: inline-flex;
535
535
  align-items: center;
536
536
  justify-content: center;
537
- padding: var(--cd-spacing-1);
537
+ padding: var(--cd-spacing-extra-tight);
538
538
  border: none;
539
- border-radius: var(--cd-radius-1);
539
+ border-radius: var(--cd-border-radius-small);
540
540
  background: transparent;
541
541
  color: var(--cd-color-text-2);
542
542
  cursor: pointer;
@@ -555,17 +555,17 @@
555
555
  .cd-popover__footer {
556
556
  display: flex;
557
557
  justify-content: flex-end;
558
- gap: var(--cd-spacing-2);
559
- margin-block-start: var(--cd-spacing-3);
558
+ gap: var(--cd-spacing-tight);
559
+ margin-block-start: var(--cd-spacing-base-tight);
560
560
  }
561
561
  .cd-popover__btn {
562
562
  display: inline-flex;
563
563
  align-items: center;
564
- padding: var(--cd-spacing-1) var(--cd-spacing-3);
565
- border-radius: var(--cd-radius-1);
564
+ padding: var(--cd-spacing-extra-tight) var(--cd-spacing-base-tight);
565
+ border-radius: var(--cd-border-radius-small);
566
566
  border: 1px solid transparent;
567
567
  font: inherit;
568
- font-size: var(--cd-font-size-2);
568
+ font-size: var(--cd-font-size-regular);
569
569
  cursor: pointer;
570
570
  transition: background 0.15s, color 0.15s, border-color 0.15s;
571
571
  }
@@ -583,8 +583,8 @@
583
583
  border-color: var(--cd-color-primary, #165dff);
584
584
  }
585
585
  .cd-popover__btn--ok:hover {
586
- background: var(--cd-color-primary-6, #4080ff);
587
- border-color: var(--cd-color-primary-6, #4080ff);
586
+ background: var(--cd-color-primary-hover);
587
+ border-color: var(--cd-color-primary-hover);
588
588
  }
589
589
  .cd-popover__btn:focus-visible {
590
590
  outline: none;
@@ -592,8 +592,8 @@
592
592
  }
593
593
 
594
594
  .cd-popover__title {
595
- margin-block-end: var(--cd-spacing-2);
596
- padding-block-end: var(--cd-spacing-2);
595
+ margin-block-end: var(--cd-spacing-tight);
596
+ padding-block-end: var(--cd-spacing-tight);
597
597
  border-block-end: 1px solid var(--cd-popover-title-border);
598
598
  color: var(--cd-popover-title-color);
599
599
  font-weight: var(--cd-font-weight-medium, 600);
@@ -277,7 +277,7 @@
277
277
  .cd-progress--line {
278
278
  display: flex;
279
279
  align-items: center;
280
- gap: var(--cd-spacing-2, 8px);
280
+ gap: var(--cd-spacing-tight, 8px);
281
281
  inline-size: 100%;
282
282
  }
283
283
 
@@ -26,6 +26,17 @@
26
26
  extra?: string | undefined;
27
27
  children?: Snippet;
28
28
  onChange?: (checked: boolean) => void;
29
+ addonId?: string;
30
+ addonClassName?: string;
31
+ addonStyle?: string;
32
+ autoFocus?: boolean;
33
+ extraId?: string;
34
+ mode?: 'advanced' | '';
35
+ style?: string;
36
+ onMouseEnter?: (e: MouseEvent) => void;
37
+ onMouseLeave?: (e: MouseEvent) => void;
38
+ ariaLabel?: string;
39
+ preventScroll?: boolean;
29
40
  }
30
41
 
31
42
  let {
@@ -40,16 +51,32 @@
40
51
  extra,
41
52
  children,
42
53
  onChange,
54
+ addonId,
55
+ addonClassName,
56
+ addonStyle,
57
+ autoFocus = false,
58
+ extraId: extraIdProp,
59
+ mode = '',
60
+ style,
61
+ onMouseEnter,
62
+ onMouseLeave,
63
+ ariaLabel,
64
+ preventScroll = false,
43
65
  }: Props = $props();
44
66
 
45
67
  const group = getRadioGroupContext();
46
68
 
47
69
  const fieldId = useId('cd-radio-item');
48
- const extraId = $derived(extra ? `${fieldId}-extra` : undefined);
70
+ const extraId = $derived(extraIdProp ?? (extra ? `${fieldId}-extra` : undefined));
49
71
 
50
72
  const isControlled = $derived(checked !== undefined);
51
73
  let inner = $state(getInitialChecked());
52
74
 
75
+ let inputEl = $state<HTMLElement | null>(null);
76
+ $effect(() => {
77
+ if (autoFocus) inputEl?.focus({ preventScroll });
78
+ });
79
+
53
80
  function getInitialChecked(): boolean {
54
81
  return defaultChecked;
55
82
  }
@@ -94,6 +121,10 @@
94
121
  if (resolvedDisabled) return;
95
122
  if (e.key === ' ' || e.key === 'Enter') {
96
123
  e.preventDefault();
124
+ if (mode === 'advanced' && isChecked) {
125
+ onChange?.(false);
126
+ return;
127
+ }
97
128
  activate();
98
129
  return;
99
130
  }
@@ -102,6 +133,10 @@
102
133
 
103
134
  function handleFancyClick() {
104
135
  if (resolvedDisabled) return;
136
+ if (mode === 'advanced' && isChecked) {
137
+ onChange?.(false);
138
+ return;
139
+ }
105
140
  activate();
106
141
  }
107
142
 
@@ -142,28 +177,33 @@
142
177
  <div
143
178
  {@attach registerAttach}
144
179
  class={cls}
180
+ {style}
145
181
  role="radio"
146
182
  aria-checked={isChecked}
147
183
  aria-disabled={resolvedDisabled ? 'true' : undefined}
148
184
  aria-describedby={extraId}
185
+ aria-label={ariaLabel}
149
186
  {tabindex}
150
187
  onclick={handleFancyClick}
151
188
  onkeydown={handleFancyKeydown}
189
+ onmouseenter={onMouseEnter}
190
+ onmouseleave={onMouseLeave}
152
191
  >
153
192
  {#if resolvedType !== 'pureCard'}
154
193
  <span class="cd-radio__circle" aria-hidden="true"></span>
155
194
  {/if}
156
195
  {#if children || extra}
157
- <span class="cd-radio__content">
196
+ <span class={['cd-radio__content', addonClassName].filter(Boolean).join(' ')} id={addonId} style={addonStyle}>
158
197
  {#if children}<span class="cd-radio__label">{@render children()}</span>{/if}
159
198
  {#if extra}<span class="cd-radio__extra" id={extraId}>{extra}</span>{/if}
160
199
  </span>
161
200
  {/if}
162
201
  </div>
163
202
  {:else}
164
- <label class={cls} for={fieldId}>
203
+ <label class={cls} for={fieldId} {style} onmouseenter={onMouseEnter} onmouseleave={onMouseLeave}>
165
204
  <input
166
205
  {@attach registerAttach}
206
+ bind:this={inputEl}
167
207
  id={fieldId}
168
208
  class="cd-radio__input"
169
209
  type="radio"
@@ -173,12 +213,14 @@
173
213
  disabled={resolvedDisabled}
174
214
  {tabindex}
175
215
  aria-describedby={extraId}
216
+ aria-labelledby={addonId ?? fieldId}
217
+ aria-label={ariaLabel}
176
218
  onchange={handleChange}
177
219
  onkeydown={handleKeydown}
178
220
  />
179
221
  <span class="cd-radio__circle" aria-hidden="true"></span>
180
222
  {#if children || extra}
181
- <span class="cd-radio__content">
223
+ <span class={['cd-radio__content', addonClassName].filter(Boolean).join(' ')} id={addonId} style={addonStyle}>
182
224
  {#if children}<span class="cd-radio__label">{@render children()}</span>{/if}
183
225
  {#if extra}<span class="cd-radio__extra" id={extraId}>{extra}</span>{/if}
184
226
  </span>
@@ -217,7 +259,7 @@
217
259
  block-size: var(--cd-radio-size-default);
218
260
  background: var(--cd-radio-bg);
219
261
  border: 1px solid var(--cd-radio-border);
220
- border-radius: var(--cd-radius-full);
262
+ border-radius: var(--cd-border-radius-full);
221
263
  transition:
222
264
  border-color var(--cd-motion-duration-fast) var(--cd-motion-ease-standard);
223
265
  }
@@ -229,6 +271,11 @@
229
271
  inline-size: var(--cd-radio-size-large);
230
272
  block-size: var(--cd-radio-size-large);
231
273
  }
274
+ /* 未选中态悬浮:对齐 Semi(描边 focus-border、背景 fill-0) */
275
+ .cd-radio:hover:not(.cd-radio--disabled):not(.cd-radio--checked) .cd-radio__circle {
276
+ background: var(--cd-radio-bg-hover);
277
+ border-color: var(--cd-radio-border-hover);
278
+ }
232
279
  .cd-radio--checked .cd-radio__circle {
233
280
  border-color: var(--cd-radio-color-checked);
234
281
  }
@@ -240,7 +287,7 @@
240
287
  block-size: 50%;
241
288
  transform: translate(-50%, -50%);
242
289
  background: var(--cd-radio-dot-color);
243
- border-radius: var(--cd-radius-full);
290
+ border-radius: var(--cd-border-radius-full);
244
291
  }
245
292
  /* 校验态:边框改用 warning/error,覆盖默认与 checked 描边(token 驱动) */
246
293
  .cd-radio--warning .cd-radio__circle {
@@ -256,11 +303,11 @@
256
303
  .cd-radio__content {
257
304
  display: inline-flex;
258
305
  flex-direction: column;
259
- gap: var(--cd-spacing-1);
306
+ gap: var(--cd-spacing-extra-tight);
260
307
  }
261
308
  .cd-radio__extra {
262
309
  color: var(--cd-color-text-2);
263
- font-size: var(--cd-font-size-1);
310
+ font-size: var(--cd-font-size-small);
264
311
  }
265
312
  /* ---- button / card / pureCard 型:role=radio 容器 ---- */
266
313
  .cd-radio--button,
@@ -278,13 +325,13 @@
278
325
  .cd-radio--button {
279
326
  gap: 0;
280
327
  block-size: var(--cd-radio-button-height);
281
- padding-inline: var(--cd-spacing-3);
328
+ padding-inline: var(--cd-spacing-base-tight);
282
329
  align-items: center;
283
330
  justify-content: center;
284
331
  color: var(--cd-color-text-0);
285
332
  background: var(--cd-radio-bg);
286
333
  border: 1px solid var(--cd-radio-border);
287
- border-radius: var(--cd-radius-2);
334
+ border-radius: var(--cd-border-radius-medium);
288
335
  }
289
336
  .cd-radio--button.cd-radio--small {
290
337
  block-size: var(--cd-radio-button-height-small);
@@ -302,7 +349,7 @@
302
349
  /* card / pureCard 型:带边框卡片,选中高亮边框 */
303
350
  .cd-radio--card,
304
351
  .cd-radio--pureCard {
305
- padding: var(--cd-spacing-3);
352
+ padding: var(--cd-spacing-base-tight);
306
353
  background: var(--cd-radio-bg);
307
354
  border: 1px solid var(--cd-radio-border);
308
355
  border-radius: var(--cd-radio-card-radius);
@@ -12,6 +12,17 @@ interface Props {
12
12
  extra?: string | undefined;
13
13
  children?: Snippet;
14
14
  onChange?: (checked: boolean) => void;
15
+ addonId?: string;
16
+ addonClassName?: string;
17
+ addonStyle?: string;
18
+ autoFocus?: boolean;
19
+ extraId?: string;
20
+ mode?: 'advanced' | '';
21
+ style?: string;
22
+ onMouseEnter?: (e: MouseEvent) => void;
23
+ onMouseLeave?: (e: MouseEvent) => void;
24
+ ariaLabel?: string;
25
+ preventScroll?: boolean;
15
26
  }
16
27
  declare const Radio: import("svelte").Component<Props, {}, "checked">;
17
28
  type Radio = ReturnType<typeof Radio>;
@@ -1 +1 @@
1
- {"version":3,"file":"Radio.svelte.d.ts","sourceRoot":"","sources":["../../src/radio/Radio.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAEtC,OAAO,EAEH,KAAK,UAAU,EACf,KAAK,SAAS,EACd,KAAK,WAAW,EAChB,KAAK,SAAS,EACf,MAAM,cAAc,CAAC;AAGtB,UAAU,KAAK;IACb,KAAK,EAAE,UAAU,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;CACvC;AAmJH,QAAA,MAAM,KAAK,kDAAwC,CAAC;AACpD,KAAK,KAAK,GAAG,UAAU,CAAC,OAAO,KAAK,CAAC,CAAC;AACtC,eAAe,KAAK,CAAC"}
1
+ {"version":3,"file":"Radio.svelte.d.ts","sourceRoot":"","sources":["../../src/radio/Radio.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAEtC,OAAO,EAEH,KAAK,UAAU,EACf,KAAK,SAAS,EACd,KAAK,WAAW,EAChB,KAAK,SAAS,EACf,MAAM,cAAc,CAAC;AAGtB,UAAU,KAAK;IACb,KAAK,EAAE,UAAU,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,UAAU,GAAG,EAAE,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,IAAI,CAAC;IACvC,YAAY,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,IAAI,CAAC;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AA2KH,QAAA,MAAM,KAAK,kDAAwC,CAAC;AACpD,KAAK,KAAK,GAAG,UAAU,CAAC,OAAO,KAAK,CAAC,CAAC;AACtC,eAAe,KAAK,CAAC"}
@@ -185,7 +185,7 @@
185
185
  <style>
186
186
  .cd-radio-group {
187
187
  display: inline-flex;
188
- gap: var(--cd-spacing-4);
188
+ gap: var(--cd-spacing-base);
189
189
  }
190
190
  .cd-radio-group--horizontal {
191
191
  flex-direction: row;
@@ -56,6 +56,59 @@ export declare const meta: {
56
56
  readonly name: "onChange";
57
57
  readonly type: "(checked: boolean) => void";
58
58
  readonly default: "undefined";
59
+ }, {
60
+ readonly name: "addonId";
61
+ readonly type: "string";
62
+ readonly default: "undefined";
63
+ readonly desc: "内容容器 id,用作 input 的 aria-labelledby";
64
+ }, {
65
+ readonly name: "addonClassName";
66
+ readonly type: "string";
67
+ readonly default: "undefined";
68
+ readonly desc: "内容容器附加 class";
69
+ }, {
70
+ readonly name: "addonStyle";
71
+ readonly type: "string";
72
+ readonly default: "undefined";
73
+ readonly desc: "内容容器内联样式";
74
+ }, {
75
+ readonly name: "autoFocus";
76
+ readonly type: "boolean";
77
+ readonly default: "false";
78
+ readonly desc: "挂载时自动聚焦";
79
+ }, {
80
+ readonly name: "extraId";
81
+ readonly type: "string";
82
+ readonly default: "undefined";
83
+ readonly desc: "自定义 extra 元素 id(默认由 fieldId 派生)";
84
+ }, {
85
+ readonly name: "mode";
86
+ readonly type: "'advanced'|''";
87
+ readonly default: "''";
88
+ readonly desc: "advanced:再次点击选中项可取消(onChange(false))";
89
+ }, {
90
+ readonly name: "style";
91
+ readonly type: "string";
92
+ readonly default: "undefined";
93
+ readonly desc: "根元素内联样式";
94
+ }, {
95
+ readonly name: "onMouseEnter";
96
+ readonly type: "(e: MouseEvent) => void";
97
+ readonly default: "undefined";
98
+ }, {
99
+ readonly name: "onMouseLeave";
100
+ readonly type: "(e: MouseEvent) => void";
101
+ readonly default: "undefined";
102
+ }, {
103
+ readonly name: "ariaLabel";
104
+ readonly type: "string";
105
+ readonly default: "undefined";
106
+ readonly desc: "无障碍标签";
107
+ }, {
108
+ readonly name: "preventScroll";
109
+ readonly type: "boolean";
110
+ readonly default: "false";
111
+ readonly desc: "autoFocus 时阻止滚动";
59
112
  }];
60
113
  readonly group: {
61
114
  readonly name: "RadioGroup";
@@ -122,6 +175,6 @@ export declare const meta: {
122
175
  readonly keyboard: readonly ["ArrowUp", "ArrowDown", "ArrowLeft", "ArrowRight", "Home", "End", "Space"];
123
176
  readonly notes: readonly ["div role=radiogroup 包裹", "roving tabindex:仅选中项(或首个可用项)tabindex=0", "方向键在可用项间循环移动并选中、聚焦,跳过 disabled", "Home/End 跳首/末可用项", "RTL(dir=rtl)下 ArrowLeft/ArrowRight 语义镜像翻转", "button/card/pureCard 型用容器 role=radio + aria-checked(非原生 input),Space/Enter 选中", "extra 经 aria-describedby 关联"];
124
177
  };
125
- readonly tokens: readonly ["--cd-radio-*", "--cd-focus-ring", "--cd-motion-*", "--cd-spacing-*", "--cd-radius-full"];
178
+ readonly tokens: readonly ["--cd-radio-*", "--cd-focus-ring", "--cd-motion-*", "--cd-spacing-*", "--cd-border-radius-full"];
126
179
  };
127
180
  //# sourceMappingURL=meta.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"meta.d.ts","sourceRoot":"","sources":["../../src/radio/meta.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+DP,CAAC"}
1
+ {"version":3,"file":"meta.d.ts","sourceRoot":"","sources":["../../src/radio/meta.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0EP,CAAC"}