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
@@ -4,7 +4,10 @@ import { buildLocalInputRules, runFormFieldRules } from "../../form/src/form-rul
4
4
  import { isRsFormItemBoundControl, useRsFormContext, useRsFormField, useRsFormItemContext } from "../../form/src/form-utils.js";
5
5
  import { useResolvedRsComponentSize } from "../../_shared/src/resolve-size.js";
6
6
  import { rsRadiusCss, useResolvedRsRadius } from "../../_shared/src/resolve-radius.js";
7
- import { computed, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, mergeModels, mergeProps, nextTick, normalizeClass, normalizeStyle, onMounted, openBlock, ref, renderSlot, toDisplayString, unref, useAttrs, useId, useModel, watch, withModifiers } from "vue";
7
+ import { normalizeRsInputValue } from "../../input/src/input-utils.js";
8
+ import RsVNodeHost_default from "../../vnode-host/src/RsVNodeHost.js";
9
+ import { applyTextareaAutosize, isRsTextareaAutosizeEnabled, resolveRsTextareaAutosizeSpec, resolveRsTextareaDisplayRows, resolveRsTextareaResize } from "./textarea-utils.js";
10
+ import { Fragment, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, guardReactiveProps, mergeModels, mergeProps, nextTick, normalizeClass, normalizeProps, normalizeStyle, onMounted, openBlock, ref, renderSlot, toDisplayString, unref, useAttrs, useId, useModel, watch, withModifiers } from "vue";
8
11
  //#region src/components/textarea/src/RsTextarea.vue?vue&type=script&setup=true&lang.ts
