@salt-ds/date-components 1.0.0 → 1.1.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/CHANGELOG.md CHANGED
@@ -1,5 +1,57 @@
1
1
  # @salt-ds/date-components
2
2
 
3
+ ## 1.1.1
4
+
5
+ ### Patch Changes
6
+
7
+ - d578674: Applied typography letter spacing tokens consistently to text-owning components and inherited typography roots, and applied the display text transform token to display text.
8
+ - e990c46: Simplified the disabled appearance of `Calendar` days for a more consistent look across Salt components.
9
+ - Updated dependencies [ff312fb]
10
+ - Updated dependencies [d578674]
11
+ - Updated dependencies [24b5b04]
12
+ - Updated dependencies [83d7f9c]
13
+ - Updated dependencies [f9f5198]
14
+ - Updated dependencies [fbe1e48]
15
+ - Updated dependencies [394af0d]
16
+ - Updated dependencies [d578674]
17
+ - Updated dependencies [d578674]
18
+ - Updated dependencies [8e59c5d]
19
+ - Updated dependencies [cf3afb3]
20
+ - Updated dependencies [0b65f84]
21
+ - Updated dependencies [8e59c5d]
22
+ - Updated dependencies [8e59c5d]
23
+ - Updated dependencies [b434b9e]
24
+ - Updated dependencies [e75a32d]
25
+ - Updated dependencies [59a14d2]
26
+ - Updated dependencies [e990c46]
27
+ - Updated dependencies [550c4c1]
28
+ - Updated dependencies [8e59c5d]
29
+ - Updated dependencies [2a5cb0d]
30
+ - @salt-ds/core@1.72.0
31
+ - @salt-ds/styles@0.4.1
32
+ - @salt-ds/window@0.1.2
33
+ - @salt-ds/icons@1.18.3
34
+
35
+ ## 1.1.0
36
+
37
+ ### Minor Changes
38
+
39
+ - 87a8a85: - Added a top-level `name` prop to `DateInputSingle`.
40
+ - Added `startName` and `endName` to `DateInputRange` which map to the underlying native inputs.
41
+
42
+ ### Patch Changes
43
+
44
+ - 5663ad4: Updated the `@floating-ui/react` dependency to align the Date Components package with the Floating UI contract used by its overlays. This fixes Date Picker calendar positioning and outside-press dismissal behavior while keeping the root-level resolution available for Mosaic.
45
+ - Updated dependencies [8aaa8d0]
46
+ - Updated dependencies [fc112cb]
47
+ - Updated dependencies [8aaa8d0]
48
+ - Updated dependencies [7a828e4]
49
+ - Updated dependencies [87a8a85]
50
+ - Updated dependencies [8156149]
51
+ - @salt-ds/core@1.68.0
52
+ - @salt-ds/styles@0.4.0
53
+ - @salt-ds/icons@1.18.2
54
+
3
55
  ## 1.0.0
4
56
 
5
57
  ### Major Changes
@@ -65,6 +65,7 @@
65
65
  font-weight: var(--salt-text-fontWeight);
66
66
  font-size: var(--salt-text-fontSize);
67
67
  line-height: var(--salt-text-lineHeight);
68
+ letter-spacing: var(--salt-text-letterSpacing);
68
69
  }
69
70
 
70
71
  /* src/date-input/DateInput.css */
@@ -243,7 +244,7 @@
243
244
  display: block;
244
245
  font: inherit;
245
246
  height: 100%;
246
- letter-spacing: var(--saltDateInput-letterSpacing, 0);
247
+ letter-spacing: var(--saltDateInput-letterSpacing, var(--salt-text-letterSpacing));
247
248
  margin: 0;
248
249
  min-width: 0;
249
250
  overflow: hidden;
@@ -355,6 +356,7 @@
355
356
  font-weight: var(--salt-text-fontWeight);
356
357
  line-height: var(--salt-text-lineHeight);
357
358
  font-size: var(--salt-text-fontSize);
359
+ letter-spacing: var(--salt-text-letterSpacing);
358
360
  width: var(--salt-size-base);
359
361
  height: var(--salt-size-base);
360
362
  color: var(--salt-content-primary-foreground);
@@ -549,7 +551,7 @@
549
551
  }
550
552
  .saltCalendarDay-unselectable,
551
553
  .saltCalendarDay-unselectable:hover {
552
- background: var(--salt-selectable-background-disabled);
554
+ background: var(--salt-selectable-background);
553
555
  cursor: var(--salt-cursor-disabled);
554
556
  }
555
557
  .saltCalendarDay-highlighted {
@@ -640,4 +642,4 @@
640
642
  box-sizing: border-box;
641
643
  }
642
644
 
643
- /* src/4d9309d5-31f3-4a09-9290-4cbee36a500b.css */
645
+ /* src/df475148-2182-48ce-b8f9-787fa36396fa.css */
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var css_248z = ".saltCalendarWeekHeader {\n display: flex;\n text-align: center;\n align-items: center;\n height: var(--salt-size-base);\n gap: var(--calendar-gap);\n}\n\n.saltCalendarWeekHeader-dayOfWeek {\n width: var(--calendar-day-size);\n color: var(--salt-content-secondary-foreground);\n font-family: var(--salt-text-fontFamily);\n font-weight: var(--salt-text-fontWeight);\n font-size: var(--salt-text-fontSize);\n line-height: var(--salt-text-lineHeight);\n}\n";
3
+ var css_248z = ".saltCalendarWeekHeader {\n display: flex;\n text-align: center;\n align-items: center;\n height: var(--salt-size-base);\n gap: var(--calendar-gap);\n}\n\n.saltCalendarWeekHeader-dayOfWeek {\n width: var(--calendar-day-size);\n color: var(--salt-content-secondary-foreground);\n font-family: var(--salt-text-fontFamily);\n font-weight: var(--salt-text-fontWeight);\n font-size: var(--salt-text-fontSize);\n line-height: var(--salt-text-lineHeight);\n letter-spacing: var(--salt-text-letterSpacing);\n}\n";
4
4
 
5
5
  module.exports = css_248z;
6
6
  //# sourceMappingURL=CalendarWeekHeader.css.js.map
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var css_248z = ".salt-density-touch {\n --calendar-day-highlight-size: 14px;\n}\n.salt-density-low {\n --calendar-day-highlight-size: 12px;\n}\n.salt-density-medium {\n --calendar-day-highlight-size: 10px;\n}\n.salt-density-high {\n --calendar-day-highlight-size: 8px;\n}\n\n.saltCalendarDay {\n --calendar-day-zIndex-content: calc(var(--salt-zIndex-default) + 1);\n --calendar-day-zIndex-highlight: calc(var(--calendar-day-zIndex-content) + 2);\n font-family: var(--salt-text-fontFamily);\n font-weight: var(--salt-text-fontWeight);\n line-height: var(--salt-text-lineHeight);\n font-size: var(--salt-text-fontSize);\n width: var(--salt-size-base);\n height: var(--salt-size-base);\n color: var(--salt-content-primary-foreground);\n background: var(--salt-selectable-background);\n cursor: var(--salt-cursor-hover);\n border: none;\n padding: 0;\n display: flex;\n justify-content: center;\n align-items: center;\n position: relative;\n}\n\n.saltCalendarDay-content {\n margin: 0 var(--salt-spacing-50);\n width: 100%;\n z-index: var(--calendar-day-zIndex-content);\n}\n\n.saltCalendarDay:hover {\n color: var(--salt-content-primary-foreground);\n background: var(--salt-selectable-background-hover);\n border-radius: var(--salt-palette-corner-weak, 0);\n}\n\n.saltCalendarDay-hoveredSpan:not(.saltCalendarDay-selectedStart):not(.saltCalendarDay-selectedEnd),\n.saltCalendarDay-hoveredSpan:not(.saltCalendarDay-selectedStart):not(.saltCalendarDay-selectedEnd)::before,\n.saltCalendarDay-selectedSpan:not(.saltCalendarDay-selectedStart):not(.saltCalendarDay-selectedEnd),\n.saltCalendarDay-selectedSpan:not(.saltCalendarDay-selectedStart):not(.saltCalendarDay-selectedEnd)::before {\n border-radius: 0;\n}\n\n.saltCalendarDay-focused,\n.saltCalendarDay:focus,\n.saltCalendarDay:focus-visible {\n outline: none;\n z-index: var(--calendar-day-zIndex-content);\n}\n\n.saltCalendarDay-focused:focus-visible::before {\n content: \"\";\n position: absolute;\n box-sizing: border-box;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n outline: var(--salt-focused-outline);\n outline-offset: calc(var(--salt-focused-outlineWidth) * -1);\n border-radius: var(--salt-palette-corner-weak, 0);\n}\n\n.saltCalendarDay-selected .saltCalendarDay-content,\n.saltCalendarDay-selected:hover .saltCalendarDay-content,\n.saltCalendarDay-selectedStart .saltCalendarDay-content,\n.saltCalendarDay-hoveredStart .saltCalendarDay-content,\n.saltCalendarDay-selectedSpan .saltCalendarDay-content,\n.saltCalendarDay-hoveredSpan .saltCalendarDay-content,\n.saltCalendarDay-selectedEnd .saltCalendarDay-content,\n.saltCalendarDay-hoveredEnd .saltCalendarDay-content {\n color: var(--salt-content-primary-foreground);\n}\n\n.saltCalendarDay-selectedSpan:not(.saltCalendarDay-selectedStart):not(.saltCalendarDay-selectedEnd)::before,\n.saltCalendarDay-hoveredSpan:not(.saltCalendarDay-selectedSpan):not(.saltCalendarDay-selectedStart):not(.saltCalendarDay-selectedEnd)::before {\n content: \"\";\n position: absolute;\n box-sizing: border-box;\n top: 0;\n left: calc(var(--calendar-gap) * -1);\n right: calc(var(--calendar-gap) * -1);\n bottom: 0;\n background: var(--salt-selectable-background-hover);\n border-top: var(--salt-size-fixed-100) var(--salt-borderStyle-solid) var(--salt-selectable-borderColor-selected);\n border-bottom: var(--salt-size-fixed-100) var(--salt-borderStyle-solid) var(--salt-selectable-borderColor-selected);\n}\n\n.saltCalendarDay-selectedStart::before,\n.saltCalendarDay-selectedEnd::before {\n content: \"\";\n position: absolute;\n box-sizing: border-box;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: var(--salt-selectable-background-selected);\n border: var(--salt-size-fixed-100) var(--salt-borderStyle-solid) var(--salt-selectable-borderColor-selected);\n}\n\n.saltCalendarDay-selectedStart,\n.saltCalendarDay-selectedStart::before,\n.saltCalendarDay-focused.saltCalendarDay-selectedStart,\n.saltCalendarDay-focused.saltCalendarDay-selectedStart::before {\n border-radius: var(--salt-palette-corner-weak, 0) 0 0 var(--salt-palette-corner-weak, 0);\n}\n\n.saltCalendarDay-focused.saltCalendarDay-selectedEnd:not(.saltCalendarDay-selectedStart),\n.saltCalendarDay-focused.saltCalendarDay-selectedEnd:not(.saltCalendarDay-selectedStart)::before,\n.saltCalendarDay-selectedEnd:not(.saltCalendarDay-selectedStart),\n.saltCalendarDay-selectedEnd:not(.saltCalendarDay-selectedStart)::before {\n border-radius: 0 var(--salt-palette-corner-weak, 0) var(--salt-palette-corner-weak, 0) 0;\n}\n\n.saltCalendarDay-focused.saltCalendarDay-selectedSameDay,\n.saltCalendarDay-focused.saltCalendarDay-selectedSameDay::before,\n.saltCalendarDay-selectedSameDay,\n.saltCalendarDay-selectedSameDay::before {\n border-radius: var(--salt-palette-corner-weak, 0);\n}\n\n/** Single selection styles */\n\n.saltCalendarMonth-single .saltCalendarDay:hover:not(.saltCalendarDay-selected) {\n color: var(--salt-content-primary-foreground);\n background: var(--salt-selectable-background-hover);\n border-radius: var(--salt-palette-corner-weak, 0);\n}\n\n.saltCalendarMonth-single .saltCalendarDay-selected::before {\n content: \"\";\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n color: var(--salt-content-primary-foreground);\n background: var(--salt-selectable-background-selected);\n border: var(--salt-size-fixed-100) var(--salt-borderStyle-solid) var(--salt-selectable-borderColor-selected);\n border-radius: var(--salt-palette-corner-weak, 0);\n}\n\n/** Range selection styles */\n.saltCalendarMonth-range .saltCalendarDay-focused.saltCalendarDay-selectedSpan,\n.saltCalendarMonth-range .saltCalendarDay-focused.saltCalendarDay-hoveredSpan {\n outline-offset: calc(calc(var(--salt-focused-outlineWidth) * -1));\n}\n\n.saltCalendarMonth-range .saltCalendarDay:hover:not(.saltCalendarDay-selectedStart):not(.saltCalendarDay-selectedSpan):not(.saltCalendarDay-selectedEnd) {\n color: var(--salt-content-primary-foreground);\n background: var(--salt-selectable-background-hover);\n border-radius: var(--salt-palette-corner-weak, 0);\n}\n\n.saltCalendarMonth-range .saltCalendarDay:hover.saltCalendarDay-selectedSpan::before,\n.saltCalendarMonth-range .saltCalendarDay:hover.saltCalendarDay-hoveredSpan::before,\n.saltCalendarMonth-range .saltCalendarDay-focused.saltCalendarDay-hoveredEnd:not(.saltCalendarDay-selectedEnd):not(.saltCalendarDay-selectedStart)::before,\n.saltCalendarMonth-range .saltCalendarDay-focused.saltCalendarDay-hoveredEnd:not(.saltCalendarDay-selectedEnd):not(.saltCalendarDay-selectedStart)::before {\n border-radius: 0;\n}\n\n.saltCalendarMonth-range .saltCalendarDay-hoveredEnd:not(.saltCalendarDay-selectedStart):not(.saltCalendarDay-selectedEnd) {\n border-radius: 0;\n}\n\n.saltCalendarMonth-range .saltCalendarDay-hoveredEnd:not(.saltCalendarDay-selectedStart):not(.saltCalendarDay-selectedEnd):not(.saltCalendarDay-unselectable)::before {\n content: \"\";\n position: absolute;\n top: 0;\n left: calc(var(--calendar-gap) * -1);\n right: 0;\n bottom: 0;\n background: var(--salt-selectable-background-hover);\n border-radius: 0;\n border-top: var(--salt-size-fixed-100) var(--salt-borderStyle-solid) var(--salt-selectable-borderColor-selected);\n border-bottom: var(--salt-size-fixed-100) var(--salt-borderStyle-solid) var(--salt-selectable-borderColor-selected);\n}\n\n/** Offset range styles */\n\n.saltCalendarMonth-offset .saltCalendarDay-hoveredSpan,\n.saltCalendarMonth-offset .saltCalendarDay-hoveredSpan::before {\n border-radius: 0;\n}\n\n.saltCalendarMonth-offset .saltCalendarDay-focused.saltCalendarDay-hoveredStart:not(.saltCalendarDay-selectedStart),\n.saltCalendarMonth-offset .saltCalendarDay-focused.saltCalendarDay-hoveredStart:not(.saltCalendarDay-selectedStart)::before {\n border-radius: var(--salt-palette-corner-weak, 0) 0 0 var(--salt-palette-corner-weak, 0);\n}\n\n.saltCalendarMonth-offset .saltCalendarDay:hover:not(.saltCalendarDay-selectedStart):not(.saltCalendarDay-selectedSpan):not(.saltCalendarDay-selectedEnd),\n.saltCalendarMonth-offset .saltCalendarDay-hoveredStart:not(.saltCalendarDay-selectedStart):not(.saltCalendarDay-selectedSpan):not(.saltCalendarDay-selectedEnd),\n.saltCalendarMonth-offset .saltCalendarDay-hoveredSpan:not(.saltCalendarDay-selectedStart):not(.saltCalendarDay-selectedSpan):not(.saltCalendarDay-selectedEnd),\n.saltCalendarMonth-offset .saltCalendarDay-hoveredEnd:not(.saltCalendarDay-selectedStart):not(.saltCalendarDay-selectedSpan):not(.saltCalendarDay-selectedEnd) {\n color: var(--salt-content-primary-foreground);\n background: var(--salt-selectable-background-hover);\n}\n\n.saltCalendarMonth-offset .saltCalendarDay-hoveredSpan:not(.saltCalendarDay-selectedStart):not(.saltCalendarDay-selectedSpan):not(.saltCalendarDay-selectedEnd)::before {\n border-top: var(--salt-size-fixed-100) var(--salt-borderStyle-solid) var(--salt-selectable-background-hover);\n border-bottom: var(--salt-size-fixed-100) var(--salt-borderStyle-solid) var(--salt-selectable-background-hover);\n}\n\n.saltCalendarMonth-offset .saltCalendarDay-hoveredStart,\n.saltCalendarMonth-offset .saltCalendarDay-selectedStart {\n border-radius: var(--salt-palette-corner-weak, 0) 0 0 var(--salt-palette-corner-weak, 0);\n}\n\n.saltCalendarMonth-offset .saltCalendarDay.saltCalendarDay-hoveredEnd,\n.saltCalendarMonth-offset .saltCalendarDay-selectedEnd {\n border-radius: 0 var(--salt-palette-corner-weak, 0) var(--salt-palette-corner-weak, 0) 0;\n}\n\n.saltCalendarMonth-offset .saltCalendarDay-hoveredSpan,\n.saltCalendarMonth-offset .saltCalendarDay-selectedSpan {\n border-radius: 0;\n}\n\n.saltCalendarMonth-offset .saltCalendarDay-selectedStart.saltCalendarDay-selectedEnd {\n border-radius: var(--salt-palette-corner-weak, 0);\n}\n\n.saltCalendarDay-outOfRange {\n color: var(--salt-content-secondary-foreground);\n}\n.saltCalendarDay-outOfRange:hover {\n color: var(--salt-content-primary-foreground);\n}\n\n.saltCalendarDay-outOfRange .saltCalendarDay-today > span:last-of-type {\n border-bottom: var(--salt-size-indicator) var(--salt-borderStyle-solid) var(--salt-content-secondary-foreground);\n}\n\n.saltCalendarDay-outOfRange .saltCalendarDay-highlighted::after {\n background: var(--salt-content-secondary-foreground);\n}\n\n.saltCalendarDay-unselectable,\n.saltCalendarDay-unselectable:hover {\n background: var(--salt-selectable-background-disabled);\n cursor: var(--salt-cursor-disabled);\n}\n\n.saltCalendarDay-highlighted {\n position: absolute;\n left: 0;\n right: -1px;\n height: 100%;\n overflow: hidden;\n border-radius: var(--salt-palette-corner-weak, 0);\n}\n.saltCalendarDay-selectedStart .saltCalendarDay-highlighted {\n right: 0;\n}\n\n.saltCalendarDay-selectedEnd .saltCalendarDay-highlighted {\n right: 1px;\n}\n\n.saltCalendarDay-selectedStart .saltCalendarDay-highlighted,\n.saltCalendarDay-hoveredEnd:not(.saltCalendarDay-selectedEnd) .saltCalendarDay-highlighted,\n.saltCalendarDay-hoveredSpan .saltCalendarDay-highlighted,\n.saltCalendarDay-selectedSpan .saltCalendarDay-highlighted {\n border-radius: 0;\n}\n\n.saltCalendarDay-selectedSameDay .saltCalendarDay-highlighted {\n border-radius: var(--salt-palette-corner-weak, 0);\n}\n\n.saltCalendarDay-highlighted::after {\n content: \"\";\n top: 0;\n right: 0;\n box-sizing: border-box;\n height: var(--calendar-day-highlight-size); /* TODO: change for size-modifier when available */\n width: var(--calendar-day-highlight-size);\n background: var(--salt-sentiment-accent-background);\n position: absolute;\n clip-path: polygon(100% 0, 100% 100%, 0 0);\n z-index: var(--calendar-day-zIndex-highlight);\n}\n.saltCalendarDay-focused:focus-visible .saltCalendarDay-highlighted::after {\n border: var(--salt-focused-outline);\n}\n\n.saltCalendarDay-unselectable::after {\n content: \"\";\n height: var(--salt-size-fixed-100);\n width: calc(100% - var(--salt-spacing-100));\n background: var(--salt-content-secondary-foreground);\n position: absolute;\n}\n\n.saltCalendarDay-today > span:last-of-type::after {\n content: \"\";\n display: block;\n width: calc(100% - calc(var(--salt-spacing-50) * 2));\n height: var(--salt-size-indicator);\n background: var(--salt-sentiment-accent-borderColor);\n border-radius: var(--salt-palette-corner-weak);\n position: absolute;\n bottom: var(--salt-spacing-50);\n left: var(--salt-spacing-50);\n right: var(--salt-spacing-50);\n}\n\n.saltCalendarDay-hidden {\n visibility: hidden;\n}\n";
3
+ var css_248z = ".salt-density-touch {\n --calendar-day-highlight-size: 14px;\n}\n.salt-density-low {\n --calendar-day-highlight-size: 12px;\n}\n.salt-density-medium {\n --calendar-day-highlight-size: 10px;\n}\n.salt-density-high {\n --calendar-day-highlight-size: 8px;\n}\n\n.saltCalendarDay {\n --calendar-day-zIndex-content: calc(var(--salt-zIndex-default) + 1);\n --calendar-day-zIndex-highlight: calc(var(--calendar-day-zIndex-content) + 2);\n font-family: var(--salt-text-fontFamily);\n font-weight: var(--salt-text-fontWeight);\n line-height: var(--salt-text-lineHeight);\n font-size: var(--salt-text-fontSize);\n letter-spacing: var(--salt-text-letterSpacing);\n width: var(--salt-size-base);\n height: var(--salt-size-base);\n color: var(--salt-content-primary-foreground);\n background: var(--salt-selectable-background);\n cursor: var(--salt-cursor-hover);\n border: none;\n padding: 0;\n display: flex;\n justify-content: center;\n align-items: center;\n position: relative;\n}\n\n.saltCalendarDay-content {\n margin: 0 var(--salt-spacing-50);\n width: 100%;\n z-index: var(--calendar-day-zIndex-content);\n}\n\n.saltCalendarDay:hover {\n color: var(--salt-content-primary-foreground);\n background: var(--salt-selectable-background-hover);\n border-radius: var(--salt-palette-corner-weak, 0);\n}\n\n.saltCalendarDay-hoveredSpan:not(.saltCalendarDay-selectedStart):not(.saltCalendarDay-selectedEnd),\n.saltCalendarDay-hoveredSpan:not(.saltCalendarDay-selectedStart):not(.saltCalendarDay-selectedEnd)::before,\n.saltCalendarDay-selectedSpan:not(.saltCalendarDay-selectedStart):not(.saltCalendarDay-selectedEnd),\n.saltCalendarDay-selectedSpan:not(.saltCalendarDay-selectedStart):not(.saltCalendarDay-selectedEnd)::before {\n border-radius: 0;\n}\n\n.saltCalendarDay-focused,\n.saltCalendarDay:focus,\n.saltCalendarDay:focus-visible {\n outline: none;\n z-index: var(--calendar-day-zIndex-content);\n}\n\n.saltCalendarDay-focused:focus-visible::before {\n content: \"\";\n position: absolute;\n box-sizing: border-box;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n outline: var(--salt-focused-outline);\n outline-offset: calc(var(--salt-focused-outlineWidth) * -1);\n border-radius: var(--salt-palette-corner-weak, 0);\n}\n\n.saltCalendarDay-selected .saltCalendarDay-content,\n.saltCalendarDay-selected:hover .saltCalendarDay-content,\n.saltCalendarDay-selectedStart .saltCalendarDay-content,\n.saltCalendarDay-hoveredStart .saltCalendarDay-content,\n.saltCalendarDay-selectedSpan .saltCalendarDay-content,\n.saltCalendarDay-hoveredSpan .saltCalendarDay-content,\n.saltCalendarDay-selectedEnd .saltCalendarDay-content,\n.saltCalendarDay-hoveredEnd .saltCalendarDay-content {\n color: var(--salt-content-primary-foreground);\n}\n\n.saltCalendarDay-selectedSpan:not(.saltCalendarDay-selectedStart):not(.saltCalendarDay-selectedEnd)::before,\n.saltCalendarDay-hoveredSpan:not(.saltCalendarDay-selectedSpan):not(.saltCalendarDay-selectedStart):not(.saltCalendarDay-selectedEnd)::before {\n content: \"\";\n position: absolute;\n box-sizing: border-box;\n top: 0;\n left: calc(var(--calendar-gap) * -1);\n right: calc(var(--calendar-gap) * -1);\n bottom: 0;\n background: var(--salt-selectable-background-hover);\n border-top: var(--salt-size-fixed-100) var(--salt-borderStyle-solid) var(--salt-selectable-borderColor-selected);\n border-bottom: var(--salt-size-fixed-100) var(--salt-borderStyle-solid) var(--salt-selectable-borderColor-selected);\n}\n\n.saltCalendarDay-selectedStart::before,\n.saltCalendarDay-selectedEnd::before {\n content: \"\";\n position: absolute;\n box-sizing: border-box;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: var(--salt-selectable-background-selected);\n border: var(--salt-size-fixed-100) var(--salt-borderStyle-solid) var(--salt-selectable-borderColor-selected);\n}\n\n.saltCalendarDay-selectedStart,\n.saltCalendarDay-selectedStart::before,\n.saltCalendarDay-focused.saltCalendarDay-selectedStart,\n.saltCalendarDay-focused.saltCalendarDay-selectedStart::before {\n border-radius: var(--salt-palette-corner-weak, 0) 0 0 var(--salt-palette-corner-weak, 0);\n}\n\n.saltCalendarDay-focused.saltCalendarDay-selectedEnd:not(.saltCalendarDay-selectedStart),\n.saltCalendarDay-focused.saltCalendarDay-selectedEnd:not(.saltCalendarDay-selectedStart)::before,\n.saltCalendarDay-selectedEnd:not(.saltCalendarDay-selectedStart),\n.saltCalendarDay-selectedEnd:not(.saltCalendarDay-selectedStart)::before {\n border-radius: 0 var(--salt-palette-corner-weak, 0) var(--salt-palette-corner-weak, 0) 0;\n}\n\n.saltCalendarDay-focused.saltCalendarDay-selectedSameDay,\n.saltCalendarDay-focused.saltCalendarDay-selectedSameDay::before,\n.saltCalendarDay-selectedSameDay,\n.saltCalendarDay-selectedSameDay::before {\n border-radius: var(--salt-palette-corner-weak, 0);\n}\n\n/** Single selection styles */\n\n.saltCalendarMonth-single .saltCalendarDay:hover:not(.saltCalendarDay-selected) {\n color: var(--salt-content-primary-foreground);\n background: var(--salt-selectable-background-hover);\n border-radius: var(--salt-palette-corner-weak, 0);\n}\n\n.saltCalendarMonth-single .saltCalendarDay-selected::before {\n content: \"\";\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n color: var(--salt-content-primary-foreground);\n background: var(--salt-selectable-background-selected);\n border: var(--salt-size-fixed-100) var(--salt-borderStyle-solid) var(--salt-selectable-borderColor-selected);\n border-radius: var(--salt-palette-corner-weak, 0);\n}\n\n/** Range selection styles */\n.saltCalendarMonth-range .saltCalendarDay-focused.saltCalendarDay-selectedSpan,\n.saltCalendarMonth-range .saltCalendarDay-focused.saltCalendarDay-hoveredSpan {\n outline-offset: calc(calc(var(--salt-focused-outlineWidth) * -1));\n}\n\n.saltCalendarMonth-range .saltCalendarDay:hover:not(.saltCalendarDay-selectedStart):not(.saltCalendarDay-selectedSpan):not(.saltCalendarDay-selectedEnd) {\n color: var(--salt-content-primary-foreground);\n background: var(--salt-selectable-background-hover);\n border-radius: var(--salt-palette-corner-weak, 0);\n}\n\n.saltCalendarMonth-range .saltCalendarDay:hover.saltCalendarDay-selectedSpan::before,\n.saltCalendarMonth-range .saltCalendarDay:hover.saltCalendarDay-hoveredSpan::before,\n.saltCalendarMonth-range .saltCalendarDay-focused.saltCalendarDay-hoveredEnd:not(.saltCalendarDay-selectedEnd):not(.saltCalendarDay-selectedStart)::before,\n.saltCalendarMonth-range .saltCalendarDay-focused.saltCalendarDay-hoveredEnd:not(.saltCalendarDay-selectedEnd):not(.saltCalendarDay-selectedStart)::before {\n border-radius: 0;\n}\n\n.saltCalendarMonth-range .saltCalendarDay-hoveredEnd:not(.saltCalendarDay-selectedStart):not(.saltCalendarDay-selectedEnd) {\n border-radius: 0;\n}\n\n.saltCalendarMonth-range .saltCalendarDay-hoveredEnd:not(.saltCalendarDay-selectedStart):not(.saltCalendarDay-selectedEnd):not(.saltCalendarDay-unselectable)::before {\n content: \"\";\n position: absolute;\n top: 0;\n left: calc(var(--calendar-gap) * -1);\n right: 0;\n bottom: 0;\n background: var(--salt-selectable-background-hover);\n border-radius: 0;\n border-top: var(--salt-size-fixed-100) var(--salt-borderStyle-solid) var(--salt-selectable-borderColor-selected);\n border-bottom: var(--salt-size-fixed-100) var(--salt-borderStyle-solid) var(--salt-selectable-borderColor-selected);\n}\n\n/** Offset range styles */\n\n.saltCalendarMonth-offset .saltCalendarDay-hoveredSpan,\n.saltCalendarMonth-offset .saltCalendarDay-hoveredSpan::before {\n border-radius: 0;\n}\n\n.saltCalendarMonth-offset .saltCalendarDay-focused.saltCalendarDay-hoveredStart:not(.saltCalendarDay-selectedStart),\n.saltCalendarMonth-offset .saltCalendarDay-focused.saltCalendarDay-hoveredStart:not(.saltCalendarDay-selectedStart)::before {\n border-radius: var(--salt-palette-corner-weak, 0) 0 0 var(--salt-palette-corner-weak, 0);\n}\n\n.saltCalendarMonth-offset .saltCalendarDay:hover:not(.saltCalendarDay-selectedStart):not(.saltCalendarDay-selectedSpan):not(.saltCalendarDay-selectedEnd),\n.saltCalendarMonth-offset .saltCalendarDay-hoveredStart:not(.saltCalendarDay-selectedStart):not(.saltCalendarDay-selectedSpan):not(.saltCalendarDay-selectedEnd),\n.saltCalendarMonth-offset .saltCalendarDay-hoveredSpan:not(.saltCalendarDay-selectedStart):not(.saltCalendarDay-selectedSpan):not(.saltCalendarDay-selectedEnd),\n.saltCalendarMonth-offset .saltCalendarDay-hoveredEnd:not(.saltCalendarDay-selectedStart):not(.saltCalendarDay-selectedSpan):not(.saltCalendarDay-selectedEnd) {\n color: var(--salt-content-primary-foreground);\n background: var(--salt-selectable-background-hover);\n}\n\n.saltCalendarMonth-offset .saltCalendarDay-hoveredSpan:not(.saltCalendarDay-selectedStart):not(.saltCalendarDay-selectedSpan):not(.saltCalendarDay-selectedEnd)::before {\n border-top: var(--salt-size-fixed-100) var(--salt-borderStyle-solid) var(--salt-selectable-background-hover);\n border-bottom: var(--salt-size-fixed-100) var(--salt-borderStyle-solid) var(--salt-selectable-background-hover);\n}\n\n.saltCalendarMonth-offset .saltCalendarDay-hoveredStart,\n.saltCalendarMonth-offset .saltCalendarDay-selectedStart {\n border-radius: var(--salt-palette-corner-weak, 0) 0 0 var(--salt-palette-corner-weak, 0);\n}\n\n.saltCalendarMonth-offset .saltCalendarDay.saltCalendarDay-hoveredEnd,\n.saltCalendarMonth-offset .saltCalendarDay-selectedEnd {\n border-radius: 0 var(--salt-palette-corner-weak, 0) var(--salt-palette-corner-weak, 0) 0;\n}\n\n.saltCalendarMonth-offset .saltCalendarDay-hoveredSpan,\n.saltCalendarMonth-offset .saltCalendarDay-selectedSpan {\n border-radius: 0;\n}\n\n.saltCalendarMonth-offset .saltCalendarDay-selectedStart.saltCalendarDay-selectedEnd {\n border-radius: var(--salt-palette-corner-weak, 0);\n}\n\n.saltCalendarDay-outOfRange {\n color: var(--salt-content-secondary-foreground);\n}\n.saltCalendarDay-outOfRange:hover {\n color: var(--salt-content-primary-foreground);\n}\n\n.saltCalendarDay-outOfRange .saltCalendarDay-today > span:last-of-type {\n border-bottom: var(--salt-size-indicator) var(--salt-borderStyle-solid) var(--salt-content-secondary-foreground);\n}\n\n.saltCalendarDay-outOfRange .saltCalendarDay-highlighted::after {\n background: var(--salt-content-secondary-foreground);\n}\n\n.saltCalendarDay-unselectable,\n.saltCalendarDay-unselectable:hover {\n background: var(--salt-selectable-background);\n cursor: var(--salt-cursor-disabled);\n}\n\n.saltCalendarDay-highlighted {\n position: absolute;\n left: 0;\n right: -1px;\n height: 100%;\n overflow: hidden;\n border-radius: var(--salt-palette-corner-weak, 0);\n}\n.saltCalendarDay-selectedStart .saltCalendarDay-highlighted {\n right: 0;\n}\n\n.saltCalendarDay-selectedEnd .saltCalendarDay-highlighted {\n right: 1px;\n}\n\n.saltCalendarDay-selectedStart .saltCalendarDay-highlighted,\n.saltCalendarDay-hoveredEnd:not(.saltCalendarDay-selectedEnd) .saltCalendarDay-highlighted,\n.saltCalendarDay-hoveredSpan .saltCalendarDay-highlighted,\n.saltCalendarDay-selectedSpan .saltCalendarDay-highlighted {\n border-radius: 0;\n}\n\n.saltCalendarDay-selectedSameDay .saltCalendarDay-highlighted {\n border-radius: var(--salt-palette-corner-weak, 0);\n}\n\n.saltCalendarDay-highlighted::after {\n content: \"\";\n top: 0;\n right: 0;\n box-sizing: border-box;\n height: var(--calendar-day-highlight-size); /* TODO: change for size-modifier when available */\n width: var(--calendar-day-highlight-size);\n background: var(--salt-sentiment-accent-background);\n position: absolute;\n clip-path: polygon(100% 0, 100% 100%, 0 0);\n z-index: var(--calendar-day-zIndex-highlight);\n}\n.saltCalendarDay-focused:focus-visible .saltCalendarDay-highlighted::after {\n border: var(--salt-focused-outline);\n}\n\n.saltCalendarDay-unselectable::after {\n content: \"\";\n height: var(--salt-size-fixed-100);\n width: calc(100% - var(--salt-spacing-100));\n background: var(--salt-content-secondary-foreground);\n position: absolute;\n}\n\n.saltCalendarDay-today > span:last-of-type::after {\n content: \"\";\n display: block;\n width: calc(100% - calc(var(--salt-spacing-50) * 2));\n height: var(--salt-size-indicator);\n background: var(--salt-sentiment-accent-borderColor);\n border-radius: var(--salt-palette-corner-weak);\n position: absolute;\n bottom: var(--salt-spacing-50);\n left: var(--salt-spacing-50);\n right: var(--salt-spacing-50);\n}\n\n.saltCalendarDay-hidden {\n visibility: hidden;\n}\n";
4
4
 
