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,19 +1,25 @@
1
+ import { useRsFormContext } from "../../form/src/form-utils.js";
1
2
  import { useResolvedRsComponentSize } from "../../_shared/src/resolve-size.js";
2
- import { computed, createCommentVNode, createElementBlock, createElementVNode, defineComponent, mergeModels, normalizeClass, openBlock, renderSlot, useId, useModel, withModifiers } from "vue";
3
+ import { applyRsCheckboxIndeterminate, resolveRsCheckboxAriaChecked } from "./checkbox-utils.js";
4
+ import { computed, createCommentVNode, createElementBlock, createElementVNode, defineComponent, mergeModels, normalizeClass, onMounted, openBlock, renderSlot, useId, useModel, useTemplateRef, watch, withModifiers } from "vue";
3
5
  //#region src/components/checkbox/src/RsCheckbox.vue?vue&type=script&setup=true&lang.ts
4
6
  var _hoisted_1 = ["for"];
5
7
  var _hoisted_2 = [
6
8
  "id",
9
+ "name",
7
10
  "checked",
8
11
  "disabled",
12
+ "required",
9
13
  "aria-checked",
10
- "aria-label"
14
+ "aria-label",
15
+ "aria-required"
11
16
  ];
12
17
  var _hoisted_3 = {
13
18
  key: 0,
14
19
  class: "rs-checkbox__label"
15
20
  };
16
21
  var RsCheckbox_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
22
+ name: "RsCheckbox",
17
23
  __name: "RsCheckbox",
18
24
  props: /*@__PURE__*/ mergeModels({
19
25
  indeterminate: {
@@ -26,7 +32,12 @@ var RsCheckbox_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defin
26
32
  },
27
33
  size: {},
28
34
  ariaLabel: {},
29
- id: {}
35
+ id: {},
36
+ name: {},
37
+ required: {
38
+ type: Boolean,
39
+ default: false
40
+ }
30
41
  }, {
31
42
  "modelValue": {
32
43
  type: Boolean,
@@ -35,28 +46,40 @@ var RsCheckbox_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defin
35
46
  "modelModifiers": {}
36
47
  }),
37
48
  emits: /*@__PURE__*/ mergeModels(["change"], ["update:modelValue"]),
38
- setup(__props, { emit: __emit }) {
49
+ setup(__props, { expose: __expose, emit: __emit }) {
39
50
  const model = useModel(__props, "modelValue");
40
51
  const props = __props;
41
52
  const emit = __emit;
53
+ const formContext = useRsFormContext();
42
54
  const autoId = useId();
43
55
  const inputId = computed(() => props.id || autoId);
56
+ const inputRef = useTemplateRef("inputRef");
44
57
  const resolvedSize = useResolvedRsComponentSize(() => props.size);
58
+ const resolvedDisabled = computed(() => props.disabled || Boolean(formContext?.disabled.value));
59
+ const ariaChecked = computed(() => resolveRsCheckboxAriaChecked(model.value, props.indeterminate));
45
60
  const rootClass = computed(() => [
46
61
  "rs-checkbox",
47
62
  `rs-checkbox--${resolvedSize.value}`,
48
63
  {
49
64
  "rs-checkbox--checked": model.value && !props.indeterminate,
50
65
  "rs-checkbox--indeterminate": props.indeterminate,
51
- "rs-checkbox--disabled": props.disabled
66
+ "rs-checkbox--disabled": resolvedDisabled.value
52
67
  }
53
68
  ]);
69
+ function syncIndeterminate() {
70
+ applyRsCheckboxIndeterminate(inputRef.value, props.indeterminate);
71
+ }
54
72
  function onChange(event) {
55
- if (props.disabled) return;
73
+ if (resolvedDisabled.value) return;
56
74
  const checked = event.target.checked;
57
75
  model.value = checked;
58
76
  emit("change", checked);
59
77
  }
78
+ onMounted(syncIndeterminate);
79
+ watch(() => props.indeterminate, syncIndeterminate);
80
+ __expose({ focus: () => {
81
+ inputRef.value?.focus();
82
+ } });
60
83
  return (_ctx, _cache) => {
61
84
  return openBlock(), createElementBlock("label", {
62
85
  class: normalizeClass(rootClass.value),
@@ -64,12 +87,17 @@ var RsCheckbox_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defin
64
87
  }, [
65
88
  createElementVNode("input", {
66
89
  id: inputId.value,
90
+ ref_key: "inputRef",
91
+ ref: inputRef,
67
92
  class: "rs-checkbox__input",
68
93
  type: "checkbox",
94
+ name: __props.name,
69
95
  checked: model.value,
70
- disabled: __props.disabled,
71
- "aria-checked": __props.indeterminate ? "mixed" : model.value,
96
+ disabled: resolvedDisabled.value,
97
+ required: __props.required || void 0,
98
+ "aria-checked": ariaChecked.value,
72
99
  "aria-label": __props.ariaLabel,
100
+ "aria-required": __props.required || void 0,
73
101
  onChange,
74
102
  onClick: _cache[0] || (_cache[0] = withModifiers(() => {}, ["stop"]))
75
103
  }, null, 40, _hoisted_2),
@@ -77,7 +105,7 @@ var RsCheckbox_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defin
77
105
  class: "rs-checkbox__box",
78
106
  "aria-hidden": "true"
79
107
  }, null, -1)),
80
- _ctx.$slots.default ? (openBlock(), createElementBlock("span", _hoisted_3, [renderSlot(_ctx.$slots, "default")])) : createCommentVNode("", true)
108
+ _ctx.$slots.default ? (openBlock(), createElementBlock("span", _hoisted_3, [renderSlot(_ctx.$slots, "default", {}, void 0, true)])) : createCommentVNode("", true)
81
109
  ], 10, _hoisted_1);
82
110
  };