9
12
  var _hoisted_1 = {
10
13
  key: 0,
@@ -36,6 +39,7 @@ var _hoisted_8 = {
36
39
  class: "rs-field__hint"
37
40
  };
38
41
  var RsTextarea_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
42
+ name: "RsTextarea",
39
43
  inheritAttrs: false,
40
44
  __name: "RsTextarea",
41
45
  props: /*@__PURE__*/ mergeModels({
@@ -102,10 +106,10 @@ var RsTextarea_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defin
102
106
  const { t } = useRsI18n();
103
107
  const model = useModel(__props, "modelValue", {
104
108
  get(value) {
105
- return value == null ? "" : String(value);
109
+ return normalizeRsInputValue(value);
106
110
  },
107
111
  set(value) {
108
- return value == null ? "" : String(value);
112
+ return normalizeRsInputValue(value);
109
113
  }
110
114
  });
111
115
  const props = __props;
@@ -133,6 +137,15 @@ var RsTextarea_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defin
133
137
  if (props.showValidateMessage && autoInvalid.value) return autoMessage.value;
134
138
  return "";
135
139
  });
140
+ const errorSlotProps = computed(() => ({
141
+ name: props.name,
142
+ message: displayMessage.value,
143
+ value: model.value
144
+ }));
145
+ const formErrorContent = computed(() => {
146
+ if (!displayMessage.value || !formContext?.renderError) return null;
147
+ return formContext.renderError(errorSlotProps.value);
148
+ });
136
149
  const isInvalid = computed(() => {
137
150
  if (boundToItem.value) return Boolean(formItem?.invalid.value || props.invalid);
138
151
  return props.invalid || autoInvalid.value;
@@ -151,54 +164,26 @@ var RsTextarea_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defin
151
164
  if (!labelWidth) return void 0;
152
165
  return { "--rs-field-label-width": labelWidth };
153
166
  });
154
- const autosizeEnabled = computed(() => Boolean(props.autosize));
155
- const autosizeSpec = computed(() => typeof props.autosize === "object" && props.autosize ? props.autosize : {});
156
- const displayRows = computed(() => autosizeSpec.value.minRows ?? props.rows);
157
- const resolvedResize = computed(() => autosizeEnabled.value ? "none" : props.resize);
167
+ const autosizeEnabled = computed(() => isRsTextareaAutosizeEnabled(props.autosize));
168
+ const autosizeSpec = computed(() => resolveRsTextareaAutosizeSpec(props.autosize));
169
+ const displayRows = computed(() => resolveRsTextareaDisplayRows(props.autosize, props.rows));
170
+ const resolvedResize = computed(() => resolveRsTextareaResize(props.resize, props.autosize));
158
171
  const countText = computed(() => {
159
172
  const n = model.value.length;
160
173
  return props.maxlength != null ? `${n} / ${props.maxlength}` : String(n);
161
174
  });
162
175
  const countLimitReached = computed(() => props.maxlength != null && model.value.length >= props.maxlength);
163
176
  const showClearButton = computed(() => props.clearable && !resolvedDisabled.value && !props.readonly && model.value.length > 0);
164
- function parseLineHeight(el) {
165
- const style = getComputedStyle(el);
166
- const lh = Number.parseFloat(style.lineHeight);
167
- if (Number.isFinite(lh) && lh > 0) return lh;
168
- return (Number.parseFloat(style.fontSize) || 14) * 1.5;
169
- }
170
- function autosizePadding(el) {
171
- const style = getComputedStyle(el);
172
- const pad = Number.parseFloat(style.paddingTop) + Number.parseFloat(style.paddingBottom);
173
- if (style.boxSizing !== "border-box") return 0;
174
- const border = Number.parseFloat(style.borderTopWidth) + Number.parseFloat(style.borderBottomWidth);
175
- return (Number.isFinite(pad) ? pad : 0) + (Number.isFinite(border) ? border : 0);
176
- }
177
177
  function adjustHeight() {
178
- const el = textareaRef.value;
179
- if (!el) return;
180
- if (!autosizeEnabled.value) {
181
- el.style.height = "";
182
- el.style.overflowY = "";
183
- return;
184
- }
185
- el.style.height = "auto";
186
- el.style.overflowY = "hidden";
187
- const lineHeight = parseLineHeight(el);
188
- const extra = autosizePadding(el);
189
- const minRows = autosizeSpec.value.minRows ?? props.rows;
190
- const maxRows = autosizeSpec.value.maxRows;
191
- const min = lineHeight * minRows + extra;
192
- const max = maxRows != null ? lineHeight * maxRows + extra : void 0;
193
- let height = el.scrollHeight;
194
- if (height < min) height = min;
195
- if (max != null && height > max) {
196
- height = max;
197
- el.style.overflowY = "auto";
198
- }
199
- el.style.height = `${height}px`;
178
+ applyTextareaAutosize(textareaRef.value, {
179
+ enabled: autosizeEnabled.value,
180
+ minRows: autosizeSpec.value.minRows ?? props.rows,
181
+ maxRows: autosizeSpec.value.maxRows
182
+ });
200
183
  }
201
184
  function scheduleAdjustHeight() {
185
+ const el = textareaRef.value;
186
+ if (!autosizeEnabled.value && !el?.style.height) return;
202
187
  nextTick(adjustHeight);
203
188
  }
204
189
  async function runValidate(trigger = "submit") {
@@ -229,7 +214,7 @@ var RsTextarea_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defin
229
214
  autoMessage.value = message;
230
215
  }
231
216
  function setValue(value) {
232
- model.value = String(value ?? "");
217
+ model.value = normalizeRsInputValue(value);
233
218
  scheduleAdjustHeight();
234
219
  }
235
220
  function clearValidation() {
@@ -262,6 +247,9 @@ var RsTextarea_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defin
262
247
  if (props.validateTrigger === "blur" || props.validateTrigger === "both") runValidate("blur");
263
248
  emit("blur", event);
264
249
  }
250
+ function onFocus(event) {
251
+ emit("focus", event);
252
+ }
265
253
  function onKeydown(event) {
266
254
  if (event.key !== "Enter" || composing.value) return;
267
255
  emit("pressEnter", event);
@@ -346,7 +334,7 @@ var RsTextarea_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defin
346
334
  onCompositionend: onCompositionEnd,
347
335
  onKeydown,
348
336
  onBlur,
349
- onFocus: _cache[0] || (_cache[0] = ($event) => emit("focus", $event))
337
+ onFocus
350
338
  }), null, 16, _hoisted_5),
