@progress/kendo-vue-scheduler 10.2.0-develop.10 → 10.2.0-develop.12

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 (156) hide show
  1. package/Scheduler.d.ts +157 -56
  2. package/Scheduler.js +1 -1
  3. package/Scheduler.mjs +242 -214
  4. package/components/EventOverviewPopover.d.ts +62 -0
  5. package/components/EventOverviewPopover.js +8 -0
  6. package/components/EventOverviewPopover.mjs +191 -0
  7. package/components/MoreEventsPopover.d.ts +3 -1
  8. package/components/MoreEventsPopover.js +1 -1
  9. package/components/MoreEventsPopover.mjs +31 -27
  10. package/components/SchedulerActionButtons.js +1 -1
  11. package/components/SchedulerActionButtons.mjs +1 -0
  12. package/components/SchedulerForm.d.ts +412 -2
  13. package/components/SchedulerForm.js +1 -1
  14. package/components/SchedulerForm.mjs +162 -60
  15. package/components/SchedulerQuickCreateForm.d.ts +118 -0
  16. package/components/SchedulerQuickCreateForm.js +8 -0
  17. package/components/SchedulerQuickCreateForm.mjs +249 -0
  18. package/constants/main.d.ts +2 -0
  19. package/constants/main.js +1 -1
  20. package/constants/main.mjs +10 -9
  21. package/dist/cdn/js/kendo-vue-scheduler.js +1 -1
  22. package/editors/KeepResetCustomEventsDialog.d.ts +31 -0
  23. package/editors/KeepResetCustomEventsDialog.js +8 -0
  24. package/editors/KeepResetCustomEventsDialog.mjs +72 -0
  25. package/editors/SchedulerFormEditor.d.ts +151 -52
  26. package/editors/SchedulerFormEditor.js +1 -1
  27. package/editors/SchedulerFormEditor.mjs +192 -139
  28. package/editors/SchedulerRecurrenceDialog.d.ts +2 -2
  29. package/editors/SchedulerRecurrenceDialog.js +1 -1
  30. package/editors/SchedulerRecurrenceDialog.mjs +126 -131
  31. package/editors/ZonedSplitDateTime.d.ts +32 -3
  32. package/editors/ZonedSplitDateTime.js +1 -1
  33. package/editors/ZonedSplitDateTime.mjs +112 -47
  34. package/hooks/useCloseOnAnchorScrollOut.d.ts +10 -0
  35. package/hooks/useCloseOnAnchorScrollOut.js +8 -0
  36. package/hooks/useCloseOnAnchorScrollOut.mjs +43 -0
  37. package/hooks/useCustomEventsConfirmation.d.ts +20 -0
  38. package/hooks/useCustomEventsConfirmation.js +8 -0
  39. package/hooks/useCustomEventsConfirmation.mjs +48 -0
  40. package/hooks/useDeferredClick.d.ts +12 -0
  41. package/hooks/useDeferredClick.js +8 -0
  42. package/hooks/useDeferredClick.mjs +22 -0
  43. package/hooks/useExclusivePopover.d.ts +26 -0
  44. package/hooks/useExclusivePopover.js +8 -0
  45. package/hooks/useExclusivePopover.mjs +30 -0
  46. package/hooks/useRecurrenceSummary.d.ts +3 -0
  47. package/hooks/useRecurrenceSummary.js +1 -1
  48. package/hooks/useRecurrenceSummary.mjs +68 -41
  49. package/index.d.mts +4 -2
  50. package/index.d.ts +4 -2
  51. package/index.js +1 -1
  52. package/index.mjs +83 -78
  53. package/items/SchedulerEditItem.d.ts +116 -12
  54. package/items/SchedulerEditItem.js +1 -1
  55. package/items/SchedulerEditItem.mjs +212 -131
  56. package/items/SchedulerItem.d.ts +2 -1
  57. package/items/SchedulerItem.js +1 -1
  58. package/items/SchedulerItem.mjs +28 -23
  59. package/items/SchedulerProportionalViewItem.d.ts +1 -0
  60. package/items/SchedulerProportionalViewItem.js +1 -1
  61. package/items/SchedulerProportionalViewItem.mjs +83 -68
  62. package/items/SchedulerViewItem.d.ts +1 -0
  63. package/items/SchedulerViewItem.js +1 -1
  64. package/items/SchedulerViewItem.mjs +84 -75
  65. package/items/hooks/use-drag-item.js +1 -1
  66. package/items/hooks/use-drag-item.mjs +49 -48
  67. package/items/hooks/use-form-item.d.ts +1 -1
  68. package/items/hooks/use-remove-item.d.ts +1 -1
  69. package/items/hooks/use-resize-item.js +1 -1
  70. package/items/hooks/use-resize-item.mjs +74 -65
  71. package/messages/main.d.ts +42 -0
  72. package/messages/main.js +1 -1
  73. package/messages/main.mjs +303 -275
  74. package/models/InternalDataAction.d.ts +13 -0
  75. package/models/SchedulerView.d.ts +1 -1
  76. package/package-metadata.js +1 -1
  77. package/package-metadata.mjs +2 -2
  78. package/package.json +13 -12
  79. package/recurrence/RecurrenceEditor.js +1 -1
  80. package/recurrence/RecurrenceEditor.mjs +42 -42
  81. package/recurrence/common.d.ts +10 -0
  82. package/recurrence/common.js +1 -1
  83. package/recurrence/common.mjs +39 -35
  84. package/services/itemsService.d.ts +5 -2
  85. package/services/itemsService.js +1 -1
  86. package/services/itemsService.mjs +46 -33
  87. package/services/occurrenceService.js +1 -1
  88. package/services/occurrenceService.mjs +18 -18
  89. package/slots/SchedulerEditSlot.d.ts +70 -8
  90. package/slots/SchedulerEditSlot.js +1 -1
  91. package/slots/SchedulerEditSlot.mjs +222 -141
  92. package/slots/SchedulerSlot.js +1 -1
  93. package/slots/SchedulerSlot.mjs +20 -16
  94. package/slots/SchedulerViewSlot.d.ts +3 -0
  95. package/slots/SchedulerViewSlot.js +1 -1
  96. package/slots/SchedulerViewSlot.mjs +21 -15
  97. package/tasks/SchedulerEditTask.d.ts +13 -2
  98. package/tasks/SchedulerEditTask.js +1 -1
  99. package/tasks/SchedulerEditTask.mjs +45 -30
  100. package/utils/main.d.ts +27 -0
  101. package/utils/main.js +1 -1
  102. package/utils/main.mjs +172 -136
  103. package/views/agenda/AgendaView.d.ts +6 -2
  104. package/views/agenda/AgendaView.js +1 -1
  105. package/views/agenda/AgendaView.mjs +31 -29
  106. package/views/agenda/AgendaViewBody.d.ts +3 -3
  107. package/views/agenda/AgendaViewBody.js +1 -1
  108. package/views/agenda/AgendaViewBody.mjs +31 -29
  109. package/views/common/SchedulerDrag.d.ts +4 -2
  110. package/views/common/SchedulerDrag.js +1 -1
  111. package/views/common/SchedulerDrag.mjs +8 -7
  112. package/views/common/SchedulerResize.d.ts +4 -2
  113. package/views/common/SchedulerResize.js +1 -1
  114. package/views/common/SchedulerResize.mjs +14 -12
  115. package/views/common/VerticalResourceIterator.d.ts +3 -3
  116. package/views/common/VerticalResourceIterator.js +1 -1
  117. package/views/common/VerticalResourceIterator.mjs +34 -33
  118. package/views/day/DayView.d.ts +2 -0
  119. package/views/day/DayView.js +1 -1
  120. package/views/day/DayView.mjs +9 -7
  121. package/views/day/DayViewAllDaySlots.d.ts +7 -5
  122. package/views/day/DayViewAllDaySlots.js +1 -1
  123. package/views/day/DayViewAllDaySlots.mjs +24 -21
  124. package/views/day/DayViewMiddleRow.d.ts +7 -5
  125. package/views/day/DayViewMiddleRow.js +1 -1
  126. package/views/day/DayViewMiddleRow.mjs +18 -13
  127. package/views/day/DayViewVerticalRow.d.ts +7 -5
  128. package/views/day/DayViewVerticalRow.js +1 -1
  129. package/views/day/DayViewVerticalRow.mjs +23 -17
  130. package/views/day/DayViewVerticalSlotsRow.d.ts +7 -5
  131. package/views/day/DayViewVerticalSlotsRow.js +1 -1
  132. package/views/day/DayViewVerticalSlotsRow.mjs +34 -29
  133. package/views/day/MultiDayView.d.ts +13 -7
  134. package/views/day/MultiDayView.js +1 -1
  135. package/views/day/MultiDayView.mjs +108 -95
  136. package/views/month/MonthView.d.ts +15 -4
  137. package/views/month/MonthView.js +1 -1
  138. package/views/month/MonthView.mjs +105 -68
  139. package/views/month/MonthViewBody.d.ts +3 -3
  140. package/views/month/MonthViewBody.js +1 -1
  141. package/views/month/MonthViewBody.mjs +18 -16
  142. package/views/time/MultiDayTimelineView.d.ts +6 -4
  143. package/views/time/MultiDayTimelineView.js +1 -1
  144. package/views/time/MultiDayTimelineView.mjs +64 -63
  145. package/views/time/TimelineView.d.ts +2 -0
  146. package/views/time/TimelineView.js +1 -1
  147. package/views/time/TimelineView.mjs +5 -3
  148. package/views/time/TimelineViewBody.d.ts +7 -5
  149. package/views/time/TimelineViewBody.js +1 -1
  150. package/views/time/TimelineViewBody.mjs +29 -27
  151. package/views/week/WeekView.d.ts +2 -0
  152. package/views/week/WeekView.js +1 -1
  153. package/views/week/WeekView.mjs +11 -10
  154. package/views/week/WorkWeekView.d.ts +2 -0
  155. package/views/week/WorkWeekView.js +1 -1
  156. package/views/week/WorkWeekView.mjs +17 -16
