@melodicdev/components 1.5.9 → 1.5.11

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.
Files changed (23) hide show
  1. package/assets/melodic-components.js +99 -74
  2. package/assets/melodic-components.js.map +1 -1
  3. package/assets/melodic-components.min.js +556 -536
  4. package/lib/components/forms/autocomplete/autocomplete.component.d.ts +4 -0
  5. package/lib/components/forms/autocomplete/autocomplete.component.d.ts.map +1 -1
  6. package/lib/components/forms/autocomplete/autocomplete.component.js +10 -3
  7. package/lib/components/forms/date-picker/date-picker.component.d.ts +8 -2
  8. package/lib/components/forms/date-picker/date-picker.component.d.ts.map +1 -1
  9. package/lib/components/forms/date-picker/date-picker.component.js +32 -21
  10. package/lib/components/forms/date-picker/date-picker.styles.d.ts.map +1 -1
  11. package/lib/components/forms/date-picker/date-picker.styles.js +53 -27
  12. package/lib/components/forms/date-picker/date-picker.template.d.ts.map +1 -1
  13. package/lib/components/forms/date-picker/date-picker.template.js +27 -17
  14. package/lib/components/forms/date-time-picker/date-time-picker.component.d.ts.map +1 -1
  15. package/lib/components/forms/date-time-picker/date-time-picker.component.js +47 -0
  16. package/lib/components/forms/time-picker/time-picker.component.d.ts +5 -0
  17. package/lib/components/forms/time-picker/time-picker.component.d.ts.map +1 -1
  18. package/lib/components/forms/time-picker/time-picker.component.js +29 -5
  19. package/lib/components/forms/time-picker/time-picker.styles.d.ts.map +1 -1
  20. package/lib/components/forms/time-picker/time-picker.styles.js +53 -27
  21. package/lib/components/forms/time-picker/time-picker.template.d.ts.map +1 -1
  22. package/lib/components/forms/time-picker/time-picker.template.js +28 -17
  23. package/package.json +1 -1
@@ -9530,23 +9530,33 @@ function datePickerTemplate(c) {
9530
9530
  </label>
9531
9531
  `)}
9532
9532
 
9533
- <button
9534
- type="button"
9535
- class="ml-date-picker__trigger"
9536
- ?disabled=${c.disabled}
9537
- aria-haspopup="dialog"
9538
- aria-expanded=${c.isOpen ? "true" : "false"}
9539
- @click=${c.toggleCalendar}
9540
- @keydown=${c.handleKeyDown}
9541
- >
9542
- <ml-icon icon="calendar-blank" size="sm" class="ml-date-picker__icon"></ml-icon>
9543
- <span class=${classMap({
9544
- "ml-date-picker__value": true,
9545
- "ml-date-picker__value--placeholder": !c.value
9546
- })}>
9547
- ${c.value ? c.displayValue : c.placeholder}
9548
- </span>
9549
- </button>
9533
+ <div class="ml-date-picker__trigger">
9534
+ <input
9535
+ type="date"
9536
+ class="ml-date-picker__input"
9537
+ .value=${c.value}
9538
+ min=${c.min}
9539
+ max=${c.max}
9540
+ placeholder=${c.placeholder}
9541
+ ?disabled=${c.disabled}
9542
+ ?required=${c.required}
9543
+ aria-haspopup="dialog"
9544
+ aria-expanded=${c.isOpen ? "true" : "false"}
9545
+ @change=${c.handleInput}
9546
+ @click=${c.handleInputClick}
9547
+ @keydown=${c.handleKeyDown}
9548
+ />
9549
+ <button
9550
+ type="button"
9551
+ class="ml-date-picker__calendar-btn"
9552
+ ?disabled=${c.disabled}
9553
+ aria-label="Open calendar"
9554
+ tabindex="-1"
9555
+ @click=${c.toggleCalendar}
9556
+ >
9557
+ <ml-icon icon="calendar-blank" size="sm" class="ml-date-picker__icon"></ml-icon>
9558
+ </button>
9559
+ </div>
9550
9560
 
9551
9561
  <div class="ml-date-picker__popover" popover="auto">
9552
9562
  <ml-calendar
@@ -9637,32 +9647,24 @@ const datePickerStyles = () => css`
9637
9647
  margin-left: var(--ml-space-0-5);
9638
9648
  }
9639
9649
 
