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,43 +1,65 @@
1
1
  import { RS_COMPONENT_SIZE_ICON_PX } from "../../../theme/types.js";
2
- import { PopoverContent, PopoverPortal, PopoverRoot, PopoverTrigger } from "../../_shared/src/reka.js";
3
2
  import { useRsI18n } from "../../../composables/useRsI18n.js";
4
3
  import RsIcon_default from "../../icon/src/RsIcon.js";
5
- import { isRsFormItemBoundControl, useRsFormItemContext } from "../../form/src/form-utils.js";
4
+ import { buildLocalInputRules, runFormFieldRules } from "../../form/src/form-rules.js";
5
+ import { isRsFormItemBoundControl, useRsFormContext, useRsFormField, useRsFormItemContext } from "../../form/src/form-utils.js";
6
6
  import { useResolvedRsComponentSize } from "../../_shared/src/resolve-size.js";
7
- import { EMPTY_TIME_RANGE, formatTimeFromParts, formatTimeRangeDisplay, getCurrentTime, isTimeRangeEmpty, isTimeRangeOrderedValues, isTimeWithinBounds, parseTimeValue, pickEarlierTime, pickLaterTime } from "./time-picker-utils.js";
7
+ import { rsRadiusCss, useResolvedRsRadius } from "../../_shared/src/resolve-radius.js";
8
+ import RsButton_default from "../../button/src/RsButton.js";
9
+ import { placeAnchoredPopup } from "../../_shared/src/overlay-utils.js";
10
+ import { EMPTY_TIME_RANGE, containOverlayWheel, formatTimeDisplay, formatTimeFromParts, formatTimeRangeDisplay, getCurrentTime, isTimeColumnScrollTarget, isTimeRangeEmpty, isTimeRangeOrderedValues, isTimeWithinBounds, parseTimeValue, pickEarlierTime, pickLaterTime, resolveTimePickerPortalTarget } from "./time-picker-utils.js";
8
11
  import RsTimePickerColumns_default from "./RsTimePickerColumns.js";
9
- import { Fragment, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, mergeModels, mergeProps, nextTick, normalizeClass, openBlock, ref, resolveComponent, toDisplayString, unref, useAttrs, useId, useModel, useTemplateRef, watch, withCtx } from "vue";
12
+ import { Fragment, Teleport, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, mergeModels, mergeProps, nextTick, normalizeClass, normalizeStyle, onBeforeUnmount, openBlock, ref, renderList, resolveComponent, toDisplayString, unref, useAttrs, useId, useModel, useTemplateRef, watch, withModifiers } from "vue";
10
13
  //#region src/components/time-picker/src/RsTimePicker.vue?vue&type=script&setup=true&lang.ts
11
- var _hoisted_1 = {
14
+ var _hoisted_1 = ["for"];
15
+ var _hoisted_2 = {
12
16
  key: 0,
13
- class: "rs-field__label"
14
- };
15
- var _hoisted_2 = ["for"];
16
- var _hoisted_3 = {
17
- key: 2,
18
17
  class: "rs-field__required",
19
18
  "aria-hidden": "true"
20
19
  };
21
- var _hoisted_4 = { class: "rs-time-picker" };
20
+ var _hoisted_3 = { class: "rs-time-picker" };
21
+ var _hoisted_4 = [
22
+ "id",
23
+ "disabled",
24
+ "aria-invalid",
25
+ "aria-label",
26
+ "aria-expanded",
27
+ "aria-controls",
28
+ "aria-readonly"
29
+ ];
22
30
  var _hoisted_5 = { class: "rs-time-picker__leading" };
23
31
  var _hoisted_6 = { class: "rs-time-picker__value" };
24
- var _hoisted_7 = {
25
- key: 0,
26
- class: "rs-time-picker__panel"
27
- };
28
- var _hoisted_8 = {
32
+ var _hoisted_7 = [
33
+ "id",
34
+ "data-placement",
35
+ "data-rs-theme",
36
+ "aria-label"
37
+ ];
38
+ var _hoisted_8 = { class: "rs-time-picker__panel" };
39
+ var _hoisted_9 = {
29
40
  key: 0,
30
41
  class: "rs-time-picker__range-grid"
31
42
  };
32
- var _hoisted_9 = { class: "rs-time-picker__range-pane" };
33
- var _hoisted_10 = { class: "rs-time-picker__pane-title" };
34
- var _hoisted_11 = { class: "rs-time-picker__range-pane" };
35
- var _hoisted_12 = { class: "rs-time-picker__pane-title" };
36
- var _hoisted_13 = { class: "rs-time-picker__footer" };
37
- var _hoisted_14 = { class: "rs-time-picker__actions" };
38
- var _hoisted_15 = ["disabled"];
43
+ var _hoisted_10 = { class: "rs-time-picker__range-pane" };
44
+ var _hoisted_11 = { class: "rs-time-picker__pane-title" };
45
+ var _hoisted_12 = { class: "rs-time-picker__range-pane" };
46
+ var _hoisted_13 = { class: "rs-time-picker__pane-title" };
47
+ var _hoisted_14 = { class: "rs-time-picker__footer" };
48
+ var _hoisted_15 = { class: "rs-time-picker__footer-start" };
39
49
  var _hoisted_16 = {
50
+ key: 0,
51
+ class: "rs-time-picker__shortcuts"
52
+ };
53
+ var _hoisted_17 = ["disabled", "onClick"];
54
+ var _hoisted_18 = { class: "rs-time-picker__actions" };
55
+ var _hoisted_19 = ["disabled"];
56
+ var _hoisted_20 = {
40
57
  key: 1,
58
+ class: "rs-time-picker-field__error",
59
+ role: "alert"
60
+ };
61
+ var _hoisted_21 = {
62
+ key: 2,
41
63
  class: "rs-field__hint"
42
64
  };
43
65
  var RsTimePicker_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
@@ -45,6 +67,7 @@ var RsTimePicker_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ def
45
67
  inheritAttrs: false,
46
68
  __name: "RsTimePicker",
47
69
  props: /*@__PURE__*/ mergeModels({
70
+ name: {},
48
71
  label: {},
49
72
  hint: {},
50
73
  placeholder: {},
@@ -72,8 +95,27 @@ var RsTimePicker_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ def
72
95
  },
73
96
  labelPosition: { default: "top" },
74
97
  size: {},
98
+ radius: {},
75
99
  id: {},
76
- invalid: { type: Boolean }
100
+ invalid: { type: Boolean },
101
+ showValidateMessage: {
102
+ type: Boolean,
103
+ default: true
104
+ },
105
+ clearable: {
106
+ type: Boolean,
107
+ default: false
108
+ },
109
+ readonly: {
110
+ type: Boolean,
111
+ default: false
112
+ },
113
+ ariaLabel: {},
114
+ hourCycle: { default: 24 },
115
+ minuteStep: { default: 1 },
116
+ disabledTime: {},
117
+ shortcuts: {},
118
+ getPopupContainer: {}
77
119
  }, {
78
120
  "modelValue": { default: "" },
79
121
  "modelModifiers": {},
@@ -83,24 +125,52 @@ var RsTimePicker_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ def
83
125
  },
84
126
  "openModifiers": {}
85
127
  }),