83
111
  }
@@ -1,7 +1,8 @@
1
1
  import './RsCheckbox.css'
2
+ import _plugin_vue_export_helper_default from "../../../_virtual/_plugin-vue_export-helper.js";
2
3
  import RsCheckbox_vue_vue_type_script_setup_true_lang_default from "./RsCheckbox.impl.js";
3
4
 
4
5
  //#region src/components/checkbox/src/RsCheckbox.vue
5
- var RsCheckbox_default = RsCheckbox_vue_vue_type_script_setup_true_lang_default;
6
+ var RsCheckbox_default = /*#__PURE__*/ _plugin_vue_export_helper_default(RsCheckbox_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-5e521b70"]]);
6
7
  //#endregion
7
8
  export { RsCheckbox_default as default };
@@ -0,0 +1,4 @@
1
+ export type RsCheckboxAriaChecked = 'true' | 'false' | 'mixed';
2
+ export declare function resolveRsCheckboxAriaChecked(checked: boolean, indeterminate: boolean): RsCheckboxAriaChecked;
3
+ /** `indeterminate` 不是 HTML 属性,必须写 IDL。 */
4
+ export declare function applyRsCheckboxIndeterminate(el: HTMLInputElement | null | undefined, indeterminate: boolean): void;
@@ -0,0 +1,12 @@
1
+ //#region src/components/checkbox/src/checkbox-utils.ts
2
+ function resolveRsCheckboxAriaChecked(checked, indeterminate) {
3
+ if (indeterminate) return "mixed";
4
+ return checked ? "true" : "false";
5
+ }
6
+ /** `indeterminate` 不是 HTML 属性,必须写 IDL。 */
7
+ function applyRsCheckboxIndeterminate(el, indeterminate) {
8
+ if (!el) return;
9
+ el.indeterminate = indeterminate;
10
+ }
11
+ //#endregion
12
+ export { applyRsCheckboxIndeterminate, resolveRsCheckboxAriaChecked };
@@ -1,2 +1,2 @@
1
1
  export { default as RsContainer } from './src/RsContainer.js';
2
- export type { RsContainerBreakpoint, RsContainerGap, RsContainerMaxWidth, RsContainerMaybeResponsive, RsContainerPadding, RsContainerResponsive, } from './src/RsContainer.js';
2
+ export type { RsContainerBreakpoint, RsContainerGap, RsContainerMaxWidth, RsContainerMaybeResponsive, RsContainerPadding, RsContainerResponsive, } from './src/container-utils';
@@ -1,24 +1,24 @@
1
1
 
2
- .rs-container[data-v-3c8fcccd] {
2
+ .rs-container[data-v-5a260e9d] {
3
3
  width: 100%;
4
4
  box-sizing: border-box;
5
5
  max-width: var(--rs-container-max-current, var(--rs-container-max-lg));
6
6
  padding-inline: var(--rs-container-padding-current, var(--rs-space-md));
7
7
  }
8
- .rs-container--centered[data-v-3c8fcccd] {
8
+ .rs-container--centered[data-v-5a260e9d] {
9
9
  margin-inline: auto;
10
10
  }
11
- .rs-container--grid[data-v-3c8fcccd] {
11
+ .rs-container--grid[data-v-5a260e9d] {
12
12
  display: grid;
13
13
  grid-template-columns: repeat(var(--rs-container-columns-current, 12), minmax(0, 1fr));
14
14
  gap: var(--rs-container-gap-current, var(--rs-space-md));
15
15
  }
16
16
  @media (width >= 40rem) {
17
- .rs-container[data-v-3c8fcccd] {
17
+ .rs-container[data-v-5a260e9d] {
18
18
  max-width: var(--rs-container-max-sm, var(--rs-container-max-current, var(--rs-container-max-lg)));
19
19
  padding-inline: var(--rs-container-padding-sm, var(--rs-container-padding-current, var(--rs-space-md)));
20
20
  }
21
- .rs-container--grid[data-v-3c8fcccd] {
21
+ .rs-container--grid[data-v-5a260e9d] {
22
22
  grid-template-columns: repeat(
23
23
  var(--rs-container-columns-sm, var(--rs-container-columns-current, 12)),
24
24
  minmax(0, 1fr)
@@ -27,14 +27,14 @@
27
27
  }
28
28
  }
29
29
  @media (width >= 48rem) {
30
- .rs-container[data-v-3c8fcccd] {
30
+ .rs-container[data-v-5a260e9d] {
31
31
  max-width: var(--rs-container-max-md, var(--rs-container-max-sm, var(--rs-container-max-current)));
32
32
  padding-inline: var(
33
33
  --rs-container-padding-md,
34
34
  var(--rs-container-padding-sm, var(--rs-container-padding-current))
35
35
  );
36
36
  }
37
- .rs-container--grid[data-v-3c8fcccd] {
37
+ .rs-container--grid[data-v-5a260e9d] {
38
38
  grid-template-columns: repeat(
39
39
  var(--rs-container-columns-md, var(--rs-container-columns-sm, var(--rs-container-columns-current, 12))),
40
40
  minmax(0, 1fr)
@@ -43,7 +43,7 @@
43
43
  }
44
44
  }
45
45
  @media (width >= 64rem) {
46
- .rs-container[data-v-3c8fcccd] {
46
+ .rs-container[data-v-5a260e9d] {
47
47
  max-width: var(
48
48
  --rs-container-max-lg,
49
49
  var(--rs-container-max-md, var(--rs-container-max-sm, var(--rs-container-max-current)))
@@ -53,7 +53,7 @@
53
53
  var(--rs-container-padding-md, var(--rs-container-padding-sm, var(--rs-container-padding-current)))
54
54
  );
55
55
  }
56
- .rs-container--grid[data-v-3c8fcccd] {
56
+ .rs-container--grid[data-v-5a260e9d] {
57
57
  grid-template-columns: repeat(
58
58
  var(
59
59
  --rs-container-columns-lg,
@@ -65,7 +65,7 @@
65
65
  }
66
66
  }
67
67
  @media (width >= 80rem) {
68
- .rs-container[data-v-3c8fcccd] {
68
+ .rs-container[data-v-5a260e9d] {
69
69
  max-width: var(
70
70
  --rs-container-max-xl,
71
71
  var(--rs-container-max-lg, var(--rs-container-max-md, var(--rs-container-max-sm, var(--rs-container-max-current))))
@@ -75,7 +75,7 @@
75
75
  var(--rs-container-padding-lg, var(--rs-container-padding-md, var(--rs-container-padding-sm, var(--rs-container-padding-current))))
76
76
  );
77
77
  }
78
- .rs-container--grid[data-v-3c8fcccd] {
78
+ .rs-container--grid[data-v-5a260e9d] {
79
79
  grid-template-columns: repeat(
80
80
  var(
81
81
  --rs-container-columns-xl,
@@ -1,15 +1,5 @@
1
- /** 支持的响应式断点,语义与常见 SaaS 前端一致。 */
2
- export type RsContainerBreakpoint = 'sm' | 'md' | 'lg' | 'xl';
3
- /** 内容区最大宽度档位,对应 `--rs-container-max-*` token。 */
4
- export type RsContainerMaxWidth = 'sm' | 'md' | 'lg' | 'xl' | 'full';
5
- /** 水平内边距档位,对应 `--rs-space-*` token。 */
6
- export type RsContainerPadding = 'none' | 'sm' | 'md' | 'lg';
7
- /** 栅格间距档位,对应 `--rs-space-*` token。 */
8
- export type RsContainerGap = 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'xl';
9
- /** 断点映射配置,用于 maxWidth、padding、columns、gap。 */
10
- export type RsContainerResponsive<T> = Partial<Record<RsContainerBreakpoint, T>>;
11
- /** 支持固定值或断点映射。 */
12
- export type RsContainerMaybeResponsive<T> = T | RsContainerResponsive<T>;
1
+ import { type RsContainerGap, type RsContainerMaxWidth, type RsContainerMaybeResponsive, type RsContainerPadding } from './container-utils';
2
+ export type { RsContainerBreakpoint, RsContainerGap, RsContainerMaxWidth, RsContainerMaybeResponsive, RsContainerPadding, RsContainerResponsive, } from './container-utils';
13
3
  type __VLS_Props = {
14
4
  /** 最大内容宽度;`fluid` 为 true 时忽略。 */
15
5
  maxWidth?: RsContainerMaybeResponsive<RsContainerMaxWidth>;
@@ -1,6 +1,8 @@
1
+ import { resolveRsContainerStyle } from "./container-utils.js";
1
2
  import { computed, createBlock, defineComponent, normalizeClass, normalizeStyle, openBlock, renderSlot, resolveDynamicComponent, withCtx } from "vue";
2
3
  //#region src/components/container/src/RsContainer.vue?vue&type=script&setup=true&lang.ts
3
4
  var RsContainer_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
5
+ name: "RsContainer",
4
6
  __name: "RsContainer",
5
7
  props: {
6
8
  maxWidth: { default: "lg" },
@@ -23,67 +25,18 @@ var RsContainer_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defi
23
25
  },
24
26
  setup(__props) {
25
27
  const props = __props;
26
- const BREAKPOINTS = [
27
- "sm",
28
- "md",
29
- "lg",
30
- "xl"
31
- ];
32
- const isResponsiveObject = (value) => typeof value === "object" && value !== null;
33
- const tokenToSpaceVar = {
34
- none: "0",
35
- xs: "var(--rs-space-xs)",
36
- sm: "var(--rs-space-sm)",
37
- md: "var(--rs-space-md)",
38
- lg: "var(--rs-space-lg)",
39
- xl: "var(--rs-space-xl)"
40
- };
41
- const tokenToContainerVar = {
42
- sm: "var(--rs-container-max-sm)",
43
- md: "var(--rs-container-max-md)",
44
- lg: "var(--rs-container-max-lg)",
45
- xl: "var(--rs-container-max-xl)",
46
- full: "var(--rs-container-max-full)"
47
- };
48
28
  const rootClass = computed(() => ["rs-container", {
49
29
  "rs-container--centered": props.centered,
50
30
  "rs-container--grid": props.grid
51
31
  }]);
52
- const rootStyle = computed(() => {
53
- const style = {};
54
- if (props.fluid) style["--rs-container-max-current"] = "none";
55
- else if (isResponsiveObject(props.maxWidth)) {
56
- const responsiveMaxWidth = props.maxWidth;
57
- BREAKPOINTS.forEach((bp) => {
58
- const value = responsiveMaxWidth[bp];
59
- if (value) style[`--rs-container-max-${bp}`] = tokenToContainerVar[value];
60
- });
61
- } else style["--rs-container-max-current"] = tokenToContainerVar[props.maxWidth];
62
- if (isResponsiveObject(props.padding)) {
63
- const responsivePadding = props.padding;
64
- BREAKPOINTS.forEach((bp) => {
65
- const value = responsivePadding[bp];
66
- if (value) style[`--rs-container-padding-${bp}`] = tokenToSpaceVar[value];
67
- });
68
- } else style["--rs-container-padding-current"] = tokenToSpaceVar[props.padding];
69
- if (props.grid) {
70
- if (isResponsiveObject(props.columns)) {
71
- const responsiveColumns = props.columns;
72
- BREAKPOINTS.forEach((bp) => {
73
- const value = responsiveColumns[bp];
74
- if (typeof value === "number") style[`--rs-container-columns-${bp}`] = value;
75
- });
76
- } else style["--rs-container-columns-current"] = props.columns;
77
- if (isResponsiveObject(props.gap)) {
78
- const responsiveGap = props.gap;
79
- BREAKPOINTS.forEach((bp) => {
80
- const value = responsiveGap[bp];
81
- if (value) style[`--rs-container-gap-${bp}`] = tokenToSpaceVar[value];
82
- });
83
- } else style["--rs-container-gap-current"] = tokenToSpaceVar[props.gap];
84
- }
85
- return style;
86
- });
32
+ const rootStyle = computed(() => resolveRsContainerStyle({
33
+ maxWidth: props.maxWidth,
34
+ padding: props.padding,
35
+ fluid: props.fluid,
36
+ grid: props.grid,
37
+ columns: props.columns,
38
+ gap: props.gap
39
+ }));
87
40
  return (_ctx, _cache) => {
88
41
  return openBlock(), createBlock(resolveDynamicComponent(__props.tag), {
89
42
  class: normalizeClass(rootClass.value),
@@ -3,6 +3,6 @@ import _plugin_vue_export_helper_default from "../../../_virtual/_plugin-vue_exp
3
3
  import RsContainer_vue_vue_type_script_setup_true_lang_default from "./RsContainer.impl.js";
4
4
 
5
5
  //#region src/components/container/src/RsContainer.vue
6
- var RsContainer_default = /*#__PURE__*/ _plugin_vue_export_helper_default(RsContainer_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-3c8fcccd"]]);
6
+ var RsContainer_default = /*#__PURE__*/ _plugin_vue_export_helper_default(RsContainer_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-5a260e9d"]]);
7
7
  //#endregion
8
8
  export { RsContainer_default as default };
@@ -0,0 +1,23 @@
1
+ export declare const RS_CONTAINER_BREAKPOINTS: readonly ["sm", "md", "lg", "xl"];
2
+ export type RsContainerBreakpoint = (typeof RS_CONTAINER_BREAKPOINTS)[number];
3
+ export declare const RS_CONTAINER_MAX_WIDTHS: readonly ["sm", "md", "lg", "xl", "full"];
4
+ export type RsContainerMaxWidth = (typeof RS_CONTAINER_MAX_WIDTHS)[number];
5
+ export declare const RS_CONTAINER_PADDINGS: readonly ["none", "sm", "md", "lg"];
6
+ export type RsContainerPadding = (typeof RS_CONTAINER_PADDINGS)[number];
7
+ export declare const RS_CONTAINER_GAPS: readonly ["none", "xs", "sm", "md", "lg", "xl"];
8
+ export type RsContainerGap = (typeof RS_CONTAINER_GAPS)[number];
9
+ export type RsContainerResponsive<T> = Partial<Record<RsContainerBreakpoint, T>>;
10
+ export type RsContainerMaybeResponsive<T> = T | RsContainerResponsive<T>;
11
+ export declare const RS_CONTAINER_SPACE_CSS: Record<RsContainerGap | RsContainerPadding, string>;
12
+ export declare const RS_CONTAINER_MAX_WIDTH_CSS: Record<RsContainerMaxWidth, string>;
13
+ export declare function isRsContainerResponsive<T>(value: RsContainerMaybeResponsive<T>): value is RsContainerResponsive<T>;
14
+ export interface RsContainerStyleInput {
15
+ maxWidth: RsContainerMaybeResponsive<RsContainerMaxWidth>;
16
+ padding: RsContainerMaybeResponsive<RsContainerPadding>;
17
+ fluid: boolean;
18
+ grid: boolean;
19
+ columns: RsContainerMaybeResponsive<number>;
20
+ gap: RsContainerMaybeResponsive<RsContainerGap>;
21
+ }
22
+ /** 写入根节点的 CSS 变量。语义与原先 SFC 内联计算一致。 */
23
+ export declare function resolveRsContainerStyle(input: RsContainerStyleInput): Record<string, string | number>;
@@ -0,0 +1,51 @@
1
+ //#region src/components/container/src/container-utils.ts
2
+ var RS_CONTAINER_BREAKPOINTS = [
3
+ "sm",
4
+ "md",
5
+ "lg",
6
+ "xl"
7
+ ];
8
+ var RS_CONTAINER_SPACE_CSS = {
9
+ none: "0",
10
+ xs: "var(--rs-space-xs)",
11
+ sm: "var(--rs-space-sm)",
12
+ md: "var(--rs-space-md)",
13
+ lg: "var(--rs-space-lg)",
14
+ xl: "var(--rs-space-xl)"
15
+ };
16
+ var RS_CONTAINER_MAX_WIDTH_CSS = {
17
+ sm: "var(--rs-container-max-sm)",
18
+ md: "var(--rs-container-max-md)",
19
+ lg: "var(--rs-container-max-lg)",
20
+ xl: "var(--rs-container-max-xl)",
21
+ full: "var(--rs-container-max-full)"
22
+ };
23
+ function isRsContainerResponsive(value) {
24
+ return typeof value === "object" && value !== null;
25
+ }
26
+ function writeResponsiveVars(style, prefix, value, toCss) {
27
+ if (isRsContainerResponsive(value)) {
28
+ for (const bp of RS_CONTAINER_BREAKPOINTS) {
29
+ const item = value[bp];
30
+ if (item === void 0) continue;
31
+ const css = toCss(item);
32
+ if (css !== void 0) style[`${prefix}-${bp}`] = css;
33
+ }
34
+ return;
35
+ }
36
+ const css = toCss(value);
37
+ if (css !== void 0) style[`${prefix}-current`] = css;
38
+ }
39
+ /** 写入根节点的 CSS 变量。语义与原先 SFC 内联计算一致。 */
40
+ function resolveRsContainerStyle(input) {
41
+ const style = {};
42
+ if (input.fluid) style["--rs-container-max-current"] = "none";
43
+ else writeResponsiveVars(style, "--rs-container-max", input.maxWidth, (item) => RS_CONTAINER_MAX_WIDTH_CSS[item]);
44
+ writeResponsiveVars(style, "--rs-container-padding", input.padding, (item) => RS_CONTAINER_SPACE_CSS[item]);
45
+ if (!input.grid) return style;
46
+ writeResponsiveVars(style, "--rs-container-columns", input.columns, (item) => typeof item === "number" ? item : void 0);
47
+ writeResponsiveVars(style, "--rs-container-gap", input.gap, (item) => RS_CONTAINER_SPACE_CSS[item]);
48
+ return style;
49
+ }
50
+ //#endregion
51
+ export { RS_CONTAINER_BREAKPOINTS, RS_CONTAINER_MAX_WIDTH_CSS, RS_CONTAINER_SPACE_CSS, isRsContainerResponsive, resolveRsContainerStyle };
@@ -1,7 +1,9 @@
1
1
  export { default as RsDatePicker } from './src/RsDatePicker.js';
2
2
  export { default as RsDateTimePicker } from './src/RsDateTimePicker.js';
3
- export type { RsDatePickerModelValue, RsDatePickerShortcut, RsDatePickerTimestampRange, RsDatePickerValueConvertOptions, RsDatePickerValueFormat, RsDatePickerValueFormatPreset, RsDateRangeValue, RsParsedDate, RsParsedDateTime, } from './src/date-picker-utils';
4
- export { EMPTY_DATE_RANGE, formatDateDisplay, formatDateParts, formatDateRangeDisplay, formatDateTimeDisplay, formatDateTimeValue, formatDateValue, fromInternalPickerValue, isDateRangeEmpty, isDateRangeOrdered, isDateTimeRangeOrdered, parseDateTimeValue, parseDateValue, RS_DATE_PICKER_VALUE_FORMAT_PRESETS, toInternalPickerValue, toRangeEndpointString, } from './src/date-picker-utils';
3
+ export type { RsDatePickerExpose, RsDatePickerInstance, RsDatePickerLabelPosition, } from './src/RsDatePicker.js';
4
+ export type { RsDateTimePickerExpose, RsDateTimePickerInstance, RsDateTimePickerLabelPosition, RsDateTimeRangeValue, } from './src/RsDateTimePicker.js';
5
+ export type { RsDatePickerDisabledDate, RsDatePickerGetPopupContainer, RsDatePickerModelValue, RsDatePickerShortcut, RsDatePickerTimestampRange, RsDatePickerValueConvertOptions, RsDatePickerValueFormat, RsDatePickerValueFormatPreset, RsDateRangeValue, RsParsedDate, RsParsedDateTime, RsWeekStartsOn, } from './src/date-picker-utils';
6
+ export { EMPTY_DATE_RANGE, formatDateDisplay, formatDateParts, formatDateRangeDisplay, formatDateTimeDisplay, formatDateTimeValue, formatDateValue, formatPickerDisplay, fromInternalPickerValue, isDateRangeEmpty, isDateRangeOrdered, isDateTimeRangeOrdered, parseDateTimeValue, parseDateValue, resolveWeekStartsOn, RS_DATE_PICKER_VALUE_FORMAT_PRESETS, toInternalPickerValue, toRangeEndpointString, } from './src/date-picker-utils';
5
7
  export type { RsDateTimeValidationError, RsDateTimeValidationResult, RsDateTimeValidationRules, RsDateValidationError, RsDateValidationResult, RsDateValidationRules, } from './src/date-validation';
6
8
  export { validateDateTimeValue, validateDateValue } from './src/date-validation';
7
9
  export type { RsDateRangeValidationError, RsDateRangeValidationResult, RsDateRangeValidationRules, RsDateTimeRangeValidationError, RsDateTimeRangeValidationResult, RsDateTimeRangeValidationRules, } from './src/date-range-validation';
@@ -1,8 +1,21 @@
1
1
 
2
- .rs-date-picker[data-v-816760df] {
2
+ .rs-date-picker[data-v-e481c787] {
3
+ position: relative;
3
4
  width: 100%;
4
5
  }
5
- .rs-date-picker__trigger[data-v-816760df] {
6
+ .rs-date-picker-wrap--clearable .rs-date-picker__trigger[data-v-e481c787] {
7
+ padding-inline-end: calc(var(--rs-space-md) + 2.25rem);
8
+ }
9
+ .rs-date-picker-wrap--clearable .rs-date-picker--ssm .rs-date-picker__trigger[data-v-e481c787] {
10
+ padding-inline-end: calc(var(--rs-space-xs) + 2rem);
11
+ }
12
+ .rs-date-picker-wrap--clearable .rs-date-picker--sm .rs-date-picker__trigger[data-v-e481c787] {
13
+ padding-inline-end: calc(var(--rs-space-sm) + 2rem);
14
+ }
15
+ .rs-date-picker-wrap--clearable .rs-date-picker--lg .rs-date-picker__trigger[data-v-e481c787] {
16
+ padding-inline-end: calc(var(--rs-space-lg) + 2.25rem);
17
+ }
18
+ .rs-date-picker__trigger[data-v-e481c787] {
6
19
  display: inline-flex;
7
20
  align-items: center;
8
21
  justify-content: space-between;
@@ -13,7 +26,7 @@
13
26
  min-height: var(--rs-control-height-md);
14
27
  padding: 0 var(--rs-space-md);
15
28
  border: 1px solid var(--rs-input-border, var(--rs-border));
16
- border-radius: var(--rs-radius-sm);
29
+ border-radius: var(--rs-date-picker-radius, var(--rs-radius-sm));
17
30
  background: var(--rs-input-bg);
18
31
  color: var(--rs-text);
19
32
  font: inherit;
@@ -28,28 +41,28 @@
28
41
  box-shadow var(--rs-transition-fast),
29
42
  background var(--rs-transition-fast);
30
43
  }
31
- .rs-date-picker--ssm .rs-date-picker__trigger[data-v-816760df] {
44
+ .rs-date-picker--ssm .rs-date-picker__trigger[data-v-e481c787] {
32
45
  height: var(--rs-control-height-ssm);
33
46
  min-height: var(--rs-control-height-ssm);
34
47
  padding: 0 var(--rs-space-xs);
35
48
  font-size: var(--rs-font-size-xs);
36
49
  }
37
- .rs-date-picker--sm .rs-date-picker__trigger[data-v-816760df] {
50
+ .rs-date-picker--sm .rs-date-picker__trigger[data-v-e481c787] {
38
51
  height: var(--rs-control-height-sm);
39
52
  min-height: var(--rs-control-height-sm);
40
53
  padding: 0 var(--rs-space-sm);
41
54
  font-size: var(--rs-font-size-xs);
42
55
  }
43
- .rs-date-picker--lg .rs-date-picker__trigger[data-v-816760df] {
56
+ .rs-date-picker--lg .rs-date-picker__trigger[data-v-e481c787] {
44
57
  height: var(--rs-control-height-lg);
45
58
  min-height: var(--rs-control-height-lg);
46
59
  padding: 0 var(--rs-space-lg);
47
60
  font-size: var(--rs-font-size-base);
48
61
  }
49
- .rs-date-picker__trigger[data-v-816760df]:hover:not(:disabled) {
62
+ .rs-date-picker__trigger[data-v-e481c787]:hover:not(:disabled) {
50
63
  border-color: var(--rs-input-border-hover, var(--rs-border));
51
64
  }
52
- .rs-date-picker__trigger[data-v-816760df]:focus-visible {
65
+ .rs-date-picker__trigger[data-v-e481c787]:focus-visible {
53
66
  outline: none;
54
67
  border-color: var(--rs-focus-border, var(--rs-primary));
55
68
  background: var(--rs-input-bg);
@@ -57,42 +70,49 @@
57
70
  var(--rs-input-shadow, none),
58
71
  0 0 0 var(--rs-focus-ring-width, 2px) var(--rs-focus-ring);
59
72
  }
60
- .rs-date-picker__trigger[data-v-816760df]:disabled {
61
- opacity: 0.38;
73
+ .rs-date-picker__trigger[data-v-e481c787]:disabled {
74
+ opacity: var(--rs-date-picker-disabled-opacity, 0.38);
62
75
  cursor: not-allowed;
63
76
  }
64
- .rs-date-picker__trigger--placeholder .rs-date-picker__value[data-v-816760df] {
77
+ .rs-date-picker__trigger--placeholder .rs-date-picker__value[data-v-e481c787] {
65
78
  color: var(--rs-placeholder);
66
79
  }
67
- .rs-date-picker__trigger--invalid[data-v-816760df] {
68
- border-color: var(--rs-danger, var(--rs-color-danger, #dc2626));
80
+ .rs-date-picker__trigger--invalid[data-v-e481c787] {
81
+ border-color: var(--rs-danger, var(--rs-color-danger));
69
82
  }
70
- .rs-date-picker__trigger--invalid[data-v-816760df]:focus-visible {
71
- border-color: var(--rs-danger, var(--rs-color-danger, #dc2626));
83
+ .rs-date-picker__trigger--invalid[data-v-e481c787]:focus-visible {
84
+ border-color: var(--rs-danger, var(--rs-color-danger));
72
85
  box-shadow:
73
86
  var(--rs-input-shadow, none),
74
87
  0 0 0 var(--rs-focus-ring-width, 2px)
75
- color-mix(in srgb, var(--rs-danger, #dc2626) 14%, transparent);
88
+ color-mix(in srgb, var(--rs-danger) 14%, transparent);
89
+ }
90
+ .rs-date-picker__clear[data-v-e481c787] {
91
+ position: absolute;
92
+ inset-block-start: 50%;
93
+ inset-inline-end: var(--rs-space-xs);
94
+ z-index: 1;
95
+ transform: translateY(-50%);
76
96
  }
77
- .rs-date-picker-field__error[data-v-816760df] {
97
+ .rs-date-picker-field__error[data-v-e481c787] {
78
98
  margin: var(--rs-space-xs) 0 0;
79
- color: var(--rs-danger, var(--rs-color-danger, #dc2626));
99
+ color: var(--rs-danger, var(--rs-color-danger));
80
100
  font-size: var(--rs-font-size-xs);
81
101
  line-height: var(--rs-line-height-tight);
82
102
  }
83
- .rs-date-picker__leading[data-v-816760df] {
103
+ .rs-date-picker__leading[data-v-e481c787] {
84
104
  display: inline-flex;
85
105
  min-width: 0;
86
106
  flex: 1;
87
107
  align-items: center;
88
108
  gap: var(--rs-space-sm);
89
109
  }
90
- .rs-date-picker__icon[data-v-816760df],
91
- .rs-date-picker__chevron[data-v-816760df] {
110
+ .rs-date-picker__icon[data-v-e481c787],
111
+ .rs-date-picker__chevron[data-v-e481c787] {
92
112
  flex-shrink: 0;
93
113
  color: var(--rs-muted);
94
114
  }
95
- .rs-date-picker__value[data-v-816760df] {
115
+ .rs-date-picker__value[data-v-e481c787] {
96
116
  min-width: 0;
97
117
  overflow: hidden;
98
118
  text-overflow: ellipsis;