5
5
  module.exports = css_248z;
6
6
  //# sourceMappingURL=CalendarDay.css.js.map
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var css_248z = "/* Style applied to the root element */\n.saltDateInput {\n align-items: center;\n background: var(--saltDateInput-background, var(--input-background));\n border-radius: var(--salt-palette-corner-weak, 0);\n color: var(--saltDateInput-color, var(--salt-content-primary-foreground));\n display: inline-flex;\n font-family: var(--salt-text-fontFamily);\n font-size: var(--saltDateInput-fontSize, var(--salt-text-fontSize));\n line-height: var(--saltDateInput-lineHeight, var(--salt-text-lineHeight));\n letter-spacing: var(--salt-text-letterSpacing);\n height: var(--saltDateInput-height, var(--salt-size-base));\n min-height: var(--saltDateInput-minHeight, var(--salt-size-base));\n min-width: var(--saltDateInput-minWidth, 4em);\n padding-left: var(--saltDateInput-paddingLeft, var(--salt-spacing-100));\n padding-right: var(--saltDateInput-paddingRight, var(--salt-spacing-100));\n position: relative;\n box-sizing: border-box;\n overflow: hidden;\n width: 100%;\n}\n\n.saltDateInput:hover {\n cursor: var(--salt-cursor-text);\n}\n\n/* Style applied if `bordered={true}` */\n.saltDateInput-bordered.saltDateInput {\n border: var(--salt-size-fixed-100) var(--salt-borderStyle-solid) var(--input-borderColor);\n}\n\n.saltDateInput-bordered.saltDateInput:hover {\n border-style: var(--salt-borderStyle-solid);\n border-color: var(--input-borderColor-hover);\n}\n\n.saltDateInput-bordered.saltDateInput-focused,\n.saltDateInput-bordered.saltDateInput-focused:hover {\n border-style: var(--salt-borderStyle-solid);\n border-color: var(--input-borderColor-active);\n}\n\n.saltDateInput-bordered.saltDateInput-readOnly,\n.saltDateInput-bordered.saltDateInput-readOnly:hover {\n border-style: var(--salt-borderStyle-solid);\n border-color: var(--salt-editable-borderColor-readonly);\n}\n\n.saltDateInput-bordered.saltDateInput-disabled,\n.saltDateInput-bordered.saltDateInput-disabled:hover {\n border-style: var(--salt-borderStyle-solid);\n border-color: var(--salt-editable-borderColor-disabled);\n}\n\n.saltDateInput-activationIndicator {\n left: 0;\n bottom: 0;\n width: 100%;\n position: absolute;\n border-bottom: var(--salt-size-fixed-100) var(--salt-borderStyle-solid) var(--input-borderColor);\n}\n\n.saltDateInput:hover .saltDateInput-activationIndicator {\n border-bottom-style: var(--salt-borderStyle-solid);\n border-bottom-color: var(--input-borderColor-hover);\n}\n\n.saltDateInput-focused .saltDateInput-activationIndicator,\n.saltDateInput-focused:hover .saltDateInput-activationIndicator {\n border-bottom: var(--salt-size-fixed-200) var(--salt-borderStyle-solid) var(--input-borderColor-active);\n}\n\n.saltDateInput-readOnly .saltDateInput-activationIndicator,\n.saltDateInput-readOnly:hover .saltDateInput-activationIndicator {\n border-bottom-style: var(--salt-borderStyle-solid);\n border-bottom-color: var(--salt-editable-borderColor-readonly);\n}\n\n.saltDateInput-disabled .saltDateInput-activationIndicator,\n.saltDateInput-disabled:hover .saltDateInput-activationIndicator {\n border-bottom-style: var(--salt-borderStyle-solid);\n border-bottom-color: var(--salt-editable-borderColor-disabled);\n}\n\n.saltDateInput-bordered .saltDateInput-activationIndicator,\n.saltDateInput-bordered.saltDateInput-readOnly .saltDateInput-activationIndicator,\n.saltDateInput-bordered.saltDateInput-disabled:hover .saltDateInput-activationIndicator {\n border-bottom-width: 0;\n}\n\n.saltDateInput-bordered.saltDateInput-focused .saltDateInput-activationIndicator {\n /* Activation indicator width minus the border from the input. */\n border-bottom-width: var(--salt-size-fixed-100);\n}\n\n/* Class applied if `variant=\"primary\"` */\n.saltDateInput-primary {\n --input-background: var(--salt-editable-primary-background);\n --input-background-disabled: var(--salt-editable-primary-background-disabled);\n --input-background-readonly: var(--salt-editable-background-readonly);\n --input-borderColor: var(--salt-editable-borderColor);\n --input-borderColor-active: var(--salt-editable-borderColor-active);\n --input-borderColor-hover: var(--salt-editable-borderColor-hover);\n --input-outlineColor: var(--salt-focused-outlineColor);\n}\n\n/* Class applied if `variant=\"secondary\"` */\n.saltDateInput-secondary {\n --input-background: var(--salt-editable-secondary-background);\n --input-background-disabled: var(--salt-editable-secondary-background-disabled);\n --input-background-readonly: var(--salt-editable-background-readonly);\n --input-borderColor: var(--salt-editable-borderColor);\n --input-borderColor-active: var(--salt-editable-borderColor-active);\n --input-borderColor-hover: var(--salt-editable-borderColor-hover);\n --input-outlineColor: var(--salt-focused-outlineColor);\n}\n\n/* Class applied if `variant=\"tertiary\"` */\n.saltDateInput-tertiary {\n --input-background: var(--salt-editable-tertiary-background);\n --input-background-readonly: var(--salt-editable-background-readonly);\n --input-borderColor: var(--salt-editable-borderColor);\n --input-borderColor-active: var(--salt-editable-borderColor-active);\n --input-borderColor-hover: var(--salt-editable-borderColor-hover);\n --input-outlineColor: var(--salt-focused-outlineColor);\n}\n\n/* Style applied to input if `validationState=\"error\"` */\n.saltDateInput-error {\n --input-background: var(--salt-status-error-background);\n --input-background-readonly: var(--salt-status-error-background);\n --input-borderColor: var(--salt-status-error-borderColor);\n --input-borderColor-active: var(--salt-status-error-borderColor);\n --input-borderColor-hover: var(--salt-status-error-borderColor);\n --input-outlineColor: var(--salt-status-error-borderColor);\n}\n\n/* Style applied to input if `validationState=\"warning\"` */\n.saltDateInput-warning {\n --input-background: var(--salt-status-warning-background);\n --input-background-readonly: var(--salt-status-warning-background);\n --input-borderColor: var(--salt-status-warning-borderColor);\n --input-borderColor-active: var(--salt-status-warning-borderColor);\n --input-borderColor-hover: var(--salt-status-warning-borderColor);\n --input-outlineColor: var(--salt-status-warning-borderColor);\n}\n\n/* Style applied to input if `validationState=\"success\"` */\n.saltDateInput-success {\n --input-background: var(--salt-status-success-background);\n --input-background-readonly: var(--salt-status-success-background);\n --input-borderColor: var(--salt-status-success-borderColor);\n --input-borderColor-active: var(--salt-status-success-borderColor);\n --input-borderColor-hover: var(--salt-status-success-borderColor);\n --input-outlineColor: var(--salt-status-success-borderColor);\n}\n\n/* Styling when focused */\n.saltDateInput-focused,\n.saltDateInput-focused:hover {\n cursor: var(--salt-cursor-text);\n outline: var(--saltDateInput-outline, var(--salt-focused-outlineWidth) var(--salt-focused-outlineStyle) var(--input-outlineColor));\n}\n\n/* Style applied if `readOnly={true}` */\n.saltDateInput.saltDateInput-readOnly {\n background: var(--input-background-readonly);\n cursor: var(--salt-cursor-readonly);\n}\n\n/* Styling when focused if `disabled={true}` */\n.saltDateInput-disabled,\n.saltDateInput-disabled:hover {\n background: var(--input-background-disabled);\n cursor: var(--salt-cursor-disabled);\n color: var(--saltDateInput-color-disabled, var(--salt-content-primary-foreground-disabled));\n}\n\n/* Style applied to start adornments */\n.saltDateInput-startAdornmentContainer {\n align-items: center;\n display: inline-flex;\n padding-right: var(--salt-spacing-100);\n column-gap: var(--salt-spacing-100);\n}\n\n/* Style applied to end adornments */\n.saltDateInput-endAdornmentContainer {\n display: inline-flex;\n column-gap: var(--salt-spacing-50);\n align-items: flex-end;\n}\n\n.saltDateInput-endAdornmentContainer .saltButton ~ .saltButton {\n margin-left: calc(-1 * var(--salt-spacing-50));\n}\n\n.saltDateInput-endAdornmentContainer .saltButton:last-child {\n margin-right: calc(var(--salt-spacing-50) * -1);\n}\n\n.saltDateInput-startAdornmentContainer > .saltButton,\n.saltDateInput-endAdornmentContainer > .saltButton {\n --saltButton-padding: calc(var(--salt-spacing-50) - var(--button-borderWidth));\n --saltButton-height: calc(var(--salt-size-base) - var(--salt-spacing-100));\n --saltButton-borderRadius: var(--salt-palette-corner-weaker);\n}\n\n/* Style applied to inner input component */\n.saltDateInput-input {\n background: none;\n border: none;\n box-sizing: content-box;\n color: inherit;\n cursor: inherit;\n display: block;\n font: inherit;\n height: 100%;\n letter-spacing: var(--saltDateInput-letterSpacing, 0);\n margin: 0;\n min-width: 0;\n overflow: hidden;\n padding: 0;\n text-align: left;\n width: 100%;\n}\n\n/* Reset in the class */\n.saltDateInput-input:focus {\n outline: none;\n}\n\n/* Style applied to selected input if `disabled={true}` */\n.saltDateInput-disabled .saltDateInput-input::selection {\n background: none;\n}\n\n/* Style applied to placeholder text */\n.saltDateInput-input::placeholder {\n color: var(--salt-content-secondary-foreground);\n font-weight: var(--salt-text-fontWeight-small);\n}\n\n/* Style applied to the dash between two inputs in range date input */\n.saltDateInput-dash {\n margin: 0 var(--salt-spacing-50);\n}\n\n/* Visually hidden but still announced by screen readers */\n.saltDateInput-visuallyHidden {\n position: absolute;\n width: 1px;\n height: 1px;\n overflow: hidden;\n clip: rect(0 0 0 0);\n white-space: nowrap;\n}\n";
3
+ var css_248z = "/* Style applied to the root element */\n.saltDateInput {\n align-items: center;\n background: var(--saltDateInput-background, var(--input-background));\n border-radius: var(--salt-palette-corner-weak, 0);\n color: var(--saltDateInput-color, var(--salt-content-primary-foreground));\n display: inline-flex;\n font-family: var(--salt-text-fontFamily);\n font-size: var(--saltDateInput-fontSize, var(--salt-text-fontSize));\n line-height: var(--saltDateInput-lineHeight, var(--salt-text-lineHeight));\n letter-spacing: var(--salt-text-letterSpacing);\n height: var(--saltDateInput-height, var(--salt-size-base));\n min-height: var(--saltDateInput-minHeight, var(--salt-size-base));\n min-width: var(--saltDateInput-minWidth, 4em);\n padding-left: var(--saltDateInput-paddingLeft, var(--salt-spacing-100));\n padding-right: var(--saltDateInput-paddingRight, var(--salt-spacing-100));\n position: relative;\n box-sizing: border-box;\n overflow: hidden;\n width: 100%;\n}\n\n.saltDateInput:hover {\n cursor: var(--salt-cursor-text);\n}\n\n/* Style applied if `bordered={true}` */\n.saltDateInput-bordered.saltDateInput {\n border: var(--salt-size-fixed-100) var(--salt-borderStyle-solid) var(--input-borderColor);\n}\n\n.saltDateInput-bordered.saltDateInput:hover {\n border-style: var(--salt-borderStyle-solid);\n border-color: var(--input-borderColor-hover);\n}\n\n.saltDateInput-bordered.saltDateInput-focused,\n.saltDateInput-bordered.saltDateInput-focused:hover {\n border-style: var(--salt-borderStyle-solid);\n border-color: var(--input-borderColor-active);\n}\n\n.saltDateInput-bordered.saltDateInput-readOnly,\n.saltDateInput-bordered.saltDateInput-readOnly:hover {\n border-style: var(--salt-borderStyle-solid);\n border-color: var(--salt-editable-borderColor-readonly);\n}\n\n.saltDateInput-bordered.saltDateInput-disabled,\n.saltDateInput-bordered.saltDateInput-disabled:hover {\n border-style: var(--salt-borderStyle-solid);\n border-color: var(--salt-editable-borderColor-disabled);\n}\n\n.saltDateInput-activationIndicator {\n left: 0;\n bottom: 0;\n width: 100%;\n position: absolute;\n border-bottom: var(--salt-size-fixed-100) var(--salt-borderStyle-solid) var(--input-borderColor);\n}\n\n.saltDateInput:hover .saltDateInput-activationIndicator {\n border-bottom-style: var(--salt-borderStyle-solid);\n border-bottom-color: var(--input-borderColor-hover);\n}\n\n.saltDateInput-focused .saltDateInput-activationIndicator,\n.saltDateInput-focused:hover .saltDateInput-activationIndicator {\n border-bottom: var(--salt-size-fixed-200) var(--salt-borderStyle-solid) var(--input-borderColor-active);\n}\n\n.saltDateInput-readOnly .saltDateInput-activationIndicator,\n.saltDateInput-readOnly:hover .saltDateInput-activationIndicator {\n border-bottom-style: var(--salt-borderStyle-solid);\n border-bottom-color: var(--salt-editable-borderColor-readonly);\n}\n\n.saltDateInput-disabled .saltDateInput-activationIndicator,\n.saltDateInput-disabled:hover .saltDateInput-activationIndicator {\n border-bottom-style: var(--salt-borderStyle-solid);\n border-bottom-color: var(--salt-editable-borderColor-disabled);\n}\n\n.saltDateInput-bordered .saltDateInput-activationIndicator,\n.saltDateInput-bordered.saltDateInput-readOnly .saltDateInput-activationIndicator,\n.saltDateInput-bordered.saltDateInput-disabled:hover .saltDateInput-activationIndicator {\n border-bottom-width: 0;\n}\n\n.saltDateInput-bordered.saltDateInput-focused .saltDateInput-activationIndicator {\n /* Activation indicator width minus the border from the input. */\n border-bottom-width: var(--salt-size-fixed-100);\n}\n\n/* Class applied if `variant=\"primary\"` */\n.saltDateInput-primary {\n --input-background: var(--salt-editable-primary-background);\n --input-background-disabled: var(--salt-editable-primary-background-disabled);\n --input-background-readonly: var(--salt-editable-background-readonly);\n --input-borderColor: var(--salt-editable-borderColor);\n --input-borderColor-active: var(--salt-editable-borderColor-active);\n --input-borderColor-hover: var(--salt-editable-borderColor-hover);\n --input-outlineColor: var(--salt-focused-outlineColor);\n}\n\n/* Class applied if `variant=\"secondary\"` */\n.saltDateInput-secondary {\n --input-background: var(--salt-editable-secondary-background);\n --input-background-disabled: var(--salt-editable-secondary-background-disabled);\n --input-background-readonly: var(--salt-editable-background-readonly);\n --input-borderColor: var(--salt-editable-borderColor);\n --input-borderColor-active: var(--salt-editable-borderColor-active);\n --input-borderColor-hover: var(--salt-editable-borderColor-hover);\n --input-outlineColor: var(--salt-focused-outlineColor);\n}\n\n/* Class applied if `variant=\"tertiary\"` */\n.saltDateInput-tertiary {\n --input-background: var(--salt-editable-tertiary-background);\n --input-background-readonly: var(--salt-editable-background-readonly);\n --input-borderColor: var(--salt-editable-borderColor);\n --input-borderColor-active: var(--salt-editable-borderColor-active);\n --input-borderColor-hover: var(--salt-editable-borderColor-hover);\n --input-outlineColor: var(--salt-focused-outlineColor);\n}\n\n/* Style applied to input if `validationState=\"error\"` */\n.saltDateInput-error {\n --input-background: var(--salt-status-error-background);\n --input-background-readonly: var(--salt-status-error-background);\n --input-borderColor: var(--salt-status-error-borderColor);\n --input-borderColor-active: var(--salt-status-error-borderColor);\n --input-borderColor-hover: var(--salt-status-error-borderColor);\n --input-outlineColor: var(--salt-status-error-borderColor);\n}\n\n/* Style applied to input if `validationState=\"warning\"` */\n.saltDateInput-warning {\n --input-background: var(--salt-status-warning-background);\n --input-background-readonly: var(--salt-status-warning-background);\n --input-borderColor: var(--salt-status-warning-borderColor);\n --input-borderColor-active: var(--salt-status-warning-borderColor);\n --input-borderColor-hover: var(--salt-status-warning-borderColor);\n --input-outlineColor: var(--salt-status-warning-borderColor);\n}\n\n/* Style applied to input if `validationState=\"success\"` */\n.saltDateInput-success {\n --input-background: var(--salt-status-success-background);\n --input-background-readonly: var(--salt-status-success-background);\n --input-borderColor: var(--salt-status-success-borderColor);\n --input-borderColor-active: var(--salt-status-success-borderColor);\n --input-borderColor-hover: var(--salt-status-success-borderColor);\n --input-outlineColor: var(--salt-status-success-borderColor);\n}\n\n/* Styling when focused */\n.saltDateInput-focused,\n.saltDateInput-focused:hover {\n cursor: var(--salt-cursor-text);\n outline: var(--saltDateInput-outline, var(--salt-focused-outlineWidth) var(--salt-focused-outlineStyle) var(--input-outlineColor));\n}\n\n/* Style applied if `readOnly={true}` */\n.saltDateInput.saltDateInput-readOnly {\n background: var(--input-background-readonly);\n cursor: var(--salt-cursor-readonly);\n}\n\n/* Styling when focused if `disabled={true}` */\n.saltDateInput-disabled,\n.saltDateInput-disabled:hover {\n background: var(--input-background-disabled);\n cursor: var(--salt-cursor-disabled);\n color: var(--saltDateInput-color-disabled, var(--salt-content-primary-foreground-disabled));\n}\n\n/* Style applied to start adornments */\n.saltDateInput-startAdornmentContainer {\n align-items: center;\n display: inline-flex;\n padding-right: var(--salt-spacing-100);\n column-gap: var(--salt-spacing-100);\n}\n\n/* Style applied to end adornments */\n.saltDateInput-endAdornmentContainer {\n display: inline-flex;\n column-gap: var(--salt-spacing-50);\n align-items: flex-end;\n}\n\n.saltDateInput-endAdornmentContainer .saltButton ~ .saltButton {\n margin-left: calc(-1 * var(--salt-spacing-50));\n}\n\n.saltDateInput-endAdornmentContainer .saltButton:last-child {\n margin-right: calc(var(--salt-spacing-50) * -1);\n}\n\n.saltDateInput-startAdornmentContainer > .saltButton,\n.saltDateInput-endAdornmentContainer > .saltButton {\n --saltButton-padding: calc(var(--salt-spacing-50) - var(--button-borderWidth));\n --saltButton-height: calc(var(--salt-size-base) - var(--salt-spacing-100));\n --saltButton-borderRadius: var(--salt-palette-corner-weaker);\n}\n\n/* Style applied to inner input component */\n.saltDateInput-input {\n background: none;\n border: none;\n box-sizing: content-box;\n color: inherit;\n cursor: inherit;\n display: block;\n font: inherit;\n height: 100%;\n letter-spacing: var(--saltDateInput-letterSpacing, var(--salt-text-letterSpacing));\n margin: 0;\n min-width: 0;\n overflow: hidden;\n padding: 0;\n text-align: left;\n width: 100%;\n}\n\n/* Reset in the class */\n.saltDateInput-input:focus {\n outline: none;\n}\n\n/* Style applied to selected input if `disabled={true}` */\n.saltDateInput-disabled .saltDateInput-input::selection {\n background: none;\n}\n\n/* Style applied to placeholder text */\n.saltDateInput-input::placeholder {\n color: var(--salt-content-secondary-foreground);\n font-weight: var(--salt-text-fontWeight-small);\n}\n\n/* Style applied to the dash between two inputs in range date input */\n.saltDateInput-dash {\n margin: 0 var(--salt-spacing-50);\n}\n\n/* Visually hidden but still announced by screen readers */\n.saltDateInput-visuallyHidden {\n position: absolute;\n width: 1px;\n height: 1px;\n overflow: hidden;\n clip: rect(0 0 0 0);\n white-space: nowrap;\n}\n";
4
4
 
5
5
  module.exports = css_248z;
6
6
  //# sourceMappingURL=DateInput.css.js.map
