kalendly 0.3.4 → 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.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("calendar-cell-other-month");
165
+ classes.push("kalendly-cell-other-month");
166
166
  }
167
167
  if (calendarDate.isToday) {
168
- classes.push("calendar-cell-today");
168
+ classes.push("kalendly-cell-today");
169
169
  }
170
170
  if (calendarDate.hasEvents) {
171
- classes.push("calendar-cell-has-event");
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-calendar");
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-calendar");
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
- const heading = this.getAttribute("heading");
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
- console.warn(
788
- `<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}.`
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 requested = Number(this.getAttribute("months") ?? 1);
805
- if (!Number.isInteger(requested) || requested < 1) return 1;
806
- return Math.min(requested, 2);
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
- const val = this.getAttribute("min-year");
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
- const val = this.getAttribute("max-year");
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.engine) return;
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
- return this.pendingUpdate ?? Promise.resolve();
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 category-${slugifyToken(event.category)}">${escapeHtml(getCategoryLabel(event.category))}</span>` : ""}
1059
- ${event.priority ? `<span class="badge priority priority-${slugifyToken(event.priority)}">${escapeHtml(getPriorityLabel(event.priority))}</span>` : ""}
1060
- ${event.status && event.status !== "scheduled" ? `<span class="badge status status-${slugifyToken(event.status)}">${escapeHtml(getStatusLabel(event.status))}</span>` : ""}
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="calendar-pane">
1165
- ${multiMonth ? `<div class="calendar-pane-caption">${escapeHtml(pane.monthAndYearText)}</div>` : ""}
1166
- <table class="calendar-table calendar-table-bordered">
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="calendar-skeleton" aria-hidden="true"></td>`
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("calendar-cell-selected");
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("calendar-cell-out-of-range");
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="calendar-title">
1277
+ <div class="kalendly-title">
1252
1278
  <h1>${escapeHtml(title)}</h1>
1253
1279
  </div>
1254
1280
  ` : ""}
1255
1281
 
1256
- <div class="calendar-content">
1257
- <div class="calendar-card">
1258
- <div class="calendar-nav-header">
1259
- <button type="button" class="calendar-nav-arrow" data-action="previous" aria-label="Previous month">
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
  &#8249;
1261
1287
  </button>
1262
1288
 
1263
- <div class="calendar-picker-container" data-picker-container>
1289
+ <div class="kalendly-picker-container" data-picker-container>
1264
1290
  <button
1265
1291
  type="button"
1266
- class="calendar-picker-btn"
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="calendar-picker-chevron">&#9662;</span>
1298
+ <span class="kalendly-picker-chevron">&#9662;</span>
1273
1299
  </button>
1274
1300
 
1275
1301
  ${this.pickerOpen ? `
1276
- <div class="calendar-picker-dropdown">
1277
- <div class="calendar-picker-year-row">
1302
+ <div class="kalendly-picker-dropdown">
1303
+ <div class="kalendly-picker-year-row">
1278
1304
  <button
1279
1305
  type="button"
1280
- class="calendar-picker-year-arrow"
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
  >&#8249;</button>
1285
1311
  <input
1286
1312
  type="text"
1287
- class="calendar-picker-year-input${!this.yearInputValid ? " invalid" : ""}"
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="calendar-picker-year-arrow"
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
  >&#8250;</button>
1299
1325
  </div>
1300
1326
 
1301
- <div class="calendar-picker-months">
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="calendar-picker-month${isSelected ? " selected" : ""}${isCurrent ? " current-month" : ""}"
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="calendar-today-btn"
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="calendar-nav-arrow" data-action="next" aria-label="Next month">
1352
+ <button type="button" class="kalendly-nav-arrow" data-action="next" aria-label="Next month">
1327
1353
  &#8250;
1328
1354
  </button>
1329
1355
  </div>
1330
1356
 
1331
- <div class="calendar-panes">
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="date-popup">
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(".date-popup");
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: "--calendar-primary-color",
1677
- secondary: "--calendar-secondary-color",
1678
- tertiary: "--calendar-tertiary-color",
1679
- textColor: "--calendar-text-color",
1680
- textLight: "--calendar-text-light",
1681
- background: "--calendar-background",
1682
- cellHover: "--calendar-cell-hover",
1683
- borderColor: "--calendar-border-color",
1684
- todayOutline: "--calendar-today-outline",
1685
- selectedBg: "--calendar-selected-bg",
1686
- outOfRangeBg: "--calendar-out-of-range-bg",
1687
- outOfRangeFg: "--calendar-out-of-range-fg",
1688
- navArrowFg: "--calendar-nav-arrow-fg",
1689
- navArrowBg: "--calendar-nav-arrow-bg",
1690
- navArrowBorder: "--calendar-nav-arrow-border",
1691
- navArrowHoverFg: "--calendar-nav-arrow-hover-fg",
1692
- navArrowHoverBg: "--calendar-nav-arrow-hover-bg",
1693
- inputInvalidBg: "--calendar-input-invalid-bg",
1694
- popupHeaderFg: "--calendar-popup-header-fg",
1695
- popupCloseFg: "--calendar-popup-close-fg",
1696
- popupCloseBg: "--calendar-popup-close-bg",
1697
- popupCloseHoverBg: "--calendar-popup-close-hover-bg",
1698
- headerBg: "--calendar-header-bg",
1699
- popupBg: "--calendar-popup-bg",
1700
- pickerBg: "--calendar-picker-bg",
1701
- pickerShadow: "--calendar-picker-shadow",
1702
- eventIndicator: "--calendar-event-indicator",
1703
- onAccent: "--calendar-on-accent",
1704
- link: "--calendar-link",
1705
- openBg: "--calendar-open-bg",
1706
- openFg: "--calendar-open-fg",
1707
- conditionalBg: "--calendar-conditional-bg",
1708
- conditionalFg: "--calendar-conditional-fg",
1709
- blockedBg: "--calendar-blocked-bg",
1710
- blockedFg: "--calendar-blocked-fg",
1711
- rangeBg: "--calendar-range-bg",
1712
- rangeOutline: "--calendar-range-outline",
1713
- inRangeBg: "--calendar-in-range-bg",
1714
- inRangeOutline: "--calendar-in-range-outline",
1715
- badgeBg: "--calendar-badge-bg",
1716
- badgeText: "--calendar-badge-text",
1717
- badgeSuccessBg: "--calendar-badge-success-bg",
1718
- badgeSuccessText: "--calendar-badge-success-text",
1719
- badgeInfoBg: "--calendar-badge-info-bg",
1720
- badgeInfoText: "--calendar-badge-info-text",
1721
- badgeWarningBg: "--calendar-badge-warning-bg",
1722
- badgeWarningText: "--calendar-badge-warning-text",
1723
- badgeDangerBg: "--calendar-badge-danger-bg",
1724
- badgeDangerText: "--calendar-badge-danger-text",
1725
- badgeNeutralBg: "--calendar-badge-neutral-bg",
1726
- badgeNeutralText: "--calendar-badge-neutral-text",
1727
- badgePositiveBg: "--calendar-badge-positive-bg",
1728
- badgePositiveText: "--calendar-badge-positive-text",
1729
- badgeTentativeBg: "--calendar-badge-tentative-bg",
1730
- badgeTentativeText: "--calendar-badge-tentative-text"
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
  });