@lekoala/date-picker 0.5.0 → 0.5.1

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 CHANGED
@@ -266,7 +266,7 @@ Deliberately out of scope:
266
266
 
267
267
  ### Host control classes
268
268
 
269
- Set application-wide header styles before creating calendars or pickers:
269
+ Set application-wide header styles, including for calendars and pickers already in the page:
270
270
 
271
271
  ```js
272
272
  import { setDefaultControlClasses } from "@lekoala/date-picker";
@@ -278,4 +278,17 @@ setDefaultControlClasses({
278
278
  });
279
279
  ```
280
280
 
281
- Each role with author classes uses the host design system's skin. Override per element through `controlClasses`; roles without classes retain the default skin. Day cells and the field trigger are unchanged.
281
+ Each role with author classes uses the host design system's skin. Override individual roles through `controlClasses`: omitted roles follow current global defaults, `""` restores the library skin for a role, and `null` follows all defaults. Day cells and the field trigger are unchanged.
282
+
283
+ For a classic script (including the CDN build), use the registered constructor after the script has loaded:
284
+
285
+ ```js
286
+ customElements.get("date-picker").setDefaultControlClasses({
287
+ month: "select sm",
288
+ year: "input sm",
289
+ nav: "btn outline sm icon-only",
290
+ });
291
+ customElements.get("date-picker").setDefaultMessages({ chooseDate: "Choose a date" });
292
+ ```
293
+
294
+ Both element constructors expose `setDefaultControlClasses`, `getDefaultControlClasses`, `setDefaultMessages` and `getDefaultMessages`, sharing the same defaults. Class defaults update inherited roles on connected elements, including instances with partial overrides. Message defaults update elements without a messages override. Properties assigned before definition are reapplied through their setters when the element connects, including `controlClasses`, `messages`, `source` and `range`.
@@ -43,6 +43,26 @@
43
43
  }
44
44
  ],