@@ -40,7 +40,9 @@ const DateInputRange = react.forwardRef(
40
40
  emptyReadOnlyMarker = "\u2014",
41
41
  endAdornment,
42
42
  startInputProps = {},
43
+ startName,
43
44
  endInputProps = {},
45
+ endName,
44
46
  startInputRef: startInputRefProp,
45
47
  endInputRef: endInputRefProp,
46
48
  parse: parseProp,
@@ -325,6 +327,7 @@ const DateInputRange = react.forwardRef(
325
327
  id: startInputID,
326
328
  className: withBaseName("input"),
327
329
  disabled: isDisabled,
330
+ name: startName,
328
331
  readOnly: isReadOnly,
329
332
  ref: handleStartInputRef,
330
333
  tabIndex: isDisabled ? -1 : 0,
@@ -350,6 +353,7 @@ const DateInputRange = react.forwardRef(
350
353
  id: endInputID,
351
354
  className: withBaseName("input"),
352
355
  disabled: isDisabled,
356
+ name: endName,
353
357
  readOnly: isReadOnly,
354
358
  ref: handleEndInputRef,
355
359
  tabIndex: isDisabled ? -1 : 0,
@@ -1 +1 @@
1
- {"version":3,"file":"DateInputRange.js","sources":["../src/date-input/DateInputRange.tsx"],"sourcesContent":["import {\n type InputProps,\n makePrefixer,\n StatusAdornment,\n useControlled,\n useForkRef,\n useFormFieldProps,\n useId,\n} from \"@salt-ds/core\";\nimport type {\n DateDetail,\n DateFrameworkType,\n ParserResult,\n TimeFields,\n Timezone,\n} from \"@salt-ds/date-adapters\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n type ChangeEvent,\n type ChangeEventHandler,\n type ComponentPropsWithoutRef,\n type FocusEventHandler,\n forwardRef,\n type InputHTMLAttributes,\n type KeyboardEventHandler,\n type MouseEventHandler,\n type ReactNode,\n type Ref,\n type SyntheticEvent,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport type { DateRangeSelection } from \"../calendar\";\nimport { useLocalization } from \"../localization-provider\";\nimport dateInputCss from \"./DateInput.css\";\n\nconst withBaseName = makePrefixer(\"saltDateInput\");\n\n/**\n * DateInputRange raw value or null if no date is defined.\n */\nexport type DateInputRangeValue = {\n startDate?: string | null;\n endDate?: string | null;\n};\n\n/**\n * Details of parsing the date range\n */\nexport type DateInputRangeDetails = {\n /** Details of parsing the start date and applying any validation */\n startDate?: DateDetail;\n /** Details of parsing the end date and applying any validation */\n endDate?: DateDetail;\n};\n\n/**\n * Enum to identify the field being parsed\n */\nexport enum DateParserField {\n START = \"start\",\n END = \"end\",\n}\n\n/**\n * Props for the DateInputRange component.\n */\nexport interface DateInputRangeProps\n extends Omit<ComponentPropsWithoutRef<\"div\">, \"defaultValue\" | \"onChange\">,\n Omit<InputProps, \"defaultValue\" | \"inputRef\" | \"value\" | \"onChange\"> {\n /**\n * Styling variant with full border. Defaults to false.\n */\n bordered?: boolean;\n /**\n * The marker to use in an empty read-only DateInput.\n * Use `''` to disable this feature. Defaults to '—'.\n */\n emptyReadOnlyMarker?: string;\n /**\n * End adornment component.\n */\n endAdornment?: ReactNode;\n /**\n * Attributes applied to the start `input` element.\n * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dateInput#Attributes\n */\n startInputProps?: InputHTMLAttributes<HTMLInputElement>;\n /**\n * Attributes applied to the end `input` element.\n * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dateInput#Attributes\n */\n endInputProps?: InputHTMLAttributes<HTMLInputElement>;\n /**\n * If `true`, the component is read-only.\n */\n readOnly?: boolean;\n /**\n * Validation status.\n */\n validationStatus?: \"error\" | \"warning\" | \"success\";\n /**\n * Styling variant. Defaults to \"primary\".\n */\n variant?: \"primary\" | \"secondary\" | \"tertiary\";\n /**\n * Format string for date.\n */\n format?: string;\n /**\n * Optional ref for the start input component.\n */\n startInputRef?: Ref<HTMLInputElement>;\n /**\n * Optional ref for the end input component.\n */\n endInputRef?: Ref<HTMLInputElement>;\n /**\n * Parser callback, if not using the adapter's parser\n * @param value - date string to parse\n * @param field: DateParserField to identify value,\n * @param format - format required\n */\n parse?: (\n value: string,\n field: DateParserField,\n format: string,\n ) => ParserResult;\n /**\n * Input value. Use when the input value is controlled.\n */\n value?: DateInputRangeValue;\n /**\n * The initial input value. Use when the component is uncontrolled.\n */\n defaultValue?: DateInputRangeValue;\n /**\n * The date value. Use when the component is controlled.\n */\n date?: DateRangeSelection | null;\n /**\n * The initial selected date value. Use when the component is uncontrolled.\n */\n defaultDate?: DateRangeSelection | null;\n /**\n * Callback fired when the input value changes.\n * @param event - The change event.\n * @param date - The new date input range value.\n */\n onChange?: (event: ChangeEvent<HTMLInputElement>) => void;\n /**\n * Callback fired when the selected date changes.\n * @param event - The synthetic event.\n * @param date - the selected date, invalid date if not a valid date or undefined (uncontrolled) or null (controlled) if not defined\n * @param details - The details of date selection, either a valid date or error\n */\n onDateChange?: (\n event: SyntheticEvent,\n date: DateRangeSelection | null,\n details: DateInputRangeDetails,\n ) => void;\n /**\n * Called when input values change, either due to user interaction or programmatic formatting of valid dates.\n * @param event - The synthetic event or null if a programmatic change.\n * @param newValue - The new date input range value.\n */\n onDateValueChange?: (\n event: SyntheticEvent | null,\n newValue: DateInputRangeValue,\n ) => void;\n /**\n * Specifies the timezone behavior:\n * - If undefined, the timezone will be derived from the passed date, or from `defaultSelectedDate`/`selectedDate`.\n * - If set to \"default\", the default timezone of the date library will be used.\n * - If set to \"system\", the local system's timezone will be applied.\n * - If set to \"UTC\", the time will be returned in UTC.\n * - If set to a valid IANA timezone identifier, the time will be returned for that specific timezone.\n */\n timezone?: Timezone;\n}\n\nexport const DateInputRange = forwardRef<HTMLDivElement, DateInputRangeProps>(\n (props: DateInputRangeProps, ref: React.Ref<HTMLDivElement>) => {\n const { dateAdapter } = useLocalization();\n const {\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": restAriaLabelledBy,\n \"aria-describedby\": restAriaDescribedBy,\n bordered = false,\n className,\n disabled,\n date: dateProp,\n defaultDate,\n onDateChange,\n value: valueProp,\n format = \"DD MMM YYYY\",\n defaultValue = {\n startDate: \"\",\n endDate: \"\",\n },\n onChange,\n onDateValueChange,\n onMouseDown,\n emptyReadOnlyMarker = \"—\",\n endAdornment,\n startInputProps = {},\n endInputProps = {},\n startInputRef: startInputRefProp,\n endInputRef: endInputRefProp,\n parse: parseProp,\n placeholder = format.toLowerCase(),\n readOnly: readOnlyProp,\n validationStatus: validationStatusProp,\n variant = \"primary\",\n timezone = dateProp?.startDate ||\n dateProp?.endDate ||\n defaultDate?.startDate ||\n defaultDate?.endDate\n ? dateAdapter.getTimezone(\n (dateProp?.startDate ??\n dateProp?.endDate ??\n defaultDate?.startDate ??\n defaultDate?.endDate) as DateFrameworkType,\n )\n : \"default\",\n ...rest\n } = props;\n const wrapperRef = useRef(null);\n const handleWrapperRef = useForkRef<HTMLDivElement>(ref, wrapperRef);\n\n const startInputRef = useRef<HTMLInputElement>(null);\n const handleStartInputRef = useForkRef(startInputRef, startInputRefProp);\n const endInputRef = useRef<HTMLInputElement>(null);\n const handleEndInputRef = useForkRef(endInputRef, endInputRefProp);\n\n const startInputID = useId(startInputProps.id);\n const endInputID = useId(endInputProps.id);\n const startDateLabelId = useId();\n const endDateLabelId = useId();\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-date-input-range\",\n css: dateInputCss,\n window: targetWindow,\n });\n\n const parseDateValue = (\n dateValue: string | null | undefined,\n field: DateParserField,\n ): ParserResult | undefined =>\n parseProp\n ? parseProp(dateValue ?? \"\", field, format)\n : dateAdapter.parse.bind(dateAdapter)(dateValue ?? \"\", format);\n\n const [dateValue, setDateValue] = useControlled({\n controlled: valueProp,\n default: defaultValue,\n name: \"DateInputRange\",\n state: \"dateValue\",\n });\n\n const [date, setDate] = useControlled({\n controlled: dateProp,\n // biome-ignore lint/correctness/useExhaustiveDependencies: just on mount\n default: useMemo(() => {\n if (defaultDate) {\n return defaultDate;\n }\n if (!defaultValue) {\n return undefined;\n }\n const { date: startDate = undefined } =\n parseDateValue(defaultValue?.startDate, DateParserField.START) ?? {};\n const { date: endDate = undefined } =\n parseDateValue(defaultValue?.endDate, DateParserField.END) ?? {};\n return {\n startDate,\n endDate,\n };\n }, []),\n name: \"DateInputRange\",\n state: \"date\",\n });\n\n const lastAppliedValue = useRef<DateInputRangeValue>(dateValue);\n const preservedTime = useRef<{\n startTime: TimeFields | null;\n endTime: TimeFields | null;\n }>({ startTime: null, endTime: null });\n preservedTime.current = {\n startTime:\n date?.startDate && dateAdapter.isValid(date?.startDate)\n ? dateAdapter.getTime(date.startDate)\n : null,\n endTime:\n date?.endDate && dateAdapter.isValid(date?.endDate)\n ? dateAdapter.getTime(date.endDate)\n : null,\n };\n const setDateValueFromDate = (newDate: typeof date) => {\n let newDateValue = { startDate: \"\", endDate: \"\" };\n if (!newDate?.startDate) {\n newDateValue = { ...newDateValue, startDate: \"\" };\n } else if (!dateAdapter.isValid(newDate?.startDate)) {\n newDateValue = {\n ...newDateValue,\n startDate: dateValue?.startDate ?? \"\",\n };\n } else if (newDate?.startDate) {\n const formattedStartDateValue = dateAdapter.format(\n newDate.startDate,\n format,\n );\n newDateValue = { ...newDateValue, startDate: formattedStartDateValue };\n }\n if (!newDate?.endDate) {\n newDateValue = { ...newDateValue, endDate: \"\" };\n } else if (!dateAdapter.isValid(newDate?.endDate)) {\n newDateValue = { ...newDateValue, endDate: dateValue?.endDate ?? \"\" };\n } else if (newDate?.endDate && dateAdapter.isValid(newDate.endDate)) {\n const formattedEndDateValue = dateAdapter.format(\n newDate.endDate,\n format,\n );\n newDateValue = { ...newDateValue, endDate: formattedEndDateValue };\n }\n\n if (\n (!newDateValue?.startDate && !!dateValue?.startDate) ||\n (!newDateValue.endDate && !!dateValue?.endDate) ||\n newDateValue?.startDate !== dateValue?.startDate ||\n newDateValue?.endDate !== dateValue?.endDate\n ) {\n onDateValueChange?.(null, newDateValue);\n setDateValue(newDateValue);\n }\n return newDateValue;\n };\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: Update date string value ONLY when selected date changes, not when date string itself change\n useEffect(() => {\n lastAppliedValue.current = setDateValueFromDate(date);\n }, [date, date?.startDate, date?.endDate, dateAdapter.format, format]);\n\n const [focused, setFocused] = useState(false);\n\n const {\n a11yProps: {\n \"aria-describedby\": formFieldDescribedBy,\n \"aria-labelledby\": formFieldLabelledBy,\n } = {},\n disabled: formFieldDisabled,\n readOnly: formFieldReadOnly,\n necessity: formFieldRequired,\n validationStatus: formFieldValidationStatus,\n } = useFormFieldProps();\n\n const isReadOnly = readOnlyProp || formFieldReadOnly;\n const isDisabled = disabled || formFieldDisabled;\n\n const validationStatus = formFieldValidationStatus ?? validationStatusProp;\n\n const {\n \"aria-describedby\": startInputPropsDescribedBy,\n \"aria-labelledby\": startInputPropsLabelledBy,\n \"aria-label\": startInputPropsAriaLabel,\n onBlur: startInputPropsOnBlur,\n onChange: startInputPropsOnChange,\n onKeyDown: startInputPropsOnKeyDown,\n onFocus: startInputPropsOnFocus,\n required: startInputPropsRequired,\n ...restStartInputProps\n } = startInputProps;\n\n const startInputIsRequired = formFieldRequired\n ? [\"required\", \"asterisk\"].includes(formFieldRequired)\n : startInputPropsRequired;\n\n const {\n \"aria-describedby\": endInputPropsDescribedBy,\n \"aria-labelledby\": endInputPropsLabelledBy,\n \"aria-label\": endInputPropsAriaLabel,\n onBlur: endInputPropsOnBlur,\n onChange: endInputPropsOnChange,\n onKeyDown: endInputPropsOnKeyDown,\n onFocus: endInputPropsOnFocus,\n required: endInputPropsRequired,\n ...restEndInputProps\n } = endInputProps;\n\n const hasStartExplicitAriaLabel =\n startInputPropsAriaLabel !== undefined || ariaLabel !== undefined;\n const hasEndExplicitAriaLabel =\n endInputPropsAriaLabel !== undefined || ariaLabel !== undefined;\n\n const startAriaLabelledBy = hasStartExplicitAriaLabel\n ? undefined\n : clsx(\n formFieldLabelledBy,\n startDateLabelId,\n startInputPropsLabelledBy,\n restAriaLabelledBy,\n ) || undefined;\n const endAriaLabelledBy = hasEndExplicitAriaLabel\n ? undefined\n : clsx(\n formFieldLabelledBy,\n endDateLabelId,\n endInputPropsLabelledBy,\n restAriaLabelledBy,\n ) || undefined;\n const startAriaDescribedBy =\n clsx(\n formFieldDescribedBy,\n startInputPropsDescribedBy,\n restAriaDescribedBy,\n ) || undefined;\n const endAriaDescribedBy =\n clsx(\n formFieldDescribedBy,\n endInputPropsDescribedBy,\n restAriaDescribedBy,\n ) || undefined;\n\n const startAriaLabel =\n startInputPropsAriaLabel ??\n (ariaLabel ? `Start date ${ariaLabel}` : \"Start date\");\n\n const endAriaLabel =\n endInputPropsAriaLabel ??\n (ariaLabel ? `End date ${ariaLabel}` : \"End date\");\n\n const endInputIsRequired = formFieldRequired\n ? [\"required\", \"asterisk\"].includes(formFieldRequired)\n : endInputPropsRequired;\n\n const apply = (event: SyntheticEvent) => {\n const { date: startDate = undefined, ...startDateParseDetails } =\n parseDateValue(dateValue?.startDate, DateParserField.START) ?? {};\n const { date: endDate = undefined, ...endDateParseDetails } =\n parseDateValue(dateValue?.endDate, DateParserField.END) ?? {};\n\n const updatedDateRange: DateRangeSelection = {\n startDate: dateValue?.startDate?.length ? startDate : null,\n endDate: dateValue?.endDate?.length ? endDate : null,\n };\n if (dateAdapter.isValid(startDate)) {\n updatedDateRange.startDate = dateAdapter.setTimezone(\n startDate,\n timezone,\n );\n if (preservedTime.current.startTime) {\n updatedDateRange.startDate = dateAdapter.set(\n updatedDateRange.startDate,\n preservedTime.current.startTime,\n );\n }\n }\n if (dateAdapter.isValid(endDate)) {\n updatedDateRange.endDate = dateAdapter.setTimezone(endDate, timezone);\n if (preservedTime.current.endTime) {\n updatedDateRange.endDate = dateAdapter.set(\n updatedDateRange.endDate,\n preservedTime.current.endTime,\n );\n }\n }\n const updatedDateValue = setDateValueFromDate(updatedDateRange);\n\n setDate(updatedDateRange);\n\n if (\n lastAppliedValue.current.startDate !== updatedDateValue.startDate ||\n lastAppliedValue.current.endDate !== updatedDateValue.endDate\n ) {\n onDateChange?.(event, updatedDateRange, {\n startDate: startDateParseDetails,\n endDate: endDateParseDetails,\n });\n onDateValueChange?.(event, updatedDateValue);\n lastAppliedValue.current = updatedDateValue;\n }\n };\n\n const handleStartInputChange: ChangeEventHandler<HTMLInputElement> = (\n event,\n ) => {\n const newDateValue = { ...dateValue, startDate: event.target.value };\n setDateValue(newDateValue);\n startInputPropsOnChange?.(event);\n onChange?.(event);\n onDateValueChange?.(event, newDateValue);\n };\n\n const handleEndInputChange: ChangeEventHandler<HTMLInputElement> = (\n event,\n ) => {\n const newDateValue = { ...dateValue, endDate: event.target.value };\n setDateValue(newDateValue);\n endInputPropsOnChange?.(event);\n onChange?.(event);\n onDateValueChange?.(event, newDateValue);\n };\n\n const handleStartInputFocus: FocusEventHandler<HTMLInputElement> = (\n event,\n ) => {\n setFocused(true);\n startInputPropsOnFocus?.(event);\n };\n\n const handleEndInputFocus: FocusEventHandler<HTMLInputElement> = (\n event,\n ) => {\n setFocused(true);\n endInputPropsOnFocus?.(event);\n };\n\n const handleStartInputBlur: FocusEventHandler<HTMLInputElement> = (\n event,\n ) => {\n setFocused(false);\n apply(event);\n startInputPropsOnBlur?.(event);\n };\n\n const handleEndInputBlur: FocusEventHandler<HTMLInputElement> = (event) => {\n setFocused(false);\n apply(event);\n endInputPropsOnBlur?.(event);\n };\n\n const handleStartInputKeyDown: KeyboardEventHandler<HTMLInputElement> = (\n event,\n ) => {\n if (event.key === \"Enter\") {\n apply(event);\n }\n startInputPropsOnKeyDown?.(event);\n };\n\n const handleEndInputKeyDown: KeyboardEventHandler<HTMLInputElement> = (\n event,\n ) => {\n if (event.key === \"Enter\") {\n apply(event);\n }\n endInputPropsOnKeyDown?.(event);\n };\n\n const handleWrapperMouseDown: MouseEventHandler<HTMLDivElement> = (\n event,\n ) => {\n if (event.target === wrapperRef.current) {\n event.preventDefault();\n const input = startInputRef.current;\n input?.focus();\n input?.setSelectionRange(input.value.length, input.value.length);\n }\n onMouseDown?.(event);\n };\n\n return (\n <div\n className={clsx(\n withBaseName(),\n withBaseName(variant),\n {\n [withBaseName(\"focused\")]: !isDisabled && focused,\n [withBaseName(\"disabled\")]: isDisabled,\n [withBaseName(\"readOnly\")]: isReadOnly,\n [withBaseName(validationStatus ?? \"\")]: validationStatus,\n [withBaseName(\"bordered\")]: bordered,\n },\n className,\n )}\n ref={handleWrapperRef}\n onMouseDown={handleWrapperMouseDown}\n {...rest}\n >\n <input\n autoComplete=\"off\"\n aria-describedby={startAriaDescribedBy}\n aria-labelledby={startAriaLabelledBy}\n aria-invalid={\n (!isReadOnly && validationStatus === \"error\") || undefined\n }\n aria-label={startAriaLabel}\n id={startInputID}\n className={withBaseName(\"input\")}\n disabled={isDisabled}\n readOnly={isReadOnly}\n ref={handleStartInputRef}\n tabIndex={isDisabled ? -1 : 0}\n placeholder={placeholder}\n value={\n isReadOnly && !dateValue?.startDate\n ? emptyReadOnlyMarker\n : (dateValue.startDate ?? dateAdapter.format(undefined, format))\n }\n {...restStartInputProps}\n onBlur={handleStartInputBlur}\n onChange={handleStartInputChange}\n onKeyDown={handleStartInputKeyDown}\n onFocus={!isDisabled ? handleStartInputFocus : undefined}\n required={startInputIsRequired}\n />\n <span className={withBaseName(\"dash\")}>-</span>\n <input\n autoComplete=\"off\"\n aria-describedby={endAriaDescribedBy}\n aria-labelledby={endAriaLabelledBy}\n aria-invalid={\n (!isReadOnly && validationStatus === \"error\") || undefined\n }\n aria-label={endAriaLabel}\n id={endInputID}\n className={withBaseName(\"input\")}\n disabled={isDisabled}\n readOnly={isReadOnly}\n ref={handleEndInputRef}\n tabIndex={isDisabled ? -1 : 0}\n placeholder={placeholder}\n value={\n isReadOnly && !dateValue?.endDate\n ? emptyReadOnlyMarker\n : (dateValue.endDate ?? dateAdapter.format(undefined, format))\n }\n {...restEndInputProps}\n onBlur={handleEndInputBlur}\n onChange={handleEndInputChange}\n onKeyDown={handleEndInputKeyDown}\n onFocus={!isDisabled ? handleEndInputFocus : undefined}\n required={endInputIsRequired}\n />\n <div className={withBaseName(\"endAdornmentContainer\")}>\n {!isDisabled && validationStatus && (\n <StatusAdornment status={validationStatus} />\n )}\n {endAdornment}\n </div>\n <div className={withBaseName(\"activationIndicator\")} />\n <span id={startDateLabelId} className={withBaseName(\"visuallyHidden\")}>\n Start date\n </span>\n <span id={endDateLabelId} className={withBaseName(\"visuallyHidden\")}>\n End date\n </span>\n </div>\n );\n },\n);\n"],"names":["makePrefixer","DateParserField","forwardRef","useLocalization","useRef","useForkRef","useId","useWindow","useComponentCssInjection","dateInputCss","dateValue","useControlled","useMemo","useEffect","useState","useFormFieldProps","clsx","jsxs","jsx","StatusAdornment"],"mappings":"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"}
1
+ {"version":3,"file":"DateInputRange.js","sources":["../src/date-input/DateInputRange.tsx"],"sourcesContent":["import {\n type InputProps,\n makePrefixer,\n StatusAdornment,\n useControlled,\n useForkRef,\n useFormFieldProps,\n useId,\n} from \"@salt-ds/core\";\nimport type {\n DateDetail,\n DateFrameworkType,\n ParserResult,\n TimeFields,\n Timezone,\n} from \"@salt-ds/date-adapters\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n type ChangeEvent,\n type ChangeEventHandler,\n type ComponentPropsWithoutRef,\n type FocusEventHandler,\n forwardRef,\n type InputHTMLAttributes,\n type KeyboardEventHandler,\n type MouseEventHandler,\n type ReactNode,\n type Ref,\n type SyntheticEvent,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport type { DateRangeSelection } from \"../calendar\";\nimport { useLocalization } from \"../localization-provider\";\nimport dateInputCss from \"./DateInput.css\";\n\nconst withBaseName = makePrefixer(\"saltDateInput\");\n\n/**\n * DateInputRange raw value or null if no date is defined.\n */\nexport type DateInputRangeValue = {\n startDate?: string | null;\n endDate?: string | null;\n};\n\n/**\n * Details of parsing the date range\n */\nexport type DateInputRangeDetails = {\n /** Details of parsing the start date and applying any validation */\n startDate?: DateDetail;\n /** Details of parsing the end date and applying any validation */\n endDate?: DateDetail;\n};\n\n/**\n * Enum to identify the field being parsed\n */\nexport enum DateParserField {\n START = \"start\",\n END = \"end\",\n}\n\n/**\n * Props for the DateInputRange component.\n */\nexport interface DateInputRangeProps\n extends Omit<ComponentPropsWithoutRef<\"div\">, \"defaultValue\" | \"onChange\">,\n Omit<\n InputProps,\n \"defaultValue\" | \"inputRef\" | \"name\" | \"value\" | \"onChange\"\n > {\n /**\n * Styling variant with full border. Defaults to false.\n */\n bordered?: boolean;\n /**\n * The marker to use in an empty read-only DateInput.\n * Use `''` to disable this feature. Defaults to '—'.\n */\n emptyReadOnlyMarker?: string;\n /**\n * End adornment component.\n */\n endAdornment?: ReactNode;\n /**\n * Attributes applied to the start `input` element.\n * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dateInput#Attributes\n */\n startInputProps?: InputHTMLAttributes<HTMLInputElement>;\n /**\n * The name applied to the start date input.\n */\n startName?: string;\n /**\n * Attributes applied to the end `input` element.\n * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dateInput#Attributes\n */\n endInputProps?: InputHTMLAttributes<HTMLInputElement>;\n /**\n * The name applied to the end date input.\n */\n endName?: string;\n /**\n * If `true`, the component is read-only.\n */\n readOnly?: boolean;\n /**\n * Validation status.\n */\n validationStatus?: \"error\" | \"warning\" | \"success\";\n /**\n * Styling variant. Defaults to \"primary\".\n */\n variant?: \"primary\" | \"secondary\" | \"tertiary\";\n /**\n * Format string for date.\n */\n format?: string;\n /**\n * Optional ref for the start input component.\n */\n startInputRef?: Ref<HTMLInputElement>;\n /**\n * Optional ref for the end input component.\n */\n endInputRef?: Ref<HTMLInputElement>;\n /**\n * Parser callback, if not using the adapter's parser\n * @param value - date string to parse\n * @param field: DateParserField to identify value,\n * @param format - format required\n */\n parse?: (\n value: string,\n field: DateParserField,\n format: string,\n ) => ParserResult;\n /**\n * Input value. Use when the input value is controlled.\n */\n value?: DateInputRangeValue;\n /**\n * The initial input value. Use when the component is uncontrolled.\n */\n defaultValue?: DateInputRangeValue;\n /**\n * The date value. Use when the component is controlled.\n */\n date?: DateRangeSelection | null;\n /**\n * The initial selected date value. Use when the component is uncontrolled.\n */\n defaultDate?: DateRangeSelection | null;\n /**\n * Callback fired when the input value changes.\n * @param event - The change event.\n * @param date - The new date input range value.\n */\n onChange?: (event: ChangeEvent<HTMLInputElement>) => void;\n /**\n * Callback fired when the selected date changes.\n * @param event - The synthetic event.\n * @param date - the selected date, invalid date if not a valid date or undefined (uncontrolled) or null (controlled) if not defined\n * @param details - The details of date selection, either a valid date or error\n */\n onDateChange?: (\n event: SyntheticEvent,\n date: DateRangeSelection | null,\n details: DateInputRangeDetails,\n ) => void;\n /**\n * Called when input values change, either due to user interaction or programmatic formatting of valid dates.\n * @param event - The synthetic event or null if a programmatic change.\n * @param newValue - The new date input range value.\n */\n onDateValueChange?: (\n event: SyntheticEvent | null,\n newValue: DateInputRangeValue,\n ) => void;\n /**\n * Specifies the timezone behavior:\n * - If undefined, the timezone will be derived from the passed date, or from `defaultSelectedDate`/`selectedDate`.\n * - If set to \"default\", the default timezone of the date library will be used.\n * - If set to \"system\", the local system's timezone will be applied.\n * - If set to \"UTC\", the time will be returned in UTC.\n * - If set to a valid IANA timezone identifier, the time will be returned for that specific timezone.\n */\n timezone?: Timezone;\n}\n\nexport const DateInputRange = forwardRef<HTMLDivElement, DateInputRangeProps>(\n (props: DateInputRangeProps, ref: React.Ref<HTMLDivElement>) => {\n const { dateAdapter } = useLocalization();\n const {\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": restAriaLabelledBy,\n \"aria-describedby\": restAriaDescribedBy,\n bordered = false,\n className,\n disabled,\n date: dateProp,\n defaultDate,\n onDateChange,\n value: valueProp,\n format = \"DD MMM YYYY\",\n defaultValue = {\n startDate: \"\",\n endDate: \"\",\n },\n onChange,\n onDateValueChange,\n onMouseDown,\n emptyReadOnlyMarker = \"—\",\n endAdornment,\n startInputProps = {},\n startName,\n endInputProps = {},\n endName,\n startInputRef: startInputRefProp,\n endInputRef: endInputRefProp,\n parse: parseProp,\n placeholder = format.toLowerCase(),\n readOnly: readOnlyProp,\n validationStatus: validationStatusProp,\n variant = \"primary\",\n timezone = dateProp?.startDate ||\n dateProp?.endDate ||\n defaultDate?.startDate ||\n defaultDate?.endDate\n ? dateAdapter.getTimezone(\n (dateProp?.startDate ??\n dateProp?.endDate ??\n defaultDate?.startDate ??\n defaultDate?.endDate) as DateFrameworkType,\n )\n : \"default\",\n ...rest\n } = props;\n const wrapperRef = useRef(null);\n const handleWrapperRef = useForkRef<HTMLDivElement>(ref, wrapperRef);\n\n const startInputRef = useRef<HTMLInputElement>(null);\n const handleStartInputRef = useForkRef(startInputRef, startInputRefProp);\n const endInputRef = useRef<HTMLInputElement>(null);\n const handleEndInputRef = useForkRef(endInputRef, endInputRefProp);\n\n const startInputID = useId(startInputProps.id);\n const endInputID = useId(endInputProps.id);\n const startDateLabelId = useId();\n const endDateLabelId = useId();\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-date-input-range\",\n css: dateInputCss,\n window: targetWindow,\n });\n\n const parseDateValue = (\n dateValue: string | null | undefined,\n field: DateParserField,\n ): ParserResult | undefined =>\n parseProp\n ? parseProp(dateValue ?? \"\", field, format)\n : dateAdapter.parse.bind(dateAdapter)(dateValue ?? \"\", format);\n\n const [dateValue, setDateValue] = useControlled({\n controlled: valueProp,\n default: defaultValue,\n name: \"DateInputRange\",\n state: \"dateValue\",\n });\n\n const [date, setDate] = useControlled({\n controlled: dateProp,\n // biome-ignore lint/correctness/useExhaustiveDependencies: just on mount\n default: useMemo(() => {\n if (defaultDate) {\n return defaultDate;\n }\n if (!defaultValue) {\n return undefined;\n }\n const { date: startDate = undefined } =\n parseDateValue(defaultValue?.startDate, DateParserField.START) ?? {};\n const { date: endDate = undefined } =\n parseDateValue(defaultValue?.endDate, DateParserField.END) ?? {};\n return {\n startDate,\n endDate,\n };\n }, []),\n name: \"DateInputRange\",\n state: \"date\",\n });\n\n const lastAppliedValue = useRef<DateInputRangeValue>(dateValue);\n const preservedTime = useRef<{\n startTime: TimeFields | null;\n endTime: TimeFields | null;\n }>({ startTime: null, endTime: null });\n preservedTime.current = {\n startTime:\n date?.startDate && dateAdapter.isValid(date?.startDate)\n ? dateAdapter.getTime(date.startDate)\n : null,\n endTime:\n date?.endDate && dateAdapter.isValid(date?.endDate)\n ? dateAdapter.getTime(date.endDate)\n : null,\n };\n const setDateValueFromDate = (newDate: typeof date) => {\n let newDateValue = { startDate: \"\", endDate: \"\" };\n if (!newDate?.startDate) {\n newDateValue = { ...newDateValue, startDate: \"\" };\n } else if (!dateAdapter.isValid(newDate?.startDate)) {\n newDateValue = {\n ...newDateValue,\n startDate: dateValue?.startDate ?? \"\",\n };\n } else if (newDate?.startDate) {\n const formattedStartDateValue = dateAdapter.format(\n newDate.startDate,\n format,\n );\n newDateValue = { ...newDateValue, startDate: formattedStartDateValue };\n }\n if (!newDate?.endDate) {\n newDateValue = { ...newDateValue, endDate: \"\" };\n } else if (!dateAdapter.isValid(newDate?.endDate)) {\n newDateValue = { ...newDateValue, endDate: dateValue?.endDate ?? \"\" };\n } else if (newDate?.endDate && dateAdapter.isValid(newDate.endDate)) {\n const formattedEndDateValue = dateAdapter.format(\n newDate.endDate,\n format,\n );\n newDateValue = { ...newDateValue, endDate: formattedEndDateValue };\n }\n\n if (\n (!newDateValue?.startDate && !!dateValue?.startDate) ||\n (!newDateValue.endDate && !!dateValue?.endDate) ||\n newDateValue?.startDate !== dateValue?.startDate ||\n newDateValue?.endDate !== dateValue?.endDate\n ) {\n onDateValueChange?.(null, newDateValue);\n setDateValue(newDateValue);\n }\n return newDateValue;\n };\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: Update date string value ONLY when selected date changes, not when date string itself change\n useEffect(() => {\n lastAppliedValue.current = setDateValueFromDate(date);\n }, [date, date?.startDate, date?.endDate, dateAdapter.format, format]);\n\n const [focused, setFocused] = useState(false);\n\n const {\n a11yProps: {\n \"aria-describedby\": formFieldDescribedBy,\n \"aria-labelledby\": formFieldLabelledBy,\n } = {},\n disabled: formFieldDisabled,\n readOnly: formFieldReadOnly,\n necessity: formFieldRequired,\n validationStatus: formFieldValidationStatus,\n } = useFormFieldProps();\n\n const isReadOnly = readOnlyProp || formFieldReadOnly;\n const isDisabled = disabled || formFieldDisabled;\n\n const validationStatus = formFieldValidationStatus ?? validationStatusProp;\n\n const {\n \"aria-describedby\": startInputPropsDescribedBy,\n \"aria-labelledby\": startInputPropsLabelledBy,\n \"aria-label\": startInputPropsAriaLabel,\n onBlur: startInputPropsOnBlur,\n onChange: startInputPropsOnChange,\n onKeyDown: startInputPropsOnKeyDown,\n onFocus: startInputPropsOnFocus,\n required: startInputPropsRequired,\n ...restStartInputProps\n } = startInputProps;\n\n const startInputIsRequired = formFieldRequired\n ? [\"required\", \"asterisk\"].includes(formFieldRequired)\n : startInputPropsRequired;\n\n const {\n \"aria-describedby\": endInputPropsDescribedBy,\n \"aria-labelledby\": endInputPropsLabelledBy,\n \"aria-label\": endInputPropsAriaLabel,\n onBlur: endInputPropsOnBlur,\n onChange: endInputPropsOnChange,\n onKeyDown: endInputPropsOnKeyDown,\n onFocus: endInputPropsOnFocus,\n required: endInputPropsRequired,\n ...restEndInputProps\n } = endInputProps;\n\n const hasStartExplicitAriaLabel =\n startInputPropsAriaLabel !== undefined || ariaLabel !== undefined;\n const hasEndExplicitAriaLabel =\n endInputPropsAriaLabel !== undefined || ariaLabel !== undefined;\n\n const startAriaLabelledBy = hasStartExplicitAriaLabel\n ? undefined\n : clsx(\n formFieldLabelledBy,\n startDateLabelId,\n startInputPropsLabelledBy,\n restAriaLabelledBy,\n ) || undefined;\n const endAriaLabelledBy = hasEndExplicitAriaLabel\n ? undefined\n : clsx(\n formFieldLabelledBy,\n endDateLabelId,\n endInputPropsLabelledBy,\n restAriaLabelledBy,\n ) || undefined;\n const startAriaDescribedBy =\n clsx(\n formFieldDescribedBy,\n startInputPropsDescribedBy,\n restAriaDescribedBy,\n ) || undefined;\n const endAriaDescribedBy =\n clsx(\n formFieldDescribedBy,\n endInputPropsDescribedBy,\n restAriaDescribedBy,\n ) || undefined;\n\n const startAriaLabel =\n startInputPropsAriaLabel ??\n (ariaLabel ? `Start date ${ariaLabel}` : \"Start date\");\n\n const endAriaLabel =\n endInputPropsAriaLabel ??\n (ariaLabel ? `End date ${ariaLabel}` : \"End date\");\n\n const endInputIsRequired = formFieldRequired\n ? [\"required\", \"asterisk\"].includes(formFieldRequired)\n : endInputPropsRequired;\n\n const apply = (event: SyntheticEvent) => {\n const { date: startDate = undefined, ...startDateParseDetails } =\n parseDateValue(dateValue?.startDate, DateParserField.START) ?? {};\n const { date: endDate = undefined, ...endDateParseDetails } =\n parseDateValue(dateValue?.endDate, DateParserField.END) ?? {};\n\n const updatedDateRange: DateRangeSelection = {\n startDate: dateValue?.startDate?.length ? startDate : null,\n endDate: dateValue?.endDate?.length ? endDate : null,\n };\n if (dateAdapter.isValid(startDate)) {\n updatedDateRange.startDate = dateAdapter.setTimezone(\n startDate,\n timezone,\n );\n if (preservedTime.current.startTime) {\n updatedDateRange.startDate = dateAdapter.set(\n updatedDateRange.startDate,\n preservedTime.current.startTime,\n );\n }\n }\n if (dateAdapter.isValid(endDate)) {\n updatedDateRange.endDate = dateAdapter.setTimezone(endDate, timezone);\n if (preservedTime.current.endTime) {\n updatedDateRange.endDate = dateAdapter.set(\n updatedDateRange.endDate,\n preservedTime.current.endTime,\n );\n }\n }\n const updatedDateValue = setDateValueFromDate(updatedDateRange);\n\n setDate(updatedDateRange);\n\n if (\n lastAppliedValue.current.startDate !== updatedDateValue.startDate ||\n lastAppliedValue.current.endDate !== updatedDateValue.endDate\n ) {\n onDateChange?.(event, updatedDateRange, {\n startDate: startDateParseDetails,\n endDate: endDateParseDetails,\n });\n onDateValueChange?.(event, updatedDateValue);\n lastAppliedValue.current = updatedDateValue;\n }\n };\n\n const handleStartInputChange: ChangeEventHandler<HTMLInputElement> = (\n event,\n ) => {\n const newDateValue = { ...dateValue, startDate: event.target.value };\n setDateValue(newDateValue);\n startInputPropsOnChange?.(event);\n onChange?.(event);\n onDateValueChange?.(event, newDateValue);\n };\n\n const handleEndInputChange: ChangeEventHandler<HTMLInputElement> = (\n event,\n ) => {\n const newDateValue = { ...dateValue, endDate: event.target.value };\n setDateValue(newDateValue);\n endInputPropsOnChange?.(event);\n onChange?.(event);\n onDateValueChange?.(event, newDateValue);\n };\n\n const handleStartInputFocus: FocusEventHandler<HTMLInputElement> = (\n event,\n ) => {\n setFocused(true);\n startInputPropsOnFocus?.(event);\n };\n\n const handleEndInputFocus: FocusEventHandler<HTMLInputElement> = (\n event,\n ) => {\n setFocused(true);\n endInputPropsOnFocus?.(event);\n };\n\n const handleStartInputBlur: FocusEventHandler<HTMLInputElement> = (\n event,\n ) => {\n setFocused(false);\n apply(event);\n startInputPropsOnBlur?.(event);\n };\n\n const handleEndInputBlur: FocusEventHandler<HTMLInputElement> = (event) => {\n setFocused(false);\n apply(event);\n endInputPropsOnBlur?.(event);\n };\n\n const handleStartInputKeyDown: KeyboardEventHandler<HTMLInputElement> = (\n event,\n ) => {\n if (event.key === \"Enter\") {\n apply(event);\n }\n startInputPropsOnKeyDown?.(event);\n };\n\n const handleEndInputKeyDown: KeyboardEventHandler<HTMLInputElement> = (\n event,\n ) => {\n if (event.key === \"Enter\") {\n apply(event);\n }\n endInputPropsOnKeyDown?.(event);\n };\n\n const handleWrapperMouseDown: MouseEventHandler<HTMLDivElement> = (\n event,\n ) => {\n if (event.target === wrapperRef.current) {\n event.preventDefault();\n const input = startInputRef.current;\n input?.focus();\n input?.setSelectionRange(input.value.length, input.value.length);\n }\n onMouseDown?.(event);\n };\n\n return (\n <div\n className={clsx(\n withBaseName(),\n withBaseName(variant),\n {\n [withBaseName(\"focused\")]: !isDisabled && focused,\n [withBaseName(\"disabled\")]: isDisabled,\n [withBaseName(\"readOnly\")]: isReadOnly,\n [withBaseName(validationStatus ?? \"\")]: validationStatus,\n [withBaseName(\"bordered\")]: bordered,\n },\n className,\n )}\n ref={handleWrapperRef}\n onMouseDown={handleWrapperMouseDown}\n {...rest}\n >\n <input\n autoComplete=\"off\"\n aria-describedby={startAriaDescribedBy}\n aria-labelledby={startAriaLabelledBy}\n aria-invalid={\n (!isReadOnly && validationStatus === \"error\") || undefined\n }\n aria-label={startAriaLabel}\n id={startInputID}\n className={withBaseName(\"input\")}\n disabled={isDisabled}\n name={startName}\n readOnly={isReadOnly}\n ref={handleStartInputRef}\n tabIndex={isDisabled ? -1 : 0}\n placeholder={placeholder}\n value={\n isReadOnly && !dateValue?.startDate\n ? emptyReadOnlyMarker\n : (dateValue.startDate ?? dateAdapter.format(undefined, format))\n }\n {...restStartInputProps}\n onBlur={handleStartInputBlur}\n onChange={handleStartInputChange}\n onKeyDown={handleStartInputKeyDown}\n onFocus={!isDisabled ? handleStartInputFocus : undefined}\n required={startInputIsRequired}\n />\n <span className={withBaseName(\"dash\")}>-</span>\n <input\n autoComplete=\"off\"\n aria-describedby={endAriaDescribedBy}\n aria-labelledby={endAriaLabelledBy}\n aria-invalid={\n (!isReadOnly && validationStatus === \"error\") || undefined\n }\n aria-label={endAriaLabel}\n id={endInputID}\n className={withBaseName(\"input\")}\n disabled={isDisabled}\n name={endName}\n readOnly={isReadOnly}\n ref={handleEndInputRef}\n tabIndex={isDisabled ? -1 : 0}\n placeholder={placeholder}\n value={\n isReadOnly && !dateValue?.endDate\n ? emptyReadOnlyMarker\n : (dateValue.endDate ?? dateAdapter.format(undefined, format))\n }\n {...restEndInputProps}\n onBlur={handleEndInputBlur}\n onChange={handleEndInputChange}\n onKeyDown={handleEndInputKeyDown}\n onFocus={!isDisabled ? handleEndInputFocus : undefined}\n required={endInputIsRequired}\n />\n <div className={withBaseName(\"endAdornmentContainer\")}>\n {!isDisabled && validationStatus && (\n <StatusAdornment status={validationStatus} />\n )}\n {endAdornment}\n </div>\n <div className={withBaseName(\"activationIndicator\")} />\n <span id={startDateLabelId} className={withBaseName(\"visuallyHidden\")}>\n Start date\n </span>\n <span id={endDateLabelId} className={withBaseName(\"visuallyHidden\")}>\n End date\n </span>\n </div>\n );\n },\n);\n"],"names":["makePrefixer","DateParserField","forwardRef","useLocalization","useRef","useForkRef","useId","useWindow","useComponentCssInjection","dateInputCss","dateValue","useControlled","useMemo","useEffect","useState","useFormFieldProps","clsx","jsxs","jsx","StatusAdornment"],"mappings":"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"}
@@ -33,6 +33,7 @@ const DateInputSingle = react.forwardRef(
33
33
  endAdornment,
34
34
  inputProps = {},
35
35
  inputRef: inputRefProp = null,
36
+ name,
36
37
  parse: parseProp,
37
38
  placeholder = format.toLowerCase(),
38
39
  readOnly: readOnlyProp,
@@ -214,6 +215,7 @@ const DateInputSingle = react.forwardRef(
214
215
  id: inputId,
215
216
  className: withBaseName("input"),
216
217
  disabled: isDisabled,
218
+ name,
217
219
  readOnly: isReadOnly,
218
220
  ref: handleInputRef,
219
221
  tabIndex: isDisabled ? -1 : 0,
@@ -1 +1 @@
1
- {"version":3,"file":"DateInputSingle.js","sources":["../src/date-input/DateInputSingle.tsx"],"sourcesContent":["import {\n makePrefixer,\n StatusAdornment,\n useControlled,\n useForkRef,\n useFormFieldProps,\n useId,\n} from \"@salt-ds/core\";\nimport type {\n DateDetail,\n DateFrameworkType,\n ParserResult,\n TimeFields,\n Timezone,\n} from \"@salt-ds/date-adapters\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n type ChangeEventHandler,\n type ComponentPropsWithoutRef,\n type FocusEventHandler,\n forwardRef,\n type InputHTMLAttributes,\n type KeyboardEventHandler,\n type MouseEventHandler,\n type ReactNode,\n type Ref,\n type SyntheticEvent,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport type { SingleDateSelection } from \"../calendar\";\nimport { useLocalization } from \"../localization-provider\";\nimport dateInputCss from \"./DateInput.css\";\n\nconst withBaseName = makePrefixer(\"saltDateInput\");\n\n/**\n * Details of parsing the date\n */\nexport type DateInputSingleDetails = DateDetail;\n\n/**\n * Props for the DateInputSingle component.\n */\nexport interface DateInputSingleProps\n extends Omit<ComponentPropsWithoutRef<\"div\">, \"defaultValue\">,\n Pick<\n ComponentPropsWithoutRef<\"input\">,\n \"disabled\" | \"value\" | \"defaultValue\" | \"placeholder\"\n > {\n /**\n * Styling variant with full border. Defaults to false.\n */\n bordered?: boolean;\n /**\n * The marker to use in an empty read-only DateInput.\n * Use `''` to disable this feature. Defaults to '—'.\n */\n emptyReadOnlyMarker?: string;\n /**\n * End adornment component.\n */\n endAdornment?: ReactNode;\n /**\n * Attributes applied to the `input` element.\n * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dateInput#Attributes\n */\n inputProps?: InputHTMLAttributes<HTMLInputElement>;\n /**\n * If `true`, the component is read-only.\n */\n readOnly?: boolean;\n /**\n * Start adornment component\n */\n startAdornment?: ReactNode;\n /**\n * Validation status.\n */\n validationStatus?: \"error\" | \"warning\" | \"success\";\n /**\n * Styling variant. Defaults to \"primary\".\n */\n variant?: \"primary\" | \"secondary\" | \"tertiary\";\n /**\n * Format string for date.\n */\n format?: string;\n /**\n * Reference for the input.\n */\n inputRef?: Ref<HTMLInputElement>;\n /**\n * Parser callback, if not using the adapter's parser\n * @param value - date string to parse\n * @param format - format required\n */\n parse?: (value: string, format: string) => ParserResult;\n /**\n * Input value. Use when the input value is controlled.\n */\n value?: string;\n /**\n * The initial input value. Use when the component is uncontrolled.\n */\n defaultValue?: string;\n /**\n * The date value. Use when the component is controlled.\n */\n date?: DateFrameworkType | null;\n /**\n * The initial selected date value. Use when the component is uncontrolled.\n */\n defaultDate?: DateFrameworkType | null;\n /**\n * Callback fired when the selected date changes.\n * @param event - The synthetic event.\n * @param date - the selected date, invalid date if not a valid date or undefined (uncontrolled) or null (controlled) if not defined\n * @param details - The details of date selection, either a valid date or error\n */\n onDateChange?: (\n event: SyntheticEvent,\n date: SingleDateSelection | null | undefined,\n details: DateInputSingleDetails,\n ) => void;\n /**\n * Called when input value changes, either due to user interaction or programmatic formatting of valid dates.\n * @param event - The synthetic event or null if a programmatic change.\n * @param newValue - The new date input value.\n */\n onDateValueChange?: (event: SyntheticEvent | null, newValue: string) => void;\n /**\n * Specifies the timezone behavior:\n * - If undefined, the timezone will be derived from the passed date, or from `defaultSelectedDate`/`selectedDate`.\n * - If set to \"default\", the default timezone of the date library will be used.\n * - If set to \"system\", the local system's timezone will be applied.\n * - If set to \"UTC\", the time will be returned in UTC.\n * - If set to a valid IANA timezone identifier, the time will be returned for that specific timezone.\n */\n timezone?: Timezone;\n}\n\nexport const DateInputSingle = forwardRef<HTMLDivElement, DateInputSingleProps>(\n (props: DateInputSingleProps, ref: React.Ref<HTMLDivElement>) => {\n const { dateAdapter } = useLocalization();\n const {\n bordered = false,\n className,\n disabled,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": restAriaLabelledBy,\n \"aria-describedby\": restAriaDescribedBy,\n date: dateProp,\n defaultDate,\n onDateChange,\n value: valueProp,\n format = \"DD MMM YYYY\",\n defaultValue = \"\",\n id,\n onChange,\n onMouseDown,\n emptyReadOnlyMarker = \"—\",\n endAdornment,\n inputProps = {},\n inputRef: inputRefProp = null,\n parse: parseProp,\n placeholder = format.toLowerCase(),\n readOnly: readOnlyProp,\n startAdornment,\n validationStatus: validationStatusProp,\n variant = \"primary\",\n onDateValueChange,\n timezone = dateProp || defaultDate\n ? dateAdapter.getTimezone(\n (dateProp ?? defaultDate) as DateFrameworkType,\n )\n : \"default\",\n ...rest\n } = props;\n const wrapperRef = useRef(null);\n const handleWrapperRef = useForkRef<HTMLDivElement>(ref, wrapperRef);\n const innerInputRef = useRef<HTMLInputElement>(null);\n const handleInputRef = useForkRef<HTMLInputElement>(\n innerInputRef,\n inputRefProp,\n );\n\n const inputId = useId(id);\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-date-input-single\",\n css: dateInputCss,\n window: targetWindow,\n });\n\n const [date, setDate] = useControlled({\n controlled: dateProp,\n // biome-ignore lint/correctness/useExhaustiveDependencies: just on mount\n default: useMemo(() => {\n if (defaultDate) {\n return defaultDate;\n }\n if (!defaultValue) {\n return undefined;\n }\n return dateAdapter.parse(defaultValue, format)\n .date as DateFrameworkType;\n }, []),\n name: \"DateInputSingle\",\n state: \"date\",\n });\n const [dateValue, setDateValue] = useControlled({\n controlled: valueProp,\n default: defaultValue,\n name: \"DateInputSingle\",\n state: \"dateValue\",\n });\n const lastAppliedValue = useRef<string>(dateValue);\n const preservedTime = useRef<TimeFields | null>(null);\n preservedTime.current = dateAdapter.isValid(date)\n ? dateAdapter.getTime(date)\n : null;\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: Update date string value ONLY when selected date changes, not when date string itself change\n useEffect(() => {\n const formattedValue = dateAdapter.format(date, format);\n const hasValueChanged = formattedValue !== dateValue;\n if (\n // should not reset \"error\" input values\n (date === null || dateAdapter.isValid(date)) &&\n hasValueChanged\n ) {\n setDateValue(formattedValue);\n onDateValueChange?.(null, formattedValue);\n lastAppliedValue.current = formattedValue;\n }\n }, [date, dateAdapter.format, format]);\n\n const [focused, setFocused] = useState(false);\n\n const {\n a11yProps: {\n \"aria-describedby\": formFieldDescribedBy,\n \"aria-labelledby\": formFieldLabelledBy,\n } = {},\n disabled: formFieldDisabled,\n readOnly: formFieldReadOnly,\n necessity: formFieldRequired,\n validationStatus: formFieldValidationStatus,\n } = useFormFieldProps();\n\n const isReadOnly = readOnlyProp || formFieldReadOnly;\n const isDisabled = disabled || formFieldDisabled;\n\n const validationStatus = formFieldValidationStatus ?? validationStatusProp;\n\n const {\n \"aria-describedby\": dateInputDescribedBy,\n \"aria-labelledby\": dateInputLabelledBy,\n \"aria-label\": dateInputAriaLabel,\n onBlur: inputPropsOnBlur,\n onChange: inputPropsOnChange,\n onKeyDown: inputPropsOnKeyDown,\n onFocus: inputPropsOnFocus,\n required: dateInputPropsRequired,\n ...restDateInputProps\n } = inputProps;\n\n const hasExplicitAriaLabel =\n dateInputAriaLabel !== undefined || ariaLabel !== undefined;\n\n const inputAriaLabelledBy = hasExplicitAriaLabel\n ? undefined\n : clsx(formFieldLabelledBy, dateInputLabelledBy, restAriaLabelledBy) ||\n undefined;\n const inputAriaDescribedBy =\n clsx(formFieldDescribedBy, dateInputDescribedBy, restAriaDescribedBy) ||\n undefined;\n const inputAriaLabel = dateInputAriaLabel ?? ariaLabel ?? \"date input\";\n\n const isRequired = formFieldRequired\n ? [\"required\", \"asterisk\"].includes(formFieldRequired)\n : dateInputPropsRequired;\n\n const apply = (event: SyntheticEvent) => {\n const parse = parseProp ?? dateAdapter.parse.bind(dateAdapter);\n const parseResult = parse(dateValue ?? \"\", format);\n let parsedDate: DateFrameworkType | null;\n let parseDetails: DateDetail;\n ({ date: parsedDate, ...parseDetails } = parseResult);\n parsedDate = dateValue ? parsedDate : null;\n let formattedValue = \"\";\n const isDateValid = dateAdapter.isValid(parsedDate);\n if (isDateValid && parsedDate) {\n parsedDate = dateAdapter.setTimezone(parsedDate, timezone);\n if (preservedTime.current) {\n parsedDate = dateAdapter.set(parsedDate, preservedTime.current);\n }\n formattedValue = dateAdapter.format(parsedDate, format);\n }\n const hasValueChanged = formattedValue !== dateValue;\n const newValue = isDateValid ? formattedValue : dateValue;\n if (hasValueChanged) {\n setDateValue(newValue);\n onDateValueChange?.(event, newValue);\n }\n\n setDate(parsedDate);\n\n if (lastAppliedValue.current !== newValue) {\n onDateChange?.(event, parsedDate, parseDetails);\n }\n lastAppliedValue.current = newValue;\n };\n\n const handleChange: ChangeEventHandler<HTMLInputElement> = (event) => {\n const newDateValue = event.target.value;\n setDateValue(newDateValue);\n inputPropsOnChange?.(event);\n onChange?.(event);\n onDateValueChange?.(event, newDateValue);\n };\n\n const handleFocus: FocusEventHandler<HTMLInputElement> = (event) => {\n setFocused(true);\n inputPropsOnFocus?.(event);\n };\n const handleBlur: FocusEventHandler<HTMLInputElement> = (event) => {\n setFocused(false);\n apply(event);\n inputPropsOnBlur?.(event);\n };\n\n const handleKeyDown: KeyboardEventHandler<HTMLInputElement> = (event) => {\n if (event.key === \"Enter\") {\n apply(event);\n }\n inputPropsOnKeyDown?.(event);\n };\n\n const handleMouseDown: MouseEventHandler<HTMLDivElement> = (event) => {\n if (event.target === wrapperRef.current) {\n event.preventDefault();\n innerInputRef.current?.focus();\n }\n onMouseDown?.(event);\n };\n\n return (\n <div\n className={clsx(\n withBaseName(),\n withBaseName(variant),\n {\n [withBaseName(\"focused\")]: !isDisabled && focused,\n [withBaseName(\"disabled\")]: isDisabled,\n [withBaseName(\"readOnly\")]: isReadOnly,\n [withBaseName(validationStatus ?? \"\")]: validationStatus,\n [withBaseName(\"bordered\")]: bordered,\n },\n className,\n )}\n ref={handleWrapperRef}\n onMouseDown={handleMouseDown}\n {...rest}\n >\n {startAdornment && (\n <div className={withBaseName(\"startAdornmentContainer\")}>\n {startAdornment}\n </div>\n )}\n <input\n autoComplete=\"off\"\n aria-describedby={inputAriaDescribedBy}\n aria-labelledby={inputAriaLabelledBy}\n aria-invalid={\n (!isReadOnly && validationStatus === \"error\") || undefined\n }\n aria-label={inputAriaLabel}\n id={inputId}\n className={withBaseName(\"input\")}\n disabled={isDisabled}\n readOnly={isReadOnly}\n ref={handleInputRef}\n tabIndex={isDisabled ? -1 : 0}\n placeholder={placeholder}\n value={isReadOnly && !dateValue ? emptyReadOnlyMarker : dateValue}\n {...restDateInputProps}\n onBlur={handleBlur}\n onChange={handleChange}\n onKeyDown={handleKeyDown}\n onFocus={!isDisabled ? handleFocus : undefined}\n required={isRequired}\n />\n <div className={withBaseName(\"endAdornmentContainer\")}>\n {!isDisabled && validationStatus && (\n <StatusAdornment status={validationStatus} />\n )}\n {endAdornment}\n </div>\n <div className={withBaseName(\"activationIndicator\")} />\n </div>\n );\n },\n);\n"],"names":["makePrefixer","forwardRef","useLocalization","useRef","useForkRef","useId","useWindow","useComponentCssInjection","dateInputCss","useControlled","useMemo","useEffect","useState","useFormFieldProps","clsx","jsxs","jsx","StatusAdornment"],"mappings":"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"}
1
+ {"version":3,"file":"DateInputSingle.js","sources":["../src/date-input/DateInputSingle.tsx"],"sourcesContent":["import {\n makePrefixer,\n StatusAdornment,\n useControlled,\n useForkRef,\n useFormFieldProps,\n useId,\n} from \"@salt-ds/core\";\nimport type {\n DateDetail,\n DateFrameworkType,\n ParserResult,\n TimeFields,\n Timezone,\n} from \"@salt-ds/date-adapters\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n type ChangeEventHandler,\n type ComponentPropsWithoutRef,\n type FocusEventHandler,\n forwardRef,\n type InputHTMLAttributes,\n type KeyboardEventHandler,\n type MouseEventHandler,\n type ReactNode,\n type Ref,\n type SyntheticEvent,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport type { SingleDateSelection } from \"../calendar\";\nimport { useLocalization } from \"../localization-provider\";\nimport dateInputCss from \"./DateInput.css\";\n\nconst withBaseName = makePrefixer(\"saltDateInput\");\n\n/**\n * Details of parsing the date\n */\nexport type DateInputSingleDetails = DateDetail;\n\n/**\n * Props for the DateInputSingle component.\n */\nexport interface DateInputSingleProps\n extends Omit<ComponentPropsWithoutRef<\"div\">, \"defaultValue\">,\n Pick<\n ComponentPropsWithoutRef<\"input\">,\n \"disabled\" | \"value\" | \"defaultValue\" | \"placeholder\"\n > {\n /**\n * Styling variant with full border. Defaults to false.\n */\n bordered?: boolean;\n /**\n * The marker to use in an empty read-only DateInput.\n * Use `''` to disable this feature. Defaults to '—'.\n */\n emptyReadOnlyMarker?: string;\n /**\n * End adornment component.\n */\n endAdornment?: ReactNode;\n /**\n * Attributes applied to the `input` element.\n * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dateInput#Attributes\n */\n inputProps?: InputHTMLAttributes<HTMLInputElement>;\n /**\n * The name applied to the input.\n */\n name?: string;\n /**\n * If `true`, the component is read-only.\n */\n readOnly?: boolean;\n /**\n * Start adornment component\n */\n startAdornment?: ReactNode;\n /**\n * Validation status.\n */\n validationStatus?: \"error\" | \"warning\" | \"success\";\n /**\n * Styling variant. Defaults to \"primary\".\n */\n variant?: \"primary\" | \"secondary\" | \"tertiary\";\n /**\n * Format string for date.\n */\n format?: string;\n /**\n * Reference for the input.\n */\n inputRef?: Ref<HTMLInputElement>;\n /**\n * Parser callback, if not using the adapter's parser\n * @param value - date string to parse\n * @param format - format required\n */\n parse?: (value: string, format: string) => ParserResult;\n /**\n * Input value. Use when the input value is controlled.\n */\n value?: string;\n /**\n * The initial input value. Use when the component is uncontrolled.\n */\n defaultValue?: string;\n /**\n * The date value. Use when the component is controlled.\n */\n date?: DateFrameworkType | null;\n /**\n * The initial selected date value. Use when the component is uncontrolled.\n */\n defaultDate?: DateFrameworkType | null;\n /**\n * Callback fired when the selected date changes.\n * @param event - The synthetic event.\n * @param date - the selected date, invalid date if not a valid date or undefined (uncontrolled) or null (controlled) if not defined\n * @param details - The details of date selection, either a valid date or error\n */\n onDateChange?: (\n event: SyntheticEvent,\n date: SingleDateSelection | null | undefined,\n details: DateInputSingleDetails,\n ) => void;\n /**\n * Called when input value changes, either due to user interaction or programmatic formatting of valid dates.\n * @param event - The synthetic event or null if a programmatic change.\n * @param newValue - The new date input value.\n */\n onDateValueChange?: (event: SyntheticEvent | null, newValue: string) => void;\n /**\n * Specifies the timezone behavior:\n * - If undefined, the timezone will be derived from the passed date, or from `defaultSelectedDate`/`selectedDate`.\n * - If set to \"default\", the default timezone of the date library will be used.\n * - If set to \"system\", the local system's timezone will be applied.\n * - If set to \"UTC\", the time will be returned in UTC.\n * - If set to a valid IANA timezone identifier, the time will be returned for that specific timezone.\n */\n timezone?: Timezone;\n}\n\nexport const DateInputSingle = forwardRef<HTMLDivElement, DateInputSingleProps>(\n (props: DateInputSingleProps, ref: React.Ref<HTMLDivElement>) => {\n const { dateAdapter } = useLocalization();\n const {\n bordered = false,\n className,\n disabled,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": restAriaLabelledBy,\n \"aria-describedby\": restAriaDescribedBy,\n date: dateProp,\n defaultDate,\n onDateChange,\n value: valueProp,\n format = \"DD MMM YYYY\",\n defaultValue = \"\",\n id,\n onChange,\n onMouseDown,\n emptyReadOnlyMarker = \"—\",\n endAdornment,\n inputProps = {},\n inputRef: inputRefProp = null,\n name,\n parse: parseProp,\n placeholder = format.toLowerCase(),\n readOnly: readOnlyProp,\n startAdornment,\n validationStatus: validationStatusProp,\n variant = \"primary\",\n onDateValueChange,\n timezone = dateProp || defaultDate\n ? dateAdapter.getTimezone(\n (dateProp ?? defaultDate) as DateFrameworkType,\n )\n : \"default\",\n ...rest\n } = props;\n const wrapperRef = useRef(null);\n const handleWrapperRef = useForkRef<HTMLDivElement>(ref, wrapperRef);\n const innerInputRef = useRef<HTMLInputElement>(null);\n const handleInputRef = useForkRef<HTMLInputElement>(\n innerInputRef,\n inputRefProp,\n );\n\n const inputId = useId(id);\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-date-input-single\",\n css: dateInputCss,\n window: targetWindow,\n });\n\n const [date, setDate] = useControlled({\n controlled: dateProp,\n // biome-ignore lint/correctness/useExhaustiveDependencies: just on mount\n default: useMemo(() => {\n if (defaultDate) {\n return defaultDate;\n }\n if (!defaultValue) {\n return undefined;\n }\n return dateAdapter.parse(defaultValue, format)\n .date as DateFrameworkType;\n }, []),\n name: \"DateInputSingle\",\n state: \"date\",\n });\n const [dateValue, setDateValue] = useControlled({\n controlled: valueProp,\n default: defaultValue,\n name: \"DateInputSingle\",\n state: \"dateValue\",\n });\n const lastAppliedValue = useRef<string>(dateValue);\n const preservedTime = useRef<TimeFields | null>(null);\n preservedTime.current = dateAdapter.isValid(date)\n ? dateAdapter.getTime(date)\n : null;\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: Update date string value ONLY when selected date changes, not when date string itself change\n useEffect(() => {\n const formattedValue = dateAdapter.format(date, format);\n const hasValueChanged = formattedValue !== dateValue;\n if (\n // should not reset \"error\" input values\n (date === null || dateAdapter.isValid(date)) &&\n hasValueChanged\n ) {\n setDateValue(formattedValue);\n onDateValueChange?.(null, formattedValue);\n lastAppliedValue.current = formattedValue;\n }\n }, [date, dateAdapter.format, format]);\n\n const [focused, setFocused] = useState(false);\n\n const {\n a11yProps: {\n \"aria-describedby\": formFieldDescribedBy,\n \"aria-labelledby\": formFieldLabelledBy,\n } = {},\n disabled: formFieldDisabled,\n readOnly: formFieldReadOnly,\n necessity: formFieldRequired,\n validationStatus: formFieldValidationStatus,\n } = useFormFieldProps();\n\n const isReadOnly = readOnlyProp || formFieldReadOnly;\n const isDisabled = disabled || formFieldDisabled;\n\n const validationStatus = formFieldValidationStatus ?? validationStatusProp;\n\n const {\n \"aria-describedby\": dateInputDescribedBy,\n \"aria-labelledby\": dateInputLabelledBy,\n \"aria-label\": dateInputAriaLabel,\n onBlur: inputPropsOnBlur,\n onChange: inputPropsOnChange,\n onKeyDown: inputPropsOnKeyDown,\n onFocus: inputPropsOnFocus,\n required: dateInputPropsRequired,\n ...restDateInputProps\n } = inputProps;\n\n const hasExplicitAriaLabel =\n dateInputAriaLabel !== undefined || ariaLabel !== undefined;\n\n const inputAriaLabelledBy = hasExplicitAriaLabel\n ? undefined\n : clsx(formFieldLabelledBy, dateInputLabelledBy, restAriaLabelledBy) ||\n undefined;\n const inputAriaDescribedBy =\n clsx(formFieldDescribedBy, dateInputDescribedBy, restAriaDescribedBy) ||\n undefined;\n const inputAriaLabel = dateInputAriaLabel ?? ariaLabel ?? \"date input\";\n\n const isRequired = formFieldRequired\n ? [\"required\", \"asterisk\"].includes(formFieldRequired)\n : dateInputPropsRequired;\n\n const apply = (event: SyntheticEvent) => {\n const parse = parseProp ?? dateAdapter.parse.bind(dateAdapter);\n const parseResult = parse(dateValue ?? \"\", format);\n let parsedDate: DateFrameworkType | null;\n let parseDetails: DateDetail;\n ({ date: parsedDate, ...parseDetails } = parseResult);\n parsedDate = dateValue ? parsedDate : null;\n let formattedValue = \"\";\n const isDateValid = dateAdapter.isValid(parsedDate);\n if (isDateValid && parsedDate) {\n parsedDate = dateAdapter.setTimezone(parsedDate, timezone);\n if (preservedTime.current) {\n parsedDate = dateAdapter.set(parsedDate, preservedTime.current);\n }\n formattedValue = dateAdapter.format(parsedDate, format);\n }\n const hasValueChanged = formattedValue !== dateValue;\n const newValue = isDateValid ? formattedValue : dateValue;\n if (hasValueChanged) {\n setDateValue(newValue);\n onDateValueChange?.(event, newValue);\n }\n\n setDate(parsedDate);\n\n if (lastAppliedValue.current !== newValue) {\n onDateChange?.(event, parsedDate, parseDetails);\n }\n lastAppliedValue.current = newValue;\n };\n\n const handleChange: ChangeEventHandler<HTMLInputElement> = (event) => {\n const newDateValue = event.target.value;\n setDateValue(newDateValue);\n inputPropsOnChange?.(event);\n onChange?.(event);\n onDateValueChange?.(event, newDateValue);\n };\n\n const handleFocus: FocusEventHandler<HTMLInputElement> = (event) => {\n setFocused(true);\n inputPropsOnFocus?.(event);\n };\n const handleBlur: FocusEventHandler<HTMLInputElement> = (event) => {\n setFocused(false);\n apply(event);\n inputPropsOnBlur?.(event);\n };\n\n const handleKeyDown: KeyboardEventHandler<HTMLInputElement> = (event) => {\n if (event.key === \"Enter\") {\n apply(event);\n }\n inputPropsOnKeyDown?.(event);\n };\n\n const handleMouseDown: MouseEventHandler<HTMLDivElement> = (event) => {\n if (event.target === wrapperRef.current) {\n event.preventDefault();\n innerInputRef.current?.focus();\n }\n onMouseDown?.(event);\n };\n\n return (\n <div\n className={clsx(\n withBaseName(),\n withBaseName(variant),\n {\n [withBaseName(\"focused\")]: !isDisabled && focused,\n [withBaseName(\"disabled\")]: isDisabled,\n [withBaseName(\"readOnly\")]: isReadOnly,\n [withBaseName(validationStatus ?? \"\")]: validationStatus,\n [withBaseName(\"bordered\")]: bordered,\n },\n className,\n )}\n ref={handleWrapperRef}\n onMouseDown={handleMouseDown}\n {...rest}\n >\n {startAdornment && (\n <div className={withBaseName(\"startAdornmentContainer\")}>\n {startAdornment}\n </div>\n )}\n <input\n autoComplete=\"off\"\n aria-describedby={inputAriaDescribedBy}\n aria-labelledby={inputAriaLabelledBy}\n aria-invalid={\n (!isReadOnly && validationStatus === \"error\") || undefined\n }\n aria-label={inputAriaLabel}\n id={inputId}\n className={withBaseName(\"input\")}\n disabled={isDisabled}\n name={name}\n readOnly={isReadOnly}\n ref={handleInputRef}\n tabIndex={isDisabled ? -1 : 0}\n placeholder={placeholder}\n value={isReadOnly && !dateValue ? emptyReadOnlyMarker : dateValue}\n {...restDateInputProps}\n onBlur={handleBlur}\n onChange={handleChange}\n onKeyDown={handleKeyDown}\n onFocus={!isDisabled ? handleFocus : undefined}\n required={isRequired}\n />\n <div className={withBaseName(\"endAdornmentContainer\")}>\n {!isDisabled && validationStatus && (\n <StatusAdornment status={validationStatus} />\n )}\n {endAdornment}\n </div>\n <div className={withBaseName(\"activationIndicator\")} />\n </div>\n );\n },\n);\n"],"names":["makePrefixer","forwardRef","useLocalization","useRef","useForkRef","useId","useWindow","useComponentCssInjection","dateInputCss","useControlled","useMemo","useEffect","useState","useFormFieldProps","clsx","jsxs","jsx","StatusAdornment"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- var css_248z = ".saltCalendarWeekHeader {\n display: flex;\n text-align: center;\n align-items: center;\n height: var(--salt-size-base);\n gap: var(--calendar-gap);\n}\n\n.saltCalendarWeekHeader-dayOfWeek {\n width: var(--calendar-day-size);\n color: var(--salt-content-secondary-foreground);\n font-family: var(--salt-text-fontFamily);\n font-weight: var(--salt-text-fontWeight);\n font-size: var(--salt-text-fontSize);\n line-height: var(--salt-text-lineHeight);\n}\n";
1
+ var css_248z = ".saltCalendarWeekHeader {\n display: flex;\n text-align: center;\n align-items: center;\n height: var(--salt-size-base);\n gap: var(--calendar-gap);\n}\n\n.saltCalendarWeekHeader-dayOfWeek {\n width: var(--calendar-day-size);\n color: var(--salt-content-secondary-foreground);\n font-family: var(--salt-text-fontFamily);\n font-weight: var(--salt-text-fontWeight);\n font-size: var(--salt-text-fontSize);\n line-height: var(--salt-text-lineHeight);\n letter-spacing: var(--salt-text-letterSpacing);\n}\n";
2
2
 
3
3
  export { css_248z as default };
4
4
  //# sourceMappingURL=CalendarWeekHeader.css.js.map
@@ -1,4 +1,4 @@
1
- var css_248z = ".salt-density-touch {\n --calendar-day-highlight-size: 14px;\n}\n.salt-density-low {\n --calendar-day-highlight-size: 12px;\n}\n.salt-density-medium {\n --calendar-day-highlight-size: 10px;\n}\n.salt-density-high {\n --calendar-day-highlight-size: 8px;\n}\n\n.saltCalendarDay {\n --calendar-day-zIndex-content: calc(var(--salt-zIndex-default) + 1);\n --calendar-day-zIndex-highlight: calc(var(--calendar-day-zIndex-content) + 2);\n font-family: var(--salt-text-fontFamily);\n font-weight: var(--salt-text-fontWeight);\n line-height: var(--salt-text-lineHeight);\n font-size: var(--salt-text-fontSize);\n width: var(--salt-size-base);\n height: var(--salt-size-base);\n color: var(--salt-content-primary-foreground);\n background: var(--salt-selectable-background);\n cursor: var(--salt-cursor-hover);\n border: none;\n padding: 0;\n display: flex;\n justify-content: center;\n align-items: center;\n position: relative;\n}\n\n.saltCalendarDay-content {\n margin: 0 var(--salt-spacing-50);\n width: 100%;\n z-index: var(--calendar-day-zIndex-content);\n}\n\n.saltCalendarDay:hover {\n color: var(--salt-content-primary-foreground);\n background: var(--salt-selectable-background-hover);\n border-radius: var(--salt-palette-corner-weak, 0);\n}\n\n.saltCalendarDay-hoveredSpan:not(.saltCalendarDay-selectedStart):not(.saltCalendarDay-selectedEnd),\n.saltCalendarDay-hoveredSpan:not(.saltCalendarDay-selectedStart):not(.saltCalendarDay-selectedEnd)::before,\n.saltCalendarDay-selectedSpan:not(.saltCalendarDay-selectedStart):not(.saltCalendarDay-selectedEnd),\n.saltCalendarDay-selectedSpan:not(.saltCalendarDay-selectedStart):not(.saltCalendarDay-selectedEnd)::before {\n border-radius: 0;\n}\n\n.saltCalendarDay-focused,\n.saltCalendarDay:focus,\n.saltCalendarDay:focus-visible {\n outline: none;\n z-index: var(--calendar-day-zIndex-content);\n}\n\n.saltCalendarDay-focused:focus-visible::before {\n content: \"\";\n position: absolute;\n box-sizing: border-box;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n outline: var(--salt-focused-outline);\n outline-offset: calc(var(--salt-focused-outlineWidth) * -1);\n border-radius: var(--salt-palette-corner-weak, 0);\n}\n\n.saltCalendarDay-selected .saltCalendarDay-content,\n.saltCalendarDay-selected:hover .saltCalendarDay-content,\n.saltCalendarDay-selectedStart .saltCalendarDay-content,\n.saltCalendarDay-hoveredStart .saltCalendarDay-content,\n.saltCalendarDay-selectedSpan .saltCalendarDay-content,\n.saltCalendarDay-hoveredSpan .saltCalendarDay-content,\n.saltCalendarDay-selectedEnd .saltCalendarDay-content,\n.saltCalendarDay-hoveredEnd .saltCalendarDay-content {\n color: var(--salt-content-primary-foreground);\n}\n\n.saltCalendarDay-selectedSpan:not(.saltCalendarDay-selectedStart):not(.saltCalendarDay-selectedEnd)::before,\n.saltCalendarDay-hoveredSpan:not(.saltCalendarDay-selectedSpan):not(.saltCalendarDay-selectedStart):not(.saltCalendarDay-selectedEnd)::before {\n content: \"\";\n position: absolute;\n box-sizing: border-box;\n top: 0;\n left: calc(var(--calendar-gap) * -1);\n right: calc(var(--calendar-gap) * -1);\n bottom: 0;\n background: var(--salt-selectable-background-hover);\n border-top: var(--salt-size-fixed-100) var(--salt-borderStyle-solid) var(--salt-selectable-borderColor-selected);\n border-bottom: var(--salt-size-fixed-100) var(--salt-borderStyle-solid) var(--salt-selectable-borderColor-selected);\n}\n\n.saltCalendarDay-selectedStart::before,\n.saltCalendarDay-selectedEnd::before {\n content: \"\";\n position: absolute;\n box-sizing: border-box;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: var(--salt-selectable-background-selected);\n border: var(--salt-size-fixed-100) var(--salt-borderStyle-solid) var(--salt-selectable-borderColor-selected);\n}\n\n.saltCalendarDay-selectedStart,\n.saltCalendarDay-selectedStart::before,\n.saltCalendarDay-focused.saltCalendarDay-selectedStart,\n.saltCalendarDay-focused.saltCalendarDay-selectedStart::before {\n border-radius: var(--salt-palette-corner-weak, 0) 0 0 var(--salt-palette-corner-weak, 0);\n}\n\n.saltCalendarDay-focused.saltCalendarDay-selectedEnd:not(.saltCalendarDay-selectedStart),\n.saltCalendarDay-focused.saltCalendarDay-selectedEnd:not(.saltCalendarDay-selectedStart)::before,\n.saltCalendarDay-selectedEnd:not(.saltCalendarDay-selectedStart),\n.saltCalendarDay-selectedEnd:not(.saltCalendarDay-selectedStart)::before {\n border-radius: 0 var(--salt-palette-corner-weak, 0) var(--salt-palette-corner-weak, 0) 0;\n}\n\n.saltCalendarDay-focused.saltCalendarDay-selectedSameDay,\n.saltCalendarDay-focused.saltCalendarDay-selectedSameDay::before,\n.saltCalendarDay-selectedSameDay,\n.saltCalendarDay-selectedSameDay::before {\n border-radius: var(--salt-palette-corner-weak, 0);\n}\n\n/** Single selection styles */\n\n.saltCalendarMonth-single .saltCalendarDay:hover:not(.saltCalendarDay-selected) {\n color: var(--salt-content-primary-foreground);\n background: var(--salt-selectable-background-hover);\n border-radius: var(--salt-palette-corner-weak, 0);\n}\n\n.saltCalendarMonth-single .saltCalendarDay-selected::before {\n content: \"\";\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n color: var(--salt-content-primary-foreground);\n background: var(--salt-selectable-background-selected);\n border: var(--salt-size-fixed-100) var(--salt-borderStyle-solid) var(--salt-selectable-borderColor-selected);\n border-radius: var(--salt-palette-corner-weak, 0);\n}\n\n/** Range selection styles */\n.saltCalendarMonth-range .saltCalendarDay-focused.saltCalendarDay-selectedSpan,\n.saltCalendarMonth-range .saltCalendarDay-focused.saltCalendarDay-hoveredSpan {\n outline-offset: calc(calc(var(--salt-focused-outlineWidth) * -1));\n}\n\n.saltCalendarMonth-range .saltCalendarDay:hover:not(.saltCalendarDay-selectedStart):not(.saltCalendarDay-selectedSpan):not(.saltCalendarDay-selectedEnd) {\n color: var(--salt-content-primary-foreground);\n background: var(--salt-selectable-background-hover);\n border-radius: var(--salt-palette-corner-weak, 0);\n}\n\n.saltCalendarMonth-range .saltCalendarDay:hover.saltCalendarDay-selectedSpan::before,\n.saltCalendarMonth-range .saltCalendarDay:hover.saltCalendarDay-hoveredSpan::before,\n.saltCalendarMonth-range .saltCalendarDay-focused.saltCalendarDay-hoveredEnd:not(.saltCalendarDay-selectedEnd):not(.saltCalendarDay-selectedStart)::before,\n.saltCalendarMonth-range .saltCalendarDay-focused.saltCalendarDay-hoveredEnd:not(.saltCalendarDay-selectedEnd):not(.saltCalendarDay-selectedStart)::before {\n border-radius: 0;\n}\n\n.saltCalendarMonth-range .saltCalendarDay-hoveredEnd:not(.saltCalendarDay-selectedStart):not(.saltCalendarDay-selectedEnd) {\n border-radius: 0;\n}\n\n.saltCalendarMonth-range .saltCalendarDay-hoveredEnd:not(.saltCalendarDay-selectedStart):not(.saltCalendarDay-selectedEnd):not(.saltCalendarDay-unselectable)::before {\n content: \"\";\n position: absolute;\n top: 0;\n left: calc(var(--calendar-gap) * -1);\n right: 0;\n bottom: 0;\n background: var(--salt-selectable-background-hover);\n border-radius: 0;\n border-top: var(--salt-size-fixed-100) var(--salt-borderStyle-solid) var(--salt-selectable-borderColor-selected);\n border-bottom: var(--salt-size-fixed-100) var(--salt-borderStyle-solid) var(--salt-selectable-borderColor-selected);\n}\n\n/** Offset range styles */\n\n.saltCalendarMonth-offset .saltCalendarDay-hoveredSpan,\n.saltCalendarMonth-offset .saltCalendarDay-hoveredSpan::before {\n border-radius: 0;\n}\n\n.saltCalendarMonth-offset .saltCalendarDay-focused.saltCalendarDay-hoveredStart:not(.saltCalendarDay-selectedStart),\n.saltCalendarMonth-offset .saltCalendarDay-focused.saltCalendarDay-hoveredStart:not(.saltCalendarDay-selectedStart)::before {\n border-radius: var(--salt-palette-corner-weak, 0) 0 0 var(--salt-palette-corner-weak, 0);\n}\n\n.saltCalendarMonth-offset .saltCalendarDay:hover:not(.saltCalendarDay-selectedStart):not(.saltCalendarDay-selectedSpan):not(.saltCalendarDay-selectedEnd),\n.saltCalendarMonth-offset .saltCalendarDay-hoveredStart:not(.saltCalendarDay-selectedStart):not(.saltCalendarDay-selectedSpan):not(.saltCalendarDay-selectedEnd),\n.saltCalendarMonth-offset .saltCalendarDay-hoveredSpan:not(.saltCalendarDay-selectedStart):not(.saltCalendarDay-selectedSpan):not(.saltCalendarDay-selectedEnd),\n.saltCalendarMonth-offset .saltCalendarDay-hoveredEnd:not(.saltCalendarDay-selectedStart):not(.saltCalendarDay-selectedSpan):not(.saltCalendarDay-selectedEnd) {\n color: var(--salt-content-primary-foreground);\n background: var(--salt-selectable-background-hover);\n}\n\n.saltCalendarMonth-offset .saltCalendarDay-hoveredSpan:not(.saltCalendarDay-selectedStart):not(.saltCalendarDay-selectedSpan):not(.saltCalendarDay-selectedEnd)::before {\n border-top: var(--salt-size-fixed-100) var(--salt-borderStyle-solid) var(--salt-selectable-background-hover);\n border-bottom: var(--salt-size-fixed-100) var(--salt-borderStyle-solid) var(--salt-selectable-background-hover);\n}\n\n.saltCalendarMonth-offset .saltCalendarDay-hoveredStart,\n.saltCalendarMonth-offset .saltCalendarDay-selectedStart {\n border-radius: var(--salt-palette-corner-weak, 0) 0 0 var(--salt-palette-corner-weak, 0);\n}\n\n.saltCalendarMonth-offset .saltCalendarDay.saltCalendarDay-hoveredEnd,\n.saltCalendarMonth-offset .saltCalendarDay-selectedEnd {\n border-radius: 0 var(--salt-palette-corner-weak, 0) var(--salt-palette-corner-weak, 0) 0;\n}\n\n.saltCalendarMonth-offset .saltCalendarDay-hoveredSpan,\n.saltCalendarMonth-offset .saltCalendarDay-selectedSpan {\n border-radius: 0;\n}\n\n.saltCalendarMonth-offset .saltCalendarDay-selectedStart.saltCalendarDay-selectedEnd {\n border-radius: var(--salt-palette-corner-weak, 0);\n}\n\n.saltCalendarDay-outOfRange {\n color: var(--salt-content-secondary-foreground);\n}\n.saltCalendarDay-outOfRange:hover {\n color: var(--salt-content-primary-foreground);\n}\n\n.saltCalendarDay-outOfRange .saltCalendarDay-today > span:last-of-type {\n border-bottom: var(--salt-size-indicator) var(--salt-borderStyle-solid) var(--salt-content-secondary-foreground);\n}\n\n.saltCalendarDay-outOfRange .saltCalendarDay-highlighted::after {\n background: var(--salt-content-secondary-foreground);\n}\n\n.saltCalendarDay-unselectable,\n.saltCalendarDay-unselectable:hover {\n background: var(--salt-selectable-background-disabled);\n cursor: var(--salt-cursor-disabled);\n}\n\n.saltCalendarDay-highlighted {\n position: absolute;\n left: 0;\n right: -1px;\n height: 100%;\n overflow: hidden;\n border-radius: var(--salt-palette-corner-weak, 0);\n}\n.saltCalendarDay-selectedStart .saltCalendarDay-highlighted {\n right: 0;\n}\n\n.saltCalendarDay-selectedEnd .saltCalendarDay-highlighted {\n right: 1px;\n}\n\n.saltCalendarDay-selectedStart .saltCalendarDay-highlighted,\n.saltCalendarDay-hoveredEnd:not(.saltCalendarDay-selectedEnd) .saltCalendarDay-highlighted,\n.saltCalendarDay-hoveredSpan .saltCalendarDay-highlighted,\n.saltCalendarDay-selectedSpan .saltCalendarDay-highlighted {\n border-radius: 0;\n}\n\n.saltCalendarDay-selectedSameDay .saltCalendarDay-highlighted {\n border-radius: var(--salt-palette-corner-weak, 0);\n}\n\n.saltCalendarDay-highlighted::after {\n content: \"\";\n top: 0;\n right: 0;\n box-sizing: border-box;\n height: var(--calendar-day-highlight-size); /* TODO: change for size-modifier when available */\n width: var(--calendar-day-highlight-size);\n background: var(--salt-sentiment-accent-background);\n position: absolute;\n clip-path: polygon(100% 0, 100% 100%, 0 0);\n z-index: var(--calendar-day-zIndex-highlight);\n}\n.saltCalendarDay-focused:focus-visible .saltCalendarDay-highlighted::after {\n border: var(--salt-focused-outline);\n}\n\n.saltCalendarDay-unselectable::after {\n content: \"\";\n height: var(--salt-size-fixed-100);\n width: calc(100% - var(--salt-spacing-100));\n background: var(--salt-content-secondary-foreground);\n position: absolute;\n}\n\n.saltCalendarDay-today > span:last-of-type::after {\n content: \"\";\n display: block;\n width: calc(100% - calc(var(--salt-spacing-50) * 2));\n height: var(--salt-size-indicator);\n background: var(--salt-sentiment-accent-borderColor);\n border-radius: var(--salt-palette-corner-weak);\n position: absolute;\n bottom: var(--salt-spacing-50);\n left: var(--salt-spacing-50);\n right: var(--salt-spacing-50);\n}\n\n.saltCalendarDay-hidden {\n visibility: hidden;\n}\n";
1
+ var css_248z = ".salt-density-touch {\n --calendar-day-highlight-size: 14px;\n}\n.salt-density-low {\n --calendar-day-highlight-size: 12px;\n}\n.salt-density-medium {\n --calendar-day-highlight-size: 10px;\n}\n.salt-density-high {\n --calendar-day-highlight-size: 8px;\n}\n\n.saltCalendarDay {\n --calendar-day-zIndex-content: calc(var(--salt-zIndex-default) + 1);\n --calendar-day-zIndex-highlight: calc(var(--calendar-day-zIndex-content) + 2);\n font-family: var(--salt-text-fontFamily);\n font-weight: var(--salt-text-fontWeight);\n line-height: var(--salt-text-lineHeight);\n font-size: var(--salt-text-fontSize);\n letter-spacing: var(--salt-text-letterSpacing);\n width: var(--salt-size-base);\n height: var(--salt-size-base);\n color: var(--salt-content-primary-foreground);\n background: var(--salt-selectable-background);\n cursor: var(--salt-cursor-hover);\n border: none;\n padding: 0;\n display: flex;\n justify-content: center;\n align-items: center;\n position: relative;\n}\n\n.saltCalendarDay-content {\n margin: 0 var(--salt-spacing-50);\n width: 100%;\n z-index: var(--calendar-day-zIndex-content);\n}\n\n.saltCalendarDay:hover {\n color: var(--salt-content-primary-foreground);\n background: var(--salt-selectable-background-hover);\n border-radius: var(--salt-palette-corner-weak, 0);\n}\n\n.saltCalendarDay-hoveredSpan:not(.saltCalendarDay-selectedStart):not(.saltCalendarDay-selectedEnd),\n.saltCalendarDay-hoveredSpan:not(.saltCalendarDay-selectedStart):not(.saltCalendarDay-selectedEnd)::before,\n.saltCalendarDay-selectedSpan:not(.saltCalendarDay-selectedStart):not(.saltCalendarDay-selectedEnd),\n.saltCalendarDay-selectedSpan:not(.saltCalendarDay-selectedStart):not(.saltCalendarDay-selectedEnd)::before {\n border-radius: 0;\n}\n\n.saltCalendarDay-focused,\n.saltCalendarDay:focus,\n.saltCalendarDay:focus-visible {\n outline: none;\n z-index: var(--calendar-day-zIndex-content);\n}\n\n.saltCalendarDay-focused:focus-visible::before {\n content: \"\";\n position: absolute;\n box-sizing: border-box;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n outline: var(--salt-focused-outline);\n outline-offset: calc(var(--salt-focused-outlineWidth) * -1);\n border-radius: var(--salt-palette-corner-weak, 0);\n}\n\n.saltCalendarDay-selected .saltCalendarDay-content,\n.saltCalendarDay-selected:hover .saltCalendarDay-content,\n.saltCalendarDay-selectedStart .saltCalendarDay-content,\n.saltCalendarDay-hoveredStart .saltCalendarDay-content,\n.saltCalendarDay-selectedSpan .saltCalendarDay-content,\n.saltCalendarDay-hoveredSpan .saltCalendarDay-content,\n.saltCalendarDay-selectedEnd .saltCalendarDay-content,\n.saltCalendarDay-hoveredEnd .saltCalendarDay-content {\n color: var(--salt-content-primary-foreground);\n}\n\n.saltCalendarDay-selectedSpan:not(.saltCalendarDay-selectedStart):not(.saltCalendarDay-selectedEnd)::before,\n.saltCalendarDay-hoveredSpan:not(.saltCalendarDay-selectedSpan):not(.saltCalendarDay-selectedStart):not(.saltCalendarDay-selectedEnd)::before {\n content: \"\";\n position: absolute;\n box-sizing: border-box;\n top: 0;\n left: calc(var(--calendar-gap) * -1);\n right: calc(var(--calendar-gap) * -1);\n bottom: 0;\n background: var(--salt-selectable-background-hover);\n border-top: var(--salt-size-fixed-100) var(--salt-borderStyle-solid) var(--salt-selectable-borderColor-selected);\n border-bottom: var(--salt-size-fixed-100) var(--salt-borderStyle-solid) var(--salt-selectable-borderColor-selected);\n}\n\n.saltCalendarDay-selectedStart::before,\n.saltCalendarDay-selectedEnd::before {\n content: \"\";\n position: absolute;\n box-sizing: border-box;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: var(--salt-selectable-background-selected);\n border: var(--salt-size-fixed-100) var(--salt-borderStyle-solid) var(--salt-selectable-borderColor-selected);\n}\n\n.saltCalendarDay-selectedStart,\n.saltCalendarDay-selectedStart::before,\n.saltCalendarDay-focused.saltCalendarDay-selectedStart,\n.saltCalendarDay-focused.saltCalendarDay-selectedStart::before {\n border-radius: var(--salt-palette-corner-weak, 0) 0 0 var(--salt-palette-corner-weak, 0);\n}\n\n.saltCalendarDay-focused.saltCalendarDay-selectedEnd:not(.saltCalendarDay-selectedStart),\n.saltCalendarDay-focused.saltCalendarDay-selectedEnd:not(.saltCalendarDay-selectedStart)::before,\n.saltCalendarDay-selectedEnd:not(.saltCalendarDay-selectedStart),\n.saltCalendarDay-selectedEnd:not(.saltCalendarDay-selectedStart)::before {\n border-radius: 0 var(--salt-palette-corner-weak, 0) var(--salt-palette-corner-weak, 0) 0;\n}\n\n.saltCalendarDay-focused.saltCalendarDay-selectedSameDay,\n.saltCalendarDay-focused.saltCalendarDay-selectedSameDay::before,\n.saltCalendarDay-selectedSameDay,\n.saltCalendarDay-selectedSameDay::before {\n border-radius: var(--salt-palette-corner-weak, 0);\n}\n\n/** Single selection styles */\n\n.saltCalendarMonth-single .saltCalendarDay:hover:not(.saltCalendarDay-selected) {\n color: var(--salt-content-primary-foreground);\n background: var(--salt-selectable-background-hover);\n border-radius: var(--salt-palette-corner-weak, 0);\n}\n\n.saltCalendarMonth-single .saltCalendarDay-selected::before {\n content: \"\";\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n color: var(--salt-content-primary-foreground);\n background: var(--salt-selectable-background-selected);\n border: var(--salt-size-fixed-100) var(--salt-borderStyle-solid) var(--salt-selectable-borderColor-selected);\n border-radius: var(--salt-palette-corner-weak, 0);\n}\n\n/** Range selection styles */\n.saltCalendarMonth-range .saltCalendarDay-focused.saltCalendarDay-selectedSpan,\n.saltCalendarMonth-range .saltCalendarDay-focused.saltCalendarDay-hoveredSpan {\n outline-offset: calc(calc(var(--salt-focused-outlineWidth) * -1));\n}\n\n.saltCalendarMonth-range .saltCalendarDay:hover:not(.saltCalendarDay-selectedStart):not(.saltCalendarDay-selectedSpan):not(.saltCalendarDay-selectedEnd) {\n color: var(--salt-content-primary-foreground);\n background: var(--salt-selectable-background-hover);\n border-radius: var(--salt-palette-corner-weak, 0);\n}\n\n.saltCalendarMonth-range .saltCalendarDay:hover.saltCalendarDay-selectedSpan::before,\n.saltCalendarMonth-range .saltCalendarDay:hover.saltCalendarDay-hoveredSpan::before,\n.saltCalendarMonth-range .saltCalendarDay-focused.saltCalendarDay-hoveredEnd:not(.saltCalendarDay-selectedEnd):not(.saltCalendarDay-selectedStart)::before,\n.saltCalendarMonth-range .saltCalendarDay-focused.saltCalendarDay-hoveredEnd:not(.saltCalendarDay-selectedEnd):not(.saltCalendarDay-selectedStart)::before {\n border-radius: 0;\n}\n\n.saltCalendarMonth-range .saltCalendarDay-hoveredEnd:not(.saltCalendarDay-selectedStart):not(.saltCalendarDay-selectedEnd) {\n border-radius: 0;\n}\n\n.saltCalendarMonth-range .saltCalendarDay-hoveredEnd:not(.saltCalendarDay-selectedStart):not(.saltCalendarDay-selectedEnd):not(.saltCalendarDay-unselectable)::before {\n content: \"\";\n position: absolute;\n top: 0;\n left: calc(var(--calendar-gap) * -1);\n right: 0;\n bottom: 0;\n background: var(--salt-selectable-background-hover);\n border-radius: 0;\n border-top: var(--salt-size-fixed-100) var(--salt-borderStyle-solid) var(--salt-selectable-borderColor-selected);\n border-bottom: var(--salt-size-fixed-100) var(--salt-borderStyle-solid) var(--salt-selectable-borderColor-selected);\n}\n\n/** Offset range styles */\n\n.saltCalendarMonth-offset .saltCalendarDay-hoveredSpan,\n.saltCalendarMonth-offset .saltCalendarDay-hoveredSpan::before {\n border-radius: 0;\n}\n\n.saltCalendarMonth-offset .saltCalendarDay-focused.saltCalendarDay-hoveredStart:not(.saltCalendarDay-selectedStart),\n.saltCalendarMonth-offset .saltCalendarDay-focused.saltCalendarDay-hoveredStart:not(.saltCalendarDay-selectedStart)::before {\n border-radius: var(--salt-palette-corner-weak, 0) 0 0 var(--salt-palette-corner-weak, 0);\n}\n\n.saltCalendarMonth-offset .saltCalendarDay:hover:not(.saltCalendarDay-selectedStart):not(.saltCalendarDay-selectedSpan):not(.saltCalendarDay-selectedEnd),\n.saltCalendarMonth-offset .saltCalendarDay-hoveredStart:not(.saltCalendarDay-selectedStart):not(.saltCalendarDay-selectedSpan):not(.saltCalendarDay-selectedEnd),\n.saltCalendarMonth-offset .saltCalendarDay-hoveredSpan:not(.saltCalendarDay-selectedStart):not(.saltCalendarDay-selectedSpan):not(.saltCalendarDay-selectedEnd),\n.saltCalendarMonth-offset .saltCalendarDay-hoveredEnd:not(.saltCalendarDay-selectedStart):not(.saltCalendarDay-selectedSpan):not(.saltCalendarDay-selectedEnd) {\n color: var(--salt-content-primary-foreground);\n background: var(--salt-selectable-background-hover);\n}\n\n.saltCalendarMonth-offset .saltCalendarDay-hoveredSpan:not(.saltCalendarDay-selectedStart):not(.saltCalendarDay-selectedSpan):not(.saltCalendarDay-selectedEnd)::before {\n border-top: var(--salt-size-fixed-100) var(--salt-borderStyle-solid) var(--salt-selectable-background-hover);\n border-bottom: var(--salt-size-fixed-100) var(--salt-borderStyle-solid) var(--salt-selectable-background-hover);\n}\n\n.saltCalendarMonth-offset .saltCalendarDay-hoveredStart,\n.saltCalendarMonth-offset .saltCalendarDay-selectedStart {\n border-radius: var(--salt-palette-corner-weak, 0) 0 0 var(--salt-palette-corner-weak, 0);\n}\n\n.saltCalendarMonth-offset .saltCalendarDay.saltCalendarDay-hoveredEnd,\n.saltCalendarMonth-offset .saltCalendarDay-selectedEnd {\n border-radius: 0 var(--salt-palette-corner-weak, 0) var(--salt-palette-corner-weak, 0) 0;\n}\n\n.saltCalendarMonth-offset .saltCalendarDay-hoveredSpan,\n.saltCalendarMonth-offset .saltCalendarDay-selectedSpan {\n border-radius: 0;\n}\n\n.saltCalendarMonth-offset .saltCalendarDay-selectedStart.saltCalendarDay-selectedEnd {\n border-radius: var(--salt-palette-corner-weak, 0);\n}\n\n.saltCalendarDay-outOfRange {\n color: var(--salt-content-secondary-foreground);\n}\n.saltCalendarDay-outOfRange:hover {\n color: var(--salt-content-primary-foreground);\n}\n\n.saltCalendarDay-outOfRange .saltCalendarDay-today > span:last-of-type {\n border-bottom: var(--salt-size-indicator) var(--salt-borderStyle-solid) var(--salt-content-secondary-foreground);\n}\n\n.saltCalendarDay-outOfRange .saltCalendarDay-highlighted::after {\n background: var(--salt-content-secondary-foreground);\n}\n\n.saltCalendarDay-unselectable,\n.saltCalendarDay-unselectable:hover {\n background: var(--salt-selectable-background);\n cursor: var(--salt-cursor-disabled);\n}\n\n.saltCalendarDay-highlighted {\n position: absolute;\n left: 0;\n right: -1px;\n height: 100%;\n overflow: hidden;\n border-radius: var(--salt-palette-corner-weak, 0);\n}\n.saltCalendarDay-selectedStart .saltCalendarDay-highlighted {\n right: 0;\n}\n\n.saltCalendarDay-selectedEnd .saltCalendarDay-highlighted {\n right: 1px;\n}\n\n.saltCalendarDay-selectedStart .saltCalendarDay-highlighted,\n.saltCalendarDay-hoveredEnd:not(.saltCalendarDay-selectedEnd) .saltCalendarDay-highlighted,\n.saltCalendarDay-hoveredSpan .saltCalendarDay-highlighted,\n.saltCalendarDay-selectedSpan .saltCalendarDay-highlighted {\n border-radius: 0;\n}\n\n.saltCalendarDay-selectedSameDay .saltCalendarDay-highlighted {\n border-radius: var(--salt-palette-corner-weak, 0);\n}\n\n.saltCalendarDay-highlighted::after {\n content: \"\";\n top: 0;\n right: 0;\n box-sizing: border-box;\n height: var(--calendar-day-highlight-size); /* TODO: change for size-modifier when available */\n width: var(--calendar-day-highlight-size);\n background: var(--salt-sentiment-accent-background);\n position: absolute;\n clip-path: polygon(100% 0, 100% 100%, 0 0);\n z-index: var(--calendar-day-zIndex-highlight);\n}\n.saltCalendarDay-focused:focus-visible .saltCalendarDay-highlighted::after {\n border: var(--salt-focused-outline);\n}\n\n.saltCalendarDay-unselectable::after {\n content: \"\";\n height: var(--salt-size-fixed-100);\n width: calc(100% - var(--salt-spacing-100));\n background: var(--salt-content-secondary-foreground);\n position: absolute;\n}\n\n.saltCalendarDay-today > span:last-of-type::after {\n content: \"\";\n display: block;\n width: calc(100% - calc(var(--salt-spacing-50) * 2));\n height: var(--salt-size-indicator);\n background: var(--salt-sentiment-accent-borderColor);\n border-radius: var(--salt-palette-corner-weak);\n position: absolute;\n bottom: var(--salt-spacing-50);\n left: var(--salt-spacing-50);\n right: var(--salt-spacing-50);\n}\n\n.saltCalendarDay-hidden {\n visibility: hidden;\n}\n";
2
2
 
3
3
  export { css_248z as default };
4
4
  //# sourceMappingURL=CalendarDay.css.js.map
@@ -1,4 +1,4 @@
1
- var css_248z = "/* Style applied to the root element */\n.saltDateInput {\n align-items: center;\n background: var(--saltDateInput-background, var(--input-background));\n border-radius: var(--salt-palette-corner-weak, 0);\n color: var(--saltDateInput-color, var(--salt-content-primary-foreground));\n display: inline-flex;\n font-family: var(--salt-text-fontFamily);\n font-size: var(--saltDateInput-fontSize, var(--salt-text-fontSize));\n line-height: var(--saltDateInput-lineHeight, var(--salt-text-lineHeight));\n letter-spacing: var(--salt-text-letterSpacing);\n height: var(--saltDateInput-height, var(--salt-size-base));\n min-height: var(--saltDateInput-minHeight, var(--salt-size-base));\n min-width: var(--saltDateInput-minWidth, 4em);\n padding-left: var(--saltDateInput-paddingLeft, var(--salt-spacing-100));\n padding-right: var(--saltDateInput-paddingRight, var(--salt-spacing-100));\n position: relative;\n box-sizing: border-box;\n overflow: hidden;\n width: 100%;\n}\n\n.saltDateInput:hover {\n cursor: var(--salt-cursor-text);\n}\n\n/* Style applied if `bordered={true}` */\n.saltDateInput-bordered.saltDateInput {\n border: var(--salt-size-fixed-100) var(--salt-borderStyle-solid) var(--input-borderColor);\n}\n\n.saltDateInput-bordered.saltDateInput:hover {\n border-style: var(--salt-borderStyle-solid);\n border-color: var(--input-borderColor-hover);\n}\n\n.saltDateInput-bordered.saltDateInput-focused,\n.saltDateInput-bordered.saltDateInput-focused:hover {\n border-style: var(--salt-borderStyle-solid);\n border-color: var(--input-borderColor-active);\n}\n\n.saltDateInput-bordered.saltDateInput-readOnly,\n.saltDateInput-bordered.saltDateInput-readOnly:hover {\n border-style: var(--salt-borderStyle-solid);\n border-color: var(--salt-editable-borderColor-readonly);\n}\n\n.saltDateInput-bordered.saltDateInput-disabled,\n.saltDateInput-bordered.saltDateInput-disabled:hover {\n border-style: var(--salt-borderStyle-solid);\n border-color: var(--salt-editable-borderColor-disabled);\n}\n\n.saltDateInput-activationIndicator {\n left: 0;\n bottom: 0;\n width: 100%;\n position: absolute;\n border-bottom: var(--salt-size-fixed-100) var(--salt-borderStyle-solid) var(--input-borderColor);\n}\n\n.saltDateInput:hover .saltDateInput-activationIndicator {\n border-bottom-style: var(--salt-borderStyle-solid);\n border-bottom-color: var(--input-borderColor-hover);\n}\n\n.saltDateInput-focused .saltDateInput-activationIndicator,\n.saltDateInput-focused:hover .saltDateInput-activationIndicator {\n border-bottom: var(--salt-size-fixed-200) var(--salt-borderStyle-solid) var(--input-borderColor-active);\n}\n\n.saltDateInput-readOnly .saltDateInput-activationIndicator,\n.saltDateInput-readOnly:hover .saltDateInput-activationIndicator {\n border-bottom-style: var(--salt-borderStyle-solid);\n border-bottom-color: var(--salt-editable-borderColor-readonly);\n}\n\n.saltDateInput-disabled .saltDateInput-activationIndicator,\n.saltDateInput-disabled:hover .saltDateInput-activationIndicator {\n border-bottom-style: var(--salt-borderStyle-solid);\n border-bottom-color: var(--salt-editable-borderColor-disabled);\n}\n\n.saltDateInput-bordered .saltDateInput-activationIndicator,\n.saltDateInput-bordered.saltDateInput-readOnly .saltDateInput-activationIndicator,\n.saltDateInput-bordered.saltDateInput-disabled:hover .saltDateInput-activationIndicator {\n border-bottom-width: 0;\n}\n\n.saltDateInput-bordered.saltDateInput-focused .saltDateInput-activationIndicator {\n /* Activation indicator width minus the border from the input. */\n border-bottom-width: var(--salt-size-fixed-100);\n}\n\n/* Class applied if `variant=\"primary\"` */\n.saltDateInput-primary {\n --input-background: var(--salt-editable-primary-background);\n --input-background-disabled: var(--salt-editable-primary-background-disabled);\n --input-background-readonly: var(--salt-editable-background-readonly);\n --input-borderColor: var(--salt-editable-borderColor);\n --input-borderColor-active: var(--salt-editable-borderColor-active);\n --input-borderColor-hover: var(--salt-editable-borderColor-hover);\n --input-outlineColor: var(--salt-focused-outlineColor);\n}\n\n/* Class applied if `variant=\"secondary\"` */\n.saltDateInput-secondary {\n --input-background: var(--salt-editable-secondary-background);\n --input-background-disabled: var(--salt-editable-secondary-background-disabled);\n --input-background-readonly: var(--salt-editable-background-readonly);\n --input-borderColor: var(--salt-editable-borderColor);\n --input-borderColor-active: var(--salt-editable-borderColor-active);\n --input-borderColor-hover: var(--salt-editable-borderColor-hover);\n --input-outlineColor: var(--salt-focused-outlineColor);\n}\n\n/* Class applied if `variant=\"tertiary\"` */\n.saltDateInput-tertiary {\n --input-background: var(--salt-editable-tertiary-background);\n --input-background-readonly: var(--salt-editable-background-readonly);\n --input-borderColor: var(--salt-editable-borderColor);\n --input-borderColor-active: var(--salt-editable-borderColor-active);\n --input-borderColor-hover: var(--salt-editable-borderColor-hover);\n --input-outlineColor: var(--salt-focused-outlineColor);\n}\n\n/* Style applied to input if `validationState=\"error\"` */\n.saltDateInput-error {\n --input-background: var(--salt-status-error-background);\n --input-background-readonly: var(--salt-status-error-background);\n --input-borderColor: var(--salt-status-error-borderColor);\n --input-borderColor-active: var(--salt-status-error-borderColor);\n --input-borderColor-hover: var(--salt-status-error-borderColor);\n --input-outlineColor: var(--salt-status-error-borderColor);\n}\n\n/* Style applied to input if `validationState=\"warning\"` */\n.saltDateInput-warning {\n --input-background: var(--salt-status-warning-background);\n --input-background-readonly: var(--salt-status-warning-background);\n --input-borderColor: var(--salt-status-warning-borderColor);\n --input-borderColor-active: var(--salt-status-warning-borderColor);\n --input-borderColor-hover: var(--salt-status-warning-borderColor);\n --input-outlineColor: var(--salt-status-warning-borderColor);\n}\n\n/* Style applied to input if `validationState=\"success\"` */\n.saltDateInput-success {\n --input-background: var(--salt-status-success-background);\n --input-background-readonly: var(--salt-status-success-background);\n --input-borderColor: var(--salt-status-success-borderColor);\n --input-borderColor-active: var(--salt-status-success-borderColor);\n --input-borderColor-hover: var(--salt-status-success-borderColor);\n --input-outlineColor: var(--salt-status-success-borderColor);\n}\n\n/* Styling when focused */\n.saltDateInput-focused,\n.saltDateInput-focused:hover {\n cursor: var(--salt-cursor-text);\n outline: var(--saltDateInput-outline, var(--salt-focused-outlineWidth) var(--salt-focused-outlineStyle) var(--input-outlineColor));\n}\n\n/* Style applied if `readOnly={true}` */\n.saltDateInput.saltDateInput-readOnly {\n background: var(--input-background-readonly);\n cursor: var(--salt-cursor-readonly);\n}\n\n/* Styling when focused if `disabled={true}` */\n.saltDateInput-disabled,\n.saltDateInput-disabled:hover {\n background: var(--input-background-disabled);\n cursor: var(--salt-cursor-disabled);\n color: var(--saltDateInput-color-disabled, var(--salt-content-primary-foreground-disabled));\n}\n\n/* Style applied to start adornments */\n.saltDateInput-startAdornmentContainer {\n align-items: center;\n display: inline-flex;\n padding-right: var(--salt-spacing-100);\n column-gap: var(--salt-spacing-100);\n}\n\n/* Style applied to end adornments */\n.saltDateInput-endAdornmentContainer {\n display: inline-flex;\n column-gap: var(--salt-spacing-50);\n align-items: flex-end;\n}\n\n.saltDateInput-endAdornmentContainer .saltButton ~ .saltButton {\n margin-left: calc(-1 * var(--salt-spacing-50));\n}\n\n.saltDateInput-endAdornmentContainer .saltButton:last-child {\n margin-right: calc(var(--salt-spacing-50) * -1);\n}\n\n.saltDateInput-startAdornmentContainer > .saltButton,\n.saltDateInput-endAdornmentContainer > .saltButton {\n --saltButton-padding: calc(var(--salt-spacing-50) - var(--button-borderWidth));\n --saltButton-height: calc(var(--salt-size-base) - var(--salt-spacing-100));\n --saltButton-borderRadius: var(--salt-palette-corner-weaker);\n}\n\n/* Style applied to inner input component */\n.saltDateInput-input {\n background: none;\n border: none;\n box-sizing: content-box;\n color: inherit;\n cursor: inherit;\n display: block;\n font: inherit;\n height: 100%;\n letter-spacing: var(--saltDateInput-letterSpacing, 0);\n margin: 0;\n min-width: 0;\n overflow: hidden;\n padding: 0;\n text-align: left;\n width: 100%;\n}\n\n/* Reset in the class */\n.saltDateInput-input:focus {\n outline: none;\n}\n\n/* Style applied to selected input if `disabled={true}` */\n.saltDateInput-disabled .saltDateInput-input::selection {\n background: none;\n}\n\n/* Style applied to placeholder text */\n.saltDateInput-input::placeholder {\n color: var(--salt-content-secondary-foreground);\n font-weight: var(--salt-text-fontWeight-small);\n}\n\n/* Style applied to the dash between two inputs in range date input */\n.saltDateInput-dash {\n margin: 0 var(--salt-spacing-50);\n}\n\n/* Visually hidden but still announced by screen readers */\n.saltDateInput-visuallyHidden {\n position: absolute;\n width: 1px;\n height: 1px;\n overflow: hidden;\n clip: rect(0 0 0 0);\n white-space: nowrap;\n}\n";
1
+ var css_248z = "/* Style applied to the root element */\n.saltDateInput {\n align-items: center;\n background: var(--saltDateInput-background, var(--input-background));\n border-radius: var(--salt-palette-corner-weak, 0);\n color: var(--saltDateInput-color, var(--salt-content-primary-foreground));\n display: inline-flex;\n font-family: var(--salt-text-fontFamily);\n font-size: var(--saltDateInput-fontSize, var(--salt-text-fontSize));\n line-height: var(--saltDateInput-lineHeight, var(--salt-text-lineHeight));\n letter-spacing: var(--salt-text-letterSpacing);\n height: var(--saltDateInput-height, var(--salt-size-base));\n min-height: var(--saltDateInput-minHeight, var(--salt-size-base));\n min-width: var(--saltDateInput-minWidth, 4em);\n padding-left: var(--saltDateInput-paddingLeft, var(--salt-spacing-100));\n padding-right: var(--saltDateInput-paddingRight, var(--salt-spacing-100));\n position: relative;\n box-sizing: border-box;\n overflow: hidden;\n width: 100%;\n}\n\n.saltDateInput:hover {\n cursor: var(--salt-cursor-text);\n}\n\n/* Style applied if `bordered={true}` */\n.saltDateInput-bordered.saltDateInput {\n border: var(--salt-size-fixed-100) var(--salt-borderStyle-solid) var(--input-borderColor);\n}\n\n.saltDateInput-bordered.saltDateInput:hover {\n border-style: var(--salt-borderStyle-solid);\n border-color: var(--input-borderColor-hover);\n}\n\n.saltDateInput-bordered.saltDateInput-focused,\n.saltDateInput-bordered.saltDateInput-focused:hover {\n border-style: var(--salt-borderStyle-solid);\n border-color: var(--input-borderColor-active);\n}\n\n.saltDateInput-bordered.saltDateInput-readOnly,\n.saltDateInput-bordered.saltDateInput-readOnly:hover {\n border-style: var(--salt-borderStyle-solid);\n border-color: var(--salt-editable-borderColor-readonly);\n}\n\n.saltDateInput-bordered.saltDateInput-disabled,\n.saltDateInput-bordered.saltDateInput-disabled:hover {\n border-style: var(--salt-borderStyle-solid);\n border-color: var(--salt-editable-borderColor-disabled);\n}\n\n.saltDateInput-activationIndicator {\n left: 0;\n bottom: 0;\n width: 100%;\n position: absolute;\n border-bottom: var(--salt-size-fixed-100) var(--salt-borderStyle-solid) var(--input-borderColor);\n}\n\n.saltDateInput:hover .saltDateInput-activationIndicator {\n border-bottom-style: var(--salt-borderStyle-solid);\n border-bottom-color: var(--input-borderColor-hover);\n}\n\n.saltDateInput-focused .saltDateInput-activationIndicator,\n.saltDateInput-focused:hover .saltDateInput-activationIndicator {\n border-bottom: var(--salt-size-fixed-200) var(--salt-borderStyle-solid) var(--input-borderColor-active);\n}\n\n.saltDateInput-readOnly .saltDateInput-activationIndicator,\n.saltDateInput-readOnly:hover .saltDateInput-activationIndicator {\n border-bottom-style: var(--salt-borderStyle-solid);\n border-bottom-color: var(--salt-editable-borderColor-readonly);\n}\n\n.saltDateInput-disabled .saltDateInput-activationIndicator,\n.saltDateInput-disabled:hover .saltDateInput-activationIndicator {\n border-bottom-style: var(--salt-borderStyle-solid);\n border-bottom-color: var(--salt-editable-borderColor-disabled);\n}\n\n.saltDateInput-bordered .saltDateInput-activationIndicator,\n.saltDateInput-bordered.saltDateInput-readOnly .saltDateInput-activationIndicator,\n.saltDateInput-bordered.saltDateInput-disabled:hover .saltDateInput-activationIndicator {\n border-bottom-width: 0;\n}\n\n.saltDateInput-bordered.saltDateInput-focused .saltDateInput-activationIndicator {\n /* Activation indicator width minus the border from the input. */\n border-bottom-width: var(--salt-size-fixed-100);\n}\n\n/* Class applied if `variant=\"primary\"` */\n.saltDateInput-primary {\n --input-background: var(--salt-editable-primary-background);\n --input-background-disabled: var(--salt-editable-primary-background-disabled);\n --input-background-readonly: var(--salt-editable-background-readonly);\n --input-borderColor: var(--salt-editable-borderColor);\n --input-borderColor-active: var(--salt-editable-borderColor-active);\n --input-borderColor-hover: var(--salt-editable-borderColor-hover);\n --input-outlineColor: var(--salt-focused-outlineColor);\n}\n\n/* Class applied if `variant=\"secondary\"` */\n.saltDateInput-secondary {\n --input-background: var(--salt-editable-secondary-background);\n --input-background-disabled: var(--salt-editable-secondary-background-disabled);\n --input-background-readonly: var(--salt-editable-background-readonly);\n --input-borderColor: var(--salt-editable-borderColor);\n --input-borderColor-active: var(--salt-editable-borderColor-active);\n --input-borderColor-hover: var(--salt-editable-borderColor-hover);\n --input-outlineColor: var(--salt-focused-outlineColor);\n}\n\n/* Class applied if `variant=\"tertiary\"` */\n.saltDateInput-tertiary {\n --input-background: var(--salt-editable-tertiary-background);\n --input-background-readonly: var(--salt-editable-background-readonly);\n --input-borderColor: var(--salt-editable-borderColor);\n --input-borderColor-active: var(--salt-editable-borderColor-active);\n --input-borderColor-hover: var(--salt-editable-borderColor-hover);\n --input-outlineColor: var(--salt-focused-outlineColor);\n}\n\n/* Style applied to input if `validationState=\"error\"` */\n.saltDateInput-error {\n --input-background: var(--salt-status-error-background);\n --input-background-readonly: var(--salt-status-error-background);\n --input-borderColor: var(--salt-status-error-borderColor);\n --input-borderColor-active: var(--salt-status-error-borderColor);\n --input-borderColor-hover: var(--salt-status-error-borderColor);\n --input-outlineColor: var(--salt-status-error-borderColor);\n}\n\n/* Style applied to input if `validationState=\"warning\"` */\n.saltDateInput-warning {\n --input-background: var(--salt-status-warning-background);\n --input-background-readonly: var(--salt-status-warning-background);\n --input-borderColor: var(--salt-status-warning-borderColor);\n --input-borderColor-active: var(--salt-status-warning-borderColor);\n --input-borderColor-hover: var(--salt-status-warning-borderColor);\n --input-outlineColor: var(--salt-status-warning-borderColor);\n}\n\n/* Style applied to input if `validationState=\"success\"` */\n.saltDateInput-success {\n --input-background: var(--salt-status-success-background);\n --input-background-readonly: var(--salt-status-success-background);\n --input-borderColor: var(--salt-status-success-borderColor);\n --input-borderColor-active: var(--salt-status-success-borderColor);\n --input-borderColor-hover: var(--salt-status-success-borderColor);\n --input-outlineColor: var(--salt-status-success-borderColor);\n}\n\n/* Styling when focused */\n.saltDateInput-focused,\n.saltDateInput-focused:hover {\n cursor: var(--salt-cursor-text);\n outline: var(--saltDateInput-outline, var(--salt-focused-outlineWidth) var(--salt-focused-outlineStyle) var(--input-outlineColor));\n}\n\n/* Style applied if `readOnly={true}` */\n.saltDateInput.saltDateInput-readOnly {\n background: var(--input-background-readonly);\n cursor: var(--salt-cursor-readonly);\n}\n\n/* Styling when focused if `disabled={true}` */\n.saltDateInput-disabled,\n.saltDateInput-disabled:hover {\n background: var(--input-background-disabled);\n cursor: var(--salt-cursor-disabled);\n color: var(--saltDateInput-color-disabled, var(--salt-content-primary-foreground-disabled));\n}\n\n/* Style applied to start adornments */\n.saltDateInput-startAdornmentContainer {\n align-items: center;\n display: inline-flex;\n padding-right: var(--salt-spacing-100);\n column-gap: var(--salt-spacing-100);\n}\n\n/* Style applied to end adornments */\n.saltDateInput-endAdornmentContainer {\n display: inline-flex;\n column-gap: var(--salt-spacing-50);\n align-items: flex-end;\n}\n\n.saltDateInput-endAdornmentContainer .saltButton ~ .saltButton {\n margin-left: calc(-1 * var(--salt-spacing-50));\n}\n\n.saltDateInput-endAdornmentContainer .saltButton:last-child {\n margin-right: calc(var(--salt-spacing-50) * -1);\n}\n\n.saltDateInput-startAdornmentContainer > .saltButton,\n.saltDateInput-endAdornmentContainer > .saltButton {\n --saltButton-padding: calc(var(--salt-spacing-50) - var(--button-borderWidth));\n --saltButton-height: calc(var(--salt-size-base) - var(--salt-spacing-100));\n --saltButton-borderRadius: var(--salt-palette-corner-weaker);\n}\n\n/* Style applied to inner input component */\n.saltDateInput-input {\n background: none;\n border: none;\n box-sizing: content-box;\n color: inherit;\n cursor: inherit;\n display: block;\n font: inherit;\n height: 100%;\n letter-spacing: var(--saltDateInput-letterSpacing, var(--salt-text-letterSpacing));\n margin: 0;\n min-width: 0;\n overflow: hidden;\n padding: 0;\n text-align: left;\n width: 100%;\n}\n\n/* Reset in the class */\n.saltDateInput-input:focus {\n outline: none;\n}\n\n/* Style applied to selected input if `disabled={true}` */\n.saltDateInput-disabled .saltDateInput-input::selection {\n background: none;\n}\n\n/* Style applied to placeholder text */\n.saltDateInput-input::placeholder {\n color: var(--salt-content-secondary-foreground);\n font-weight: var(--salt-text-fontWeight-small);\n}\n\n/* Style applied to the dash between two inputs in range date input */\n.saltDateInput-dash {\n margin: 0 var(--salt-spacing-50);\n}\n\n/* Visually hidden but still announced by screen readers */\n.saltDateInput-visuallyHidden {\n position: absolute;\n width: 1px;\n height: 1px;\n overflow: hidden;\n clip: rect(0 0 0 0);\n white-space: nowrap;\n}\n";
2
2
 
3
3
  export { css_248z as default };
4
4
  //# sourceMappingURL=DateInput.css.js.map
@@ -38,7 +38,9 @@ const DateInputRange = forwardRef(
38
38
  emptyReadOnlyMarker = "\u2014",
39
39
  endAdornment,
40
40
  startInputProps = {},
41
+ startName,
41
42
  endInputProps = {},
43
+ endName,
42
44
  startInputRef: startInputRefProp,
43
45
  endInputRef: endInputRefProp,
44
46
  parse: parseProp,
@@ -323,6 +325,7 @@ const DateInputRange = forwardRef(
323
325
  id: startInputID,
324
326
  className: withBaseName("input"),
325
327
  disabled: isDisabled,
328
+ name: startName,
326
329
  readOnly: isReadOnly,
327
330
  ref: handleStartInputRef,
328
331
  tabIndex: isDisabled ? -1 : 0,
@@ -348,6 +351,7 @@ const DateInputRange = forwardRef(
348
351
  id: endInputID,
349
352
  className: withBaseName("input"),
350
353
  disabled: isDisabled,
354
+ name: endName,
351
355
  readOnly: isReadOnly,
352
356
  ref: handleEndInputRef,
353
357
  tabIndex: isDisabled ? -1 : 0,
@@ -1 +1 @@
1
- {"version":3,"file":"DateInputRange.js","sources":["../src/date-input/DateInputRange.tsx"],"sourcesContent":["import {\n type InputProps,\n makePrefixer,\n StatusAdornment,\n useControlled,\n useForkRef,\n useFormFieldProps,\n useId,\n} from \"@salt-ds/core\";\nimport type {\n DateDetail,\n DateFrameworkType,\n ParserResult,\n TimeFields,\n Timezone,\n} from \"@salt-ds/date-adapters\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n type ChangeEvent,\n type ChangeEventHandler,\n type ComponentPropsWithoutRef,\n type FocusEventHandler,\n forwardRef,\n type InputHTMLAttributes,\n type KeyboardEventHandler,\n type MouseEventHandler,\n type ReactNode,\n type Ref,\n type SyntheticEvent,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport type { DateRangeSelection } from \"../calendar\";\nimport { useLocalization } from \"../localization-provider\";\nimport dateInputCss from \"./DateInput.css\";\n\nconst withBaseName = makePrefixer(\"saltDateInput\");\n\n/**\n * DateInputRange raw value or null if no date is defined.\n */\nexport type DateInputRangeValue = {\n startDate?: string | null;\n endDate?: string | null;\n};\n\n/**\n * Details of parsing the date range\n */\nexport type DateInputRangeDetails = {\n /** Details of parsing the start date and applying any validation */\n startDate?: DateDetail;\n /** Details of parsing the end date and applying any validation */\n endDate?: DateDetail;\n};\n\n/**\n * Enum to identify the field being parsed\n */\nexport enum DateParserField {\n START = \"start\",\n END = \"end\",\n}\n\n/**\n * Props for the DateInputRange component.\n */\nexport interface DateInputRangeProps\n extends Omit<ComponentPropsWithoutRef<\"div\">, \"defaultValue\" | \"onChange\">,\n Omit<InputProps, \"defaultValue\" | \"inputRef\" | \"value\" | \"onChange\"> {\n /**\n * Styling variant with full border. Defaults to false.\n */\n bordered?: boolean;\n /**\n * The marker to use in an empty read-only DateInput.\n * Use `''` to disable this feature. Defaults to '—'.\n */\n emptyReadOnlyMarker?: string;\n /**\n * End adornment component.\n */\n endAdornment?: ReactNode;\n /**\n * Attributes applied to the start `input` element.\n * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dateInput#Attributes\n */\n startInputProps?: InputHTMLAttributes<HTMLInputElement>;\n /**\n * Attributes applied to the end `input` element.\n * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dateInput#Attributes\n */\n endInputProps?: InputHTMLAttributes<HTMLInputElement>;\n /**\n * If `true`, the component is read-only.\n */\n readOnly?: boolean;\n /**\n * Validation status.\n */\n validationStatus?: \"error\" | \"warning\" | \"success\";\n /**\n * Styling variant. Defaults to \"primary\".\n */\n variant?: \"primary\" | \"secondary\" | \"tertiary\";\n /**\n * Format string for date.\n */\n format?: string;\n /**\n * Optional ref for the start input component.\n */\n startInputRef?: Ref<HTMLInputElement>;\n /**\n * Optional ref for the end input component.\n */\n endInputRef?: Ref<HTMLInputElement>;\n /**\n * Parser callback, if not using the adapter's parser\n * @param value - date string to parse\n * @param field: DateParserField to identify value,\n * @param format - format required\n */\n parse?: (\n value: string,\n field: DateParserField,\n format: string,\n ) => ParserResult;\n /**\n * Input value. Use when the input value is controlled.\n */\n value?: DateInputRangeValue;\n /**\n * The initial input value. Use when the component is uncontrolled.\n */\n defaultValue?: DateInputRangeValue;\n /**\n * The date value. Use when the component is controlled.\n */\n date?: DateRangeSelection | null;\n /**\n * The initial selected date value. Use when the component is uncontrolled.\n */\n defaultDate?: DateRangeSelection | null;\n /**\n * Callback fired when the input value changes.\n * @param event - The change event.\n * @param date - The new date input range value.\n */\n onChange?: (event: ChangeEvent<HTMLInputElement>) => void;\n /**\n * Callback fired when the selected date changes.\n * @param event - The synthetic event.\n * @param date - the selected date, invalid date if not a valid date or undefined (uncontrolled) or null (controlled) if not defined\n * @param details - The details of date selection, either a valid date or error\n */\n onDateChange?: (\n event: SyntheticEvent,\n date: DateRangeSelection | null,\n details: DateInputRangeDetails,\n ) => void;\n /**\n * Called when input values change, either due to user interaction or programmatic formatting of valid dates.\n * @param event - The synthetic event or null if a programmatic change.\n * @param newValue - The new date input range value.\n */\n onDateValueChange?: (\n event: SyntheticEvent | null,\n newValue: DateInputRangeValue,\n ) => void;\n /**\n * Specifies the timezone behavior:\n * - If undefined, the timezone will be derived from the passed date, or from `defaultSelectedDate`/`selectedDate`.\n * - If set to \"default\", the default timezone of the date library will be used.\n * - If set to \"system\", the local system's timezone will be applied.\n * - If set to \"UTC\", the time will be returned in UTC.\n * - If set to a valid IANA timezone identifier, the time will be returned for that specific timezone.\n */\n timezone?: Timezone;\n}\n\nexport const DateInputRange = forwardRef<HTMLDivElement, DateInputRangeProps>(\n (props: DateInputRangeProps, ref: React.Ref<HTMLDivElement>) => {\n const { dateAdapter } = useLocalization();\n const {\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": restAriaLabelledBy,\n \"aria-describedby\": restAriaDescribedBy,\n bordered = false,\n className,\n disabled,\n date: dateProp,\n defaultDate,\n onDateChange,\n value: valueProp,\n format = \"DD MMM YYYY\",\n defaultValue = {\n startDate: \"\",\n endDate: \"\",\n },\n onChange,\n onDateValueChange,\n onMouseDown,\n emptyReadOnlyMarker = \"—\",\n endAdornment,\n startInputProps = {},\n endInputProps = {},\n startInputRef: startInputRefProp,\n endInputRef: endInputRefProp,\n parse: parseProp,\n placeholder = format.toLowerCase(),\n readOnly: readOnlyProp,\n validationStatus: validationStatusProp,\n variant = \"primary\",\n timezone = dateProp?.startDate ||\n dateProp?.endDate ||\n defaultDate?.startDate ||\n defaultDate?.endDate\n ? dateAdapter.getTimezone(\n (dateProp?.startDate ??\n dateProp?.endDate ??\n defaultDate?.startDate ??\n defaultDate?.endDate) as DateFrameworkType,\n )\n : \"default\",\n ...rest\n } = props;\n const wrapperRef = useRef(null);\n const handleWrapperRef = useForkRef<HTMLDivElement>(ref, wrapperRef);\n\n const startInputRef = useRef<HTMLInputElement>(null);\n const handleStartInputRef = useForkRef(startInputRef, startInputRefProp);\n const endInputRef = useRef<HTMLInputElement>(null);\n const handleEndInputRef = useForkRef(endInputRef, endInputRefProp);\n\n const startInputID = useId(startInputProps.id);\n const endInputID = useId(endInputProps.id);\n const startDateLabelId = useId();\n const endDateLabelId = useId();\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-date-input-range\",\n css: dateInputCss,\n window: targetWindow,\n });\n\n const parseDateValue = (\n dateValue: string | null | undefined,\n field: DateParserField,\n ): ParserResult | undefined =>\n parseProp\n ? parseProp(dateValue ?? \"\", field, format)\n : dateAdapter.parse.bind(dateAdapter)(dateValue ?? \"\", format);\n\n const [dateValue, setDateValue] = useControlled({\n controlled: valueProp,\n default: defaultValue,\n name: \"DateInputRange\",\n state: \"dateValue\",\n });\n\n const [date, setDate] = useControlled({\n controlled: dateProp,\n // biome-ignore lint/correctness/useExhaustiveDependencies: just on mount\n default: useMemo(() => {\n if (defaultDate) {\n return defaultDate;\n }\n if (!defaultValue) {\n return undefined;\n }\n const { date: startDate = undefined } =\n parseDateValue(defaultValue?.startDate, DateParserField.START) ?? {};\n const { date: endDate = undefined } =\n parseDateValue(defaultValue?.endDate, DateParserField.END) ?? {};\n return {\n startDate,\n endDate,\n };\n }, []),\n name: \"DateInputRange\",\n state: \"date\",\n });\n\n const lastAppliedValue = useRef<DateInputRangeValue>(dateValue);\n const preservedTime = useRef<{\n startTime: TimeFields | null;\n endTime: TimeFields | null;\n }>({ startTime: null, endTime: null });\n preservedTime.current = {\n startTime:\n date?.startDate && dateAdapter.isValid(date?.startDate)\n ? dateAdapter.getTime(date.startDate)\n : null,\n endTime:\n date?.endDate && dateAdapter.isValid(date?.endDate)\n ? dateAdapter.getTime(date.endDate)\n : null,\n };\n const setDateValueFromDate = (newDate: typeof date) => {\n let newDateValue = { startDate: \"\", endDate: \"\" };\n if (!newDate?.startDate) {\n newDateValue = { ...newDateValue, startDate: \"\" };\n } else if (!dateAdapter.isValid(newDate?.startDate)) {\n newDateValue = {\n ...newDateValue,\n startDate: dateValue?.startDate ?? \"\",\n };\n } else if (newDate?.startDate) {\n const formattedStartDateValue = dateAdapter.format(\n newDate.startDate,\n format,\n );\n newDateValue = { ...newDateValue, startDate: formattedStartDateValue };\n }\n if (!newDate?.endDate) {\n newDateValue = { ...newDateValue, endDate: \"\" };\n } else if (!dateAdapter.isValid(newDate?.endDate)) {\n newDateValue = { ...newDateValue, endDate: dateValue?.endDate ?? \"\" };\n } else if (newDate?.endDate && dateAdapter.isValid(newDate.endDate)) {\n const formattedEndDateValue = dateAdapter.format(\n newDate.endDate,\n format,\n );\n newDateValue = { ...newDateValue, endDate: formattedEndDateValue };\n }\n\n if (\n (!newDateValue?.startDate && !!dateValue?.startDate) ||\n (!newDateValue.endDate && !!dateValue?.endDate) ||\n newDateValue?.startDate !== dateValue?.startDate ||\n newDateValue?.endDate !== dateValue?.endDate\n ) {\n onDateValueChange?.(null, newDateValue);\n setDateValue(newDateValue);\n }\n return newDateValue;\n };\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: Update date string value ONLY when selected date changes, not when date string itself change\n useEffect(() => {\n lastAppliedValue.current = setDateValueFromDate(date);\n }, [date, date?.startDate, date?.endDate, dateAdapter.format, format]);\n\n const [focused, setFocused] = useState(false);\n\n const {\n a11yProps: {\n \"aria-describedby\": formFieldDescribedBy,\n \"aria-labelledby\": formFieldLabelledBy,\n } = {},\n disabled: formFieldDisabled,\n readOnly: formFieldReadOnly,\n necessity: formFieldRequired,\n validationStatus: formFieldValidationStatus,\n } = useFormFieldProps();\n\n const isReadOnly = readOnlyProp || formFieldReadOnly;\n const isDisabled = disabled || formFieldDisabled;\n\n const validationStatus = formFieldValidationStatus ?? validationStatusProp;\n\n const {\n \"aria-describedby\": startInputPropsDescribedBy,\n \"aria-labelledby\": startInputPropsLabelledBy,\n \"aria-label\": startInputPropsAriaLabel,\n onBlur: startInputPropsOnBlur,\n onChange: startInputPropsOnChange,\n onKeyDown: startInputPropsOnKeyDown,\n onFocus: startInputPropsOnFocus,\n required: startInputPropsRequired,\n ...restStartInputProps\n } = startInputProps;\n\n const startInputIsRequired = formFieldRequired\n ? [\"required\", \"asterisk\"].includes(formFieldRequired)\n : startInputPropsRequired;\n\n const {\n \"aria-describedby\": endInputPropsDescribedBy,\n \"aria-labelledby\": endInputPropsLabelledBy,\n \"aria-label\": endInputPropsAriaLabel,\n onBlur: endInputPropsOnBlur,\n onChange: endInputPropsOnChange,\n onKeyDown: endInputPropsOnKeyDown,\n onFocus: endInputPropsOnFocus,\n required: endInputPropsRequired,\n ...restEndInputProps\n } = endInputProps;\n\n const hasStartExplicitAriaLabel =\n startInputPropsAriaLabel !== undefined || ariaLabel !== undefined;\n const hasEndExplicitAriaLabel =\n endInputPropsAriaLabel !== undefined || ariaLabel !== undefined;\n\n const startAriaLabelledBy = hasStartExplicitAriaLabel\n ? undefined\n : clsx(\n formFieldLabelledBy,\n startDateLabelId,\n startInputPropsLabelledBy,\n restAriaLabelledBy,\n ) || undefined;\n const endAriaLabelledBy = hasEndExplicitAriaLabel\n ? undefined\n : clsx(\n formFieldLabelledBy,\n endDateLabelId,\n endInputPropsLabelledBy,\n restAriaLabelledBy,\n ) || undefined;\n const startAriaDescribedBy =\n clsx(\n formFieldDescribedBy,\n startInputPropsDescribedBy,\n restAriaDescribedBy,\n ) || undefined;\n const endAriaDescribedBy =\n clsx(\n formFieldDescribedBy,\n endInputPropsDescribedBy,\n restAriaDescribedBy,\n ) || undefined;\n\n const startAriaLabel =\n startInputPropsAriaLabel ??\n (ariaLabel ? `Start date ${ariaLabel}` : \"Start date\");\n\n const endAriaLabel =\n endInputPropsAriaLabel ??\n (ariaLabel ? `End date ${ariaLabel}` : \"End date\");\n\n const endInputIsRequired = formFieldRequired\n ? [\"required\", \"asterisk\"].includes(formFieldRequired)\n : endInputPropsRequired;\n\n const apply = (event: SyntheticEvent) => {\n const { date: startDate = undefined, ...startDateParseDetails } =\n parseDateValue(dateValue?.startDate, DateParserField.START) ?? {};\n const { date: endDate = undefined, ...endDateParseDetails } =\n parseDateValue(dateValue?.endDate, DateParserField.END) ?? {};\n\n const updatedDateRange: DateRangeSelection = {\n startDate: dateValue?.startDate?.length ? startDate : null,\n endDate: dateValue?.endDate?.length ? endDate : null,\n };\n if (dateAdapter.isValid(startDate)) {\n updatedDateRange.startDate = dateAdapter.setTimezone(\n startDate,\n timezone,\n );\n if (preservedTime.current.startTime) {\n updatedDateRange.startDate = dateAdapter.set(\n updatedDateRange.startDate,\n preservedTime.current.startTime,\n );\n }\n }\n if (dateAdapter.isValid(endDate)) {\n updatedDateRange.endDate = dateAdapter.setTimezone(endDate, timezone);\n if (preservedTime.current.endTime) {\n updatedDateRange.endDate = dateAdapter.set(\n updatedDateRange.endDate,\n preservedTime.current.endTime,\n );\n }\n }\n const updatedDateValue = setDateValueFromDate(updatedDateRange);\n\n setDate(updatedDateRange);\n\n if (\n lastAppliedValue.current.startDate !== updatedDateValue.startDate ||\n lastAppliedValue.current.endDate !== updatedDateValue.endDate\n ) {\n onDateChange?.(event, updatedDateRange, {\n startDate: startDateParseDetails,\n endDate: endDateParseDetails,\n });\n onDateValueChange?.(event, updatedDateValue);\n lastAppliedValue.current = updatedDateValue;\n }\n };\n\n const handleStartInputChange: ChangeEventHandler<HTMLInputElement> = (\n event,\n ) => {\n const newDateValue = { ...dateValue, startDate: event.target.value };\n setDateValue(newDateValue);\n startInputPropsOnChange?.(event);\n onChange?.(event);\n onDateValueChange?.(event, newDateValue);\n };\n\n const handleEndInputChange: ChangeEventHandler<HTMLInputElement> = (\n event,\n ) => {\n const newDateValue = { ...dateValue, endDate: event.target.value };\n setDateValue(newDateValue);\n endInputPropsOnChange?.(event);\n onChange?.(event);\n onDateValueChange?.(event, newDateValue);\n };\n\n const handleStartInputFocus: FocusEventHandler<HTMLInputElement> = (\n event,\n ) => {\n setFocused(true);\n startInputPropsOnFocus?.(event);\n };\n\n const handleEndInputFocus: FocusEventHandler<HTMLInputElement> = (\n event,\n ) => {\n setFocused(true);\n endInputPropsOnFocus?.(event);\n };\n\n const handleStartInputBlur: FocusEventHandler<HTMLInputElement> = (\n event,\n ) => {\n setFocused(false);\n apply(event);\n startInputPropsOnBlur?.(event);\n };\n\n const handleEndInputBlur: FocusEventHandler<HTMLInputElement> = (event) => {\n setFocused(false);\n apply(event);\n endInputPropsOnBlur?.(event);\n };\n\n const handleStartInputKeyDown: KeyboardEventHandler<HTMLInputElement> = (\n event,\n ) => {\n if (event.key === \"Enter\") {\n apply(event);\n }\n startInputPropsOnKeyDown?.(event);\n };\n\n const handleEndInputKeyDown: KeyboardEventHandler<HTMLInputElement> = (\n event,\n ) => {\n if (event.key === \"Enter\") {\n apply(event);\n }\n endInputPropsOnKeyDown?.(event);\n };\n\n const handleWrapperMouseDown: MouseEventHandler<HTMLDivElement> = (\n event,\n ) => {\n if (event.target === wrapperRef.current) {\n event.preventDefault();\n const input = startInputRef.current;\n input?.focus();\n input?.setSelectionRange(input.value.length, input.value.length);\n }\n onMouseDown?.(event);\n };\n\n return (\n <div\n className={clsx(\n withBaseName(),\n withBaseName(variant),\n {\n [withBaseName(\"focused\")]: !isDisabled && focused,\n [withBaseName(\"disabled\")]: isDisabled,\n [withBaseName(\"readOnly\")]: isReadOnly,\n [withBaseName(validationStatus ?? \"\")]: validationStatus,\n [withBaseName(\"bordered\")]: bordered,\n },\n className,\n )}\n ref={handleWrapperRef}\n onMouseDown={handleWrapperMouseDown}\n {...rest}\n >\n <input\n autoComplete=\"off\"\n aria-describedby={startAriaDescribedBy}\n aria-labelledby={startAriaLabelledBy}\n aria-invalid={\n (!isReadOnly && validationStatus === \"error\") || undefined\n }\n aria-label={startAriaLabel}\n id={startInputID}\n className={withBaseName(\"input\")}\n disabled={isDisabled}\n readOnly={isReadOnly}\n ref={handleStartInputRef}\n tabIndex={isDisabled ? -1 : 0}\n placeholder={placeholder}\n value={\n isReadOnly && !dateValue?.startDate\n ? emptyReadOnlyMarker\n : (dateValue.startDate ?? dateAdapter.format(undefined, format))\n }\n {...restStartInputProps}\n onBlur={handleStartInputBlur}\n onChange={handleStartInputChange}\n onKeyDown={handleStartInputKeyDown}\n onFocus={!isDisabled ? handleStartInputFocus : undefined}\n required={startInputIsRequired}\n />\n <span className={withBaseName(\"dash\")}>-</span>\n <input\n autoComplete=\"off\"\n aria-describedby={endAriaDescribedBy}\n aria-labelledby={endAriaLabelledBy}\n aria-invalid={\n (!isReadOnly && validationStatus === \"error\") || undefined\n }\n aria-label={endAriaLabel}\n id={endInputID}\n className={withBaseName(\"input\")}\n disabled={isDisabled}\n readOnly={isReadOnly}\n ref={handleEndInputRef}\n tabIndex={isDisabled ? -1 : 0}\n placeholder={placeholder}\n value={\n isReadOnly && !dateValue?.endDate\n ? emptyReadOnlyMarker\n : (dateValue.endDate ?? dateAdapter.format(undefined, format))\n }\n {...restEndInputProps}\n onBlur={handleEndInputBlur}\n onChange={handleEndInputChange}\n onKeyDown={handleEndInputKeyDown}\n onFocus={!isDisabled ? handleEndInputFocus : undefined}\n required={endInputIsRequired}\n />\n <div className={withBaseName(\"endAdornmentContainer\")}>\n {!isDisabled && validationStatus && (\n <StatusAdornment status={validationStatus} />\n )}\n {endAdornment}\n </div>\n <div className={withBaseName(\"activationIndicator\")} />\n <span id={startDateLabelId} className={withBaseName(\"visuallyHidden\")}>\n Start date\n </span>\n <span id={endDateLabelId} className={withBaseName(\"visuallyHidden\")}>\n End date\n </span>\n </div>\n );\n },\n);\n"],"names":["DateParserField","dateInputCss","dateValue"],"mappings":"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"}
1
+ {"version":3,"file":"DateInputRange.js","sources":["../src/date-input/DateInputRange.tsx"],"sourcesContent":["import {\n type InputProps,\n makePrefixer,\n StatusAdornment,\n useControlled,\n useForkRef,\n useFormFieldProps,\n useId,\n} from \"@salt-ds/core\";\nimport type {\n DateDetail,\n DateFrameworkType,\n ParserResult,\n TimeFields,\n Timezone,\n} from \"@salt-ds/date-adapters\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n type ChangeEvent,\n type ChangeEventHandler,\n type ComponentPropsWithoutRef,\n type FocusEventHandler,\n forwardRef,\n type InputHTMLAttributes,\n type KeyboardEventHandler,\n type MouseEventHandler,\n type ReactNode,\n type Ref,\n type SyntheticEvent,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport type { DateRangeSelection } from \"../calendar\";\nimport { useLocalization } from \"../localization-provider\";\nimport dateInputCss from \"./DateInput.css\";\n\nconst withBaseName = makePrefixer(\"saltDateInput\");\n\n/**\n * DateInputRange raw value or null if no date is defined.\n */\nexport type DateInputRangeValue = {\n startDate?: string | null;\n endDate?: string | null;\n};\n\n/**\n * Details of parsing the date range\n */\nexport type DateInputRangeDetails = {\n /** Details of parsing the start date and applying any validation */\n startDate?: DateDetail;\n /** Details of parsing the end date and applying any validation */\n endDate?: DateDetail;\n};\n\n/**\n * Enum to identify the field being parsed\n */\nexport enum DateParserField {\n START = \"start\",\n END = \"end\",\n}\n\n/**\n * Props for the DateInputRange component.\n */\nexport interface DateInputRangeProps\n extends Omit<ComponentPropsWithoutRef<\"div\">, \"defaultValue\" | \"onChange\">,\n Omit<\n InputProps,\n \"defaultValue\" | \"inputRef\" | \"name\" | \"value\" | \"onChange\"\n > {\n /**\n * Styling variant with full border. Defaults to false.\n */\n bordered?: boolean;\n /**\n * The marker to use in an empty read-only DateInput.\n * Use `''` to disable this feature. Defaults to '—'.\n */\n emptyReadOnlyMarker?: string;\n /**\n * End adornment component.\n */\n endAdornment?: ReactNode;\n /**\n * Attributes applied to the start `input` element.\n * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dateInput#Attributes\n */\n startInputProps?: InputHTMLAttributes<HTMLInputElement>;\n /**\n * The name applied to the start date input.\n */\n startName?: string;\n /**\n * Attributes applied to the end `input` element.\n * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dateInput#Attributes\n */\n endInputProps?: InputHTMLAttributes<HTMLInputElement>;\n /**\n * The name applied to the end date input.\n */\n endName?: string;\n /**\n * If `true`, the component is read-only.\n */\n readOnly?: boolean;\n /**\n * Validation status.\n */\n validationStatus?: \"error\" | \"warning\" | \"success\";\n /**\n * Styling variant. Defaults to \"primary\".\n */\n variant?: \"primary\" | \"secondary\" | \"tertiary\";\n /**\n * Format string for date.\n */\n format?: string;\n /**\n * Optional ref for the start input component.\n */\n startInputRef?: Ref<HTMLInputElement>;\n /**\n * Optional ref for the end input component.\n */\n endInputRef?: Ref<HTMLInputElement>;\n /**\n * Parser callback, if not using the adapter's parser\n * @param value - date string to parse\n * @param field: DateParserField to identify value,\n * @param format - format required\n */\n parse?: (\n value: string,\n field: DateParserField,\n format: string,\n ) => ParserResult;\n /**\n * Input value. Use when the input value is controlled.\n */\n value?: DateInputRangeValue;\n /**\n * The initial input value. Use when the component is uncontrolled.\n */\n defaultValue?: DateInputRangeValue;\n /**\n * The date value. Use when the component is controlled.\n */\n date?: DateRangeSelection | null;\n /**\n * The initial selected date value. Use when the component is uncontrolled.\n */\n defaultDate?: DateRangeSelection | null;\n /**\n * Callback fired when the input value changes.\n * @param event - The change event.\n * @param date - The new date input range value.\n */\n onChange?: (event: ChangeEvent<HTMLInputElement>) => void;\n /**\n * Callback fired when the selected date changes.\n * @param event - The synthetic event.\n * @param date - the selected date, invalid date if not a valid date or undefined (uncontrolled) or null (controlled) if not defined\n * @param details - The details of date selection, either a valid date or error\n */\n onDateChange?: (\n event: SyntheticEvent,\n date: DateRangeSelection | null,\n details: DateInputRangeDetails,\n ) => void;\n /**\n * Called when input values change, either due to user interaction or programmatic formatting of valid dates.\n * @param event - The synthetic event or null if a programmatic change.\n * @param newValue - The new date input range value.\n */\n onDateValueChange?: (\n event: SyntheticEvent | null,\n newValue: DateInputRangeValue,\n ) => void;\n /**\n * Specifies the timezone behavior:\n * - If undefined, the timezone will be derived from the passed date, or from `defaultSelectedDate`/`selectedDate`.\n * - If set to \"default\", the default timezone of the date library will be used.\n * - If set to \"system\", the local system's timezone will be applied.\n * - If set to \"UTC\", the time will be returned in UTC.\n * - If set to a valid IANA timezone identifier, the time will be returned for that specific timezone.\n */\n timezone?: Timezone;\n}\n\nexport const DateInputRange = forwardRef<HTMLDivElement, DateInputRangeProps>(\n (props: DateInputRangeProps, ref: React.Ref<HTMLDivElement>) => {\n const { dateAdapter } = useLocalization();\n const {\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": restAriaLabelledBy,\n \"aria-describedby\": restAriaDescribedBy,\n bordered = false,\n className,\n disabled,\n date: dateProp,\n defaultDate,\n onDateChange,\n value: valueProp,\n format = \"DD MMM YYYY\",\n defaultValue = {\n startDate: \"\",\n endDate: \"\",\n },\n onChange,\n onDateValueChange,\n onMouseDown,\n emptyReadOnlyMarker = \"—\",\n endAdornment,\n startInputProps = {},\n startName,\n endInputProps = {},\n endName,\n startInputRef: startInputRefProp,\n endInputRef: endInputRefProp,\n parse: parseProp,\n placeholder = format.toLowerCase(),\n readOnly: readOnlyProp,\n validationStatus: validationStatusProp,\n variant = \"primary\",\n timezone = dateProp?.startDate ||\n dateProp?.endDate ||\n defaultDate?.startDate ||\n defaultDate?.endDate\n ? dateAdapter.getTimezone(\n (dateProp?.startDate ??\n dateProp?.endDate ??\n defaultDate?.startDate ??\n defaultDate?.endDate) as DateFrameworkType,\n )\n : \"default\",\n ...rest\n } = props;\n const wrapperRef = useRef(null);\n const handleWrapperRef = useForkRef<HTMLDivElement>(ref, wrapperRef);\n\n const startInputRef = useRef<HTMLInputElement>(null);\n const handleStartInputRef = useForkRef(startInputRef, startInputRefProp);\n const endInputRef = useRef<HTMLInputElement>(null);\n const handleEndInputRef = useForkRef(endInputRef, endInputRefProp);\n\n const startInputID = useId(startInputProps.id);\n const endInputID = useId(endInputProps.id);\n const startDateLabelId = useId();\n const endDateLabelId = useId();\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-date-input-range\",\n css: dateInputCss,\n window: targetWindow,\n });\n\n const parseDateValue = (\n dateValue: string | null | undefined,\n field: DateParserField,\n ): ParserResult | undefined =>\n parseProp\n ? parseProp(dateValue ?? \"\", field, format)\n : dateAdapter.parse.bind(dateAdapter)(dateValue ?? \"\", format);\n\n const [dateValue, setDateValue] = useControlled({\n controlled: valueProp,\n default: defaultValue,\n name: \"DateInputRange\",\n state: \"dateValue\",\n });\n\n const [date, setDate] = useControlled({\n controlled: dateProp,\n // biome-ignore lint/correctness/useExhaustiveDependencies: just on mount\n default: useMemo(() => {\n if (defaultDate) {\n return defaultDate;\n }\n if (!defaultValue) {\n return undefined;\n }\n const { date: startDate = undefined } =\n parseDateValue(defaultValue?.startDate, DateParserField.START) ?? {};\n const { date: endDate = undefined } =\n parseDateValue(defaultValue?.endDate, DateParserField.END) ?? {};\n return {\n startDate,\n endDate,\n };\n }, []),\n name: \"DateInputRange\",\n state: \"date\",\n });\n\n const lastAppliedValue = useRef<DateInputRangeValue>(dateValue);\n const preservedTime = useRef<{\n startTime: TimeFields | null;\n endTime: TimeFields | null;\n }>({ startTime: null, endTime: null });\n preservedTime.current = {\n startTime:\n date?.startDate && dateAdapter.isValid(date?.startDate)\n ? dateAdapter.getTime(date.startDate)\n : null,\n endTime:\n date?.endDate && dateAdapter.isValid(date?.endDate)\n ? dateAdapter.getTime(date.endDate)\n : null,\n };\n const setDateValueFromDate = (newDate: typeof date) => {\n let newDateValue = { startDate: \"\", endDate: \"\" };\n if (!newDate?.startDate) {\n newDateValue = { ...newDateValue, startDate: \"\" };\n } else if (!dateAdapter.isValid(newDate?.startDate)) {\n newDateValue = {\n ...newDateValue,\n startDate: dateValue?.startDate ?? \"\",\n };\n } else if (newDate?.startDate) {\n const formattedStartDateValue = dateAdapter.format(\n newDate.startDate,\n format,\n );\n newDateValue = { ...newDateValue, startDate: formattedStartDateValue };\n }\n if (!newDate?.endDate) {\n newDateValue = { ...newDateValue, endDate: \"\" };\n } else if (!dateAdapter.isValid(newDate?.endDate)) {\n newDateValue = { ...newDateValue, endDate: dateValue?.endDate ?? \"\" };\n } else if (newDate?.endDate && dateAdapter.isValid(newDate.endDate)) {\n const formattedEndDateValue = dateAdapter.format(\n newDate.endDate,\n format,\n );\n newDateValue = { ...newDateValue, endDate: formattedEndDateValue };\n }\n\n if (\n (!newDateValue?.startDate && !!dateValue?.startDate) ||\n (!newDateValue.endDate && !!dateValue?.endDate) ||\n newDateValue?.startDate !== dateValue?.startDate ||\n newDateValue?.endDate !== dateValue?.endDate\n ) {\n onDateValueChange?.(null, newDateValue);\n setDateValue(newDateValue);\n }\n return newDateValue;\n };\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: Update date string value ONLY when selected date changes, not when date string itself change\n useEffect(() => {\n lastAppliedValue.current = setDateValueFromDate(date);\n }, [date, date?.startDate, date?.endDate, dateAdapter.format, format]);\n\n const [focused, setFocused] = useState(false);\n\n const {\n a11yProps: {\n \"aria-describedby\": formFieldDescribedBy,\n \"aria-labelledby\": formFieldLabelledBy,\n } = {},\n disabled: formFieldDisabled,\n readOnly: formFieldReadOnly,\n necessity: formFieldRequired,\n validationStatus: formFieldValidationStatus,\n } = useFormFieldProps();\n\n const isReadOnly = readOnlyProp || formFieldReadOnly;\n const isDisabled = disabled || formFieldDisabled;\n\n const validationStatus = formFieldValidationStatus ?? validationStatusProp;\n\n const {\n \"aria-describedby\": startInputPropsDescribedBy,\n \"aria-labelledby\": startInputPropsLabelledBy,\n \"aria-label\": startInputPropsAriaLabel,\n onBlur: startInputPropsOnBlur,\n onChange: startInputPropsOnChange,\n onKeyDown: startInputPropsOnKeyDown,\n onFocus: startInputPropsOnFocus,\n required: startInputPropsRequired,\n ...restStartInputProps\n } = startInputProps;\n\n const startInputIsRequired = formFieldRequired\n ? [\"required\", \"asterisk\"].includes(formFieldRequired)\n : startInputPropsRequired;\n\n const {\n \"aria-describedby\": endInputPropsDescribedBy,\n \"aria-labelledby\": endInputPropsLabelledBy,\n \"aria-label\": endInputPropsAriaLabel,\n onBlur: endInputPropsOnBlur,\n onChange: endInputPropsOnChange,\n onKeyDown: endInputPropsOnKeyDown,\n onFocus: endInputPropsOnFocus,\n required: endInputPropsRequired,\n ...restEndInputProps\n } = endInputProps;\n\n const hasStartExplicitAriaLabel =\n startInputPropsAriaLabel !== undefined || ariaLabel !== undefined;\n const hasEndExplicitAriaLabel =\n endInputPropsAriaLabel !== undefined || ariaLabel !== undefined;\n\n const startAriaLabelledBy = hasStartExplicitAriaLabel\n ? undefined\n : clsx(\n formFieldLabelledBy,\n startDateLabelId,\n startInputPropsLabelledBy,\n restAriaLabelledBy,\n ) || undefined;\n const endAriaLabelledBy = hasEndExplicitAriaLabel\n ? undefined\n : clsx(\n formFieldLabelledBy,\n endDateLabelId,\n endInputPropsLabelledBy,\n restAriaLabelledBy,\n ) || undefined;\n const startAriaDescribedBy =\n clsx(\n formFieldDescribedBy,\n startInputPropsDescribedBy,\n restAriaDescribedBy,\n ) || undefined;\n const endAriaDescribedBy =\n clsx(\n formFieldDescribedBy,\n endInputPropsDescribedBy,\n restAriaDescribedBy,\n ) || undefined;\n\n const startAriaLabel =\n startInputPropsAriaLabel ??\n (ariaLabel ? `Start date ${ariaLabel}` : \"Start date\");\n\n const endAriaLabel =\n endInputPropsAriaLabel ??\n (ariaLabel ? `End date ${ariaLabel}` : \"End date\");\n\n const endInputIsRequired = formFieldRequired\n ? [\"required\", \"asterisk\"].includes(formFieldRequired)\n : endInputPropsRequired;\n\n const apply = (event: SyntheticEvent) => {\n const { date: startDate = undefined, ...startDateParseDetails } =\n parseDateValue(dateValue?.startDate, DateParserField.START) ?? {};\n const { date: endDate = undefined, ...endDateParseDetails } =\n parseDateValue(dateValue?.endDate, DateParserField.END) ?? {};\n\n const updatedDateRange: DateRangeSelection = {\n startDate: dateValue?.startDate?.length ? startDate : null,\n endDate: dateValue?.endDate?.length ? endDate : null,\n };\n if (dateAdapter.isValid(startDate)) {\n updatedDateRange.startDate = dateAdapter.setTimezone(\n startDate,\n timezone,\n );\n if (preservedTime.current.startTime) {\n updatedDateRange.startDate = dateAdapter.set(\n updatedDateRange.startDate,\n preservedTime.current.startTime,\n );\n }\n }\n if (dateAdapter.isValid(endDate)) {\n updatedDateRange.endDate = dateAdapter.setTimezone(endDate, timezone);\n if (preservedTime.current.endTime) {\n updatedDateRange.endDate = dateAdapter.set(\n updatedDateRange.endDate,\n preservedTime.current.endTime,\n );\n }\n }\n const updatedDateValue = setDateValueFromDate(updatedDateRange);\n\n setDate(updatedDateRange);\n\n if (\n lastAppliedValue.current.startDate !== updatedDateValue.startDate ||\n lastAppliedValue.current.endDate !== updatedDateValue.endDate\n ) {\n onDateChange?.(event, updatedDateRange, {\n startDate: startDateParseDetails,\n endDate: endDateParseDetails,\n });\n onDateValueChange?.(event, updatedDateValue);\n lastAppliedValue.current = updatedDateValue;\n }\n };\n\n const handleStartInputChange: ChangeEventHandler<HTMLInputElement> = (\n event,\n ) => {\n const newDateValue = { ...dateValue, startDate: event.target.value };\n setDateValue(newDateValue);\n startInputPropsOnChange?.(event);\n onChange?.(event);\n onDateValueChange?.(event, newDateValue);\n };\n\n const handleEndInputChange: ChangeEventHandler<HTMLInputElement> = (\n event,\n ) => {\n const newDateValue = { ...dateValue, endDate: event.target.value };\n setDateValue(newDateValue);\n endInputPropsOnChange?.(event);\n onChange?.(event);\n onDateValueChange?.(event, newDateValue);\n };\n\n const handleStartInputFocus: FocusEventHandler<HTMLInputElement> = (\n event,\n ) => {\n setFocused(true);\n startInputPropsOnFocus?.(event);\n };\n\n const handleEndInputFocus: FocusEventHandler<HTMLInputElement> = (\n event,\n ) => {\n setFocused(true);\n endInputPropsOnFocus?.(event);\n };\n\n const handleStartInputBlur: FocusEventHandler<HTMLInputElement> = (\n event,\n ) => {\n setFocused(false);\n apply(event);\n startInputPropsOnBlur?.(event);\n };\n\n const handleEndInputBlur: FocusEventHandler<HTMLInputElement> = (event) => {\n setFocused(false);\n apply(event);\n endInputPropsOnBlur?.(event);\n };\n\n const handleStartInputKeyDown: KeyboardEventHandler<HTMLInputElement> = (\n event,\n ) => {\n if (event.key === \"Enter\") {\n apply(event);\n }\n startInputPropsOnKeyDown?.(event);\n };\n\n const handleEndInputKeyDown: KeyboardEventHandler<HTMLInputElement> = (\n event,\n ) => {\n if (event.key === \"Enter\") {\n apply(event);\n }\n endInputPropsOnKeyDown?.(event);\n };\n\n const handleWrapperMouseDown: MouseEventHandler<HTMLDivElement> = (\n event,\n ) => {\n if (event.target === wrapperRef.current) {\n event.preventDefault();\n const input = startInputRef.current;\n input?.focus();\n input?.setSelectionRange(input.value.length, input.value.length);\n }\n onMouseDown?.(event);\n };\n\n return (\n <div\n className={clsx(\n withBaseName(),\n withBaseName(variant),\n {\n [withBaseName(\"focused\")]: !isDisabled && focused,\n [withBaseName(\"disabled\")]: isDisabled,\n [withBaseName(\"readOnly\")]: isReadOnly,\n [withBaseName(validationStatus ?? \"\")]: validationStatus,\n [withBaseName(\"bordered\")]: bordered,\n },\n className,\n )}\n ref={handleWrapperRef}\n onMouseDown={handleWrapperMouseDown}\n {...rest}\n >\n <input\n autoComplete=\"off\"\n aria-describedby={startAriaDescribedBy}\n aria-labelledby={startAriaLabelledBy}\n aria-invalid={\n (!isReadOnly && validationStatus === \"error\") || undefined\n }\n aria-label={startAriaLabel}\n id={startInputID}\n className={withBaseName(\"input\")}\n disabled={isDisabled}\n name={startName}\n readOnly={isReadOnly}\n ref={handleStartInputRef}\n tabIndex={isDisabled ? -1 : 0}\n placeholder={placeholder}\n value={\n isReadOnly && !dateValue?.startDate\n ? emptyReadOnlyMarker\n : (dateValue.startDate ?? dateAdapter.format(undefined, format))\n }\n {...restStartInputProps}\n onBlur={handleStartInputBlur}\n onChange={handleStartInputChange}\n onKeyDown={handleStartInputKeyDown}\n onFocus={!isDisabled ? handleStartInputFocus : undefined}\n required={startInputIsRequired}\n />\n <span className={withBaseName(\"dash\")}>-</span>\n <input\n autoComplete=\"off\"\n aria-describedby={endAriaDescribedBy}\n aria-labelledby={endAriaLabelledBy}\n aria-invalid={\n (!isReadOnly && validationStatus === \"error\") || undefined\n }\n aria-label={endAriaLabel}\n id={endInputID}\n className={withBaseName(\"input\")}\n disabled={isDisabled}\n name={endName}\n readOnly={isReadOnly}\n ref={handleEndInputRef}\n tabIndex={isDisabled ? -1 : 0}\n placeholder={placeholder}\n value={\n isReadOnly && !dateValue?.endDate\n ? emptyReadOnlyMarker\n : (dateValue.endDate ?? dateAdapter.format(undefined, format))\n }\n {...restEndInputProps}\n onBlur={handleEndInputBlur}\n onChange={handleEndInputChange}\n onKeyDown={handleEndInputKeyDown}\n onFocus={!isDisabled ? handleEndInputFocus : undefined}\n required={endInputIsRequired}\n />\n <div className={withBaseName(\"endAdornmentContainer\")}>\n {!isDisabled && validationStatus && (\n <StatusAdornment status={validationStatus} />\n )}\n {endAdornment}\n </div>\n <div className={withBaseName(\"activationIndicator\")} />\n <span id={startDateLabelId} className={withBaseName(\"visuallyHidden\")}>\n Start date\n </span>\n <span id={endDateLabelId} className={withBaseName(\"visuallyHidden\")}>\n End date\n </span>\n </div>\n );\n },\n);\n"],"names":["DateParserField","dateInputCss","dateValue"],"mappings":"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"}
@@ -31,6 +31,7 @@ const DateInputSingle = forwardRef(
31
31
  endAdornment,
32
32
  inputProps = {},
33
33
  inputRef: inputRefProp = null,
34
+ name,
34
35
  parse: parseProp,
35
36
  placeholder = format.toLowerCase(),
36
37
  readOnly: readOnlyProp,
@@ -212,6 +213,7 @@ const DateInputSingle = forwardRef(
212
213
  id: inputId,
213
214
  className: withBaseName("input"),
214
215
  disabled: isDisabled,
216
+ name,
215
217
  readOnly: isReadOnly,
216
218
  ref: handleInputRef,
217
219
  tabIndex: isDisabled ? -1 : 0,
@@ -1 +1 @@
1
- {"version":3,"file":"DateInputSingle.js","sources":["../src/date-input/DateInputSingle.tsx"],"sourcesContent":["import {\n makePrefixer,\n StatusAdornment,\n useControlled,\n useForkRef,\n useFormFieldProps,\n useId,\n} from \"@salt-ds/core\";\nimport type {\n DateDetail,\n DateFrameworkType,\n ParserResult,\n TimeFields,\n Timezone,\n} from \"@salt-ds/date-adapters\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n type ChangeEventHandler,\n type ComponentPropsWithoutRef,\n type FocusEventHandler,\n forwardRef,\n type InputHTMLAttributes,\n type KeyboardEventHandler,\n type MouseEventHandler,\n type ReactNode,\n type Ref,\n type SyntheticEvent,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport type { SingleDateSelection } from \"../calendar\";\nimport { useLocalization } from \"../localization-provider\";\nimport dateInputCss from \"./DateInput.css\";\n\nconst withBaseName = makePrefixer(\"saltDateInput\");\n\n/**\n * Details of parsing the date\n */\nexport type DateInputSingleDetails = DateDetail;\n\n/**\n * Props for the DateInputSingle component.\n */\nexport interface DateInputSingleProps\n extends Omit<ComponentPropsWithoutRef<\"div\">, \"defaultValue\">,\n Pick<\n ComponentPropsWithoutRef<\"input\">,\n \"disabled\" | \"value\" | \"defaultValue\" | \"placeholder\"\n > {\n /**\n * Styling variant with full border. Defaults to false.\n */\n bordered?: boolean;\n /**\n * The marker to use in an empty read-only DateInput.\n * Use `''` to disable this feature. Defaults to '—'.\n */\n emptyReadOnlyMarker?: string;\n /**\n * End adornment component.\n */\n endAdornment?: ReactNode;\n /**\n * Attributes applied to the `input` element.\n * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dateInput#Attributes\n */\n inputProps?: InputHTMLAttributes<HTMLInputElement>;\n /**\n * If `true`, the component is read-only.\n */\n readOnly?: boolean;\n /**\n * Start adornment component\n */\n startAdornment?: ReactNode;\n /**\n * Validation status.\n */\n validationStatus?: \"error\" | \"warning\" | \"success\";\n /**\n * Styling variant. Defaults to \"primary\".\n */\n variant?: \"primary\" | \"secondary\" | \"tertiary\";\n /**\n * Format string for date.\n */\n format?: string;\n /**\n * Reference for the input.\n */\n inputRef?: Ref<HTMLInputElement>;\n /**\n * Parser callback, if not using the adapter's parser\n * @param value - date string to parse\n * @param format - format required\n */\n parse?: (value: string, format: string) => ParserResult;\n /**\n * Input value. Use when the input value is controlled.\n */\n value?: string;\n /**\n * The initial input value. Use when the component is uncontrolled.\n */\n defaultValue?: string;\n /**\n * The date value. Use when the component is controlled.\n */\n date?: DateFrameworkType | null;\n /**\n * The initial selected date value. Use when the component is uncontrolled.\n */\n defaultDate?: DateFrameworkType | null;\n /**\n * Callback fired when the selected date changes.\n * @param event - The synthetic event.\n * @param date - the selected date, invalid date if not a valid date or undefined (uncontrolled) or null (controlled) if not defined\n * @param details - The details of date selection, either a valid date or error\n */\n onDateChange?: (\n event: SyntheticEvent,\n date: SingleDateSelection | null | undefined,\n details: DateInputSingleDetails,\n ) => void;\n /**\n * Called when input value changes, either due to user interaction or programmatic formatting of valid dates.\n * @param event - The synthetic event or null if a programmatic change.\n * @param newValue - The new date input value.\n */\n onDateValueChange?: (event: SyntheticEvent | null, newValue: string) => void;\n /**\n * Specifies the timezone behavior:\n * - If undefined, the timezone will be derived from the passed date, or from `defaultSelectedDate`/`selectedDate`.\n * - If set to \"default\", the default timezone of the date library will be used.\n * - If set to \"system\", the local system's timezone will be applied.\n * - If set to \"UTC\", the time will be returned in UTC.\n * - If set to a valid IANA timezone identifier, the time will be returned for that specific timezone.\n */\n timezone?: Timezone;\n}\n\nexport const DateInputSingle = forwardRef<HTMLDivElement, DateInputSingleProps>(\n (props: DateInputSingleProps, ref: React.Ref<HTMLDivElement>) => {\n const { dateAdapter } = useLocalization();\n const {\n bordered = false,\n className,\n disabled,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": restAriaLabelledBy,\n \"aria-describedby\": restAriaDescribedBy,\n date: dateProp,\n defaultDate,\n onDateChange,\n value: valueProp,\n format = \"DD MMM YYYY\",\n defaultValue = \"\",\n id,\n onChange,\n onMouseDown,\n emptyReadOnlyMarker = \"—\",\n endAdornment,\n inputProps = {},\n inputRef: inputRefProp = null,\n parse: parseProp,\n placeholder = format.toLowerCase(),\n readOnly: readOnlyProp,\n startAdornment,\n validationStatus: validationStatusProp,\n variant = \"primary\",\n onDateValueChange,\n timezone = dateProp || defaultDate\n ? dateAdapter.getTimezone(\n (dateProp ?? defaultDate) as DateFrameworkType,\n )\n : \"default\",\n ...rest\n } = props;\n const wrapperRef = useRef(null);\n const handleWrapperRef = useForkRef<HTMLDivElement>(ref, wrapperRef);\n const innerInputRef = useRef<HTMLInputElement>(null);\n const handleInputRef = useForkRef<HTMLInputElement>(\n innerInputRef,\n inputRefProp,\n );\n\n const inputId = useId(id);\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-date-input-single\",\n css: dateInputCss,\n window: targetWindow,\n });\n\n const [date, setDate] = useControlled({\n controlled: dateProp,\n // biome-ignore lint/correctness/useExhaustiveDependencies: just on mount\n default: useMemo(() => {\n if (defaultDate) {\n return defaultDate;\n }\n if (!defaultValue) {\n return undefined;\n }\n return dateAdapter.parse(defaultValue, format)\n .date as DateFrameworkType;\n }, []),\n name: \"DateInputSingle\",\n state: \"date\",\n });\n const [dateValue, setDateValue] = useControlled({\n controlled: valueProp,\n default: defaultValue,\n name: \"DateInputSingle\",\n state: \"dateValue\",\n });\n const lastAppliedValue = useRef<string>(dateValue);\n const preservedTime = useRef<TimeFields | null>(null);\n preservedTime.current = dateAdapter.isValid(date)\n ? dateAdapter.getTime(date)\n : null;\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: Update date string value ONLY when selected date changes, not when date string itself change\n useEffect(() => {\n const formattedValue = dateAdapter.format(date, format);\n const hasValueChanged = formattedValue !== dateValue;\n if (\n // should not reset \"error\" input values\n (date === null || dateAdapter.isValid(date)) &&\n hasValueChanged\n ) {\n setDateValue(formattedValue);\n onDateValueChange?.(null, formattedValue);\n lastAppliedValue.current = formattedValue;\n }\n }, [date, dateAdapter.format, format]);\n\n const [focused, setFocused] = useState(false);\n\n const {\n a11yProps: {\n \"aria-describedby\": formFieldDescribedBy,\n \"aria-labelledby\": formFieldLabelledBy,\n } = {},\n disabled: formFieldDisabled,\n readOnly: formFieldReadOnly,\n necessity: formFieldRequired,\n validationStatus: formFieldValidationStatus,\n } = useFormFieldProps();\n\n const isReadOnly = readOnlyProp || formFieldReadOnly;\n const isDisabled = disabled || formFieldDisabled;\n\n const validationStatus = formFieldValidationStatus ?? validationStatusProp;\n\n const {\n \"aria-describedby\": dateInputDescribedBy,\n \"aria-labelledby\": dateInputLabelledBy,\n \"aria-label\": dateInputAriaLabel,\n onBlur: inputPropsOnBlur,\n onChange: inputPropsOnChange,\n onKeyDown: inputPropsOnKeyDown,\n onFocus: inputPropsOnFocus,\n required: dateInputPropsRequired,\n ...restDateInputProps\n } = inputProps;\n\n const hasExplicitAriaLabel =\n dateInputAriaLabel !== undefined || ariaLabel !== undefined;\n\n const inputAriaLabelledBy = hasExplicitAriaLabel\n ? undefined\n : clsx(formFieldLabelledBy, dateInputLabelledBy, restAriaLabelledBy) ||\n undefined;\n const inputAriaDescribedBy =\n clsx(formFieldDescribedBy, dateInputDescribedBy, restAriaDescribedBy) ||\n undefined;\n const inputAriaLabel = dateInputAriaLabel ?? ariaLabel ?? \"date input\";\n\n const isRequired = formFieldRequired\n ? [\"required\", \"asterisk\"].includes(formFieldRequired)\n : dateInputPropsRequired;\n\n const apply = (event: SyntheticEvent) => {\n const parse = parseProp ?? dateAdapter.parse.bind(dateAdapter);\n const parseResult = parse(dateValue ?? \"\", format);\n let parsedDate: DateFrameworkType | null;\n let parseDetails: DateDetail;\n ({ date: parsedDate, ...parseDetails } = parseResult);\n parsedDate = dateValue ? parsedDate : null;\n let formattedValue = \"\";\n const isDateValid = dateAdapter.isValid(parsedDate);\n if (isDateValid && parsedDate) {\n parsedDate = dateAdapter.setTimezone(parsedDate, timezone);\n if (preservedTime.current) {\n parsedDate = dateAdapter.set(parsedDate, preservedTime.current);\n }\n formattedValue = dateAdapter.format(parsedDate, format);\n }\n const hasValueChanged = formattedValue !== dateValue;\n const newValue = isDateValid ? formattedValue : dateValue;\n if (hasValueChanged) {\n setDateValue(newValue);\n onDateValueChange?.(event, newValue);\n }\n\n setDate(parsedDate);\n\n if (lastAppliedValue.current !== newValue) {\n onDateChange?.(event, parsedDate, parseDetails);\n }\n lastAppliedValue.current = newValue;\n };\n\n const handleChange: ChangeEventHandler<HTMLInputElement> = (event) => {\n const newDateValue = event.target.value;\n setDateValue(newDateValue);\n inputPropsOnChange?.(event);\n onChange?.(event);\n onDateValueChange?.(event, newDateValue);\n };\n\n const handleFocus: FocusEventHandler<HTMLInputElement> = (event) => {\n setFocused(true);\n inputPropsOnFocus?.(event);\n };\n const handleBlur: FocusEventHandler<HTMLInputElement> = (event) => {\n setFocused(false);\n apply(event);\n inputPropsOnBlur?.(event);\n };\n\n const handleKeyDown: KeyboardEventHandler<HTMLInputElement> = (event) => {\n if (event.key === \"Enter\") {\n apply(event);\n }\n inputPropsOnKeyDown?.(event);\n };\n\n const handleMouseDown: MouseEventHandler<HTMLDivElement> = (event) => {\n if (event.target === wrapperRef.current) {\n event.preventDefault();\n innerInputRef.current?.focus();\n }\n onMouseDown?.(event);\n };\n\n return (\n <div\n className={clsx(\n withBaseName(),\n withBaseName(variant),\n {\n [withBaseName(\"focused\")]: !isDisabled && focused,\n [withBaseName(\"disabled\")]: isDisabled,\n [withBaseName(\"readOnly\")]: isReadOnly,\n [withBaseName(validationStatus ?? \"\")]: validationStatus,\n [withBaseName(\"bordered\")]: bordered,\n },\n className,\n )}\n ref={handleWrapperRef}\n onMouseDown={handleMouseDown}\n {...rest}\n >\n {startAdornment && (\n <div className={withBaseName(\"startAdornmentContainer\")}>\n {startAdornment}\n </div>\n )}\n <input\n autoComplete=\"off\"\n aria-describedby={inputAriaDescribedBy}\n aria-labelledby={inputAriaLabelledBy}\n aria-invalid={\n (!isReadOnly && validationStatus === \"error\") || undefined\n }\n aria-label={inputAriaLabel}\n id={inputId}\n className={withBaseName(\"input\")}\n disabled={isDisabled}\n readOnly={isReadOnly}\n ref={handleInputRef}\n tabIndex={isDisabled ? -1 : 0}\n placeholder={placeholder}\n value={isReadOnly && !dateValue ? emptyReadOnlyMarker : dateValue}\n {...restDateInputProps}\n onBlur={handleBlur}\n onChange={handleChange}\n onKeyDown={handleKeyDown}\n onFocus={!isDisabled ? handleFocus : undefined}\n required={isRequired}\n />\n <div className={withBaseName(\"endAdornmentContainer\")}>\n {!isDisabled && validationStatus && (\n <StatusAdornment status={validationStatus} />\n )}\n {endAdornment}\n </div>\n <div className={withBaseName(\"activationIndicator\")} />\n </div>\n );\n },\n);\n"],"names":["dateInputCss"],"mappings":"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"}
1
+ {"version":3,"file":"DateInputSingle.js","sources":["../src/date-input/DateInputSingle.tsx"],"sourcesContent":["import {\n makePrefixer,\n StatusAdornment,\n useControlled,\n useForkRef,\n useFormFieldProps,\n useId,\n} from \"@salt-ds/core\";\nimport type {\n DateDetail,\n DateFrameworkType,\n ParserResult,\n TimeFields,\n Timezone,\n} from \"@salt-ds/date-adapters\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n type ChangeEventHandler,\n type ComponentPropsWithoutRef,\n type FocusEventHandler,\n forwardRef,\n type InputHTMLAttributes,\n type KeyboardEventHandler,\n type MouseEventHandler,\n type ReactNode,\n type Ref,\n type SyntheticEvent,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport type { SingleDateSelection } from \"../calendar\";\nimport { useLocalization } from \"../localization-provider\";\nimport dateInputCss from \"./DateInput.css\";\n\nconst withBaseName = makePrefixer(\"saltDateInput\");\n\n/**\n * Details of parsing the date\n */\nexport type DateInputSingleDetails = DateDetail;\n\n/**\n * Props for the DateInputSingle component.\n */\nexport interface DateInputSingleProps\n extends Omit<ComponentPropsWithoutRef<\"div\">, \"defaultValue\">,\n Pick<\n ComponentPropsWithoutRef<\"input\">,\n \"disabled\" | \"value\" | \"defaultValue\" | \"placeholder\"\n > {\n /**\n * Styling variant with full border. Defaults to false.\n */\n bordered?: boolean;\n /**\n * The marker to use in an empty read-only DateInput.\n * Use `''` to disable this feature. Defaults to '—'.\n */\n emptyReadOnlyMarker?: string;\n /**\n * End adornment component.\n */\n endAdornment?: ReactNode;\n /**\n * Attributes applied to the `input` element.\n * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dateInput#Attributes\n */\n inputProps?: InputHTMLAttributes<HTMLInputElement>;\n /**\n * The name applied to the input.\n */\n name?: string;\n /**\n * If `true`, the component is read-only.\n */\n readOnly?: boolean;\n /**\n * Start adornment component\n */\n startAdornment?: ReactNode;\n /**\n * Validation status.\n */\n validationStatus?: \"error\" | \"warning\" | \"success\";\n /**\n * Styling variant. Defaults to \"primary\".\n */\n variant?: \"primary\" | \"secondary\" | \"tertiary\";\n /**\n * Format string for date.\n */\n format?: string;\n /**\n * Reference for the input.\n */\n inputRef?: Ref<HTMLInputElement>;\n /**\n * Parser callback, if not using the adapter's parser\n * @param value - date string to parse\n * @param format - format required\n */\n parse?: (value: string, format: string) => ParserResult;\n /**\n * Input value. Use when the input value is controlled.\n */\n value?: string;\n /**\n * The initial input value. Use when the component is uncontrolled.\n */\n defaultValue?: string;\n /**\n * The date value. Use when the component is controlled.\n */\n date?: DateFrameworkType | null;\n /**\n * The initial selected date value. Use when the component is uncontrolled.\n */\n defaultDate?: DateFrameworkType | null;\n /**\n * Callback fired when the selected date changes.\n * @param event - The synthetic event.\n * @param date - the selected date, invalid date if not a valid date or undefined (uncontrolled) or null (controlled) if not defined\n * @param details - The details of date selection, either a valid date or error\n */\n onDateChange?: (\n event: SyntheticEvent,\n date: SingleDateSelection | null | undefined,\n details: DateInputSingleDetails,\n ) => void;\n /**\n * Called when input value changes, either due to user interaction or programmatic formatting of valid dates.\n * @param event - The synthetic event or null if a programmatic change.\n * @param newValue - The new date input value.\n */\n onDateValueChange?: (event: SyntheticEvent | null, newValue: string) => void;\n /**\n * Specifies the timezone behavior:\n * - If undefined, the timezone will be derived from the passed date, or from `defaultSelectedDate`/`selectedDate`.\n * - If set to \"default\", the default timezone of the date library will be used.\n * - If set to \"system\", the local system's timezone will be applied.\n * - If set to \"UTC\", the time will be returned in UTC.\n * - If set to a valid IANA timezone identifier, the time will be returned for that specific timezone.\n */\n timezone?: Timezone;\n}\n\nexport const DateInputSingle = forwardRef<HTMLDivElement, DateInputSingleProps>(\n (props: DateInputSingleProps, ref: React.Ref<HTMLDivElement>) => {\n const { dateAdapter } = useLocalization();\n const {\n bordered = false,\n className,\n disabled,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": restAriaLabelledBy,\n \"aria-describedby\": restAriaDescribedBy,\n date: dateProp,\n defaultDate,\n onDateChange,\n value: valueProp,\n format = \"DD MMM YYYY\",\n defaultValue = \"\",\n id,\n onChange,\n onMouseDown,\n emptyReadOnlyMarker = \"—\",\n endAdornment,\n inputProps = {},\n inputRef: inputRefProp = null,\n name,\n parse: parseProp,\n placeholder = format.toLowerCase(),\n readOnly: readOnlyProp,\n startAdornment,\n validationStatus: validationStatusProp,\n variant = \"primary\",\n onDateValueChange,\n timezone = dateProp || defaultDate\n ? dateAdapter.getTimezone(\n (dateProp ?? defaultDate) as DateFrameworkType,\n )\n : \"default\",\n ...rest\n } = props;\n const wrapperRef = useRef(null);\n const handleWrapperRef = useForkRef<HTMLDivElement>(ref, wrapperRef);\n const innerInputRef = useRef<HTMLInputElement>(null);\n const handleInputRef = useForkRef<HTMLInputElement>(\n innerInputRef,\n inputRefProp,\n );\n\n const inputId = useId(id);\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-date-input-single\",\n css: dateInputCss,\n window: targetWindow,\n });\n\n const [date, setDate] = useControlled({\n controlled: dateProp,\n // biome-ignore lint/correctness/useExhaustiveDependencies: just on mount\n default: useMemo(() => {\n if (defaultDate) {\n return defaultDate;\n }\n if (!defaultValue) {\n return undefined;\n }\n return dateAdapter.parse(defaultValue, format)\n .date as DateFrameworkType;\n }, []),\n name: \"DateInputSingle\",\n state: \"date\",\n });\n const [dateValue, setDateValue] = useControlled({\n controlled: valueProp,\n default: defaultValue,\n name: \"DateInputSingle\",\n state: \"dateValue\",\n });\n const lastAppliedValue = useRef<string>(dateValue);\n const preservedTime = useRef<TimeFields | null>(null);\n preservedTime.current = dateAdapter.isValid(date)\n ? dateAdapter.getTime(date)\n : null;\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: Update date string value ONLY when selected date changes, not when date string itself change\n useEffect(() => {\n const formattedValue = dateAdapter.format(date, format);\n const hasValueChanged = formattedValue !== dateValue;\n if (\n // should not reset \"error\" input values\n (date === null || dateAdapter.isValid(date)) &&\n hasValueChanged\n ) {\n setDateValue(formattedValue);\n onDateValueChange?.(null, formattedValue);\n lastAppliedValue.current = formattedValue;\n }\n }, [date, dateAdapter.format, format]);\n\n const [focused, setFocused] = useState(false);\n\n const {\n a11yProps: {\n \"aria-describedby\": formFieldDescribedBy,\n \"aria-labelledby\": formFieldLabelledBy,\n } = {},\n disabled: formFieldDisabled,\n readOnly: formFieldReadOnly,\n necessity: formFieldRequired,\n validationStatus: formFieldValidationStatus,\n } = useFormFieldProps();\n\n const isReadOnly = readOnlyProp || formFieldReadOnly;\n const isDisabled = disabled || formFieldDisabled;\n\n const validationStatus = formFieldValidationStatus ?? validationStatusProp;\n\n const {\n \"aria-describedby\": dateInputDescribedBy,\n \"aria-labelledby\": dateInputLabelledBy,\n \"aria-label\": dateInputAriaLabel,\n onBlur: inputPropsOnBlur,\n onChange: inputPropsOnChange,\n onKeyDown: inputPropsOnKeyDown,\n onFocus: inputPropsOnFocus,\n required: dateInputPropsRequired,\n ...restDateInputProps\n } = inputProps;\n\n const hasExplicitAriaLabel =\n dateInputAriaLabel !== undefined || ariaLabel !== undefined;\n\n const inputAriaLabelledBy = hasExplicitAriaLabel\n ? undefined\n : clsx(formFieldLabelledBy, dateInputLabelledBy, restAriaLabelledBy) ||\n undefined;\n const inputAriaDescribedBy =\n clsx(formFieldDescribedBy, dateInputDescribedBy, restAriaDescribedBy) ||\n undefined;\n const inputAriaLabel = dateInputAriaLabel ?? ariaLabel ?? \"date input\";\n\n const isRequired = formFieldRequired\n ? [\"required\", \"asterisk\"].includes(formFieldRequired)\n : dateInputPropsRequired;\n\n const apply = (event: SyntheticEvent) => {\n const parse = parseProp ?? dateAdapter.parse.bind(dateAdapter);\n const parseResult = parse(dateValue ?? \"\", format);\n let parsedDate: DateFrameworkType | null;\n let parseDetails: DateDetail;\n ({ date: parsedDate, ...parseDetails } = parseResult);\n parsedDate = dateValue ? parsedDate : null;\n let formattedValue = \"\";\n const isDateValid = dateAdapter.isValid(parsedDate);\n if (isDateValid && parsedDate) {\n parsedDate = dateAdapter.setTimezone(parsedDate, timezone);\n if (preservedTime.current) {\n parsedDate = dateAdapter.set(parsedDate, preservedTime.current);\n }\n formattedValue = dateAdapter.format(parsedDate, format);\n }\n const hasValueChanged = formattedValue !== dateValue;\n const newValue = isDateValid ? formattedValue : dateValue;\n if (hasValueChanged) {\n setDateValue(newValue);\n onDateValueChange?.(event, newValue);\n }\n\n setDate(parsedDate);\n\n if (lastAppliedValue.current !== newValue) {\n onDateChange?.(event, parsedDate, parseDetails);\n }\n lastAppliedValue.current = newValue;\n };\n\n const handleChange: ChangeEventHandler<HTMLInputElement> = (event) => {\n const newDateValue = event.target.value;\n setDateValue(newDateValue);\n inputPropsOnChange?.(event);\n onChange?.(event);\n onDateValueChange?.(event, newDateValue);\n };\n\n const handleFocus: FocusEventHandler<HTMLInputElement> = (event) => {\n setFocused(true);\n inputPropsOnFocus?.(event);\n };\n const handleBlur: FocusEventHandler<HTMLInputElement> = (event) => {\n setFocused(false);\n apply(event);\n inputPropsOnBlur?.(event);\n };\n\n const handleKeyDown: KeyboardEventHandler<HTMLInputElement> = (event) => {\n if (event.key === \"Enter\") {\n apply(event);\n }\n inputPropsOnKeyDown?.(event);\n };\n\n const handleMouseDown: MouseEventHandler<HTMLDivElement> = (event) => {\n if (event.target === wrapperRef.current) {\n event.preventDefault();\n innerInputRef.current?.focus();\n }\n onMouseDown?.(event);\n };\n\n return (\n <div\n className={clsx(\n withBaseName(),\n withBaseName(variant),\n {\n [withBaseName(\"focused\")]: !isDisabled && focused,\n [withBaseName(\"disabled\")]: isDisabled,\n [withBaseName(\"readOnly\")]: isReadOnly,\n [withBaseName(validationStatus ?? \"\")]: validationStatus,\n [withBaseName(\"bordered\")]: bordered,\n },\n className,\n )}\n ref={handleWrapperRef}\n onMouseDown={handleMouseDown}\n {...rest}\n >\n {startAdornment && (\n <div className={withBaseName(\"startAdornmentContainer\")}>\n {startAdornment}\n </div>\n )}\n <input\n autoComplete=\"off\"\n aria-describedby={inputAriaDescribedBy}\n aria-labelledby={inputAriaLabelledBy}\n aria-invalid={\n (!isReadOnly && validationStatus === \"error\") || undefined\n }\n aria-label={inputAriaLabel}\n id={inputId}\n className={withBaseName(\"input\")}\n disabled={isDisabled}\n name={name}\n readOnly={isReadOnly}\n ref={handleInputRef}\n tabIndex={isDisabled ? -1 : 0}\n placeholder={placeholder}\n value={isReadOnly && !dateValue ? emptyReadOnlyMarker : dateValue}\n {...restDateInputProps}\n onBlur={handleBlur}\n onChange={handleChange}\n onKeyDown={handleKeyDown}\n onFocus={!isDisabled ? handleFocus : undefined}\n required={isRequired}\n />\n <div className={withBaseName(\"endAdornmentContainer\")}>\n {!isDisabled && validationStatus && (\n <StatusAdornment status={validationStatus} />\n )}\n {endAdornment}\n </div>\n <div className={withBaseName(\"activationIndicator\")} />\n </div>\n );\n },\n);\n"],"names":["dateInputCss"],"mappings":"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"}
@@ -28,7 +28,7 @@ export declare enum DateParserField {
28
28
  /**
29
29
  * Props for the DateInputRange component.
30
30
  */
31
- export interface DateInputRangeProps extends Omit<ComponentPropsWithoutRef<"div">, "defaultValue" | "onChange">, Omit<InputProps, "defaultValue" | "inputRef" | "value" | "onChange"> {
31
+ export interface DateInputRangeProps extends Omit<ComponentPropsWithoutRef<"div">, "defaultValue" | "onChange">, Omit<InputProps, "defaultValue" | "inputRef" | "name" | "value" | "onChange"> {
32
32
  /**
33
33
  * Styling variant with full border. Defaults to false.
34
34
  */
@@ -47,11 +47,19 @@ export interface DateInputRangeProps extends Omit<ComponentPropsWithoutRef<"div"
47
47
  * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dateInput#Attributes
48
48
  */
49
49
  startInputProps?: InputHTMLAttributes<HTMLInputElement>;
50
+ /**
51
+ * The name applied to the start date input.
52
+ */
53
+ startName?: string;
50
54
  /**
51
55
  * Attributes applied to the end `input` element.
52
56
  * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dateInput#Attributes
53
57
  */
54
58
  endInputProps?: InputHTMLAttributes<HTMLInputElement>;
59
+ /**
60
+ * The name applied to the end date input.
61
+ */
62
+ endName?: string;
55
63
  /**
56
64
  * If `true`, the component is read-only.
57
65
  */
@@ -27,6 +27,10 @@ export interface DateInputSingleProps extends Omit<ComponentPropsWithoutRef<"div
27
27
  * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dateInput#Attributes
28
28
  */
29
29
  inputProps?: InputHTMLAttributes<HTMLInputElement>;
30
+ /**
31
+ * The name applied to the input.
32
+ */
33
+ name?: string;
30
34
  /**
31
35
  * If `true`, the component is read-only.
32
36
  */
@@ -44,7 +44,7 @@ export interface LocalizationProviderProps<TDate extends DateFrameworkType = Dat
44
44
  export type LocalizationProviderContext<TDate extends DateFrameworkType = DateFrameworkType> = {
45
45
  [K in keyof LocalizationProviderValue<TDate>]: LocalizationProviderValue<TDate>[K] | null;
46
46
  };
47
- export declare const LocalizationProvider: <TDate extends DateFrameworkType = DateFrameworkType, TLocale = undefined>(props: LocalizationProviderProps<TDate, TLocale>) => import("react/jsx-runtime").JSX.Element;
47
+ export declare const LocalizationProvider: <TDate extends DateFrameworkType = DateFrameworkType, TLocale = undefined>(props: LocalizationProviderProps<TDate, TLocale>) => import("react").JSX.Element;
48
48
  /**
49
49
  * Custom hook to access the localization context.
50
50
  *
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@salt-ds/date-components",
3
- "version": "1.0.0",
3
+ "version": "1.1.1",
4
4
  "license": "Apache-2.0",
5
5
  "repository": {
6
6
  "type": "git",
@@ -9,23 +9,23 @@
9
9
  },
10
10
  "bugs": "https://github.com/jpmorganchase/salt-ds/issues",
11
11
  "main": "dist-cjs/index.js",
12
+ "typings": "dist-types/index.d.ts",
12
13
  "files": [
13
14
  "css",
14
15
  "dist-cjs",
15
16
  "dist-es",
16
- "dist-types",
17
- "CHANGELOG.md"
17
+ "dist-types"
18
18
  ],
19
19
  "sideEffects": [
20
20
  "*.css"
21
21
  ],
22
22
  "dependencies": {
23
- "@floating-ui/react": "^0.26.28",
24
- "@salt-ds/core": "^1.64.0",
25
- "@salt-ds/date-adapters": "^1.0.0",
26
- "@salt-ds/icons": "^1.18.0",
27
- "@salt-ds/styles": "0.3.0",
28
- "@salt-ds/window": "0.1.1",
23
+ "@floating-ui/react": "^0.27.19",
24
+ "@salt-ds/core": "^1.72.0",
25
+ "@salt-ds/date-adapters": "^1.0.2",
26
+ "@salt-ds/icons": "^1.18.3",
27
+ "@salt-ds/styles": "0.4.1",
28
+ "@salt-ds/window": "0.1.2",
29
29
  "clsx": "^2.0.0"
30
30
  },
31
31
  "devDependencies": {
@@ -48,13 +48,13 @@
48
48
  }
49
49
  },
50
50
  "publishConfig": {
51
- "directory": "../../dist/salt-ds-date-components",
51
+ "main": "dist-cjs/index.js",
52
+ "module": "dist-es/index.js",
52
53
  "provenance": true
53
54
  },
54
55
  "scripts": {
55
56
  "build": "yarn node ../../scripts/build.mjs",
56
57
  "bundle:css": "yarn node ./scripts/bundleCSS.mjs"
57
58
  },
58
- "module": "dist-es/index.js",
59
- "typings": "dist-types/index.d.ts"
60
- }
59
+ "module": "dist-es/index.js"
60
+ }