niuma-ui 2.0.3 → 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 (202) hide show
  1. package/CHANGELOG.md +38 -0
  2. package/dist/components/_shared/src/reka.d.ts +1 -1
  3. package/dist/components/_shared/src/reka.js +2 -2
  4. package/dist/components/anchor/index.d.ts +1 -1
  5. package/dist/components/anchor/src/RsAnchor.css +63 -32
  6. package/dist/components/anchor/src/RsAnchor.d.ts +29 -2
  7. package/dist/components/anchor/src/RsAnchor.impl.js +199 -81
  8. package/dist/components/anchor/src/RsAnchor.js +1 -1
  9. package/dist/components/anchor/src/anchor-utils.d.ts +36 -4
  10. package/dist/components/anchor/src/anchor-utils.js +81 -19
  11. package/dist/components/auto-complete/index.d.ts +2 -0
  12. package/dist/components/auto-complete/src/RsAutoComplete.css +122 -0
  13. package/dist/components/auto-complete/src/RsAutoComplete.d.ts +47 -7
  14. package/dist/components/auto-complete/src/RsAutoComplete.impl.js +180 -72
  15. package/dist/components/auto-complete/src/RsAutoComplete.js +4 -1
  16. package/dist/components/auto-complete/src/auto-complete-utils.d.ts +7 -0
  17. package/dist/components/auto-complete/src/auto-complete-utils.js +17 -0
  18. package/dist/components/avatar/index.d.ts +1 -0
  19. package/dist/components/avatar/src/RsAvatar.css +36 -19
  20. package/dist/components/avatar/src/RsAvatar.d.ts +9 -3
  21. package/dist/components/avatar/src/RsAvatar.impl.js +57 -33
  22. package/dist/components/avatar/src/RsAvatar.js +2 -1
  23. package/dist/components/avatar/src/avatar-utils.d.ts +16 -7
  24. package/dist/components/avatar/src/avatar-utils.js +41 -3
  25. package/dist/components/breadcrumb/index.d.ts +1 -1
  26. package/dist/components/breadcrumb/src/RsBreadcrumb.css +50 -17
  27. package/dist/components/breadcrumb/src/RsBreadcrumb.d.ts +45 -6
  28. package/dist/components/breadcrumb/src/RsBreadcrumb.impl.js +111 -12
  29. package/dist/components/breadcrumb/src/RsBreadcrumb.js +2 -1
  30. package/dist/components/breadcrumb/src/breadcrumb-utils.d.ts +37 -5
  31. package/dist/components/breadcrumb/src/breadcrumb-utils.js +70 -9
  32. package/dist/components/calendar-grid/index.d.ts +2 -0
  33. package/dist/components/calendar-grid/src/RsCalendarGrid.css +105 -45
  34. package/dist/components/calendar-grid/src/RsCalendarGrid.d.ts +62 -2
  35. package/dist/components/calendar-grid/src/RsCalendarGrid.impl.js +265 -94
  36. package/dist/components/calendar-grid/src/RsCalendarGrid.js +1 -1
  37. package/dist/components/calendar-grid/src/calendar-grid-utils.d.ts +72 -0
  38. package/dist/components/calendar-grid/src/calendar-grid-utils.js +122 -0
  39. package/dist/components/card/index.d.ts +1 -1
  40. package/dist/components/card/src/RsCard.css +108 -98
  41. package/dist/components/card/src/RsCard.d.ts +3 -12
  42. package/dist/components/card/src/RsCard.impl.js +29 -25
  43. package/dist/components/card/src/RsCard.js +2 -1
  44. package/dist/components/card/src/card-utils.d.ts +25 -0
  45. package/dist/components/card/src/card-utils.js +10 -0
  46. package/dist/components/cascader/index.d.ts +1 -0
  47. package/dist/components/cascader/src/RsCascader.css +175 -30
  48. package/dist/components/cascader/src/RsCascader.d.ts +15 -3
  49. package/dist/components/cascader/src/RsCascader.impl.js +277 -48
  50. package/dist/components/cascader/src/RsCascader.js +1 -1
  51. package/dist/components/cascader/src/cascader-utils.d.ts +2 -0
  52. package/dist/components/cascader/src/cascader-utils.js +8 -1
  53. package/dist/components/checkbox/index.d.ts +1 -0
  54. package/dist/components/checkbox/src/RsCheckbox.css +46 -23
  55. package/dist/components/checkbox/src/RsCheckbox.d.ts +11 -1
  56. package/dist/components/checkbox/src/RsCheckbox.impl.js +37 -9
  57. package/dist/components/checkbox/src/RsCheckbox.js +2 -1
  58. package/dist/components/checkbox/src/checkbox-utils.d.ts +4 -0
  59. package/dist/components/checkbox/src/checkbox-utils.js +12 -0
  60. package/dist/components/container/index.d.ts +1 -1
  61. package/dist/components/container/src/RsContainer.css +11 -11
  62. package/dist/components/container/src/RsContainer.d.ts +2 -12
  63. package/dist/components/container/src/RsContainer.impl.js +10 -57
  64. package/dist/components/container/src/RsContainer.js +1 -1
  65. package/dist/components/container/src/container-utils.d.ts +23 -0
  66. package/dist/components/container/src/container-utils.js +51 -0
  67. package/dist/components/date-picker/index.d.ts +4 -2
  68. package/dist/components/date-picker/src/RsDatePicker.css +42 -22
  69. package/dist/components/date-picker/src/RsDatePicker.d.ts +44 -20
  70. package/dist/components/date-picker/src/RsDatePicker.impl.js +484 -222
  71. package/dist/components/date-picker/src/RsDatePicker.js +1 -3
  72. package/dist/components/date-picker/src/RsDateTimePicker.d.ts +33 -6
  73. package/dist/components/date-picker/src/RsDateTimePicker.impl.js +47 -6
  74. package/dist/components/date-picker/src/date-picker-utils.d.ts +19 -0
  75. package/dist/components/date-picker/src/date-picker-utils.js +33 -10
  76. package/dist/components/dynamic-tags/index.d.ts +1 -1
  77. package/dist/components/dynamic-tags/src/RsDynamicTags.css +115 -38
  78. package/dist/components/dynamic-tags/src/RsDynamicTags.d.ts +58 -17
  79. package/dist/components/dynamic-tags/src/RsDynamicTags.impl.js +269 -106
  80. package/dist/components/dynamic-tags/src/RsDynamicTags.js +1 -1
  81. package/dist/components/dynamic-tags/src/dynamic-tags-utils.d.ts +19 -0
  82. package/dist/components/dynamic-tags/src/dynamic-tags-utils.js +60 -0
  83. package/dist/components/fieldset/src/RsFieldset.css +71 -41
  84. package/dist/components/fieldset/src/RsFieldset.d.ts +21 -2
  85. package/dist/components/fieldset/src/RsFieldset.impl.js +93 -26
  86. package/dist/components/fieldset/src/RsFieldset.js +1 -1
  87. package/dist/components/fieldset/src/fieldset-utils.d.ts +4 -0
  88. package/dist/components/fieldset/src/fieldset-utils.js +9 -1
  89. package/dist/components/form/index.d.ts +1 -0
  90. package/dist/components/form/src/RsForm.css +15 -12
  91. package/dist/components/form/src/RsForm.d.ts +20 -22
  92. package/dist/components/form/src/RsForm.impl.js +33 -20
  93. package/dist/components/form/src/RsForm.js +1 -1
  94. package/dist/components/form/src/form-utils.d.ts +7 -0
  95. package/dist/components/form/src/form-utils.js +28 -1
  96. package/dist/components/input/index.d.ts +1 -1
  97. package/dist/components/input/src/RsInput.css +78 -260
  98. package/dist/components/input/src/RsInput.d.ts +5 -3
  99. package/dist/components/input/src/RsInput.impl.js +8 -16
  100. package/dist/components/input/src/RsInput.js +1 -1
  101. package/dist/components/input/src/input-utils.d.ts +11 -0
  102. package/dist/components/input/src/input-utils.js +22 -0
  103. package/dist/components/input-number/index.d.ts +1 -0
  104. package/dist/components/input-number/src/RsInputNumber.css +31 -31
  105. package/dist/components/input-number/src/RsInputNumber.d.ts +15 -13
  106. package/dist/components/input-number/src/RsInputNumber.impl.js +17 -4
  107. package/dist/components/input-number/src/RsInputNumber.js +1 -1
  108. package/dist/components/label/src/RsLabel.css +30 -11
  109. package/dist/components/label/src/RsLabel.d.ts +18 -1
  110. package/dist/components/label/src/RsLabel.impl.js +63 -10
  111. package/dist/components/label/src/RsLabel.js +1 -1
  112. package/dist/components/label/src/label-utils.d.ts +6 -0
  113. package/dist/components/label/src/label-utils.js +16 -0
  114. package/dist/components/link/src/RsLink.d.ts +2 -2
  115. package/dist/components/loading/src/RsLoading.d.ts +1 -1
  116. package/dist/components/mentions/index.d.ts +2 -1
  117. package/dist/components/mentions/src/RsMentions.css +119 -3
  118. package/dist/components/mentions/src/RsMentions.d.ts +56 -4
  119. package/dist/components/mentions/src/RsMentions.impl.js +298 -79
  120. package/dist/components/mentions/src/RsMentions.js +1 -3
  121. package/dist/components/mentions/src/mentions-utils.d.ts +5 -1
  122. package/dist/components/mentions/src/mentions-utils.js +28 -9
  123. package/dist/components/popover/src/RsPopover.d.ts +1 -1
  124. package/dist/components/radio/index.d.ts +1 -1
  125. package/dist/components/radio/src/RsRadio.css +7 -6
  126. package/dist/components/radio/src/RsRadio.d.ts +8 -5
  127. package/dist/components/radio/src/RsRadio.impl.js +34 -24
  128. package/dist/components/radio/src/RsRadio.js +2 -1
  129. package/dist/components/radio/src/RsRadioItem.css +61 -44
  130. package/dist/components/radio/src/RsRadioItem.d.ts +2 -2
  131. package/dist/components/radio/src/RsRadioItem.impl.js +53 -20
  132. package/dist/components/radio/src/RsRadioItem.js +2 -1
  133. package/dist/components/radio/src/radio-utils.d.ts +12 -1
  134. package/dist/components/radio/src/radio-utils.js +15 -1
  135. package/dist/components/scrollbar/src/RsScrollbar.css +71 -24
  136. package/dist/components/scrollbar/src/RsScrollbar.d.ts +9 -5
  137. package/dist/components/scrollbar/src/RsScrollbar.impl.js +372 -47
  138. package/dist/components/scrollbar/src/RsScrollbar.js +2 -1
  139. package/dist/components/scrollbar/src/scrollbar-utils.d.ts +34 -2
  140. package/dist/components/scrollbar/src/scrollbar-utils.js +64 -1
  141. package/dist/components/select/index.d.ts +1 -0
  142. package/dist/components/select/src/RsSelect.css +54 -42
  143. package/dist/components/select/src/RsSelect.d.ts +19 -2
  144. package/dist/components/select/src/RsSelect.impl.js +727 -312
  145. package/dist/components/select/src/RsSelect.js +1 -1
  146. package/dist/components/select/src/select-utils.d.ts +4 -2
  147. package/dist/components/select/src/select-utils.js +8 -3
  148. package/dist/components/select/src/use-rs-select.d.ts +1 -0
  149. package/dist/components/select/src/use-rs-select.js +23 -17
  150. package/dist/components/switch/index.d.ts +2 -1
  151. package/dist/components/switch/src/RsSwitch.css +36 -18
  152. package/dist/components/switch/src/RsSwitch.d.ts +18 -5
  153. package/dist/components/switch/src/RsSwitch.impl.js +61 -29
  154. package/dist/components/switch/src/RsSwitch.js +2 -1
  155. package/dist/components/switch/src/switch-utils.d.ts +4 -0
  156. package/dist/components/switch/src/switch-utils.js +9 -0
  157. package/dist/components/textarea/src/RsTextarea.css +23 -23
  158. package/dist/components/textarea/src/RsTextarea.d.ts +6 -12
  159. package/dist/components/textarea/src/RsTextarea.impl.js +37 -46
  160. package/dist/components/textarea/src/RsTextarea.js +1 -1
  161. package/dist/components/textarea/src/textarea-utils.d.ts +27 -0
  162. package/dist/components/textarea/src/textarea-utils.js +61 -0
  163. package/dist/components/time-picker/index.d.ts +3 -2
  164. package/dist/components/time-picker/src/RsTimePicker.css +41 -24
  165. package/dist/components/time-picker/src/RsTimePicker.d.ts +52 -7
  166. package/dist/components/time-picker/src/RsTimePicker.impl.js +520 -156
  167. package/dist/components/time-picker/src/RsTimePicker.js +1 -3
  168. package/dist/components/time-picker/src/RsTimePickerColumns.css +26 -18
  169. package/dist/components/time-picker/src/RsTimePickerColumns.d.ts +3 -1
  170. package/dist/components/time-picker/src/RsTimePickerColumns.impl.js +62 -9
  171. package/dist/components/time-picker/src/RsTimePickerColumns.js +1 -1
  172. package/dist/components/time-picker/src/time-picker-utils.d.ts +38 -0
  173. package/dist/components/time-picker/src/time-picker-utils.js +97 -5
  174. package/dist/components/toaster/src/RsToaster.d.ts +1 -1
  175. package/dist/components/tooltip/src/RsTooltip.d.ts +1 -1
  176. package/dist/components/tree/src/RsTree.d.ts +3 -3
  177. package/dist/components/tree-select/index.d.ts +2 -0
  178. package/dist/components/tree-select/src/RsTreeSelect.css +100 -25
  179. package/dist/components/tree-select/src/RsTreeSelect.d.ts +91 -7
  180. package/dist/components/tree-select/src/RsTreeSelect.impl.js +464 -79
  181. package/dist/components/tree-select/src/RsTreeSelect.js +1 -1
  182. package/dist/components/tree-select/src/tree-select-utils.d.ts +20 -0
  183. package/dist/components/tree-select/src/tree-select-utils.js +60 -0
  184. package/dist/components/upload/index.d.ts +2 -1
  185. package/dist/components/upload/src/RsUpload.css +223 -75
  186. package/dist/components/upload/src/RsUpload.d.ts +77 -1
  187. package/dist/components/upload/src/RsUpload.impl.js +404 -90
  188. package/dist/components/upload/src/RsUpload.js +1 -1
  189. package/dist/components/upload/src/upload-utils.d.ts +21 -2
  190. package/dist/components/upload/src/upload-utils.js +139 -9
  191. package/dist/index.d.ts +21 -11
  192. package/dist/index.js +6 -0
  193. package/dist/locale/messages.js +46 -2
  194. package/dist/styles.css +518 -154
  195. package/dist/theme/brand.example.css +1 -1
  196. package/package.json +1 -1
  197. package/dist/components/breadcrumb/src/RsBreadcrumbItems.d.ts +0 -8
  198. package/dist/components/breadcrumb/src/RsBreadcrumbItems.impl.js +0 -40
  199. package/dist/components/breadcrumb/src/RsBreadcrumbItems.js +0 -5
  200. package/dist/components/date-picker/src/RsDatePicker-1.css +0 -157
  201. package/dist/components/mentions/src/RsMentions-1.css +0 -29
  202. package/dist/components/time-picker/src/RsTimePicker-1.css +0 -98
