niuma-ui 2.0.2 → 2.0.4

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 (242) hide show
  1. package/CHANGELOG.md +61 -0
  2. package/README.md +2 -0
  3. package/README.zh-CN.md +2 -0
  4. package/dist/components/_shared/src/reka.d.ts +1 -1
  5. package/dist/components/_shared/src/reka.js +2 -2
  6. package/dist/components/anchor/index.d.ts +1 -1
  7. package/dist/components/anchor/src/RsAnchor.css +63 -32
  8. package/dist/components/anchor/src/RsAnchor.d.ts +29 -2
  9. package/dist/components/anchor/src/RsAnchor.impl.js +199 -81
  10. package/dist/components/anchor/src/RsAnchor.js +1 -1
  11. package/dist/components/anchor/src/anchor-utils.d.ts +36 -4
  12. package/dist/components/anchor/src/anchor-utils.js +81 -19
  13. package/dist/components/auto-complete/index.d.ts +2 -0
  14. package/dist/components/auto-complete/src/RsAutoComplete.css +122 -0
  15. package/dist/components/auto-complete/src/RsAutoComplete.d.ts +47 -7
  16. package/dist/components/auto-complete/src/RsAutoComplete.impl.js +180 -72
  17. package/dist/components/auto-complete/src/RsAutoComplete.js +4 -1
  18. package/dist/components/auto-complete/src/auto-complete-utils.d.ts +7 -0
  19. package/dist/components/auto-complete/src/auto-complete-utils.js +17 -0
  20. package/dist/components/avatar/index.d.ts +1 -0
  21. package/dist/components/avatar/src/RsAvatar.css +36 -19
  22. package/dist/components/avatar/src/RsAvatar.d.ts +9 -3
  23. package/dist/components/avatar/src/RsAvatar.impl.js +57 -33
  24. package/dist/components/avatar/src/RsAvatar.js +2 -1
  25. package/dist/components/avatar/src/avatar-utils.d.ts +16 -7
  26. package/dist/components/avatar/src/avatar-utils.js +41 -3
  27. package/dist/components/badge/index.d.ts +1 -0
  28. package/dist/components/badge/src/RsBadge.css +61 -8
  29. package/dist/components/badge/src/RsBadge.d.ts +19 -3
  30. package/dist/components/badge/src/RsBadge.impl.js +46 -3
  31. package/dist/components/badge/src/RsBadge.js +1 -1
  32. package/dist/components/badge/src/badge-utils.d.ts +11 -0
  33. package/dist/components/badge/src/badge-utils.js +32 -0
  34. package/dist/components/breadcrumb/index.d.ts +1 -1
  35. package/dist/components/breadcrumb/src/RsBreadcrumb.css +50 -17
  36. package/dist/components/breadcrumb/src/RsBreadcrumb.d.ts +45 -6
  37. package/dist/components/breadcrumb/src/RsBreadcrumb.impl.js +111 -12
  38. package/dist/components/breadcrumb/src/RsBreadcrumb.js +2 -1
  39. package/dist/components/breadcrumb/src/breadcrumb-utils.d.ts +37 -5
  40. package/dist/components/breadcrumb/src/breadcrumb-utils.js +70 -9
  41. package/dist/components/button/src/RsButton.css +87 -71
  42. package/dist/components/button/src/RsButton.d.ts +7 -3
  43. package/dist/components/button/src/RsButton.impl.js +43 -31
  44. package/dist/components/button/src/RsButton.js +1 -1
  45. package/dist/components/button/src/button-utils.d.ts +17 -0
  46. package/dist/components/button/src/button-utils.js +14 -1
  47. package/dist/components/calendar-grid/index.d.ts +2 -0
  48. package/dist/components/calendar-grid/src/RsCalendarGrid.css +105 -45
  49. package/dist/components/calendar-grid/src/RsCalendarGrid.d.ts +62 -2
  50. package/dist/components/calendar-grid/src/RsCalendarGrid.impl.js +265 -94
  51. package/dist/components/calendar-grid/src/RsCalendarGrid.js +1 -1
  52. package/dist/components/calendar-grid/src/calendar-grid-utils.d.ts +72 -0
  53. package/dist/components/calendar-grid/src/calendar-grid-utils.js +122 -0
  54. package/dist/components/card/index.d.ts +1 -1
  55. package/dist/components/card/src/RsCard.css +108 -98
  56. package/dist/components/card/src/RsCard.d.ts +3 -12
  57. package/dist/components/card/src/RsCard.impl.js +29 -25
  58. package/dist/components/card/src/RsCard.js +2 -1
  59. package/dist/components/card/src/card-utils.d.ts +25 -0
  60. package/dist/components/card/src/card-utils.js +10 -0
  61. package/dist/components/cascader/index.d.ts +1 -0
  62. package/dist/components/cascader/src/RsCascader.css +175 -30
  63. package/dist/components/cascader/src/RsCascader.d.ts +14 -2
  64. package/dist/components/cascader/src/RsCascader.impl.js +277 -48
  65. package/dist/components/cascader/src/RsCascader.js +1 -1
  66. package/dist/components/cascader/src/cascader-utils.d.ts +2 -0
  67. package/dist/components/cascader/src/cascader-utils.js +8 -1
  68. package/dist/components/checkbox/index.d.ts +1 -0
  69. package/dist/components/checkbox/src/RsCheckbox.css +46 -23
  70. package/dist/components/checkbox/src/RsCheckbox.d.ts +11 -1
  71. package/dist/components/checkbox/src/RsCheckbox.impl.js +37 -9
  72. package/dist/components/checkbox/src/RsCheckbox.js +2 -1
  73. package/dist/components/checkbox/src/checkbox-utils.d.ts +4 -0
  74. package/dist/components/checkbox/src/checkbox-utils.js +12 -0
  75. package/dist/components/container/index.d.ts +1 -1
  76. package/dist/components/container/src/RsContainer.css +11 -11
  77. package/dist/components/container/src/RsContainer.d.ts +2 -12
  78. package/dist/components/container/src/RsContainer.impl.js +10 -57
  79. package/dist/components/container/src/RsContainer.js +1 -1
  80. package/dist/components/container/src/container-utils.d.ts +23 -0
  81. package/dist/components/container/src/container-utils.js +51 -0
  82. package/dist/components/date-picker/index.d.ts +4 -2
  83. package/dist/components/date-picker/src/RsDatePicker.css +42 -22
  84. package/dist/components/date-picker/src/RsDatePicker.d.ts +44 -20
  85. package/dist/components/date-picker/src/RsDatePicker.impl.js +484 -222
  86. package/dist/components/date-picker/src/RsDatePicker.js +1 -3
  87. package/dist/components/date-picker/src/RsDateTimePicker.d.ts +33 -6
  88. package/dist/components/date-picker/src/RsDateTimePicker.impl.js +47 -6
  89. package/dist/components/date-picker/src/date-picker-utils.d.ts +19 -0
  90. package/dist/components/date-picker/src/date-picker-utils.js +33 -10
  91. package/dist/components/divider/index.d.ts +1 -0
  92. package/dist/components/divider/src/RsDivider.css +37 -22
  93. package/dist/components/divider/src/RsDivider.d.ts +4 -2
  94. package/dist/components/divider/src/RsDivider.impl.js +26 -12
  95. package/dist/components/divider/src/RsDivider.js +1 -1
  96. package/dist/components/divider/src/divider-utils.d.ts +4 -0
  97. package/dist/components/dynamic-tags/index.d.ts +1 -1
  98. package/dist/components/dynamic-tags/src/RsDynamicTags.css +115 -38
  99. package/dist/components/dynamic-tags/src/RsDynamicTags.d.ts +59 -18
  100. package/dist/components/dynamic-tags/src/RsDynamicTags.impl.js +269 -106
  101. package/dist/components/dynamic-tags/src/RsDynamicTags.js +1 -1
  102. package/dist/components/dynamic-tags/src/dynamic-tags-utils.d.ts +19 -0
  103. package/dist/components/dynamic-tags/src/dynamic-tags-utils.js +60 -0
  104. package/dist/components/fieldset/src/RsFieldset.css +71 -41
  105. package/dist/components/fieldset/src/RsFieldset.d.ts +21 -2
  106. package/dist/components/fieldset/src/RsFieldset.impl.js +93 -26
  107. package/dist/components/fieldset/src/RsFieldset.js +1 -1
  108. package/dist/components/fieldset/src/fieldset-utils.d.ts +4 -0
  109. package/dist/components/fieldset/src/fieldset-utils.js +9 -1
  110. package/dist/components/form/index.d.ts +1 -0
  111. package/dist/components/form/src/RsForm.css +15 -12
  112. package/dist/components/form/src/RsForm.d.ts +20 -22
  113. package/dist/components/form/src/RsForm.impl.js +33 -20
  114. package/dist/components/form/src/RsForm.js +1 -1
  115. package/dist/components/form/src/form-utils.d.ts +7 -0
  116. package/dist/components/form/src/form-utils.js +28 -1
  117. package/dist/components/icon/src/RsIcon.css +9 -4
  118. package/dist/components/icon/src/RsIcon.d.ts +4 -3
  119. package/dist/components/icon/src/RsIcon.impl.js +9 -32
  120. package/dist/components/icon/src/RsIcon.js +1 -1
  121. package/dist/components/icon/src/icon-utils.d.ts +17 -0
  122. package/dist/components/icon/src/icon-utils.js +39 -0
  123. package/dist/components/input/index.d.ts +1 -1
  124. package/dist/components/input/src/RsInput.css +78 -260
  125. package/dist/components/input/src/RsInput.d.ts +5 -3
  126. package/dist/components/input/src/RsInput.impl.js +8 -16
  127. package/dist/components/input/src/RsInput.js +1 -1
  128. package/dist/components/input/src/input-utils.d.ts +11 -0
  129. package/dist/components/input/src/input-utils.js +22 -0
  130. package/dist/components/input-number/index.d.ts +1 -0
  131. package/dist/components/input-number/src/RsInputNumber.css +31 -31
  132. package/dist/components/input-number/src/RsInputNumber.d.ts +15 -13
  133. package/dist/components/input-number/src/RsInputNumber.impl.js +17 -4
  134. package/dist/components/input-number/src/RsInputNumber.js +1 -1
  135. package/dist/components/label/src/RsLabel.css +30 -11
  136. package/dist/components/label/src/RsLabel.d.ts +18 -1
  137. package/dist/components/label/src/RsLabel.impl.js +63 -10
  138. package/dist/components/label/src/RsLabel.js +1 -1
  139. package/dist/components/label/src/label-utils.d.ts +6 -0
  140. package/dist/components/label/src/label-utils.js +16 -0
  141. package/dist/components/link/index.d.ts +1 -0
  142. package/dist/components/link/src/RsLink.css +58 -17
  143. package/dist/components/link/src/RsLink.d.ts +12 -4
  144. package/dist/components/link/src/RsLink.impl.js +26 -25
  145. package/dist/components/link/src/RsLink.js +2 -1
  146. package/dist/components/link/src/link-utils.d.ts +9 -0
  147. package/dist/components/link/src/link-utils.js +15 -0
  148. package/dist/components/loading/src/RsLoading.d.ts +2 -2
  149. package/dist/components/mentions/index.d.ts +2 -1
  150. package/dist/components/mentions/src/RsMentions.css +119 -3
  151. package/dist/components/mentions/src/RsMentions.d.ts +56 -4
  152. package/dist/components/mentions/src/RsMentions.impl.js +298 -79
  153. package/dist/components/mentions/src/RsMentions.js +1 -3
  154. package/dist/components/mentions/src/mentions-utils.d.ts +5 -1
  155. package/dist/components/mentions/src/mentions-utils.js +28 -9
  156. package/dist/components/popover/src/RsPopover.d.ts +1 -1
  157. package/dist/components/radio/index.d.ts +1 -1
  158. package/dist/components/radio/src/RsRadio.css +7 -6
  159. package/dist/components/radio/src/RsRadio.d.ts +8 -5
  160. package/dist/components/radio/src/RsRadio.impl.js +34 -24
  161. package/dist/components/radio/src/RsRadio.js +2 -1
  162. package/dist/components/radio/src/RsRadioItem.css +61 -44
  163. package/dist/components/radio/src/RsRadioItem.d.ts +2 -2
  164. package/dist/components/radio/src/RsRadioItem.impl.js +53 -20
  165. package/dist/components/radio/src/RsRadioItem.js +2 -1
  166. package/dist/components/radio/src/radio-utils.d.ts +12 -1
  167. package/dist/components/radio/src/radio-utils.js +15 -1
  168. package/dist/components/scrollbar/src/RsScrollbar.css +71 -24
  169. package/dist/components/scrollbar/src/RsScrollbar.d.ts +9 -5
  170. package/dist/components/scrollbar/src/RsScrollbar.impl.js +372 -47
  171. package/dist/components/scrollbar/src/RsScrollbar.js +2 -1
  172. package/dist/components/scrollbar/src/scrollbar-utils.d.ts +34 -2
  173. package/dist/components/scrollbar/src/scrollbar-utils.js +64 -1
  174. package/dist/components/select/index.d.ts +1 -0
  175. package/dist/components/select/src/RsSelect.css +54 -42
  176. package/dist/components/select/src/RsSelect.d.ts +19 -2
  177. package/dist/components/select/src/RsSelect.impl.js +727 -312
  178. package/dist/components/select/src/RsSelect.js +1 -1
  179. package/dist/components/select/src/select-utils.d.ts +4 -2
  180. package/dist/components/select/src/select-utils.js +8 -3
  181. package/dist/components/select/src/use-rs-select.d.ts +1 -0
  182. package/dist/components/select/src/use-rs-select.js +23 -17
  183. package/dist/components/switch/index.d.ts +2 -1
  184. package/dist/components/switch/src/RsSwitch.css +36 -18
  185. package/dist/components/switch/src/RsSwitch.d.ts +18 -5
  186. package/dist/components/switch/src/RsSwitch.impl.js +61 -29
  187. package/dist/components/switch/src/RsSwitch.js +2 -1
  188. package/dist/components/switch/src/switch-utils.d.ts +4 -0
  189. package/dist/components/switch/src/switch-utils.js +9 -0
  190. package/dist/components/tag/index.d.ts +1 -1
  191. package/dist/components/tag/src/RsTag.css +42 -38
  192. package/dist/components/tag/src/RsTag.d.ts +3 -2
  193. package/dist/components/tag/src/RsTag.impl.js +18 -9
  194. package/dist/components/tag/src/RsTag.js +1 -1
  195. package/dist/components/tag/src/tag-utils.d.ts +8 -0
  196. package/dist/components/terminal/src/RsTerminal.d.ts +1 -1
  197. package/dist/components/textarea/src/RsTextarea.css +23 -23
  198. package/dist/components/textarea/src/RsTextarea.d.ts +6 -12
  199. package/dist/components/textarea/src/RsTextarea.impl.js +37 -46
  200. package/dist/components/textarea/src/RsTextarea.js +1 -1
  201. package/dist/components/textarea/src/textarea-utils.d.ts +27 -0
  202. package/dist/components/textarea/src/textarea-utils.js +61 -0
  203. package/dist/components/time-picker/index.d.ts +3 -2
  204. package/dist/components/time-picker/src/RsTimePicker.css +41 -24
  205. package/dist/components/time-picker/src/RsTimePicker.d.ts +52 -7
  206. package/dist/components/time-picker/src/RsTimePicker.impl.js +520 -156
  207. package/dist/components/time-picker/src/RsTimePicker.js +1 -3
  208. package/dist/components/time-picker/src/RsTimePickerColumns.css +26 -18
  209. package/dist/components/time-picker/src/RsTimePickerColumns.d.ts +3 -1
  210. package/dist/components/time-picker/src/RsTimePickerColumns.impl.js +62 -9
  211. package/dist/components/time-picker/src/RsTimePickerColumns.js +1 -1
  212. package/dist/components/time-picker/src/time-picker-utils.d.ts +38 -0
  213. package/dist/components/time-picker/src/time-picker-utils.js +97 -5
  214. package/dist/components/toaster/src/RsToaster.d.ts +1 -1
  215. package/dist/components/tooltip/src/RsTooltip.d.ts +1 -1
  216. package/dist/components/tree/src/RsTree.d.ts +3 -3
  217. package/dist/components/tree-select/index.d.ts +2 -0
  218. package/dist/components/tree-select/src/RsTreeSelect.css +100 -25
  219. package/dist/components/tree-select/src/RsTreeSelect.d.ts +91 -7
  220. package/dist/components/tree-select/src/RsTreeSelect.impl.js +464 -79
  221. package/dist/components/tree-select/src/RsTreeSelect.js +1 -1
  222. package/dist/components/tree-select/src/tree-select-utils.d.ts +20 -0
  223. package/dist/components/tree-select/src/tree-select-utils.js +60 -0
  224. package/dist/components/upload/index.d.ts +2 -1
  225. package/dist/components/upload/src/RsUpload.css +223 -75
  226. package/dist/components/upload/src/RsUpload.d.ts +77 -1
  227. package/dist/components/upload/src/RsUpload.impl.js +404 -90
  228. package/dist/components/upload/src/RsUpload.js +1 -1
  229. package/dist/components/upload/src/upload-utils.d.ts +21 -2
  230. package/dist/components/upload/src/upload-utils.js +139 -9
  231. package/dist/index.d.ts +24 -11
  232. package/dist/index.js +6 -0
  233. package/dist/locale/messages.js +46 -2
  234. package/dist/styles.css +518 -154
  235. package/dist/theme/brand.example.css +1 -1
  236. package/package.json +9 -8
  237. package/dist/components/breadcrumb/src/RsBreadcrumbItems.d.ts +0 -8
  238. package/dist/components/breadcrumb/src/RsBreadcrumbItems.impl.js +0 -40
  239. package/dist/components/breadcrumb/src/RsBreadcrumbItems.js +0 -5
  240. package/dist/components/date-picker/src/RsDatePicker-1.css +0 -157
  241. package/dist/components/mentions/src/RsMentions-1.css +0 -29
  242. package/dist/components/time-picker/src/RsTimePicker-1.css +0 -98