351
339
  showClearButton.value ? (openBlock(), createElementBlock("button", {
352
340
  key: 0,
@@ -354,7 +342,7 @@ var RsTextarea_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defin
354
342
  class: "rs-textarea__clear",
355
343
  tabindex: "-1",
356
344
  "aria-label": unref(t)("input.clear"),
357
- onPointerdown: _cache[1] || (_cache[1] = withModifiers(() => {}, ["prevent"])),
345
+ onPointerdown: _cache[0] || (_cache[0] = withModifiers(() => {}, ["prevent"])),
358
346
  onClick: onClear
359
347
  }, [createVNode(RsIcon_default, {
360
348
  name: "x",
@@ -375,7 +363,10 @@ var RsTextarea_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defin
375
363
  id: errorId.value,
376
364
  class: "rs-field__error",
377
365
  role: "alert"
378
- }, [renderSlot(_ctx.$slots, "error", { message: displayMessage.value }, () => [createTextVNode(toDisplayString(displayMessage.value), 1)], true)], 8, _hoisted_7)) : createCommentVNode("", true),
366
+ }, [renderSlot(_ctx.$slots, "error", normalizeProps(guardReactiveProps(errorSlotProps.value)), () => [formErrorContent.value !== null && formErrorContent.value !== void 0 ? (openBlock(), createBlock(RsVNodeHost_default, {
367
+ key: 0,
368
+ content: formErrorContent.value
369
+ }, null, 8, ["content"])) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [createTextVNode(toDisplayString(displayMessage.value), 1)], 64))], true)], 8, _hoisted_7)) : createCommentVNode("", true),
379
370
  __props.hint ? (openBlock(), createElementBlock("span", _hoisted_8, toDisplayString(__props.hint), 1)) : createCommentVNode("", true)
380
371
  ])], 6);
381
372
  };
@@ -3,6 +3,6 @@ import _plugin_vue_export_helper_default from "../../../_virtual/_plugin-vue_exp
3
3
  import RsTextarea_vue_vue_type_script_setup_true_lang_default from "./RsTextarea.impl.js";
4
4
 
5
5
  //#region src/components/textarea/src/RsTextarea.vue
