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,18 +1,21 @@
1
1
  import type { RsComponentSize } from '../../../theme/types';
2
- import { type RsRadioValue } from './radio-utils';
2
+ import { type RsRadioOrientation, type RsRadioValue } from './radio-utils';
3
+ export type { RsRadioOrientation, RsRadioValue };
3
4
  type __VLS_Props = {
4
5
  disabled?: boolean;
5
6
  size?: RsComponentSize;
6
7
  name?: string;
7
- orientation?: 'horizontal' | 'vertical';
8
+ orientation?: RsRadioOrientation;
9
+ /** 无障碍组名。选项文案不够说明整组时再传。 */
10
+ ariaLabel?: string;
8
11
  };
9
12
  type __VLS_ModelProps = {
10
13
  modelValue?: RsRadioValue | undefined;
11
14
  };
12
15
  type __VLS_PublicProps = __VLS_Props & __VLS_ModelProps;
13
- declare var __VLS_10: {};
16
+ declare var __VLS_1: {};
14
17
  type __VLS_Slots = {} & {
15
- default?: (props: typeof __VLS_10) => any;
18
+ default?: (props: typeof __VLS_1) => any;
16
19
  };
17
20
  declare const __VLS_base: import("vue").DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
18
21
  change: (value: RsRadioValue) => any;
