@melodicdev/components 1.5.8 → 1.5.10

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 (22) hide show
  1. package/assets/melodic-components.js +103 -74
  2. package/assets/melodic-components.js.map +1 -1
  3. package/assets/melodic-components.min.js +560 -536
  4. package/lib/components/forms/button/button.styles.d.ts.map +1 -1
  5. package/lib/components/forms/button/button.styles.js +4 -0
  6. package/lib/components/forms/date-picker/date-picker.component.d.ts +8 -2
  7. package/lib/components/forms/date-picker/date-picker.component.d.ts.map +1 -1
  8. package/lib/components/forms/date-picker/date-picker.component.js +32 -21
  9. package/lib/components/forms/date-picker/date-picker.styles.d.ts.map +1 -1
  10. package/lib/components/forms/date-picker/date-picker.styles.js +53 -27
  11. package/lib/components/forms/date-picker/date-picker.template.d.ts.map +1 -1
  12. package/lib/components/forms/date-picker/date-picker.template.js +27 -17
  13. package/lib/components/forms/date-time-picker/date-time-picker.component.d.ts.map +1 -1
  14. package/lib/components/forms/date-time-picker/date-time-picker.component.js +47 -0
  15. package/lib/components/forms/time-picker/time-picker.component.d.ts +5 -0
  16. package/lib/components/forms/time-picker/time-picker.component.d.ts.map +1 -1
  17. package/lib/components/forms/time-picker/time-picker.component.js +29 -5
  18. package/lib/components/forms/time-picker/time-picker.styles.d.ts.map +1 -1
  19. package/lib/components/forms/time-picker/time-picker.styles.js +53 -27
  20. package/lib/components/forms/time-picker/time-picker.template.d.ts.map +1 -1
  21. package/lib/components/forms/time-picker/time-picker.template.js +28 -17
  22. package/package.json +1 -1
@@ -5421,6 +5421,10 @@ const buttonStyles = () => css`
5421
5421
  width: 1.25em;
5422
5422
  height: 1.25em;
5423
5423
  }
5424
+
5425
+ ::slotted(ml-icon) {
5426
+ --ml-icon-size: 1.125em;
5427
+ }
5424
5428
  `;