6
- var RsTextarea_default = /*#__PURE__*/ _plugin_vue_export_helper_default(RsTextarea_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-cba8d859"]]);
6
+ var RsTextarea_default = /*#__PURE__*/ _plugin_vue_export_helper_default(RsTextarea_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-4aaa8fd4"]]);
7
7
  //#endregion
8
8
  export { RsTextarea_default as default };
@@ -0,0 +1,27 @@
1
+ export declare const RS_TEXTAREA_RESIZES: readonly ["none", "horizontal", "vertical", "both"];
2
+ export type RsTextareaResize = (typeof RS_TEXTAREA_RESIZES)[number];
3
+ /**
4
+ * 自适应高度。true 从 rows 起往下长;对象可锁 minRows / maxRows。
5
+ * 对齐 Ant Design autoSize、Element Plus autosize。
6
+ */
7
+ export type RsTextareaAutosize = boolean | {
8
+ minRows?: number;
9
+ maxRows?: number;
10
+ };
11
+ export declare function isRsTextareaResize(value: unknown): value is RsTextareaResize;
12
+ export declare function isRsTextareaAutosizeEnabled(autosize?: RsTextareaAutosize | null): boolean;
13
+ export declare function resolveRsTextareaAutosizeSpec(autosize?: RsTextareaAutosize | null): {
14
+ minRows?: number;
15
+ maxRows?: number;
16
+ };
17
+ export declare function resolveRsTextareaDisplayRows(autosize?: RsTextareaAutosize | null, rows?: number): number;
18
+ /** autosize 开启时强制 none,与 Element Plus 一致。 */
19
+ export declare function resolveRsTextareaResize(resize?: RsTextareaResize | null, autosize?: RsTextareaAutosize | null): RsTextareaResize;
20
+ export declare function parseTextareaLineHeight(el: HTMLTextAreaElement): number;
21
+ export declare function textareaAutosizePadding(el: HTMLTextAreaElement): number;
22
+ /** 写入或清掉 autosize 高度。el 已卸载时直接返回。 */
23
+ export declare function applyTextareaAutosize(el: HTMLTextAreaElement | null, options: {
24
+ enabled: boolean;
25
+ minRows: number;
26
+ maxRows?: number;
27
+ }): void;
@@ -0,0 +1,61 @@
1
+ //#region src/components/textarea/src/textarea-utils.ts
2
+ var RS_TEXTAREA_RESIZES = [
3
+ "none",
4
+ "horizontal",
5
+ "vertical",
6
+ "both"
7
+ ];
8
+ function isRsTextareaResize(value) {
9
+ return typeof value === "string" && RS_TEXTAREA_RESIZES.includes(value);
10
+ }
11
+ function isRsTextareaAutosizeEnabled(autosize) {
12
+ return autosize === true || typeof autosize === "object" && autosize != null;
13
+ }
14
+ function resolveRsTextareaAutosizeSpec(autosize) {
15
+ return typeof autosize === "object" && autosize ? autosize : {};
16
+ }
17
+ function resolveRsTextareaDisplayRows(autosize, rows = 3) {
18
+ return resolveRsTextareaAutosizeSpec(autosize).minRows ?? rows;
19
+ }
20
+ /** autosize 开启时强制 none,与 Element Plus 一致。 */
21
+ function resolveRsTextareaResize(resize, autosize) {
22
+ if (isRsTextareaAutosizeEnabled(autosize)) return "none";
23
+ return isRsTextareaResize(resize) ? resize : "vertical";
24
+ }
25
+ function parseTextareaLineHeight(el) {
26
+ const style = getComputedStyle(el);
27
+ const lh = Number.parseFloat(style.lineHeight);
28
+ if (Number.isFinite(lh) && lh > 0) return lh;
29
+ return (Number.parseFloat(style.fontSize) || 14) * 1.5;
30
+ }
31
+ function textareaAutosizePadding(el) {
32
+ const style = getComputedStyle(el);
33
+ const pad = Number.parseFloat(style.paddingTop) + Number.parseFloat(style.paddingBottom);
34
+ if (style.boxSizing !== "border-box") return 0;
35
+ const border = Number.parseFloat(style.borderTopWidth) + Number.parseFloat(style.borderBottomWidth);
36
+ return (Number.isFinite(pad) ? pad : 0) + (Number.isFinite(border) ? border : 0);
37
+ }
38
+ /** 写入或清掉 autosize 高度。el 已卸载时直接返回。 */
39
+ function applyTextareaAutosize(el, options) {
40
+ if (!el) return;
41
+ if (!options.enabled) {
42
+ el.style.height = "";
43
+ el.style.overflowY = "";
44
+ return;
45
+ }
46
+ el.style.height = "auto";
47
+ el.style.overflowY = "hidden";
48
+ const lineHeight = parseTextareaLineHeight(el);
49
+ const extra = textareaAutosizePadding(el);
50
+ const min = lineHeight * options.minRows + extra;
51
+ const max = options.maxRows != null ? lineHeight * options.maxRows + extra : void 0;
52
+ let height = el.scrollHeight;
53
+ if (height < min) height = min;
54
+ if (max != null && height > max) {
55
+ height = max;
56
+ el.style.overflowY = "auto";
57
+ }
58
+ el.style.height = `${height}px`;
59
+ }
60
+ //#endregion
61
+ export { RS_TEXTAREA_RESIZES, applyTextareaAutosize, isRsTextareaAutosizeEnabled, isRsTextareaResize, parseTextareaLineHeight, resolveRsTextareaAutosizeSpec, resolveRsTextareaDisplayRows, resolveRsTextareaResize, textareaAutosizePadding };
@@ -1,7 +1,8 @@
1
1
  export { default as RsTimePicker } from './src/RsTimePicker.js';
2
2
  export { default as RsTimePickerColumns } from './src/RsTimePickerColumns.js';
3
- export type { RsParsedTime, RsTimeRangeValue, RsTimeUnit, RsTimeUnitOption } from './src/time-picker-utils';
4
- export { EMPTY_TIME_RANGE, TIME_HOUR_OPTIONS, TIME_SECOND_OPTIONS, formatTimeFromParts, formatTimeParts, formatTimeRangeDisplay, formatTimeUnitLabel, formatTimeValue, getTimeMinuteOptions, isTimeRangeEmpty, isTimeRangeOrdered, isTimeWithinBounds, parseTimeValue, scrollTimeColumnToValue, } from './src/time-picker-utils';
3
+ export type { RsTimePickerExpose, RsTimePickerInstance, RsTimePickerLabelPosition, } from './src/RsTimePicker.js';
4
+ export type { RsParsedTime, RsTimePickerDisabledTime, RsTimePickerGetPopupContainer, RsTimePickerHourCycle, RsTimePickerModelValue, RsTimePickerShortcut, RsTimeRangeValue, RsTimeUnit, RsTimeUnitOption, } from './src/time-picker-utils';
5
+ export { EMPTY_TIME_RANGE, TIME_HOUR12_OPTIONS, TIME_HOUR_OPTIONS, TIME_SECOND_OPTIONS, formatTimeDisplay, formatTimeFromParts, formatTimeParts, formatTimeRangeDisplay, formatTimeUnitLabel, formatTimeValue, getTimeMinuteOptions, isTimeRangeEmpty, isTimeRangeOrdered, isTimeWithinBounds, parseTimeValue, scrollTimeColumnToValue, toHour12, toHour24, } from './src/time-picker-utils';
5
6
  export type { RsTimeValidationError, RsTimeValidationResult, RsTimeValidationRules } from './src/time-validation';
6
7
  export { validateTimeValue } from './src/time-validation';
7
8
  export type { RsTimeRangeValidationError, RsTimeRangeValidationResult, RsTimeRangeValidationRules, } from './src/time-range-validation';
@@ -1,11 +1,15 @@
1
1
 
2
- .rs-time-picker[data-v-f037f46a] {
2
+ .rs-time-picker[data-v-74cf1aa1] {
3
+ position: relative;
3
4
  width: 100%;
4
5
  }
5
- .rs-time-picker-embedded[data-v-f037f46a] {
6
+ .rs-time-picker-embedded[data-v-74cf1aa1] {
6
7
  min-width: 0;
7
8
  }
8
- .rs-time-picker__trigger[data-v-f037f46a] {
9
+ .rs-time-picker-wrap--clearable .rs-time-picker__trigger[data-v-74cf1aa1] {
10
+ padding-inline-end: calc(var(--rs-space-md) + 2.25rem);
11
+ }
12
+ .rs-time-picker__trigger[data-v-74cf1aa1] {
9
13
  display: inline-flex;
10
14
  align-items: center;
11
15
  justify-content: space-between;
@@ -16,7 +20,7 @@
16
20
  min-height: var(--rs-control-height-md);
17
21
  padding: 0 var(--rs-space-md);
18
22
  border: 1px solid var(--rs-input-border, var(--rs-border));
19
- border-radius: var(--rs-radius-sm);
23
+ border-radius: var(--rs-time-picker-radius, var(--rs-radius-sm));
20
24
  background: var(--rs-input-bg);
21
25
  color: var(--rs-text);
22
26
  font: inherit;
@@ -31,74 +35,87 @@
31
35
  box-shadow var(--rs-transition-fast),
32
36
  background var(--rs-transition-fast);
33
37
  }
34
- .rs-time-picker--ssm .rs-time-picker__trigger[data-v-f037f46a] {
38
+ .rs-time-picker--ssm .rs-time-picker__trigger[data-v-74cf1aa1] {
35
39
  height: var(--rs-control-height-ssm);
36
40
  min-height: var(--rs-control-height-ssm);
37
41
  padding: 0 var(--rs-space-xs);
38
42
  font-size: var(--rs-font-size-xs);
39
43
  }
40
- .rs-time-picker--sm .rs-time-picker__trigger[data-v-f037f46a] {
44
+ .rs-time-picker--sm .rs-time-picker__trigger[data-v-74cf1aa1] {
41
45
  height: var(--rs-control-height-sm);
42
46
  min-height: var(--rs-control-height-sm);
43
47
  padding: 0 var(--rs-space-sm);
44
48
  font-size: var(--rs-font-size-xs);
45
49
  }
46
- .rs-time-picker--lg .rs-time-picker__trigger[data-v-f037f46a] {
50
+ .rs-time-picker--lg .rs-time-picker__trigger[data-v-74cf1aa1] {
47
51
  height: var(--rs-control-height-lg);
48
52
  min-height: var(--rs-control-height-lg);
49
53
  padding: 0 var(--rs-space-lg);
50
54
  font-size: var(--rs-font-size-base);
51
55
  }
52
- .rs-time-picker__trigger--embedded[data-v-f037f46a] {
56
+ .rs-time-picker__trigger--embedded[data-v-74cf1aa1] {
53
57
  min-width: 5.5rem;
54
58
  background: color-mix(in srgb, var(--rs-surface) 72%, transparent);
55
59
  }
56
- .rs-time-picker--ssm .rs-time-picker__trigger--embedded[data-v-f037f46a] {
60
+ .rs-time-picker--ssm .rs-time-picker__trigger--embedded[data-v-74cf1aa1] {
57
61
  min-width: 4.75rem;
58
62
  }
59
- .rs-time-picker--lg .rs-time-picker__trigger--embedded[data-v-f037f46a] {
63
+ .rs-time-picker--lg .rs-time-picker__trigger--embedded[data-v-74cf1aa1] {
60
64
  min-width: 6.25rem;
61
65
  }
62
- .rs-time-picker__trigger[data-v-f037f46a]:hover:not(:disabled) {
66
+ .rs-time-picker__trigger[data-v-74cf1aa1]:hover:not(:disabled) {
63
67
  border-color: var(--rs-input-border-hover, var(--rs-border));
64
68
  }
65
- .rs-time-picker__trigger[data-v-f037f46a]:focus-visible {
69
+ .rs-time-picker__trigger[data-v-74cf1aa1]:focus-visible {
66
70
  outline: none;
67
71
  border-color: var(--rs-focus-border, var(--rs-primary));
68
72
  box-shadow:
69
73
  var(--rs-input-shadow, none),
70
74
  0 0 0 var(--rs-focus-ring-width, 2px) var(--rs-focus-ring);
71
75
  }
72
- .rs-time-picker__trigger[data-v-f037f46a]:disabled {
73
- opacity: 0.38;
76
+ .rs-time-picker__trigger[data-v-74cf1aa1]:disabled {
77
+ opacity: var(--rs-time-picker-disabled-opacity, 0.38);
74
78
  cursor: not-allowed;
75
79
  }
76
- .rs-time-picker__trigger--placeholder .rs-time-picker__value[data-v-f037f46a] {
80
+ .rs-time-picker__trigger--placeholder .rs-time-picker__value[data-v-74cf1aa1] {
77
81
  color: var(--rs-placeholder);
78
82
  }
79
- .rs-time-picker__trigger--invalid[data-v-f037f46a] {
80
- border-color: var(--rs-danger, var(--rs-color-danger, #dc2626));
83
+ .rs-time-picker__trigger--invalid[data-v-74cf1aa1] {
84
+ border-color: var(--rs-danger, var(--rs-color-danger));
81
85
  }
82
- .rs-time-picker__trigger--invalid[data-v-f037f46a]:focus-visible {
83
- border-color: var(--rs-danger, var(--rs-color-danger, #dc2626));
86
+ .rs-time-picker__trigger--invalid[data-v-74cf1aa1]:focus-visible {
87
+ border-color: var(--rs-danger, var(--rs-color-danger));
84
88
  box-shadow:
85
89
  var(--rs-input-shadow, none),
86
90
  0 0 0 var(--rs-focus-ring-width, 2px)
87
- color-mix(in srgb, var(--rs-danger, #dc2626) 14%, transparent);
91
+ color-mix(in srgb, var(--rs-danger) 14%, transparent);
92
+ }
93
+ .rs-time-picker__clear[data-v-74cf1aa1] {
94
+ position: absolute;
95
+ inset-block-start: 50%;
96
+ inset-inline-end: var(--rs-space-xs);
97
+ z-index: 1;
98
+ transform: translateY(-50%);
99
+ }
100
+ .rs-time-picker-field__error[data-v-74cf1aa1] {
101
+ margin: var(--rs-space-xs) 0 0;
102
+ color: var(--rs-danger, var(--rs-color-danger));
103
+ font-size: var(--rs-font-size-xs);
104
+ line-height: var(--rs-line-height-tight);
88
105
  }
89
- .rs-time-picker__leading[data-v-f037f46a] {
106
+ .rs-time-picker__leading[data-v-74cf1aa1] {
90
107
  display: inline-flex;
91
108
  min-width: 0;
92
109
  flex: 1;
93
110
  align-items: center;
94
111
  gap: var(--rs-space-sm);
95
112
  }
96
- .rs-time-picker__icon[data-v-f037f46a],
97
- .rs-time-picker__chevron[data-v-f037f46a] {
113
+ .rs-time-picker__icon[data-v-74cf1aa1],
114
+ .rs-time-picker__chevron[data-v-74cf1aa1] {
98
115
  flex-shrink: 0;
99
116
  color: var(--rs-muted);
100
117
  }
101
- .rs-time-picker__value[data-v-f037f46a] {
118
+ .rs-time-picker__value[data-v-74cf1aa1] {
102
119
  min-width: 0;
103
120
  overflow: hidden;
104
121
  text-overflow: ellipsis;
@@ -1,8 +1,28 @@
1
- import { type RsComponentSize } from '../../../theme/types';
2
- import { type RsTimeRangeValue } from './time-picker-utils';
3
- export type { RsTimeRangeValue } from './time-picker-utils';
1
+ import { type RsComponentSize, type RsRadius } from '../../../theme/types';
2
+ import { type RsFormRuleTrigger } from '../../form/src/form-rules';
3
+ import { type RsTimePickerDisabledTime, type RsTimePickerGetPopupContainer, type RsTimePickerHourCycle, type RsTimePickerModelValue, type RsTimePickerShortcut } from './time-picker-utils';
4
+ export type { RsTimePickerDisabledTime, RsTimePickerGetPopupContainer, RsTimePickerHourCycle, RsTimePickerModelValue, RsTimePickerShortcut, RsTimeRangeValue, } from './time-picker-utils';
4
5
  export type RsTimePickerLabelPosition = 'top' | 'left';
6
+ export interface RsTimePickerExpose {
7
+ setValue: (value: unknown) => void;
8
+ clearValidation: () => void;
9
+ setError: (message: string) => void;
10
+ validate: (trigger?: RsFormRuleTrigger) => Promise<{
11
+ valid: boolean;
12
+ message?: string;
13
+ name?: string;
14
+ }>;
15
+ focus: () => void;
16
+ blur: () => void;
17
+ }
18
+ export type RsTimePickerInstance = RsTimePickerExpose & {
19
+ $el: HTMLElement;
20
+ };
21
+ export interface RsTimePickerColumnsExpose {
22
+ scrollToSelectionAfterPaint: () => void;
23
+ }
5
24
  type __VLS_Props = {
25
+ name?: string;
6
26
  label?: string;
7
27
  hint?: string;
8
28
  placeholder?: string;
@@ -15,26 +35,51 @@ type __VLS_Props = {
15
35
  embedded?: boolean;
16
36
  labelPosition?: RsTimePickerLabelPosition;
17
37
  size?: RsComponentSize;
38
+ radius?: RsRadius;
18
39
  id?: string;
19
40
  invalid?: boolean;
41
+ showValidateMessage?: boolean;
42
+ clearable?: boolean;
43
+ readonly?: boolean;
44
+ ariaLabel?: string;
45
+ hourCycle?: RsTimePickerHourCycle;
46
+ minuteStep?: number;
47
+ disabledTime?: RsTimePickerDisabledTime;
48
+ shortcuts?: RsTimePickerShortcut[];
49
+ getPopupContainer?: RsTimePickerGetPopupContainer;
20
50
  };
21
51
  type __VLS_ModelProps = {
22
- modelValue?: string | RsTimeRangeValue;
52
+ modelValue?: RsTimePickerModelValue;
23
53
  'open'?: boolean;
24
54
  };
25
55
  type __VLS_PublicProps = __VLS_Props & __VLS_ModelProps;
26
- declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
27
- "update:modelValue": (value: string | RsTimeRangeValue) => any;
56
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, RsTimePickerExpose, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
57
+ change: (value: RsTimePickerModelValue) => any;
58
+ blur: () => any;
59
+ focus: () => any;
60
+ clear: () => any;
61
+ "update:modelValue": (value: RsTimePickerModelValue) => any;
28
62
  "update:open": (value: boolean) => any;
63
+ openChange: (open: boolean) => any;
29
64
  }, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
30
- "onUpdate:modelValue"?: ((value: string | RsTimeRangeValue) => any) | undefined;
65
+ onChange?: ((value: RsTimePickerModelValue) => any) | undefined;
66
+ onBlur?: (() => any) | undefined;
67
+ onFocus?: (() => any) | undefined;
68
+ onClear?: (() => any) | undefined;
69
+ "onUpdate:modelValue"?: ((value: RsTimePickerModelValue) => any) | undefined;
31
70
  "onUpdate:open"?: ((value: boolean) => any) | undefined;
71
+ onOpenChange?: ((open: boolean) => any) | undefined;
32
72
  }>, {
33
73
  required: boolean;
34
74
  disabled: boolean;
35
75
  range: boolean;
76
+ readonly: boolean;
77
+ clearable: boolean;
78
+ showValidateMessage: boolean;
36
79
  labelPosition: RsTimePickerLabelPosition;
37
80
  withSeconds: boolean;
81
+ hourCycle: RsTimePickerHourCycle;
82
+ minuteStep: number;
38
83
  embedded: boolean;
39
84
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
40
85
  declare const _default: typeof __VLS_export;