@@ -22,7 +25,7 @@ declare const __VLS_base: import("vue").DefineComponent<__VLS_PublicProps, {}, {
22
25
  "onUpdate:modelValue"?: ((value: RsRadioValue | undefined) => any) | undefined;
23
26
  }>, {
24
27
  disabled: boolean;
25
- orientation: "horizontal" | "vertical";
28
+ orientation: RsRadioOrientation;
26
29
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
27
30
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
28
31
  declare const _default: typeof __VLS_export;
@@ -1,9 +1,15 @@
1
- import { RadioGroupRoot } from "../../_shared/src/reka.js";
1
+ import { useRsFormContext } from "../../form/src/form-utils.js";
2
2
  import { useResolvedRsComponentSize } from "../../_shared/src/resolve-size.js";
3
- import { RS_RADIO_GROUP_KEY } from "./radio-utils.js";
4
- import { computed, createBlock, defineComponent, mergeModels, normalizeClass, openBlock, provide, renderSlot, unref, useModel, withCtx } from "vue";
3
+ import { RS_RADIO_GROUP_KEY, isRsRadioValueEqual, resolveRsRadioOrientation } from "./radio-utils.js";
4
+ import { computed, createElementBlock, defineComponent, mergeModels, normalizeClass, openBlock, provide, renderSlot, useId, useModel } from "vue";
5
5
  //#region src/components/radio/src/RsRadio.vue?vue&type=script&setup=true&lang.ts
6
+ var _hoisted_1 = [
7
+ "aria-orientation",
8
+ "aria-disabled",
9
+ "aria-label"
10
+ ];
6
11
  var RsRadio_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
12
+ name: "RsRadio",
7
13
  __name: "RsRadio",
8
14
  props: /*@__PURE__*/ mergeModels({
9
15
  disabled: {
@@ -12,7 +18,8 @@ var RsRadio_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineCo
12
18
  },
13
19
  size: {},
14
20
  name: {},
15
- orientation: { default: "horizontal" }
21
+ orientation: { default: "horizontal" },
22
+ ariaLabel: {}
16
23
  }, {
17
24
  "modelValue": {
18
25
  type: [
@@ -29,36 +36,39 @@ var RsRadio_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineCo
29
36
  const model = useModel(__props, "modelValue");
30
37
  const props = __props;
31
38
  const emit = __emit;
39
+ const formContext = useRsFormContext();
40
+ const groupId = useId();
32
41
  const resolvedSize = useResolvedRsComponentSize(() => props.size);
33
- provide(RS_RADIO_GROUP_KEY, { size: resolvedSize });
42
+ const resolvedDisabled = computed(() => props.disabled || Boolean(formContext?.disabled.value));
43
+ const resolvedOrientation = computed(() => resolveRsRadioOrientation(props.orientation));
44
+ const resolvedName = computed(() => props.name || groupId);
34
45
  const rootClass = computed(() => [
35
46
  "rs-radio-group",
36
- `rs-radio-group--${props.orientation}`,
47
+ `rs-radio-group--${resolvedOrientation.value}`,
37
48
  `rs-radio-group--${resolvedSize.value}`,
38
- { "rs-radio-group--disabled": props.disabled }
49
+ { "rs-radio-group--disabled": resolvedDisabled.value }
39
50
  ]);
40
- function onUpdate(value) {
51
+ function select(value) {
52
+ if (resolvedDisabled.value) return;
53
+ if (isRsRadioValueEqual(model.value, value)) return;
41
54
  model.value = value;
42
55
  emit("change", value);
43
56
  }
57
+ provide(RS_RADIO_GROUP_KEY, {
58
+ size: resolvedSize,
59
+ disabled: resolvedDisabled,
60
+ name: resolvedName,
61
+ isChecked: (value) => isRsRadioValueEqual(model.value, value),
62
+ select
63
+ });
44
64
  return (_ctx, _cache) => {
45
- return openBlock(), createBlock(unref(RadioGroupRoot), {
65
+ return openBlock(), createElementBlock("div", {
66
+ role: "radiogroup",
46
67
  class: normalizeClass(rootClass.value),
47
- "model-value": model.value,
48
- disabled: __props.disabled,
49
- name: __props.name,
50
- orientation: __props.orientation,
51
- "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => onUpdate($event))
52
- }, {
53
- default: withCtx(() => [renderSlot(_ctx.$slots, "default")]),
54
- _: 3
55
- }, 8, [
56
- "class",
57
- "model-value",
58
- "disabled",
59
- "name",
60
- "orientation"
61
- ]);
68
+ "aria-orientation": resolvedOrientation.value,
69
+ "aria-disabled": resolvedDisabled.value || void 0,
70
+ "aria-label": __props.ariaLabel
71
+ }, [renderSlot(_ctx.$slots, "default", {}, void 0, true)], 10, _hoisted_1);
62
72
  };
63
73
  }
64
74
  });
@@ -1,7 +1,8 @@
1
1
  import './RsRadio.css'
2
+ import _plugin_vue_export_helper_default from "../../../_virtual/_plugin-vue_export-helper.js";
2
3
  import RsRadio_vue_vue_type_script_setup_true_lang_default from "./RsRadio.impl.js";
3
4
 
4
5
  //#region src/components/radio/src/RsRadio.vue
5
- var RsRadio_default = RsRadio_vue_vue_type_script_setup_true_lang_default;
6
+ var RsRadio_default = /*#__PURE__*/ _plugin_vue_export_helper_default(RsRadio_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-b3347bb9"]]);
6
7
  //#endregion
7
8
  export { RsRadio_default as default };
@@ -1,23 +1,40 @@
1
1
 
2
- .rs-radio {
3
- display: inline-flex;
2
+ .rs-radio[data-v-f460a126] {
3
+ --rs-radio-size: 1rem;
4
+ --rs-radio-dot: calc(var(--rs-radio-size) * 0.5);
5
+ position: relative;
6
+ display: flex;
4
7
  align-items: center;
5
8
  gap: var(--rs-space-xs);
9
+ min-height: var(--rs-control-height-md);
10
+ vertical-align: middle;
6
11
  cursor: pointer;
7
12
  user-select: none;
8
13
  line-height: 1;
9
14
  }
10
- .rs-radio--disabled {
15
+ .rs-radio--disabled[data-v-f460a126] {
11
16
  cursor: not-allowed;
12
17
  opacity: 0.55;
13
18
  }
14
- .rs-radio__item {
19
+ .rs-radio__input[data-v-f460a126] {
20
+ position: absolute;
21
+ width: 1px;
22
+ height: 1px;
23
+ margin: -1px;
24
+ padding: 0;
25
+ overflow: hidden;
26
+ clip: rect(0, 0, 0, 0);
27
+ white-space: nowrap;
28
+ border: 0;
29
+ }
30
+ .rs-radio__item[data-v-f460a126] {
15
31
  position: relative;
16
- display: inline-flex;
32
+ display: block;
17
33
  flex-shrink: 0;
18
- align-items: center;
19
- justify-content: center;
20
34
  box-sizing: border-box;
35
+ width: var(--rs-radio-size, 1rem);
36
+ height: var(--rs-radio-size, 1rem);
37
+ overflow: hidden;
21
38
  border: 1px solid var(--rs-border);
22
39
  border-radius: var(--rs-radius-full);
23
40
  background: var(--rs-surface);
@@ -27,64 +44,64 @@
27
44
  border-color var(--rs-transition-fast),
28
45
  background-color var(--rs-transition-fast);
29
46
  }
30
- .rs-radio--disabled .rs-radio__item {
47
+ .rs-radio--disabled .rs-radio__item[data-v-f460a126] {
31
48
  cursor: not-allowed;
32
49
  }
33
- .rs-radio:hover:not(.rs-radio--disabled) .rs-radio__item:not([data-state='checked']) {
50
+ .rs-radio:hover:not(.rs-radio--disabled) .rs-radio__item[data-v-f460a126]:not([data-state='checked']) {
34
51
  border-color: var(--rs-primary);
35
52
  }
36
- .rs-radio__item:focus-visible {
53
+ .rs-radio__input:focus-visible + .rs-radio__item[data-v-f460a126] {
37
54
  box-shadow: 0 0 0 var(--rs-focus-ring-width, 2px) var(--rs-focus-ring);
38
55
  }
39
- .rs-radio--ssm .rs-radio__item {
40
- width: 0.75rem;
41
- height: 0.75rem;
56
+ .rs-radio--ssm[data-v-f460a126] {
57
+ --rs-radio-size: 0.75rem;
58
+ min-height: var(--rs-control-height-ssm);
42
59
  }
43
- .rs-radio--sm .rs-radio__item {
44
- width: 0.875rem;
45
- height: 0.875rem;
60
+ .rs-radio--sm[data-v-f460a126] {
61
+ --rs-radio-size: 0.875rem;
62
+ min-height: var(--rs-control-height-sm);
46
63
  }
47
- .rs-radio--md .rs-radio__item {
48
- width: 1rem;
49
- height: 1rem;
64
+ .rs-radio--md[data-v-f460a126] {
65
+ --rs-radio-size: 1rem;
66
+ min-height: var(--rs-control-height-md);
50
67
  }
51
- .rs-radio--lg .rs-radio__item {
52
- width: 1.125rem;
53
- height: 1.125rem;
68
+ .rs-radio--lg[data-v-f460a126] {
69
+ --rs-radio-size: 1.125rem;
70
+ min-height: var(--rs-control-height-lg);
54
71
  }
55
- .rs-radio__item[data-state='checked'] {
72
+ .rs-radio__item[data-state='checked'][data-v-f460a126] {
56
73
  border-color: var(--rs-primary);
57
74
  }
58
- .rs-radio__indicator {
59
- display: block;
75
+ .rs-radio__indicator[data-v-f460a126] {
76
+ position: absolute;
77
+ top: 50%;
78
+ left: 50%;
79
+ width: var(--rs-radio-dot, 0.5rem);
80
+ height: var(--rs-radio-dot, 0.5rem);
60
81
  border-radius: var(--rs-radius-full);
61
82
  background: var(--rs-primary);
83
+ transform: translate(-50%, -50%);
84
+ opacity: 0;
85
+ transition: opacity var(--rs-transition-fast);
62
86
  }
63
- .rs-radio--ssm .rs-radio__indicator {
64
- width: 0.375rem;
65
- height: 0.375rem;
66
- }
67
- .rs-radio--sm .rs-radio__indicator {
68
- width: 0.4375rem;
69
- height: 0.4375rem;
87
+ .rs-radio__item[data-state='checked'] .rs-radio__indicator[data-v-f460a126] {
88
+ opacity: 1;
70
89
  }
71
- .rs-radio--md .rs-radio__indicator {
72
- width: 0.5rem;
73
- height: 0.5rem;
74
- }
75
- .rs-radio--lg .rs-radio__indicator {
76
- width: 0.5625rem;
77
- height: 0.5625rem;
78
- }
79
- .rs-radio__label {
90
+ .rs-radio__label[data-v-f460a126] {
80
91
  font-size: var(--rs-font-size-sm);
81
92
  line-height: var(--rs-line-height-normal);
82
93
  cursor: pointer;
83
94
  }
84
- .rs-radio--disabled .rs-radio__label {
95
+ .rs-radio--disabled .rs-radio__label[data-v-f460a126] {
85
96
  cursor: not-allowed;
86
97
  }
87
- .rs-radio--ssm .rs-radio__label,
88
- .rs-radio--sm .rs-radio__label {
98
+ .rs-radio--ssm .rs-radio__label[data-v-f460a126],
99
+ .rs-radio--sm .rs-radio__label[data-v-f460a126] {
89
100
  font-size: var(--rs-font-size-xs);
90
101
  }
102
+ @media (prefers-reduced-motion: reduce) {
103
+ .rs-radio__item[data-v-f460a126],
104
+ .rs-radio__indicator[data-v-f460a126] {
105
+ transition: none;
106
+ }
107
+ }
@@ -6,9 +6,9 @@ type __VLS_Props = {
6
6
  size?: RsComponentSize;
7
7
  id?: string;
8
8
  };
9
- declare var __VLS_12: {};
9
+ declare var __VLS_1: {};
10
10
  type __VLS_Slots = {} & {
11
- default?: (props: typeof __VLS_12) => any;
11
+ default?: (props: typeof __VLS_1) => any;
12
12
  };
13
13
  declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
14
14
  disabled: boolean;
@@ -1,10 +1,23 @@
1
- import { RadioGroupIndicator, RadioGroupItem } from "../../_shared/src/reka.js";
2
1
  import { useResolvedRsComponentSize } from "../../_shared/src/resolve-size.js";
3
- import { RS_RADIO_GROUP_KEY } from "./radio-utils.js";
4
- import { computed, createCommentVNode, createElementBlock, createVNode, defineComponent, inject, normalizeClass, openBlock, renderSlot, unref, useId, withCtx } from "vue";
2
+ import { RS_RADIO_GROUP_KEY, rsRadioInputValue } from "./radio-utils.js";
3
+ import { computed, createCommentVNode, createElementBlock, createElementVNode, defineComponent, inject, normalizeClass, openBlock, renderSlot, unref, useId, useSlots, withModifiers } from "vue";
5
4
  //#region src/components/radio/src/RsRadioItem.vue?vue&type=script&setup=true&lang.ts
6
5
  var _hoisted_1 = ["for"];
6
+ var _hoisted_2 = [
7
+ "id",
8
+ "name",
9
+ "value",
10
+ "checked",
11
+ "disabled",
12
+ "aria-label"
13
+ ];
14
+ var _hoisted_3 = ["data-state"];
15
+ var _hoisted_4 = {
16
+ key: 0,
17
+ class: "rs-radio__label"
18
+ };
7
19
  var RsRadioItem_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
20
+ name: "RsRadioItem",
8
21
  __name: "RsRadioItem",
9
22
  props: {
10
23
  value: { type: [
@@ -21,33 +34,53 @@ var RsRadioItem_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defi
21
34
  },
22
35
  setup(__props) {
23
36
  const props = __props;
37
+ const slots = useSlots();
24
38
  const group = inject(RS_RADIO_GROUP_KEY, null);
25
39
  const resolvedSize = useResolvedRsComponentSize(() => props.size ?? group?.size.value);
40
+ const hasText = computed(() => Boolean(slots.default));
26
41
  const autoId = useId();
27
42
  const inputId = computed(() => props.id || autoId);
43
+ const resolvedDisabled = computed(() => props.disabled || Boolean(group?.disabled.value));
44
+ const checked = computed(() => Boolean(group?.isChecked(props.value)));
45
+ const inputName = computed(() => group?.name.value || autoId);
46
+ const itemState = computed(() => checked.value ? "checked" : "unchecked");
28
47
  const rootClass = computed(() => [
29
48
  "rs-radio",
30
49
  `rs-radio--${resolvedSize.value}`,
31
- { "rs-radio--disabled": props.disabled }
50
+ {
51
+ "rs-radio--checked": checked.value,
52
+ "rs-radio--disabled": resolvedDisabled.value
53
+ }
32
54
  ]);
55
+ function onChange(event) {
56
+ if (resolvedDisabled.value) return;
57
+ if (!event.target.checked) return;
58
+ group?.select(props.value);
59
+ }
33
60
  return (_ctx, _cache) => {
34
- return openBlock(), createElementBlock("div", { class: normalizeClass(rootClass.value) }, [createVNode(unref(RadioGroupItem), {
35
- id: inputId.value,
36
- class: "rs-radio__item",
37
- value: __props.value,
38
- disabled: __props.disabled
39
- }, {
40
- default: withCtx(() => [createVNode(unref(RadioGroupIndicator), { class: "rs-radio__indicator" })]),
41
- _: 1
42
- }, 8, [
43
- "id",
44
- "value",
45
- "disabled"
46
- ]), _ctx.$slots.default ? (openBlock(), createElementBlock("label", {
47
- key: 0,
48
- class: "rs-radio__label",
61
+ return openBlock(), createElementBlock("label", {
62
+ class: normalizeClass(rootClass.value),
49
63
  for: inputId.value
50
- }, [renderSlot(_ctx.$slots, "default")], 8, _hoisted_1)) : createCommentVNode("", true)], 2);
64
+ }, [
65
+ createElementVNode("input", {
66
+ id: inputId.value,
67
+ class: "rs-radio__input",
68
+ type: "radio",
69
+ name: inputName.value,
70
+ value: unref(rsRadioInputValue)(__props.value),
71
+ checked: checked.value,
72
+ disabled: resolvedDisabled.value,
73
+ "aria-label": hasText.value ? void 0 : unref(rsRadioInputValue)(__props.value),
74
+ onChange,
75
+ onClick: _cache[0] || (_cache[0] = withModifiers(() => {}, ["stop"]))
76
+ }, null, 40, _hoisted_2),
77
+ createElementVNode("span", {
78
+ class: "rs-radio__item",
79
+ "data-state": itemState.value,
80
+ "aria-hidden": "true"
81
+ }, [..._cache[1] || (_cache[1] = [createElementVNode("span", { class: "rs-radio__indicator" }, null, -1)])], 8, _hoisted_3),
82
+ _ctx.$slots.default ? (openBlock(), createElementBlock("span", _hoisted_4, [renderSlot(_ctx.$slots, "default", {}, void 0, true)])) : createCommentVNode("", true)
83
+ ], 10, _hoisted_1);
51
84
  };
52
85
  }
53
86
  });
@@ -1,7 +1,8 @@
1
1
  import './RsRadioItem.css'
2
+ import _plugin_vue_export_helper_default from "../../../_virtual/_plugin-vue_export-helper.js";
2
3
  import RsRadioItem_vue_vue_type_script_setup_true_lang_default from "./RsRadioItem.impl.js";
3
4
 
4
5
  //#region src/components/radio/src/RsRadioItem.vue
5
- var RsRadioItem_default = RsRadioItem_vue_vue_type_script_setup_true_lang_default;
6
+ var RsRadioItem_default = /*#__PURE__*/ _plugin_vue_export_helper_default(RsRadioItem_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-f460a126"]]);
6
7
  //#endregion
7
8
  export { RsRadioItem_default as default };
@@ -1,9 +1,20 @@
1
- import type { InjectionKey, Ref } from 'vue';
1
+ import type { ComputedRef, InjectionKey, Ref } from 'vue';
2
2
  import type { RsComponentSize } from '../../../theme/types';
3
3
  /** 单选值类型 */
4
4
  export type RsRadioValue = string | number | boolean;
5
+ export declare const RS_RADIO_ORIENTATIONS: readonly ["horizontal", "vertical"];
6
+ export type RsRadioOrientation = (typeof RS_RADIO_ORIENTATIONS)[number];
7
+ export declare function isRsRadioOrientation(value: unknown): value is RsRadioOrientation;
8
+ export declare function resolveRsRadioOrientation(orientation?: RsRadioOrientation | null): RsRadioOrientation;
9
+ export declare function isRsRadioValueEqual(left: RsRadioValue | undefined, right: RsRadioValue | undefined): boolean;
10
+ /** 原生 radio 的 value 只能是 string;选型比较仍用原始 RsRadioValue。 */
11
+ export declare function rsRadioInputValue(value: RsRadioValue): string;
5
12
  /** RadioGroup 向下注入的上下文 */
6
13
  export type RsRadioGroupContext = {
7
14
  size: Ref<RsComponentSize>;
15
+ disabled: ComputedRef<boolean>;
16
+ name: ComputedRef<string>;
17
+ isChecked: (value: RsRadioValue) => boolean;
18
+ select: (value: RsRadioValue) => void;
8
19
  };
9
20
  export declare const RS_RADIO_GROUP_KEY: InjectionKey<RsRadioGroupContext>;
@@ -1,4 +1,18 @@
1
1
  //#region src/components/radio/src/radio-utils.ts
2
+ var RS_RADIO_ORIENTATIONS = ["horizontal", "vertical"];
3
+ function isRsRadioOrientation(value) {
4
+ return typeof value === "string" && RS_RADIO_ORIENTATIONS.includes(value);
5
+ }
6
+ function resolveRsRadioOrientation(orientation) {
7
+ return isRsRadioOrientation(orientation) ? orientation : "horizontal";
8
+ }
9
+ function isRsRadioValueEqual(left, right) {
10
+ return left === right;
11
+ }
12
+ /** 原生 radio 的 value 只能是 string;选型比较仍用原始 RsRadioValue。 */
13
+ function rsRadioInputValue(value) {
14
+ return `${value}`;
15
+ }
2
16
  var RS_RADIO_GROUP_KEY = Symbol("rs-radio-group");
3
17
  //#endregion
4
- export { RS_RADIO_GROUP_KEY };
18
+ export { RS_RADIO_GROUP_KEY, RS_RADIO_ORIENTATIONS, isRsRadioOrientation, isRsRadioValueEqual, resolveRsRadioOrientation, rsRadioInputValue };
@@ -1,5 +1,5 @@
1
1
 
2
- .rs-scrollbar {
2
+ .rs-scrollbar[data-v-507ffbba] {
3
3
  position: relative;
4
4
  width: 100%;
5
5
  overflow: hidden;
@@ -7,62 +7,109 @@
7
7
  border-radius: var(--rs-radius-sm);
8
8
  background: var(--rs-surface);
9
9
  }
10
- .rs-scrollbar__viewport {
10
+ .rs-scrollbar__viewport[data-v-507ffbba] {
11
11
  width: 100%;
12
12
  height: 100%;
13
13
  border-radius: inherit;
14
+ scrollbar-width: none;
15
+ -ms-overflow-style: none;
16
+ -webkit-overflow-scrolling: touch;
14
17
  }
15
-
16
- /* Reka 注入的 Primitive div。
17
- 必须用 height:100% 而非 min-height:100%:
18
- 只有父元素拥有"明确高度"时,子元素的 min-height:100% 才能解析(CSS 规范)。
19
- height:100% 让 Primitive 与 viewport 等高(= 明确高度),
20
- 超出内容通过 overflow:visible 溢出 → viewport(overflow:scroll) 正常滚动。 */
21
- .rs-scrollbar__viewport > div {
22
- height: 100%;
18
+ .rs-scrollbar__viewport[data-v-507ffbba]::-webkit-scrollbar {
19
+ display: none;
23
20
  }
24
-
25
- /* rs-scrollbar__content 同理:height:100% = Primitive 的明确高度。
26
- slot 内容若超出则溢出,滚动仍然工作;短内容时填满整个滚动区(空白可捕获右键)。 */
27
- .rs-scrollbar__content {
21
+ .rs-scrollbar__content[data-v-507ffbba] {
28
22
  min-width: 0;
29
23
  height: 100%;
30
24
  display: flex;
31
25
  flex-direction: column;
32
26
  }
33
- .rs-scrollbar__bar {
27
+ .rs-scrollbar__bar[data-v-507ffbba] {
28
+ --rs-scrollbar-thumb-size: 18px;
29
+ --rs-scrollbar-thumb-offset: 0px;
30
+ position: absolute;
34
31
  user-select: none;
35
32
  touch-action: none;
36
33
  display: flex;
37
34
  padding: var(--rs-scrollbar-padding);
38
35
  background: transparent;
39
- transition: background var(--rs-transition-fast);
36
+ transition:
37
+ background var(--rs-transition-fast),
38
+ opacity var(--rs-transition-fast);
40
39
  }
41
- .rs-scrollbar__bar[data-orientation='vertical'] {
40
+ .rs-scrollbar__bar[data-state='hidden'][data-v-507ffbba] {
41
+ opacity: 0;
42
+ pointer-events: none;
43
+ }
44
+ .rs-scrollbar__bar--vertical[data-v-507ffbba] {
45
+ inset-block-start: 0;
46
+ inset-inline-end: 0;
47
+ inset-block-end: var(--rs-scrollbar-corner, 0px);
42
48
  width: var(--rs-scrollbar-size);
43
49
  }
44
- .rs-scrollbar__bar[data-orientation='horizontal'] {
50
+ .rs-scrollbar__bar--horizontal[data-v-507ffbba] {
51
+ inset-inline-start: 0;
52
+ inset-block-end: 0;
53
+ inset-inline-end: var(--rs-scrollbar-corner, 0px);
45
54
  flex-direction: column;
46
55
  height: var(--rs-scrollbar-size);
47
56
  }
48
- .rs-scrollbar__bar:hover {
57
+ .rs-scrollbar__bar[data-v-507ffbba]:hover {
49
58
  background: color-mix(in srgb, var(--rs-border-subtle) 80%, transparent);
50
59
  }
51
- .rs-scrollbar__thumb {
52
- flex: 1;
60
+ .rs-scrollbar__thumb[data-v-507ffbba] {
61
+ flex: 0 0 auto;
53
62
  border-radius: var(--rs-radius-full);
54
63
  background: color-mix(in srgb, var(--rs-muted) 60%, transparent);
55
64
  position: relative;
56
65
  transition: background var(--rs-transition-fast);
57
66
  }
58
- .rs-scrollbar__thumb::before {
67
+ .rs-scrollbar__bar--vertical .rs-scrollbar__thumb[data-v-507ffbba] {
68
+ width: 100%;
69
+ height: var(--rs-scrollbar-thumb-size);
70
+ transform: translate3d(0, var(--rs-scrollbar-thumb-offset), 0);
71
+ }
72
+ .rs-scrollbar__bar--horizontal .rs-scrollbar__thumb[data-v-507ffbba] {
73
+ height: 100%;
74
+ width: var(--rs-scrollbar-thumb-size);
75
+ transform: translate3d(var(--rs-scrollbar-thumb-offset), 0, 0);
76
+ }
77
+ .rs-scrollbar__thumb[data-v-507ffbba]::before {
59
78
  content: '';
60
79
  position: absolute;
61
80
  inset: -0.375rem;
62
81
  }
63
- .rs-scrollbar__thumb:hover {
82
+ .rs-scrollbar__thumb[data-v-507ffbba]:hover {
64
83
  background: color-mix(in srgb, var(--rs-primary) 40%, var(--rs-muted));
65
84
  }
66
- .rs-scrollbar__corner {
85
+ .rs-scrollbar__corner[data-v-507ffbba] {
86
+ position: absolute;
87
+ inset-inline-end: 0;
88
+ inset-block-end: 0;
89
+ width: var(--rs-scrollbar-size);
90
+ height: var(--rs-scrollbar-size);
67
91
  background: var(--rs-surface);
68
92
  }
93
+ .rs-scrollbar__corner[data-state='hidden'][data-v-507ffbba] {
94
+ opacity: 0;
95
+ pointer-events: none;
96
+ }
97
+ @media (prefers-reduced-motion: reduce) {
98
+ .rs-scrollbar__bar[data-v-507ffbba],
99
+ .rs-scrollbar__thumb[data-v-507ffbba] {
100
+ transition: none;
101
+ }
102
+ }
103
+ @media (forced-colors: active) {
104
+ .rs-scrollbar[data-v-507ffbba] {
105
+ border: 1px solid CanvasText;
106
+ background: Canvas;
107
+ forced-color-adjust: none;
108
+ }
109
+ .rs-scrollbar__thumb[data-v-507ffbba] {
110
+ background: GrayText;
111
+ }
112
+ .rs-scrollbar__thumb[data-v-507ffbba]:hover {
113
+ background: Highlight;
114
+ }
115
+ }
@@ -1,4 +1,5 @@
1
1
  import { type RsScrollbarOrientation, type RsScrollbarType } from './scrollbar-utils';
2
+ export type { RsScrollbarOrientation, RsScrollbarType };
2
3
  type __VLS_Props = {
3
4
  type?: RsScrollbarType;
4
5
  scrollHideDelay?: number;
@@ -7,14 +8,17 @@ type __VLS_Props = {
7
8
  maxHeight?: string | number;
8
9
  minHeight?: string | number;
9
10
  };
10
- declare var __VLS_15: {};
11
+ declare function scrollTop(): void;
12
+ declare function scrollTopLeft(): void;
13
+ declare function getViewport(): HTMLElement | undefined;
14
+ declare var __VLS_1: {};
11
15
  type __VLS_Slots = {} & {
12
- default?: (props: typeof __VLS_15) => any;
16
+ default?: (props: typeof __VLS_1) => any;
13
17
  };
14
18
  declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {
15
- scrollTop: () => void | undefined;
16
- scrollTopLeft: () => void | undefined;
17
- getViewport: () => HTMLElement | undefined;
19
+ scrollTop: typeof scrollTop;
20
+ scrollTopLeft: typeof scrollTopLeft;
21
+ getViewport: typeof getViewport;
18
22
  }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
19
23
  type: RsScrollbarType;
20
24
  height: string | number;