@@ -1,37 +1,70 @@
1
1
 
2
- .rs-breadcrumb__list {
2
+ .rs-breadcrumb__list[data-v-8913d929] {
3
3
  display: flex;
4
4
  flex-wrap: wrap;
5
5
  align-items: center;
6
- gap: 0.25rem;
6
+ gap: var(--rs-breadcrumb-gap);
7
7
  margin: 0;
8
8
  padding: 0;
9
9
  list-style: none;
10
10
  }
11
- .rs-breadcrumb__item {
11
+ .rs-breadcrumb__item[data-v-8913d929] {
12
12
  display: inline-flex;
13
13
  align-items: center;
14
- gap: 0.25rem;
14
+ gap: var(--rs-breadcrumb-item-gap);
15
15
  }
16
- .rs-breadcrumb__link {
17
- font-size: var(--rs-font-size-sm);
18
- color: var(--rs-muted);
16
+ .rs-breadcrumb__link[data-v-8913d929],
17
+ .rs-breadcrumb__more[data-v-8913d929] {
18
+ display: inline-flex;
19
+ align-items: center;
20
+ gap: var(--rs-breadcrumb-item-gap);
21
+ font-size: var(--rs-breadcrumb-font-size);
22
+ line-height: var(--rs-line-height-normal);
23
+ color: var(--rs-breadcrumb-link);
19
24
  text-decoration: none;
20
- padding: 0.125rem 0.25rem;
25
+ padding-block: var(--rs-breadcrumb-link-pad-block);
26
+ padding-inline: var(--rs-breadcrumb-link-pad-inline);
27
+ border: 0;
21
28
  border-radius: var(--rs-radius-xs);
29
+ background: transparent;
30
+ cursor: pointer;
22
31
  transition:
23
32
  color var(--rs-transition-fast),
24
- background var(--rs-transition-fast);
33
+ background-color var(--rs-transition-fast);
25
34
  }
26
- .rs-breadcrumb__link:hover:not(.rs-breadcrumb__link--current) {
27
- color: var(--rs-primary);
28
- background: var(--rs-surface-hover);
35
+ .rs-breadcrumb__link[data-v-8913d929]:hover:not(.rs-breadcrumb__link--current):not(.rs-breadcrumb__link--disabled),
36
+ .rs-breadcrumb__more[data-v-8913d929]:hover {
37
+ color: var(--rs-breadcrumb-link-hover);
38
+ background: var(--rs-breadcrumb-link-hover-bg);
29
39
  }
30
- .rs-breadcrumb__link--current {
31
- color: var(--rs-text);
32
- font-weight: var(--rs-font-weight-medium);
40
+ .rs-breadcrumb__link[data-v-8913d929]:focus-visible,
41
+ .rs-breadcrumb__more[data-v-8913d929]:focus-visible {
42
+ outline: var(--rs-focus-ring-width) solid var(--rs-focus-ring);
43
+ outline-offset: 2px;
44
+ }
45
+ .rs-breadcrumb__link--current[data-v-8913d929] {
46
+ color: var(--rs-breadcrumb-current);
47
+ font-weight: var(--rs-breadcrumb-current-weight);
33
48
  pointer-events: none;
49
+ cursor: default;
50
+ }
51
+ .rs-breadcrumb__link--disabled[data-v-8913d929] {
52
+ opacity: var(--rs-breadcrumb-disabled-opacity);
53
+ cursor: not-allowed;
54
+ }
55
+ .rs-breadcrumb__sep[data-v-8913d929] {
56
+ color: var(--rs-breadcrumb-sep);
57
+ flex-shrink: 0;
58
+ }
59
+ .rs-breadcrumb__icon[data-v-8913d929] {
60
+ color: inherit;
61
+ }
62
+ .rs-breadcrumb__sep[data-v-8913d929]:dir(rtl) {
63
+ transform: scaleX(-1);
64
+ }
65
+ @media (prefers-reduced-motion: reduce) {
66
+ .rs-breadcrumb__link[data-v-8913d929],
67
+ .rs-breadcrumb__more[data-v-8913d929] {
68
+ transition: none;
34
69
  }
35
- .rs-breadcrumb__sep {
36
- color: var(--rs-muted);
37
70
  }
@@ -1,11 +1,50 @@
1
- export interface RsBreadcrumbItem {
2
- label: string;
3
- to?: string;
4
- href?: string;
5
- }
1
+ import { type RsBreadcrumbItem } from './breadcrumb-utils';
6
2
  type __VLS_Props = {
7
3
  items: RsBreadcrumbItem[];
4
+ /** 文字分隔符。未传时用 separatorIcon。 */
5
+ separator?: string;
6
+ /** Lucide kebab-case。有 separator 文字时不渲染图标。 */
7
+ separatorIcon?: string;
8
+ /** 超过该数量时中间收成省略号。省略号算一项。 */
9
+ maxItems?: number;
10
+ itemsBeforeCollapse?: number;
11
+ itemsAfterCollapse?: number;
12
+ ariaLabel?: string;
13
+ id?: string;
8
14
  };
9
- declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
15
+ declare function expand(): void;
16
+ declare var __VLS_1: {
17
+ hiddenItems: RsBreadcrumbItem[];
18
+ expand: typeof expand;
19
+ }, __VLS_16: {
20
+ item: RsBreadcrumbItem;
21
+ index: number;
22
+ isCurrent: boolean;
23
+ href: string | undefined;
24
+ }, __VLS_23: {
25
+ index: number;
26
+ };
27
+ type __VLS_Slots = {} & {
28
+ more?: (props: typeof __VLS_1) => any;
29
+ } & {
30
+ item?: (props: typeof __VLS_16) => any;
31
+ } & {
32
+ separator?: (props: typeof __VLS_23) => any;
33
+ };
34
+ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
35
+ click: (item: RsBreadcrumbItem, event: MouseEvent) => any;
36
+ }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
37
+ onClick?: ((item: RsBreadcrumbItem, event: MouseEvent) => any) | undefined;
38
+ }>, {
39
+ separatorIcon: string;
40
+ itemsBeforeCollapse: number;
41
+ itemsAfterCollapse: number;
42
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
43
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
10
44
  declare const _default: typeof __VLS_export;
11
45
  export default _default;
46
+ type __VLS_WithSlots<T, S> = T & {
47
+ new (): {
48
+ $slots: S;
49
+ };
50
+ };
@@ -1,24 +1,123 @@
1
1
  import { useRsI18n } from "../../../composables/useRsI18n.js";
2
+ import RsIcon_default from "../../icon/src/RsIcon.js";
2
3
  import { buildBreadcrumbRenderItems } from "./breadcrumb-utils.js";
3
- import RsBreadcrumbItems_default from "./RsBreadcrumbItems.js";
4
- import { computed, createElementBlock, createVNode, defineComponent, openBlock, unref } from "vue";
4
+ import { Fragment, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createVNode, defineComponent, normalizeClass, openBlock, ref, renderList, renderSlot, resolveDynamicComponent, toDisplayString, watch, withCtx } from "vue";
5
5
  //#region src/components/breadcrumb/src/RsBreadcrumb.vue?vue&type=script&setup=true&lang.ts
6
- var _hoisted_1 = ["aria-label"];
6
+ var _hoisted_1 = ["id", "aria-label"];
7
+ var _hoisted_2 = { class: "rs-breadcrumb__list" };
8
+ var _hoisted_3 = ["aria-label"];
9
+ var _hoisted_4 = { class: "rs-breadcrumb__label" };
10
+ var _hoisted_5 = {
11
+ key: 0,
12
+ class: "rs-breadcrumb__sep",
13
+ "aria-hidden": "true"
14
+ };
7
15
  var RsBreadcrumb_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
16
+ name: "RsBreadcrumb",
8
17
  __name: "RsBreadcrumb",
9
- props: { items: {} },
10
- setup(__props) {
11
- const { t } = useRsI18n();
18
+ props: {
19
+ items: {},
20
+ separator: {},
21
+ separatorIcon: { default: "chevron-right" },
22
+ maxItems: {},
23
+ itemsBeforeCollapse: { default: 1 },
24
+ itemsAfterCollapse: { default: 1 },
25
+ ariaLabel: {},
26
+ id: {}
27
+ },
28
+ emits: ["click"],
29
+ setup(__props, { emit: __emit }) {
12
30
  const props = __props;
13
- const renderItems = computed(() => buildBreadcrumbRenderItems(props.items));
31
+ const emit = __emit;
32
+ const { t } = useRsI18n();
33
+ const expanded = ref(false);
34
+ watch(() => [
35
+ props.maxItems ?? "",
36
+ props.itemsBeforeCollapse,
37
+ props.itemsAfterCollapse,
38
+ props.items.length,
39
+ props.items.map((item, index) => item.key ?? item.label ?? index).join("\0")
40
+ ].join("\n"), () => {
41
+ expanded.value = false;
42
+ });
43
+ const renderItems = computed(() => buildBreadcrumbRenderItems(props.items, {
44
+ maxItems: props.maxItems,
45
+ itemsBeforeCollapse: props.itemsBeforeCollapse,
46
+ itemsAfterCollapse: props.itemsAfterCollapse,
47
+ expanded: expanded.value
48
+ }));
49
+ const navLabel = computed(() => props.ariaLabel || t("breadcrumb.label"));
50
+ const separatorLabel = computed(() => t("breadcrumb.separator"));
51
+ const moreLabel = computed(() => t("breadcrumb.more"));
52
+ function expand() {
53
+ expanded.value = true;
54
+ }
55
+ function onItemClick(item, event, disabled) {
56
+ emit("click", item, event);
57
+ if (disabled) event.preventDefault();
58
+ }
14
59
  return (_ctx, _cache) => {
15
60
  return openBlock(), createElementBlock("nav", {
61
+ id: __props.id,
16
62
  class: "rs-breadcrumb",
17
- "aria-label": unref(t)("breadcrumb.label")
18
- }, [createVNode(RsBreadcrumbItems_default, {
19
- items: renderItems.value,
20
- "separator-label": unref(t)("breadcrumb.separator")
21
- }, null, 8, ["items", "separator-label"])], 8, _hoisted_1);
63
+ "aria-label": navLabel.value
64
+ }, [createElementVNode("ol", _hoisted_2, [(openBlock(true), createElementBlock(Fragment, null, renderList(renderItems.value, (item, index) => {
65
+ return openBlock(), createElementBlock("li", {
66
+ key: item.key,
67
+ class: normalizeClass(["rs-breadcrumb__item", { "rs-breadcrumb__item--ellipsis": item.isEllipsis }])
68
+ }, [item.isEllipsis ? (openBlock(), createElementBlock("button", {
69
+ key: 0,
70
+ type: "button",
71
+ class: "rs-breadcrumb__more",
72
+ "aria-label": moreLabel.value,
73
+ onClick: expand
74
+ }, [renderSlot(_ctx.$slots, "more", {
75
+ hiddenItems: item.hiddenItems ?? [],
76
+ expand
77
+ }, () => [createVNode(RsIcon_default, {
78
+ name: "ellipsis",
79
+ size: "sm"
80
+ })], true)], 8, _hoisted_3)) : (openBlock(), createBlock(resolveDynamicComponent(item.isLink ? "a" : "span"), {
81
+ key: 1,
82
+ href: item.isLink ? item.href : void 0,
83
+ target: item.isLink ? item.target : void 0,
84
+ rel: item.isLink ? item.rel : void 0,
85
+ class: normalizeClass(["rs-breadcrumb__link", {
86
+ "rs-breadcrumb__link--current": item.isCurrent,
87
+ "rs-breadcrumb__link--disabled": item.isDisabled
88
+ }]),
89
+ "aria-current": item.isCurrent ? "page" : void 0,
90
+ "aria-disabled": item.isDisabled ? "true" : void 0,
91
+ onClick: ($event) => item.source ? onItemClick(item.source, $event, item.isDisabled) : void 0
92
+ }, {
93
+ default: withCtx(() => [renderSlot(_ctx.$slots, "item", {
94
+ item: item.source,
95
+ index: item.sourceIndex,
96
+ isCurrent: item.isCurrent,
97
+ href: item.href
98
+ }, () => [item.icon ? (openBlock(), createBlock(RsIcon_default, {
99
+ key: 0,
100
+ name: item.icon,
101
+ size: "sm",
102
+ class: "rs-breadcrumb__icon"
103
+ }, null, 8, ["name"])) : createCommentVNode("", true), createElementVNode("span", _hoisted_4, toDisplayString(item.label), 1)], true)]),
104
+ _: 2
105
+ }, 1032, [
106
+ "href",
107
+ "target",
108
+ "rel",
109
+ "class",
110
+ "aria-current",
111
+ "aria-disabled",
112
+ "onClick"
113
+ ])), index < renderItems.value.length - 1 ? renderSlot(_ctx.$slots, "separator", { index }, () => [__props.separator ? (openBlock(), createElementBlock("span", _hoisted_5, toDisplayString(__props.separator), 1)) : (openBlock(), createBlock(RsIcon_default, {
114
+ key: 1,
115
+ name: __props.separatorIcon,
116
+ size: "sm",
117
+ class: "rs-breadcrumb__sep",
118
+ label: separatorLabel.value
119
+ }, null, 8, ["name", "label"]))], true, 2) : createCommentVNode("", true)], 2);
120
+ }), 128))])], 8, _hoisted_1);
22
121
  };
23
122
  }
24
123
  });
@@ -1,7 +1,8 @@
1
1
  import './RsBreadcrumb.css'
2
+ import _plugin_vue_export_helper_default from "../../../_virtual/_plugin-vue_export-helper.js";
2
3
  import RsBreadcrumb_vue_vue_type_script_setup_true_lang_default from "./RsBreadcrumb.impl.js";
3
4
 
4
5
  //#region src/components/breadcrumb/src/RsBreadcrumb.vue
5
- var RsBreadcrumb_default = RsBreadcrumb_vue_vue_type_script_setup_true_lang_default;
6
+ var RsBreadcrumb_default = /*#__PURE__*/ _plugin_vue_export_helper_default(RsBreadcrumb_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-8913d929"]]);
6
7
  //#endregion
7
8
  export { RsBreadcrumb_default as default };
@@ -1,12 +1,44 @@
1
+ export interface RsBreadcrumbItem {
2
+ key?: string;
3
+ label: string;
4
+ /** SPA 路径。未传 href 时写到 a[href]。Vue Router 请在 click 里 preventDefault 后 push,或用 #item。 */
5
+ to?: string;
6
+ /** 外链或完整地址。与 to 同时存在时以 href 为准。 */
7
+ href?: string;
8
+ /** Lucide kebab-case,写在文案前。 */
9
+ icon?: string;
10
+ disabled?: boolean;
11
+ target?: '_self' | '_blank' | '_parent' | '_top' | (string & {});
12
+ rel?: string;
13
+ }
1
14
  export interface RsBreadcrumbRenderItem {
2
15
  key: string;
16
+ sourceIndex: number;
17
+ source?: RsBreadcrumbItem;
3
18
  label: string;
4
19
  href?: string;
20
+ icon?: string;
21
+ target?: string;
22
+ rel?: string;
5
23
  isLink: boolean;
6
24
  isCurrent: boolean;
25
+ isDisabled: boolean;
26
+ isEllipsis: boolean;
27
+ hiddenItems?: RsBreadcrumbItem[];
7
28
  }
8
- export declare function buildBreadcrumbRenderItems(items: Array<{
9
- label: string;
10
- to?: string;
11
- href?: string;
12
- }>): RsBreadcrumbRenderItem[];
29
+ export interface RsBreadcrumbCollapseOptions {
30
+ maxItems?: number;
31
+ itemsBeforeCollapse?: number;
32
+ itemsAfterCollapse?: number;
33
+ expanded?: boolean;
34
+ }
35
+ /** href 优先;没有 href 时用 to,保证只传 to 的项仍是带地址的 a。 */
36
+ export declare function resolveBreadcrumbHref(item: Pick<RsBreadcrumbItem, 'href' | 'to'>): string | undefined;
37
+ /** `_blank` 时补 noopener / noreferrer,并保留调用方已有 rel。 */
38
+ export declare function mergeBreadcrumbLinkRel(rel: string | undefined, target: string | undefined): string | undefined;
39
+ export declare function pickCollapsedBreadcrumbIndexes(length: number, maxItems: number | undefined, itemsBeforeCollapse?: number, itemsAfterCollapse?: number, expanded?: boolean): {
40
+ visible: number[];
41
+ hidden: number[];
42
+ insertEllipsisAt: number;
43
+ } | null;
44
+ export declare function buildBreadcrumbRenderItems(items: RsBreadcrumbItem[], options?: RsBreadcrumbCollapseOptions): RsBreadcrumbRenderItem[];
@@ -1,12 +1,73 @@
1
1
  //#region src/components/breadcrumb/src/breadcrumb-utils.ts
2
- function buildBreadcrumbRenderItems(items) {
3
- return items.map((item, index) => ({
4
- key: `${item.label}-${index}`,
5
- label: item.label,
6
- href: item.href,
7
- isLink: Boolean(item.to || item.href),
8
- isCurrent: index === items.length - 1
9
- }));
2
+ /** href 优先;没有 href 时用 to,保证只传 to 的项仍是带地址的 a。 */
3
+ function resolveBreadcrumbHref(item) {
4
+ if (item.href) return item.href;
5
+ if (item.to) return item.to;
6
+ }
7
+ /** `_blank` 时补 noopener / noreferrer,并保留调用方已有 rel。 */
8
+ function mergeBreadcrumbLinkRel(rel, target) {
9
+ const parts = (rel ?? "").split(/\s+/).map((item) => item.trim()).filter(Boolean);
10
+ if (target === "_blank") {
11
+ if (!parts.includes("noopener")) parts.push("noopener");
12
+ if (!parts.includes("noreferrer")) parts.push("noreferrer");
13
+ }
14
+ return parts.length > 0 ? parts.join(" ") : void 0;
15
+ }
16
+ function pickCollapsedBreadcrumbIndexes(length, maxItems, itemsBeforeCollapse = 1, itemsAfterCollapse = 1, expanded = false) {
17
+ if (expanded || maxItems == null || maxItems < 2 || length <= maxItems) return null;
18
+ const before = Math.max(0, Math.floor(itemsBeforeCollapse));
19
+ const after = Math.max(1, Math.floor(itemsAfterCollapse));
20
+ if (before + after >= length) return null;
21
+ const hiddenStart = before;
22
+ const hiddenEnd = length - after;
23
+ if (hiddenStart >= hiddenEnd) return null;
24
+ const visible = [];
25
+ const hidden = [];
26
+ for (let index = 0; index < length; index += 1) if (index >= hiddenStart && index < hiddenEnd) hidden.push(index);
27
+ else visible.push(index);
28
+ return {
29
+ visible,
30
+ hidden,
31
+ insertEllipsisAt: before
32
+ };
33
+ }
34
+ function buildBreadcrumbRenderItems(items, options = {}) {
35
+ const lastIndex = items.length - 1;
36
+ const mapped = items.map((item, index) => {
37
+ const href = resolveBreadcrumbHref(item);
38
+ const disabled = Boolean(item.disabled);
39
+ return {
40
+ key: item.key ?? String(index),
41
+ sourceIndex: index,
42
+ source: item,
43
+ label: item.label,
44
+ href,
45
+ icon: item.icon,
46
+ target: item.target,
47
+ rel: mergeBreadcrumbLinkRel(item.rel, item.target),
48
+ isLink: Boolean(href) && !disabled && index !== lastIndex,
49
+ isCurrent: index === lastIndex,
50
+ isDisabled: disabled,
51
+ isEllipsis: false
52
+ };
53
+ });
54
+ const collapsed = pickCollapsedBreadcrumbIndexes(mapped.length, options.maxItems, options.itemsBeforeCollapse ?? 1, options.itemsAfterCollapse ?? 1, options.expanded ?? false);
55
+ if (!collapsed) return mapped;
56
+ const result = [];
57
+ collapsed.visible.forEach((index, visibleIndex) => {
58
+ if (visibleIndex === collapsed.insertEllipsisAt) result.push({
59
+ key: "ellipsis",
60
+ sourceIndex: -1,
61
+ label: "",
62
+ isLink: false,
63
+ isCurrent: false,
64
+ isDisabled: false,
65
+ isEllipsis: true,
66
+ hiddenItems: collapsed.hidden.map((hiddenIndex) => items[hiddenIndex])
67
+ });
68
+ result.push(mapped[index]);
69
+ });
70
+ return result;
10
71
  }
11
72
  //#endregion
12
- export { buildBreadcrumbRenderItems };
73
+ export { buildBreadcrumbRenderItems, mergeBreadcrumbLinkRel, pickCollapsedBreadcrumbIndexes, resolveBreadcrumbHref };