@salt-ds/lab 1.0.0-alpha.57 → 1.0.0-alpha.59
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 +301 -0
- package/css/salt-lab.css +192 -163
- package/dist-cjs/calendar/useCalendarSelection.js.map +1 -1
- package/dist-cjs/date-picker/DatePicker.js +3 -2
- package/dist-cjs/date-picker/DatePicker.js.map +1 -1
- package/dist-cjs/date-picker/DatePickerOverlayProvider.js +5 -2
- package/dist-cjs/date-picker/DatePickerOverlayProvider.js.map +1 -1
- package/dist-cjs/date-picker/DatePickerRangeInput.js +3 -3
- package/dist-cjs/date-picker/DatePickerRangeInput.js.map +1 -1
- package/dist-cjs/date-picker/DatePickerSingleInput.js +2 -2
- package/dist-cjs/date-picker/DatePickerSingleInput.js.map +1 -1
- package/dist-cjs/dialog/DialogHeader.css.js +1 -1
- package/dist-cjs/dialog/DialogHeader.js +2 -2
- package/dist-cjs/dialog/DialogHeader.js.map +1 -1
- package/dist-cjs/index.js +4 -8
- package/dist-cjs/index.js.map +1 -1
- package/dist-cjs/overlay/OverlayHeader.css.js +1 -1
- package/dist-cjs/overlay/OverlayHeader.js +2 -2
- package/dist-cjs/overlay/OverlayHeader.js.map +1 -1
- package/dist-cjs/stepped-tracker/Step.Connector.css.js +6 -0
- package/dist-cjs/stepped-tracker/Step.Connector.css.js.map +1 -0
- package/dist-cjs/stepped-tracker/Step.Connector.js +21 -0
- package/dist-cjs/stepped-tracker/Step.Connector.js.map +1 -0
- package/dist-cjs/stepped-tracker/Step.Description.css.js +6 -0
- package/dist-cjs/stepped-tracker/Step.Description.css.js.map +1 -0
- package/dist-cjs/stepped-tracker/Step.Description.js +35 -0
- package/dist-cjs/stepped-tracker/Step.Description.js.map +1 -0
- package/dist-cjs/stepped-tracker/Step.ExpandTrigger.css.js +6 -0
- package/dist-cjs/stepped-tracker/Step.ExpandTrigger.css.js.map +1 -0
- package/dist-cjs/stepped-tracker/Step.ExpandTrigger.js +38 -0
- package/dist-cjs/stepped-tracker/Step.ExpandTrigger.js.map +1 -0
- package/dist-cjs/stepped-tracker/Step.Icon.css.js +6 -0
- package/dist-cjs/stepped-tracker/Step.Icon.css.js.map +1 -0
- package/dist-cjs/stepped-tracker/Step.Icon.js +57 -0
- package/dist-cjs/stepped-tracker/Step.Icon.js.map +1 -0
- package/dist-cjs/stepped-tracker/Step.Label.css.js +6 -0
- package/dist-cjs/stepped-tracker/Step.Label.css.js.map +1 -0
- package/dist-cjs/stepped-tracker/Step.Label.js +37 -0
- package/dist-cjs/stepped-tracker/Step.Label.js.map +1 -0
- package/dist-cjs/stepped-tracker/Step.SROnly.css.js +6 -0
- package/dist-cjs/stepped-tracker/Step.SROnly.css.js.map +1 -0
- package/dist-cjs/stepped-tracker/Step.SROnly.js +21 -0
- package/dist-cjs/stepped-tracker/Step.SROnly.js.map +1 -0
- package/dist-cjs/stepped-tracker/Step.css.js +6 -0
- package/dist-cjs/stepped-tracker/Step.css.js.map +1 -0
- package/dist-cjs/stepped-tracker/Step.js +161 -0
- package/dist-cjs/stepped-tracker/Step.js.map +1 -0
- package/dist-cjs/stepped-tracker/SteppedTracker.Provider.js +19 -0
- package/dist-cjs/stepped-tracker/SteppedTracker.Provider.js.map +1 -0
- package/dist-cjs/stepped-tracker/SteppedTracker.css.js +1 -1
- package/dist-cjs/stepped-tracker/SteppedTracker.js +10 -33
- package/dist-cjs/stepped-tracker/SteppedTracker.js.map +1 -1
- package/dist-cjs/stepped-tracker/stepReducer.js +109 -0
- package/dist-cjs/stepped-tracker/stepReducer.js.map +1 -0
- package/dist-cjs/stepped-tracker/useStepReducer.js +16 -0
- package/dist-cjs/stepped-tracker/useStepReducer.js.map +1 -0
- package/dist-cjs/stepped-tracker/utils.js +86 -0
- package/dist-cjs/stepped-tracker/utils.js.map +1 -0
- package/dist-es/calendar/useCalendarSelection.js.map +1 -1
- package/dist-es/date-picker/DatePicker.js +3 -2
- package/dist-es/date-picker/DatePicker.js.map +1 -1
- package/dist-es/date-picker/DatePickerOverlayProvider.js +5 -2
- package/dist-es/date-picker/DatePickerOverlayProvider.js.map +1 -1
- package/dist-es/date-picker/DatePickerRangeInput.js +4 -4
- package/dist-es/date-picker/DatePickerRangeInput.js.map +1 -1
- package/dist-es/date-picker/DatePickerSingleInput.js +3 -3
- package/dist-es/date-picker/DatePickerSingleInput.js.map +1 -1
- package/dist-es/dialog/DialogHeader.css.js +1 -1
- package/dist-es/dialog/DialogHeader.js +3 -3
- package/dist-es/dialog/DialogHeader.js.map +1 -1
- package/dist-es/index.js +2 -4
- package/dist-es/index.js.map +1 -1
- package/dist-es/overlay/OverlayHeader.css.js +1 -1
- package/dist-es/overlay/OverlayHeader.js +3 -3
- package/dist-es/overlay/OverlayHeader.js.map +1 -1
- package/dist-es/stepped-tracker/Step.Connector.css.js +4 -0
- package/dist-es/stepped-tracker/Step.Connector.css.js.map +1 -0
- package/dist-es/stepped-tracker/Step.Connector.js +19 -0
- package/dist-es/stepped-tracker/Step.Connector.js.map +1 -0
- package/dist-es/stepped-tracker/Step.Description.css.js +4 -0
- package/dist-es/stepped-tracker/Step.Description.css.js.map +1 -0
- package/dist-es/stepped-tracker/Step.Description.js +33 -0
- package/dist-es/stepped-tracker/Step.Description.js.map +1 -0
- package/dist-es/stepped-tracker/Step.ExpandTrigger.css.js +4 -0
- package/dist-es/stepped-tracker/Step.ExpandTrigger.css.js.map +1 -0
- package/dist-es/stepped-tracker/Step.ExpandTrigger.js +36 -0
- package/dist-es/stepped-tracker/Step.ExpandTrigger.js.map +1 -0
- package/dist-es/stepped-tracker/Step.Icon.css.js +4 -0
- package/dist-es/stepped-tracker/Step.Icon.css.js.map +1 -0
- package/dist-es/stepped-tracker/Step.Icon.js +55 -0
- package/dist-es/stepped-tracker/Step.Icon.js.map +1 -0
- package/dist-es/stepped-tracker/Step.Label.css.js +4 -0
- package/dist-es/stepped-tracker/Step.Label.css.js.map +1 -0
- package/dist-es/stepped-tracker/Step.Label.js +35 -0
- package/dist-es/stepped-tracker/Step.Label.js.map +1 -0
- package/dist-es/stepped-tracker/Step.SROnly.css.js +4 -0
- package/dist-es/stepped-tracker/Step.SROnly.css.js.map +1 -0
- package/dist-es/stepped-tracker/Step.SROnly.js +19 -0
- package/dist-es/stepped-tracker/Step.SROnly.js.map +1 -0
- package/dist-es/stepped-tracker/Step.css.js +4 -0
- package/dist-es/stepped-tracker/Step.css.js.map +1 -0
- package/dist-es/stepped-tracker/Step.js +159 -0
- package/dist-es/stepped-tracker/Step.js.map +1 -0
- package/dist-es/stepped-tracker/SteppedTracker.Provider.js +15 -0
- package/dist-es/stepped-tracker/SteppedTracker.Provider.js.map +1 -0
- package/dist-es/stepped-tracker/SteppedTracker.css.js +1 -1
- package/dist-es/stepped-tracker/SteppedTracker.js +11 -34
- package/dist-es/stepped-tracker/SteppedTracker.js.map +1 -1
- package/dist-es/stepped-tracker/stepReducer.js +107 -0
- package/dist-es/stepped-tracker/stepReducer.js.map +1 -0
- package/dist-es/stepped-tracker/useStepReducer.js +14 -0
- package/dist-es/stepped-tracker/useStepReducer.js.map +1 -0
- package/dist-es/stepped-tracker/utils.js +80 -0
- package/dist-es/stepped-tracker/utils.js.map +1 -0
- package/dist-types/date-picker/DatePicker.d.ts +1 -1
- package/dist-types/date-picker/DatePickerActions.d.ts +2 -2
- package/dist-types/date-picker/DatePickerOverlayProvider.d.ts +4 -0
- package/dist-types/date-picker/DatePickerRangeInput.d.ts +1 -1
- package/dist-types/date-picker/DatePickerRangePanel.d.ts +1 -1
- package/dist-types/date-picker/DatePickerSinglePanel.d.ts +1 -1
- package/dist-types/index.d.ts +0 -1
- package/dist-types/localization-provider/LocalizationProvider.d.ts +2 -2
- package/dist-types/stepped-tracker/Step.Connector.d.ts +1 -0
- package/dist-types/stepped-tracker/Step.Description.d.ts +4 -0
- package/dist-types/stepped-tracker/Step.ExpandTrigger.d.ts +5 -0
- package/dist-types/stepped-tracker/Step.Icon.d.ts +8 -0
- package/dist-types/stepped-tracker/Step.Label.d.ts +4 -0
- package/dist-types/stepped-tracker/Step.SROnly.d.ts +5 -0
- package/dist-types/stepped-tracker/Step.d.ts +2 -0
- package/dist-types/stepped-tracker/Step.types.d.ts +21 -0
- package/dist-types/stepped-tracker/SteppedTracker.Provider.d.ts +9 -0
- package/dist-types/stepped-tracker/SteppedTracker.d.ts +2 -16
- package/dist-types/stepped-tracker/SteppedTracker.types.d.ts +6 -0
- package/dist-types/stepped-tracker/index.d.ts +5 -2
- package/dist-types/stepped-tracker/stepReducer.d.ts +2 -0
- package/dist-types/stepped-tracker/stepReducer.types.d.ts +25 -0
- package/dist-types/stepped-tracker/useStepReducer.d.ts +3 -0
- package/dist-types/stepped-tracker/utils.d.ts +7 -0
- package/package.json +15 -13
- package/dist-cjs/skip-link/SkipLink.css.js +0 -6
- package/dist-cjs/skip-link/SkipLink.css.js.map +0 -1
- package/dist-cjs/skip-link/SkipLink.js +0 -36
- package/dist-cjs/skip-link/SkipLink.js.map +0 -1
- package/dist-cjs/skip-link/SkipLinks.css.js +0 -6
- package/dist-cjs/skip-link/SkipLinks.css.js.map +0 -1
- package/dist-cjs/skip-link/SkipLinks.js +0 -24
- package/dist-cjs/skip-link/SkipLinks.js.map +0 -1
- package/dist-cjs/skip-link/internal/useManageFocusOnTarget.js +0 -59
- package/dist-cjs/skip-link/internal/useManageFocusOnTarget.js.map +0 -1
- package/dist-cjs/stepped-tracker/StepLabel/StepLabel.css.js +0 -6
- package/dist-cjs/stepped-tracker/StepLabel/StepLabel.css.js.map +0 -1
- package/dist-cjs/stepped-tracker/StepLabel/StepLabel.js +0 -25
- package/dist-cjs/stepped-tracker/StepLabel/StepLabel.js.map +0 -1
- package/dist-cjs/stepped-tracker/SteppedTrackerContext.js +0 -43
- package/dist-cjs/stepped-tracker/SteppedTrackerContext.js.map +0 -1
- package/dist-cjs/stepped-tracker/TrackerConnector/TrackerConnector.css.js +0 -6
- package/dist-cjs/stepped-tracker/TrackerConnector/TrackerConnector.css.js.map +0 -1
- package/dist-cjs/stepped-tracker/TrackerConnector/TrackerConnector.js +0 -22
- package/dist-cjs/stepped-tracker/TrackerConnector/TrackerConnector.js.map +0 -1
- package/dist-cjs/stepped-tracker/TrackerStep/TrackerStep.css.js +0 -6
- package/dist-cjs/stepped-tracker/TrackerStep/TrackerStep.css.js.map +0 -1
- package/dist-cjs/stepped-tracker/TrackerStep/TrackerStep.js +0 -96
- package/dist-cjs/stepped-tracker/TrackerStep/TrackerStep.js.map +0 -1
- package/dist-es/skip-link/SkipLink.css.js +0 -4
- package/dist-es/skip-link/SkipLink.css.js.map +0 -1
- package/dist-es/skip-link/SkipLink.js +0 -34
- package/dist-es/skip-link/SkipLink.js.map +0 -1
- package/dist-es/skip-link/SkipLinks.css.js +0 -4
- package/dist-es/skip-link/SkipLinks.css.js.map +0 -1
- package/dist-es/skip-link/SkipLinks.js +0 -22
- package/dist-es/skip-link/SkipLinks.js.map +0 -1
- package/dist-es/skip-link/internal/useManageFocusOnTarget.js +0 -57
- package/dist-es/skip-link/internal/useManageFocusOnTarget.js.map +0 -1
- package/dist-es/stepped-tracker/StepLabel/StepLabel.css.js +0 -4
- package/dist-es/stepped-tracker/StepLabel/StepLabel.css.js.map +0 -1
- package/dist-es/stepped-tracker/StepLabel/StepLabel.js +0 -23
- package/dist-es/stepped-tracker/StepLabel/StepLabel.js.map +0 -1
- package/dist-es/stepped-tracker/SteppedTrackerContext.js +0 -38
- package/dist-es/stepped-tracker/SteppedTrackerContext.js.map +0 -1
- package/dist-es/stepped-tracker/TrackerConnector/TrackerConnector.css.js +0 -4
- package/dist-es/stepped-tracker/TrackerConnector/TrackerConnector.css.js.map +0 -1
- package/dist-es/stepped-tracker/TrackerConnector/TrackerConnector.js +0 -20
- package/dist-es/stepped-tracker/TrackerConnector/TrackerConnector.js.map +0 -1
- package/dist-es/stepped-tracker/TrackerStep/TrackerStep.css.js +0 -4
- package/dist-es/stepped-tracker/TrackerStep/TrackerStep.css.js.map +0 -1
- package/dist-es/stepped-tracker/TrackerStep/TrackerStep.js +0 -94
- package/dist-es/stepped-tracker/TrackerStep/TrackerStep.js.map +0 -1
- package/dist-types/skip-link/SkipLink.d.ts +0 -15
- package/dist-types/skip-link/SkipLinks.d.ts +0 -2
- package/dist-types/skip-link/index.d.ts +0 -2
- package/dist-types/skip-link/internal/useManageFocusOnTarget.d.ts +0 -10
- package/dist-types/stepped-tracker/StepLabel/StepLabel.d.ts +0 -9
- package/dist-types/stepped-tracker/StepLabel/index.d.ts +0 -1
- package/dist-types/stepped-tracker/SteppedTrackerContext.d.ts +0 -18
- package/dist-types/stepped-tracker/TrackerConnector/TrackerConnector.d.ts +0 -9
- package/dist-types/stepped-tracker/TrackerConnector/index.d.ts +0 -1
- package/dist-types/stepped-tracker/TrackerStep/TrackerStep.d.ts +0 -18
- package/dist-types/stepped-tracker/TrackerStep/index.d.ts +0 -2
package/css/salt-lab.css
CHANGED
|
@@ -1172,12 +1172,14 @@
|
|
|
1172
1172
|
padding-bottom: var(--salt-spacing-300);
|
|
1173
1173
|
padding-left: var(--salt-spacing-300);
|
|
1174
1174
|
padding-right: var(--salt-spacing-300);
|
|
1175
|
-
align-items: center;
|
|
1176
1175
|
display: flex;
|
|
1177
1176
|
flex-direction: row;
|
|
1178
1177
|
gap: var(--salt-spacing-100);
|
|
1179
1178
|
box-sizing: border-box;
|
|
1180
1179
|
}
|
|
1180
|
+
.saltDialogHeader-header {
|
|
1181
|
+
margin: 0;
|
|
1182
|
+
}
|
|
1181
1183
|
.saltDialogHeader-container {
|
|
1182
1184
|
flex-grow: 1;
|
|
1183
1185
|
margin: 0;
|
|
@@ -1193,6 +1195,7 @@
|
|
|
1193
1195
|
}
|
|
1194
1196
|
.saltDialogHeader .saltStatusIndicator.saltIcon {
|
|
1195
1197
|
--icon-size: var(--salt-text-h2-lineHeight);
|
|
1198
|
+
padding-top: calc((var(--salt-size-base) - var(--salt-text-h2-lineHeight)) / 2);
|
|
1196
1199
|
}
|
|
1197
1200
|
.saltDialogHeader-withAccent {
|
|
1198
1201
|
position: relative;
|
|
@@ -2395,7 +2398,6 @@
|
|
|
2395
2398
|
.saltOverlayHeader {
|
|
2396
2399
|
padding: var(--salt-spacing-100);
|
|
2397
2400
|
width: 100%;
|
|
2398
|
-
align-items: center;
|
|
2399
2401
|
display: flex;
|
|
2400
2402
|
flex-direction: row;
|
|
2401
2403
|
justify-content: stretch;
|
|
@@ -2517,58 +2519,6 @@
|
|
|
2517
2519
|
display: none;
|
|
2518
2520
|
}
|
|
2519
2521
|
|
|
2520
|
-
/* src/skip-link/SkipLink.css */
|
|
2521
|
-
.saltSkipLink {
|
|
2522
|
-
--skipLink-padding: var(--saltSkipLink-padding, var(--salt-size-unit));
|
|
2523
|
-
--skipLink-margin: var(--saltSkipLink-margin, var(--salt-size-unit));
|
|
2524
|
-
--skipLink-background: var(--saltSkipLink-background, var(--salt-actionable-primary-background));
|
|
2525
|
-
--skipLink-color: var(--saltSkipLink-color, var(--salt-content-primary-foreground));
|
|
2526
|
-
}
|
|
2527
|
-
.saltSkipLink {
|
|
2528
|
-
--saltLink-color-focus: var(--skipLink-color);
|
|
2529
|
-
}
|
|
2530
|
-
.saltSkipLink-target {
|
|
2531
|
-
--skipLink-target-focus: var(--salt-focused-outline);
|
|
2532
|
-
}
|
|
2533
|
-
.saltSkipLink {
|
|
2534
|
-
top: 0;
|
|
2535
|
-
left: 0;
|
|
2536
|
-
width: 1px;
|
|
2537
|
-
height: 1px;
|
|
2538
|
-
display: block;
|
|
2539
|
-
opacity: 0;
|
|
2540
|
-
overflow: hidden;
|
|
2541
|
-
position: absolute;
|
|
2542
|
-
}
|
|
2543
|
-
.saltSkipLink:focus {
|
|
2544
|
-
opacity: 1;
|
|
2545
|
-
width: auto;
|
|
2546
|
-
height: auto;
|
|
2547
|
-
white-space: nowrap;
|
|
2548
|
-
margin: var(--skipLink-margin);
|
|
2549
|
-
padding: calc(var(--skipLink-padding) - 1px) var(--skipLink-padding) var(--skipLink-padding);
|
|
2550
|
-
background: var(--skipLink-background);
|
|
2551
|
-
color: var(--skipLink-color);
|
|
2552
|
-
box-shadow: var(--salt-overlayable-shadow-popout);
|
|
2553
|
-
}
|
|
2554
|
-
.saltSkipLink {
|
|
2555
|
-
font-size: var(--salt-text-fontSize);
|
|
2556
|
-
font-family: var(--saltSkipLink-fontFamily, var(--salt-text-fontFamily));
|
|
2557
|
-
line-height: var(--saltSkipLink-lineHeight, var(--salt-text-lineHeight));
|
|
2558
|
-
}
|
|
2559
|
-
.saltSkipLink-target {
|
|
2560
|
-
outline: var(--skipLink-target-focus);
|
|
2561
|
-
}
|
|
2562
|
-
|
|
2563
|
-
/* src/skip-link/SkipLinks.css */
|
|
2564
|
-
.saltSkipLinks {
|
|
2565
|
-
position: relative;
|
|
2566
|
-
float: left;
|
|
2567
|
-
list-style: none;
|
|
2568
|
-
margin: 0;
|
|
2569
|
-
padding: 0;
|
|
2570
|
-
}
|
|
2571
|
-
|
|
2572
2522
|
/* src/slider/Slider.css */
|
|
2573
2523
|
.saltSlider {
|
|
2574
2524
|
display: grid;
|
|
@@ -2720,21 +2670,202 @@
|
|
|
2720
2670
|
letter-spacing: var(--salt-text-letterSpacing);
|
|
2721
2671
|
}
|
|
2722
2672
|
|
|
2673
|
+
/* src/stepped-tracker/Step.Connector.css */
|
|
2674
|
+
.saltStepConnector {
|
|
2675
|
+
grid-area: connector;
|
|
2676
|
+
transition-duration: inherit;
|
|
2677
|
+
transition-timing-function: inherit;
|
|
2678
|
+
transition-property: opacity, min-height;
|
|
2679
|
+
}
|
|
2680
|
+
.saltSteppedTracker-horizontal .saltStepConnector {
|
|
2681
|
+
position: absolute;
|
|
2682
|
+
transform: translateY(-100%);
|
|
2683
|
+
top: calc(var(--step-icon-size) / 2);
|
|
2684
|
+
left: calc(50% + calc(var(--step-icon-size) / 2 + var(--salt-spacing-100)));
|
|
2685
|
+
right: calc(-50% + calc(var(--step-icon-size) / 2 + var(--salt-spacing-100)));
|
|
2686
|
+
border-top-width: var(--salt-size-border-strong);
|
|
2687
|
+
border-top-style: var(--salt-track-borderStyle-incomplete);
|
|
2688
|
+
border-top-color: var(--salt-track-borderColor);
|
|
2689
|
+
}
|
|
2690
|
+
.saltSteppedTracker-horizontal .saltStep-stage-completed > .saltStepConnector,
|
|
2691
|
+
.saltSteppedTracker-horizontal .saltStep-stage-inprogress > .saltStepConnector {
|
|
2692
|
+
border-top-style: var(--salt-track-borderStyle-complete);
|
|
2693
|
+
}
|
|
2694
|
+
.saltSteppedTracker-vertical .saltStepConnector {
|
|
2695
|
+
min-height: var(--salt-size-base);
|
|
2696
|
+
align-self: stretch;
|
|
2697
|
+
justify-self: center;
|
|
2698
|
+
border-left-width: var(--salt-size-border-strong);
|
|
2699
|
+
border-left-style: var(--salt-track-borderStyle-incomplete);
|
|
2700
|
+
border-left-color: var(--salt-track-borderColor);
|
|
2701
|
+
}
|
|
2702
|
+
.saltSteppedTracker-vertical .saltStep-stage-completed > .saltStepConnector,
|
|
2703
|
+
.saltSteppedTracker-vertical .saltStep-stage-inprogress > .saltStepConnector {
|
|
2704
|
+
border-left-style: var(--salt-track-borderStyle-complete);
|
|
2705
|
+
}
|
|
2706
|
+
.saltStep-depth-0.saltStep:not(.saltStep-expanded):last-child > .saltStepConnector {
|
|
2707
|
+
opacity: 0;
|
|
2708
|
+
min-height: 0;
|
|
2709
|
+
}
|
|
2710
|
+
.saltStep-depth-0.saltStep-expanded:last-child .saltStep:not(.saltStep-expanded):last-child .saltStepConnector {
|
|
2711
|
+
opacity: 0;
|
|
2712
|
+
min-height: 0;
|
|
2713
|
+
}
|
|
2714
|
+
|
|
2715
|
+
/* src/stepped-tracker/Step.Description.css */
|
|
2716
|
+
.saltStepDescription {
|
|
2717
|
+
grid-area: description;
|
|
2718
|
+
}
|
|
2719
|
+
.saltSteppedTracker-vertical .saltStepDescription {
|
|
2720
|
+
padding-bottom: var(--salt-spacing-300);
|
|
2721
|
+
padding-left: calc((var(--step-depth)) * var(--salt-spacing-100));
|
|
2722
|
+
}
|
|
2723
|
+
.saltStep-status-warning > .saltStepDescription {
|
|
2724
|
+
color: var(--salt-status-warning-foreground-informative);
|
|
2725
|
+
}
|
|
2726
|
+
.saltStep-status-error > .saltStepDescription {
|
|
2727
|
+
color: var(--salt-status-error-foreground-informative);
|
|
2728
|
+
}
|
|
2729
|
+
|
|
2730
|
+
/* src/stepped-tracker/Step.ExpandTrigger.css */
|
|
2731
|
+
.saltStepExpandTrigger {
|
|
2732
|
+
grid-area: expand;
|
|
2733
|
+
}
|
|
2734
|
+
.saltButton.saltStepExpandTrigger:focus-visible {
|
|
2735
|
+
outline-offset: calc(-1 * var(--salt-focused-outlineWidth));
|
|
2736
|
+
}
|
|
2737
|
+
|
|
2738
|
+
/* src/stepped-tracker/Step.Icon.css */
|
|
2739
|
+
.saltStepIcon {
|
|
2740
|
+
grid-area: icon;
|
|
2741
|
+
display: flex;
|
|
2742
|
+
justify-content: center;
|
|
2743
|
+
align-items: center;
|
|
2744
|
+
justify-self: center;
|
|
2745
|
+
}
|
|
2746
|
+
.saltSteppedTracker-vertical .saltStepIcon {
|
|
2747
|
+
height: var(--salt-size-base);
|
|
2748
|
+
}
|
|
2749
|
+
.saltStep-stage-pending > .saltStepIcon {
|
|
2750
|
+
--saltIcon-color: var(--salt-status-static-foreground);
|
|
2751
|
+
}
|
|
2752
|
+
.saltStep-stage-locked > .saltStepIcon {
|
|
2753
|
+
--saltIcon-color: var(--salt-status-static-foreground);
|
|
2754
|
+
}
|
|
2755
|
+
.saltStep-stage-inprogress > .saltStepIcon {
|
|
2756
|
+
--saltIcon-color: var(--salt-status-info-foreground-decorative);
|
|
2757
|
+
}
|
|
2758
|
+
.saltStep-stage-active > .saltStepIcon {
|
|
2759
|
+
--saltIcon-color: var(--salt-status-info-foreground-decorative);
|
|
2760
|
+
}
|
|
2761
|
+
.saltStep-stage-completed > .saltStepIcon {
|
|
2762
|
+
--saltIcon-color: var(--salt-status-success-foreground-decorative);
|
|
2763
|
+
}
|
|
2764
|
+
.saltStep-status-warning > .saltStepIcon {
|
|
2765
|
+
--saltIcon-color: var(--salt-status-warning-foreground-decorative);
|
|
2766
|
+
}
|
|
2767
|
+
.saltStep-status-error > .saltStepIcon {
|
|
2768
|
+
--saltIcon-color: var(--salt-status-error-foreground-decorative);
|
|
2769
|
+
}
|
|
2770
|
+
|
|
2771
|
+
/* src/stepped-tracker/Step.Label.css */
|
|
2772
|
+
.saltStepLabel {
|
|
2773
|
+
grid-area: label;
|
|
2774
|
+
}
|
|
2775
|
+
.saltSteppedTracker-horizontal .saltStepLabel {
|
|
2776
|
+
margin-top: var(--salt-spacing-50);
|
|
2777
|
+
}
|
|
2778
|
+
.saltSteppedTracker-vertical .saltStepLabel {
|
|
2779
|
+
padding-top: calc((var(--salt-size-base) - var(--salt-text-label-lineHeight)) / 2);
|
|
2780
|
+
padding-bottom: calc((var(--salt-size-base) - var(--salt-text-label-lineHeight)) / 2);
|
|
2781
|
+
padding-left: calc((var(--step-depth)) * var(--salt-spacing-100));
|
|
2782
|
+
}
|
|
2783
|
+
.saltStep-depth-0 > .saltText.saltStepLabel {
|
|
2784
|
+
font-weight: var(--salt-text-fontWeight-strong);
|
|
2785
|
+
}
|
|
2786
|
+
|
|
2787
|
+
/* src/stepped-tracker/Step.SROnly.css */
|
|
2788
|
+
.saltStepSROnly {
|
|
2789
|
+
position: fixed;
|
|
2790
|
+
top: 0;
|
|
2791
|
+
left: 0;
|
|
2792
|
+
transform: translate(-100%, -100%);
|
|
2793
|
+
}
|
|
2794
|
+
|
|
2795
|
+
/* src/stepped-tracker/Step.css */
|
|
2796
|
+
.saltStep {
|
|
2797
|
+
--step-icon-base-size: var(--salt-size-icon, 12px);
|
|
2798
|
+
--step-icon-size-multiplier: var(--saltIcon-size-multiplier, 1.5);
|
|
2799
|
+
--step-icon-size: calc(var(--step-icon-base-size) * var(--step-icon-size-multiplier));
|
|
2800
|
+
--step-depth: var(--saltStep-depth, 0);
|
|
2801
|
+
}
|
|
2802
|
+
.saltSteppedTracker-horizontal .saltStep {
|
|
2803
|
+
position: relative;
|
|
2804
|
+
display: grid;
|
|
2805
|
+
grid-template-columns: 1fr;
|
|
2806
|
+
grid-template-rows: repeat(3, min-content);
|
|
2807
|
+
grid-template-areas: "icon" "label" "description";
|
|
2808
|
+
justify-items: center;
|
|
2809
|
+
align-items: center;
|
|
2810
|
+
text-align: center;
|
|
2811
|
+
flex: 1;
|
|
2812
|
+
padding: 0 var(--salt-spacing-25);
|
|
2813
|
+
}
|
|
2814
|
+
.saltSteppedTracker-vertical .saltStep {
|
|
2815
|
+
display: grid;
|
|
2816
|
+
grid-template-columns: var(--step-icon-size) 1fr min-content;
|
|
2817
|
+
grid-template-areas: "icon label expand" "connector description ." "stepped-tracker stepped-tracker stepped-tracker";
|
|
2818
|
+
justify-items: start;
|
|
2819
|
+
align-items: start;
|
|
2820
|
+
gap: 0 var(--salt-spacing-100);
|
|
2821
|
+
width: 100%;
|
|
2822
|
+
transition-duration: inherit;
|
|
2823
|
+
transition-timing-function: inherit;
|
|
2824
|
+
transition-property: grid-template-rows;
|
|
2825
|
+
}
|
|
2826
|
+
.saltSteppedTracker-vertical .saltStep-terminal {
|
|
2827
|
+
grid-template-areas: "icon label label" "connector description description" "stepped-tracker stepped-tracker stepped-tracker";
|
|
2828
|
+
}
|
|
2829
|
+
.saltSteppedTracker-vertical > .saltStep.saltStep-expanded {
|
|
2830
|
+
grid-template-rows: var(--salt-size-base) min-content 1fr;
|
|
2831
|
+
}
|
|
2832
|
+
.saltSteppedTracker-vertical > .saltStep.saltStep-collapsed {
|
|
2833
|
+
grid-template-rows: var(--salt-size-base) min-content 0fr;
|
|
2834
|
+
}
|
|
2835
|
+
|
|
2723
2836
|
/* src/stepped-tracker/SteppedTracker.css */
|
|
2724
2837
|
.saltSteppedTracker {
|
|
2838
|
+
grid-area: stepped-tracker;
|
|
2839
|
+
width: 100%;
|
|
2840
|
+
height: 100%;
|
|
2725
2841
|
margin: 0;
|
|
2726
2842
|
padding: 0;
|
|
2727
|
-
text-indent: 0;
|
|
2728
2843
|
list-style-type: none;
|
|
2729
|
-
|
|
2730
|
-
|
|
2731
|
-
|
|
2844
|
+
transition-duration: var(--salt-duration-perceptible);
|
|
2845
|
+
transition-timing-function: ease-in-out;
|
|
2846
|
+
transition-property: opacity, visibility;
|
|
2732
2847
|
}
|
|
2733
|
-
|
|
2848
|
+
@media (prefers-reduced-motion) {
|
|
2849
|
+
.saltSteppedTracker {
|
|
2850
|
+
transition-duration: var(--salt-duration-instant);
|
|
2851
|
+
}
|
|
2852
|
+
}
|
|
2853
|
+
.saltSteppedTracker-horizontal {
|
|
2854
|
+
display: flex;
|
|
2734
2855
|
flex-direction: row;
|
|
2735
2856
|
}
|
|
2736
|
-
.saltSteppedTracker
|
|
2857
|
+
.saltSteppedTracker-vertical {
|
|
2858
|
+
display: flex;
|
|
2737
2859
|
flex-direction: column;
|
|
2860
|
+
overflow: hidden;
|
|
2861
|
+
}
|
|
2862
|
+
.saltSteppedTracker-vertical > .saltStep.saltStep-expanded > .saltSteppedTracker {
|
|
2863
|
+
opacity: 1;
|
|
2864
|
+
visibility: visible;
|
|
2865
|
+
}
|
|
2866
|
+
.saltSteppedTracker-vertical > .saltStep.saltStep-collapsed > .saltSteppedTracker {
|
|
2867
|
+
opacity: 0;
|
|
2868
|
+
visibility: hidden;
|
|
2738
2869
|
}
|
|
2739
2870
|
|
|
2740
2871
|
/* src/stepper-input/StepperInput.css */
|
|
@@ -4372,108 +4503,6 @@
|
|
|
4372
4503
|
font-weight: 700;
|
|
4373
4504
|
}
|
|
4374
4505
|
|
|
4375
|
-
/* src/stepped-tracker/StepLabel/StepLabel.css */
|
|
4376
|
-
.saltStepLabel {
|
|
4377
|
-
width: 100%;
|
|
4378
|
-
}
|
|
4379
|
-
.saltSteppedTracker.saltSteppedTracker-horizontal .saltStepLabel {
|
|
4380
|
-
text-align: center;
|
|
4381
|
-
}
|
|
4382
|
-
.saltSteppedTracker.saltSteppedTracker-vertical .saltStepLabel {
|
|
4383
|
-
text-align: left;
|
|
4384
|
-
}
|
|
4385
|
-
|
|
4386
|
-
/* src/stepped-tracker/TrackerConnector/TrackerConnector.css */
|
|
4387
|
-
.saltTrackerConnector {
|
|
4388
|
-
--trackerConnector-style-default: var(--saltTrackerConnector-style-default, var(--salt-track-borderStyle-incomplete));
|
|
4389
|
-
--trackerConnector-style-active: var(--saltTrackerConnector-style-active, var(--salt-track-borderStyle-active));
|
|
4390
|
-
--trackerConnector-color: var(--saltTrackerConnector-color, var(--salt-track-borderColor));
|
|
4391
|
-
--trackerConnector-thickness: var(--saltTrackerConnector-thickness, var(--salt-size-border-strong));
|
|
4392
|
-
--trackerConnector-margin: var(--saltTrackerConnector-margin, var(--salt-spacing-100));
|
|
4393
|
-
--trackerConnector-style-border: var(--trackerConnector-style-default);
|
|
4394
|
-
}
|
|
4395
|
-
.saltTrackerConnector {
|
|
4396
|
-
position: absolute;
|
|
4397
|
-
}
|
|
4398
|
-
.saltSteppedTracker.saltSteppedTracker-horizontal .saltTrackerConnector {
|
|
4399
|
-
border-top-width: var(--trackerConnector-thickness);
|
|
4400
|
-
border-top-style: var(--trackerConnector-style-border);
|
|
4401
|
-
border-top-color: var(--trackerConnector-color);
|
|
4402
|
-
width: calc(100% - (var(--saltIcon-size)) - (var(--trackerConnector-margin) * 2));
|
|
4403
|
-
left: calc(50% + (var(--saltIcon-size) / 2) + var(--trackerConnector-margin));
|
|
4404
|
-
top: calc(var(--saltIcon-size) / 2 - (var(--trackerConnector-thickness) / 2));
|
|
4405
|
-
height: 0;
|
|
4406
|
-
}
|
|
4407
|
-
.saltSteppedTracker.saltSteppedTracker-vertical .saltTrackerConnector {
|
|
4408
|
-
top: calc(50% + (var(--saltIcon-size) / 2) + var(--trackerConnector-margin));
|
|
4409
|
-
left: calc((var(--saltIcon-size) / 2) - (var(--trackerConnector-thickness) / 2));
|
|
4410
|
-
height: calc(100% - (var(--saltIcon-size)) - (var(--trackerConnector-margin) * 2));
|
|
4411
|
-
border-left-width: var(--trackerConnector-thickness);
|
|
4412
|
-
border-left-style: var(--trackerConnector-style-border);
|
|
4413
|
-
border-left-color: var(--trackerConnector-color);
|
|
4414
|
-
}
|
|
4415
|
-
.saltTrackerConnector.saltTrackerConnector-active {
|
|
4416
|
-
--trackerConnector-style-border: var(--trackerConnector-style-active);
|
|
4417
|
-
}
|
|
4418
|
-
|
|
4419
|
-
/* src/stepped-tracker/TrackerStep/TrackerStep.css */
|
|
4420
|
-
.saltTrackerStep {
|
|
4421
|
-
--trackerStep-icon-color-active: var(--saltTrackerStep-icon-color-active, var(--salt-status-info-foreground-decorative));
|
|
4422
|
-
--trackerStep-icon-color-completed: var(--saltTrackerStep-icon-color-completed, var(--salt-status-success-foreground-decorative));
|
|
4423
|
-
--trackerStep-icon-color-warning: var(--saltTrackerStep-icon-color-warning, var(--salt-status-warning-foreground-decorative));
|
|
4424
|
-
--trackerStep-icon-color-error: var(--saltTrackerStep-icon-color-error, var(--salt-status-error-foreground-decorative));
|
|
4425
|
-
--trackerStep-icon-color: var(--saltTrackerStep-icon-color, var(--salt-status-static-foreground));
|
|
4426
|
-
--saltIcon-color: var(--trackerStep-icon-color);
|
|
4427
|
-
--saltIcon-size: var(--saltTrackerStep-icon-size, max(var(--salt-size-icon), 12px));
|
|
4428
|
-
}
|
|
4429
|
-
.saltTrackerStep {
|
|
4430
|
-
margin: 0;
|
|
4431
|
-
text-indent: 0;
|
|
4432
|
-
list-style-type: none;
|
|
4433
|
-
flex: 1;
|
|
4434
|
-
position: relative;
|
|
4435
|
-
display: flex;
|
|
4436
|
-
align-items: center;
|
|
4437
|
-
width: var(--saltTrackerStep-width, 100%);
|
|
4438
|
-
gap: var(--salt-spacing-50);
|
|
4439
|
-
color: var(--salt-content-primary-foreground);
|
|
4440
|
-
font-size: var(--salt-text-label-fontSize);
|
|
4441
|
-
line-height: var(--salt-text-label-lineHeight);
|
|
4442
|
-
}
|
|
4443
|
-
.saltSteppedTracker.saltSteppedTracker-horizontal .saltTrackerStep {
|
|
4444
|
-
flex-direction: column;
|
|
4445
|
-
padding: 0 var(--salt-spacing-25);
|
|
4446
|
-
}
|
|
4447
|
-
.saltSteppedTracker.saltSteppedTracker-vertical .saltTrackerStep {
|
|
4448
|
-
flex-direction: row;
|
|
4449
|
-
min-height: calc(var(--salt-size-base) * 2);
|
|
4450
|
-
width: 100%;
|
|
4451
|
-
}
|
|
4452
|
-
.saltTrackerStep:focus-visible {
|
|
4453
|
-
outline-style: var(--salt-focused-outlineStyle);
|
|
4454
|
-
outline-width: var(--salt-focused-outlineWidth);
|
|
4455
|
-
outline-color: var(--salt-focused-outlineColor);
|
|
4456
|
-
outline-offset: var(--salt-focused-outlineOffset);
|
|
4457
|
-
}
|
|
4458
|
-
.saltTrackerStep .saltTrackerStep-body {
|
|
4459
|
-
width: 100%;
|
|
4460
|
-
display: flex;
|
|
4461
|
-
align-items: center;
|
|
4462
|
-
flex-direction: column;
|
|
4463
|
-
}
|
|
4464
|
-
.saltTrackerStep.saltTrackerStep-status-warning {
|
|
4465
|
-
--trackerStep-icon-color: var(--trackerStep-icon-color-warning);
|
|
4466
|
-
}
|
|
4467
|
-
.saltTrackerStep.saltTrackerStep-status-error {
|
|
4468
|
-
--trackerStep-icon-color: var(--trackerStep-icon-color-error);
|
|
4469
|
-
}
|
|
4470
|
-
.saltTrackerStep.saltTrackerStep-active {
|
|
4471
|
-
--trackerStep-icon-color: var(--trackerStep-icon-color-active);
|
|
4472
|
-
}
|
|
4473
|
-
.saltTrackerStep.saltTrackerStep-stage-completed {
|
|
4474
|
-
--trackerStep-icon-color: var(--trackerStep-icon-color-completed);
|
|
4475
|
-
}
|
|
4476
|
-
|
|
4477
4506
|
/* src/tabs/drag-drop/Draggable.css */
|
|
4478
4507
|
.saltDraggable {
|
|
4479
4508
|
background: transparent;
|
|
@@ -4569,4 +4598,4 @@
|
|
|
4569
4598
|
margin: calc(var(--salt-size-unit) / 2) 0;
|
|
4570
4599
|
}
|
|
4571
4600
|
|
|
4572
|
-
/* src/
|
|
4601
|
+
/* src/d1171a3e-3c90-43e5-8c70-cbbcf0597cc6.css */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useCalendarSelection.js","sources":["../src/calendar/useCalendarSelection.ts"],"sourcesContent":["import { makePrefixer, useControlled } from \"@salt-ds/core\";\nimport type {\n DateFrameworkType,\n SaltDateAdapter,\n} from \"@salt-ds/date-adapters\";\nimport { clsx } from \"clsx\";\nimport type {\n KeyboardEventHandler,\n MouseEventHandler,\n SyntheticEvent,\n} from \"react\";\nimport { useCallback, useMemo } from \"react\";\nimport { useLocalization } from \"../localization-provider\";\nimport { useCalendarContext } from \"./internal/CalendarContext\";\n\n/**\n * Type representing a single date selection.\n */\nexport type SingleDateSelection<TDate extends DateFrameworkType> = TDate;\n\n/**\n * Type representing multiple date selections.\n */\nexport type MultipleDateSelection<TDate extends DateFrameworkType> = TDate[];\n\n/**\n * Type representing a date range selection.\n */\nexport type DateRangeSelection<TDate extends DateFrameworkType> = {\n /**\n * The start date of the range.\n */\n startDate?: TDate | null;\n /**\n * The end date of the range.\n */\n endDate?: TDate | null;\n};\n\n/**\n * Type representing all possible selection value types.\n */\nexport type AllSelectionValueType<TDate extends DateFrameworkType> =\n | SingleDateSelection<TDate>\n | MultipleDateSelection<TDate>\n | DateRangeSelection<TDate>\n | null;\n\n/**\n * Checks if a value is a single date selection.\n * @param value - The value to check.\n * @returns `true` if the value is a single date selection, otherwise `false`.\n */\n// biome-ignore lint/suspicious/noExplicitAny: type guard\nexport function isSingleSelectionValueType<TDate extends DateFrameworkType>(\n value: any,\n): value is TDate {\n return (\n !isMultipleDateSelection<TDate>(value) &&\n !isDateRangeSelection<TDate>(value)\n );\n}\n\n/**\n * Checks if a value is a date range selection.\n * @param value - The value to check.\n * @returns `true` if the value is a date range selection, otherwise `false`.\n */\n// biome-ignore lint/suspicious/noExplicitAny: type guard\nexport function isDateRangeSelection<TDate extends DateFrameworkType>(\n value: any,\n): value is DateRangeSelection<TDate> {\n return (\n value &&\n typeof value === \"object\" &&\n (\"startDate\" in value || \"endDate\" in value)\n );\n}\n\n/**\n * Checks if a value is a multiple date selection.\n * @param value - The value to check.\n * @returns `true` if the value is a multiple date selection, otherwise `false`.\n */\nexport function isMultipleDateSelection<TDate extends DateFrameworkType>(\n // biome-ignore lint/suspicious/noExplicitAny: type guard\n value: any,\n): value is MultipleDateSelection<TDate> {\n return (\n Array.isArray(value) &&\n value.every((item) => isSingleSelectionValueType(item))\n );\n}\n\n/**\n * Base properties for calendar UseCalendarSelection hook.\n * @template SelectionVariantType - The type of the selection variant.\n */\ninterface UseCalendarSelectionBaseProps<TDate extends DateFrameworkType> {\n /**\n * The currently hovered date.\n */\n hoveredDate?: TDate | null;\n /**\n * Function to determine if a day is selectable.\n * @param date - The date to check.\n * @returns `true` if the day is selectable, otherwise `false`.\n */\n isDaySelectable?: (date: TDate) => boolean;\n /**\n * Callback fired when the hovered date changes.\n * @param event - The synthetic event.\n * @param hoveredDate - The new hovered date.\n */\n onHoveredDateChange?: (\n event: SyntheticEvent,\n hoveredDate: TDate | null,\n ) => void;\n}\n\n/**\n * UseCalendar hook props to return a calendar day's status\n */\nexport interface UseCalendarSelectionOffsetProps<\n TDate extends DateFrameworkType,\n> extends Omit<\n UseCalendarSelectionBaseProps<TDate>,\n \"startDateOffset\" | \"endDateOffset\"\n > {\n /**\n * The selection variant, set to \"offset\".\n */\n selectionVariant: \"offset\";\n /**\n * The currently selected date.\n */\n selectedDate?: DateRangeSelection<TDate>;\n /**\n * The default selected date.\n */\n defaultSelectedDate?: DateRangeSelection<TDate>;\n /**\n * Callback fired when the selected date changes.\n * @param event - The synthetic event.\n * @param selectedDate - The new selected date.\n */\n onSelectionChange?: (\n event: SyntheticEvent,\n selectedDate: DateRangeSelection<TDate>,\n ) => void;\n /**\n * Function to calculate the start date offset.\n * @param date - The date to offset.\n * @returns The offset start date.\n */\n startDateOffset?: (date: TDate) => TDate;\n /**\n * Function to calculate the end date offset.\n * @param date - The date to offset.\n * @returns The offset end date.\n */\n endDateOffset?: (date: TDate) => TDate;\n}\n\n/**\n * Properties for the range date selection hook.\n */\nexport interface UseCalendarSelectionRangeProps<TDate extends DateFrameworkType>\n extends UseCalendarSelectionBaseProps<TDate> {\n /**\n * The selection variant, set to \"range\".\n */\n selectionVariant: \"range\";\n /**\n * The currently selected date.\n */\n selectedDate?: DateRangeSelection<TDate>;\n /**\n * The default selected date.\n */\n defaultSelectedDate?: DateRangeSelection<TDate>;\n /**\n * Callback fired when the selected date changes.\n * @param event - The synthetic event.\n * @param selectedDate - The new selected date.\n */\n onSelectionChange?: (\n event: SyntheticEvent,\n selectedDate: DateRangeSelection<TDate>,\n ) => void;\n}\n\n/**\n * Properties for the multi-select date selection hook.\n */\nexport interface UseCalendarSelectionMultiSelectProps<\n TDate extends DateFrameworkType,\n> extends UseCalendarSelectionBaseProps<TDate> {\n /**\n * The selection variant, set to \"multiselect\".\n */\n selectionVariant: \"multiselect\";\n /**\n * The currently selected date.\n */\n selectedDate?: MultipleDateSelection<TDate>;\n /**\n * The default selected date.\n */\n defaultSelectedDate?: MultipleDateSelection<TDate>;\n /**\n * Callback fired when the selected date changes.\n * @param event - The synthetic event.\n * @param selectedDate - The new selected date.\n */\n onSelectionChange?: (\n event: SyntheticEvent,\n selectedDate: MultipleDateSelection<TDate>,\n ) => void;\n}\n\n/**\n * Properties for the single date selection hook.\n */\nexport interface UseCalendarSelectionSingleProps<\n TDate extends DateFrameworkType,\n> extends UseCalendarSelectionBaseProps<TDate> {\n /**\n * The selection variant, set to \"single\".\n */\n selectionVariant: \"single\";\n /**\n * The currently selected date.\n */\n selectedDate?: SingleDateSelection<TDate> | null;\n /**\n * The default selected date.\n */\n defaultSelectedDate?: SingleDateSelection<TDate> | null;\n /**\n * Callback fired when the selected date changes.\n * @param event - The synthetic event.\n * @param selectedDate - The new selected date.\n */\n onSelectionChange?: (\n event: SyntheticEvent,\n selectedDate: SingleDateSelection<TDate> | null,\n ) => void;\n}\n\n/**\n * UseCalendarSelection hook props, wth the selection variant determining the return type of the date selection\n */\nexport type UseCalendarSelectionProps<TDate extends DateFrameworkType> =\n | UseCalendarSelectionSingleProps<TDate>\n | UseCalendarSelectionMultiSelectProps<TDate>\n | UseCalendarSelectionRangeProps<TDate>\n | UseCalendarSelectionOffsetProps<TDate>;\n\nconst withBaseName = makePrefixer(\"saltCalendarDay\");\n\nfunction addOrRemoveFromArray<TDate extends DateFrameworkType>(\n dateAdapter: SaltDateAdapter<TDate>,\n array: AllSelectionValueType<TDate>,\n item: TDate,\n) {\n if (Array.isArray(array)) {\n const filteredArray = array.filter(\n (element) => !dateAdapter.isSame(element, item, \"day\"),\n );\n if (filteredArray.length === array.length) {\n return array.concat(item);\n }\n return filteredArray;\n }\n return [item];\n}\n\nfunction updateRangeSelection<TDate extends DateFrameworkType>(\n datePicker: SaltDateAdapter<TDate>,\n currentSelectedDate: DateRangeSelection<TDate> | undefined,\n newSelectedDate: TDate,\n): DateRangeSelection<TDate> {\n let base = { ...currentSelectedDate };\n if (base?.startDate && base?.endDate) {\n base = { startDate: newSelectedDate };\n } else if (\n base?.startDate &&\n datePicker.compare(newSelectedDate, base.startDate) < 0\n ) {\n base = { startDate: newSelectedDate };\n } else if (\n base?.startDate &&\n datePicker.compare(newSelectedDate, base.startDate) >= 0\n ) {\n base = { ...base, endDate: newSelectedDate };\n } else {\n base = { startDate: newSelectedDate };\n }\n return base;\n}\n\nexport function useCalendarSelection<TDate extends DateFrameworkType>(\n props: UseCalendarSelectionProps<TDate>,\n) {\n const {\n hoveredDate: hoveredDateProp,\n selectedDate: selectedDateProp,\n defaultSelectedDate,\n onSelectionChange,\n onHoveredDateChange,\n isDaySelectable,\n selectionVariant,\n // startDateOffset,\n // endDateOffset,\n } = props;\n const { dateAdapter } = useLocalization<TDate>();\n const [selectedDate, setSelectedDateState] = useControlled({\n controlled: selectedDateProp,\n default: defaultSelectedDate,\n name: \"Calendar\",\n state: \"selectedDate\",\n });\n\n const startDateOffset =\n selectionVariant === \"offset\" ? props.startDateOffset : undefined;\n const endDateOffset =\n selectionVariant === \"offset\" ? props.endDateOffset : undefined;\n\n const getStartDateOffset = useCallback(\n (date: TDate) => {\n if (selectionVariant === \"offset\" && startDateOffset) {\n return startDateOffset(date);\n }\n return date;\n },\n [selectionVariant, startDateOffset],\n );\n\n const getEndDateOffset = useCallback(\n (date: TDate) => {\n if (selectionVariant === \"offset\" && endDateOffset) {\n return endDateOffset(date);\n }\n return date;\n },\n [selectionVariant, endDateOffset],\n );\n\n const setSelectedDate = useCallback(\n (event: SyntheticEvent<HTMLButtonElement>, newSelectedDate: TDate) => {\n if (!isDaySelectable || isDaySelectable(newSelectedDate)) {\n switch (selectionVariant) {\n case \"single\": {\n setSelectedDateState(newSelectedDate);\n onSelectionChange?.(event, newSelectedDate);\n break;\n }\n case \"multiselect\": {\n const newMultiSelectDate = addOrRemoveFromArray<TDate>(\n dateAdapter,\n selectedDate as TDate[],\n newSelectedDate,\n );\n setSelectedDateState(newMultiSelectDate);\n onSelectionChange?.(event, newMultiSelectDate);\n break;\n }\n case \"range\": {\n const newRangeDate = updateRangeSelection<TDate>(\n dateAdapter,\n selectedDate as DateRangeSelection<TDate>,\n newSelectedDate,\n );\n setSelectedDateState(newRangeDate);\n onSelectionChange?.(event, newRangeDate);\n break;\n }\n case \"offset\": {\n const newOffsetDate: DateRangeSelection<TDate> = {\n startDate: getStartDateOffset(newSelectedDate),\n endDate: getEndDateOffset(newSelectedDate),\n };\n setSelectedDateState(newOffsetDate);\n props.onSelectionChange?.(event, newOffsetDate);\n break;\n }\n }\n }\n },\n [isDaySelectable, selectedDate, selectionVariant, onSelectionChange],\n );\n\n const isSelected = useCallback(\n (date: TDate) => {\n if (!selectedDate) {\n return false;\n }\n switch (selectionVariant) {\n case \"single\":\n return (\n isSingleSelectionValueType(selectedDate) &&\n dateAdapter.isSame(selectedDate, date, \"day\")\n );\n case \"multiselect\":\n return (\n Array.isArray(selectedDate) &&\n !!selectedDate.find((element) =>\n dateAdapter.isSame(element, date, \"day\"),\n )\n );\n default:\n return false;\n }\n },\n [dateAdapter, selectionVariant, selectedDate],\n );\n\n const [hoveredDate, setHoveredDateState] = useControlled({\n controlled: hoveredDateProp,\n default: undefined,\n name: \"Calendar\",\n state: \"hoveredDate\",\n });\n\n const setHoveredDate = useCallback(\n (event: SyntheticEvent, date: TDate | null) => {\n setHoveredDateState(date);\n onHoveredDateChange?.(event, date);\n },\n [onHoveredDateChange],\n );\n\n const isHovered = useCallback(\n (date: TDate) => {\n return !!hoveredDate && dateAdapter.isSame(date, hoveredDate, \"day\");\n },\n [hoveredDate],\n );\n\n const isSelectedSpan = useCallback(\n (date: TDate) => {\n if (\n (selectionVariant === \"range\" || selectionVariant === \"offset\") &&\n isDateRangeSelection(selectedDate) &&\n selectedDate?.startDate &&\n selectedDate?.endDate\n ) {\n return (\n dateAdapter.compare(date, selectedDate.startDate) > 0 &&\n dateAdapter.compare(date, selectedDate.endDate) < 0\n );\n }\n return false;\n },\n [selectionVariant, selectedDate],\n );\n const isHoveredSpan = useCallback(\n (date: TDate) => {\n if (\n (selectionVariant === \"range\" || selectionVariant === \"offset\") &&\n isDateRangeSelection(selectedDate) &&\n selectedDate.startDate &&\n !selectedDate.endDate &&\n hoveredDate\n ) {\n const isForwardRange =\n dateAdapter.compare(hoveredDate, selectedDate.startDate) > 0 &&\n ((dateAdapter.compare(date, selectedDate.startDate) > 0 &&\n dateAdapter.compare(date, hoveredDate) < 0) ||\n dateAdapter.isSame(date, hoveredDate, \"day\"));\n\n const isValidDayHovered =\n !isDaySelectable || isDaySelectable(hoveredDate);\n\n return isForwardRange && isValidDayHovered;\n }\n return false;\n },\n [selectionVariant, selectedDate, hoveredDate, isDaySelectable],\n );\n\n const isSelectedStart = useCallback(\n (date: TDate) => {\n if (\n (selectionVariant === \"range\" || selectionVariant === \"offset\") &&\n isDateRangeSelection(selectedDate) &&\n selectedDate.startDate\n ) {\n return dateAdapter.isSame(selectedDate.startDate, date, \"day\");\n }\n return false;\n },\n [selectionVariant, selectedDate],\n );\n\n const isSelectedEnd = useCallback(\n (date: TDate) => {\n if (\n (selectionVariant === \"range\" || selectionVariant === \"offset\") &&\n isDateRangeSelection(selectedDate) &&\n selectedDate.endDate\n ) {\n return dateAdapter.isSame(selectedDate.endDate, date, \"day\");\n }\n return false;\n },\n [selectionVariant, selectedDate],\n );\n\n const isHoveredOffset = useCallback(\n (date: TDate) => {\n if (hoveredDate && selectionVariant === \"offset\") {\n const startDate = getStartDateOffset(hoveredDate);\n const endDate = getEndDateOffset(hoveredDate);\n\n return (\n dateAdapter.compare(date, startDate) >= 0 &&\n dateAdapter.compare(date, endDate) <= 0 &&\n (!isDaySelectable || isDaySelectable(date))\n );\n }\n\n return false;\n },\n [\n getStartDateOffset,\n getEndDateOffset,\n hoveredDate,\n isDaySelectable,\n selectionVariant,\n ],\n );\n\n return useMemo(\n () => ({\n state: {\n selectedDate,\n hoveredDate,\n },\n helpers: {\n setSelectedDate,\n isSelected,\n setHoveredDate,\n isHovered,\n isSelectedSpan,\n isHoveredSpan,\n isSelectedStart,\n isSelectedEnd,\n isHoveredOffset,\n isDaySelectable,\n },\n }),\n [\n selectedDate,\n hoveredDate,\n setSelectedDate,\n isSelected,\n setHoveredDate,\n isHovered,\n isSelectedSpan,\n isHoveredSpan,\n isSelectedStart,\n isSelectedEnd,\n isHoveredOffset,\n isDaySelectable,\n ],\n );\n}\n\nexport function useCalendarSelectionDay<TDate extends DateFrameworkType>({\n date,\n}: { date: TDate }) {\n const {\n helpers: {\n setSelectedDate,\n isSelected,\n setHoveredDate,\n isSelectedSpan,\n isHoveredSpan,\n isSelectedStart,\n isSelectedEnd,\n isHovered,\n isHoveredOffset,\n isDaySelectable,\n },\n } = useCalendarContext<TDate>();\n\n const handleClick: MouseEventHandler<HTMLButtonElement> = useCallback(\n (event) => {\n setSelectedDate(event, date);\n },\n [date, setSelectedDate],\n );\n\n const handleKeyDown: KeyboardEventHandler<HTMLButtonElement> = useCallback(\n (event) => {\n switch (event.key) {\n case \"Space\":\n case \"Enter\":\n setSelectedDate(event, date);\n event.preventDefault();\n }\n },\n [date, setSelectedDate],\n );\n\n const handleMouseOver: MouseEventHandler<HTMLButtonElement> = useCallback(\n (event) => {\n setHoveredDate(event, date);\n },\n [date, setHoveredDate],\n );\n\n const handleMouseLeave: MouseEventHandler<HTMLButtonElement> = useCallback(\n (event) => {\n setHoveredDate(event, null);\n },\n [setHoveredDate],\n );\n\n const selected = isSelected(date);\n const selectedSpan = isSelectedSpan(date);\n const hoveredSpan = isHoveredSpan(date);\n const selectedStart = isSelectedStart(date);\n const selectedEnd = isSelectedEnd(date);\n const hovered = isHovered(date);\n const hoveredOffset = isHoveredOffset(date);\n\n return {\n handleClick,\n handleKeyDown,\n handleMouseOver,\n handleMouseLeave,\n status: {\n selected,\n selectedSpan,\n hoveredSpan,\n selectedStart,\n selectedEnd,\n hovered,\n hoveredOffset,\n },\n dayProps: {\n className: clsx({\n [withBaseName(\"selected\")]: selected,\n [withBaseName(\"selectedSpan\")]: selectedSpan,\n [withBaseName(\"hoveredSpan\")]: hoveredSpan,\n [withBaseName(\"selectedStart\")]: selectedStart,\n [withBaseName(\"selectedEnd\")]: selectedEnd,\n [withBaseName(\"hovered\")]: hovered,\n [withBaseName(\"hoveredOffset\")]: hoveredOffset,\n }),\n \"aria-pressed\":\n selected || selectedEnd || selectedStart || selectedSpan\n ? \"true\"\n : undefined,\n \"aria-disabled\":\n isDaySelectable && !isDaySelectable(date) ? \"true\" : undefined,\n },\n };\n}\n"],"names":["makePrefixer","useLocalization","useControlled","useCallback","useMemo","useCalendarContext","clsx"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useCalendarSelection.js","sources":["../src/calendar/useCalendarSelection.ts"],"sourcesContent":["import { makePrefixer, useControlled } from \"@salt-ds/core\";\nimport type {\n DateFrameworkType,\n SaltDateAdapter,\n} from \"@salt-ds/date-adapters\";\nimport { clsx } from \"clsx\";\nimport type {\n KeyboardEventHandler,\n MouseEventHandler,\n SyntheticEvent,\n} from \"react\";\nimport { useCallback, useMemo } from \"react\";\nimport { useLocalization } from \"../localization-provider\";\nimport { useCalendarContext } from \"./internal/CalendarContext\";\n\n/**\n * Type representing a single date selection.\n */\nexport type SingleDateSelection<TDate extends DateFrameworkType> = TDate;\n\n/**\n * Type representing multiple date selections.\n */\nexport type MultipleDateSelection<TDate extends DateFrameworkType> = TDate[];\n\n/**\n * Type representing a date range selection.\n */\nexport type DateRangeSelection<TDate extends DateFrameworkType> = {\n /**\n * The start date of the range.\n */\n startDate?: TDate | null;\n /**\n * The end date of the range.\n */\n endDate?: TDate | null;\n};\n\n/**\n * Type representing all possible selection value types.\n */\nexport type AllSelectionValueType<TDate extends DateFrameworkType> =\n | SingleDateSelection<TDate>\n | MultipleDateSelection<TDate>\n | DateRangeSelection<TDate>\n | null;\n\n/**\n * Checks if a value is a single date selection.\n * @param value - The value to check.\n * @returns `true` if the value is a single date selection, otherwise `false`.\n */\n// biome-ignore lint/suspicious/noExplicitAny: type guard\nexport function isSingleSelectionValueType<TDate extends DateFrameworkType>(\n value: any,\n): value is TDate {\n return (\n !isMultipleDateSelection<TDate>(value) &&\n !isDateRangeSelection<TDate>(value)\n );\n}\n\n/**\n * Checks if a value is a date range selection.\n * @param value - The value to check.\n * @returns `true` if the value is a date range selection, otherwise `false`.\n */\n// biome-ignore lint/suspicious/noExplicitAny: type guard\nexport function isDateRangeSelection<TDate extends DateFrameworkType>(\n value: any,\n): value is DateRangeSelection<TDate> {\n return (\n value &&\n typeof value === \"object\" &&\n (\"startDate\" in value || \"endDate\" in value)\n );\n}\n\n/**\n * Checks if a value is a multiple date selection.\n * @param value - The value to check.\n * @returns `true` if the value is a multiple date selection, otherwise `false`.\n */\nexport function isMultipleDateSelection<TDate extends DateFrameworkType>(\n // biome-ignore lint/suspicious/noExplicitAny: type guard\n value: any,\n): value is MultipleDateSelection<TDate> {\n return (\n Array.isArray(value) &&\n value.every((item) => isSingleSelectionValueType(item))\n );\n}\n\n/**\n * Base properties for calendar UseCalendarSelection hook.\n * @template SelectionVariantType - The type of the selection variant.\n */\ninterface UseCalendarSelectionBaseProps<TDate extends DateFrameworkType> {\n /**\n * The currently hovered date.\n */\n hoveredDate?: TDate | null;\n /**\n * Function to determine if a day is selectable.\n * @param date - The date to check.\n * @returns `true` if the day is selectable, otherwise `false`.\n */\n isDaySelectable?: (date: TDate) => boolean;\n /**\n * Callback fired when the hovered date changes.\n * @param event - The synthetic event.\n * @param hoveredDate - The new hovered date.\n */\n onHoveredDateChange?: (\n event: SyntheticEvent,\n hoveredDate: TDate | null,\n ) => void;\n}\n\n/**\n * UseCalendar hook props to return a calendar day's status\n */\nexport interface UseCalendarSelectionOffsetProps<\n TDate extends DateFrameworkType,\n> extends Omit<\n UseCalendarSelectionBaseProps<TDate>,\n \"startDateOffset\" | \"endDateOffset\"\n > {\n /**\n * The selection variant, set to \"offset\".\n */\n selectionVariant: \"offset\";\n /**\n * The currently selected date.\n */\n selectedDate?: DateRangeSelection<TDate>;\n /**\n * The default selected date.\n */\n defaultSelectedDate?: DateRangeSelection<TDate>;\n /**\n * Callback fired when the selected date changes.\n * @param event - The synthetic event.\n * @param selectedDate - The new selected date.\n */\n onSelectionChange?: (\n event: SyntheticEvent,\n selectedDate: DateRangeSelection<TDate>,\n ) => void;\n /**\n * Function to calculate the start date offset.\n * @param date - The date to offset.\n * @returns The offset start date.\n */\n startDateOffset?: (date: TDate) => TDate;\n /**\n * Function to calculate the end date offset.\n * @param date - The date to offset.\n * @returns The offset end date.\n */\n endDateOffset?: (date: TDate) => TDate;\n}\n\n/**\n * Properties for the range date selection hook.\n */\nexport interface UseCalendarSelectionRangeProps<TDate extends DateFrameworkType>\n extends UseCalendarSelectionBaseProps<TDate> {\n /**\n * The selection variant, set to \"range\".\n */\n selectionVariant: \"range\";\n /**\n * The currently selected date.\n */\n selectedDate?: DateRangeSelection<TDate>;\n /**\n * The default selected date.\n */\n defaultSelectedDate?: DateRangeSelection<TDate>;\n /**\n * Callback fired when the selected date changes.\n * @param event - The synthetic event.\n * @param selectedDate - The new selected date.\n */\n onSelectionChange?: (\n event: SyntheticEvent,\n selectedDate: DateRangeSelection<TDate>,\n ) => void;\n}\n\n/**\n * Properties for the multi-select date selection hook.\n */\nexport interface UseCalendarSelectionMultiSelectProps<\n TDate extends DateFrameworkType,\n> extends UseCalendarSelectionBaseProps<TDate> {\n /**\n * The selection variant, set to \"multiselect\".\n */\n selectionVariant: \"multiselect\";\n /**\n * The currently selected date.\n */\n selectedDate?: MultipleDateSelection<TDate>;\n /**\n * The default selected date.\n */\n defaultSelectedDate?: MultipleDateSelection<TDate>;\n /**\n * Callback fired when the selected date changes.\n * @param event - The synthetic event.\n * @param selectedDate - The new selected date.\n */\n onSelectionChange?: (\n event: SyntheticEvent,\n selectedDate: MultipleDateSelection<TDate>,\n ) => void;\n}\n\n/**\n * Properties for the single date selection hook.\n */\nexport interface UseCalendarSelectionSingleProps<\n TDate extends DateFrameworkType,\n> extends UseCalendarSelectionBaseProps<TDate> {\n /**\n * The selection variant, set to \"single\".\n */\n selectionVariant: \"single\";\n /**\n * The currently selected date.\n */\n selectedDate?: SingleDateSelection<TDate> | null;\n /**\n * The default selected date.\n */\n defaultSelectedDate?: SingleDateSelection<TDate> | null;\n /**\n * Callback fired when the selected date changes.\n * @param event - The synthetic event.\n * @param selectedDate - The new selected date.\n */\n onSelectionChange?: (\n event: SyntheticEvent,\n selectedDate: SingleDateSelection<TDate> | null,\n ) => void;\n}\n\n/**\n * UseCalendarSelection hook props, wth the selection variant determining the return type of the date selection\n */\nexport type UseCalendarSelectionProps<TDate extends DateFrameworkType> =\n | UseCalendarSelectionSingleProps<TDate>\n | UseCalendarSelectionMultiSelectProps<TDate>\n | UseCalendarSelectionRangeProps<TDate>\n | UseCalendarSelectionOffsetProps<TDate>;\n\nconst withBaseName = makePrefixer(\"saltCalendarDay\");\n\nfunction addOrRemoveFromArray<TDate extends DateFrameworkType>(\n dateAdapter: SaltDateAdapter<TDate>,\n array: AllSelectionValueType<TDate>,\n item: TDate,\n) {\n if (Array.isArray(array)) {\n const filteredArray = array.filter(\n (element) => !dateAdapter.isSame(element, item, \"day\"),\n );\n if (filteredArray.length === array.length) {\n return array.concat(item);\n }\n return filteredArray;\n }\n return [item];\n}\n\nfunction updateRangeSelection<TDate extends DateFrameworkType>(\n datePicker: SaltDateAdapter<TDate>,\n currentSelectedDate: DateRangeSelection<TDate> | undefined,\n newSelectedDate: TDate,\n): DateRangeSelection<TDate> {\n let base = { ...currentSelectedDate };\n if (base?.startDate && base?.endDate) {\n base = { startDate: newSelectedDate };\n } else if (\n base?.startDate &&\n datePicker.compare(newSelectedDate, base.startDate) < 0\n ) {\n base = { startDate: newSelectedDate };\n } else if (\n base?.startDate &&\n datePicker.compare(newSelectedDate, base.startDate) >= 0\n ) {\n base = { ...base, endDate: newSelectedDate };\n } else {\n base = { startDate: newSelectedDate };\n }\n return base;\n}\n\nexport function useCalendarSelection<TDate extends DateFrameworkType>(\n props: UseCalendarSelectionProps<TDate>,\n) {\n const {\n hoveredDate: hoveredDateProp,\n selectedDate: selectedDateProp,\n defaultSelectedDate,\n onSelectionChange,\n onHoveredDateChange,\n isDaySelectable,\n selectionVariant,\n // startDateOffset,\n // endDateOffset,\n } = props;\n const { dateAdapter } = useLocalization<TDate>();\n const [selectedDate, setSelectedDateState] = useControlled({\n controlled: selectedDateProp,\n default: defaultSelectedDate,\n name: \"Calendar\",\n state: \"selectedDate\",\n });\n\n const startDateOffset =\n selectionVariant === \"offset\" ? props.startDateOffset : undefined;\n const endDateOffset =\n selectionVariant === \"offset\" ? props.endDateOffset : undefined;\n\n const getStartDateOffset = useCallback(\n (date: TDate) => {\n if (selectionVariant === \"offset\" && startDateOffset) {\n return startDateOffset(date);\n }\n return date;\n },\n [selectionVariant, startDateOffset],\n );\n\n const getEndDateOffset = useCallback(\n (date: TDate) => {\n if (selectionVariant === \"offset\" && endDateOffset) {\n return endDateOffset(date);\n }\n return date;\n },\n [selectionVariant, endDateOffset],\n );\n\n const setSelectedDate = useCallback(\n (event: SyntheticEvent<HTMLButtonElement>, newSelectedDate: TDate) => {\n if (!isDaySelectable || isDaySelectable(newSelectedDate)) {\n switch (selectionVariant) {\n case \"single\": {\n setSelectedDateState(newSelectedDate);\n onSelectionChange?.(event, newSelectedDate);\n break;\n }\n case \"multiselect\": {\n const newMultiSelectDate = addOrRemoveFromArray<TDate>(\n dateAdapter,\n selectedDate as TDate[],\n newSelectedDate,\n );\n setSelectedDateState(newMultiSelectDate);\n onSelectionChange?.(event, newMultiSelectDate);\n break;\n }\n case \"range\": {\n const newRangeDate = updateRangeSelection<TDate>(\n dateAdapter,\n selectedDate as DateRangeSelection<TDate>,\n newSelectedDate,\n );\n setSelectedDateState(newRangeDate);\n onSelectionChange?.(event, newRangeDate);\n break;\n }\n case \"offset\": {\n const newOffsetDate: DateRangeSelection<TDate> = {\n startDate: getStartDateOffset(newSelectedDate),\n endDate: getEndDateOffset(newSelectedDate),\n };\n setSelectedDateState(newOffsetDate);\n props.onSelectionChange?.(event, newOffsetDate);\n break;\n }\n }\n }\n },\n [isDaySelectable, selectedDate, selectionVariant, onSelectionChange],\n );\n\n const isSelected = useCallback(\n (date: TDate) => {\n if (!selectedDate) {\n return false;\n }\n switch (selectionVariant) {\n case \"single\":\n return (\n isSingleSelectionValueType(selectedDate) &&\n dateAdapter.isSame(selectedDate as TDate, date, \"day\")\n );\n case \"multiselect\":\n return (\n Array.isArray(selectedDate) &&\n !!selectedDate.find((element) =>\n dateAdapter.isSame(element, date, \"day\"),\n )\n );\n default:\n return false;\n }\n },\n [dateAdapter, selectionVariant, selectedDate],\n );\n\n const [hoveredDate, setHoveredDateState] = useControlled({\n controlled: hoveredDateProp,\n default: undefined,\n name: \"Calendar\",\n state: \"hoveredDate\",\n });\n\n const setHoveredDate = useCallback(\n (event: SyntheticEvent, date: TDate | null) => {\n setHoveredDateState(date);\n onHoveredDateChange?.(event, date);\n },\n [onHoveredDateChange],\n );\n\n const isHovered = useCallback(\n (date: TDate) => {\n return !!hoveredDate && dateAdapter.isSame(date, hoveredDate, \"day\");\n },\n [hoveredDate],\n );\n\n const isSelectedSpan = useCallback(\n (date: TDate) => {\n if (\n (selectionVariant === \"range\" || selectionVariant === \"offset\") &&\n isDateRangeSelection(selectedDate) &&\n selectedDate?.startDate &&\n selectedDate?.endDate\n ) {\n return (\n dateAdapter.compare(date, selectedDate.startDate) > 0 &&\n dateAdapter.compare(date, selectedDate.endDate) < 0\n );\n }\n return false;\n },\n [selectionVariant, selectedDate],\n );\n const isHoveredSpan = useCallback(\n (date: TDate) => {\n if (\n (selectionVariant === \"range\" || selectionVariant === \"offset\") &&\n isDateRangeSelection(selectedDate) &&\n selectedDate.startDate &&\n !selectedDate.endDate &&\n hoveredDate\n ) {\n const isForwardRange =\n dateAdapter.compare(hoveredDate, selectedDate.startDate) > 0 &&\n ((dateAdapter.compare(date, selectedDate.startDate) > 0 &&\n dateAdapter.compare(date, hoveredDate) < 0) ||\n dateAdapter.isSame(date, hoveredDate, \"day\"));\n\n const isValidDayHovered =\n !isDaySelectable || isDaySelectable(hoveredDate);\n\n return isForwardRange && isValidDayHovered;\n }\n return false;\n },\n [selectionVariant, selectedDate, hoveredDate, isDaySelectable],\n );\n\n const isSelectedStart = useCallback(\n (date: TDate) => {\n if (\n (selectionVariant === \"range\" || selectionVariant === \"offset\") &&\n isDateRangeSelection(selectedDate) &&\n selectedDate.startDate\n ) {\n return dateAdapter.isSame(selectedDate.startDate, date, \"day\");\n }\n return false;\n },\n [selectionVariant, selectedDate],\n );\n\n const isSelectedEnd = useCallback(\n (date: TDate) => {\n if (\n (selectionVariant === \"range\" || selectionVariant === \"offset\") &&\n isDateRangeSelection(selectedDate) &&\n selectedDate.endDate\n ) {\n return dateAdapter.isSame(selectedDate.endDate, date, \"day\");\n }\n return false;\n },\n [selectionVariant, selectedDate],\n );\n\n const isHoveredOffset = useCallback(\n (date: TDate) => {\n if (hoveredDate && selectionVariant === \"offset\") {\n const startDate = getStartDateOffset(hoveredDate);\n const endDate = getEndDateOffset(hoveredDate);\n\n return (\n dateAdapter.compare(date, startDate) >= 0 &&\n dateAdapter.compare(date, endDate) <= 0 &&\n (!isDaySelectable || isDaySelectable(date))\n );\n }\n\n return false;\n },\n [\n getStartDateOffset,\n getEndDateOffset,\n hoveredDate,\n isDaySelectable,\n selectionVariant,\n ],\n );\n\n return useMemo(\n () => ({\n state: {\n selectedDate,\n hoveredDate,\n },\n helpers: {\n setSelectedDate,\n isSelected,\n setHoveredDate,\n isHovered,\n isSelectedSpan,\n isHoveredSpan,\n isSelectedStart,\n isSelectedEnd,\n isHoveredOffset,\n isDaySelectable,\n },\n }),\n [\n selectedDate,\n hoveredDate,\n setSelectedDate,\n isSelected,\n setHoveredDate,\n isHovered,\n isSelectedSpan,\n isHoveredSpan,\n isSelectedStart,\n isSelectedEnd,\n isHoveredOffset,\n isDaySelectable,\n ],\n );\n}\n\nexport function useCalendarSelectionDay<TDate extends DateFrameworkType>({\n date,\n}: { date: TDate }) {\n const {\n helpers: {\n setSelectedDate,\n isSelected,\n setHoveredDate,\n isSelectedSpan,\n isHoveredSpan,\n isSelectedStart,\n isSelectedEnd,\n isHovered,\n isHoveredOffset,\n isDaySelectable,\n },\n } = useCalendarContext<TDate>();\n\n const handleClick: MouseEventHandler<HTMLButtonElement> = useCallback(\n (event) => {\n setSelectedDate(event, date);\n },\n [date, setSelectedDate],\n );\n\n const handleKeyDown: KeyboardEventHandler<HTMLButtonElement> = useCallback(\n (event) => {\n switch (event.key) {\n case \"Space\":\n case \"Enter\":\n setSelectedDate(event, date);\n event.preventDefault();\n }\n },\n [date, setSelectedDate],\n );\n\n const handleMouseOver: MouseEventHandler<HTMLButtonElement> = useCallback(\n (event) => {\n setHoveredDate(event, date);\n },\n [date, setHoveredDate],\n );\n\n const handleMouseLeave: MouseEventHandler<HTMLButtonElement> = useCallback(\n (event) => {\n setHoveredDate(event, null);\n },\n [setHoveredDate],\n );\n\n const selected = isSelected(date);\n const selectedSpan = isSelectedSpan(date);\n const hoveredSpan = isHoveredSpan(date);\n const selectedStart = isSelectedStart(date);\n const selectedEnd = isSelectedEnd(date);\n const hovered = isHovered(date);\n const hoveredOffset = isHoveredOffset(date);\n\n return {\n handleClick,\n handleKeyDown,\n handleMouseOver,\n handleMouseLeave,\n status: {\n selected,\n selectedSpan,\n hoveredSpan,\n selectedStart,\n selectedEnd,\n hovered,\n hoveredOffset,\n },\n dayProps: {\n className: clsx({\n [withBaseName(\"selected\")]: selected,\n [withBaseName(\"selectedSpan\")]: selectedSpan,\n [withBaseName(\"hoveredSpan\")]: hoveredSpan,\n [withBaseName(\"selectedStart\")]: selectedStart,\n [withBaseName(\"selectedEnd\")]: selectedEnd,\n [withBaseName(\"hovered\")]: hovered,\n [withBaseName(\"hoveredOffset\")]: hoveredOffset,\n }),\n \"aria-pressed\":\n selected || selectedEnd || selectedStart || selectedSpan\n ? \"true\"\n : undefined,\n \"aria-disabled\":\n isDaySelectable && !isDaySelectable(date) ? \"true\" : undefined,\n },\n };\n}\n"],"names":["makePrefixer","useLocalization","useControlled","useCallback","useMemo","useCalendarContext","clsx"],"mappings":"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"}
|
|
@@ -50,14 +50,15 @@ const DatePickerMain = react.forwardRef(
|
|
|
50
50
|
}
|
|
51
51
|
);
|
|
52
52
|
const DatePicker = react.forwardRef(function DatePicker2(props, ref) {
|
|
53
|
-
const { open, defaultOpen, onOpen, ...rest } = props;
|
|
53
|
+
const { open, defaultOpen, onOpen, readOnly, ...rest } = props;
|
|
54
54
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
55
55
|
DatePickerOverlayProvider.DatePickerOverlayProvider,
|
|
56
56
|
{
|
|
57
57
|
open,
|
|
58
58
|
defaultOpen,
|
|
59
59
|
onOpen,
|
|
60
|
-
|
|
60
|
+
readOnly,
|
|
61
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(DatePickerMain, { ...rest, readOnly, ref })
|
|
61
62
|
}
|
|
62
63
|
);
|
|
63
64
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DatePicker.js","sources":["../src/date-picker/DatePicker.tsx"],"sourcesContent":["import type { DateFrameworkType } from \"@salt-ds/date-adapters\";\nimport { type ReactNode, forwardRef } from \"react\";\nimport {\n DateRangeSelectionContext,\n type RangeDatePickerState,\n type SingleDatePickerState,\n SingleDateSelectionContext,\n} from \"./DatePickerContext\";\nimport { DatePickerOverlayProvider } from \"./DatePickerOverlayProvider\";\nimport {\n type UseDatePickerRangeProps,\n type UseDatePickerSingleProps,\n useDatePicker,\n} from \"./useDatePicker\";\n\n/**\n * Base props for DatePicker.\n */\nexport interface DatePickerBaseProps {\n className?: string;\n children?: ReactNode;\n /** the open/close state of the overlay. The open/close state will be controlled when this prop is provided. */\n open?: boolean;\n /**\n * Handler for when open state changes\n * @param newOpen - true when opened\n */\n onOpen?: (newOpen: boolean) => void;\n /**\n * the initial open/close state of the overlay, when the open/close state is un-controlled.\n */\n defaultOpen?: DatePickerBaseProps[\"open\"];\n}\n\n/**\n * Props for the DatePicker component, when `selectionVariant` is `single`.\n * @template T\n */\nexport interface DatePickerSingleProps<TDate extends DateFrameworkType>\n extends DatePickerBaseProps,\n UseDatePickerSingleProps<TDate> {\n selectionVariant: \"single\";\n}\n\n/**\n * Props for the DatePicker component, when `selectionVariant` is `range`.\n * @template T\n */\nexport interface DatePickerRangeProps<TDate extends DateFrameworkType>\n extends DatePickerBaseProps,\n UseDatePickerRangeProps<TDate> {\n selectionVariant: \"range\";\n}\n\n/**\n * Props for the DatePicker component.\n * @template T\n */\nexport type DatePickerProps<TDate extends DateFrameworkType> =\n | DatePickerSingleProps<TDate>\n | DatePickerRangeProps<TDate>;\n\nexport const DatePickerMain = forwardRef<HTMLDivElement, DatePickerProps<any>>(\n <TDate extends DateFrameworkType>(\n props: DatePickerProps<TDate>,\n ref: React.Ref<HTMLDivElement>,\n ) => {\n const {\n children,\n readOnly,\n disabled,\n selectionVariant,\n defaultSelectedDate,\n selectedDate,\n onSelectionChange,\n onApply,\n minDate,\n maxDate,\n onCancel,\n ...rest\n } = props;\n // biome-ignore lint/suspicious/noExplicitAny: type guard\n const useDatePickerProps: any = {\n readOnly,\n disabled,\n selectionVariant,\n defaultSelectedDate,\n selectedDate,\n onSelectionChange,\n onApply,\n minDate,\n maxDate,\n onCancel,\n };\n\n if (props.selectionVariant === \"range\") {\n const stateAndHelpers = useDatePicker<TDate, \"range\">(\n useDatePickerProps,\n ref,\n ) as RangeDatePickerState<TDate>;\n return (\n <DateRangeSelectionContext.Provider value={stateAndHelpers}>\n <div ref={stateAndHelpers?.state?.containerRef} {...rest}>\n {children}\n </div>\n </DateRangeSelectionContext.Provider>\n );\n }\n const stateAndHelpers = useDatePicker(\n useDatePickerProps,\n ref,\n ) as SingleDatePickerState<TDate>;\n\n return (\n <SingleDateSelectionContext.Provider value={stateAndHelpers}>\n <div ref={stateAndHelpers?.state?.containerRef} {...rest}>\n {children}\n </div>\n </SingleDateSelectionContext.Provider>\n );\n },\n);\n\nexport const DatePicker = forwardRef(function DatePicker<\n TDate extends DateFrameworkType,\n>(props: DatePickerProps<TDate>, ref: React.Ref<HTMLDivElement>) {\n const { open, defaultOpen, onOpen, ...rest } = props;\n\n return (\n <DatePickerOverlayProvider\n open={open}\n defaultOpen={defaultOpen}\n onOpen={onOpen}\n >\n <DatePickerMain {...rest} ref={ref} />\n </DatePickerOverlayProvider>\n );\n});\n"],"names":["forwardRef","stateAndHelpers","useDatePicker","DateRangeSelectionContext","SingleDateSelectionContext","jsx","DatePicker","DatePickerOverlayProvider"],"mappings":";;;;;;;;AA8DO,MAAM,cAAiB,GAAAA,gBAAA;AAAA,EAC5B,CACE,OACA,GACG,KAAA;AAlEP,IAAA,IAAA,EAAA,EAAA,EAAA;AAmEI,IAAM,MAAA;AAAA,MACJ,QAAA;AAAA,MACA,QAAA;AAAA,MACA,QAAA;AAAA,MACA,gBAAA;AAAA,MACA,mBAAA;AAAA,MACA,YAAA;AAAA,MACA,iBAAA;AAAA,MACA,OAAA;AAAA,MACA,OAAA;AAAA,MACA,OAAA;AAAA,MACA,QAAA;AAAA,MACA,GAAG;AAAA,KACD,GAAA,KAAA;AAEJ,IAAA,MAAM,kBAA0B,GAAA;AAAA,MAC9B,QAAA;AAAA,MACA,QAAA;AAAA,MACA,gBAAA;AAAA,MACA,mBAAA;AAAA,MACA,YAAA;AAAA,MACA,iBAAA;AAAA,MACA,OAAA;AAAA,MACA,OAAA;AAAA,MACA,OAAA;AAAA,MACA;AAAA,KACF;AAEA,IAAI,IAAA,KAAA,CAAM,qBAAqB,OAAS,EAAA;AACtC,MAAA,MAAMC,gBAAkB,GAAAC,2BAAA;AAAA,QACtB,kBAAA;AAAA,QACA;AAAA,OACF;AACA,MAAA,sCACGC,2CAA0B,CAAA,QAAA,EAA1B,EAAmC,KAAOF,EAAAA,gBAAAA,EACzC,yCAAC,KAAI,EAAA,EAAA,GAAA,EAAA,CAAK,KAAAA,gBAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAAA,iBAAiB,KAAjB,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAwB,cAAe,GAAG,IAAA,EACjD,UACH,CACF,EAAA,CAAA;AAAA;AAGJ,IAAA,MAAM,eAAkB,GAAAC,2BAAA;AAAA,MACtB,kBAAA;AAAA,MACA;AAAA,KACF;AAEA,IAAA,sCACGE,4CAA2B,CAAA,QAAA,EAA3B,EAAoC,KAAA,EAAO,iBAC1C,QAAC,kBAAAC,cAAA,CAAA,KAAA,EAAA,EAAI,GAAK,EAAA,CAAA,EAAA,GAAA,eAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,eAAA,CAAiB,UAAjB,IAAwB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,YAAA,EAAe,GAAG,IAAA,EACjD,UACH,CACF,EAAA,CAAA;AAAA;AAGN;AAEO,MAAM,UAAa,GAAAL,gBAAA,CAAW,SAASM,WAAAA,CAE5C,OAA+B,GAAgC,EAAA;AAC/D,EAAA,MAAM,EAAE,IAAM,EAAA,WAAA,EAAa,
|
|
1
|
+
{"version":3,"file":"DatePicker.js","sources":["../src/date-picker/DatePicker.tsx"],"sourcesContent":["import type { DateFrameworkType } from \"@salt-ds/date-adapters\";\nimport { type ReactNode, forwardRef } from \"react\";\nimport {\n DateRangeSelectionContext,\n type RangeDatePickerState,\n type SingleDatePickerState,\n SingleDateSelectionContext,\n} from \"./DatePickerContext\";\nimport { DatePickerOverlayProvider } from \"./DatePickerOverlayProvider\";\nimport {\n type UseDatePickerRangeProps,\n type UseDatePickerSingleProps,\n useDatePicker,\n} from \"./useDatePicker\";\n\n/**\n * Base props for DatePicker.\n */\nexport interface DatePickerBaseProps {\n className?: string;\n children?: ReactNode;\n /** the open/close state of the overlay. The open/close state will be controlled when this prop is provided. */\n open?: boolean;\n /**\n * Handler for when open state changes\n * @param newOpen - true when opened\n */\n onOpen?: (newOpen: boolean) => void;\n /**\n * the initial open/close state of the overlay, when the open/close state is un-controlled.\n */\n defaultOpen?: DatePickerBaseProps[\"open\"];\n}\n\n/**\n * Props for the DatePicker component, when `selectionVariant` is `single`.\n * @template T\n */\nexport interface DatePickerSingleProps<TDate extends DateFrameworkType>\n extends DatePickerBaseProps,\n UseDatePickerSingleProps<TDate> {\n selectionVariant: \"single\";\n}\n\n/**\n * Props for the DatePicker component, when `selectionVariant` is `range`.\n * @template T\n */\nexport interface DatePickerRangeProps<TDate extends DateFrameworkType>\n extends DatePickerBaseProps,\n UseDatePickerRangeProps<TDate> {\n selectionVariant: \"range\";\n}\n\n/**\n * Props for the DatePicker component.\n * @template T\n */\nexport type DatePickerProps<TDate extends DateFrameworkType> =\n | DatePickerSingleProps<TDate>\n | DatePickerRangeProps<TDate>;\n\nexport const DatePickerMain = forwardRef<HTMLDivElement, DatePickerProps<any>>(\n <TDate extends DateFrameworkType>(\n props: DatePickerProps<TDate>,\n ref: React.Ref<HTMLDivElement>,\n ) => {\n const {\n children,\n readOnly,\n disabled,\n selectionVariant,\n defaultSelectedDate,\n selectedDate,\n onSelectionChange,\n onApply,\n minDate,\n maxDate,\n onCancel,\n ...rest\n } = props;\n // biome-ignore lint/suspicious/noExplicitAny: type guard\n const useDatePickerProps: any = {\n readOnly,\n disabled,\n selectionVariant,\n defaultSelectedDate,\n selectedDate,\n onSelectionChange,\n onApply,\n minDate,\n maxDate,\n onCancel,\n };\n\n if (props.selectionVariant === \"range\") {\n const stateAndHelpers = useDatePicker<TDate, \"range\">(\n useDatePickerProps,\n ref,\n ) as RangeDatePickerState<TDate>;\n return (\n <DateRangeSelectionContext.Provider value={stateAndHelpers}>\n <div ref={stateAndHelpers?.state?.containerRef} {...rest}>\n {children}\n </div>\n </DateRangeSelectionContext.Provider>\n );\n }\n const stateAndHelpers = useDatePicker(\n useDatePickerProps,\n ref,\n ) as SingleDatePickerState<TDate>;\n\n return (\n <SingleDateSelectionContext.Provider value={stateAndHelpers}>\n <div ref={stateAndHelpers?.state?.containerRef} {...rest}>\n {children}\n </div>\n </SingleDateSelectionContext.Provider>\n );\n },\n);\n\nexport const DatePicker = forwardRef(function DatePicker<\n TDate extends DateFrameworkType,\n>(props: DatePickerProps<TDate>, ref: React.Ref<HTMLDivElement>) {\n const { open, defaultOpen, onOpen, readOnly, ...rest } = props;\n\n return (\n <DatePickerOverlayProvider\n open={open}\n defaultOpen={defaultOpen}\n onOpen={onOpen}\n readOnly={readOnly}\n >\n <DatePickerMain {...rest} readOnly={readOnly} ref={ref} />\n </DatePickerOverlayProvider>\n );\n});\n"],"names":["forwardRef","stateAndHelpers","useDatePicker","DateRangeSelectionContext","SingleDateSelectionContext","jsx","DatePicker","DatePickerOverlayProvider"],"mappings":";;;;;;;;AA8DO,MAAM,cAAiB,GAAAA,gBAAA;AAAA,EAC5B,CACE,OACA,GACG,KAAA;AAlEP,IAAA,IAAA,EAAA,EAAA,EAAA;AAmEI,IAAM,MAAA;AAAA,MACJ,QAAA;AAAA,MACA,QAAA;AAAA,MACA,QAAA;AAAA,MACA,gBAAA;AAAA,MACA,mBAAA;AAAA,MACA,YAAA;AAAA,MACA,iBAAA;AAAA,MACA,OAAA;AAAA,MACA,OAAA;AAAA,MACA,OAAA;AAAA,MACA,QAAA;AAAA,MACA,GAAG;AAAA,KACD,GAAA,KAAA;AAEJ,IAAA,MAAM,kBAA0B,GAAA;AAAA,MAC9B,QAAA;AAAA,MACA,QAAA;AAAA,MACA,gBAAA;AAAA,MACA,mBAAA;AAAA,MACA,YAAA;AAAA,MACA,iBAAA;AAAA,MACA,OAAA;AAAA,MACA,OAAA;AAAA,MACA,OAAA;AAAA,MACA;AAAA,KACF;AAEA,IAAI,IAAA,KAAA,CAAM,qBAAqB,OAAS,EAAA;AACtC,MAAA,MAAMC,gBAAkB,GAAAC,2BAAA;AAAA,QACtB,kBAAA;AAAA,QACA;AAAA,OACF;AACA,MAAA,sCACGC,2CAA0B,CAAA,QAAA,EAA1B,EAAmC,KAAOF,EAAAA,gBAAAA,EACzC,yCAAC,KAAI,EAAA,EAAA,GAAA,EAAA,CAAK,KAAAA,gBAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAAA,iBAAiB,KAAjB,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAwB,cAAe,GAAG,IAAA,EACjD,UACH,CACF,EAAA,CAAA;AAAA;AAGJ,IAAA,MAAM,eAAkB,GAAAC,2BAAA;AAAA,MACtB,kBAAA;AAAA,MACA;AAAA,KACF;AAEA,IAAA,sCACGE,4CAA2B,CAAA,QAAA,EAA3B,EAAoC,KAAA,EAAO,iBAC1C,QAAC,kBAAAC,cAAA,CAAA,KAAA,EAAA,EAAI,GAAK,EAAA,CAAA,EAAA,GAAA,eAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,eAAA,CAAiB,UAAjB,IAAwB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,YAAA,EAAe,GAAG,IAAA,EACjD,UACH,CACF,EAAA,CAAA;AAAA;AAGN;AAEO,MAAM,UAAa,GAAAL,gBAAA,CAAW,SAASM,WAAAA,CAE5C,OAA+B,GAAgC,EAAA;AAC/D,EAAA,MAAM,EAAE,IAAM,EAAA,WAAA,EAAa,QAAQ,QAAU,EAAA,GAAG,MAAS,GAAA,KAAA;AAEzD,EACE,uBAAAD,cAAA;AAAA,IAACE,mDAAA;AAAA,IAAA;AAAA,MACC,IAAA;AAAA,MACA,WAAA;AAAA,MACA,MAAA;AAAA,MACA,QAAA;AAAA,MAEA,QAAC,kBAAAF,cAAA,CAAA,cAAA,EAAA,EAAgB,GAAG,IAAA,EAAM,UAAoB,GAAU,EAAA;AAAA;AAAA,GAC1D;AAEJ,CAAC;;;;;"}
|
|
@@ -6,7 +6,7 @@ var core = require('@salt-ds/core');
|
|
|
6
6
|
var react = require('react');
|
|
7
7
|
|
|
8
8
|
const DatePickerOverlayContext = core.createContext("DatePickerOverlayContext", void 0);
|
|
9
|
-
const DatePickerOverlayProvider = ({ open: openProp, defaultOpen, onOpen, children }) => {
|
|
9
|
+
const DatePickerOverlayProvider = ({ open: openProp, defaultOpen, onOpen, children, readOnly }) => {
|
|
10
10
|
const [open, setOpenState] = core.useControlled({
|
|
11
11
|
controlled: openProp,
|
|
12
12
|
default: Boolean(defaultOpen),
|
|
@@ -33,6 +33,9 @@ const DatePickerOverlayProvider = ({ open: openProp, defaultOpen, onOpen, childr
|
|
|
33
33
|
(newOpen, _event, reason) => {
|
|
34
34
|
var _a;
|
|
35
35
|
if (newOpen) {
|
|
36
|
+
if (readOnly) {
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
36
39
|
triggeringElement.current = document.activeElement;
|
|
37
40
|
}
|
|
38
41
|
setOpenState(newOpen);
|
|
@@ -41,7 +44,7 @@ const DatePickerOverlayProvider = ({ open: openProp, defaultOpen, onOpen, childr
|
|
|
41
44
|
(_a = onDismissCallback == null ? void 0 : onDismissCallback.current) == null ? void 0 : _a.call(onDismissCallback);
|
|
42
45
|
}
|
|
43
46
|
},
|
|
44
|
-
[onOpen]
|
|
47
|
+
[onOpen, readOnly]
|
|
45
48
|
);
|
|
46
49
|
const floatingUIResult = core.useFloatingUI({
|
|
47
50
|
open,
|