x-next 1.1.0 → 1.2.0

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 (188) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/dist/_hooks/use-form-item.d.ts +5 -0
  3. package/dist/_hooks/use-picker-focus.d.ts +17 -0
  4. package/dist/components/_components/feedback-icon/index.vue.d.ts +4 -4
  5. package/dist/components/_components/picker/input-range.vue.d.ts +10 -6
  6. package/dist/components/_components/picker/input.vue.d.ts +9 -5
  7. package/dist/components/alert/Alert.vue.d.ts +5 -5
  8. package/dist/components/alert/index.d.ts +10 -10
  9. package/dist/components/date-picker/DatePanel.vue.d.ts +5 -0
  10. package/dist/components/date-picker/DatePicker.vue.d.ts +36 -16
  11. package/dist/components/date-picker/index.d.ts +77 -33
  12. package/dist/components/dialog/Dialog.d.ts +1 -1
  13. package/dist/components/dialog/index.d.ts +3 -3
  14. package/dist/components/drawer/index.d.ts +3 -3
  15. package/dist/components/drawer/src/Drawer.vue.d.ts +1 -1
  16. package/dist/components/dropdown/Dropdown.vue.d.ts +3 -3
  17. package/dist/components/dropdown/DropdownButton.vue.d.ts +4 -4
  18. package/dist/components/dropdown/DropdownSubmenu.vue.d.ts +4 -4
  19. package/dist/components/dropdown/index.d.ts +22 -22
  20. package/dist/components/form/FormItem.vue.d.ts +12 -4
  21. package/dist/components/form/context.d.ts +6 -0
  22. package/dist/components/form/form-item-label.vue.d.ts +4 -4
  23. package/dist/components/form/form-item-message.vue.d.ts +2 -0
  24. package/dist/components/form/index.d.ts +30 -8
  25. package/dist/components/form/interface.d.ts +2 -2
  26. package/dist/components/form-input/InputPassword.vue.d.ts +20 -2
  27. package/dist/components/form-input/index.d.ts +22 -4
  28. package/dist/components/form-select/Select.d.ts +3 -3
  29. package/dist/components/form-select/index.d.ts +6 -6
  30. package/dist/components/form-slider/Slider.vue.d.ts +10 -3
  31. package/dist/components/form-slider/index.d.ts +26 -6
  32. package/dist/components/form-slider/slider-button.vue.d.ts +4 -3
  33. package/dist/components/form-switch/Switch.vue.d.ts +2 -1
  34. package/dist/components/form-switch/index.d.ts +5 -2
  35. package/dist/components/form-textarea/Textarea.vue.d.ts +2 -2
  36. package/dist/components/form-textarea/index.d.ts +5 -5
  37. package/dist/components/image/Image.vue.d.ts +10 -9
  38. package/dist/components/image/ImagePreview.vue.d.ts +8 -7
  39. package/dist/components/image/ImagePreviewAction.d.ts +3 -3
  40. package/dist/components/image/ImagePreviewGroup.vue.d.ts +8 -7
  41. package/dist/components/image/index.d.ts +59 -52
  42. package/dist/components/image/preview-arrow.vue.d.ts +2 -2
  43. package/dist/components/image/preview-toolbar.vue.d.ts +3 -3
  44. package/dist/components/layout/LayoutSidebar.vue.d.ts +2 -2
  45. package/dist/components/layout/index.d.ts +4 -4
  46. package/dist/components/link/Link.vue.d.ts +2 -2
  47. package/dist/components/link/index.d.ts +4 -4
  48. package/dist/components/menu/Menu.d.ts +2 -2
  49. package/dist/components/menu/base-menu.vue.d.ts +2 -2
  50. package/dist/components/menu/index.d.ts +4 -4
  51. package/dist/components/menu/sub-menu-pop.vue.d.ts +5 -5
  52. package/dist/components/message/index.d.ts +17 -17
  53. package/dist/components/message/message.vue.d.ts +8 -8
  54. package/dist/components/notification/Notification.d.ts +1 -1
  55. package/dist/components/notification/index.d.ts +3 -3
  56. package/dist/components/pagination/page-item-ellipsis.vue.d.ts +1 -1
  57. package/dist/components/pagination/page-item-step.vue.d.ts +2 -2
  58. package/dist/components/pagination/page-options.vue.d.ts +6 -6
  59. package/dist/components/popconfirm/src/popup.vue.d.ts +1 -1
  60. package/dist/components/popover/Popover.d.ts +1 -1
  61. package/dist/components/popover/index.d.ts +3 -3
  62. package/dist/components/popup/Popup.d.ts +1 -1
  63. package/dist/components/popup/index.d.ts +3 -3
  64. package/dist/components/progress/Progress.vue.d.ts +4 -4
  65. package/dist/components/progress/circle.vue.d.ts +2 -2
  66. package/dist/components/progress/index.d.ts +8 -8
  67. package/dist/components/progress/line.vue.d.ts +1 -1
  68. package/dist/components/progress/steps.vue.d.ts +1 -1
  69. package/dist/components/steps/Step.vue.d.ts +2 -2
  70. package/dist/components/steps/index.d.ts +4 -4
  71. package/dist/components/tabs/Tabs.d.ts +1 -1
  72. package/dist/components/tabs/index.d.ts +3 -3
  73. package/dist/components/tabs/tabs-tab.vue.d.ts +1 -1
  74. package/dist/components/tag/Tag.vue.d.ts +2 -2
  75. package/dist/components/tag/index.d.ts +4 -4
  76. package/dist/components/time-picker/TimeColumn.vue.d.ts +3 -0
  77. package/dist/components/time-picker/TimePanel.vue.d.ts +3 -0
  78. package/dist/components/time-picker/TimePicker.vue.d.ts +33 -17
  79. package/dist/components/time-picker/index.d.ts +73 -36
  80. package/dist/components/time-range-selector/TimeRangeSelector.vue.d.ts +8 -0
  81. package/dist/components/time-range-selector/index.d.ts +22 -0
  82. package/dist/components/tooltip/Tooltip.vue.d.ts +1 -1
  83. package/dist/components/tooltip/index.d.ts +3 -3
  84. package/dist/components/trigger/Trigger.d.ts +1 -1
  85. package/dist/components/trigger/index.d.ts +3 -3
  86. package/dist/es/_hooks/use-form-item.js +36 -10
  87. package/dist/es/_hooks/use-picker-focus.js +57 -0
  88. package/dist/es/_utils/constant.js +17 -5
  89. package/dist/es/components/_components/picker/input-range.vue.js +45 -55
  90. package/dist/es/components/_components/picker/input-range.vue2.js +105 -70
  91. package/dist/es/components/_components/picker/input.vue.js +22 -25
  92. package/dist/es/components/_components/picker/input.vue2.js +58 -43
  93. package/dist/es/components/_components/select-view/select-view.js +67 -66
  94. package/dist/es/components/date-picker/DatePanel.vue.js +102 -94
  95. package/dist/es/components/date-picker/DatePanel.vue2.js +97 -44
  96. package/dist/es/components/date-picker/DatePicker.vue.js +71 -58
  97. package/dist/es/components/date-picker/DatePicker.vue2.js +285 -231
  98. package/dist/es/components/dialog/Dialog.js +154 -132
  99. package/dist/es/components/form/Form.vue2.js +113 -101
  100. package/dist/es/components/form/FormItem.vue.js +26 -22
  101. package/dist/es/components/form/FormItem.vue2.js +162 -125
  102. package/dist/es/components/form/form-item-message.vue.js +31 -24
  103. package/dist/es/components/form/form-item-message.vue2.js +4 -2
  104. package/dist/es/components/form-checkbox/Checkbox.js +75 -71
  105. package/dist/es/components/form-checkbox/CheckboxGroup.js +43 -38
  106. package/dist/es/components/form-input/Input.js +83 -79
  107. package/dist/es/components/form-input/InputPassword.vue.js +19 -16
  108. package/dist/es/components/form-input/InputPassword.vue2.js +39 -29
  109. package/dist/es/components/form-input/InputSearch.js +47 -37
  110. package/dist/es/components/form-input-number/InputNumber.js +134 -133
  111. package/dist/es/components/form-input-tag/InputTag.js +173 -162
  112. package/dist/es/components/form-radio/Radio.js +74 -71
  113. package/dist/es/components/form-radio/RadioGroup.js +55 -49
  114. package/dist/es/components/form-select/Select.js +99 -98
  115. package/dist/es/components/form-slider/Slider.vue.js +28 -28
  116. package/dist/es/components/form-slider/Slider.vue2.js +139 -132
  117. package/dist/es/components/form-slider/slider-button.vue.js +6 -6
  118. package/dist/es/components/form-slider/slider-button.vue2.js +39 -34
  119. package/dist/es/components/form-switch/Switch.vue.js +9 -9
  120. package/dist/es/components/form-switch/Switch.vue2.js +81 -74
  121. package/dist/es/components/form-textarea/Textarea.vue2.js +123 -108
  122. package/dist/es/components/image/Image.vue2.js +77 -76
  123. package/dist/es/components/image/ImagePreview.vue.js +13 -12
  124. package/dist/es/components/image/ImagePreview.vue2.js +141 -136
  125. package/dist/es/components/image/ImagePreviewGroup.vue.js +1 -1
  126. package/dist/es/components/image/ImagePreviewGroup.vue2.js +82 -83
  127. package/dist/es/components/rate/Rate.js +106 -103
  128. package/dist/es/components/time-picker/TimeColumn.vue.js +34 -23
  129. package/dist/es/components/time-picker/TimeColumn.vue2.js +37 -28
  130. package/dist/es/components/time-picker/TimePicker.vue.js +83 -64
  131. package/dist/es/components/time-picker/TimePicker.vue2.js +192 -156
  132. package/dist/es/components/time-range-selector/TimeRangeSelector.vue.js +327 -193
  133. package/dist/es/locale/en-US.js +6 -0
  134. package/dist/es/locale/zh-CN.js +6 -0
  135. package/dist/es/style.css +1 -1
  136. package/dist/icons/_self/down.d.ts +1 -1
  137. package/dist/icons/_self/dropdown/more.d.ts +1 -1
  138. package/dist/icons/_self/empty-better.d.ts +1 -1
  139. package/dist/icons/_self/empty.d.ts +1 -1
  140. package/dist/icons/_self/eye-invisible.d.ts +1 -1
  141. package/dist/icons/_self/eye.d.ts +1 -1
  142. package/dist/icons/_self/full-screen.d.ts +1 -1
  143. package/dist/icons/_self/left.d.ts +1 -1
  144. package/dist/icons/_self/menu/down.d.ts +1 -1
  145. package/dist/icons/_self/minus.d.ts +1 -1
  146. package/dist/icons/_self/more-dot.d.ts +1 -1
  147. package/dist/icons/_self/next.d.ts +1 -1
  148. package/dist/icons/_self/original-size.d.ts +1 -1
  149. package/dist/icons/_self/plus.d.ts +1 -1
  150. package/dist/icons/_self/prev.d.ts +1 -1
  151. package/dist/icons/_self/question-message.d.ts +1 -1
  152. package/dist/icons/_self/right.d.ts +1 -1
  153. package/dist/icons/_self/rotate-left.d.ts +1 -1
  154. package/dist/icons/_self/rotate-right.d.ts +1 -1
  155. package/dist/icons/_self/search.d.ts +1 -1
  156. package/dist/icons/_self/up.d.ts +1 -1
  157. package/dist/icons/_self/zoom-in.d.ts +1 -1
  158. package/dist/icons/_self/zoom-out.d.ts +1 -1
  159. package/dist/icons/_ui/alone-left.d.ts +1 -1
  160. package/dist/icons/_ui/alone-margin-left.d.ts +1 -1
  161. package/dist/icons/_ui/alone-margin-right.d.ts +1 -1
  162. package/dist/icons/_ui/alone-right.d.ts +1 -1
  163. package/dist/icons/_ui/calendar.d.ts +1 -1
  164. package/dist/icons/_ui/time.d.ts +1 -1
  165. package/dist/icons/animation/animation-loading.d.ts +1 -1
  166. package/dist/icons/default/check-circle-fill.d.ts +1 -1
  167. package/dist/icons/default/check.d.ts +1 -1
  168. package/dist/icons/default/close-circle-fill.d.ts +1 -1
  169. package/dist/icons/default/close.d.ts +1 -1
  170. package/dist/icons/default/exclamation-circle-fill.d.ts +1 -1
  171. package/dist/icons/default/exclamation.d.ts +1 -1
  172. package/dist/icons/default/filter.d.ts +1 -1
  173. package/dist/icons/default/info-circle-fill.d.ts +1 -1
  174. package/dist/icons/default/link.d.ts +1 -1
  175. package/dist/icons/default/logo-simple.d.ts +1 -1
  176. package/dist/icons/default/minus-circle-fill.d.ts +1 -1
  177. package/dist/icons/icon.d.ts +2 -2
  178. package/dist/icons/index.d.ts +3 -3
  179. package/dist/index.cjs +4 -4
  180. package/dist/index.umd.js +4 -4
  181. package/dist/locale/interface.d.ts +6 -0
  182. package/dist/style/base.css +1 -1
  183. package/dist/style/date-picker.css +1 -1
  184. package/dist/style/form.css +1 -1
  185. package/dist/style/image.css +1 -1
  186. package/dist/style/time-range-selector.css +1 -1
  187. package/dist/style.css +1 -1
  188. package/package.json +2 -2