9640
- /* Trigger button */
9650
+ /* Trigger wrapper */
9641
9651
  .ml-date-picker__trigger {
9642
9652
  display: flex;
9643
9653
  align-items: center;
9644
- gap: var(--ml-date-picker-gap);
9645
9654
  width: 100%;
9646
- padding: var(--ml-date-picker-padding);
9647
9655
  border: var(--ml-date-picker-border-width) solid var(--ml-date-picker-border-color);
9648
9656
  border-radius: var(--ml-date-picker-border-radius);
9649
9657
  background-color: var(--ml-date-picker-bg);
9650
- color: var(--ml-date-picker-color);
9651
- cursor: pointer;
9652
- font-family: var(--ml-date-picker-font-family);
9653
- font-size: var(--ml-date-picker-font-size);
9654
- text-align: left;
9655
9658
  transition:
9656
9659
  border-color var(--ml-date-picker-transition-duration) var(--ml-date-picker-transition-easing),
9657
9660
  box-shadow var(--ml-date-picker-transition-duration) var(--ml-date-picker-transition-easing);
9658
9661
  }
9659
9662
 
9660
- .ml-date-picker__trigger:hover:not(:disabled) {
9663
+ .ml-date-picker__trigger:hover:not(:has(:disabled)) {
9661
9664
  border-color: var(--ml-date-picker-hover-border-color);
9662
9665
  }
9663
9666
 
9664
- .ml-date-picker__trigger:focus-visible {
9665
- outline: none;
9667
+ .ml-date-picker__trigger:focus-within {
9666
9668
  border-color: var(--ml-date-picker-focus-border-color);
9667
9669
  box-shadow: var(--ml-date-picker-focus-shadow);
9668
9670
  }
@@ -9676,7 +9678,7 @@ const datePickerStyles = () => css`
9676
9678
  border-color: var(--ml-date-picker-error-border-color);
9677
9679
  }
9678
9680
 
9679
- .ml-date-picker--error .ml-date-picker__trigger:focus-visible,
9681
+ .ml-date-picker--error .ml-date-picker__trigger:focus-within,
9680
9682
  .ml-date-picker--error.ml-date-picker--open .ml-date-picker__trigger {
9681
9683
  box-shadow: var(--ml-date-picker-error-focus-shadow);
9682
9684
  }
@@ -9687,39 +9689,73 @@ const datePickerStyles = () => css`
9687
9689
  background-color: var(--ml-date-picker-disabled-bg);
9688
9690
  }
9689
9691
 
9692
+ /* Date input */
9693
+ .ml-date-picker__input {
9694
+ flex: 1;
9695
+ min-width: 0;
9696
+ border: none;
9697
+ outline: none;
9698
+ background: transparent;
9699
+ color: var(--ml-date-picker-color);
9700
+ font-family: var(--ml-date-picker-font-family);
9701
+ font-size: var(--ml-date-picker-font-size);
9702
+ padding: var(--ml-date-picker-padding);
9703
+ }
9704
+
9705
+ /* Hide native date picker indicator across browsers */
9706
+ .ml-date-picker__input::-webkit-calendar-picker-indicator {
9707
+ display: none;
9708
+ -webkit-appearance: none;
9709
+ }
9710
+
9711
+ .ml-date-picker__input::-webkit-date-and-time-value {
9712
+ text-align: left;
9713
+ }
9714
+
9715
+ .ml-date-picker__input:disabled {
9716
+ cursor: not-allowed;
9717
+ }
9718
+
9690
9719
  /* Sizes */
9691
- .ml-date-picker--sm .ml-date-picker__trigger {
9720
+ .ml-date-picker--sm .ml-date-picker__input {
9692
9721
  padding: var(--ml-space-2) var(--ml-space-3);
9693
9722
  font-size: var(--ml-text-sm);
9694
9723
  }
9695
9724
 
9696
- .ml-date-picker--md .ml-date-picker__trigger {
9725
+ .ml-date-picker--md .ml-date-picker__input {
9697
9726
  padding: var(--ml-space-2-5) var(--ml-space-3-5);
9698
9727
  font-size: var(--ml-text-sm);
9699
9728
  }
9700
9729
 
9701
- .ml-date-picker--lg .ml-date-picker__trigger {
9730
+ .ml-date-picker--lg .ml-date-picker__input {
9702
9731
  padding: var(--ml-space-3) var(--ml-space-3-5);
9703
9732
  font-size: var(--ml-text-base);
9704
9733
  }
9705
9734
 
9706
- /* Icon */
9707
- .ml-date-picker__icon {
9708
- flex-shrink: 0;
9735
+ /* Calendar button */
9736
+ .ml-date-picker__calendar-btn {
9737
+ display: flex;
9738
+ align-items: center;
9739
+ justify-content: center;
9740
+ border: none;
9741
+ background: transparent;
9742
+ cursor: pointer;
9743
+ padding: 0 var(--ml-space-3) 0 0;
9709
9744
  color: var(--ml-date-picker-icon-color);
9745
+ transition: color var(--ml-date-picker-transition-duration) var(--ml-date-picker-transition-easing);
9710
9746
  }
9711
9747
 
9712
- /* Value */
9713
- .ml-date-picker__value {
9714
- flex: 1;
9715
- min-width: 0;
9716
- overflow: hidden;
9717
- text-overflow: ellipsis;
9718
- white-space: nowrap;
9748
+ .ml-date-picker__calendar-btn:hover:not(:disabled) {
9749
+ color: var(--ml-date-picker-color);
9719
9750
  }
9720
9751
 
9721
- .ml-date-picker__value--placeholder {
9722
- color: var(--ml-date-picker-placeholder-color);
9752
+ .ml-date-picker__calendar-btn:disabled {
9753
+ cursor: not-allowed;
9754
+ }
9755
+
9756
+ /* Icon */
9757
+ .ml-date-picker__icon {
9758
+ flex-shrink: 0;
9723
9759
  }
9724
9760
 
9725
9761
  /* Popover */
@@ -9771,29 +9807,6 @@ const datePickerStyles = () => css`
9771
9807
  color: var(--ml-date-picker-error-color);
9772
9808
  }
9773
9809
  `;
9774
- var MONTH_SHORT = [
9775
- "Jan",
9776
- "Feb",
9777
- "Mar",
9778
- "Apr",
9779
- "May",
9780
- "Jun",
9781
- "Jul",
9782
- "Aug",
9783
- "Sep",
9784
- "Oct",
9785
- "Nov",
9786
- "Dec"
9787
- ];
9788
- function formatDisplay(iso) {
9789
- if (!iso) return "";
9790
- const parts = iso.split("-");
9791
- if (parts.length !== 3) return iso;
9792
- const month = parseInt(parts[1], 10) - 1;
9793
- const day = parseInt(parts[2], 10);
9794
- const year = parseInt(parts[0], 10);
9795
- return `${MONTH_SHORT[month]} ${day}, ${year}`;
9796
- }
9797
9810
  var DatePickerComponent = class DatePickerComponent$1 {
9798
9811
  constructor() {
9799
9812
  this.value = "";
@@ -9813,6 +9826,13 @@ var DatePickerComponent = class DatePickerComponent$1 {
9813
9826
  const popoverEl = this.getPopoverEl();
9814
9827
  if (popoverEl) popoverEl.togglePopover();
9815
9828
  };
9829
+ this.handleInput = (event) => {
9830
+ const input = event.target;
9831
+ this.commitValue(input.value);
9832
+ };
9833
+ this.handleInputClick = () => {
9834
+ if (!this.isOpen) this.toggleCalendar();
9835
+ };
9816
9836
  this.handleDateSelect = (event) => {
9817
9837
  event.stopPropagation();
9818
9838
  const detail = event.detail;
@@ -9823,9 +9843,14 @@ var DatePickerComponent = class DatePickerComponent$1 {
9823
9843
  if (event.key === "Escape" && this.isOpen) {
9824
9844
  event.preventDefault();
9825
9845
  this.closePopover();
9826
- } else if ((event.key === "Enter" || event.key === " " || event.key === "ArrowDown") && !this.isOpen) {
9846
+ }
9847
+ if (event.key === " ") {
9827
9848
  event.preventDefault();
9828
- this.toggleCalendar();
9849
+ if (!this.isOpen) this.toggleCalendar();
9850
+ }
9851
+ if (event.key === "F4" || event.altKey && event.key === "ArrowDown") {
9852
+ event.preventDefault();
9853
+ if (!this.isOpen) this.toggleCalendar();
9829
9854
  }
9830
9855
  };
9831
9856
  this._handleToggle = (event) => {
@@ -9840,9 +9865,6 @@ var DatePickerComponent = class DatePickerComponent$1 {
9840
9865
  }
9841
9866
  };
9842
9867
  }
9843
- get displayValue() {
9844
- return formatDisplay(this.value);
9845
- }
9846
9868
  onCreate() {
9847
9869
  const popoverEl = this.getPopoverEl();
9848
9870
  if (popoverEl) popoverEl.addEventListener("toggle", this._handleToggle);
@@ -9885,8 +9907,11 @@ var DatePickerComponent = class DatePickerComponent$1 {
9885
9907
  popoverEl.style.top = `${y}px`;
9886
9908
  }
9887
9909
  returnFocus() {
9888
- const triggerEl = this.getTriggerEl();
9889
- if (triggerEl) triggerEl.focus();
9910
+ const inputEl = this.getInputEl();
9911
+ if (inputEl) inputEl.focus();
9912
+ }
9913
+ getInputEl() {
9914
+ return this.elementRef.shadowRoot?.querySelector(".ml-date-picker__input");
9890
9915
  }
9891
9916
  getTriggerEl() {
9892
9917
  return this.elementRef.shadowRoot?.querySelector(".ml-date-picker__trigger");