kalendly 0.3.3 → 0.3.5
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.
- package/README.md +205 -94
- package/dist/core/index.js +3 -3
- package/dist/core/index.js.map +1 -1
- package/dist/core/index.mjs +3 -3
- package/dist/core/index.mjs.map +1 -1
- package/dist/index.d.mts +3 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.js +186 -161
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +186 -161
- package/dist/index.mjs.map +1 -1
- package/dist/index.umd.js +186 -161
- package/dist/index.umd.js.map +1 -1
- package/dist/styles/calendar.css +554 -549
- package/package.json +11 -9
package/dist/index.js
CHANGED
|
@@ -174,13 +174,13 @@ function generateCalendarDates(year, month, events = [], weekStartsOn = 0) {
|
|
|
174
174
|
function getCellClasses(calendarDate) {
|
|
175
175
|
const classes = [];
|
|
176
176
|
if (!calendarDate.isCurrentMonth) {
|
|
177
|
-
classes.push("
|
|
177
|
+
classes.push("kalendly-cell-other-month");
|
|
178
178
|
}
|
|
179
179
|
if (calendarDate.isToday) {
|
|
180
|
-
classes.push("
|
|
180
|
+
classes.push("kalendly-cell-today");
|
|
181
181
|
}
|
|
182
182
|
if (calendarDate.hasEvents) {
|
|
183
|
-
classes.push("
|
|
183
|
+
classes.push("kalendly-cell-has-event");
|
|
184
184
|
}
|
|
185
185
|
return classes;
|
|
186
186
|
}
|
|
@@ -744,13 +744,25 @@ var init_CalendarElement = __esm({
|
|
|
744
744
|
reaction(run) {
|
|
745
745
|
try {
|
|
746
746
|
run();
|
|
747
|
+
this._initError = null;
|
|
747
748
|
} catch (error) {
|
|
748
749
|
this._initError = error;
|
|
750
|
+
this.renderError(error);
|
|
749
751
|
throw error;
|
|
750
752
|
}
|
|
751
753
|
}
|
|
754
|
+
// A thrown configuration error otherwise leaves an empty element, and the
|
|
755
|
+
// reason only in a console nobody is watching. Say what is wrong where the
|
|
756
|
+
// calendar should be.
|
|
757
|
+
renderError(error) {
|
|
758
|
+
const message = error.message.replace(/^<kal-calendar>\s*/, "");
|
|
759
|
+
this.innerHTML = `
|
|
760
|
+
<div class="kalendly-error" role="alert">
|
|
761
|
+
<strong>kalendly</strong> ${escapeHtml(message)}
|
|
762
|
+
</div>`;
|
|
763
|
+
}
|
|
752
764
|
connectedCallback() {
|
|
753
|
-
this.classList.add("kalendly
|
|
765
|
+
this.classList.add("kalendly");
|
|
754
766
|
this.reaction(() => {
|
|
755
767
|
this.initEngine();
|
|
756
768
|
this.render();
|
|
@@ -758,7 +770,7 @@ var init_CalendarElement = __esm({
|
|
|
758
770
|
}
|
|
759
771
|
disconnectedCallback() {
|
|
760
772
|
this.cleanup();
|
|
761
|
-
this.classList.remove("kalendly
|
|
773
|
+
this.classList.remove("kalendly");
|
|
762
774
|
this.innerHTML = "";
|
|
763
775
|
}
|
|
764
776
|
attributeChangedCallback(name, oldVal, newVal) {
|
|
@@ -775,19 +787,10 @@ var init_CalendarElement = __esm({
|
|
|
775
787
|
this._timeRangeEnd = null;
|
|
776
788
|
this._timeRangeComplete = false;
|
|
777
789
|
}
|
|
778
|
-
this.reinit();
|
|
790
|
+
this.reaction(() => this.reinit());
|
|
779
791
|
}
|
|
780
792
|
get headingText() {
|
|
781
|
-
|
|
782
|
-
if (heading !== null) return heading;
|
|
783
|
-
const title = this.getAttribute("title");
|
|
784
|
-
if (title !== null && !_CalendarElement.titleDeprecationWarned) {
|
|
785
|
-
_CalendarElement.titleDeprecationWarned = true;
|
|
786
|
-
console.warn(
|
|
787
|
-
`<kal-calendar> the title attribute is deprecated and will be removed in a future release \u2014 use heading instead. title is a global HTML attribute, so the browser also renders it as a tooltip over the whole calendar.`
|
|
788
|
-
);
|
|
789
|
-
}
|
|
790
|
-
return title;
|
|
793
|
+
return this.getAttribute("heading");
|
|
791
794
|
}
|
|
792
795
|
get slotDuration() {
|
|
793
796
|
const raw = this.getAttribute("slot-duration");
|
|
@@ -796,10 +799,9 @@ var init_CalendarElement = __esm({
|
|
|
796
799
|
if (Number.isInteger(minutes) && minutes > 0 && MINUTES_PER_DAY % minutes === 0) {
|
|
797
800
|
return minutes;
|
|
798
801
|
}
|
|
799
|
-
|
|
800
|
-
`<kal-calendar> slot-duration="${raw}" must be a positive whole number of minutes that divides ${MINUTES_PER_DAY}
|
|
802
|
+
throw new Error(
|
|
803
|
+
`<kal-calendar> slot-duration="${raw}" must be a positive whole number of minutes that divides ${MINUTES_PER_DAY}.`
|
|
801
804
|
);
|
|
802
|
-
return DEFAULT_SLOT_DURATION;
|
|
803
805
|
}
|
|
804
806
|
warnMissingEndTime(events) {
|
|
805
807
|
for (const event of events) {
|
|
@@ -813,17 +815,37 @@ var init_CalendarElement = __esm({
|
|
|
813
815
|
}
|
|
814
816
|
}
|
|
815
817
|
get monthCount() {
|
|
816
|
-
const
|
|
817
|
-
if (
|
|
818
|
-
|
|
818
|
+
const raw = this.getAttribute("months");
|
|
819
|
+
if (raw === null) return 1;
|
|
820
|
+
const requested = Number(raw);
|
|
821
|
+
if (!Number.isInteger(requested) || requested < 1) {
|
|
822
|
+
throw new Error(
|
|
823
|
+
`<kal-calendar> months="${raw}" must be a whole number of 1 or more.`
|
|
824
|
+
);
|
|
825
|
+
}
|
|
826
|
+
if (requested > _CalendarElement.MAX_MONTHS) {
|
|
827
|
+
throw new Error(
|
|
828
|
+
`<kal-calendar> months="${raw}" exceeds the maximum of ${_CalendarElement.MAX_MONTHS}.`
|
|
829
|
+
);
|
|
830
|
+
}
|
|
831
|
+
return requested;
|
|
832
|
+
}
|
|
833
|
+
boundaryYear(attr, fallback) {
|
|
834
|
+
const raw = this.getAttribute(attr);
|
|
835
|
+
if (raw === null || raw === "") return fallback;
|
|
836
|
+
const year = Number(raw);
|
|
837
|
+
if (!Number.isInteger(year)) {
|
|
838
|
+
throw new Error(
|
|
839
|
+
`<kal-calendar> ${attr}="${raw}" must be a whole number.`
|
|
840
|
+
);
|
|
841
|
+
}
|
|
842
|
+
return year;
|
|
819
843
|
}
|
|
820
844
|
get minYear() {
|
|
821
|
-
|
|
822
|
-
return val ? parseInt(val, 10) : (/* @__PURE__ */ new Date()).getFullYear() - 30;
|
|
845
|
+
return this.boundaryYear("min-year", (/* @__PURE__ */ new Date()).getFullYear() - 30);
|
|
823
846
|
}
|
|
824
847
|
get maxYear() {
|
|
825
|
-
|
|
826
|
-
return val ? parseInt(val, 10) : (/* @__PURE__ */ new Date()).getFullYear() + 10;
|
|
848
|
+
return this.boundaryYear("max-year", (/* @__PURE__ */ new Date()).getFullYear() + 10);
|
|
827
849
|
}
|
|
828
850
|
boundaryDate(attr) {
|
|
829
851
|
const val = this.getAttribute(attr);
|
|
@@ -881,7 +903,7 @@ var init_CalendarElement = __esm({
|
|
|
881
903
|
});
|
|
882
904
|
}
|
|
883
905
|
reinit() {
|
|
884
|
-
if (!this.
|
|
906
|
+
if (!this.isConnected) return;
|
|
885
907
|
this.cleanup();
|
|
886
908
|
this.initEngine();
|
|
887
909
|
this.scheduleRender();
|
|
@@ -933,7 +955,8 @@ var init_CalendarElement = __esm({
|
|
|
933
955
|
];
|
|
934
956
|
}
|
|
935
957
|
get updateComplete() {
|
|
936
|
-
|
|
958
|
+
if (this.pendingUpdate) return this.pendingUpdate;
|
|
959
|
+
return this._initError ? Promise.reject(this._initError) : Promise.resolve();
|
|
937
960
|
}
|
|
938
961
|
scheduleRender() {
|
|
939
962
|
if (this.pendingUpdate) return;
|
|
@@ -941,8 +964,10 @@ var init_CalendarElement = __esm({
|
|
|
941
964
|
this.pendingUpdate = null;
|
|
942
965
|
try {
|
|
943
966
|
this.render();
|
|
967
|
+
this._initError = null;
|
|
944
968
|
} catch (error) {
|
|
945
969
|
this._initError = error;
|
|
970
|
+
this.renderError(error);
|
|
946
971
|
throw error;
|
|
947
972
|
}
|
|
948
973
|
});
|
|
@@ -1019,6 +1044,7 @@ var init_CalendarElement = __esm({
|
|
|
1019
1044
|
}
|
|
1020
1045
|
this.boundaryDate("min-date");
|
|
1021
1046
|
this.boundaryDate("max-date");
|
|
1047
|
+
void this.slotDuration;
|
|
1022
1048
|
void this.availableDays;
|
|
1023
1049
|
void this.availableHours;
|
|
1024
1050
|
this.assertHorizonOrdered();
|
|
@@ -1063,72 +1089,72 @@ var init_CalendarElement = __esm({
|
|
|
1063
1089
|
return status ? labels[status] || status.toUpperCase() : "";
|
|
1064
1090
|
};
|
|
1065
1091
|
return `
|
|
1066
|
-
<div class="event-card" style="border-left-color: ${borderColor}">
|
|
1067
|
-
<div class="event-header">
|
|
1068
|
-
${event.name ? `<div class="event-title">${escapeHtml(event.name)}</div>` : ""}
|
|
1069
|
-
<div class="event-badges">
|
|
1070
|
-
${event.category ? `<span class="badge category
|
|
1071
|
-
${event.priority ? `<span class="badge priority
|
|
1072
|
-
${event.status && event.status !== "scheduled" ? `<span class="badge status
|
|
1092
|
+
<div class="kalendly-event-card" style="border-left-color: ${borderColor}">
|
|
1093
|
+
<div class="kalendly-event-header">
|
|
1094
|
+
${event.name ? `<div class="kalendly-event-title">${escapeHtml(event.name)}</div>` : ""}
|
|
1095
|
+
<div class="kalendly-event-badges">
|
|
1096
|
+
${event.category ? `<span class="kalendly-badge kalendly-category-${slugifyToken(event.category)}">${escapeHtml(getCategoryLabel(event.category))}</span>` : ""}
|
|
1097
|
+
${event.priority ? `<span class="kalendly-badge kalendly-priority-${slugifyToken(event.priority)}">${escapeHtml(getPriorityLabel(event.priority))}</span>` : ""}
|
|
1098
|
+
${event.status && event.status !== "scheduled" ? `<span class="kalendly-badge kalendly-status-${slugifyToken(event.status)}">${escapeHtml(getStatusLabel(event.status))}</span>` : ""}
|
|
1073
1099
|
</div>
|
|
1074
1100
|
</div>
|
|
1075
1101
|
|
|
1076
1102
|
${timeRange ? `
|
|
1077
|
-
<div class="event-time">
|
|
1078
|
-
<span class="event-time-label">Time:</span>
|
|
1079
|
-
<span class="event-time-value">${escapeHtml(timeRange)}</span>
|
|
1103
|
+
<div class="kalendly-event-time">
|
|
1104
|
+
<span class="kalendly-event-time-label">Time:</span>
|
|
1105
|
+
<span class="kalendly-event-time-value">${escapeHtml(timeRange)}</span>
|
|
1080
1106
|
</div>
|
|
1081
1107
|
` : ""}
|
|
1082
1108
|
|
|
1083
1109
|
${event.description ? `
|
|
1084
|
-
<div class="event-description">${escapeHtml(event.description)}</div>
|
|
1110
|
+
<div class="kalendly-event-description">${escapeHtml(event.description)}</div>
|
|
1085
1111
|
` : ""}
|
|
1086
1112
|
|
|
1087
1113
|
${event.location ? `
|
|
1088
|
-
<div class="event-time">
|
|
1089
|
-
<span class="event-time-label">Location:</span>
|
|
1090
|
-
<span class="event-time-value">${escapeHtml(event.location)}</span>
|
|
1114
|
+
<div class="kalendly-event-time">
|
|
1115
|
+
<span class="kalendly-event-time-label">Location:</span>
|
|
1116
|
+
<span class="kalendly-event-time-value">${escapeHtml(event.location)}</span>
|
|
1091
1117
|
</div>
|
|
1092
1118
|
` : ""}
|
|
1093
1119
|
|
|
1094
1120
|
${attendeesList ? `
|
|
1095
|
-
<div class="event-time">
|
|
1096
|
-
<span class="event-time-label">Attendees:</span>
|
|
1097
|
-
<span class="event-time-value">${escapeHtml(attendeesList)}</span>
|
|
1121
|
+
<div class="kalendly-event-time">
|
|
1122
|
+
<span class="kalendly-event-time-label">Attendees:</span>
|
|
1123
|
+
<span class="kalendly-event-time-value">${escapeHtml(attendeesList)}</span>
|
|
1098
1124
|
</div>
|
|
1099
1125
|
` : ""}
|
|
1100
1126
|
|
|
1101
1127
|
${event.organizer ? `
|
|
1102
|
-
<div class="event-time">
|
|
1103
|
-
<span class="event-time-label">Organizer:</span>
|
|
1104
|
-
<span class="event-time-value">${escapeHtml(event.organizer)}</span>
|
|
1128
|
+
<div class="kalendly-event-time">
|
|
1129
|
+
<span class="kalendly-event-time-label">Organizer:</span>
|
|
1130
|
+
<span class="kalendly-event-time-value">${escapeHtml(event.organizer)}</span>
|
|
1105
1131
|
</div>
|
|
1106
1132
|
` : ""}
|
|
1107
1133
|
|
|
1108
1134
|
${event.notes ? `
|
|
1109
|
-
<div class="event-time">
|
|
1110
|
-
<span class="event-time-label">Notes:</span>
|
|
1111
|
-
<span class="event-time-value">${escapeHtml(event.notes)}</span>
|
|
1135
|
+
<div class="kalendly-event-time">
|
|
1136
|
+
<span class="kalendly-event-time-label">Notes:</span>
|
|
1137
|
+
<span class="kalendly-event-time-value">${escapeHtml(event.notes)}</span>
|
|
1112
1138
|
</div>
|
|
1113
1139
|
` : ""}
|
|
1114
1140
|
|
|
1115
1141
|
${event.url ? `
|
|
1116
|
-
<div class="event-time">
|
|
1117
|
-
<a href="${escapeHtml(safeUrl(event.url))}" target="_blank" rel="noopener noreferrer" class="event-link">
|
|
1142
|
+
<div class="kalendly-event-time">
|
|
1143
|
+
<a href="${escapeHtml(safeUrl(event.url))}" target="_blank" rel="noopener noreferrer" class="kalendly-event-link">
|
|
1118
1144
|
View Details \u2192
|
|
1119
1145
|
</a>
|
|
1120
1146
|
</div>
|
|
1121
1147
|
` : ""}
|
|
1122
1148
|
|
|
1123
1149
|
${event.tags && event.tags.length > 0 ? `
|
|
1124
|
-
<div class="event-tags">
|
|
1125
|
-
${event.tags.map((tag) => `<span class="event-tag">${escapeHtml(tag)}</span>`).join("")}
|
|
1150
|
+
<div class="kalendly-event-tags">
|
|
1151
|
+
${event.tags.map((tag) => `<span class="kalendly-event-tag">${escapeHtml(tag)}</span>`).join("")}
|
|
1126
1152
|
</div>
|
|
1127
1153
|
` : ""}
|
|
1128
1154
|
</div>
|
|
1129
1155
|
`;
|
|
1130
1156
|
};
|
|
1131
|
-
const defaultRenderNoEvents = () => '<div class="no-events-message">No events scheduled for this day.</div>';
|
|
1157
|
+
const defaultRenderNoEvents = () => '<div class="kalendly-no-events-message">No events scheduled for this day.</div>';
|
|
1132
1158
|
const renderEvent = this._renderEvent || defaultRenderEvent;
|
|
1133
1159
|
const renderNoEvents = this._renderNoEvents || defaultRenderNoEvents;
|
|
1134
1160
|
const renderTimeGrid = (date) => {
|
|
@@ -1153,29 +1179,29 @@ var init_CalendarElement = __esm({
|
|
|
1153
1179
|
const isRangeEnd = inTimeRange && endTime === this._timeRangeEnd;
|
|
1154
1180
|
const isInRange = inTimeRange && !isRangeStart && !isRangeEnd;
|
|
1155
1181
|
const slotClasses = [
|
|
1156
|
-
"time-grid-slot",
|
|
1157
|
-
offered ? "" : "time-grid-slot-out-of-range",
|
|
1158
|
-
isBooked ? "time-grid-slot-blocked" : "time-grid-slot-open",
|
|
1159
|
-
isRangeStart ? "time-grid-slot-range-start" : "",
|
|
1160
|
-
isRangeEnd ? "time-grid-slot-range-end" : "",
|
|
1161
|
-
isInRange ? "time-grid-slot-in-range" : ""
|
|
1182
|
+
"kalendly-time-grid-slot",
|
|
1183
|
+
offered ? "" : "kalendly-time-grid-slot-out-of-range",
|
|
1184
|
+
isBooked ? "kalendly-time-grid-slot-blocked" : "kalendly-time-grid-slot-open",
|
|
1185
|
+
isRangeStart ? "kalendly-time-grid-slot-range-start" : "",
|
|
1186
|
+
isRangeEnd ? "kalendly-time-grid-slot-range-end" : "",
|
|
1187
|
+
isInRange ? "kalendly-time-grid-slot-in-range" : ""
|
|
1162
1188
|
].filter(Boolean).join(" ");
|
|
1163
1189
|
const slotAttrs = `${offered ? 'data-action="select-slot" ' : ""}data-start-time="${startTime}" data-end-time="${endTime}" data-date="${date.toISOString()}" data-booked="${isBooked}"`;
|
|
1164
1190
|
const status = !offered ? "Closed" : isBooked ? "Booked" : "Available";
|
|
1165
1191
|
return `
|
|
1166
1192
|
<div class="${slotClasses}" ${slotAttrs}>
|
|
1167
|
-
<span class="time-grid-label">${startTime}</span>
|
|
1168
|
-
<span class="time-grid-status">${status}</span>
|
|
1193
|
+
<span class="kalendly-time-grid-label">${startTime}</span>
|
|
1194
|
+
<span class="kalendly-time-grid-status">${status}</span>
|
|
1169
1195
|
</div>`;
|
|
1170
1196
|
});
|
|
1171
|
-
const gridClasses = selectable ? "time-grid time-grid-selectable" : "time-grid";
|
|
1197
|
+
const gridClasses = selectable ? "kalendly-time-grid kalendly-time-grid-selectable" : "kalendly-time-grid";
|
|
1172
1198
|
return `<div class="${gridClasses}">${slots.join("")}</div>`;
|
|
1173
1199
|
};
|
|
1174
1200
|
const multiMonth = viewModel.panes.length > 1;
|
|
1175
1201
|
const renderPane = (pane) => `
|
|
1176
|
-
<div class="
|
|
1177
|
-
${multiMonth ? `<div class="
|
|
1178
|
-
<table class="
|
|
1202
|
+
<div class="kalendly-pane">
|
|
1203
|
+
${multiMonth ? `<div class="kalendly-pane-caption">${escapeHtml(pane.monthAndYearText)}</div>` : ""}
|
|
1204
|
+
<table class="kalendly-table kalendly-table-bordered">
|
|
1179
1205
|
<thead>
|
|
1180
1206
|
<tr>
|
|
1181
1207
|
${viewModel.days.map((day) => `<th>${day.slice(0, 3)}</th>`).join("")}
|
|
@@ -1186,7 +1212,7 @@ var init_CalendarElement = __esm({
|
|
|
1186
1212
|
{ length: 6 },
|
|
1187
1213
|
() => `<tr>${Array.from(
|
|
1188
1214
|
{ length: 7 },
|
|
1189
|
-
() => `<td class="
|
|
1215
|
+
() => `<td class="kalendly-skeleton" aria-hidden="true"></td>`
|
|
1190
1216
|
).join("")}</tr>`
|
|
1191
1217
|
).join("") : pane.calendarDates.map(
|
|
1192
1218
|
(week) => `
|
|
@@ -1198,7 +1224,7 @@ var init_CalendarElement = __esm({
|
|
|
1198
1224
|
calendarDate.date,
|
|
1199
1225
|
viewModel.selectedDate
|
|
1200
1226
|
)) {
|
|
1201
|
-
classes.push("
|
|
1227
|
+
classes.push("kalendly-cell-selected");
|
|
1202
1228
|
}
|
|
1203
1229
|
if (availabilityMode) {
|
|
1204
1230
|
const bucket = this.resolveBucket(
|
|
@@ -1206,16 +1232,16 @@ var init_CalendarElement = __esm({
|
|
|
1206
1232
|
);
|
|
1207
1233
|
const custom = (this._availabilityColors ?? {})[bucket];
|
|
1208
1234
|
classes.push(
|
|
1209
|
-
`availability-${slugifyToken(bucket)}`
|
|
1235
|
+
`kalendly-availability-${slugifyToken(bucket)}`
|
|
1210
1236
|
);
|
|
1211
1237
|
if (custom) {
|
|
1212
|
-
classes.push("availability-status");
|
|
1238
|
+
classes.push("kalendly-availability-status");
|
|
1213
1239
|
cellAttrs.push(
|
|
1214
|
-
`style="--availability-color: ${escapeHtml(safeColor(custom))}"`
|
|
1240
|
+
`style="--kalendly-availability-color: ${escapeHtml(safeColor(custom))}"`
|
|
1215
1241
|
);
|
|
1216
1242
|
}
|
|
1217
1243
|
if (!this.isDateSelectable(calendarDate.date)) {
|
|
1218
|
-
classes.push("availability-unselectable");
|
|
1244
|
+
classes.push("kalendly-availability-unselectable");
|
|
1219
1245
|
}
|
|
1220
1246
|
cellAttrs.push(
|
|
1221
1247
|
`aria-label="${escapeHtml(bucket)}"`
|
|
@@ -1224,12 +1250,12 @@ var init_CalendarElement = __esm({
|
|
|
1224
1250
|
if (availabilityMode === "day" && selectable) {
|
|
1225
1251
|
const d = calendarDate.date;
|
|
1226
1252
|
if (this._rangeStart && isSameDay2(d, this._rangeStart))
|
|
1227
|
-
classes.push("availability-range-start");
|
|
1253
|
+
classes.push("kalendly-availability-range-start");
|
|
1228
1254
|
if (this._rangeEnd && isSameDay2(d, this._rangeEnd))
|
|
1229
|
-
classes.push("availability-range-end");
|
|
1255
|
+
classes.push("kalendly-availability-range-end");
|
|
1230
1256
|
if (this._rangeStart && this._rangeEnd) {
|
|
1231
1257
|
if (d > this._rangeStart && d < this._rangeEnd)
|
|
1232
|
-
classes.push("availability-in-range");
|
|
1258
|
+
classes.push("kalendly-availability-in-range");
|
|
1233
1259
|
}
|
|
1234
1260
|
}
|
|
1235
1261
|
const dateString = calendarDate.date.toISOString();
|
|
@@ -1237,7 +1263,7 @@ var init_CalendarElement = __esm({
|
|
|
1237
1263
|
calendarDate.date
|
|
1238
1264
|
);
|
|
1239
1265
|
if (!offered) {
|
|
1240
|
-
classes.push("
|
|
1266
|
+
classes.push("kalendly-cell-out-of-range");
|
|
1241
1267
|
}
|
|
1242
1268
|
return `
|
|
1243
1269
|
<td
|
|
@@ -1260,64 +1286,64 @@ var init_CalendarElement = __esm({
|
|
|
1260
1286
|
`;
|
|
1261
1287
|
const html = `
|
|
1262
1288
|
${title ? `
|
|
1263
|
-
<div class="
|
|
1289
|
+
<div class="kalendly-title">
|
|
1264
1290
|
<h1>${escapeHtml(title)}</h1>
|
|
1265
1291
|
</div>
|
|
1266
1292
|
` : ""}
|
|
1267
1293
|
|
|
1268
|
-
<div class="
|
|
1269
|
-
<div class="
|
|
1270
|
-
<div class="
|
|
1271
|
-
<button type="button" class="
|
|
1294
|
+
<div class="kalendly-content">
|
|
1295
|
+
<div class="kalendly-card">
|
|
1296
|
+
<div class="kalendly-nav-header">
|
|
1297
|
+
<button type="button" class="kalendly-nav-arrow" data-action="previous" aria-label="Previous month">
|
|
1272
1298
|
‹
|
|
1273
1299
|
</button>
|
|
1274
1300
|
|
|
1275
|
-
<div class="
|
|
1301
|
+
<div class="kalendly-picker-container" data-picker-container>
|
|
1276
1302
|
<button
|
|
1277
1303
|
type="button"
|
|
1278
|
-
class="
|
|
1304
|
+
class="kalendly-picker-btn"
|
|
1279
1305
|
data-action="toggle-picker"
|
|
1280
1306
|
aria-expanded="${this.pickerOpen ? "true" : "false"}"
|
|
1281
1307
|
aria-haspopup="true"
|
|
1282
1308
|
>
|
|
1283
1309
|
${useShortMonths ? `${MONTHS[viewModel.currentMonth]} ${viewModel.currentYear}` : viewModel.monthAndYearText}
|
|
1284
|
-
<span class="
|
|
1310
|
+
<span class="kalendly-picker-chevron">▾</span>
|
|
1285
1311
|
</button>
|
|
1286
1312
|
|
|
1287
1313
|
${this.pickerOpen ? `
|
|
1288
|
-
<div class="
|
|
1289
|
-
<div class="
|
|
1314
|
+
<div class="kalendly-picker-dropdown">
|
|
1315
|
+
<div class="kalendly-picker-year-row">
|
|
1290
1316
|
<button
|
|
1291
1317
|
type="button"
|
|
1292
|
-
class="
|
|
1318
|
+
class="kalendly-picker-year-arrow"
|
|
1293
1319
|
data-action="year-prev"
|
|
1294
1320
|
${viewModel.currentYear <= minYear ? "disabled" : ""}
|
|
1295
1321
|
aria-label="Previous year"
|
|
1296
1322
|
>‹</button>
|
|
1297
1323
|
<input
|
|
1298
1324
|
type="text"
|
|
1299
|
-
class="
|
|
1325
|
+
class="kalendly-picker-year-input${!this.yearInputValid ? " kalendly-invalid" : ""}"
|
|
1300
1326
|
value="${escapeHtml(this.yearInput || viewModel.currentYear)}"
|
|
1301
1327
|
data-year-input
|
|
1302
1328
|
aria-label="Year"
|
|
1303
1329
|
/>
|
|
1304
1330
|
<button
|
|
1305
1331
|
type="button"
|
|
1306
|
-
class="
|
|
1332
|
+
class="kalendly-picker-year-arrow"
|
|
1307
1333
|
data-action="year-next"
|
|
1308
1334
|
${viewModel.currentYear >= maxYear ? "disabled" : ""}
|
|
1309
1335
|
aria-label="Next year"
|
|
1310
1336
|
>›</button>
|
|
1311
1337
|
</div>
|
|
1312
1338
|
|
|
1313
|
-
<div class="
|
|
1339
|
+
<div class="kalendly-picker-months">
|
|
1314
1340
|
${(useShortMonths ? MONTHS : MONTHS_FULL).map((month, index) => {
|
|
1315
1341
|
const isSelected = index === viewModel.currentMonth;
|
|
1316
1342
|
const isCurrent = index === todayMonth && viewModel.currentYear === todayYear;
|
|
1317
1343
|
return `
|
|
1318
1344
|
<button
|
|
1319
1345
|
type="button"
|
|
1320
|
-
class="
|
|
1346
|
+
class="kalendly-picker-month${isSelected ? " kalendly-selected" : ""}${isCurrent ? " kalendly-current-month" : ""}"
|
|
1321
1347
|
data-action="select-month"
|
|
1322
1348
|
data-month="${index}"
|
|
1323
1349
|
>${month}</button>
|
|
@@ -1330,34 +1356,34 @@ var init_CalendarElement = __esm({
|
|
|
1330
1356
|
|
|
1331
1357
|
<button
|
|
1332
1358
|
type="button"
|
|
1333
|
-
class="
|
|
1359
|
+
class="kalendly-today-btn"
|
|
1334
1360
|
data-action="today"
|
|
1335
1361
|
${isCurrentMonth ? "disabled" : ""}
|
|
1336
1362
|
>Today</button>
|
|
1337
1363
|
|
|
1338
|
-
<button type="button" class="
|
|
1364
|
+
<button type="button" class="kalendly-nav-arrow" data-action="next" aria-label="Next month">
|
|
1339
1365
|
›
|
|
1340
1366
|
</button>
|
|
1341
1367
|
</div>
|
|
1342
1368
|
|
|
1343
|
-
<div class="
|
|
1369
|
+
<div class="kalendly-panes">
|
|
1344
1370
|
${viewModel.panes.map(renderPane).join("")}
|
|
1345
1371
|
</div>
|
|
1346
1372
|
|
|
1347
1373
|
${!isLoading && availabilityMode !== "day" && viewModel.selectedDate ? `
|
|
1348
|
-
<div class="
|
|
1349
|
-
<div class="popup-header">
|
|
1374
|
+
<div class="kalendly-popup">
|
|
1375
|
+
<div class="kalendly-popup-header">
|
|
1350
1376
|
<h2>${viewModel.scheduleDay}</h2>
|
|
1351
|
-
<button type="button" class="popup-close" data-action="close-popup" aria-label="Close">\u2715</button>
|
|
1377
|
+
<button type="button" class="kalendly-popup-close" data-action="close-popup" aria-label="Close">\u2715</button>
|
|
1352
1378
|
</div>
|
|
1353
1379
|
|
|
1354
1380
|
${showScrollHint ? `
|
|
1355
|
-
<div class="scroll-hint">
|
|
1381
|
+
<div class="kalendly-scroll-hint">
|
|
1356
1382
|
\u2193 Scroll to see more events \u2193
|
|
1357
1383
|
</div>
|
|
1358
1384
|
` : ""}
|
|
1359
1385
|
|
|
1360
|
-
<div class="events-container">
|
|
1386
|
+
<div class="kalendly-events-container">
|
|
1361
1387
|
${availabilityMode === "time" ? renderTimeGrid(viewModel.selectedDate) : viewModel.tasks.length > 0 ? viewModel.tasks.map((event) => renderEvent(event)).join("") : renderNoEvents()}
|
|
1362
1388
|
</div>
|
|
1363
1389
|
</div>
|
|
@@ -1573,7 +1599,7 @@ var init_CalendarElement = __esm({
|
|
|
1573
1599
|
this.yearInput = value;
|
|
1574
1600
|
const year = parseInt(value, 10);
|
|
1575
1601
|
this.yearInputValid = value === "" || year >= minYear && year <= maxYear;
|
|
1576
|
-
target.classList.toggle("invalid", !this.yearInputValid);
|
|
1602
|
+
target.classList.toggle("kalendly-invalid", !this.yearInputValid);
|
|
1577
1603
|
}
|
|
1578
1604
|
};
|
|
1579
1605
|
this.delegatedBlurHandler = (e) => {
|
|
@@ -1585,7 +1611,7 @@ var init_CalendarElement = __esm({
|
|
|
1585
1611
|
this.yearInput = String(vm.currentYear);
|
|
1586
1612
|
this.yearInputValid = true;
|
|
1587
1613
|
target.value = this.yearInput;
|
|
1588
|
-
target.classList.remove("invalid");
|
|
1614
|
+
target.classList.remove("kalendly-invalid");
|
|
1589
1615
|
} else if (year !== vm.currentYear) {
|
|
1590
1616
|
this.dispatchMonthChange(year, vm.currentMonth);
|
|
1591
1617
|
this.actions.jump(year, vm.currentMonth);
|
|
@@ -1608,7 +1634,7 @@ var init_CalendarElement = __esm({
|
|
|
1608
1634
|
this.render();
|
|
1609
1635
|
return;
|
|
1610
1636
|
}
|
|
1611
|
-
const popup = this.querySelector(".
|
|
1637
|
+
const popup = this.querySelector(".kalendly-popup");
|
|
1612
1638
|
if (popup) {
|
|
1613
1639
|
this.engine.clearSelection();
|
|
1614
1640
|
}
|
|
@@ -1678,72 +1704,71 @@ var init_CalendarElement = __esm({
|
|
|
1678
1704
|
"heading",
|
|
1679
1705
|
"months",
|
|
1680
1706
|
"slot-duration",
|
|
1681
|
-
"title",
|
|
1682
1707
|
"use-short-month-names",
|
|
1683
1708
|
"availability-mode",
|
|
1684
1709
|
"selectable",
|
|
1685
1710
|
"loading"
|
|
1686
1711
|
];
|
|
1687
1712
|
_CalendarElement.themeMap = {
|
|
1688
|
-
primary: "--
|
|
1689
|
-
secondary: "--
|
|
1690
|
-
tertiary: "--
|
|
1691
|
-
textColor: "--
|
|
1692
|
-
textLight: "--
|
|
1693
|
-
background: "--
|
|
1694
|
-
cellHover: "--
|
|
1695
|
-
borderColor: "--
|
|
1696
|
-
todayOutline: "--
|
|
1697
|
-
selectedBg: "--
|
|
1698
|
-
outOfRangeBg: "--
|
|
1699
|
-
outOfRangeFg: "--
|
|
1700
|
-
navArrowFg: "--
|
|
1701
|
-
navArrowBg: "--
|
|
1702
|
-
navArrowBorder: "--
|
|
1703
|
-
navArrowHoverFg: "--
|
|
1704
|
-
navArrowHoverBg: "--
|
|
1705
|
-
inputInvalidBg: "--
|
|
1706
|
-
popupHeaderFg: "--
|
|
1707
|
-
popupCloseFg: "--
|
|
1708
|
-
popupCloseBg: "--
|
|
1709
|
-
popupCloseHoverBg: "--
|
|
1710
|
-
headerBg: "--
|
|
1711
|
-
popupBg: "--
|
|
1712
|
-
pickerBg: "--
|
|
1713
|
-
pickerShadow: "--
|
|
1714
|
-
eventIndicator: "--
|
|
1715
|
-
onAccent: "--
|
|
1716
|
-
link: "--
|
|
1717
|
-
openBg: "--
|
|
1718
|
-
openFg: "--
|
|
1719
|
-
conditionalBg: "--
|
|
1720
|
-
conditionalFg: "--
|
|
1721
|
-
blockedBg: "--
|
|
1722
|
-
blockedFg: "--
|
|
1723
|
-
rangeBg: "--
|
|
1724
|
-
rangeOutline: "--
|
|
1725
|
-
inRangeBg: "--
|
|
1726
|
-
inRangeOutline: "--
|
|
1727
|
-
badgeBg: "--
|
|
1728
|
-
badgeText: "--
|
|
1729
|
-
badgeSuccessBg: "--
|
|
1730
|
-
badgeSuccessText: "--
|
|
1731
|
-
badgeInfoBg: "--
|
|
1732
|
-
badgeInfoText: "--
|
|
1733
|
-
badgeWarningBg: "--
|
|
1734
|
-
badgeWarningText: "--
|
|
1735
|
-
badgeDangerBg: "--
|
|
1736
|
-
badgeDangerText: "--
|
|
1737
|
-
badgeNeutralBg: "--
|
|
1738
|
-
badgeNeutralText: "--
|
|
1739
|
-
badgePositiveBg: "--
|
|
1740
|
-
badgePositiveText: "--
|
|
1741
|
-
badgeTentativeBg: "--
|
|
1742
|
-
badgeTentativeText: "--
|
|
1713
|
+
primary: "--kalendly-primary-color",
|
|
1714
|
+
secondary: "--kalendly-secondary-color",
|
|
1715
|
+
tertiary: "--kalendly-tertiary-color",
|
|
1716
|
+
textColor: "--kalendly-text-color",
|
|
1717
|
+
textLight: "--kalendly-text-light",
|
|
1718
|
+
background: "--kalendly-background",
|
|
1719
|
+
cellHover: "--kalendly-cell-hover",
|
|
1720
|
+
borderColor: "--kalendly-border-color",
|
|
1721
|
+
todayOutline: "--kalendly-today-outline",
|
|
1722
|
+
selectedBg: "--kalendly-selected-bg",
|
|
1723
|
+
outOfRangeBg: "--kalendly-out-of-range-bg",
|
|
1724
|
+
outOfRangeFg: "--kalendly-out-of-range-fg",
|
|
1725
|
+
navArrowFg: "--kalendly-nav-arrow-fg",
|
|
1726
|
+
navArrowBg: "--kalendly-nav-arrow-bg",
|
|
1727
|
+
navArrowBorder: "--kalendly-nav-arrow-border",
|
|
1728
|
+
navArrowHoverFg: "--kalendly-nav-arrow-hover-fg",
|
|
1729
|
+
navArrowHoverBg: "--kalendly-nav-arrow-hover-bg",
|
|
1730
|
+
inputInvalidBg: "--kalendly-input-invalid-bg",
|
|
1731
|
+
popupHeaderFg: "--kalendly-popup-header-fg",
|
|
1732
|
+
popupCloseFg: "--kalendly-popup-close-fg",
|
|
1733
|
+
popupCloseBg: "--kalendly-popup-close-bg",
|
|
1734
|
+
popupCloseHoverBg: "--kalendly-popup-close-hover-bg",
|
|
1735
|
+
headerBg: "--kalendly-header-bg",
|
|
1736
|
+
popupBg: "--kalendly-popup-bg",
|
|
1737
|
+
pickerBg: "--kalendly-picker-bg",
|
|
1738
|
+
pickerShadow: "--kalendly-picker-shadow",
|
|
1739
|
+
eventIndicator: "--kalendly-event-indicator",
|
|
1740
|
+
onAccent: "--kalendly-on-accent",
|
|
1741
|
+
link: "--kalendly-link",
|
|
1742
|
+
openBg: "--kalendly-open-bg",
|
|
1743
|
+
openFg: "--kalendly-open-fg",
|
|
1744
|
+
conditionalBg: "--kalendly-conditional-bg",
|
|
1745
|
+
conditionalFg: "--kalendly-conditional-fg",
|
|
1746
|
+
blockedBg: "--kalendly-blocked-bg",
|
|
1747
|
+
blockedFg: "--kalendly-blocked-fg",
|
|
1748
|
+
rangeBg: "--kalendly-range-bg",
|
|
1749
|
+
rangeOutline: "--kalendly-range-outline",
|
|
1750
|
+
inRangeBg: "--kalendly-in-range-bg",
|
|
1751
|
+
inRangeOutline: "--kalendly-in-range-outline",
|
|
1752
|
+
badgeBg: "--kalendly-badge-bg",
|
|
1753
|
+
badgeText: "--kalendly-badge-text",
|
|
1754
|
+
badgeSuccessBg: "--kalendly-badge-success-bg",
|
|
1755
|
+
badgeSuccessText: "--kalendly-badge-success-text",
|
|
1756
|
+
badgeInfoBg: "--kalendly-badge-info-bg",
|
|
1757
|
+
badgeInfoText: "--kalendly-badge-info-text",
|
|
1758
|
+
badgeWarningBg: "--kalendly-badge-warning-bg",
|
|
1759
|
+
badgeWarningText: "--kalendly-badge-warning-text",
|
|
1760
|
+
badgeDangerBg: "--kalendly-badge-danger-bg",
|
|
1761
|
+
badgeDangerText: "--kalendly-badge-danger-text",
|
|
1762
|
+
badgeNeutralBg: "--kalendly-badge-neutral-bg",
|
|
1763
|
+
badgeNeutralText: "--kalendly-badge-neutral-text",
|
|
1764
|
+
badgePositiveBg: "--kalendly-badge-positive-bg",
|
|
1765
|
+
badgePositiveText: "--kalendly-badge-positive-text",
|
|
1766
|
+
badgeTentativeBg: "--kalendly-badge-tentative-bg",
|
|
1767
|
+
badgeTentativeText: "--kalendly-badge-tentative-text"
|
|
1743
1768
|
};
|
|
1744
1769
|
_CalendarElement.warnedMissingEnd = /* @__PURE__ */ new Set();
|
|
1770
|
+
_CalendarElement.MAX_MONTHS = 2;
|
|
1745
1771
|
_CalendarElement.BUILT_IN_BUCKETS = ["blocked", "conditional", "open"];
|
|
1746
|
-
_CalendarElement.titleDeprecationWarned = false;
|
|
1747
1772
|
CalendarElement = _CalendarElement;
|
|
1748
1773
|
}
|
|
1749
1774
|
});
|