@@ -1,6 +1,9 @@
1
- import { defineComponent as xe, ref as z, reactive as be, computed as h, watch as ne, onBeforeUnmount as ke, openBlock as m, createElementBlock as p, normalizeStyle as F, normalizeClass as f, unref as u, createElementVNode as y, Fragment as E, renderList as I, withModifiers as B, toDisplayString as X, createCommentVNode as ze } from "vue";
2
- import { getClassNameMixin as Ee } from "../../_utils/config.js";
3
- const Ie = ["onDblclick", "onMousedown"], Be = ["onMousedown"], De = ["onMousedown"], _e = /* @__PURE__ */ xe({
1
+ import { defineComponent as Ge, ref as A, useAttrs as He, computed as R, toRef as Pe, useId as Ue, reactive as We, watch as _, onBeforeUnmount as qe, openBlock as h, createElementBlock as b, mergeProps as Re, unref as s, createElementVNode as k, withKeys as Qe, withModifiers as D, normalizeClass as g, toDisplayString as N, normalizeStyle as ae, createCommentVNode as Se, Fragment as K, renderList as T, nextTick as J } from "vue";
2
+ import { getClassNameMixin as Ye } from "../../_utils/config.js";
3
+ import { useFormItem as Ze, useFormItemControl as et } from "../../_hooks/use-form-item.js";
4
+ import { useLocale as tt } from "../../locale/index.js";
5
+ const nt = ["tabindex", "aria-disabled", "aria-describedby", "onKeydown"], at = ["data-range-id", "tabindex", "aria-label", "title", "onDblclick", "onMousedown", "onKeydown"], st = ["onMousedown"], ot = ["onMousedown"], ut = /* @__PURE__ */ Ge({
6
+ inheritAttrs: !1,
4
7
  __name: "TimeRangeSelector",
5
8
  props: {
6
9
  modelValue: {},
@@ -10,11 +13,32 @@ const Ie = ["onDblclick", "onMousedown"], Be = ["onMousedown"], De = ["onMousedo
10
13
  stepMinutes: { default: 30 },
11
14
  disabledRanges: { default: () => [] },
12
15
  maxRanges: { default: 1 / 0 },
13
- showCursor: { type: Boolean, default: !0 }
16
+ showCursor: { type: Boolean, default: !0 },
17
+ disabled: { type: Boolean, default: !1 },
18
+ readonly: { type: Boolean, default: !1 }
14
19
  },
15
- emits: ["update:modelValue"],
16
- setup(T, { emit: se }) {
17
- const l = Ee("time-range-selector"), i = T, ae = se, J = z(null), o = z([]), D = z(/* @__PURE__ */ new Set()), G = z([]), a = be({
20
+ emits: ["update:modelValue", "change", "remove"],
21
+ setup(se, { emit: xe }) {
22
+ const d = Ye("time-range-selector"), u = se, j = xe, S = A(null), { t: I } = tt(), $ = He(), ke = R(
23
+ () => Object.fromEntries(
24
+ Object.entries($).filter(
25
+ ([e]) => e !== "id" && !e.startsWith("aria-") && e !== "class" && e !== "style"
26
+ )
27
+ )
28
+ ), { formItemCtx: oe, mergedDisabled: B, mergedError: Ee, eventHandlers: X } = Ze({
29
+ disabled: Pe(u, "disabled")
30
+ }), re = et(
31
+ oe,
32
+ () => ({
33
+ ...Object.fromEntries(
34
+ Object.entries($).filter(([e]) => e === "id" || e.startsWith("aria-"))
35
+ ),
36
+ "aria-label": $["aria-label"] ?? (oe.labelId ? void 0 : I("timeRangeSelector.label"))
37
+ }),
38
+ { labelable: !1 }
39
+ ), le = R(() => u.readonly), x = R(() => !B.value && !le.value), G = `x-time-range-selector-${Ue()}-instructions`, w = A(0), l = A([]);
40
+ let H = JSON.stringify(u.modelValue), ie = 0;
41
+ const P = A(/* @__PURE__ */ new Set()), de = A([]), o = We({
18
42
  active: !1,
19
43
  type: "",
20
44
  rangeId: 0,
@@ -22,275 +46,385 @@ const Ie = ["onDblclick", "onMousedown"], Be = ["onMousedown"], De = ["onMousedo
22
46
  startOffset: 0,
23
47
  initialRange: { id: 0, start: 0, end: 0 }
24
48
  });
25
- let U = 0, $ = !1;
26
- const oe = (e) => {
49
+ let U = 0, W = !1;
50
+ const De = (e) => {
27
51
  const n = Math.floor(Number(e));
28
52
  return !Number.isFinite(n) || n <= 0 || 1440 % n !== 0 ? 30 : n;
29
- }, d = (e, n, t) => Math.min(Math.max(e, n), t), g = h(() => oe(i.stepMinutes)), r = h(() => 1440 / g.value), re = h(
30
- () => Array.from({ length: r.value }, (e, n) => ({
53
+ }, m = (e, n, t) => Math.min(Math.max(e, n), t), M = R(() => De(u.stepMinutes)), i = R(() => 1440 / M.value), Ie = R(
54
+ () => Array.from({ length: i.value }, (e, n) => ({
31
55
  index: n,
32
- disabled: D.value.has(n),
33
- alternate: Math.floor(n * g.value / 60) % 2 === 1
56
+ disabled: P.value.has(n),
57
+ alternate: Math.floor(n * M.value / 60) % 2 === 1
34
58
  }))
35
- ), le = h(() => a.active), ie = h(() => l.modifier(`scene-${i.scene}`)), ue = h(
36
- () => i.color ? { "--x-time-range-selector-color": i.color } : {}
37
- ), de = (e) => {
59
+ ), $e = R(() => o.active), Be = R(() => d.modifier(`scene-${u.scene}`)), Oe = R(
60
+ () => u.color ? { "--x-time-range-selector-color": u.color } : {}
61
+ ), ze = (e) => {
38
62
  if (e === "24:00")
39
63
  return 1440;
40
64
  const n = /^(\d{1,2}):(\d{2})$/.exec(e);
41
65
  if (!n)
42
66
  return;
43
- const t = Number(n[1]), s = Number(n[2]);
44
- if (!(t < 0 || t > 23 || s < 0 || s > 59))
45
- return t * 60 + s;
46
- }, w = (e) => {
47
- const n = d(e, 0, r.value) * g.value;
67
+ const t = Number(n[1]), a = Number(n[2]);
68
+ if (!(t < 0 || t > 23 || a < 0 || a > 59))
69
+ return t * 60 + a;
70
+ }, v = (e) => {
71
+ const n = m(e, 0, i.value) * M.value;
48
72
  if (n >= 1440)
49
73
  return "24:00";
50
- const t = Math.floor(n / 60), s = n % 60;
51
- return `${t.toString().padStart(2, "0")}:${s.toString().padStart(2, "0")}`;
52
- }, R = (e) => {
53
- const n = de(e);
74
+ const t = Math.floor(n / 60), a = n % 60;
75
+ return `${t.toString().padStart(2, "0")}:${a.toString().padStart(2, "0")}`;
76
+ }, V = (e) => {
77
+ const n = ze(e);
54
78
  if (n !== void 0)
55
- return d(Math.round(n / g.value), 0, r.value);
56
- }, N = (e) => {
57
- const n = d(Math.min(e.start, e.end), 0, r.value), t = d(Math.max(e.start, e.end), 0, r.value);
79
+ return m(Math.round(n / M.value), 0, i.value);
80
+ }, q = (e) => {
81
+ const n = m(Math.min(e.start, e.end), 0, i.value), t = m(Math.max(e.start, e.end), 0, i.value);
58
82
  return { ...e, start: n, end: t };
59
- }, ce = () => {
60
- o.value.sort((e, n) => e.start - n.start || e.end - n.end);
61
- }, _ = (e) => e < 0 || e >= r.value || D.value.has(e), P = (e, n) => {
83
+ }, Ae = () => {
84
+ l.value.sort((e, n) => e.start - n.start || e.end - n.end);
85
+ }, Q = (e) => e < 0 || e >= i.value || P.value.has(e), ue = (e, n) => {
62
86
  for (let t = e; t < n; t += 1)
63
- if (_(t))
87
+ if (Q(t))
64
88
  return !0;
65
89
  return !1;
66
- }, j = (e, n) => i.overlapAllowed ? !1 : n.some(
90
+ }, ce = (e, n) => u.overlapAllowed ? !1 : n.some(
67
91
  (t) => t.id !== e.id && !(e.end <= t.start || e.start >= t.end)
68
- ), ve = (e) => j(e, o.value), M = (e) => e.start >= 0 && e.end <= r.value && e.end > e.start && !P(e.start, e.end) && !ve(e), q = (e) => o.value.find((n) => n.id === e), S = (e) => {
69
- var s;
70
- const n = (s = J.value) == null ? void 0 : s.getBoundingClientRect();
71
- return !n || n.width <= 0 ? 0 : d((e - n.left) / n.width, 0, 1) * r.value;
72
- }, fe = (e) => d(Math.floor(S(e)), 0, r.value - 1), C = (e) => d(Math.round(S(e)), 0, r.value), H = () => {
92
+ ), Ne = (e) => ce(e, l.value), E = (e) => e.start >= 0 && e.end <= i.value && e.end > e.start && !ue(e.start, e.end) && !Ne(e), fe = (e) => l.value.find((n) => n.id === e), C = (e) => {
93
+ var a;
94
+ const n = (a = S.value) == null ? void 0 : a.getBoundingClientRect();
95
+ return !n || n.width <= 0 ? 0 : m((e - n.left) / n.width, 0, 1) * i.value;
96
+ }, Ve = (e) => m(Math.floor(C(e)), 0, i.value - 1), Y = (e) => m(Math.round(C(e)), 0, i.value), me = () => {
73
97
  const e = /* @__PURE__ */ new Set(), n = [];
74
- i.disabledRanges.forEach(([t, s]) => {
75
- const v = R(t), c = R(s);
76
- if (v === void 0 || c === void 0)
98
+ u.disabledRanges.forEach(([t, a]) => {
99
+ const r = V(t), c = V(a);
100
+ if (r === void 0 || c === void 0)
77
101
  return;
78
- const b = d(Math.min(v, c), 0, r.value), k = d(Math.max(v, c), 0, r.value);
79
- if (!(k <= b)) {
80
- for (let A = b; A < k; A += 1)
81
- e.add(A);
102
+ const p = m(Math.min(r, c), 0, i.value), f = m(Math.max(r, c), 0, i.value);
103
+ if (!(f <= p)) {
104
+ for (let y = p; y < f; y += 1)
105
+ e.add(y);
82
106
  n.push({
83
- id: `${t}-${s}-${b}-${k}`,
84
- start: b,
85
- end: k
107
+ id: `${t}-${a}-${p}-${f}`,
108
+ start: p,
109
+ end: f
86
110
  });
87
111
  }
88
- }), D.value = e, G.value = n;
89
- }, me = () => {
90
- const e = [];
91
- if (i.modelValue.forEach(([n, t]) => {
92
- const s = R(n), v = R(t);
93
- if (s === void 0 || v === void 0)
112
+ }), P.value = e, de.value = n;
113
+ }, Ce = () => {
114
+ const e = [...l.value], n = [];
115
+ if (u.modelValue.forEach(([t, a]) => {
116
+ const r = V(t), c = V(a);
117
+ if (r === void 0 || c === void 0)
94
118
  return;
95
- const c = N({ id: U++, start: s, end: v });
96
- c.end > c.start && !P(c.start, c.end) && e.push(c);
97
- }), !i.overlapAllowed) {
98
- const n = [];
99
- e.sort((t, s) => t.start - s.start || t.end - s.end).forEach((t) => {
100
- j(t, n) || n.push(t);
101
- }), o.value = n;
119
+ const p = e.find((y) => y.start === r && y.end === c) ?? e[0], f = q({ id: (p == null ? void 0 : p.id) ?? U++, start: r, end: c });
120
+ p && e.splice(e.indexOf(p), 1), f.end > f.start && !ue(f.start, f.end) && n.push(f);
121
+ }), !u.overlapAllowed) {
122
+ const t = [];
123
+ n.sort((a, r) => a.start - r.start || a.end - r.end).forEach((a) => {
124
+ ce(a, t) || t.push(a);
125
+ }), l.value = t;
102
126
  return;
103
127
  }
104
- o.value = e.sort((n, t) => n.start - t.start || n.end - t.end);
105
- }, K = (e) => {
128
+ l.value = n.sort((t, a) => t.start - a.start || t.end - a.end);
129
+ }, ve = (e) => {
106
130
  let n = 0;
107
- i.overlapAllowed || o.value.forEach((t) => {
131
+ u.overlapAllowed || l.value.forEach((t) => {
108
132
  t.id !== e.id && t.end <= e.start && (n = Math.max(n, t.end));
109
133
  });
110
134
  for (let t = e.start - 1; t >= n; t -= 1)
111
- if (_(t))
135
+ if (Q(t))
112
136
  return t + 1;
113
137
  return n;
114
- }, Q = (e) => {
115
- let n = r.value;
116
- i.overlapAllowed || o.value.forEach((t) => {
138
+ }, pe = (e) => {
139
+ let n = i.value;
140
+ u.overlapAllowed || l.value.forEach((t) => {
117
141
  t.id !== e.id && t.start >= e.end && (n = Math.min(n, t.start));
118
142
  });
119
143
  for (let t = e.end; t < n; t += 1)
120
- if (_(t))
144
+ if (Q(t))
121
145
  return t;
122
146
  return n;
123
- }, pe = (e, n) => {
124
- const t = e.end - e.start, s = K(e), v = Q(e) - t, c = d(n, s, Math.max(s, v));
147
+ }, ye = (e, n) => {
148
+ const t = e.end - e.start, a = ve(e), r = pe(e) - t, c = m(n, a, Math.max(a, r));
125
149
  return { ...e, start: c, end: c + t };
126
- }, W = (e, n) => {
127
- const t = K(e), s = d(n, t, e.end - 1);
128
- return { ...e, start: s };
129
- }, Y = (e, n) => {
130
- const t = Q(e), s = d(n, e.start + 1, t);
131
- return { ...e, end: s };
150
+ }, Z = (e, n) => {
151
+ const t = ve(e), a = m(n, t, e.end - 1);
152
+ return { ...e, start: a };
153
+ }, ee = (e, n) => {
154
+ const t = pe(e), a = m(n, e.start + 1, t);
155
+ return { ...e, end: a };
132
156
  }, ge = (e) => {
133
- const n = q(e.id);
134
- !n || !M(e) || (n.start = e.start, n.end = e.end);
135
- }, he = () => {
136
- window.addEventListener("mousemove", ee), window.addEventListener("mouseup", te);
137
- }, Me = () => {
138
- window.removeEventListener("mousemove", ee), window.removeEventListener("mouseup", te);
139
- }, ye = (e, n, t) => {
140
- a.active = !0, a.type = e, a.rangeId = n.id, a.initialRange = { ...n }, a.startMouseIndex = S(t), a.startOffset = a.startMouseIndex - n.start, document.body.style.cursor = e === "move" ? "grabbing" : "ew-resize", he();
141
- }, Z = () => {
142
- Me(), a.active = !1, a.type = "", a.rangeId = 0, a.startMouseIndex = 0, a.startOffset = 0, a.initialRange = { id: 0, start: 0, end: 0 }, document.body.style.cursor = "";
143
- }, we = (e) => {
144
- if (o.value.length >= i.maxRanges)
157
+ const n = fe(e.id);
158
+ !n || !E(e) || (n.start = e.start, n.end = e.end);
159
+ }, Fe = () => {
160
+ window.addEventListener("mousemove", he), window.addEventListener("mouseup", be);
161
+ }, Le = () => {
162
+ window.removeEventListener("mousemove", he), window.removeEventListener("mouseup", be);
163
+ }, _e = (e, n, t) => {
164
+ o.active = !0, o.type = e, o.rangeId = n.id, o.initialRange = { ...n }, o.startMouseIndex = C(t), o.startOffset = o.startMouseIndex - n.start, document.body.style.cursor = e === "move" ? "grabbing" : "ew-resize", Fe();
165
+ }, F = () => {
166
+ o.active && (Le(), o.active = !1, o.type = "", o.rangeId = 0, o.startMouseIndex = 0, o.startOffset = 0, o.initialRange = { id: 0, start: 0, end: 0 }, document.body.style.cursor = "");
167
+ }, Ke = (e) => {
168
+ if (l.value.length >= u.maxRanges)
145
169
  return;
146
- const n = fe(e), t = { id: U++, start: n, end: Math.min(n + 1, r.value) };
147
- if (M(t))
148
- return o.value.push(t), t;
149
- }, x = (e, n, t) => {
150
- if (e.button !== 0)
170
+ const n = Ve(e), t = { id: U++, start: n, end: Math.min(n + 1, i.value) };
171
+ if (E(t))
172
+ return l.value.push(t), t;
173
+ }, L = (e, n, t) => {
174
+ if (e.button !== 0 || !x.value)
151
175
  return;
152
176
  e.preventDefault();
153
- const s = n ?? we(e.clientX);
154
- if (!s)
177
+ const a = n ?? Ke(e.clientX);
178
+ if (!a)
155
179
  return;
156
- ye(t ? t === "start" ? "resize-start" : "resize-end" : n ? "move" : "new", s, e.clientX);
180
+ _e(t ? t === "start" ? "resize-start" : "resize-end" : n ? "move" : "new", a, e.clientX);
157
181
  };
158
- function ee(e) {
159
- if (!a.active || (e.preventDefault(), !q(a.rangeId)))
182
+ function he(e) {
183
+ if (!o.active || (e.preventDefault(), !fe(o.rangeId)))
160
184
  return;
161
- let t = { ...a.initialRange };
162
- if (a.type === "move")
163
- t = pe(
164
- a.initialRange,
165
- Math.round(S(e.clientX) - a.startOffset)
185
+ let t = { ...o.initialRange };
186
+ if (o.type === "move")
187
+ t = ye(
188
+ o.initialRange,
189
+ Math.round(C(e.clientX) - o.startOffset)
166
190
  );
167
- else if (a.type === "resize-start")
168
- t = W(a.initialRange, C(e.clientX));
169
- else if (a.type === "resize-end")
170
- t = Y(a.initialRange, C(e.clientX));
171
- else if (a.type === "new") {
172
- const s = C(e.clientX);
173
- t = s < a.initialRange.start ? W(a.initialRange, s) : Y(a.initialRange, s);
191
+ else if (o.type === "resize-start")
192
+ t = Z(o.initialRange, Y(e.clientX));
193
+ else if (o.type === "resize-end")
194
+ t = ee(o.initialRange, Y(e.clientX));
195
+ else if (o.type === "new") {
196
+ const a = Y(e.clientX);
197
+ t = a < o.initialRange.start ? Z(o.initialRange, a) : ee(o.initialRange, a);
174
198
  }
175
199
  ge(t);
176
200
  }
177
- function te() {
178
- a.active && (Z(), o.value = o.value.filter(M), ce(), O());
201
+ function be() {
202
+ o.active && (F(), l.value = l.value.filter(E), Ae(), O(!0));
179
203
  }
180
- const Re = (e) => {
181
- o.value = o.value.filter((n) => n.id !== e.id), O();
182
- }, O = () => {
183
- const e = o.value.filter(M).sort((t, s) => t.start - s.start || t.end - s.end).map((t) => [w(t.start), w(t.end)]);
184
- JSON.stringify(e) === JSON.stringify(i.modelValue) || ae("update:modelValue", e);
185
- }, V = () => {
186
- $ = !0, H(), me(), $ = !1;
187
- }, Se = (e) => {
188
- const n = e / g.value;
189
- o.value = o.value.map((t) => {
190
- const s = d(Math.round(t.start * n), 0, r.value), v = d(Math.round(t.end * n), 0, r.value);
191
- return N({ ...t, start: s, end: v });
204
+ const we = (e) => {
205
+ x.value && (l.value = l.value.filter((n) => n.id !== e.id), j("remove", [v(e.start), v(e.end)]), O(!0), J(() => {
206
+ var n;
207
+ return (n = S.value) == null ? void 0 : n.focus();
208
+ }));
209
+ }, O = (e = !1) => {
210
+ var c, p;
211
+ const n = l.value.filter(E).sort((f, y) => f.start - y.start || f.end - y.end).map((f) => [v(f.start), v(f.end)]), t = JSON.stringify(n), a = t !== H, r = t === JSON.stringify(u.modelValue);
212
+ if (H = t, !r || e && a) {
213
+ j("update:modelValue", n), e && a && (j("change", n), (p = (c = X.value) == null ? void 0 : c.onChange) == null || p.call(c));
214
+ const f = ++ie;
215
+ J(() => {
216
+ var y;
217
+ if (f === ie && !o.active && JSON.stringify(u.modelValue) !== t) {
218
+ const Xe = (y = S.value) == null ? void 0 : y.contains(document.activeElement);
219
+ z(), J(() => {
220
+ var Me;
221
+ Xe && document.activeElement === document.body && ((Me = S.value) == null || Me.focus());
222
+ });
223
+ }
224
+ });
225
+ }
226
+ }, Te = (e) => {
227
+ if (!x.value || e.target !== S.value) return;
228
+ const n = e.key === "ArrowLeft" ? -1 : e.key === "ArrowRight" ? 1 : 0;
229
+ if (n || e.key === "Home" || e.key === "End")
230
+ e.preventDefault(), w.value = e.key === "Home" ? 0 : e.key === "End" ? i.value - 1 : m(w.value + n, 0, i.value - 1);
231
+ else if (e.key === "Enter" || e.key === " ") {
232
+ if (e.preventDefault(), l.value.length >= u.maxRanges) return;
233
+ const t = { id: U++, start: w.value, end: w.value + 1 };
234
+ if (!E(t)) return;
235
+ l.value.push(t), O(!0), J(
236
+ () => {
237
+ var a, r;
238
+ return (r = (a = S.value) == null ? void 0 : a.querySelector(`[data-range-id="${t.id}"]`)) == null ? void 0 : r.focus();
239
+ }
240
+ );
241
+ }
242
+ }, Je = (e, n) => {
243
+ if (!x.value || e.target !== e.currentTarget) return;
244
+ if (e.key === "Escape") {
245
+ e.preventDefault(), te();
246
+ return;
247
+ }
248
+ if (e.key === "Delete" || e.key === "Backspace") {
249
+ e.preventDefault(), we(n);
250
+ return;
251
+ }
252
+ const t = e.key === "ArrowLeft" ? -1 : e.key === "ArrowRight" ? 1 : 0;
253
+ if (!t) return;
254
+ e.preventDefault();
255
+ const a = e.altKey ? Z(n, n.start + t) : e.shiftKey ? ee(n, n.end + t) : ye(n, n.start + t);
256
+ ge(a), O(!0);
257
+ }, te = () => {
258
+ o.active && (F(), z());
259
+ };
260
+ _(x, (e) => {
261
+ e || te();
262
+ }), _(M, () => {
263
+ w.value = m(w.value, 0, i.value - 1);
264
+ });
265
+ const z = () => {
266
+ W = !0, me(), Ce(), H = JSON.stringify(
267
+ l.value.map((e) => [v(e.start), v(e.end)])
268
+ ), W = !1;
269
+ }, je = (e) => {
270
+ const n = e / M.value;
271
+ l.value = l.value.map((t) => {
272
+ const a = m(Math.round(t.start * n), 0, i.value), r = m(Math.round(t.end * n), 0, i.value);
273
+ return q({ ...t, start: a, end: r });
192
274
  });
193
275
  };
194
- let L = g.value;
195
- return ne(
196
- () => [i.stepMinutes, i.disabledRanges],
276
+ let ne = M.value;
277
+ return _(
278
+ () => [u.stepMinutes, u.disabledRanges],
197
279
  () => {
198
- if (!$) {
199
- if (g.value !== L) {
200
- const e = L;
201
- if (L = g.value, i.modelValue.length > 0) {
202
- V();
280
+ if (!W) {
281
+ if (M.value !== ne) {
282
+ const e = ne;
283
+ if (ne = M.value, u.modelValue.length > 0) {
284
+ z();
203
285
  return;
204
286
  }
205
- Se(e);
287
+ je(e);
206
288
  }
207
- if (o.value.length === 0 && i.modelValue.length > 0) {
208
- V();
289
+ if (l.value.length === 0 && u.modelValue.length > 0) {
290
+ z();
209
291
  return;
210
292
  }
211
- H(), o.value = o.value.filter((e) => {
212
- const n = N(e);
213
- return e.start = n.start, e.end = n.end, M(e);
293
+ me(), l.value = l.value.filter((e) => {
294
+ const n = q(e);
295
+ return e.start = n.start, e.end = n.end, E(e);
214
296
  }), O();
215
297
  }
216
298
  },
217
299
  { immediate: !0, deep: !0 }
218
- ), ne(
219
- () => i.modelValue,
300
+ ), _(
301
+ () => u.modelValue,
220
302
  (e, n) => {
221
- JSON.stringify(e) !== JSON.stringify(n) && V();
303
+ JSON.stringify(e) !== JSON.stringify(n) && (F(), z());
222
304
  },
223
305
  { immediate: !0, deep: !0 }
224
- ), ke(() => {
225
- Z();
226
- }), (e, n) => (m(), p("div", {
227
- class: f([u(l).block, ie.value]),
228
- style: F(ue.value)
229
- }, [
230
- y("div", {
306
+ ), qe(() => {
307
+ F();
308
+ }), (e, n) => (h(), b("div", Re(ke.value, {
309
+ class: [
310
+ s(d).block,
311
+ Be.value,
312
+ s($).class,
313
+ {
314
+ [s(d).is("disabled")]: s(B),
315
+ [s(d).is("readonly")]: le.value,
316
+ [s(d).is("error")]: s(Ee)
317
+ }
318
+ ],
319
+ style: [s($).style, Oe.value]
320
+ }), [
321
+ k("div", Re({
231
322
  ref_key: "gridRef",
232
- ref: J,
233
- class: f([u(l).element("grid"), { [u(l).is("dragging")]: le.value }]),
234
- onMousedown: x
235
- }, [
236
- (m(!0), p(E, null, I(re.value, (t) => (m(), p("div", {
323
+ ref: S
324
+ }, s(re), {
325
+ class: [s(d).element("grid"), { [s(d).is("dragging")]: $e.value }],
326
+ role: "group",
327
+ tabindex: s(B) ? -1 : 0,
328
+ "aria-disabled": s(B) || void 0,
329
+ "aria-describedby": [s(re)["aria-describedby"], G].filter(Boolean).join(" "),
330
+ onKeydown: [
331
+ Te,
332
+ Qe(D(te, ["prevent"]), ["esc"])
333
+ ],
334
+ onFocusin: n[0] || (n[0] = (t) => {
335
+ var a, r;
336
+ return (r = (a = s(X)) == null ? void 0 : a.onFocus) == null ? void 0 : r.call(a, t);
337
+ }),
338
+ onFocusout: n[1] || (n[1] = (t) => {
339
+ var a, r, c;
340
+ return !((a = S.value) != null && a.contains(t.relatedTarget)) && ((c = (r = s(X)) == null ? void 0 : r.onBlur) == null ? void 0 : c.call(r, t));
341
+ }),
342
+ onMousedown: L
343
+ }), [
344
+ k("span", {
345
+ role: "status",
346
+ "aria-live": "polite",
347
+ class: g(s(d).element("instructions"))
348
+ }, N(s(I)("timeRangeSelector.position", {
349
+ start: v(w.value),
350
+ end: v(w.value + 1),
351
+ ranges: l.value.map((t) => `${v(t.start)} - ${v(t.end)}`).join(" / ") || s(I)("common.noData")
352
+ })), 3),
353
+ x.value ? (h(), b("div", {
354
+ key: 0,
355
+ class: g(s(d).element("keyboard-cursor")),
356
+ style: ae({ left: `${w.value / i.value * 100}%`, width: `${100 / i.value}%` }),
357
+ "aria-hidden": "true"
358
+ }, null, 6)) : Se("", !0),
359
+ (h(!0), b(K, null, T(Ie.value, (t) => (h(), b("div", {
237
360
  key: t.index,
238
- class: f([
239
- u(l).element("grid--block"),
361
+ class: g([
362
+ s(d).element("grid--block"),
240
363
  {
241
- [u(l).is("alternate")]: t.alternate,
242
- [u(l).is("disabled")]: t.disabled
364
+ [s(d).is("alternate")]: t.alternate,
365
+ [s(d).is("disabled")]: t.disabled
243
366
  }
244
367
  ])
245
368
  }, null, 2))), 128)),
246
- (m(!0), p(E, null, I(G.value, (t) => (m(), p("div", {
369
+ (h(!0), b(K, null, T(de.value, (t) => (h(), b("div", {
247
370
  key: t.id,
248
- class: f(u(l).element("disabled-range")),
249
- style: F({
250
- left: `${t.start / r.value * 100}%`,
251
- width: `${(t.end - t.start) / r.value * 100}%`
371
+ class: g(s(d).element("disabled-range")),
372
+ style: ae({
373
+ left: `${t.start / i.value * 100}%`,
374
+ width: `${(t.end - t.start) / i.value * 100}%`
252
375
  })
253
376
  }, null, 6))), 128)),
254
- (m(!0), p(E, null, I(o.value, (t) => (m(), p("div", {
377
+ (h(!0), b(K, null, T(l.value, (t) => (h(), b("div", {
255
378
  key: t.id,
256
- class: f([
257
- u(l).element("range"),
379
+ "data-range-id": t.id,
380
+ role: "group",
381
+ tabindex: s(B) ? -1 : 0,
382
+ "aria-label": `${v(t.start)} - ${v(t.end)}`,
383
+ title: `${v(t.start)} - ${v(t.end)}`,
384
+ "aria-describedby": G,
385
+ class: g([
386
+ s(d).element("range"),
258
387
  {
259
- [u(l).is("dragging")]: a.active && a.type === "move" && a.rangeId === t.id
388
+ [s(d).is("dragging")]: o.active && o.type === "move" && o.rangeId === t.id
260
389
  }
261
390
  ]),
262
- style: F({
263
- left: `${t.start / r.value * 100}%`,
264
- width: `${(t.end - t.start) / r.value * 100}%`
391
+ style: ae({
392
+ left: `${t.start / i.value * 100}%`,
393
+ width: `${(t.end - t.start) / i.value * 100}%`
265
394
  }),
266
- onDblclick: B((s) => Re(t), ["stop"]),
267
- onMousedown: B((s) => x(s, t), ["stop"])
395
+ onDblclick: D((a) => we(t), ["stop"]),
396
+ onMousedown: D((a) => L(a, t), ["stop"]),
397
+ onKeydown: D((a) => Je(a, t), ["stop"])
268
398
  }, [
269
- y("div", {
270
- class: f([u(l).element("edge"), u(l).modifier("edge-left")]),
271
- onMousedown: B((s) => x(s, t, "start"), ["stop"])
272
- }, null, 42, Be),
273
- y("div", {
274
- class: f(u(l).element("range-label"))
275
- }, X(w(t.start)) + " - " + X(w(t.end)), 3),
276
- y("div", {
277
- class: f([u(l).element("edge"), u(l).modifier("edge-right")]),
278
- onMousedown: B((s) => x(s, t, "end"), ["stop"])
279
- }, null, 42, De)
280
- ], 46, Ie))), 128))
281
- ], 34),
282
- T.showCursor ? (m(), p("div", {
399
+ k("div", {
400
+ class: g([s(d).element("edge"), s(d).modifier("edge-left")]),
401
+ onMousedown: D((a) => L(a, t, "start"), ["stop"])
402
+ }, null, 42, st),
403
+ k("div", {
404
+ class: g(s(d).element("range-label"))
405
+ }, N(v(t.start)) + " - " + N(v(t.end)), 3),
406
+ k("div", {
407
+ class: g([s(d).element("edge"), s(d).modifier("edge-right")]),
408
+ onMousedown: D((a) => L(a, t, "end"), ["stop"])
409
+ }, null, 42, ot)
410
+ ], 46, at))), 128))
411
+ ], 16, nt),
412
+ k("p", {
413
+ id: G,
414
+ class: g(s(d).element("instructions"))
415
+ }, N(x.value ? s(I)("timeRangeSelector.instructions") : s(I)("timeRangeSelector.readonly")), 3),
416
+ se.showCursor ? (h(), b("div", {
283
417
  key: 0,
284
- class: f(u(l).element("legend"))
418
+ class: g(s(d).element("legend"))
285
419
  }, [
286
- (m(), p(E, null, I(25, (t) => y("span", {
420
+ (h(), b(K, null, T(25, (t) => k("span", {
287
421
  key: t,
288
- class: f(u(l).element("legend--num"))
289
- }, X(t - 1), 3)), 64))
290
- ], 2)) : ze("", !0)
291
- ], 6));
422
+ class: g(s(d).element("legend--num"))
423
+ }, N(t - 1), 3)), 64))
424
+ ], 2)) : Se("", !0)
425
+ ], 16));
292
426
  }
293
427
  });
294
428
  export {
295
- _e as default
429
+ ut as default
296
430
  };
@@ -1,5 +1,11 @@
1
1
  const e = {
2
2
  code: "en-US",
3
+ timeRangeSelector: {
4
+ label: "Daily time ranges",
5
+ position: "Create from {start} to {end}; selected ranges: {ranges}",
6
+ readonly: "Read-only time ranges. Changes are unavailable.",
7
+ instructions: "On the grid, use Left or Right to position and Enter to create. On a range, use Left or Right to move, Shift to resize the end, Alt to resize the start, and Delete to remove."
8
+ },
3
9
  pagination: {
4
10
  prev: "Previous page",
5
11
  next: "Next page",