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/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("calendar-cell-other-month");
177
+ classes.push("kalendly-cell-other-month");
178
178
  }
179
179
  if (calendarDate.isToday) {
180
- classes.push("calendar-cell-today");
180
+ classes.push("kalendly-cell-today");
181
181
  }
182
182
  if (calendarDate.hasEvents) {
183
- classes.push("calendar-cell-has-event");
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-calendar");
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-calendar");
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
- const heading = this.getAttribute("heading");
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
- console.warn(
800
- `<kal-calendar> slot-duration="${raw}" must be a positive whole number of minutes that divides ${MINUTES_PER_DAY} \u2014 falling back to ${DEFAULT_SLOT_DURATION}.`
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 requested = Number(this.getAttribute("months") ?? 1);
817
- if (!Number.isInteger(requested) || requested < 1) return 1;
818
- return Math.min(requested, 2);
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
- const val = this.getAttribute("min-year");
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
- const val = this.getAttribute("max-year");
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.engine) return;
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
- return this.pendingUpdate ?? Promise.resolve();
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 category-${slugifyToken(event.category)}">${escapeHtml(getCategoryLabel(event.category))}</span>` : ""}
1071
- ${event.priority ? `<span class="badge priority priority-${slugifyToken(event.priority)}">${escapeHtml(getPriorityLabel(event.priority))}</span>` : ""}
1072
- ${event.status && event.status !== "scheduled" ? `<span class="badge status status-${slugifyToken(event.status)}">${escapeHtml(getStatusLabel(event.status))}</span>` : ""}
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="calendar-pane">
1177
- ${multiMonth ? `<div class="calendar-pane-caption">${escapeHtml(pane.monthAndYearText)}</div>` : ""}
1178
- <table class="calendar-table calendar-table-bordered">
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="calendar-skeleton" aria-hidden="true"></td>`
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("calendar-cell-selected");
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("calendar-cell-out-of-range");
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="calendar-title">
1289
+ <div class="kalendly-title">
1264
1290
  <h1>${escapeHtml(title)}</h1>
1265
1291
  </div>
1266
1292
  ` : ""}
1267
1293
 
1268
- <div class="calendar-content">
1269
- <div class="calendar-card">
1270
- <div class="calendar-nav-header">
1271
- <button type="button" class="calendar-nav-arrow" data-action="previous" aria-label="Previous month">
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
  &#8249;
1273
1299
  </button>
1274
1300
 
1275
- <div class="calendar-picker-container" data-picker-container>
1301
+ <div class="kalendly-picker-container" data-picker-container>
1276
1302
  <button
1277
1303
  type="button"
1278
- class="calendar-picker-btn"
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="calendar-picker-chevron">&#9662;</span>
1310
+ <span class="kalendly-picker-chevron">&#9662;</span>
1285
1311
  </button>
1286
1312
 
1287
1313
  ${this.pickerOpen ? `
1288
- <div class="calendar-picker-dropdown">
1289
- <div class="calendar-picker-year-row">
1314
+ <div class="kalendly-picker-dropdown">
1315
+ <div class="kalendly-picker-year-row">
1290
1316
  <button
1291
1317
  type="button"
1292
- class="calendar-picker-year-arrow"
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
  >&#8249;</button>
1297
1323
  <input
1298
1324
  type="text"
1299
- class="calendar-picker-year-input${!this.yearInputValid ? " invalid" : ""}"
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="calendar-picker-year-arrow"
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
  >&#8250;</button>
1311
1337
  </div>
1312
1338
 
1313
- <div class="calendar-picker-months">
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="calendar-picker-month${isSelected ? " selected" : ""}${isCurrent ? " current-month" : ""}"
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="calendar-today-btn"
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="calendar-nav-arrow" data-action="next" aria-label="Next month">
1364
+ <button type="button" class="kalendly-nav-arrow" data-action="next" aria-label="Next month">
1339
1365
  &#8250;
1340
1366
  </button>
1341
1367
  </div>
1342
1368
 
1343
- <div class="calendar-panes">
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="date-popup">
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(".date-popup");
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: "--calendar-primary-color",
1689
- secondary: "--calendar-secondary-color",
1690
- tertiary: "--calendar-tertiary-color",
1691
- textColor: "--calendar-text-color",
1692
- textLight: "--calendar-text-light",
1693
- background: "--calendar-background",
1694
- cellHover: "--calendar-cell-hover",
1695
- borderColor: "--calendar-border-color",
1696
- todayOutline: "--calendar-today-outline",
1697
- selectedBg: "--calendar-selected-bg",
1698
- outOfRangeBg: "--calendar-out-of-range-bg",
1699
- outOfRangeFg: "--calendar-out-of-range-fg",
1700
- navArrowFg: "--calendar-nav-arrow-fg",
1701
- navArrowBg: "--calendar-nav-arrow-bg",
1702
- navArrowBorder: "--calendar-nav-arrow-border",
1703
- navArrowHoverFg: "--calendar-nav-arrow-hover-fg",
1704
- navArrowHoverBg: "--calendar-nav-arrow-hover-bg",
1705
- inputInvalidBg: "--calendar-input-invalid-bg",
1706
- popupHeaderFg: "--calendar-popup-header-fg",
1707
- popupCloseFg: "--calendar-popup-close-fg",
1708
- popupCloseBg: "--calendar-popup-close-bg",
1709
- popupCloseHoverBg: "--calendar-popup-close-hover-bg",
1710
- headerBg: "--calendar-header-bg",
1711
- popupBg: "--calendar-popup-bg",
1712
- pickerBg: "--calendar-picker-bg",
1713
- pickerShadow: "--calendar-picker-shadow",
1714
- eventIndicator: "--calendar-event-indicator",
1715
- onAccent: "--calendar-on-accent",
1716
- link: "--calendar-link",
1717
- openBg: "--calendar-open-bg",
1718
- openFg: "--calendar-open-fg",
1719
- conditionalBg: "--calendar-conditional-bg",
1720
- conditionalFg: "--calendar-conditional-fg",
1721
- blockedBg: "--calendar-blocked-bg",
1722
- blockedFg: "--calendar-blocked-fg",
1723
- rangeBg: "--calendar-range-bg",
1724
- rangeOutline: "--calendar-range-outline",
1725
- inRangeBg: "--calendar-in-range-bg",
1726
- inRangeOutline: "--calendar-in-range-outline",
1727
- badgeBg: "--calendar-badge-bg",
1728
- badgeText: "--calendar-badge-text",
1729
- badgeSuccessBg: "--calendar-badge-success-bg",
1730
- badgeSuccessText: "--calendar-badge-success-text",
1731
- badgeInfoBg: "--calendar-badge-info-bg",
1732
- badgeInfoText: "--calendar-badge-info-text",
1733
- badgeWarningBg: "--calendar-badge-warning-bg",
1734
- badgeWarningText: "--calendar-badge-warning-text",
1735
- badgeDangerBg: "--calendar-badge-danger-bg",
1736
- badgeDangerText: "--calendar-badge-danger-text",
1737
- badgeNeutralBg: "--calendar-badge-neutral-bg",
1738
- badgeNeutralText: "--calendar-badge-neutral-text",
1739
- badgePositiveBg: "--calendar-badge-positive-bg",
1740
- badgePositiveText: "--calendar-badge-positive-text",
1741
- badgeTentativeBg: "--calendar-badge-tentative-bg",
1742
- badgeTentativeText: "--calendar-badge-tentative-text"
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
  });