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.mjs
CHANGED
|
@@ -162,13 +162,13 @@ function generateCalendarDates(year, month, events = [], weekStartsOn = 0) {
|
|
|
162
162
|
function getCellClasses(calendarDate) {
|
|
163
163
|
const classes = [];
|
|
164
164
|
if (!calendarDate.isCurrentMonth) {
|
|
165
|
-
classes.push("
|
|
165
|
+
classes.push("kalendly-cell-other-month");
|
|
166
166
|
}
|
|
167
167
|
if (calendarDate.isToday) {
|
|
168
|
-
classes.push("
|
|
168
|
+
classes.push("kalendly-cell-today");
|
|
169
169
|
}
|
|
170
170
|
if (calendarDate.hasEvents) {
|
|
171
|
-
classes.push("
|
|
171
|
+
classes.push("kalendly-cell-has-event");
|
|
172
172
|
}
|
|
173
173
|
return classes;
|
|
174
174
|
}
|
|
@@ -732,13 +732,25 @@ var init_CalendarElement = __esm({
|
|
|
732
732
|
reaction(run) {
|
|
733
733
|
try {
|
|
734
734
|
run();
|
|
735
|
+
this._initError = null;
|
|
735
736
|
} catch (error) {
|
|
736
737
|
this._initError = error;
|
|
738
|
+
this.renderError(error);
|
|
737
739
|
throw error;
|
|
738
740
|
}
|
|
739
741
|
}
|
|
742
|
+
// A thrown configuration error otherwise leaves an empty element, and the
|
|
743
|
+
// reason only in a console nobody is watching. Say what is wrong where the
|
|
744
|
+
// calendar should be.
|
|
745
|
+
renderError(error) {
|
|
746
|
+
const message = error.message.replace(/^<kal-calendar>\s*/, "");
|
|
747
|
+
this.innerHTML = `
|
|
748
|
+
<div class="kalendly-error" role="alert">
|
|
749
|
+
<strong>kalendly</strong> ${escapeHtml(message)}
|
|
750
|
+
</div>`;
|
|
751
|
+
}
|
|
740
752
|
connectedCallback() {
|
|
741
|
-
this.classList.add("kalendly
|
|
753
|
+
this.classList.add("kalendly");
|
|
742
754
|
this.reaction(() => {
|
|
743
755
|
this.initEngine();
|
|
744
756
|
this.render();
|
|
@@ -746,7 +758,7 @@ var init_CalendarElement = __esm({
|
|
|
746
758
|
}
|
|
747
759
|
disconnectedCallback() {
|
|
748
760
|
this.cleanup();
|
|
749
|
-
this.classList.remove("kalendly
|
|
761
|
+
this.classList.remove("kalendly");
|
|
750
762
|
this.innerHTML = "";
|
|
751
763
|
}
|
|
752
764
|
attributeChangedCallback(name, oldVal, newVal) {
|
|
@@ -763,19 +775,10 @@ var init_CalendarElement = __esm({
|
|
|
763
775
|
this._timeRangeEnd = null;
|
|
764
776
|
this._timeRangeComplete = false;
|
|
765
777
|
}
|
|
766
|
-
this.reinit();
|
|
778
|
+
this.reaction(() => this.reinit());
|
|
767
779
|
}
|
|
768
780
|
get headingText() {
|
|
769
|
-
|
|
770
|
-
if (heading !== null) return heading;
|
|
771
|
-
const title = this.getAttribute("title");
|
|
772
|
-
if (title !== null && !_CalendarElement.titleDeprecationWarned) {
|
|
773
|
-
_CalendarElement.titleDeprecationWarned = true;
|
|
774
|
-
console.warn(
|
|
775
|
-
`<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.`
|
|
776
|
-
);
|
|
777
|
-
}
|
|
778
|
-
return title;
|
|
781
|
+
return this.getAttribute("heading");
|
|
779
782
|
}
|
|
780
783
|
get slotDuration() {
|
|
781
784
|
const raw = this.getAttribute("slot-duration");
|
|
@@ -784,10 +787,9 @@ var init_CalendarElement = __esm({
|
|
|
784
787
|
if (Number.isInteger(minutes) && minutes > 0 && MINUTES_PER_DAY % minutes === 0) {
|
|
785
788
|
return minutes;
|
|
786
789
|
}
|
|
787
|
-
|
|
788
|
-
`<kal-calendar> slot-duration="${raw}" must be a positive whole number of minutes that divides ${MINUTES_PER_DAY}
|
|
790
|
+
throw new Error(
|
|
791
|
+
`<kal-calendar> slot-duration="${raw}" must be a positive whole number of minutes that divides ${MINUTES_PER_DAY}.`
|
|
789
792
|
);
|
|
790
|
-
return DEFAULT_SLOT_DURATION;
|
|
791
793
|
}
|
|
792
794
|
warnMissingEndTime(events) {
|
|
793
795
|
for (const event of events) {
|
|
@@ -801,17 +803,37 @@ var init_CalendarElement = __esm({
|
|
|
801
803
|
}
|
|
802
804
|
}
|
|
803
805
|
get monthCount() {
|
|
804
|
-
const
|
|
805
|
-
if (
|
|
806
|
-
|
|
806
|
+
const raw = this.getAttribute("months");
|
|
807
|
+
if (raw === null) return 1;
|
|
808
|
+
const requested = Number(raw);
|
|
809
|
+
if (!Number.isInteger(requested) || requested < 1) {
|
|
810
|
+
throw new Error(
|
|
811
|
+
`<kal-calendar> months="${raw}" must be a whole number of 1 or more.`
|
|
812
|
+
);
|
|
813
|
+
}
|
|
814
|
+
if (requested > _CalendarElement.MAX_MONTHS) {
|
|
815
|
+
throw new Error(
|
|
816
|
+
`<kal-calendar> months="${raw}" exceeds the maximum of ${_CalendarElement.MAX_MONTHS}.`
|
|
817
|
+
);
|
|
818
|
+
}
|
|
819
|
+
return requested;
|
|
820
|
+
}
|
|
821
|
+
boundaryYear(attr, fallback) {
|
|
822
|
+
const raw = this.getAttribute(attr);
|
|
823
|
+
if (raw === null || raw === "") return fallback;
|
|
824
|
+
const year = Number(raw);
|
|
825
|
+
if (!Number.isInteger(year)) {
|
|
826
|
+
throw new Error(
|
|
827
|
+
`<kal-calendar> ${attr}="${raw}" must be a whole number.`
|
|
828
|
+
);
|
|
829
|
+
}
|
|
830
|
+
return year;
|
|
807
831
|
}
|
|
808
832
|
get minYear() {
|
|
809
|
-
|
|
810
|
-
return val ? parseInt(val, 10) : (/* @__PURE__ */ new Date()).getFullYear() - 30;
|
|
833
|
+
return this.boundaryYear("min-year", (/* @__PURE__ */ new Date()).getFullYear() - 30);
|
|
811
834
|
}
|
|
812
835
|
get maxYear() {
|
|
813
|
-
|
|
814
|
-
return val ? parseInt(val, 10) : (/* @__PURE__ */ new Date()).getFullYear() + 10;
|
|
836
|
+
return this.boundaryYear("max-year", (/* @__PURE__ */ new Date()).getFullYear() + 10);
|
|
815
837
|
}
|
|
816
838
|
boundaryDate(attr) {
|
|
817
839
|
const val = this.getAttribute(attr);
|
|
@@ -869,7 +891,7 @@ var init_CalendarElement = __esm({
|
|
|
869
891
|
});
|
|
870
892
|
}
|
|
871
893
|
reinit() {
|
|
872
|
-
if (!this.
|
|
894
|
+
if (!this.isConnected) return;
|
|
873
895
|
this.cleanup();
|
|
874
896
|
this.initEngine();
|
|
875
897
|
this.scheduleRender();
|
|
@@ -921,7 +943,8 @@ var init_CalendarElement = __esm({
|
|
|
921
943
|
];
|
|
922
944
|
}
|
|
923
945
|
get updateComplete() {
|
|
924
|
-
|
|
946
|
+
if (this.pendingUpdate) return this.pendingUpdate;
|
|
947
|
+
return this._initError ? Promise.reject(this._initError) : Promise.resolve();
|
|
925
948
|
}
|
|
926
949
|
scheduleRender() {
|
|
927
950
|
if (this.pendingUpdate) return;
|
|
@@ -929,8 +952,10 @@ var init_CalendarElement = __esm({
|
|
|
929
952
|
this.pendingUpdate = null;
|
|
930
953
|
try {
|
|
931
954
|
this.render();
|
|
955
|
+
this._initError = null;
|
|
932
956
|
} catch (error) {
|
|
933
957
|
this._initError = error;
|
|
958
|
+
this.renderError(error);
|
|
934
959
|
throw error;
|
|
935
960
|
}
|
|
936
961
|
});
|
|
@@ -1007,6 +1032,7 @@ var init_CalendarElement = __esm({
|
|
|
1007
1032
|
}
|
|
1008
1033
|
this.boundaryDate("min-date");
|
|
1009
1034
|
this.boundaryDate("max-date");
|
|
1035
|
+
void this.slotDuration;
|
|
1010
1036
|
void this.availableDays;
|
|
1011
1037
|
void this.availableHours;
|
|
1012
1038
|
this.assertHorizonOrdered();
|
|
@@ -1051,72 +1077,72 @@ var init_CalendarElement = __esm({
|
|
|
1051
1077
|
return status ? labels[status] || status.toUpperCase() : "";
|
|
1052
1078
|
};
|
|
1053
1079
|
return `
|
|
1054
|
-
<div class="event-card" style="border-left-color: ${borderColor}">
|
|
1055
|
-
<div class="event-header">
|
|
1056
|
-
${event.name ? `<div class="event-title">${escapeHtml(event.name)}</div>` : ""}
|
|
1057
|
-
<div class="event-badges">
|
|
1058
|
-
${event.category ? `<span class="badge category
|
|
1059
|
-
${event.priority ? `<span class="badge priority
|
|
1060
|
-
${event.status && event.status !== "scheduled" ? `<span class="badge status
|
|
1080
|
+
<div class="kalendly-event-card" style="border-left-color: ${borderColor}">
|
|
1081
|
+
<div class="kalendly-event-header">
|
|
1082
|
+
${event.name ? `<div class="kalendly-event-title">${escapeHtml(event.name)}</div>` : ""}
|
|
1083
|
+
<div class="kalendly-event-badges">
|
|
1084
|
+
${event.category ? `<span class="kalendly-badge kalendly-category-${slugifyToken(event.category)}">${escapeHtml(getCategoryLabel(event.category))}</span>` : ""}
|
|
1085
|
+
${event.priority ? `<span class="kalendly-badge kalendly-priority-${slugifyToken(event.priority)}">${escapeHtml(getPriorityLabel(event.priority))}</span>` : ""}
|
|
1086
|
+
${event.status && event.status !== "scheduled" ? `<span class="kalendly-badge kalendly-status-${slugifyToken(event.status)}">${escapeHtml(getStatusLabel(event.status))}</span>` : ""}
|
|
1061
1087
|
</div>
|
|
1062
1088
|
</div>
|
|
1063
1089
|
|
|
1064
1090
|
${timeRange ? `
|
|
1065
|
-
<div class="event-time">
|
|
1066
|
-
<span class="event-time-label">Time:</span>
|
|
1067
|
-
<span class="event-time-value">${escapeHtml(timeRange)}</span>
|
|
1091
|
+
<div class="kalendly-event-time">
|
|
1092
|
+
<span class="kalendly-event-time-label">Time:</span>
|
|
1093
|
+
<span class="kalendly-event-time-value">${escapeHtml(timeRange)}</span>
|
|
1068
1094
|
</div>
|
|
1069
1095
|
` : ""}
|
|
1070
1096
|
|
|
1071
1097
|
${event.description ? `
|
|
1072
|
-
<div class="event-description">${escapeHtml(event.description)}</div>
|
|
1098
|
+
<div class="kalendly-event-description">${escapeHtml(event.description)}</div>
|
|
1073
1099
|
` : ""}
|
|
1074
1100
|
|
|
1075
1101
|
${event.location ? `
|
|
1076
|
-
<div class="event-time">
|
|
1077
|
-
<span class="event-time-label">Location:</span>
|
|
1078
|
-
<span class="event-time-value">${escapeHtml(event.location)}</span>
|
|
1102
|
+
<div class="kalendly-event-time">
|
|
1103
|
+
<span class="kalendly-event-time-label">Location:</span>
|
|
1104
|
+
<span class="kalendly-event-time-value">${escapeHtml(event.location)}</span>
|
|
1079
1105
|
</div>
|
|
1080
1106
|
` : ""}
|
|
1081
1107
|
|
|
1082
1108
|
${attendeesList ? `
|
|
1083
|
-
<div class="event-time">
|
|
1084
|
-
<span class="event-time-label">Attendees:</span>
|
|
1085
|
-
<span class="event-time-value">${escapeHtml(attendeesList)}</span>
|
|
1109
|
+
<div class="kalendly-event-time">
|
|
1110
|
+
<span class="kalendly-event-time-label">Attendees:</span>
|
|
1111
|
+
<span class="kalendly-event-time-value">${escapeHtml(attendeesList)}</span>
|
|
1086
1112
|
</div>
|
|
1087
1113
|
` : ""}
|
|
1088
1114
|
|
|
1089
1115
|
${event.organizer ? `
|
|
1090
|
-
<div class="event-time">
|
|
1091
|
-
<span class="event-time-label">Organizer:</span>
|
|
1092
|
-
<span class="event-time-value">${escapeHtml(event.organizer)}</span>
|
|
1116
|
+
<div class="kalendly-event-time">
|
|
1117
|
+
<span class="kalendly-event-time-label">Organizer:</span>
|
|
1118
|
+
<span class="kalendly-event-time-value">${escapeHtml(event.organizer)}</span>
|
|
1093
1119
|
</div>
|
|
1094
1120
|
` : ""}
|
|
1095
1121
|
|
|
1096
1122
|
${event.notes ? `
|
|
1097
|
-
<div class="event-time">
|
|
1098
|
-
<span class="event-time-label">Notes:</span>
|
|
1099
|
-
<span class="event-time-value">${escapeHtml(event.notes)}</span>
|
|
1123
|
+
<div class="kalendly-event-time">
|
|
1124
|
+
<span class="kalendly-event-time-label">Notes:</span>
|
|
1125
|
+
<span class="kalendly-event-time-value">${escapeHtml(event.notes)}</span>
|
|
1100
1126
|
</div>
|
|
1101
1127
|
` : ""}
|
|
1102
1128
|
|
|
1103
1129
|
${event.url ? `
|
|
1104
|
-
<div class="event-time">
|
|
1105
|
-
<a href="${escapeHtml(safeUrl(event.url))}" target="_blank" rel="noopener noreferrer" class="event-link">
|
|
1130
|
+
<div class="kalendly-event-time">
|
|
1131
|
+
<a href="${escapeHtml(safeUrl(event.url))}" target="_blank" rel="noopener noreferrer" class="kalendly-event-link">
|
|
1106
1132
|
View Details \u2192
|
|
1107
1133
|
</a>
|
|
1108
1134
|
</div>
|
|
1109
1135
|
` : ""}
|
|
1110
1136
|
|
|
1111
1137
|
${event.tags && event.tags.length > 0 ? `
|
|
1112
|
-
<div class="event-tags">
|
|
1113
|
-
${event.tags.map((tag) => `<span class="event-tag">${escapeHtml(tag)}</span>`).join("")}
|
|
1138
|
+
<div class="kalendly-event-tags">
|
|
1139
|
+
${event.tags.map((tag) => `<span class="kalendly-event-tag">${escapeHtml(tag)}</span>`).join("")}
|
|
1114
1140
|
</div>
|
|
1115
1141
|
` : ""}
|
|
1116
1142
|
</div>
|
|
1117
1143
|
`;
|
|
1118
1144
|
};
|
|
1119
|
-
const defaultRenderNoEvents = () => '<div class="no-events-message">No events scheduled for this day.</div>';
|
|
1145
|
+
const defaultRenderNoEvents = () => '<div class="kalendly-no-events-message">No events scheduled for this day.</div>';
|
|
1120
1146
|
const renderEvent = this._renderEvent || defaultRenderEvent;
|
|
1121
1147
|
const renderNoEvents = this._renderNoEvents || defaultRenderNoEvents;
|
|
1122
1148
|
const renderTimeGrid = (date) => {
|
|
@@ -1141,29 +1167,29 @@ var init_CalendarElement = __esm({
|
|
|
1141
1167
|
const isRangeEnd = inTimeRange && endTime === this._timeRangeEnd;
|
|
1142
1168
|
const isInRange = inTimeRange && !isRangeStart && !isRangeEnd;
|
|
1143
1169
|
const slotClasses = [
|
|
1144
|
-
"time-grid-slot",
|
|
1145
|
-
offered ? "" : "time-grid-slot-out-of-range",
|
|
1146
|
-
isBooked ? "time-grid-slot-blocked" : "time-grid-slot-open",
|
|
1147
|
-
isRangeStart ? "time-grid-slot-range-start" : "",
|
|
1148
|
-
isRangeEnd ? "time-grid-slot-range-end" : "",
|
|
1149
|
-
isInRange ? "time-grid-slot-in-range" : ""
|
|
1170
|
+
"kalendly-time-grid-slot",
|
|
1171
|
+
offered ? "" : "kalendly-time-grid-slot-out-of-range",
|
|
1172
|
+
isBooked ? "kalendly-time-grid-slot-blocked" : "kalendly-time-grid-slot-open",
|
|
1173
|
+
isRangeStart ? "kalendly-time-grid-slot-range-start" : "",
|
|
1174
|
+
isRangeEnd ? "kalendly-time-grid-slot-range-end" : "",
|
|
1175
|
+
isInRange ? "kalendly-time-grid-slot-in-range" : ""
|
|
1150
1176
|
].filter(Boolean).join(" ");
|
|
1151
1177
|
const slotAttrs = `${offered ? 'data-action="select-slot" ' : ""}data-start-time="${startTime}" data-end-time="${endTime}" data-date="${date.toISOString()}" data-booked="${isBooked}"`;
|
|
1152
1178
|
const status = !offered ? "Closed" : isBooked ? "Booked" : "Available";
|
|
1153
1179
|
return `
|
|
1154
1180
|
<div class="${slotClasses}" ${slotAttrs}>
|
|
1155
|
-
<span class="time-grid-label">${startTime}</span>
|
|
1156
|
-
<span class="time-grid-status">${status}</span>
|
|
1181
|
+
<span class="kalendly-time-grid-label">${startTime}</span>
|
|
1182
|
+
<span class="kalendly-time-grid-status">${status}</span>
|
|
1157
1183
|
</div>`;
|
|
1158
1184
|
});
|
|
1159
|
-
const gridClasses = selectable ? "time-grid time-grid-selectable" : "time-grid";
|
|
1185
|
+
const gridClasses = selectable ? "kalendly-time-grid kalendly-time-grid-selectable" : "kalendly-time-grid";
|
|
1160
1186
|
return `<div class="${gridClasses}">${slots.join("")}</div>`;
|
|
1161
1187
|
};
|
|
1162
1188
|
const multiMonth = viewModel.panes.length > 1;
|
|
1163
1189
|
const renderPane = (pane) => `
|
|
1164
|
-
<div class="
|
|
1165
|
-
${multiMonth ? `<div class="
|
|
1166
|
-
<table class="
|
|
1190
|
+
<div class="kalendly-pane">
|
|
1191
|
+
${multiMonth ? `<div class="kalendly-pane-caption">${escapeHtml(pane.monthAndYearText)}</div>` : ""}
|
|
1192
|
+
<table class="kalendly-table kalendly-table-bordered">
|
|
1167
1193
|
<thead>
|
|
1168
1194
|
<tr>
|
|
1169
1195
|
${viewModel.days.map((day) => `<th>${day.slice(0, 3)}</th>`).join("")}
|
|
@@ -1174,7 +1200,7 @@ var init_CalendarElement = __esm({
|
|
|
1174
1200
|
{ length: 6 },
|
|
1175
1201
|
() => `<tr>${Array.from(
|
|
1176
1202
|
{ length: 7 },
|
|
1177
|
-
() => `<td class="
|
|
1203
|
+
() => `<td class="kalendly-skeleton" aria-hidden="true"></td>`
|
|
1178
1204
|
).join("")}</tr>`
|
|
1179
1205
|
).join("") : pane.calendarDates.map(
|
|
1180
1206
|
(week) => `
|
|
@@ -1186,7 +1212,7 @@ var init_CalendarElement = __esm({
|
|
|
1186
1212
|
calendarDate.date,
|
|
1187
1213
|
viewModel.selectedDate
|
|
1188
1214
|
)) {
|
|
1189
|
-
classes.push("
|
|
1215
|
+
classes.push("kalendly-cell-selected");
|
|
1190
1216
|
}
|
|
1191
1217
|
if (availabilityMode) {
|
|
1192
1218
|
const bucket = this.resolveBucket(
|
|
@@ -1194,16 +1220,16 @@ var init_CalendarElement = __esm({
|
|
|
1194
1220
|
);
|
|
1195
1221
|
const custom = (this._availabilityColors ?? {})[bucket];
|
|
1196
1222
|
classes.push(
|
|
1197
|
-
`availability-${slugifyToken(bucket)}`
|
|
1223
|
+
`kalendly-availability-${slugifyToken(bucket)}`
|
|
1198
1224
|
);
|
|
1199
1225
|
if (custom) {
|
|
1200
|
-
classes.push("availability-status");
|
|
1226
|
+
classes.push("kalendly-availability-status");
|
|
1201
1227
|
cellAttrs.push(
|
|
1202
|
-
`style="--availability-color: ${escapeHtml(safeColor(custom))}"`
|
|
1228
|
+
`style="--kalendly-availability-color: ${escapeHtml(safeColor(custom))}"`
|
|
1203
1229
|
);
|
|
1204
1230
|
}
|
|
1205
1231
|
if (!this.isDateSelectable(calendarDate.date)) {
|
|
1206
|
-
classes.push("availability-unselectable");
|
|
1232
|
+
classes.push("kalendly-availability-unselectable");
|
|
1207
1233
|
}
|
|
1208
1234
|
cellAttrs.push(
|
|
1209
1235
|
`aria-label="${escapeHtml(bucket)}"`
|
|
@@ -1212,12 +1238,12 @@ var init_CalendarElement = __esm({
|
|
|
1212
1238
|
if (availabilityMode === "day" && selectable) {
|
|
1213
1239
|
const d = calendarDate.date;
|
|
1214
1240
|
if (this._rangeStart && isSameDay2(d, this._rangeStart))
|
|
1215
|
-
classes.push("availability-range-start");
|
|
1241
|
+
classes.push("kalendly-availability-range-start");
|
|
1216
1242
|
if (this._rangeEnd && isSameDay2(d, this._rangeEnd))
|
|
1217
|
-
classes.push("availability-range-end");
|
|
1243
|
+
classes.push("kalendly-availability-range-end");
|
|
1218
1244
|
if (this._rangeStart && this._rangeEnd) {
|
|
1219
1245
|
if (d > this._rangeStart && d < this._rangeEnd)
|
|
1220
|
-
classes.push("availability-in-range");
|
|
1246
|
+
classes.push("kalendly-availability-in-range");
|
|
1221
1247
|
}
|
|
1222
1248
|
}
|
|
1223
1249
|
const dateString = calendarDate.date.toISOString();
|
|
@@ -1225,7 +1251,7 @@ var init_CalendarElement = __esm({
|
|
|
1225
1251
|
calendarDate.date
|
|
1226
1252
|
);
|
|
1227
1253
|
if (!offered) {
|
|
1228
|
-
classes.push("
|
|
1254
|
+
classes.push("kalendly-cell-out-of-range");
|
|
1229
1255
|
}
|
|
1230
1256
|
return `
|
|
1231
1257
|
<td
|
|
@@ -1248,64 +1274,64 @@ var init_CalendarElement = __esm({
|
|
|
1248
1274
|
`;
|
|
1249
1275
|
const html = `
|
|
1250
1276
|
${title ? `
|
|
1251
|
-
<div class="
|
|
1277
|
+
<div class="kalendly-title">
|
|
1252
1278
|
<h1>${escapeHtml(title)}</h1>
|
|
1253
1279
|
</div>
|
|
1254
1280
|
` : ""}
|
|
1255
1281
|
|
|
1256
|
-
<div class="
|
|
1257
|
-
<div class="
|
|
1258
|
-
<div class="
|
|
1259
|
-
<button type="button" class="
|
|
1282
|
+
<div class="kalendly-content">
|
|
1283
|
+
<div class="kalendly-card">
|
|
1284
|
+
<div class="kalendly-nav-header">
|
|
1285
|
+
<button type="button" class="kalendly-nav-arrow" data-action="previous" aria-label="Previous month">
|
|
1260
1286
|
‹
|
|
1261
1287
|
</button>
|
|
1262
1288
|
|
|
1263
|
-
<div class="
|
|
1289
|
+
<div class="kalendly-picker-container" data-picker-container>
|
|
1264
1290
|
<button
|
|
1265
1291
|
type="button"
|
|
1266
|
-
class="
|
|
1292
|
+
class="kalendly-picker-btn"
|
|
1267
1293
|
data-action="toggle-picker"
|
|
1268
1294
|
aria-expanded="${this.pickerOpen ? "true" : "false"}"
|
|
1269
1295
|
aria-haspopup="true"
|
|
1270
1296
|
>
|
|
1271
1297
|
${useShortMonths ? `${MONTHS[viewModel.currentMonth]} ${viewModel.currentYear}` : viewModel.monthAndYearText}
|
|
1272
|
-
<span class="
|
|
1298
|
+
<span class="kalendly-picker-chevron">▾</span>
|
|
1273
1299
|
</button>
|
|
1274
1300
|
|
|
1275
1301
|
${this.pickerOpen ? `
|
|
1276
|
-
<div class="
|
|
1277
|
-
<div class="
|
|
1302
|
+
<div class="kalendly-picker-dropdown">
|
|
1303
|
+
<div class="kalendly-picker-year-row">
|
|
1278
1304
|
<button
|
|
1279
1305
|
type="button"
|
|
1280
|
-
class="
|
|
1306
|
+
class="kalendly-picker-year-arrow"
|
|
1281
1307
|
data-action="year-prev"
|
|
1282
1308
|
${viewModel.currentYear <= minYear ? "disabled" : ""}
|
|
1283
1309
|
aria-label="Previous year"
|
|
1284
1310
|
>‹</button>
|
|
1285
1311
|
<input
|
|
1286
1312
|
type="text"
|
|
1287
|
-
class="
|
|
1313
|
+
class="kalendly-picker-year-input${!this.yearInputValid ? " kalendly-invalid" : ""}"
|
|
1288
1314
|
value="${escapeHtml(this.yearInput || viewModel.currentYear)}"
|
|
1289
1315
|
data-year-input
|
|
1290
1316
|
aria-label="Year"
|
|
1291
1317
|
/>
|
|
1292
1318
|
<button
|
|
1293
1319
|
type="button"
|
|
1294
|
-
class="
|
|
1320
|
+
class="kalendly-picker-year-arrow"
|
|
1295
1321
|
data-action="year-next"
|
|
1296
1322
|
${viewModel.currentYear >= maxYear ? "disabled" : ""}
|
|
1297
1323
|
aria-label="Next year"
|
|
1298
1324
|
>›</button>
|
|
1299
1325
|
</div>
|
|
1300
1326
|
|
|
1301
|
-
<div class="
|
|
1327
|
+
<div class="kalendly-picker-months">
|
|
1302
1328
|
${(useShortMonths ? MONTHS : MONTHS_FULL).map((month, index) => {
|
|
1303
1329
|
const isSelected = index === viewModel.currentMonth;
|
|
1304
1330
|
const isCurrent = index === todayMonth && viewModel.currentYear === todayYear;
|
|
1305
1331
|
return `
|
|
1306
1332
|
<button
|
|
1307
1333
|
type="button"
|
|
1308
|
-
class="
|
|
1334
|
+
class="kalendly-picker-month${isSelected ? " kalendly-selected" : ""}${isCurrent ? " kalendly-current-month" : ""}"
|
|
1309
1335
|
data-action="select-month"
|
|
1310
1336
|
data-month="${index}"
|
|
1311
1337
|
>${month}</button>
|
|
@@ -1318,34 +1344,34 @@ var init_CalendarElement = __esm({
|
|
|
1318
1344
|
|
|
1319
1345
|
<button
|
|
1320
1346
|
type="button"
|
|
1321
|
-
class="
|
|
1347
|
+
class="kalendly-today-btn"
|
|
1322
1348
|
data-action="today"
|
|
1323
1349
|
${isCurrentMonth ? "disabled" : ""}
|
|
1324
1350
|
>Today</button>
|
|
1325
1351
|
|
|
1326
|
-
<button type="button" class="
|
|
1352
|
+
<button type="button" class="kalendly-nav-arrow" data-action="next" aria-label="Next month">
|
|
1327
1353
|
›
|
|
1328
1354
|
</button>
|
|
1329
1355
|
</div>
|
|
1330
1356
|
|
|
1331
|
-
<div class="
|
|
1357
|
+
<div class="kalendly-panes">
|
|
1332
1358
|
${viewModel.panes.map(renderPane).join("")}
|
|
1333
1359
|
</div>
|
|
1334
1360
|
|
|
1335
1361
|
${!isLoading && availabilityMode !== "day" && viewModel.selectedDate ? `
|
|
1336
|
-
<div class="
|
|
1337
|
-
<div class="popup-header">
|
|
1362
|
+
<div class="kalendly-popup">
|
|
1363
|
+
<div class="kalendly-popup-header">
|
|
1338
1364
|
<h2>${viewModel.scheduleDay}</h2>
|
|
1339
|
-
<button type="button" class="popup-close" data-action="close-popup" aria-label="Close">\u2715</button>
|
|
1365
|
+
<button type="button" class="kalendly-popup-close" data-action="close-popup" aria-label="Close">\u2715</button>
|
|
1340
1366
|
</div>
|
|
1341
1367
|
|
|
1342
1368
|
${showScrollHint ? `
|
|
1343
|
-
<div class="scroll-hint">
|
|
1369
|
+
<div class="kalendly-scroll-hint">
|
|
1344
1370
|
\u2193 Scroll to see more events \u2193
|
|
1345
1371
|
</div>
|
|
1346
1372
|
` : ""}
|
|
1347
1373
|
|
|
1348
|
-
<div class="events-container">
|
|
1374
|
+
<div class="kalendly-events-container">
|
|
1349
1375
|
${availabilityMode === "time" ? renderTimeGrid(viewModel.selectedDate) : viewModel.tasks.length > 0 ? viewModel.tasks.map((event) => renderEvent(event)).join("") : renderNoEvents()}
|
|
1350
1376
|
</div>
|
|
1351
1377
|
</div>
|
|
@@ -1561,7 +1587,7 @@ var init_CalendarElement = __esm({
|
|
|
1561
1587
|
this.yearInput = value;
|
|
1562
1588
|
const year = parseInt(value, 10);
|
|
1563
1589
|
this.yearInputValid = value === "" || year >= minYear && year <= maxYear;
|
|
1564
|
-
target.classList.toggle("invalid", !this.yearInputValid);
|
|
1590
|
+
target.classList.toggle("kalendly-invalid", !this.yearInputValid);
|
|
1565
1591
|
}
|
|
1566
1592
|
};
|
|
1567
1593
|
this.delegatedBlurHandler = (e) => {
|
|
@@ -1573,7 +1599,7 @@ var init_CalendarElement = __esm({
|
|
|
1573
1599
|
this.yearInput = String(vm.currentYear);
|
|
1574
1600
|
this.yearInputValid = true;
|
|
1575
1601
|
target.value = this.yearInput;
|
|
1576
|
-
target.classList.remove("invalid");
|
|
1602
|
+
target.classList.remove("kalendly-invalid");
|
|
1577
1603
|
} else if (year !== vm.currentYear) {
|
|
1578
1604
|
this.dispatchMonthChange(year, vm.currentMonth);
|
|
1579
1605
|
this.actions.jump(year, vm.currentMonth);
|
|
@@ -1596,7 +1622,7 @@ var init_CalendarElement = __esm({
|
|
|
1596
1622
|
this.render();
|
|
1597
1623
|
return;
|
|
1598
1624
|
}
|
|
1599
|
-
const popup = this.querySelector(".
|
|
1625
|
+
const popup = this.querySelector(".kalendly-popup");
|
|
1600
1626
|
if (popup) {
|
|
1601
1627
|
this.engine.clearSelection();
|
|
1602
1628
|
}
|
|
@@ -1666,72 +1692,71 @@ var init_CalendarElement = __esm({
|
|
|
1666
1692
|
"heading",
|
|
1667
1693
|
"months",
|
|
1668
1694
|
"slot-duration",
|
|
1669
|
-
"title",
|
|
1670
1695
|
"use-short-month-names",
|
|
1671
1696
|
"availability-mode",
|
|
1672
1697
|
"selectable",
|
|
1673
1698
|
"loading"
|
|
1674
1699
|
];
|
|
1675
1700
|
_CalendarElement.themeMap = {
|
|
1676
|
-
primary: "--
|
|
1677
|
-
secondary: "--
|
|
1678
|
-
tertiary: "--
|
|
1679
|
-
textColor: "--
|
|
1680
|
-
textLight: "--
|
|
1681
|
-
background: "--
|
|
1682
|
-
cellHover: "--
|
|
1683
|
-
borderColor: "--
|
|
1684
|
-
todayOutline: "--
|
|
1685
|
-
selectedBg: "--
|
|
1686
|
-
outOfRangeBg: "--
|
|
1687
|
-
outOfRangeFg: "--
|
|
1688
|
-
navArrowFg: "--
|
|
1689
|
-
navArrowBg: "--
|
|
1690
|
-
navArrowBorder: "--
|
|
1691
|
-
navArrowHoverFg: "--
|
|
1692
|
-
navArrowHoverBg: "--
|
|
1693
|
-
inputInvalidBg: "--
|
|
1694
|
-
popupHeaderFg: "--
|
|
1695
|
-
popupCloseFg: "--
|
|
1696
|
-
popupCloseBg: "--
|
|
1697
|
-
popupCloseHoverBg: "--
|
|
1698
|
-
headerBg: "--
|
|
1699
|
-
popupBg: "--
|
|
1700
|
-
pickerBg: "--
|
|
1701
|
-
pickerShadow: "--
|
|
1702
|
-
eventIndicator: "--
|
|
1703
|
-
onAccent: "--
|
|
1704
|
-
link: "--
|
|
1705
|
-
openBg: "--
|
|
1706
|
-
openFg: "--
|
|
1707
|
-
conditionalBg: "--
|
|
1708
|
-
conditionalFg: "--
|
|
1709
|
-
blockedBg: "--
|
|
1710
|
-
blockedFg: "--
|
|
1711
|
-
rangeBg: "--
|
|
1712
|
-
rangeOutline: "--
|
|
1713
|
-
inRangeBg: "--
|
|
1714
|
-
inRangeOutline: "--
|
|
1715
|
-
badgeBg: "--
|
|
1716
|
-
badgeText: "--
|
|
1717
|
-
badgeSuccessBg: "--
|
|
1718
|
-
badgeSuccessText: "--
|
|
1719
|
-
badgeInfoBg: "--
|
|
1720
|
-
badgeInfoText: "--
|
|
1721
|
-
badgeWarningBg: "--
|
|
1722
|
-
badgeWarningText: "--
|
|
1723
|
-
badgeDangerBg: "--
|
|
1724
|
-
badgeDangerText: "--
|
|
1725
|
-
badgeNeutralBg: "--
|
|
1726
|
-
badgeNeutralText: "--
|
|
1727
|
-
badgePositiveBg: "--
|
|
1728
|
-
badgePositiveText: "--
|
|
1729
|
-
badgeTentativeBg: "--
|
|
1730
|
-
badgeTentativeText: "--
|
|
1701
|
+
primary: "--kalendly-primary-color",
|
|
1702
|
+
secondary: "--kalendly-secondary-color",
|
|
1703
|
+
tertiary: "--kalendly-tertiary-color",
|
|
1704
|
+
textColor: "--kalendly-text-color",
|
|
1705
|
+
textLight: "--kalendly-text-light",
|
|
1706
|
+
background: "--kalendly-background",
|
|
1707
|
+
cellHover: "--kalendly-cell-hover",
|
|
1708
|
+
borderColor: "--kalendly-border-color",
|
|
1709
|
+
todayOutline: "--kalendly-today-outline",
|
|
1710
|
+
selectedBg: "--kalendly-selected-bg",
|
|
1711
|
+
outOfRangeBg: "--kalendly-out-of-range-bg",
|
|
1712
|
+
outOfRangeFg: "--kalendly-out-of-range-fg",
|
|
1713
|
+
navArrowFg: "--kalendly-nav-arrow-fg",
|
|
1714
|
+
navArrowBg: "--kalendly-nav-arrow-bg",
|
|
1715
|
+
navArrowBorder: "--kalendly-nav-arrow-border",
|
|
1716
|
+
navArrowHoverFg: "--kalendly-nav-arrow-hover-fg",
|
|
1717
|
+
navArrowHoverBg: "--kalendly-nav-arrow-hover-bg",
|
|
1718
|
+
inputInvalidBg: "--kalendly-input-invalid-bg",
|
|
1719
|
+
popupHeaderFg: "--kalendly-popup-header-fg",
|
|
1720
|
+
popupCloseFg: "--kalendly-popup-close-fg",
|
|
1721
|
+
popupCloseBg: "--kalendly-popup-close-bg",
|
|
1722
|
+
popupCloseHoverBg: "--kalendly-popup-close-hover-bg",
|
|
1723
|
+
headerBg: "--kalendly-header-bg",
|
|
1724
|
+
popupBg: "--kalendly-popup-bg",
|
|
1725
|
+
pickerBg: "--kalendly-picker-bg",
|
|
1726
|
+
pickerShadow: "--kalendly-picker-shadow",
|
|
1727
|
+
eventIndicator: "--kalendly-event-indicator",
|
|
1728
|
+
onAccent: "--kalendly-on-accent",
|
|
1729
|
+
link: "--kalendly-link",
|
|
1730
|
+
openBg: "--kalendly-open-bg",
|
|
1731
|
+
openFg: "--kalendly-open-fg",
|
|
1732
|
+
conditionalBg: "--kalendly-conditional-bg",
|
|
1733
|
+
conditionalFg: "--kalendly-conditional-fg",
|
|
1734
|
+
blockedBg: "--kalendly-blocked-bg",
|
|
1735
|
+
blockedFg: "--kalendly-blocked-fg",
|
|
1736
|
+
rangeBg: "--kalendly-range-bg",
|
|
1737
|
+
rangeOutline: "--kalendly-range-outline",
|
|
1738
|
+
inRangeBg: "--kalendly-in-range-bg",
|
|
1739
|
+
inRangeOutline: "--kalendly-in-range-outline",
|
|
1740
|
+
badgeBg: "--kalendly-badge-bg",
|
|
1741
|
+
badgeText: "--kalendly-badge-text",
|
|
1742
|
+
badgeSuccessBg: "--kalendly-badge-success-bg",
|
|
1743
|
+
badgeSuccessText: "--kalendly-badge-success-text",
|
|
1744
|
+
badgeInfoBg: "--kalendly-badge-info-bg",
|
|
1745
|
+
badgeInfoText: "--kalendly-badge-info-text",
|
|
1746
|
+
badgeWarningBg: "--kalendly-badge-warning-bg",
|
|
1747
|
+
badgeWarningText: "--kalendly-badge-warning-text",
|
|
1748
|
+
badgeDangerBg: "--kalendly-badge-danger-bg",
|
|
1749
|
+
badgeDangerText: "--kalendly-badge-danger-text",
|
|
1750
|
+
badgeNeutralBg: "--kalendly-badge-neutral-bg",
|
|
1751
|
+
badgeNeutralText: "--kalendly-badge-neutral-text",
|
|
1752
|
+
badgePositiveBg: "--kalendly-badge-positive-bg",
|
|
1753
|
+
badgePositiveText: "--kalendly-badge-positive-text",
|
|
1754
|
+
badgeTentativeBg: "--kalendly-badge-tentative-bg",
|
|
1755
|
+
badgeTentativeText: "--kalendly-badge-tentative-text"
|
|
1731
1756
|
};
|
|
1732
1757
|
_CalendarElement.warnedMissingEnd = /* @__PURE__ */ new Set();
|
|
1758
|
+
_CalendarElement.MAX_MONTHS = 2;
|
|
1733
1759
|
_CalendarElement.BUILT_IN_BUCKETS = ["blocked", "conditional", "open"];
|
|
1734
|
-
_CalendarElement.titleDeprecationWarned = false;
|
|
1735
1760
|
CalendarElement = _CalendarElement;
|
|
1736
1761
|
}
|
|
1737
1762
|
});
|