45
45
  "members": [
46
+ {
47
+ "kind": "method",
48
+ "name": "setDefaultControlClasses",
49
+ "static": true
50
+ },
51
+ {
52
+ "kind": "method",
53
+ "name": "getDefaultControlClasses",
54
+ "static": true
55
+ },
56
+ {
57
+ "kind": "method",
58
+ "name": "setDefaultMessages",
59
+ "static": true
60
+ },
61
+ {
62
+ "kind": "method",
63
+ "name": "getDefaultMessages",
64
+ "static": true
65
+ },
46
66
  {
47
67
  "kind": "getter",
48
68
  "name": "locale"
@@ -94,7 +114,7 @@
94
114
  {
95
115
  "kind": "getter",
96
116
  "name": "controlClasses",
97
- "description": "Author classes for header controls; merged with global defaults."
117
+ "description": "Author classes for header controls; omitted roles follow current global defaults."
98
118
  },
99
119
  {
100
120
  "kind": "getter",
@@ -278,6 +298,26 @@
278
298
  }
279
299
  ],
280
300
  "members": [
301
+ {
302
+ "kind": "method",
303
+ "name": "setDefaultControlClasses",
304
+ "static": true
305
+ },
306
+ {
307
+ "kind": "method",
308
+ "name": "getDefaultControlClasses",
309
+ "static": true
310
+ },
311
+ {
312
+ "kind": "method",
313
+ "name": "setDefaultMessages",
314
+ "static": true
315
+ },
316
+ {
317
+ "kind": "method",
318
+ "name": "getDefaultMessages",
319
+ "static": true
320
+ },
281
321
  {
282
322
  "kind": "getter",
283
323
  "name": "input"
@@ -321,7 +361,7 @@
321
361
  {
322
362
  "kind": "getter",
323
363
  "name": "controlClasses",
324
- "description": "Author classes for header controls; merged with global defaults."
364
+ "description": "Author classes for header controls; omitted roles follow current global defaults."
325
365
  },
326
366
  {
327
367
  "kind": "getter",
@@ -1,4 +1,4 @@
1
- /*** @lekoala/date-picker v0.5.0 - https://github.com/lekoala/date-picker ***/
1
+ /*** @lekoala/date-picker v0.5.1 - https://github.com/lekoala/date-picker ***/
2
2
  (() => {
3
3
  var __defProp = Object.defineProperty;
4
4
  var __getOwnPropNames = Object.getOwnPropertyNames;
@@ -313,14 +313,37 @@
313
313
  function getDefaultControlClasses() {
314
314
  return { ...defaults };
315
315
  }
316
- function resolveControlClasses(classes) {
317
- const result = getDefaultControlClasses();
316
+ function normalizeControlClasses(classes) {
317
+ if (classes == null)
318
+ return null;
319
+ const result = {};
318
320
  for (const role of ["month", "year", "nav"]) {
319
- if (classes && Object.hasOwn(classes, role))
321
+ if (Object.hasOwn(classes, role))
320
322
  result[role] = normalizeControlClass(classes[role]);
321
323
  }
322
324
  return result;
323
325
  }
326
+ function usesDefaultControlClasses(classes) {
327
+ return classes == null || ["month", "year", "nav"].some((role) => !Object.hasOwn(classes, role));
328
+ }
329
+ function resolveControlClasses(classes) {
330
+ return { ...getDefaultControlClasses(), ...normalizeControlClasses(classes) };
331
+ }
332
+ function setDefaultControlClasses(classes) {
333
+ const next = resolveControlClasses(classes);
334
+ if (sameControlClasses(defaults, next))
335
+ return;
336
+ defaults = next;
337
+ for (const listener of listeners)
338
+ listener();
339
+ }
340
+ var listeners = new Set;
341
+ function subscribeDefaultControlClasses(listener) {
342
+ listeners.add(listener);
343
+ return () => {
344
+ listeners.delete(listener);
345
+ };
346
+ }
324
347
 
325
348
  // src/date-range.js
326
349
  function normalizeRange(range) {
@@ -703,6 +726,18 @@
703
726
  function getDefaultMessages() {
704
727
  return { ...defaults2 };
705
728
  }
729
+ function setDefaultMessages(messages) {
730
+ defaults2 = { ...defaults2, ...messages };
731
+ for (const listener of listeners2)
732
+ listener();
733
+ }
734
+ var listeners2 = new Set;
735
+ function subscribeDefaultMessages(listener) {
736
+ listeners2.add(listener);
737
+ return () => {
738
+ listeners2.delete(listener);
739
+ };
740
+ }
706
741
 
707
742
  // src/source.js
708
743
  function normalizeDateStates(payload) {
@@ -725,6 +760,17 @@
725
760
  return map;
726
761
  }
727
762
 
763
+ // src/upgrade-properties.js
764
+ function upgradeProperties(element, properties) {
765
+ for (const property of properties) {
766
+ if (!Object.hasOwn(element, property))
767
+ continue;
768
+ const value = Reflect.get(element, property);
769
+ Reflect.deleteProperty(element, property);
770
+ Reflect.set(element, property, value);
771
+ }
772
+ }
773
+
728
774
  // src/date-calendar.js
729
775
  var uid = 0;
730
776
  function escapeHtml(value) {
@@ -783,6 +829,18 @@
783
829
  "selection",
784
830
  "month-format"
785
831
  ];
832
+ static setDefaultControlClasses(classes) {
833
+ setDefaultControlClasses(classes);
834
+ }
835
+ static getDefaultControlClasses() {
836
+ return getDefaultControlClasses();
837
+ }
838
+ static setDefaultMessages(messages) {
839
+ setDefaultMessages(messages);
840
+ }
841
+ static getDefaultMessages() {
842
+ return getDefaultMessages();
843
+ }
786
844
  constructor() {
787
845
  super();
788
846
  this._id = `date-calendar-${++uid}`;
@@ -802,8 +860,10 @@
802
860
  this._paintedRange = { start: "", end: "" };
803
861
  this._paintedPreview = false;
804
862
  this._renderedStates = new Map;
805
- this._messages = getDefaultMessages();
806
- this._controlClasses = getDefaultControlClasses();
863
+ this._messages = null;
864
+ this._controlClasses = null;
865
+ this._stopDefaultMessages = null;
866
+ this._stopDefaultControlClasses = null;
807
867
  this._onClick = this._onClick.bind(this);
808
868
  this._onChange = this._onChange.bind(this);
809
869
  this._onKeyDown = this._onKeyDown.bind(this);
@@ -812,15 +872,47 @@
812
872
  connectedCallback() {
813
873
  if (this._connected)
814
874
  return;
875
+ upgradeProperties(this, [
876
+ "locale",
877
+ "min",
878
+ "max",
879
+ "firstDay",
880
+ "selection",
881
+ "monthFormat",
882
+ "fixedWeeks",
883
+ "showWeekNumbers",
884
+ "controlClasses",
885
+ "messages",
886
+ "source",
887
+ "dateState",
888
+ "renderDay",
889
+ "isDateDisabled",
890
+ "highlightedRange",
891
+ "value",
892
+ "display"
893
+ ]);
894
+ this._syncModel();
895
+ upgradeProperties(this, ["focusedDate"]);
896
+ this._stopDefaultControlClasses = subscribeDefaultControlClasses(() => {
897
+ if (usesDefaultControlClasses(this._controlClasses))
898
+ this.render();
899
+ });
900
+ this._stopDefaultMessages = subscribeDefaultMessages(() => {
901
+ if (this._messages === null)
902
+ this.render();
903
+ });
815
904
  this._connected = true;
816
905
  this.addEventListener("click", this._onClick);
817
906
  this.addEventListener("change", this._onChange);
818
907
  this.addEventListener("keydown", this._onKeyDown);
819
908
  this.addEventListener("focusin", this._onFocusIn);
820
- this._syncModel();
821
909
  this.render();
822
910
  }
823
911
  disconnectedCallback() {
912
+ this._stopDefaultControlClasses?.();
913
+ this._stopDefaultControlClasses = null;
914
+ this._stopDefaultMessages?.();
915
+ this._stopDefaultMessages = null;
824
916
  this._connected = false;
825
917
  this._loadController?.abort();
826
918
  this._loadController = null;
@@ -941,21 +1033,21 @@
941
1033
  this.toggleAttribute("show-week-numbers", Boolean(value));
942
1034
  }
943
1035
  get controlClasses() {
944
- return { ...this._controlClasses };
1036
+ return resolveControlClasses(this._controlClasses);
945
1037
  }
946
1038
  set controlClasses(value) {
947
- const classes = resolveControlClasses(value);
948
- if (sameControlClasses(classes, this._controlClasses))
1039
+ const previous = this.controlClasses;
1040
+ this._controlClasses = normalizeControlClasses(value);
1041
+ if (sameControlClasses(previous, this.controlClasses))
949
1042
  return;
950
- this._controlClasses = classes;
951
1043
  if (this._connected)
952
1044
  this.render();
953
1045
  }
954
1046
  get messages() {
955
- return this._messages;
1047
+ return this._messages ?? getDefaultMessages();
956
1048
  }
957
1049
  set messages(value) {
958
- this._messages = { ...getDefaultMessages(), ...value || {} };
1050
+ this._messages = value == null ? null : { ...getDefaultMessages(), ...value };
959
1051
  if (this._connected)
960
1052
  this.render();
961
1053
  }
@@ -1216,8 +1308,8 @@
1216
1308
  return [
1217
1309
  formatLongDate(date, this.locale),
1218
1310
  description,
1219
- rangeLabel ? this._messages[rangeLabel] : "",
1220
- state.disabled ? this._messages.unavailable : ""
1311
+ rangeLabel ? this.messages[rangeLabel] : "",
1312
+ state.disabled ? this.messages.unavailable : ""
1221
1313
  ].filter(Boolean).join(". ");
1222
1314
  }
1223
1315
  _updateRangeDom() {
@@ -1398,7 +1490,7 @@
1398
1490
  const minYearAttr = this.min ? ` min="${Number(this.min.slice(0, 4))}"` : "";
1399
1491
  const maxYearAttr = this.max ? ` max="${Number(this.max.slice(0, 4))}"` : "";
1400
1492
  const showWeeks = this.showWeekNumbers && this.firstDay === 1;
1401
- const weekHeader = showWeeks ? `<th scope="col" class="dp-week-heading" abbr="${escapeHtml(this._messages.week)}">#</th>` : "";
1493
+ const weekHeader = showWeeks ? `<th scope="col" class="dp-week-heading" abbr="${escapeHtml(this.messages.week)}">#</th>` : "";
1402
1494
  const monthOptions = names.map((name, index) => {
1403
1495
  const month = index + 1;
1404
1496
  const key = `${String(displayYear).padStart(4, "0")}-${String(month).padStart(2, "0")}`;
@@ -1426,22 +1518,22 @@
1426
1518
  const focusKey = focusedElement instanceof HTMLElement && this.contains(focusedElement) ? this._focusTargetKey(focusedElement) : "";
1427
1519
  const yearFirst = monthYearOrder(locale)[0] === "year";
1428
1520
  this.toggleAttribute("data-year-first", yearFirst);
1429
- const classes = this._controlClasses;
1521
+ const classes = this.controlClasses;
1430
1522
  const monthClass = escapeHtml(classes.month || "dp-skin");
1431
1523
  const yearClass = escapeHtml(classes.year || "dp-skin");
1432
1524
  const navClass = escapeHtml(classes.nav || "dp-skin");
1433
- const monthControl = `<label class="dp-visually-hidden" for="${this._id}-month">${escapeHtml(this._messages.month)}</label>
1434
- <select id="${this._id}-month" class="dp-month-select ${monthClass}" aria-label="${escapeHtml(this._messages.month)}">${monthOptions}</select>`;
1435
- const yearControl = `<label class="dp-visually-hidden" for="${this._id}-year">${escapeHtml(this._messages.year)}</label>
1436
- <input id="${this._id}-year" class="dp-year-input ${yearClass}" type="number" inputmode="numeric" value="${displayYear}"${minYearAttr}${maxYearAttr} aria-label="${escapeHtml(this._messages.year)}">`;
1525
+ const monthControl = `<label class="dp-visually-hidden" for="${this._id}-month">${escapeHtml(this.messages.month)}</label>
1526
+ <select id="${this._id}-month" class="dp-month-select ${monthClass}" aria-label="${escapeHtml(this.messages.month)}">${monthOptions}</select>`;
1527
+ const yearControl = `<label class="dp-visually-hidden" for="${this._id}-year">${escapeHtml(this.messages.year)}</label>
1528
+ <input id="${this._id}-year" class="dp-year-input ${yearClass}" type="number" inputmode="numeric" value="${displayYear}"${minYearAttr}${maxYearAttr} aria-label="${escapeHtml(this.messages.year)}">`;
1437
1529
  this._rendering = true;
1438
1530
  this.innerHTML = `
1439
1531
  <div class="dp-calendar-shell">
1440
1532
  <div class="dp-calendar-header">
1441
1533
  ${yearFirst ? yearControl : monthControl}
1442
1534
  ${yearFirst ? monthControl : yearControl}
1443
- <button type="button" class="dp-nav dp-prev ${navClass}" data-calendar-action="previous" aria-label="${escapeHtml(this._messages.previousMonth)}"${prevDisabled ? " disabled" : ""}><svg aria-hidden="true" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="m4 10 4-4 4 4"/></svg></button>
1444
- <button type="button" class="dp-nav dp-next ${navClass}" data-calendar-action="next" aria-label="${escapeHtml(this._messages.nextMonth)}"${nextDisabled ? " disabled" : ""}><svg aria-hidden="true" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="m4 6 4 4 4-4"/></svg></button>
1535
+ <button type="button" class="dp-nav dp-prev ${navClass}" data-calendar-action="previous" aria-label="${escapeHtml(this.messages.previousMonth)}"${prevDisabled ? " disabled" : ""}><svg aria-hidden="true" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="m4 10 4-4 4 4"/></svg></button>
1536
+ <button type="button" class="dp-nav dp-next ${navClass}" data-calendar-action="next" aria-label="${escapeHtml(this.messages.nextMonth)}"${nextDisabled ? " disabled" : ""}><svg aria-hidden="true" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="m4 6 4 4 4-4"/></svg></button>
1445
1537
  </div>
1446
1538
  <h2 id="${headingId}" class="dp-calendar-heading dp-visually-hidden" aria-live="polite">${escapeHtml(formatMonthYear(`${display}-15`, locale))}</h2>
1447
1539
  <table id="${gridId}" class="dp-grid" role="grid" aria-labelledby="${headingId}">
@@ -2045,6 +2137,18 @@
2045
2137
 
2046
2138
  class DatePickerElement extends HTMLElement {
2047
2139
  static observedAttributes = ["value", "locale", "min", "max", "open-on-focus", "month-format"];
2140
+ static setDefaultControlClasses(classes) {
2141
+ setDefaultControlClasses(classes);
2142
+ }
2143
+ static getDefaultControlClasses() {
2144
+ return getDefaultControlClasses();
2145
+ }
2146
+ static setDefaultMessages(messages) {
2147
+ setDefaultMessages(messages);
2148
+ }
2149
+ static getDefaultMessages() {
2150
+ return getDefaultMessages();
2151
+ }
2048
2152
  constructor() {
2049
2153
  super();
2050
2154
  this._id = `date-picker-${++uid2}`;
@@ -2076,8 +2180,9 @@
2076
2180
  this._stopTracking = null;
2077
2181
  this._open = false;
2078
2182
  this._suppressFocusOpen = false;
2079
- this._messages = getDefaultMessages();
2080
- this._controlClasses = getDefaultControlClasses();
2183
+ this._messages = null;
2184
+ this._controlClasses = null;
2185
+ this._stopDefaultMessages = null;
2081
2186
  this._source = null;
2082
2187
  this._dateState = null;
2083
2188
  this._renderDay = null;
@@ -2090,11 +2195,31 @@
2090
2195
  connectedCallback() {
2091
2196
  if (this._connected)
2092
2197
  return;
2093
- if (this.hasAttribute("range")) {
2198
+ upgradeProperties(this, [
2199
+ "locale",
2200
+ "min",
2201
+ "max",
2202
+ "monthFormat",
2203
+ "openOnFocus",
2204
+ "coordinateSpace",
2205
+ "controlClasses",
2206
+ "messages",
2207
+ "source",
2208
+ "dateState",
2209
+ "renderDay",
2210
+ "isDateDisabled"
2211
+ ]);
2212
+ if (this.hasAttribute("range"))
2094
2213
  this._connectRange();
2095
- return;
2214
+ else
2215
+ this._connectSingle();
2216
+ if (this._connected) {
2217
+ upgradeProperties(this, ["value", "range"]);
2218
+ this._stopDefaultMessages = subscribeDefaultMessages(() => {
2219
+ if (this._messages === null)
2220
+ this._refreshMessages();
2221
+ });
2096
2222
  }
2097
- this._connectSingle();
2098
2223
  }
2099
2224
  _connectSingle() {
2100
2225
  const input = this.querySelector(":scope > input:not([type=hidden]):not([type=time]):not([data-time-start]):not([data-time-end])");
@@ -2105,7 +2230,7 @@
2105
2230
  this._connected = true;
2106
2231
  this._input = input;
2107
2232
  this._discoverTimeFields();
2108
- this._field = new DateFieldController(input, { messages: this._messages, locale: this.locale });
2233
+ this._field = new DateFieldController(input, { messages: this.messages, locale: this.locale });
2109
2234
  this._field.onAttributesChanged = () => this._syncInputState();
2110
2235
  this._field.confirm = (date, options) => this._confirmDate(date, options);
2111
2236
  this._setupFormValue();
@@ -2120,7 +2245,7 @@
2120
2245
  else if (!input.value)
2121
2246
  this._setValue("", { emit: false, format: false });
2122
2247
  else
2123
- input.setCustomValidity(this._messages.invalidDate);
2248
+ input.setCustomValidity(this.messages.invalidDate);
2124
2249
  if (this._field.hidden)
2125
2250
  this._field.hidden.defaultValue = this._value;
2126
2251
  if (input.getAttribute("value") == null && input.defaultValue === "") {
@@ -2161,8 +2286,8 @@
2161
2286
  this._connected = true;
2162
2287
  this._input = null;
2163
2288
  this._fields = [
2164
- new DateFieldController(startInput, { messages: this._messages, locale: this.locale }),
2165
- new DateFieldController(endInput, { messages: this._messages, locale: this.locale })
2289
+ new DateFieldController(startInput, { messages: this.messages, locale: this.locale }),
2290
+ new DateFieldController(endInput, { messages: this.messages, locale: this.locale })
2166
2291
  ];
2167
2292
  this._range = new DateRangeController;
2168
2293
  this._rangeOriginalDescribedBy = [
@@ -2184,9 +2309,9 @@
2184
2309
  const initialEnd = isDate(endInput.value) ? endInput.value : adapter.parse(endInput.value);
2185
2310
  this._setRange(initialStart || "", initialEnd || "", { emit: false });
2186
2311
  if (startInput.value.trim() && !isDate(initialStart))
2187
- startInput.setCustomValidity(this._messages.invalidDate);
2312
+ startInput.setCustomValidity(this.messages.invalidDate);
2188
2313
  if (endInput.value.trim() && !isDate(initialEnd))
2189
- endInput.setCustomValidity(this._messages.invalidDate);
2314
+ endInput.setCustomValidity(this.messages.invalidDate);
2190
2315
  if (this._fields[0].hidden)
2191
2316
  this._fields[0].hidden.defaultValue = this._range.start;
2192
2317
  if (this._fields[1].hidden)
@@ -2199,6 +2324,8 @@
2199
2324
  }
2200
2325
  }
2201
2326
  disconnectedCallback() {
2327
+ this._stopDefaultMessages?.();
2328
+ this._stopDefaultMessages = null;
2202
2329
  this._connected = false;
2203
2330
  this.hide(false);
2204
2331
  this._controller?.abort();
@@ -2333,28 +2460,34 @@
2333
2460
  return this._open;
2334
2461
  }
2335
2462
  get controlClasses() {
2336
- return { ...this._controlClasses };
2463
+ return resolveControlClasses(this._controlClasses);
2337
2464
  }
2338
2465
  set controlClasses(value) {
2339
- const classes = resolveControlClasses(value);
2340
- if (sameControlClasses(classes, this._controlClasses))
2341
- return;
2342
- this._controlClasses = classes;
2466
+ this._controlClasses = normalizeControlClasses(value);
2343
2467
  if (this._calendar)
2344
2468
  this._calendar.controlClasses = this._controlClasses;
2345
2469
  }
2346
2470
  get messages() {
2347
- return this._messages;
2471
+ return this._messages ?? getDefaultMessages();
2348
2472
  }
2349
2473
  set messages(value) {
2350
- this._messages = { ...getDefaultMessages(), ...value || {} };
2474
+ this._messages = value == null ? null : { ...getDefaultMessages(), ...value };
2351
2475
  if (this._calendar)
2352
2476
  this._calendar.messages = this._messages;
2477
+ this._refreshMessages();
2478
+ }
2479
+ _refreshMessages() {
2480
+ const messages = this.messages;
2353
2481
  for (const field of this._fields || [])
2354
- field.setMessages(this._messages);
2355
- this._field?.setMessages(this._messages);
2482
+ field.setMessages(messages);
2483
+ this._field?.setMessages(messages);
2484
+ this._panel?.setAttribute("aria-label", messages.calendar);
2485
+ const field = this._field ?? this._fields?.[0];
2486
+ if (this._formatHint && field)
2487
+ this._formatHint.textContent = `${messages.formatHint}: ${field.placeholder}`;
2356
2488
  this._refreshButtonLabel();
2357
- this.validate();
2489
+ if (this._connected)
2490
+ this.validate();
2358
2491
  }
2359
2492
  get source() {
2360
2493
  return this._source;
@@ -2482,7 +2615,7 @@
2482
2615
  panel.className = "dp-picker-panel";
2483
2616
  panel.setAttribute("popover", "manual");
2484
2617
  panel.setAttribute("role", "dialog");
2485
- panel.setAttribute("aria-label", this._messages.calendar);
2618
+ panel.setAttribute("aria-label", this.messages.calendar);
2486
2619
  const calendar = new DateCalendarElement;
2487
2620
  calendar.selection = "none";
2488
2621
  calendar.fixedWeeks = true;
@@ -2971,7 +3104,7 @@
2971
3104
  if (!this._rangeMode() && this._value)
2972
3105
  calendar.value = this._value;
2973
3106
  if (panel)
2974
- panel.setAttribute("aria-label", this._messages.calendar);
3107
+ panel.setAttribute("aria-label", this.messages.calendar);
2975
3108
  }
2976
3109
  _refreshLocale() {
2977
3110
  const hint = this._formatHint;
@@ -2980,7 +3113,7 @@
2980
3113
  if (this._rangeMode() && this._fields) {
2981
3114
  this._fields[0].setLocale(this.locale);
2982
3115
  this._fields[1].setLocale(this.locale);
2983
- hint.textContent = `${this._messages.formatHint}: ${this._fields[0].placeholder}`;
3116
+ hint.textContent = `${this.messages.formatHint}: ${this._fields[0].placeholder}`;
2984
3117
  for (const [index, field] of this._fields.entries()) {
2985
3118
  if (!field.input.hasAttribute("placeholder") || this._generatedPlaceholder) {
2986
3119
  field.input.placeholder = field.placeholder;
@@ -2997,7 +3130,7 @@
2997
3130
  if (!field)
2998
3131
  return;
2999
3132
  field.setLocale(this.locale);
3000
- hint.textContent = `${this._messages.formatHint}: ${field.placeholder}`;
3133
+ hint.textContent = `${this.messages.formatHint}: ${field.placeholder}`;
3001
3134
  if (!field.input.hasAttribute("placeholder") || this._generatedPlaceholder) {
3002
3135
  field.input.placeholder = field.placeholder;
3003
3136
  this._generatedPlaceholder = true;
@@ -3014,7 +3147,7 @@
3014
3147
  this._refreshRangeButtonLabel();
3015
3148
  return;
3016
3149
  }
3017
- const prefix = this._value ? this._messages.changeDate : this._messages.chooseDate;
3150
+ const prefix = this._value ? this.messages.changeDate : this.messages.chooseDate;
3018
3151
  const suffix = this._value ? `, ${formatLongDate(this._value, this.locale)}` : "";
3019
3152
  single.setAttribute("aria-label", `${prefix}${suffix}`);
3020
3153
  }
@@ -3024,9 +3157,9 @@
3024
3157
  const { start, end } = this._range;
3025
3158
  for (const { button, endpoint } of this._buttons) {
3026
3159
  const bound = endpoint === "end" ? end : start;
3027
- const prefix = bound ? this._messages.changeDate : this._messages.chooseDate;
3160
+ const prefix = bound ? this.messages.changeDate : this.messages.chooseDate;
3028
3161
  const suffix = bound ? `, ${formatLongDate(bound, this.locale)}` : "";
3029
- const boundLabel = endpoint === "end" ? this._messages.rangeEnd : this._messages.rangeStart;
3162
+ const boundLabel = endpoint === "end" ? this.messages.rangeEnd : this.messages.rangeStart;
3030
3163
  button.setAttribute("aria-label", `${prefix}${suffix}, ${boundLabel}`);
3031
3164
  }
3032
3165
  }
@@ -3073,7 +3206,7 @@
3073
3206
  const confirmed = await calendar.ensureDate(date);
3074
3207
  const state = calendar.getDateState(date);
3075
3208
  if (!confirmed || state.disabled)
3076
- return { ok: false, message: this._messages.unavailableDate };
3209
+ return { ok: false, message: this.messages.unavailableDate };
3077
3210
  return { ok: true };
3078
3211
  }
3079
3212
  async _commitText(emit, options = {}) {
@@ -3189,7 +3322,7 @@
3189
3322
  for (const bound of bounds) {
3190
3323
  const index = bound === "end" ? 1 : 0;
3191
3324
  const input = this._fields[index].input;
3192
- const message = bound === "end" ? this._messages.rangeOrderEnd : this._messages.rangeOrderStart;
3325
+ const message = bound === "end" ? this.messages.rangeOrderEnd : this.messages.rangeOrderStart;
3193
3326
  const shouldHaveOrder = inverted && bound === which;
3194
3327
  if (shouldHaveOrder) {
3195
3328
  input.setCustomValidity(message);
@@ -3211,7 +3344,7 @@
3211
3344
  const input = inputs[index];
3212
3345
  if (!input)
3213
3346
  continue;
3214
- const message = bound === "end" ? this._messages.rangeOrderEnd : this._messages.rangeOrderStart;
3347
+ const message = bound === "end" ? this.messages.rangeOrderEnd : this.messages.rangeOrderStart;
3215
3348
  const shouldHaveOrder = inverted && bound === which;
3216
3349
  if (shouldHaveOrder) {
3217
3350
  input.setCustomValidity(message);