@@ -1,35 +1,46 @@
1
1
 
2
- .rs-avatar {
2
+ .rs-avatar[data-v-5eb19cf0] {
3
+ --rs-avatar-size-sm: 1.75rem;
4
+ --rs-avatar-size-md: 2.25rem;
5
+ --rs-avatar-size-lg: 3rem;
6
+ --rs-avatar-size: var(--rs-avatar-size-md);
7
+ position: relative;
3
8
  display: inline-flex;
4
9
  overflow: hidden;
5
10
  flex-shrink: 0;
11
+ width: var(--rs-avatar-size);
12
+ height: var(--rs-avatar-size);
6
13
  border: 1px solid var(--rs-border);
7
14
  background: var(--rs-surface);
15
+ vertical-align: middle;
8
16
  }
9
- .rs-avatar--circle {
17
+ .rs-avatar--circle[data-v-5eb19cf0] {
10
18
  border-radius: var(--rs-radius-full);
11
19
  }
12
- .rs-avatar--square {
20
+ .rs-avatar--square[data-v-5eb19cf0] {
13
21
  border-radius: var(--rs-radius-sm);
14
22
  }
15
- .rs-avatar--sm {
16
- width: 1.75rem;
17
- height: 1.75rem;
23
+ .rs-avatar--sm[data-v-5eb19cf0] {
24
+ --rs-avatar-size: var(--rs-avatar-size-sm);
18
25
  }
19
- .rs-avatar--md {
20
- width: 2.25rem;
21
- height: 2.25rem;
26
+ .rs-avatar--md[data-v-5eb19cf0] {
27
+ --rs-avatar-size: var(--rs-avatar-size-md);
22
28
  }
23
- .rs-avatar--lg {
24
- width: 3rem;
25
- height: 3rem;
29
+ .rs-avatar--lg[data-v-5eb19cf0] {
30
+ --rs-avatar-size: var(--rs-avatar-size-lg);
26
31
  }
27
- .rs-avatar__image {
32
+ .rs-avatar__image[data-v-5eb19cf0] {
33
+ position: absolute;
34
+ inset: 0;
28
35
  width: 100%;
29
36
  height: 100%;
30
37
  object-fit: cover;
38
+ opacity: 0;
31
39
  }
32
- .rs-avatar__fallback {
40
+ .rs-avatar__image--ready[data-v-5eb19cf0] {
41
+ opacity: 1;
42
+ }
43
+ .rs-avatar__fallback[data-v-5eb19cf0] {
33
44
  display: flex;
34
45
  align-items: center;
35
46
  justify-content: center;
@@ -38,23 +49,29 @@
38
49
  font-size: var(--rs-font-size-xs);
39
50
  font-weight: var(--rs-font-weight-semibold);
40
51
  }
41
- .rs-avatar__fallback--default {
52
+ .rs-avatar__fallback--default[data-v-5eb19cf0] {
42
53
  background: var(--rs-surface-hover);
43
54
  color: var(--rs-muted);
44
55
  }
45
- .rs-avatar__fallback--primary {
56
+ .rs-avatar__fallback--primary[data-v-5eb19cf0] {
46
57
  background: var(--rs-primary-container);
47
58
  color: var(--rs-on-primary-container);
48
59
  }
49
- .rs-avatar__fallback--success {
60
+ .rs-avatar__fallback--success[data-v-5eb19cf0] {
50
61
  background: var(--rs-success-container);
51
62
  color: var(--rs-on-success-container);
52
63
  }
53
- .rs-avatar__fallback--warning {
64
+ .rs-avatar__fallback--warning[data-v-5eb19cf0] {
54
65
  background: var(--rs-warning-container);
55
66
  color: var(--rs-on-warning-container);
56
67
  }
57
- .rs-avatar__fallback--danger {
68
+ .rs-avatar__fallback--danger[data-v-5eb19cf0] {
58
69
  background: var(--rs-danger-container);
59
70
  color: var(--rs-on-danger-container);
60
71
  }
72
+ @media (forced-colors: active) {
73
+ .rs-avatar[data-v-5eb19cf0] {
74
+ border: 1px solid CanvasText;
75
+ forced-color-adjust: none;
76
+ }
77
+ }
@@ -1,4 +1,5 @@
1
1
  import { type RsAvatarShape, type RsAvatarSize, type RsAvatarTone } from './avatar-utils';
2
+ export type { RsAvatarShape, RsAvatarSize, RsAvatarTone };
2
3
  type __VLS_Props = {
3
4
  src?: string;
4
5
  alt?: string;
@@ -10,14 +11,19 @@ type __VLS_Props = {
10
11
  tone?: RsAvatarTone;
11
12
  label?: string;
12
13
  };
13
- declare var __VLS_19: {};
14
+ declare var __VLS_1: {};
14
15
  type __VLS_Slots = {} & {
15
- fallback?: (props: typeof __VLS_19) => any;
16
+ fallback?: (props: typeof __VLS_1) => any;
16
17
  };
17
18
  declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
19
+ name: string;
20
+ label: string;
18
21
  size: RsAvatarSize;
19
- tone: RsAvatarTone;
20
22
  icon: string;
23
+ tone: RsAvatarTone;
24
+ src: string;
25
+ alt: string;
26
+ fallback: string;
21
27
  shape: RsAvatarShape;
22
28
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
23
29
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
@@ -1,57 +1,81 @@
1
- import { AvatarFallback, AvatarImage, AvatarRoot } from "../../_shared/src/reka.js";
2
1
  import RsIcon_default from "../../icon/src/RsIcon.js";
3
- import { getAvatarInitials } from "./avatar-utils.js";
4
- import { computed, createBlock, createCommentVNode, createElementBlock, createVNode, defineComponent, normalizeClass, openBlock, renderSlot, toDisplayString, unref, withCtx } from "vue";
2
+ import { RS_AVATAR_ICON_PX, getAvatarInitials, resolveRsAvatarShape, resolveRsAvatarSize, resolveRsAvatarTone } from "./avatar-utils.js";
3
+ import { computed, createBlock, createCommentVNode, createElementBlock, defineComponent, normalizeClass, openBlock, ref, renderSlot, toDisplayString, watch } from "vue";
5
4
  //#region src/components/avatar/src/RsAvatar.vue?vue&type=script&setup=true&lang.ts
6
- var _hoisted_1 = { key: 1 };
5
+ var _hoisted_1 = ["role", "aria-label"];
6
+ var _hoisted_2 = ["src", "alt"];
7
+ var _hoisted_3 = { key: 1 };
7
8
  var RsAvatar_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
9
+ name: "RsAvatar",
8
10
  __name: "RsAvatar",
9
11
  props: {
10
- src: {},
11
- alt: {},
12
- name: {},
13
- fallback: {},
12
+ src: { default: void 0 },
13
+ alt: { default: void 0 },
14
+ name: { default: void 0 },
15
+ fallback: { default: void 0 },
14
16
  icon: { default: "user" },
15
17
  size: { default: "md" },
16
18
  shape: { default: "circle" },
17
19
  tone: { default: "primary" },
18
- label: {}
20
+ label: { default: void 0 }
19
21
  },
20
22
  setup(__props) {
21
23
  const props = __props;
24
+ const imageLoaded = ref(false);
25
+ const imageFailed = ref(false);
26
+ watch(() => props.src, () => {
27
+ imageLoaded.value = false;
28
+ imageFailed.value = false;
29
+ });
30
+ const resolvedSize = computed(() => resolveRsAvatarSize(props.size));
31
+ const resolvedShape = computed(() => resolveRsAvatarShape(props.shape));
32
+ const resolvedTone = computed(() => resolveRsAvatarTone(props.tone));
33
+ const iconPx = computed(() => RS_AVATAR_ICON_PX[resolvedSize.value]);
22
34
  const fallbackText = computed(() => {
23
35
  if (props.fallback?.trim()) return props.fallback.trim();
24
36
  if (props.name?.trim()) return getAvatarInitials(props.name);
25
37
  return "";
26
38
  });
27
39
  const showIconFallback = computed(() => !fallbackText.value);
40
+ const showImage = computed(() => Boolean(props.src) && !imageFailed.value);
41
+ const showFallback = computed(() => !showImage.value || !imageLoaded.value);
42
+ const pictureReady = computed(() => showImage.value && imageLoaded.value);
28
43
  const imageAlt = computed(() => props.alt ?? props.name ?? "");
29
44
  const ariaLabel = computed(() => props.label ?? props.alt ?? props.name ?? void 0);
45
+ const rootRole = computed(() => {
46
+ if (pictureReady.value || !ariaLabel.value) return void 0;
47
+ return "img";
48
+ });
49
+ const rootLabel = computed(() => pictureReady.value ? void 0 : ariaLabel.value);
50
+ function onLoad() {
51
+ imageLoaded.value = true;
52
+ imageFailed.value = false;
53
+ }
54
+ function onError() {
55
+ imageLoaded.value = false;
56
+ imageFailed.value = true;
57
+ }
30
58
  return (_ctx, _cache) => {
31
- return openBlock(), createBlock(unref(AvatarRoot), {
32
- class: normalizeClass(["rs-avatar", [`rs-avatar--${__props.size}`, `rs-avatar--${__props.shape}`]]),
33
- "aria-label": ariaLabel.value,
34
- role: ariaLabel.value ? "img" : void 0
35
- }, {
36
- default: withCtx(() => [__props.src ? (openBlock(), createBlock(unref(AvatarImage), {
37
- key: 0,
38
- src: __props.src,
39
- alt: imageAlt.value,
40
- class: "rs-avatar__image"
41
- }, null, 8, ["src", "alt"])) : createCommentVNode("", true), createVNode(unref(AvatarFallback), { class: normalizeClass(["rs-avatar__fallback", `rs-avatar__fallback--${__props.tone}`]) }, {
42
- default: withCtx(() => [renderSlot(_ctx.$slots, "fallback", {}, () => [showIconFallback.value ? (openBlock(), createBlock(RsIcon_default, {
43
- key: 0,
44
- name: __props.icon,
45
- size: __props.size === "sm" ? 14 : __props.size === "lg" ? 20 : 16
46
- }, null, 8, ["name", "size"])) : (openBlock(), createElementBlock("span", _hoisted_1, toDisplayString(fallbackText.value), 1))])]),
47
- _: 3
48
- }, 8, ["class"])]),
49
- _: 3
50
- }, 8, [
51
- "class",
52
- "aria-label",
53
- "role"
54
- ]);
59
+ return openBlock(), createElementBlock("span", {
60
+ class: normalizeClass(["rs-avatar", [`rs-avatar--${resolvedSize.value}`, `rs-avatar--${resolvedShape.value}`]]),
61
+ role: rootRole.value,
62
+ "aria-label": rootLabel.value
63
+ }, [showImage.value ? (openBlock(), createElementBlock("img", {
64
+ key: 0,
65
+ class: normalizeClass(["rs-avatar__image", { "rs-avatar__image--ready": imageLoaded.value }]),
66
+ src: __props.src,
67
+ alt: imageAlt.value,
68
+ onLoad,
69
+ onError
70
+ }, null, 42, _hoisted_2)) : createCommentVNode("", true), showFallback.value ? (openBlock(), createElementBlock("span", {
71
+ key: 1,
72
+ class: normalizeClass(["rs-avatar__fallback", `rs-avatar__fallback--${resolvedTone.value}`]),
73
+ "aria-hidden": "true"
74
+ }, [renderSlot(_ctx.$slots, "fallback", {}, () => [showIconFallback.value ? (openBlock(), createBlock(RsIcon_default, {
75
+ key: 0,
76
+ name: __props.icon,
77
+ size: iconPx.value
78
+ }, null, 8, ["name", "size"])) : (openBlock(), createElementBlock("span", _hoisted_3, toDisplayString(fallbackText.value), 1))], true)], 2)) : createCommentVNode("", true)], 10, _hoisted_1);
55
79
  };
56
80
  }
57
81
  });
@@ -1,7 +1,8 @@
1
1
  import './RsAvatar.css'
2
+ import _plugin_vue_export_helper_default from "../../../_virtual/_plugin-vue_export-helper.js";
2
3
  import RsAvatar_vue_vue_type_script_setup_true_lang_default from "./RsAvatar.impl.js";
3
4
 
4
5
  //#region src/components/avatar/src/RsAvatar.vue
5
- var RsAvatar_default = RsAvatar_vue_vue_type_script_setup_true_lang_default;
6
+ var RsAvatar_default = /*#__PURE__*/ _plugin_vue_export_helper_default(RsAvatar_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-5eb19cf0"]]);
6
7
  //#endregion
7
8
  export { RsAvatar_default as default };
@@ -1,11 +1,20 @@
1
- /** 头像尺寸 */
2
- export type RsAvatarSize = 'sm' | 'md' | 'lg';
3
- /** 头像形状 */
4
- export type RsAvatarShape = 'circle' | 'square';
5
- /** 头像占位色调 */
6
- export type RsAvatarTone = 'default' | 'primary' | 'success' | 'warning' | 'danger';
1
+ /** 头像边长。不是控件四档,没有 ssm。 */
2
+ export declare const RS_AVATAR_SIZES: readonly ["sm", "md", "lg"];
3
+ export type RsAvatarSize = (typeof RS_AVATAR_SIZES)[number];
4
+ export declare const RS_AVATAR_SHAPES: readonly ["circle", "square"];
5
+ export type RsAvatarShape = (typeof RS_AVATAR_SHAPES)[number];
6
+ export declare const RS_AVATAR_TONES: readonly ["default", "primary", "success", "warning", "danger"];
7
+ export type RsAvatarTone = (typeof RS_AVATAR_TONES)[number];
8
+ /** 回退图标边长,跟原来 sm 14 / md 16 / lg 20 一致。 */
9
+ export declare const RS_AVATAR_ICON_PX: Record<RsAvatarSize, number>;
10
+ export declare function isRsAvatarSize(value: unknown): value is RsAvatarSize;
11
+ export declare function isRsAvatarShape(value: unknown): value is RsAvatarShape;
12
+ export declare function isRsAvatarTone(value: unknown): value is RsAvatarTone;
13
+ export declare function resolveRsAvatarSize(size?: RsAvatarSize | null): RsAvatarSize;
14
+ export declare function resolveRsAvatarShape(shape?: RsAvatarShape | null): RsAvatarShape;
15
+ export declare function resolveRsAvatarTone(tone?: RsAvatarTone | null): RsAvatarTone;
7
16
  /**
8
17
  * 从姓名提取缩写(最多 2 个字符)。
9
- * @param name 显示名称
18
+ * 单段取前两字;多段取前两段首字。空串返回空,由组件改走图标。
10
19
  */
11
20
  export declare function getAvatarInitials(name: string): string;
@@ -1,13 +1,51 @@
1
1
  //#region src/components/avatar/src/avatar-utils.ts
2
+ /** 头像边长。不是控件四档,没有 ssm。 */
3
+ var RS_AVATAR_SIZES = [
4
+ "sm",
5
+ "md",
6
+ "lg"
7
+ ];
8
+ var RS_AVATAR_SHAPES = ["circle", "square"];
9
+ var RS_AVATAR_TONES = [
10
+ "default",
11
+ "primary",
12
+ "success",
13
+ "warning",
14
+ "danger"
15
+ ];
16
+ /** 回退图标边长,跟原来 sm 14 / md 16 / lg 20 一致。 */
17
+ var RS_AVATAR_ICON_PX = {
18
+ sm: 14,
19
+ md: 16,
20
+ lg: 20
21
+ };
22
+ function isRsAvatarSize(value) {
23
+ return typeof value === "string" && RS_AVATAR_SIZES.includes(value);
24
+ }
25
+ function isRsAvatarShape(value) {
26
+ return typeof value === "string" && RS_AVATAR_SHAPES.includes(value);
27
+ }
28
+ function isRsAvatarTone(value) {
29
+ return typeof value === "string" && RS_AVATAR_TONES.includes(value);
30
+ }
31
+ function resolveRsAvatarSize(size) {
32
+ return isRsAvatarSize(size) ? size : "md";
33
+ }
34
+ function resolveRsAvatarShape(shape) {
35
+ return isRsAvatarShape(shape) ? shape : "circle";
36
+ }
37
+ function resolveRsAvatarTone(tone) {
38
+ return isRsAvatarTone(tone) ? tone : "primary";
39
+ }
2
40
  /**
3
41
  * 从姓名提取缩写(最多 2 个字符)。
4
- * @param name 显示名称
42
+ * 单段取前两字;多段取前两段首字。空串返回空,由组件改走图标。
5
43
  */
6
44
  function getAvatarInitials(name) {
7
45
  const parts = name.trim().split(/\s+/).filter(Boolean);
8
- if (!parts.length) return "?";
46
+ if (!parts.length) return "";
9
47
  if (parts.length === 1) return parts[0].slice(0, 2).toUpperCase();
10
48
  return `${parts[0][0] ?? ""}${parts[1][0] ?? ""}`.toUpperCase();
11
49
  }
12
50
  //#endregion
13
- export { getAvatarInitials };
51
+ export { RS_AVATAR_ICON_PX, RS_AVATAR_SHAPES, RS_AVATAR_SIZES, RS_AVATAR_TONES, getAvatarInitials, isRsAvatarShape, isRsAvatarSize, isRsAvatarTone, resolveRsAvatarShape, resolveRsAvatarSize, resolveRsAvatarTone };
@@ -1,2 +1,2 @@
1
1
  export { default as RsBreadcrumb } from './src/RsBreadcrumb.js';
2
- export type { RsBreadcrumbItem } from './src/RsBreadcrumb.js';
2
+ export type { RsBreadcrumbItem } from './src/breadcrumb-utils';
@@ -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 };