5425
5429
  var ButtonComponent = class ButtonComponent$1 {
5426
5430
  constructor() {
@@ -9526,23 +9530,33 @@ function datePickerTemplate(c) {
9526
9530
  </label>
9527
9531
  `)}
9528
9532
 
9529
- <button
9530
- type="button"
9531
- class="ml-date-picker__trigger"
9532
- ?disabled=${c.disabled}
9533
- aria-haspopup="dialog"
9534
- aria-expanded=${c.isOpen ? "true" : "false"}
9535
- @click=${c.toggleCalendar}
9536
- @keydown=${c.handleKeyDown}
9537
- >
9538
- <ml-icon icon="calendar-blank" size="sm" class="ml-date-picker__icon"></ml-icon>
9539
- <span class=${classMap({
9540
- "ml-date-picker__value": true,
9541
- "ml-date-picker__value--placeholder": !c.value
9542
- })}>
9543
- ${c.value ? c.displayValue : c.placeholder}
9544
- </span>
9545
- </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>
9546
9560
 
9547
9561
  <div class="ml-date-picker__popover" popover="auto">
9548
9562
  <ml-calendar
@@ -9633,32 +9647,24 @@ const datePickerStyles = () => css`
9633
9647
  margin-left: var(--ml-space-0-5);
9634
9648
  }
9635
9649
 
9636
- /* Trigger button */
9650
+ /* Trigger wrapper */
9637
9651
  .ml-date-picker__trigger {
9638
9652
  display: flex;
9639
9653
  align-items: center;
9640
- gap: var(--ml-date-picker-gap);
9641
9654
  width: 100%;
9642
- padding: var(--ml-date-picker-padding);
9643
9655
  border: var(--ml-date-picker-border-width) solid var(--ml-date-picker-border-color);
9644
9656
  border-radius: var(--ml-date-picker-border-radius);
9645
9657
  background-color: var(--ml-date-picker-bg);
9646
- color: var(--ml-date-picker-color);
9647
- cursor: pointer;
9648
- font-family: var(--ml-date-picker-font-family);
9649
- font-size: var(--ml-date-picker-font-size);
9650
- text-align: left;
9651
9658
  transition:
9652
9659
  border-color var(--ml-date-picker-transition-duration) var(--ml-date-picker-transition-easing),
9653
9660
  box-shadow var(--ml-date-picker-transition-duration) var(--ml-date-picker-transition-easing);
9654
9661
  }
9655
9662
 
9656
- .ml-date-picker__trigger:hover:not(:disabled) {
9663
+ .ml-date-picker__trigger:hover:not(:has(:disabled)) {
9657
9664
  border-color: var(--ml-date-picker-hover-border-color);
9658
9665
  }
9659
9666
 
9660
- .ml-date-picker__trigger:focus-visible {
9661
- outline: none;
9667
+ .ml-date-picker__trigger:focus-within {
9662
9668
  border-color: var(--ml-date-picker-focus-border-color);
9663
9669
  box-shadow: var(--ml-date-picker-focus-shadow);
9664
9670
  }
@@ -9672,7 +9678,7 @@ const datePickerStyles = () => css`
9672
9678
  border-color: var(--ml-date-picker-error-border-color);
9673
9679
  }
9674
9680
 
9675
- .ml-date-picker--error .ml-date-picker__trigger:focus-visible,
9681
+ .ml-date-picker--error .ml-date-picker__trigger:focus-within,
9676
9682
  .ml-date-picker--error.ml-date-picker--open .ml-date-picker__trigger {
9677
9683
  box-shadow: var(--ml-date-picker-error-focus-shadow);
9678
9684
  }
@@ -9683,39 +9689,73 @@ const datePickerStyles = () => css`
9683
9689
  background-color: var(--ml-date-picker-disabled-bg);
9684
9690
  }
9685
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
+
9686
9719
  /* Sizes */
9687
- .ml-date-picker--sm .ml-date-picker__trigger {
9720
+ .ml-date-picker--sm .ml-date-picker__input {
9688
9721
  padding: var(--ml-space-2) var(--ml-space-3);
9689
9722
  font-size: var(--ml-text-sm);
9690
9723
  }
9691
9724
 
9692
- .ml-date-picker--md .ml-date-picker__trigger {
9725
+ .ml-date-picker--md .ml-date-picker__input {
9693
9726
  padding: var(--ml-space-2-5) var(--ml-space-3-5);
9694
9727
  font-size: var(--ml-text-sm);
9695
9728
  }
9696
9729
 
9697
- .ml-date-picker--lg .ml-date-picker__trigger {
9730
+ .ml-date-picker--lg .ml-date-picker__input {
9698
9731
  padding: var(--ml-space-3) var(--ml-space-3-5);
9699
9732
  font-size: var(--ml-text-base);
9700
9733
  }
9701
9734
 
9702
- /* Icon */
9703
- .ml-date-picker__icon {
9704
- 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;
9705
9744
  color: var(--ml-date-picker-icon-color);
9745
+ transition: color var(--ml-date-picker-transition-duration) var(--ml-date-picker-transition-easing);
9706
9746
  }
9707
9747
 
9708
- /* Value */
9709
- .ml-date-picker__value {
9710
- flex: 1;
9711
- min-width: 0;
9712
- overflow: hidden;
9713
- text-overflow: ellipsis;
9714
- white-space: nowrap;
9748
+ .ml-date-picker__calendar-btn:hover:not(:disabled) {
9749
+ color: var(--ml-date-picker-color);
9750
+ }
9751
+
9752
+ .ml-date-picker__calendar-btn:disabled {
9753
+ cursor: not-allowed;
9715
9754
  }
9716
9755
 
9717
- .ml-date-picker__value--placeholder {
9718
- color: var(--ml-date-picker-placeholder-color);
9756
+ /* Icon */
9757
+ .ml-date-picker__icon {
9758
+ flex-shrink: 0;
9719
9759
  }
9720
9760
 
9721
9761
  /* Popover */
@@ -9767,29 +9807,6 @@ const datePickerStyles = () => css`
9767
9807
  color: var(--ml-date-picker-error-color);
9768
9808
  }
9769
9809
  `;
9770
- var MONTH_SHORT = [
9771
- "Jan",
9772
- "Feb",
9773
- "Mar",
9774
- "Apr",
9775
- "May",
9776
- "Jun",
9777
- "Jul",
9778
- "Aug",
9779
- "Sep",
9780
- "Oct",
9781
- "Nov",
9782
- "Dec"
9783
- ];
9784
- function formatDisplay(iso) {
9785
- if (!iso) return "";
9786
- const parts = iso.split("-");
9787
- if (parts.length !== 3) return iso;
9788
- const month = parseInt(parts[1], 10) - 1;
9789
- const day = parseInt(parts[2], 10);
9790
- const year = parseInt(parts[0], 10);
9791
- return `${MONTH_SHORT[month]} ${day}, ${year}`;
9792
- }
9793
9810
  var DatePickerComponent = class DatePickerComponent$1 {
9794
9811
  constructor() {
9795
9812
  this.value = "";
@@ -9809,6 +9826,13 @@ var DatePickerComponent = class DatePickerComponent$1 {
9809
9826
  const popoverEl = this.getPopoverEl();
9810
9827
  if (popoverEl) popoverEl.togglePopover();
9811
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
+ };
9812
9836
  this.handleDateSelect = (event) => {
9813
9837
  event.stopPropagation();
9814
9838
  const detail = event.detail;
@@ -9819,9 +9843,14 @@ var DatePickerComponent = class DatePickerComponent$1 {
9819
9843
  if (event.key === "Escape" && this.isOpen) {
9820
9844
  event.preventDefault();
9821
9845
  this.closePopover();
9822
- } else if ((event.key === "Enter" || event.key === " " || event.key === "ArrowDown") && !this.isOpen) {
9846
+ }
9847
+ if (event.key === " ") {
9823
9848
  event.preventDefault();
9824
- 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();
9825
9854
  }
9826
9855
  };
9827
9856
  this._handleToggle = (event) => {
@@ -9836,9 +9865,6 @@ var DatePickerComponent = class DatePickerComponent$1 {
9836
9865
  }
9837
9866
  };
9838
9867
  }
9839
- get displayValue() {
9840
- return formatDisplay(this.value);
9841
- }
9842
9868
  onCreate() {
9843
9869
  const popoverEl = this.getPopoverEl();
9844
9870
  if (popoverEl) popoverEl.addEventListener("toggle", this._handleToggle);
@@ -9881,8 +9907,11 @@ var DatePickerComponent = class DatePickerComponent$1 {
9881
9907
  popoverEl.style.top = `${y}px`;
9882
9908
  }
9883
9909
  returnFocus() {
9884
- const triggerEl = this.getTriggerEl();
9885
- 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");
9886
9915
  }
9887
9916
  getTriggerEl() {
9888
9917
  return this.elementRef.shadowRoot?.querySelector(".ml-date-picker__trigger");