@@ -5,16 +5,35 @@
5
5
  * Licensed under commercial license. See LICENSE.md in the package root for more information
6
6
  *-------------------------------------------------------------------------------------------
7
7
  */
8
- import { defineComponent as L, createVNode as r, h as o, inject as C } from "vue";
9
- import { SchedulerActionButtons as D } from "./SchedulerActionButtons.mjs";
10
- import { Form as E } from "@progress/kendo-vue-form";
11
- import { Dialog as b } from "@progress/kendo-vue-dialogs";
12
- import { provideLocalizationService as w } from "@progress/kendo-vue-intl";
13
- import { SchedulerFormEditor as T } from "../editors/SchedulerFormEditor.mjs";
14
- import { editorValidationRequired as h, messages as i, editorValidationEnd as c, editorSave as u, editorCancel as g, editorDelete as m, editorEditEvent as f, editorNewEvent as p, editorValidationStart as k } from "../messages/main.mjs";
15
- import { canUseDOM as F, getTemplate as q, guid as z } from "@progress/kendo-vue-common";
16
- const N = /* @__PURE__ */ L({
8
+ import { defineComponent as W, createVNode as h, h as C, Fragment as J, inject as b, ref as L, onBeforeUnmount as Q, isVNode as X, nextTick as Z } from "vue";
9
+ import { Button as T } from "@progress/kendo-vue-buttons";
10
+ import { Form as G } from "@progress/kendo-vue-form";
11
+ import { Dialog as I, DialogActionsBar as ee } from "@progress/kendo-vue-dialogs";
12
+ import { provideLocalizationService as te } from "@progress/kendo-vue-intl";
13
+ import { canUseDOM as E, getTemplate as ie, guid as V, clone as ae } from "@progress/kendo-vue-common";
14
+ import { SchedulerActionButtons as se } from "./SchedulerActionButtons.mjs";
15
+ import { SchedulerFormEditor as oe } from "../editors/SchedulerFormEditor.mjs";
16
+ import { CUSTOM_EVENTS_CANCEL_KEY as ne } from "../hooks/useCustomEventsConfirmation.mjs";
17
+ import { editorValidationRequired as A, messages as r, editorValidationEnd as _, editorSave as j, editorCancel as O, editorDelete as P, editorEditEvent as q, editorNewEvent as F, editorValidationStart as R, editorDiscardChangesDialogTitle as B, editorDiscardChangesConfirmation as $, editorDiscardChangesCancel as H, editorDiscardChangesDiscard as N } from "../messages/main.mjs";
18
+ function U(e) {
19
+ return typeof e == "function" || Object.prototype.toString.call(e) === "[object Object]" && !X(e);
20
+ }
21
+ const M = "__kendoSchedulerEditor", re = 10, le = 400;
22
+ let k;
23
+ const w = (e, t) => {
24
+ if (Object.is(e, t))
25
+ return !0;
26
+ if (e instanceof Date || t instanceof Date)
27
+ return e instanceof Date && t instanceof Date && Object.is(e.getTime(), t.getTime());
28
+ if (Array.isArray(e) || Array.isArray(t))
29
+ return Array.isArray(e) && Array.isArray(t) && e.length === t.length && e.every((l, d) => w(l, t[d]));
30
+ if (typeof e != "object" || e === null || typeof t != "object" || t === null)
31
+ return !1;
32
+ const s = e, i = t, n = Object.keys(s), o = Object.keys(i);
33
+ return n.length === o.length && n.every((l) => o.includes(l) && w(s[l], i[l]));
34
+ }, ye = /* @__PURE__ */ W({
17
35
  name: "KendoSchedulerForm",
36
+ inheritAttrs: !1,
18
37
  emits: {
19
38
  cancel: null,
20
39
  close: null,
@@ -39,7 +58,7 @@ const N = /* @__PURE__ */ L({
39
58
  }
40
59
  },
41
60
  created() {
42
- this.dialogId = z();
61
+ this.dialogId = V();
43
62
  },
44
63
  data() {
45
64
  return {
@@ -47,84 +66,167 @@ const N = /* @__PURE__ */ L({
47
66
  };
48
67
  },
49
68
  mounted() {
50
- this.calculateMedia(), setTimeout(() => {
69
+ this.startDiscardGuard(this.handleCancel), this.calculateMedia(), this.focusTimeout = setTimeout(() => {
51
70
  const e = document.getElementById(this.dialogId);
52
- e && e.focus();
53
- }, 10);
71
+ e && !this.showDiscardDialog && e.focus();
72
+ }, re);
73
+ },
74
+ beforeUnmount() {
75
+ clearTimeout(this.focusTimeout);
54
76
  },
55
77
  setup() {
56
- return {
57
- kendoLocalizationService: C("kendoLocalizationService", {})
78
+ const e = b("kendoLocalizationService", {}), t = b(ne, null), s = L(null), i = L(!1);
79
+ let n, o, l = null, d, c, f, u = !1, g, S = !1;
80
+ const y = () => s.value !== null && !w(s.value.form.values, n), m = (a) => typeof a == "object" && a !== null && M in a && a[M] === d, p = () => {
81
+ const a = typeof c == "object" && c !== null ? c : {};
82
+ window.history.pushState({
83
+ ...a,
84
+ [M]: d
85
+ }, "", f), u = !0;
86
+ }, z = (a) => {
87
+ y() ? i.value || (l = document.activeElement instanceof HTMLElement ? document.activeElement : null, o = a, i.value = !0) : a();
88
+ }, K = () => {
89
+ i.value = !1, o = void 0;
90
+ const a = l;
91
+ Z(() => {
92
+ a != null && a.isConnected && a.focus({
93
+ preventScroll: !0
94
+ });
95
+ });
96
+ }, Y = () => {
97
+ const a = o;
98
+ o = void 0, i.value = !1, a == null || a();
99
+ }, x = (a) => {
100
+ if (n = ae(s.value.form.values), !E)
101
+ return;
102
+ const D = () => {
103
+ S || (d = V(), c = window.history.state, f = window.location.href, p(), g = (v) => {
104
+ if (!(!u || m(v.state))) {
105
+ if (v.stopImmediatePropagation(), u = !1, t != null && t()) {
106
+ p();
107
+ return;
108
+ }
109
+ y() && p(), a(v);
110
+ }
111
+ }, window.addEventListener("popstate", g, !0));
112
+ };
113
+ k ? k.then(D) : D();
114
+ };
115
+ return Q(() => {
116
+ S = !0, !(!E || !g) && (window.removeEventListener("popstate", g, !0), u && m(window.history.state) && (k = new Promise((a) => {
117
+ window.addEventListener("popstate", (D) => {
118
+ window.location.href === f && w(D.state, c) && D.stopImmediatePropagation(), k = void 0, a();
119
+ }, {
120
+ capture: !0,
121
+ once: !0
122
+ }), window.history.back();
123
+ })), u = !1);
124
+ }), {
125
+ kendoLocalizationService: e,
126
+ formRef: s,
127
+ showDiscardDialog: i,
128
+ startDiscardGuard: x,
129
+ requestCancel: z,
130
+ cancelDiscard: K,
131
+ discardChanges: Y
58
132
  };
59
133
  },
60
134
  render() {
61
- var l;
62
- const e = this, t = w(this);
63
- this.requiredValidationMessage = t.toLanguageString(h, i[h]), this.endValidationMessage = t.toLanguageString(c, i[c]);
64
- const s = t.toLanguageString(u, i[u]), n = t.toLanguageString(g, i[g]), d = t.toLanguageString(m, i[m]), a = !!((l = this.$props.dataItem) != null && l[this.ks.fields.id]), S = a ? t.toLanguageString(f, i[f]) : t.toLanguageString(p, i[p]);
65
- this.startValidationMessage = t.toLanguageString(k, i[k]);
66
- const M = r(T, null, {
67
- default: () => [r(D, {
68
- editSaveMessage: s,
69
- editCancelMessage: n,
70
- editDeleteMessage: a ? d : void 0,
135
+ var m;
136
+ let e, t;
137
+ const s = this, i = te(this);
138
+ this.requiredValidationMessage = i.toLanguageString(A, r[A]), this.endValidationMessage = i.toLanguageString(_, r[_]);
139
+ const n = i.toLanguageString(j, r[j]), o = i.toLanguageString(O, r[O]), l = i.toLanguageString(P, r[P]), d = !!((m = this.$props.dataItem) != null && m[this.ks.fields.id]), c = d ? i.toLanguageString(q, r[q]) : i.toLanguageString(F, r[F]);
140
+ this.startValidationMessage = i.toLanguageString(R, r[R]);
141
+ const f = h(oe, null, {
142
+ default: () => [h(se, {
143
+ editSaveMessage: n,
144
+ editCancelMessage: o,
145
+ editDeleteMessage: d ? l : void 0,
71
146
  onCancel: this.handleCancel,
72
- onDelete: a && this.onDelete ? this.handleDelete : void 0
147
+ onDelete: d && this.onDelete ? this.handleDelete : void 0
73
148
  }, null)]
74
- }), V = q.call(this, {
75
- h: o,
149
+ }), u = ie.call(this, {
150
+ h: C,
76
151
  template: this.ks.form,
77
- defaultRendering: M,
152
+ defaultRendering: f,
78
153
  additionalProps: {
79
154
  dataItem: this.dataItem,
80
- editSaveMessage: s,
81
- editCancelMessage: n
155
+ editSaveMessage: n,
156
+ editCancelMessage: o
82
157
  },
83
158
  additionalListeners: {
84
159
  cancel: this.handleCancel
85
160
  }
86
- }), v = {
87
- title: S,
161
+ }), g = {
162
+ title: c,
88
163
  appendTo: "body",
89
164
  width: this.media === "desktop" ? 650 : "85%",
90
165
  wrapperId: this.dialogId,
91
166
  ...this.ks.dialogProps
92
- }, I = {
93
- initialValues: e.ksModifyInitialFormValues(e.$props.dataItem),
94
- validator: e.formValidator,
167
+ }, S = {
168
+ ignoreModified: !0,
169
+ initialValues: s.ksModifyInitialFormValues(s.$props.dataItem),
170
+ validator: s.formValidator,
95
171
  ...this.ks.formProps
96
- };
97
- return o(b, {
98
- onClose: this.handleClose,
99
- class: "k-scheduler-edit-dialog",
100
- ...v
172
+ }, y = this.showDiscardDialog && h(I, {
173
+ title: i.toLanguageString(B, r[B]),
174
+ className: "k-scheduler-discard-dialog",
175
+ appendTo: "body",
176
+ width: this.media === "desktop" ? le : "85%",
177
+ onClose: (p) => {
178
+ p.event.stopPropagation(), this.cancelDiscard();
179
+ }
180
+ }, {
181
+ default: () => [h("p", null, [i.toLanguageString($, r[$])]), h(ee, null, {
182
+ default: () => [h(T, {
183
+ type: "button",
184
+ onClick: this.cancelDiscard
185
+ }, U(e = i.toLanguageString(H, r[H])) ? e : {
186
+ default: () => [e]
187
+ }), h(T, {
188
+ type: "button",
189
+ themeColor: "primary",
190
+ onClick: this.discardChanges
191
+ }, U(t = i.toLanguageString(N, r[N])) ? t : {
192
+ default: () => [t]
193
+ })]
194
+ })]
195
+ });
196
+ return C(J, null, [C(I, {
197
+ ...this.$attrs,
198
+ class: ["k-scheduler-edit-dialog", this.$attrs.class],
199
+ ...g,
200
+ onClose: this.handleClose
101
201
  }, function() {
102
- return [o(E, {
103
- onSubmit: e.handleSubmit,
104
- ...I
202
+ return [C(G, {
203
+ onSubmit: s.handleSubmit,
204
+ ...S,
205
+ ref: "formRef"
105
206
  }, function() {
106
- return [V];
207
+ return [u];
107
208
  })];
108
- });
209
+ }), y]);
109
210
  },
110
211
  methods: {
111
212
  calculateMedia() {
112
- F && window.matchMedia && (this.media = window.matchMedia("(min-width: 600px)").matches ? "desktop" : "mobile");
213
+ E && window.matchMedia && (this.media = window.matchMedia("(min-width: 600px)").matches ? "desktop" : "mobile");
113
214
  },
114
215
  handleCancel(e) {
115
- this.$emit("cancel", {
216
+ this.requestCancel(() => this.$emit("cancel", {
116
217
  value: null,
117
218
  event: e,
118
219
  target: this.form
119
- });
220
+ }));
120
221
  },
121
- handleClose({
122
- event: e
123
- }) {
124
- this.$emit("close", {
125
- value: null,
126
- event: e,
127
- target: this.form
222
+ handleClose(e) {
223
+ this.requestCancel(() => {
224
+ var t;
225
+ (t = this.ks.dialogProps) != null && t.onClose ? this.ks.dialogProps.onClose(e) : this.$emit("close", {
226
+ value: null,
227
+ event: e.event,
228
+ target: this.form
229
+ });
128
230
  });
129
231
  },
130
232
  handleDelete() {
@@ -149,15 +251,15 @@ const N = /* @__PURE__ */ L({
149
251
  },
150
252
  formValidator(e, t) {
151
253
  const s = {};
152
- s[this.ks.fields.start] = [this.requiredValidator(t(this.ks.fields.start)), this.startAfterEndValidator(t(this.ks.fields.start), t)].filter(Boolean).reduce((d, a) => d || a, ""), s[this.ks.fields.end] = [this.requiredValidator(t(this.ks.fields.start)), this.endAfterStartValidator(t(this.ks.fields.start), t)].filter(Boolean).reduce((d, a) => d || a, "");
153
- const n = this.ksValidator(t);
254
+ s[this.ks.fields.start] = [this.requiredValidator(t(this.ks.fields.start)), this.startAfterEndValidator(t(this.ks.fields.start), t)].filter(Boolean).reduce((n, o) => n || o, ""), s[this.ks.fields.end] = [this.requiredValidator(t(this.ks.fields.start)), this.endAfterStartValidator(t(this.ks.fields.start), t)].filter(Boolean).reduce((n, o) => n || o, "");
255
+ const i = this.ksValidator(t);
154
256
  return {
155
257
  ...s,
156
- ...n
258
+ ...i
157
259
  };
158
260
  }
159
261
  }
160
262
  });
161
263
  export {
162
- N as SchedulerForm
264
+ ye as SchedulerForm
163
265
  };
@@ -0,0 +1,118 @@
1
+ /**
2
+ * @license
3
+ *-------------------------------------------------------------------------------------------
4
+ * Copyright © 2026 Progress Software Corporation. All rights reserved.
5
+ * Licensed under commercial license. See LICENSE.md in the package root for more information
6
+ *-------------------------------------------------------------------------------------------
7
+ */
8
+ import { PropType } from 'vue';
9
+ import { FormProps } from '@progress/kendo-vue-form';
10
+ import { DataItem } from '../models/main';
11
+ /**
12
+ * Represents the event arguments of the SchedulerQuickCreateForm component.
13
+ */
14
+ export interface SchedulerQuickCreateFormStateChangeEvent<T> {
15
+ /** The value associated with the event. */
16
+ value: T;
17
+ /** The native DOM event, when available. */
18
+ event: Event | undefined;
19
+ }
20
+ /**
21
+ * Represents the props of the SchedulerQuickCreateForm component.
22
+ */
23
+ export interface SchedulerQuickCreateFormProps {
24
+ /**
25
+ * Specifies the draft event displayed in the quick-create popover.
26
+ *
27
+ * @example
28
+ * ```vue
29
+ * <SchedulerQuickCreateForm :data-item="draft" />
30
+ * ```
31
+ */
32
+ dataItem: DataItem;
33
+ /**
34
+ * Controls the visibility of the quick-create popover.
35
+ *
36
+ * @example
37
+ * ```vue
38
+ * <SchedulerQuickCreateForm :show="true" />
39
+ * ```
40
+ */
41
+ show: boolean;
42
+ /**
43
+ * Specifies the element used to position the popover.
44
+ *
45
+ * @example
46
+ * ```vue
47
+ * <SchedulerQuickCreateForm :anchor="slotElement" />
48
+ * ```
49
+ */
50
+ anchor: HTMLElement | null;
51
+ /**
52
+ * Validates the quick-create form values, like the SchedulerForm validator.
53
+ *
54
+ * @example
55
+ * ```vue
56
+ * <SchedulerQuickCreateForm :validator="validateTitle" />
57
+ * ```
58
+ */
59
+ validator?: FormProps['validator'];
60
+ /**
61
+ * Fires when Save is clicked or Enter is pressed in the title field.
62
+ *
63
+ * @example
64
+ * ```vue
65
+ * <SchedulerQuickCreateForm @submit="handleSubmit" />
66
+ * ```
67
+ */
68
+ onSubmit: (event: SchedulerQuickCreateFormStateChangeEvent<DataItem>) => void;
69
+ /**
70
+ * Fires when More options is clicked to open the full editor.
71
+ *
72
+ * @example
73
+ * ```vue
74
+ * <SchedulerQuickCreateForm @moreoptions="handleMoreOptions" />
75
+ * ```
76
+ */
77
+ onMoreoptions?: (event: SchedulerQuickCreateFormStateChangeEvent<DataItem>) => void;
78
+ /**
79
+ * Fires when the quick-create form is dismissed.
80
+ *
81
+ * @example
82
+ * ```vue
83
+ * <SchedulerQuickCreateForm @cancel="handleCancel" />
84
+ * ```
85
+ */
86
+ onCancel?: (event: SchedulerQuickCreateFormStateChangeEvent<null>) => void;
87
+ }
88
+ /**
89
+ * Represents the default quick-create popover of the Scheduler.
90
+ * The form edits the event title and provides Save, More options, and Cancel actions.
91
+ */
92
+ export declare const SchedulerQuickCreateForm: import('vue').DefineComponent<import('vue').ExtractPropTypes<{
93
+ dataItem: {
94
+ type: PropType<any>;
95
+ required: true;
96
+ };
97
+ show: PropType<boolean>;
98
+ anchor: PropType<HTMLElement>;
99
+ validator: PropType<import('@progress/kendo-vue-form').FormValidatorType>;
100
+ }>, () => import("vue/jsx-runtime").JSX.Element, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
101
+ submit: (event: SchedulerQuickCreateFormStateChangeEvent<DataItem>) => boolean;
102
+ moreoptions: (event: SchedulerQuickCreateFormStateChangeEvent<DataItem>) => boolean;
103
+ cancel: (event: SchedulerQuickCreateFormStateChangeEvent<null>) => boolean;
104
+ }, string, import('vue').PublicProps, Readonly<import('vue').ExtractPropTypes<{
105
+ dataItem: {
106
+ type: PropType<any>;
107
+ required: true;
108
+ };
109
+ show: PropType<boolean>;
110
+ anchor: PropType<HTMLElement>;
111
+ validator: PropType<import('@progress/kendo-vue-form').FormValidatorType>;
112
+ }>> & Readonly<{
113
+ onCancel?: (event: SchedulerQuickCreateFormStateChangeEvent<null>) => any;
114
+ onSubmit?: (event: SchedulerQuickCreateFormStateChangeEvent<any>) => any;
115
+ onMoreoptions?: (event: SchedulerQuickCreateFormStateChangeEvent<any>) => any;
116
+ }>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
117
+ /** The default props of the SchedulerQuickCreateForm component. */
118
+ export declare const schedulerQuickCreateFormDefaultProps: {};
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @license
3
+ *-------------------------------------------------------------------------------------------
4
+ * Copyright © 2026 Progress Software Corporation. All rights reserved.
5
+ * Licensed under commercial license. See LICENSE.md in the package root for more information
6
+ *-------------------------------------------------------------------------------------------
7
+ */
8
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("vue"),P=require("@progress/kendo-date-math"),E=require("@progress/kendo-vue-tooltip"),F=require("@progress/kendo-vue-common"),C=require("@progress/kendo-vue-buttons"),B=require("@progress/kendo-vue-inputs"),v=require("@progress/kendo-vue-form"),q=require("@progress/kendo-vue-labels"),I=require("@progress/kendo-vue-intl"),O=require("@progress/kendo-svg-icons"),D=require("../constants/main.js"),g=require("../utils/main.js"),T=require("../hooks/useCloseOnAnchorScrollOut.js"),s=require("../messages/main.js");function w(e){return typeof e=="function"||Object.prototype.toString.call(e)==="[object Object]"&&!t.isVNode(e)}const _="360px",x=t.defineComponent({name:"KendoSchedulerQuickCreateTitleEditor",inheritAttrs:!1,props:{value:[String,Number],valid:{type:Boolean,default:!0},placeholder:String,ariaLabel:String},emits:["change","focus","blur"],setup(e,{emit:u}){return()=>{var r;return t.createVNode(B.TextBox,{value:(r=e.value)!=null?r:"",valid:e.valid,placeholder:e.placeholder,ariaLabel:e.ariaLabel,inputAttributes:{autocomplete:"off"},onInput:o=>u("change",o),onChange:o=>u("change",o),onFocus:()=>u("focus"),onBlur:()=>u("blur")},null)}}}),z=t.defineComponent({name:"KendoSchedulerQuickCreateForm",props:{dataItem:{type:Object,required:!0},show:Boolean,anchor:Object,validator:Function},emits:{submit:e=>!!e,moreoptions:e=>!!e,cancel:e=>!!e},inject:{kendoIntlService:{default:null},kendoLocalizationService:{default:null}},setup(e,{emit:u}){const r=t.getCurrentInstance(),o=t.inject("ks");if(!o)throw new Error("SchedulerQuickCreateForm must be rendered inside a Scheduler.");const p=t.ref(null),k=a=>u("cancel",{value:null,event:a}),y=()=>{var a,i;e.show&&((i=(a=p.value)==null?void 0:a.$el.querySelector("input"))==null||i.focus())};t.watch(()=>e.show,()=>t.nextTick(y),{immediate:!0,flush:"post"});const S=t.computed(()=>{const a=Math.max(1,Math.round((o.dateRange.end.getTime()-o.dateRange.start.getTime())/P.MS_PER_DAY)),i=o.orientation==="horizontal"?Math.max(1,o.groups.length):1;return o.activeViewName.toLowerCase()!=="timeline"&&a*i<=1?{position:"top",collision:{horizontal:"fit",vertical:"flip"},margin:{horizontal:0,vertical:D.SCHEDULER_POPOVER_GAP}}:{position:"right",collision:{horizontal:"flip",vertical:"fit"},margin:{horizontal:D.SCHEDULER_POPOVER_GAP,vertical:0}}});t.watch([()=>e.show,()=>e.anchor],([a],i,n)=>{var b;if(!a||typeof document=="undefined")return;const d=((b=e.anchor)==null?void 0:b.ownerDocument)||document,h=l=>{var f;const c=(f=p.value)==null?void 0:f.$el.closest(".k-popover");c!=null&&c.contains(l.target)||k()};d.addEventListener("mousedown",h),n(()=>d.removeEventListener("mousedown",h))},{immediate:!0}),T.useCloseOnAnchorScrollOut(()=>e.show,()=>e.anchor||null,()=>k());const L=(a,i)=>{const n={...e.dataItem};g.setField(n,o.fields.title,a.valueGetter(o.fields.title)),u("moreoptions",{value:n,event:i})};return()=>{const a=I.provideIntlService(r==null?void 0:r.proxy),i=I.provideLocalizationService(r==null?void 0:r.proxy),n=l=>i.toLanguageString(l,s.messages[l]),d=g.getField(e.dataItem,o.fields.start),h=g.getField(e.dataItem,o.fields.end),b=d&&h?g.formatEventSummary(a,d,h,!!g.getField(e.dataItem,o.fields.isAllDay),n(s.allDay)):"";return t.createVNode(v.Form,{key:d==null?void 0:d.getTime(),initialValues:e.dataItem,validator:e.validator,ignoreModified:!0,onSubmit:(l,c)=>u("submit",{value:l,event:c}),renderForm:l=>{let c,f,V;return t.createVNode(E.Popover,{anchor:e.anchor,show:e.show,position:S.value.position,collision:S.value.collision,margin:S.value.margin,callout:!1,title:n(s.editorNewEvent),style:{width:_},autoFocus:!1,animate:{openDuration:1,closeDuration:1},onOpen:y,onKeydown:()=>k()},{default:()=>[t.createVNode(v.FormElement,{ref:p,horizontal:!0,class:"k-scheduler-edit-form"},{default:()=>[t.createVNode(v.FieldWrapper,null,{default:()=>[t.createVNode(q.Label,{class:"k-form-label"},{default:()=>[t.createVNode(F.SvgIcon,{icon:O.rightDoubleQuotesIcon,size:"xlarge"},null)]}),t.createVNode("div",{class:"k-form-field-wrap",onKeydown:m=>{var N;m.key==="Enter"&&(m.preventDefault(),(N=l.onSubmit)==null||N.call(l,m))}},[t.createVNode(v.Field,{name:o.fields.title,component:x,ariaLabel:n(s.editorEventTitle),placeholder:n(s.editorNewEvent)},null)])]}),t.createVNode(v.FieldWrapper,null,{default:()=>[t.createVNode(q.Label,{class:"k-form-label"},{default:()=>[t.createVNode(F.SvgIcon,{icon:O.clockIcon,size:"xlarge"},null)]}),t.createVNode("div",{class:"k-form-field-wrap"},[t.createVNode("div",{class:"k-scheduler-edit-form-row k-color-subtle"},[b])])]})]}),t.createVNode(E.PopoverActionsBar,null,{default:()=>[t.createVNode(C.Button,{type:"button",fillMode:"flat",themeColor:"primary",onClick:m=>L(l,m)},w(c=n(s.quickCreateMoreOptions))?c:{default:()=>[c]}),t.createVNode("span",{class:"k-spacer"},null),t.createVNode(C.Button,{type:"button",onClick:m=>k(m)},w(f=n(s.quickCreateCancel))?f:{default:()=>[f]}),t.createVNode(C.Button,{type:"button",themeColor:"primary",disabled:!l.allowSubmit,onClick:l.onSubmit},w(V=n(s.quickCreateSave))?V:{default:()=>[V]})]})]})}},null)}}}),M={};exports.SchedulerQuickCreateForm=z;exports.schedulerQuickCreateFormDefaultProps=M;
@@ -0,0 +1,249 @@
1
+ /**
2
+ * @license
3
+ *-------------------------------------------------------------------------------------------
4
+ * Copyright © 2026 Progress Software Corporation. All rights reserved.
5
+ * Licensed under commercial license. See LICENSE.md in the package root for more information
6
+ *-------------------------------------------------------------------------------------------
7
+ */
8
+ import { defineComponent as L, getCurrentInstance as T, inject as _, ref as B, watch as E, nextTick as P, computed as M, createVNode as t, isVNode as j } from "vue";
9
+ import { MS_PER_DAY as A } from "@progress/kendo-date-math";
10
+ import { Popover as Q, PopoverActionsBar as R } from "@progress/kendo-vue-tooltip";
11
+ import { SvgIcon as F } from "@progress/kendo-vue-common";
12
+ import { Button as k } from "@progress/kendo-vue-buttons";
13
+ import { TextBox as V } from "@progress/kendo-vue-inputs";
14
+ import { Form as q, FormElement as N, FieldWrapper as I, Field as K } from "@progress/kendo-vue-form";
15
+ import { Label as D } from "@progress/kendo-vue-labels";
16
+ import { provideIntlService as G, provideLocalizationService as H } from "@progress/kendo-vue-intl";
17
+ import { rightDoubleQuotesIcon as W, clockIcon as $ } from "@progress/kendo-svg-icons";
18
+ import { SCHEDULER_POPOVER_GAP as O } from "../constants/main.mjs";
19
+ import { getField as S, formatEventSummary as U, setField as Y } from "../utils/main.mjs";
20
+ import { useCloseOnAnchorScrollOut as J } from "../hooks/useCloseOnAnchorScrollOut.mjs";
21
+ import { messages as X, allDay as Z, editorNewEvent as x, editorEventTitle as ee, quickCreateMoreOptions as te, quickCreateCancel as oe, quickCreateSave as le } from "../messages/main.mjs";
22
+ function w(e) {
23
+ return typeof e == "function" || Object.prototype.toString.call(e) === "[object Object]" && !j(e);
24
+ }
25
+ const ne = "360px", ie = /* @__PURE__ */ L({
26
+ name: "KendoSchedulerQuickCreateTitleEditor",
27
+ inheritAttrs: !1,
28
+ props: {
29
+ value: [String, Number],
30
+ valid: {
31
+ type: Boolean,
32
+ default: !0
33
+ },
34
+ placeholder: String,
35
+ ariaLabel: String
36
+ },
37
+ emits: ["change", "focus", "blur"],
38
+ setup(e, {
39
+ emit: c
40
+ }) {
41
+ return () => {
42
+ var a;
43
+ return t(V, {
44
+ value: (a = e.value) != null ? a : "",
45
+ valid: e.valid,
46
+ placeholder: e.placeholder,
47
+ ariaLabel: e.ariaLabel,
48
+ inputAttributes: {
49
+ autocomplete: "off"
50
+ },
51
+ onInput: (o) => c("change", o),
52
+ onChange: (o) => c("change", o),
53
+ onFocus: () => c("focus"),
54
+ onBlur: () => c("blur")
55
+ }, null);
56
+ };
57
+ }
58
+ }), Se = /* @__PURE__ */ L({
59
+ name: "KendoSchedulerQuickCreateForm",
60
+ props: {
61
+ dataItem: {
62
+ type: Object,
63
+ required: !0
64
+ },
65
+ show: Boolean,
66
+ anchor: Object,
67
+ validator: Function
68
+ },
69
+ emits: {
70
+ submit: (e) => !!e,
71
+ moreoptions: (e) => !!e,
72
+ cancel: (e) => !!e
73
+ },
74
+ inject: {
75
+ kendoIntlService: {
76
+ default: null
77
+ },
78
+ kendoLocalizationService: {
79
+ default: null
80
+ }
81
+ },
82
+ setup(e, {
83
+ emit: c
84
+ }) {
85
+ const a = T(), o = _("ks");
86
+ if (!o)
87
+ throw new Error("SchedulerQuickCreateForm must be rendered inside a Scheduler.");
88
+ const v = B(null), h = (i) => c("cancel", {
89
+ value: null,
90
+ event: i
91
+ }), C = () => {
92
+ var i, r;
93
+ e.show && ((r = (i = v.value) == null ? void 0 : i.$el.querySelector("input")) == null || r.focus());
94
+ };
95
+ E(() => e.show, () => P(C), {
96
+ immediate: !0,
97
+ flush: "post"
98
+ });
99
+ const g = M(() => {
100
+ const i = Math.max(1, Math.round((o.dateRange.end.getTime() - o.dateRange.start.getTime()) / A)), r = o.orientation === "horizontal" ? Math.max(1, o.groups.length) : 1;
101
+ return o.activeViewName.toLowerCase() !== "timeline" && i * r <= 1 ? {
102
+ position: "top",
103
+ collision: {
104
+ horizontal: "fit",
105
+ vertical: "flip"
106
+ },
107
+ margin: {
108
+ horizontal: 0,
109
+ vertical: O
110
+ }
111
+ } : {
112
+ position: "right",
113
+ collision: {
114
+ horizontal: "flip",
115
+ vertical: "fit"
116
+ },
117
+ margin: {
118
+ horizontal: O,
119
+ vertical: 0
120
+ }
121
+ };
122
+ });
123
+ E([() => e.show, () => e.anchor], ([i], r, l) => {
124
+ var p;
125
+ if (!i || typeof document == "undefined")
126
+ return;
127
+ const s = ((p = e.anchor) == null ? void 0 : p.ownerDocument) || document, f = (n) => {
128
+ var m;
129
+ const u = (m = v.value) == null ? void 0 : m.$el.closest(".k-popover");
130
+ u != null && u.contains(n.target) || h();
131
+ };
132
+ s.addEventListener("mousedown", f), l(() => s.removeEventListener("mousedown", f));
133
+ }, {
134
+ immediate: !0
135
+ }), J(() => e.show, () => e.anchor || null, () => h());
136
+ const z = (i, r) => {
137
+ const l = {
138
+ ...e.dataItem
139
+ };
140
+ Y(l, o.fields.title, i.valueGetter(o.fields.title)), c("moreoptions", {
141
+ value: l,
142
+ event: r
143
+ });
144
+ };
145
+ return () => {
146
+ const i = G(a == null ? void 0 : a.proxy), r = H(a == null ? void 0 : a.proxy), l = (n) => r.toLanguageString(n, X[n]), s = S(e.dataItem, o.fields.start), f = S(e.dataItem, o.fields.end), p = s && f ? U(i, s, f, !!S(e.dataItem, o.fields.isAllDay), l(Z)) : "";
147
+ return t(q, {
148
+ key: s == null ? void 0 : s.getTime(),
149
+ initialValues: e.dataItem,
150
+ validator: e.validator,
151
+ ignoreModified: !0,
152
+ onSubmit: (n, u) => c("submit", {
153
+ value: n,
154
+ event: u
155
+ }),
156
+ renderForm: (n) => {
157
+ let u, m, b;
158
+ return t(Q, {
159
+ anchor: e.anchor,
160
+ show: e.show,
161
+ position: g.value.position,
162
+ collision: g.value.collision,
163
+ margin: g.value.margin,
164
+ callout: !1,
165
+ title: l(x),
166
+ style: {
167
+ width: ne
168
+ },
169
+ autoFocus: !1,
170
+ animate: {
171
+ openDuration: 1,
172
+ closeDuration: 1
173
+ },
174
+ onOpen: C,
175
+ onKeydown: () => h()
176
+ }, {
177
+ default: () => [t(N, {
178
+ ref: v,
179
+ horizontal: !0,
180
+ class: "k-scheduler-edit-form"
181
+ }, {
182
+ default: () => [t(I, null, {
183
+ default: () => [t(D, {
184
+ class: "k-form-label"
185
+ }, {
186
+ default: () => [t(F, {
187
+ icon: W,
188
+ size: "xlarge"
189
+ }, null)]
190
+ }), t("div", {
191
+ class: "k-form-field-wrap",
192
+ onKeydown: (d) => {
193
+ var y;
194
+ d.key === "Enter" && (d.preventDefault(), (y = n.onSubmit) == null || y.call(n, d));
195
+ }
196
+ }, [t(K, {
197
+ name: o.fields.title,
198
+ component: ie,
199
+ ariaLabel: l(ee),
200
+ placeholder: l(x)
201
+ }, null)])]
202
+ }), t(I, null, {
203
+ default: () => [t(D, {
204
+ class: "k-form-label"
205
+ }, {
206
+ default: () => [t(F, {
207
+ icon: $,
208
+ size: "xlarge"
209
+ }, null)]
210
+ }), t("div", {
211
+ class: "k-form-field-wrap"
212
+ }, [t("div", {
213
+ class: "k-scheduler-edit-form-row k-color-subtle"
214
+ }, [p])])]
215
+ })]
216
+ }), t(R, null, {
217
+ default: () => [t(k, {
218
+ type: "button",
219
+ fillMode: "flat",
220
+ themeColor: "primary",
221
+ onClick: (d) => z(n, d)
222
+ }, w(u = l(te)) ? u : {
223
+ default: () => [u]
224
+ }), t("span", {
225
+ class: "k-spacer"
226
+ }, null), t(k, {
227
+ type: "button",
228
+ onClick: (d) => h(d)
229
+ }, w(m = l(oe)) ? m : {
230
+ default: () => [m]
231
+ }), t(k, {
232
+ type: "button",
233
+ themeColor: "primary",
234
+ disabled: !n.allowSubmit,
235
+ onClick: n.onSubmit
236
+ }, w(b = l(le)) ? b : {
237
+ default: () => [b]
238
+ })]
239
+ })]
240
+ });
241
+ }
242
+ }, null);
243
+ };
244
+ }
245
+ }), we = {};
246
+ export {
247
+ Se as SchedulerQuickCreateForm,
248
+ we as schedulerQuickCreateFormDefaultProps
249
+ };