86
- emits: ["update:modelValue", "update:open"],
87
- setup(__props) {
128
+ emits: /*@__PURE__*/ mergeModels([
129
+ "change",
130
+ "openChange",
131
+ "clear",
132
+ "focus",
133
+ "blur"
134
+ ], ["update:modelValue", "update:open"]),
135
+ setup(__props, { expose: __expose, emit: __emit }) {
88
136
  function isTimeRangeModel(value) {
89
137
  return typeof value === "object" && value !== null && ("start" in value || "end" in value);
90
138
  }
91
139
  const model = useModel(__props, "modelValue");
92
140
  const open = useModel(__props, "open");
93
141
  const props = __props;
94
- const fieldId = useId();
142
+ const emit = __emit;
143
+ const fallbackId = useId();
144
+ const panelId = useId();
95
145
  const attrs = useAttrs();
96
- const { t } = useRsI18n();
146
+ const { t, locale } = useRsI18n();
147
+ const formContext = useRsFormContext();
97
148
  const formItem = useRsFormItemContext();
98
- const boundToItem = computed(() => isRsFormItemBoundControl(formItem, { id: props.id }));
99
- const isInvalid = computed(() => Boolean(props.invalid || boundToItem.value && formItem?.invalid.value));
100
- const triggerId = computed(() => props.id || fieldId);
149
+ const boundToItem = computed(() => isRsFormItemBoundControl(formItem, {
150
+ id: props.id,
151
+ name: props.name
152
+ }));
153
+ const autoMessage = ref("");
154
+ const isInvalid = computed(() => Boolean(props.invalid || boundToItem.value && formItem?.invalid.value || !boundToItem.value && autoMessage.value));
155
+ const triggerId = computed(() => props.id || fallbackId);
156
+ const visibleMessage = computed(() => props.embedded || boundToItem.value || props.showValidateMessage === false ? "" : autoMessage.value);
101
157
  const resolvedSize = useResolvedRsComponentSize(() => props.size);
158
+ const resolvedRadius = useResolvedRsRadius(() => props.radius, "sm");
102
159
  const triggerIconSize = computed(() => RS_COMPONENT_SIZE_ICON_PX[resolvedSize.value]);
160
+ const clearIconSize = computed(() => Math.max(12, triggerIconSize.value - 2));
161
+ const resolvedDisabled = computed(() => props.disabled || Boolean(formContext?.disabled.value));
162
+ const canInteract = computed(() => !resolvedDisabled.value && !props.readonly);
103
163
  const columnsRef = useTemplateRef("columnsRef");
164
+ const rootRef = useTemplateRef("rootRef");
165
+ const triggerRef = useTemplateRef("triggerRef");
166
+ const contentRef = useTemplateRef("contentRef");
167
+ const panelTheme = ref();
168
+ const popup = ref({
169
+ top: 0,
170
+ left: 0,
171
+ width: 0,
172
+ placement: "bottom"
173
+ });
104
174
  const draftHour = ref(0);
105
175
  const draftMinute = ref(0);
106
176
  const draftSecond = ref(0);
@@ -127,14 +197,22 @@ var RsTimePicker_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ def
127
197
  const startMaxTime = computed(() => pickEarlierTime(props.maxTime, draftEndTime.value, props.withSeconds));
128
198
  const endMinTime = computed(() => pickLaterTime(props.minTime, draftStartTime.value, props.withSeconds));
129
199
  const isEmpty = computed(() => props.range ? isTimeRangeEmpty(rangeModel.value) : !singleModel.value);
200
+ const displayOptions = computed(() => ({
201
+ hourCycle: props.hourCycle,
202
+ withSeconds: props.withSeconds,
203
+ locale: locale.value
204
+ }));
130
205
  const displayValue = computed(() => {
131
206
  if (props.range) {
132
- const formatted = formatTimeRangeDisplay(rangeModel.value, { separator: t("timePicker.separator") });
207
+ const formatted = formatTimeRangeDisplay(rangeModel.value, {
208
+ separator: t("timePicker.separator"),
209
+ ...displayOptions.value
210
+ });
133
211
  if (formatted) return formatted;
134
212
  return props.placeholder ?? t("timePicker.rangePlaceholder");
135
213
  }
136
214
  if (!singleModel.value) return props.placeholder ?? (props.embedded ? t("timePicker.embeddedPlaceholder") : t("timePicker.placeholder"));
137
- return singleModel.value;
215
+ return formatTimeDisplay(singleModel.value, displayOptions.value);
138
216
  });
139
217
  const draftTime = computed({
140
218
  get() {
@@ -148,6 +226,14 @@ var RsTimePicker_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ def
148
226
  draftSecond.value = parsed.second;
149
227
  }
150
228
  });
229
+ const showClear = computed(() => props.clearable && !isEmpty.value && canInteract.value && !props.embedded);
230
+ const portalTarget = computed(() => resolveTimePickerPortalTarget(props.getPopupContainer, triggerRef.value));
231
+ const panelStyle = computed(() => ({
232
+ top: `${popup.value.top}px`,
233
+ left: `${popup.value.left}px`,
234
+ "--rs-time-picker-radius": rsRadiusCss(resolvedRadius.value)
235
+ }));
236
+ const rootStyle = computed(() => ({ "--rs-time-picker-radius": rsRadiusCss(resolvedRadius.value) }));
151
237
  function syncSingleDraft() {
152
238
  const parsed = parseTimeValue(singleModel.value, props.withSeconds);
153
239
  if (parsed) {
@@ -176,12 +262,16 @@ var RsTimePicker_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ def
176
262
  syncSingleDraft();
177
263
  }
178
264
  function isUnitDisabled(unit, value) {
265
+ if (props.disabledTime?.(unit, value)) return true;
179
266
  return !isTimeWithinBounds(unit === "hour" ? value : draftHour.value, unit === "minute" ? value : draftMinute.value, unit === "second" ? value : draftSecond.value, {
180
267
  minTime: props.minTime,
181
268
  maxTime: props.maxTime,
182
269
  withSeconds: props.withSeconds
183
270
  });
184
271
  }
272
+ function emitChange() {
273
+ emit("change", model.value);
274
+ }
185
275
  function confirmSingleSelection() {
186
276
  if (!isTimeWithinBounds(draftHour.value, draftMinute.value, draftSecond.value, {
187
277
  minTime: props.minTime,
@@ -190,6 +280,7 @@ var RsTimePicker_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ def
190
280
  })) return;
191
281
  singleModel.value = formatTimeFromParts(draftHour.value, draftMinute.value, draftSecond.value, props.withSeconds);
192
282
  open.value = false;
283
+ emitChange();
193
284
  }
194
285
  function confirmRangeSelection() {
195
286
  const start = draftStartTime.value;
@@ -212,6 +303,7 @@ var RsTimePicker_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ def
212
303
  end
213
304
  };
214
305
  open.value = false;
306
+ emitChange();
215
307
  }
216
308
  function confirmSelection() {
217
309
  if (props.range) {
@@ -224,6 +316,27 @@ var RsTimePicker_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ def
224
316
  if (props.range) rangeModel.value = { ...EMPTY_TIME_RANGE };
225
317
  else singleModel.value = "";
226
318
  open.value = false;
319
+ emit("clear");
320
+ emitChange();
321
+ }
322
+ function applyShortcut(shortcut) {
323
+ if (!canInteract.value) return;
324
+ const next = shortcut.value();
325
+ if (props.range) {
326
+ if (typeof next === "string" || !next.start || !next.end) return;
327
+ if (!isTimeRangeOrderedValues(next.start, next.end, props.withSeconds)) return;
328
+ rangeModel.value = {
329
+ start: next.start,
330
+ end: next.end
331
+ };
332
+ open.value = false;
333
+ emitChange();
334
+ return;
335
+ }
336
+ if (typeof next !== "string" || !parseTimeValue(next, props.withSeconds)) return;
337
+ singleModel.value = next;
338
+ open.value = false;
339
+ emitChange();
227
340
  }
228
341
  function selectPreset() {
229
342
  if (props.range) {
@@ -238,135 +351,386 @@ var RsTimePicker_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ def
238
351
  draftSecond.value = current.second;
239
352
  confirmSingleSelection();
240
353
  }
241
- watch(open, async (isOpen) => {
242
- if (!isOpen) return;
243
- syncDraftFromModel();
244
- if (!props.range) {
245
- await nextTick();
246
- columnsRef.value?.scrollToSelectionAfterPaint();
354
+ function clearValidation() {
355
+ autoMessage.value = "";
356
+ }
357
+ function setFieldValue(value) {
358
+ if (props.range) {
359
+ if (isTimeRangeModel(value)) {
360
+ model.value = value;
361
+ return;
362
+ }
363
+ if (Array.isArray(value) && value.length >= 2) {
364
+ model.value = {
365
+ start: String(value[0] ?? ""),
366
+ end: String(value[1] ?? "")
367
+ };
368
+ return;
369
+ }
370
+ model.value = { ...EMPTY_TIME_RANGE };
371
+ return;
372
+ }
373
+ model.value = value == null ? "" : String(value);
374
+ }
375
+ function focus() {
376
+ triggerRef.value?.focus();
377
+ }
378
+ function blur() {
379
+ triggerRef.value?.blur();
380
+ }
381
+ function toggleOpen() {
382
+ if (!canInteract.value) return;
383
+ open.value = !open.value;
384
+ }
385
+ function onTriggerKeydown(event) {
386
+ if (!canInteract.value || event.isComposing) return;
387
+ if (event.key === "Escape" && open.value) {
388
+ event.preventDefault();
389
+ open.value = false;
390
+ return;
247
391
  }
392
+ if (open.value) return;
393
+ if (event.key === "ArrowDown" || event.key === "ArrowUp") {
394
+ event.preventDefault();
395
+ open.value = true;
396
+ }
397
+ }
398
+ function syncPanelTheme() {
399
+ const el = triggerRef.value ?? rootRef.value;
400
+ if (!el) {
401
+ panelTheme.value = void 0;
402
+ return;
403
+ }
404
+ const themed = el.closest("[data-rs-theme]");
405
+ panelTheme.value = themed instanceof HTMLElement ? themed.dataset.rsTheme : void 0;
406
+ }
407
+ function placePopup() {
408
+ const trigger = triggerRef.value;
409
+ const content = contentRef.value;
410
+ if (!trigger || !open.value || typeof window === "undefined") return;
411
+ const anchor = trigger.getBoundingClientRect();
412
+ const measured = content?.getBoundingClientRect();
413
+ const prefWidth = props.range ? Math.max(anchor.width, measured?.width || Math.min(448, window.innerWidth - 32)) : Math.max(anchor.width, measured?.width || Math.min(288, window.innerWidth - 32));
414
+ popup.value = placeAnchoredPopup({
415
+ top: anchor.top,
416
+ left: anchor.left,
417
+ height: anchor.height,
418
+ width: anchor.width
419
+ }, {
420
+ width: prefWidth,
421
+ height: measured?.height || 280
422
+ }, {
423
+ width: window.innerWidth,
424
+ height: window.innerHeight
425
+ }, 6);
426
+ }
427
+ let frame = 0;
428
+ let overlayBound = false;
429
+ let openWatchReady = false;
430
+ let panelResize;
431
+ function requestPlace() {
432
+ if (typeof window === "undefined") return;
433
+ if (frame) return;
434
+ frame = window.requestAnimationFrame(() => {
435
+ frame = 0;
436
+ placePopup();
437
+ });
438
+ }
439
+ function onDocPointerDown(event) {
440
+ const target = event.target;
441
+ if (!(target instanceof Node)) return;
442
+ if (rootRef.value?.contains(target)) return;
443
+ if (contentRef.value?.contains(target)) return;
444
+ if (target instanceof Element && target.closest(".rs-time-picker__content")) return;
445
+ open.value = false;
446
+ }
447
+ function onWindowChange(event) {
448
+ if (!open.value) return;
449
+ if (event?.type === "scroll" && isTimeColumnScrollTarget(event.target)) return;
450
+ requestPlace();
451
+ }
452
+ function attachPanelObserver() {
453
+ if (typeof ResizeObserver === "undefined") return;
454
+ panelResize?.disconnect();
455
+ if (!contentRef.value) return;
456
+ panelResize = new ResizeObserver(() => requestPlace());
457
+ panelResize.observe(contentRef.value);
458
+ }
459
+ function attachPanelWheel() {
460
+ contentRef.value?.addEventListener("wheel", containOverlayWheel, { passive: false });
461
+ }
462
+ function detachPanelWheel() {
463
+ contentRef.value?.removeEventListener("wheel", containOverlayWheel);
464
+ }
465
+ function attachOverlay() {
466
+ if (overlayBound || typeof window === "undefined") return;
467
+ overlayBound = true;
468
+ if (typeof document !== "undefined") document.addEventListener("pointerdown", onDocPointerDown);
469
+ window.addEventListener("resize", onWindowChange);
470
+ window.addEventListener("scroll", onWindowChange, true);
471
+ }
472
+ function detachOverlay() {
473
+ detachPanelWheel();
474
+ panelResize?.disconnect();
475
+ panelResize = void 0;
476
+ if (frame && typeof window !== "undefined") {
477
+ window.cancelAnimationFrame(frame);
478
+ frame = 0;
479
+ }
480
+ if (!overlayBound) return;
481
+ overlayBound = false;
482
+ if (typeof document !== "undefined") document.removeEventListener("pointerdown", onDocPointerDown);
483
+ if (typeof window !== "undefined") {
484
+ window.removeEventListener("resize", onWindowChange);
485
+ window.removeEventListener("scroll", onWindowChange, true);
486
+ }
487
+ }
488
+ async function runValidate(trigger = "submit") {
489
+ const formRules = formContext?.getFieldRules(props.name) ?? [];
490
+ const localRules = buildLocalInputRules({ required: props.required });
491
+ const rules = [...formRules, ...localRules];
492
+ if (!rules.length) {
493
+ autoMessage.value = "";
494
+ return {
495
+ valid: true,
496
+ name: props.name
497
+ };
498
+ }
499
+ const result = await runFormFieldRules(model.value, rules, { trigger });
500
+ autoMessage.value = result.message ?? "";
501
+ return {
502
+ valid: result.valid,
503
+ message: result.message,
504
+ name: props.name
505
+ };
506
+ }
507
+ useRsFormField(() => ({
508
+ get name() {
509
+ return props.name;
510
+ },
511
+ getValue: () => model.value,
512
+ setValue: setFieldValue,
513
+ validate: (trigger) => runValidate(trigger ?? "submit"),
514
+ clearValidation,
515
+ setError: (message) => {
516
+ autoMessage.value = message;
517
+ }
518
+ }));
519
+ __expose({
520
+ setValue: setFieldValue,
521
+ clearValidation,
522
+ setError: (message) => {
523
+ autoMessage.value = message;
524
+ },
525
+ validate: runValidate,
526
+ focus,
527
+ blur
248
528
  });
529
+ watch(open, (isOpen) => {
530
+ const skipEvent = !openWatchReady;
531
+ openWatchReady = true;
532
+ if (typeof document === "undefined" || typeof window === "undefined") return;
533
+ if (isOpen) {
534
+ if (!canInteract.value) {
535
+ open.value = false;
536
+ return;
537
+ }
538
+ syncDraftFromModel();
539
+ syncPanelTheme();
540
+ attachOverlay();
541
+ nextTick(async () => {
542
+ requestPlace();
543
+ attachPanelObserver();
544
+ attachPanelWheel();
545
+ if (!props.range) {
546
+ await nextTick();
547
+ columnsRef.value?.scrollToSelectionAfterPaint();
548
+ }
549
+ });
550
+ if (!skipEvent) emit("openChange", true);
551
+ return;
552
+ }
553
+ detachOverlay();
554
+ if (!skipEvent) {
555
+ emit("openChange", false);
556
+ if (props.name) runValidate("change");
557
+ }
558
+ }, { immediate: true });
559
+ watch(resolvedDisabled, (disabled) => {
560
+ if (disabled && open.value) open.value = false;
561
+ });
562
+ onBeforeUnmount(detachOverlay);
249
563
  return (_ctx, _cache) => {
250
564
  const _component_RsTimePicker = resolveComponent("RsTimePicker", true);
251
- return openBlock(), createElementBlock("div", { class: normalizeClass([
252
- __props.embedded ? "rs-time-picker-embedded" : "rs-field",
253
- `rs-time-picker--${unref(resolvedSize)}`,
254
- !__props.embedded && `rs-field--label-${__props.labelPosition}`
255
- ]) }, [
256
- !__props.embedded && __props.label ? (openBlock(), createElementBlock("span", _hoisted_1, [__props.labelPosition === "left" ? (openBlock(), createElementBlock("label", {
565
+ return openBlock(), createElementBlock("div", {
566
+ ref_key: "rootRef",
567
+ ref: rootRef,
568
+ class: normalizeClass([
569
+ __props.embedded ? "rs-time-picker-embedded" : "rs-field",
570
+ `rs-time-picker--${unref(resolvedSize)}`,
571
+ !__props.embedded && `rs-field--label-${__props.labelPosition}`,
572
+ { "rs-time-picker-wrap--clearable": showClear.value }
573
+ ]),
574
+ style: normalizeStyle(rootStyle.value)
575
+ }, [
576
+ !__props.embedded && __props.label ? (openBlock(), createElementBlock("label", {
577
+ key: 0,
578
+ class: "rs-field__label",
579
+ for: triggerId.value
580
+ }, [createTextVNode(toDisplayString(__props.label) + " ", 1), __props.required ? (openBlock(), createElementBlock("span", _hoisted_2, "*")) : createCommentVNode("", true)], 8, _hoisted_1)) : createCommentVNode("", true),
581
+ createElementVNode("div", _hoisted_3, [createElementVNode("button", mergeProps(__props.embedded ? void 0 : unref(attrs), {
582
+ id: __props.embedded ? void 0 : triggerId.value,
583
+ ref_key: "triggerRef",
584
+ ref: triggerRef,
585
+ type: "button",
586
+ class: ["rs-time-picker__trigger", {
587
+ "rs-time-picker__trigger--placeholder": isEmpty.value,
588
+ "rs-time-picker__trigger--embedded": __props.embedded,
589
+ "rs-time-picker__trigger--invalid": !__props.embedded && isInvalid.value
590
+ }],
591
+ disabled: resolvedDisabled.value,
592
+ "aria-invalid": !__props.embedded && isInvalid.value ? true : void 0,
593
+ "aria-label": __props.ariaLabel,
594
+ "aria-haspopup": "dialog",
595
+ "aria-expanded": open.value ? "true" : "false",
596
+ "aria-controls": open.value ? unref(panelId) : void 0,
597
+ "aria-readonly": __props.readonly || void 0,
598
+ onClick: toggleOpen,
599
+ onKeydown: onTriggerKeydown,
600
+ onFocus: _cache[0] || (_cache[0] = ($event) => emit("focus")),
601
+ onBlur: _cache[1] || (_cache[1] = ($event) => emit("blur"))
602
+ }), [createElementVNode("span", _hoisted_5, [!__props.embedded ? (openBlock(), createBlock(RsIcon_default, {
603
+ key: 0,
604
+ name: "clock",
605
+ size: triggerIconSize.value,
606
+ class: "rs-time-picker__icon",
607
+ "aria-hidden": "true"
608
+ }, null, 8, ["size"])) : createCommentVNode("", true), createElementVNode("span", _hoisted_6, toDisplayString(displayValue.value), 1)]), createVNode(RsIcon_default, {
609
+ name: "chevron-down",
610
+ size: triggerIconSize.value,
611
+ class: "rs-time-picker__chevron",
612
+ "aria-hidden": "true"
613
+ }, null, 8, ["size"])], 16, _hoisted_4), showClear.value ? (openBlock(), createBlock(RsButton_default, {
614
+ key: 0,
615
+ class: "rs-time-picker__clear",
616
+ variant: "text",
617
+ bordered: false,
618
+ size: "ssm",
619
+ radius: "full",
620
+ icon: "x",
621
+ "icon-size": clearIconSize.value,
622
+ "icon-only": "",
623
+ "aria-label": __props.range ? unref(t)("timePicker.rangeClear") : unref(t)("timePicker.clear"),
624
+ onPointerdown: _cache[2] || (_cache[2] = withModifiers(() => {}, ["stop"])),
625
+ onClick: withModifiers(clearSelection, ["stop"])
626
+ }, null, 8, ["icon-size", "aria-label"])) : createCommentVNode("", true)]),
627
+ (openBlock(), createBlock(Teleport, { to: portalTarget.value }, [open.value && canInteract.value ? (openBlock(), createElementBlock("div", {
257
628
  key: 0,
258
- for: unref(fieldId)
259
- }, toDisplayString(__props.label), 9, _hoisted_2)) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [createTextVNode(toDisplayString(__props.label), 1)], 64)), __props.required ? (openBlock(), createElementBlock("span", _hoisted_3, "*")) : createCommentVNode("", true)])) : createCommentVNode("", true),
260
- createElementVNode("div", _hoisted_4, [createVNode(unref(PopoverRoot), {
261
- open: open.value,
262
- "onUpdate:open": _cache[3] || (_cache[3] = ($event) => open.value = $event),
263
- modal: !__props.embedded
264
- }, {
265
- default: withCtx(() => [createVNode(unref(PopoverTrigger), mergeProps(__props.embedded ? void 0 : unref(attrs), {
266
- id: __props.embedded ? void 0 : triggerId.value,
629
+ id: unref(panelId),
630
+ ref_key: "contentRef",
631
+ ref: contentRef,
632
+ class: normalizeClass(["rs-time-picker__content", {
633
+ "rs-time-picker__content--range": __props.range && !__props.embedded,
634
+ "rs-time-picker__content--embedded": __props.embedded
635
+ }]),
636
+ "data-placement": popup.value.placement,
637
+ "data-rs-theme": panelTheme.value,
638
+ style: normalizeStyle(panelStyle.value),
639
+ role: "dialog",
640
+ "aria-label": __props.label || __props.ariaLabel || (__props.range ? unref(t)("timePicker.rangePlaceholder") : unref(t)("timePicker.placeholder"))
641
+ }, [createElementVNode("div", _hoisted_8, [__props.range ? (openBlock(), createElementBlock("div", _hoisted_9, [createElementVNode("section", _hoisted_10, [createElementVNode("span", _hoisted_11, toDisplayString(unref(t)("timePicker.rangeStart")), 1), createVNode(_component_RsTimePicker, {
642
+ modelValue: draftStartTime.value,
643
+ "onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => draftStartTime.value = $event),
644
+ embedded: "",
645
+ size: unref(resolvedSize),
646
+ radius: unref(resolvedRadius),
647
+ "with-seconds": __props.withSeconds,
648
+ "hour-cycle": __props.hourCycle,
649
+ "minute-step": __props.minuteStep,
650
+ "min-time": __props.minTime,
651
+ "max-time": startMaxTime.value,
652
+ disabled: resolvedDisabled.value,
653
+ "disabled-time": __props.disabledTime
654
+ }, null, 8, [
655
+ "modelValue",
656
+ "size",
657
+ "radius",
658
+ "with-seconds",
659
+ "hour-cycle",
660
+ "minute-step",
661
+ "min-time",
662
+ "max-time",
663
+ "disabled",
664
+ "disabled-time"
665
+ ])]), createElementVNode("section", _hoisted_12, [createElementVNode("span", _hoisted_13, toDisplayString(unref(t)("timePicker.rangeEnd")), 1), createVNode(_component_RsTimePicker, {
666
+ modelValue: draftEndTime.value,
667
+ "onUpdate:modelValue": _cache[4] || (_cache[4] = ($event) => draftEndTime.value = $event),
668
+ embedded: "",
669
+ size: unref(resolvedSize),
670
+ radius: unref(resolvedRadius),
671
+ "with-seconds": __props.withSeconds,
672
+ "hour-cycle": __props.hourCycle,
673
+ "minute-step": __props.minuteStep,
674
+ "min-time": endMinTime.value,
675
+ "max-time": __props.maxTime,
676
+ disabled: resolvedDisabled.value,
677
+ "disabled-time": __props.disabledTime
678
+ }, null, 8, [
679
+ "modelValue",
680
+ "size",
681
+ "radius",
682
+ "with-seconds",
683
+ "hour-cycle",
684
+ "minute-step",
685
+ "min-time",
686
+ "max-time",
687
+ "disabled",
688
+ "disabled-time"
689
+ ])])])) : (openBlock(), createBlock(RsTimePickerColumns_default, {
690
+ key: 1,
691
+ ref_key: "columnsRef",
692
+ ref: columnsRef,
693
+ modelValue: draftTime.value,
694
+ "onUpdate:modelValue": _cache[5] || (_cache[5] = ($event) => draftTime.value = $event),
695
+ second: __props.withSeconds,
696
+ size: unref(resolvedSize),
697
+ disabled: resolvedDisabled.value,
698
+ "hour-cycle": __props.hourCycle,
699
+ "minute-step": __props.minuteStep,
700
+ "is-unit-disabled": isUnitDisabled
701
+ }, null, 8, [
702
+ "modelValue",
703
+ "second",
704
+ "size",
705
+ "disabled",
706
+ "hour-cycle",
707
+ "minute-step"
708
+ ])), createElementVNode("footer", _hoisted_14, [createElementVNode("div", _hoisted_15, [__props.shortcuts?.length ? (openBlock(), createElementBlock("div", _hoisted_16, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.shortcuts, (item, index) => {
709
+ return openBlock(), createElementBlock("button", {
710
+ key: `${item.label}-${index}`,
267
711
  type: "button",
268
- class: ["rs-time-picker__trigger", {
269
- "rs-time-picker__trigger--placeholder": isEmpty.value,
270
- "rs-time-picker__trigger--embedded": __props.embedded,
271
- "rs-time-picker__trigger--invalid": !__props.embedded && isInvalid.value
272
- }],
273
- disabled: __props.disabled,
274
- "aria-invalid": !__props.embedded && isInvalid.value ? true : void 0
275
- }), {
276
- default: withCtx(() => [createElementVNode("span", _hoisted_5, [!__props.embedded ? (openBlock(), createBlock(RsIcon_default, {
277
- key: 0,
278
- name: "clock",
279
- size: triggerIconSize.value,
280
- class: "rs-time-picker__icon"
281
- }, null, 8, ["size"])) : createCommentVNode("", true), createElementVNode("span", _hoisted_6, toDisplayString(displayValue.value), 1)]), createVNode(RsIcon_default, {
282
- name: "chevron-down",
283
- size: triggerIconSize.value,
284
- class: "rs-time-picker__chevron"
285
- }, null, 8, ["size"])]),
286
- _: 1
287
- }, 16, [
288
- "id",
289
- "class",
290
- "disabled",
291
- "aria-invalid"
292
- ]), createVNode(unref(PopoverPortal), null, {
293
- default: withCtx(() => [createVNode(unref(PopoverContent), {
294
- class: normalizeClass(["rs-time-picker__content", {
295
- "rs-time-picker__content--range": __props.range && !__props.embedded,
296
- "rs-time-picker__content--embedded": __props.embedded
297
- }]),
298
- "side-offset": 6,
299
- align: "start"
300
- }, {
301
- default: withCtx(() => [open.value ? (openBlock(), createElementBlock("div", _hoisted_7, [__props.range ? (openBlock(), createElementBlock("div", _hoisted_8, [createElementVNode("section", _hoisted_9, [createElementVNode("span", _hoisted_10, toDisplayString(unref(t)("timePicker.rangeStart")), 1), createVNode(_component_RsTimePicker, {
302
- modelValue: draftStartTime.value,
303
- "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => draftStartTime.value = $event),
304
- embedded: "",
305
- size: unref(resolvedSize),
306
- "with-seconds": __props.withSeconds,
307
- "min-time": __props.minTime,
308
- "max-time": startMaxTime.value,
309
- disabled: __props.disabled
310
- }, null, 8, [
311
- "modelValue",
312
- "size",
313
- "with-seconds",
314
- "min-time",
315
- "max-time",
316
- "disabled"
317
- ])]), createElementVNode("section", _hoisted_11, [createElementVNode("span", _hoisted_12, toDisplayString(unref(t)("timePicker.rangeEnd")), 1), createVNode(_component_RsTimePicker, {
318
- modelValue: draftEndTime.value,
319
- "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => draftEndTime.value = $event),
320
- embedded: "",
321
- size: unref(resolvedSize),
322
- "with-seconds": __props.withSeconds,
323
- "min-time": endMinTime.value,
324
- "max-time": __props.maxTime,
325
- disabled: __props.disabled
326
- }, null, 8, [
327
- "modelValue",
328
- "size",
329
- "with-seconds",
330
- "min-time",
331
- "max-time",
332
- "disabled"
333
- ])])])) : (openBlock(), createBlock(RsTimePickerColumns_default, {
334
- key: 1,
335
- ref_key: "columnsRef",
336
- ref: columnsRef,
337
- modelValue: draftTime.value,
338
- "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => draftTime.value = $event),
339
- second: __props.withSeconds,
340
- size: unref(resolvedSize),
341
- disabled: __props.disabled,
342
- "is-unit-disabled": isUnitDisabled
343
- }, null, 8, [
344
- "modelValue",
345
- "second",
346
- "size",
347
- "disabled"
348
- ])), createElementVNode("footer", _hoisted_13, [createElementVNode("button", {
349
- type: "button",
350
- class: "rs-time-picker__link",
351
- onClick: selectPreset
352
- }, toDisplayString(__props.range ? unref(t)("timePicker.rangePreset") : unref(t)("timePicker.now")), 1), createElementVNode("div", _hoisted_14, [createElementVNode("button", {
353
- type: "button",
354
- class: "rs-time-picker__ghost",
355
- onClick: clearSelection
356
- }, toDisplayString(__props.range ? unref(t)("timePicker.rangeClear") : unref(t)("timePicker.clear")), 1), createElementVNode("button", {
357
- type: "button",
358
- class: "rs-time-picker__confirm",
359
- disabled: __props.range && (!draftStartTime.value || !draftEndTime.value),
360
- onClick: confirmSelection
361
- }, toDisplayString(unref(t)("timePicker.confirm")), 9, _hoisted_15)])])])) : createCommentVNode("", true)]),
362
- _: 1
363
- }, 8, ["class"])]),
364
- _: 1
365
- })]),
366
- _: 1
367
- }, 8, ["open", "modal"])]),
368
- !__props.embedded && __props.hint ? (openBlock(), createElementBlock("span", _hoisted_16, toDisplayString(__props.hint), 1)) : createCommentVNode("", true)
369
- ], 2);
712
+ class: "rs-time-picker__shortcut",
713
+ disabled: resolvedDisabled.value,
714
+ onClick: ($event) => applyShortcut(item)
715
+ }, toDisplayString(item.label), 9, _hoisted_17);
716
+ }), 128))])) : (openBlock(), createElementBlock("button", {
717
+ key: 1,
718
+ type: "button",
719
+ class: "rs-time-picker__link",
720
+ onClick: selectPreset
721
+ }, toDisplayString(__props.range ? unref(t)("timePicker.rangePreset") : unref(t)("timePicker.now")), 1))]), createElementVNode("div", _hoisted_18, [createElementVNode("button", {
722
+ type: "button",
723
+ class: "rs-time-picker__ghost",
724
+ onClick: clearSelection
725
+ }, toDisplayString(__props.range ? unref(t)("timePicker.rangeClear") : unref(t)("timePicker.clear")), 1), createElementVNode("button", {
726
+ type: "button",
727
+ class: "rs-time-picker__confirm",
728
+ disabled: __props.range && (!draftStartTime.value || !draftEndTime.value),
729
+ onClick: confirmSelection
730
+ }, toDisplayString(unref(t)("timePicker.confirm")), 9, _hoisted_19)])])])], 14, _hoisted_7)) : createCommentVNode("", true)], 8, ["to"])),
731
+ visibleMessage.value ? (openBlock(), createElementBlock("p", _hoisted_20, toDisplayString(visibleMessage.value), 1)) : createCommentVNode("", true),
732
+ !__props.embedded && __props.hint ? (openBlock(), createElementBlock("span", _hoisted_21, toDisplayString(__props.hint), 1)) : createCommentVNode("", true)
733
+ ], 6);
370
734
  };
371
735
  }
372
736
  });