@vuu-ui/vuu-ui-controls 0.8.55 → 0.8.57
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/cjs/calendar/internal/CalendarNavigation.css.js +1 -1
- package/cjs/calendar/internal/CalendarNavigation.js +105 -107
- package/cjs/calendar/internal/CalendarNavigation.js.map +1 -1
- package/cjs/date-popup/DatePopup.js +1 -3
- package/cjs/date-popup/DatePopup.js.map +1 -1
- package/cjs/date-popup/useDatePopup.js.map +1 -1
- package/cjs/{dropdown/Dropdown.css.js → dropdown-base/DropdownBase.css.js} +1 -1
- package/cjs/dropdown-base/DropdownBase.css.js.map +1 -0
- package/cjs/{dropdown → dropdown-base}/DropdownBase.js +3 -3
- package/cjs/dropdown-base/DropdownBase.js.map +1 -0
- package/cjs/dropdown-base/useClickAway.js.map +1 -0
- package/cjs/dropdown-base/useDropdownBase.js.map +1 -0
- package/cjs/index.js +2 -12
- package/cjs/index.js.map +1 -1
- package/cjs/instrument-picker/InstrumentPicker.js +1 -3
- package/cjs/instrument-picker/InstrumentPicker.js.map +1 -1
- package/cjs/instrument-picker/useInstrumentPicker.js.map +1 -1
- package/cjs/split-button/SplitButton.css.js +1 -1
- package/esm/calendar/internal/CalendarNavigation.css.js +1 -1
- package/esm/calendar/internal/CalendarNavigation.js +106 -108
- package/esm/calendar/internal/CalendarNavigation.js.map +1 -1
- package/esm/date-popup/DatePopup.js +1 -3
- package/esm/date-popup/DatePopup.js.map +1 -1
- package/esm/date-popup/useDatePopup.js.map +1 -1
- package/esm/{dropdown/Dropdown.css.js → dropdown-base/DropdownBase.css.js} +1 -1
- package/esm/dropdown-base/DropdownBase.css.js.map +1 -0
- package/esm/{dropdown → dropdown-base}/DropdownBase.js +1 -1
- package/esm/dropdown-base/DropdownBase.js.map +1 -0
- package/esm/dropdown-base/useClickAway.js.map +1 -0
- package/esm/dropdown-base/useDropdownBase.js.map +1 -0
- package/esm/index.js +2 -7
- package/esm/index.js.map +1 -1
- package/esm/instrument-picker/InstrumentPicker.js +1 -3
- package/esm/instrument-picker/InstrumentPicker.js.map +1 -1
- package/esm/instrument-picker/useInstrumentPicker.js.map +1 -1
- package/esm/split-button/SplitButton.css.js +1 -1
- package/package.json +8 -8
- package/types/calendar/internal/CalendarNavigation.d.ts +2 -7
- package/types/common-hooks/selectionTypes.d.ts +1 -1
- package/types/date-popup/DatePopup.d.ts +1 -1
- package/types/date-popup/useDatePopup.d.ts +1 -1
- package/types/{dropdown → dropdown-base}/index.d.ts +0 -2
- package/types/editable/useEditableText.d.ts +1 -1
- package/types/index.d.ts +1 -3
- package/types/instrument-picker/InstrumentPicker.d.ts +1 -1
- package/types/instrument-picker/useInstrumentPicker.d.ts +2 -2
- package/types/instrument-search/useInstrumentSearch.d.ts +1 -1
- package/types/list/List.d.ts +2 -2
- package/types/list/ListItem.d.ts +1 -1
- package/types/list/common-hooks/utils/collection-item-utils.d.ts +1 -1
- package/types/overflow-container/useOverflowContainer.d.ts +2 -2
- package/types/split-button/useSplitButton.d.ts +3 -3
- package/types/tabstrip/useTabstrip.d.ts +5 -5
- package/types/toolbar/useToolbar.d.ts +4 -4
- package/types/vuu-input/VuuInput.d.ts +2 -2
- package/cjs/combo-box/ComboBox.js +0 -191
- package/cjs/combo-box/ComboBox.js.map +0 -1
- package/cjs/combo-box/useCombobox.js +0 -358
- package/cjs/combo-box/useCombobox.js.map +0 -1
- package/cjs/dropdown/Dropdown.css.js.map +0 -1
- package/cjs/dropdown/Dropdown.js +0 -150
- package/cjs/dropdown/Dropdown.js.map +0 -1
- package/cjs/dropdown/DropdownBase.js.map +0 -1
- package/cjs/dropdown/DropdownButton.css.js +0 -6
- package/cjs/dropdown/DropdownButton.css.js.map +0 -1
- package/cjs/dropdown/DropdownButton.js +0 -72
- package/cjs/dropdown/DropdownButton.js.map +0 -1
- package/cjs/dropdown/useClickAway.js.map +0 -1
- package/cjs/dropdown/useDropdown.js +0 -115
- package/cjs/dropdown/useDropdown.js.map +0 -1
- package/cjs/dropdown/useDropdownBase.js.map +0 -1
- package/cjs/inputs/Checkbox.css.js +0 -6
- package/cjs/inputs/Checkbox.css.js.map +0 -1
- package/cjs/inputs/Checkbox.js +0 -32
- package/cjs/inputs/Checkbox.js.map +0 -1
- package/cjs/inputs/RadioButton.css.js +0 -6
- package/cjs/inputs/RadioButton.css.js.map +0 -1
- package/cjs/inputs/RadioButton.js +0 -39
- package/cjs/inputs/RadioButton.js.map +0 -1
- package/cjs/list/ChevronIcon.css.js +0 -6
- package/cjs/list/ChevronIcon.css.js.map +0 -1
- package/cjs/list/ChevronIcon.js +0 -22
- package/cjs/list/ChevronIcon.js.map +0 -1
- package/esm/combo-box/ComboBox.js +0 -189
- package/esm/combo-box/ComboBox.js.map +0 -1
- package/esm/combo-box/useCombobox.js +0 -356
- package/esm/combo-box/useCombobox.js.map +0 -1
- package/esm/dropdown/Dropdown.css.js.map +0 -1
- package/esm/dropdown/Dropdown.js +0 -148
- package/esm/dropdown/Dropdown.js.map +0 -1
- package/esm/dropdown/DropdownBase.js.map +0 -1
- package/esm/dropdown/DropdownButton.css.js +0 -4
- package/esm/dropdown/DropdownButton.css.js.map +0 -1
- package/esm/dropdown/DropdownButton.js +0 -70
- package/esm/dropdown/DropdownButton.js.map +0 -1
- package/esm/dropdown/useClickAway.js.map +0 -1
- package/esm/dropdown/useDropdown.js +0 -113
- package/esm/dropdown/useDropdown.js.map +0 -1
- package/esm/dropdown/useDropdownBase.js.map +0 -1
- package/esm/inputs/Checkbox.css.js +0 -4
- package/esm/inputs/Checkbox.css.js.map +0 -1
- package/esm/inputs/Checkbox.js +0 -30
- package/esm/inputs/Checkbox.js.map +0 -1
- package/esm/inputs/RadioButton.css.js +0 -4
- package/esm/inputs/RadioButton.css.js.map +0 -1
- package/esm/inputs/RadioButton.js +0 -37
- package/esm/inputs/RadioButton.js.map +0 -1
- package/esm/list/ChevronIcon.css.js +0 -4
- package/esm/list/ChevronIcon.css.js.map +0 -1
- package/esm/list/ChevronIcon.js +0 -20
- package/esm/list/ChevronIcon.js.map +0 -1
- package/types/combo-box/ComboBox.d.ts +0 -24
- package/types/combo-box/index.d.ts +0 -1
- package/types/combo-box/useCombobox.d.ts +0 -20
- package/types/dropdown/Dropdown.d.ts +0 -10
- package/types/dropdown/DropdownButton.d.ts +0 -41
- package/types/dropdown/useDropdown.d.ts +0 -13
- package/types/inputs/Checkbox.d.ts +0 -9
- package/types/inputs/RadioButton.d.ts +0 -9
- package/types/inputs/index.d.ts +0 -2
- /package/cjs/{dropdown → dropdown-base}/useClickAway.js +0 -0
- /package/cjs/{dropdown → dropdown-base}/useDropdownBase.js +0 -0
- /package/esm/{dropdown → dropdown-base}/useClickAway.js +0 -0
- /package/esm/{dropdown → dropdown-base}/useDropdownBase.js +0 -0
- /package/types/{dropdown → dropdown-base}/DropdownBase.d.ts +0 -0
- /package/types/{dropdown → dropdown-base}/dropdownTypes.d.ts +0 -0
- /package/types/{dropdown → dropdown-base}/useClickAway.d.ts +0 -0
- /package/types/{dropdown → dropdown-base}/useDropdownBase.d.ts +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var calendarNavigationCss = ".
|
|
3
|
+
var calendarNavigationCss = ".saltCalendarNavigation {\n display: grid;\n grid-template-columns: min-content auto min-content;\n padding-bottom: var(--salt-spacing-100);\n grid-gap: 0;\n align-items: center;\n height: var(--salt-size-base);\n}\n\n.saltCalendarNavigation-hideYearDropdown {\n grid-template-columns: min-content auto min-content;\n grid-gap: var(--salt-spacing-300);\n}\n\n.saltCalendarNavigation-dropdowns {\n display: grid;\n grid-template-columns: 1fr 1fr;\n grid-gap: var(--salt-spacing-100);\n}\n";
|
|
4
4
|
|
|
5
5
|
module.exports = calendarNavigationCss;
|
|
6
6
|
//# sourceMappingURL=CalendarNavigation.css.js.map
|
|
@@ -1,28 +1,16 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
+
var React = require('react');
|
|
4
5
|
var core = require('@salt-ds/core');
|
|
5
|
-
var
|
|
6
|
-
var window = require('@salt-ds/window');
|
|
6
|
+
var icons = require('@salt-ds/icons');
|
|
7
7
|
var cx = require('clsx');
|
|
8
|
-
var React = require('react');
|
|
9
|
-
require('../../dropdown/DropdownBase.js');
|
|
10
|
-
require('../../dropdown/DropdownButton.js');
|
|
11
|
-
var Dropdown = require('../../dropdown/Dropdown.js');
|
|
12
|
-
require('../../common-hooks/collectionProvider.js');
|
|
13
|
-
require('../../common-hooks/use-resize-observer.js');
|
|
14
|
-
require('@vuu-ui/vuu-utils');
|
|
15
|
-
require('../../list/common-hooks/keyUtils.js');
|
|
16
|
-
require('../../list/Highlighter.js');
|
|
17
|
-
var ListItem = require('../../list/ListItem.js');
|
|
18
|
-
require('../../list/List.js');
|
|
19
|
-
require('../../drag-drop/DragDropProvider.js');
|
|
20
|
-
require('../../drag-drop/Draggable.js');
|
|
21
8
|
var CalendarContext = require('./CalendarContext.js');
|
|
22
9
|
var CalendarNavigation$1 = require('./CalendarNavigation.css.js');
|
|
23
10
|
var date = require('@internationalized/date');
|
|
24
|
-
var IconButton = require('../../icon-button/IconButton.js');
|
|
25
11
|
var utils = require('./utils.js');
|
|
12
|
+
var window = require('@salt-ds/window');
|
|
13
|
+
var styles = require('@salt-ds/styles');
|
|
26
14
|
|
|
27
15
|
const withBaseName = core.makePrefixer("saltCalendarNavigation");
|
|
28
16
|
function useCalendarNavigation() {
|
|
@@ -55,15 +43,13 @@ function useCalendarNavigation() {
|
|
|
55
43
|
setVisibleMonth(event, newMonth);
|
|
56
44
|
}
|
|
57
45
|
};
|
|
58
|
-
const months = utils.monthsForLocale(visibleMonth)
|
|
59
|
-
|
|
60
|
-
});
|
|
61
|
-
const years = [-2, -1, 0, 1, 2].map((delta) => ({ value: visibleMonth.add({ years: delta }) })).filter(({ value }) => !isOutsideAllowedYears(value));
|
|
46
|
+
const months = utils.monthsForLocale(visibleMonth);
|
|
47
|
+
const years = [-2, -1, 0, 1, 2].map((delta) => visibleMonth.add({ years: delta })).filter((year) => !isOutsideAllowedYears(year));
|
|
62
48
|
const selectedMonth = months.find(
|
|
63
|
-
(
|
|
49
|
+
(month) => date.isSameMonth(month, visibleMonth)
|
|
64
50
|
);
|
|
65
51
|
const selectedYear = years.find(
|
|
66
|
-
(
|
|
52
|
+
(year) => date.isSameYear(year, visibleMonth)
|
|
67
53
|
);
|
|
68
54
|
const canNavigatePrevious = !(minDate && isDayVisible(minDate));
|
|
69
55
|
const canNavigateNext = !(maxDate && isDayVisible(maxDate));
|
|
@@ -77,22 +63,31 @@ function useCalendarNavigation() {
|
|
|
77
63
|
canNavigateNext,
|
|
78
64
|
canNavigatePrevious,
|
|
79
65
|
selectedMonth,
|
|
80
|
-
selectedYear
|
|
66
|
+
selectedYear,
|
|
67
|
+
isOutsideAllowedMonths
|
|
81
68
|
};
|
|
82
69
|
}
|
|
83
|
-
const
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
{
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
70
|
+
const OptionWithTooltip = ({
|
|
71
|
+
value,
|
|
72
|
+
children,
|
|
73
|
+
disabled,
|
|
74
|
+
tooltipContent
|
|
75
|
+
}) => {
|
|
76
|
+
const { activeState, openState } = core.useListControlContext();
|
|
77
|
+
const open = activeState?.value === value;
|
|
78
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
79
|
+
core.Tooltip,
|
|
80
|
+
{
|
|
81
|
+
placement: "right",
|
|
82
|
+
open: open && openState,
|
|
83
|
+
disabled: !disabled,
|
|
84
|
+
content: tooltipContent,
|
|
85
|
+
enterDelay: 0,
|
|
86
|
+
leaveDelay: 0,
|
|
87
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(core.Option, { value, disabled, children })
|
|
88
|
+
}
|
|
89
|
+
);
|
|
90
|
+
};
|
|
96
91
|
const CalendarNavigation = React.forwardRef(function CalendarNavigation2(props, ref) {
|
|
97
92
|
const {
|
|
98
93
|
className,
|
|
@@ -103,7 +98,7 @@ const CalendarNavigation = React.forwardRef(function CalendarNavigation2(props,
|
|
|
103
98
|
} = props;
|
|
104
99
|
const targetWindow = window.useWindow();
|
|
105
100
|
styles.useComponentCssInjection({
|
|
106
|
-
testId: "salt-calendar-
|
|
101
|
+
testId: "salt-calendar-navigation",
|
|
107
102
|
css: CalendarNavigation$1,
|
|
108
103
|
window: targetWindow
|
|
109
104
|
});
|
|
@@ -117,7 +112,8 @@ const CalendarNavigation = React.forwardRef(function CalendarNavigation2(props,
|
|
|
117
112
|
canNavigatePrevious,
|
|
118
113
|
visibleMonth,
|
|
119
114
|
selectedMonth,
|
|
120
|
-
selectedYear
|
|
115
|
+
selectedYear,
|
|
116
|
+
isOutsideAllowedMonths
|
|
121
117
|
} = useCalendarNavigation();
|
|
122
118
|
const handleNavigatePrevious = (event) => {
|
|
123
119
|
moveToPreviousMonth(event);
|
|
@@ -126,35 +122,16 @@ const CalendarNavigation = React.forwardRef(function CalendarNavigation2(props,
|
|
|
126
122
|
moveToNextMonth(event);
|
|
127
123
|
};
|
|
128
124
|
const handleMonthSelect = (event, month) => {
|
|
129
|
-
|
|
130
|
-
moveToMonth(event, month.value);
|
|
131
|
-
}
|
|
125
|
+
moveToMonth(event, month[0]);
|
|
132
126
|
};
|
|
133
127
|
const handleYearSelect = (event, year) => {
|
|
134
|
-
|
|
135
|
-
moveToMonth(event, year.value);
|
|
136
|
-
}
|
|
128
|
+
moveToMonth(event, year[0]);
|
|
137
129
|
};
|
|
138
|
-
const
|
|
139
|
-
|
|
140
|
-
MonthDropdownProps?.["aria-labelledby"],
|
|
141
|
-
// TODO need a prop on Dropdown to allow buttonId to be passed, should not make assumptions about internal
|
|
142
|
-
// id assignment like this
|
|
143
|
-
`${monthDropdownId}-control`
|
|
144
|
-
);
|
|
145
|
-
const yearDropdownId = core.useId(YearDropdownProps?.id) || "";
|
|
146
|
-
const yearDropdownLabelledBy = cx.clsx(
|
|
147
|
-
YearDropdownProps?.["aria-labelledby"],
|
|
148
|
-
`${yearDropdownId}-control`
|
|
149
|
-
);
|
|
150
|
-
const defaultItemToMonth = (date) => {
|
|
151
|
-
if (hideYearDropdown) {
|
|
152
|
-
return utils.formatDate(date.value, { month: "long" });
|
|
153
|
-
}
|
|
154
|
-
return utils.formatDate(date.value, { month: "short" });
|
|
130
|
+
const formatMonth = (date) => {
|
|
131
|
+
return !date ? "" : utils.formatDate(date, { month: hideYearDropdown ? "long" : "short" });
|
|
155
132
|
};
|
|
156
|
-
const
|
|
157
|
-
return utils.formatDate(date
|
|
133
|
+
const formatYear = (date) => {
|
|
134
|
+
return !date ? "" : utils.formatDate(date, { year: "numeric" });
|
|
158
135
|
};
|
|
159
136
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
160
137
|
"div",
|
|
@@ -173,70 +150,91 @@ const CalendarNavigation = React.forwardRef(function CalendarNavigation2(props,
|
|
|
173
150
|
placement: "top",
|
|
174
151
|
disabled: canNavigatePrevious,
|
|
175
152
|
content: "Past dates are out of range",
|
|
153
|
+
enterDelay: 0,
|
|
154
|
+
leaveDelay: 0,
|
|
176
155
|
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
177
|
-
|
|
156
|
+
core.Button,
|
|
178
157
|
{
|
|
179
|
-
"aria-label": `Previous Month, ${utils.formatDate(
|
|
180
|
-
visibleMonth.subtract({ months: 1 })
|
|
181
|
-
)}`,
|
|
182
158
|
disabled: !canNavigatePrevious,
|
|
183
|
-
icon: "chevron-left",
|
|
184
159
|
variant: "secondary",
|
|
185
160
|
onClick: handleNavigatePrevious,
|
|
186
|
-
|
|
187
|
-
|
|
161
|
+
focusableWhenDisabled: true,
|
|
162
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
163
|
+
icons.ChevronLeftIcon,
|
|
164
|
+
{
|
|
165
|
+
"aria-label": `Previous Month, ${utils.formatDate(
|
|
166
|
+
visibleMonth.subtract({ months: 1 })
|
|
167
|
+
)}`
|
|
168
|
+
}
|
|
169
|
+
)
|
|
188
170
|
}
|
|
189
171
|
)
|
|
190
172
|
}
|
|
191
173
|
),
|
|
192
|
-
/* @__PURE__ */ jsxRuntime.
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
174
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: withBaseName("dropdowns"), children: [
|
|
175
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
176
|
+
core.Dropdown,
|
|
177
|
+
{
|
|
178
|
+
"aria-label": "Month Dropdown",
|
|
179
|
+
selected: selectedMonth ? [selectedMonth] : [],
|
|
180
|
+
value: formatMonth(selectedMonth),
|
|
181
|
+
onSelectionChange: handleMonthSelect,
|
|
182
|
+
...MonthDropdownProps,
|
|
183
|
+
children: months.map((month) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
184
|
+
OptionWithTooltip,
|
|
185
|
+
{
|
|
186
|
+
value: month,
|
|
187
|
+
disabled: isOutsideAllowedMonths(month),
|
|
188
|
+
tooltipContent: "This month is out of range",
|
|
189
|
+
children: formatMonth(month)
|
|
190
|
+
},
|
|
191
|
+
formatMonth(month)
|
|
192
|
+
))
|
|
193
|
+
}
|
|
194
|
+
),
|
|
195
|
+
!hideYearDropdown && /* @__PURE__ */ jsxRuntime.jsx(
|
|
196
|
+
core.Dropdown,
|
|
197
|
+
{
|
|
198
|
+
"aria-label": "Year Dropdown",
|
|
199
|
+
selected: selectedYear ? [selectedYear] : [],
|
|
200
|
+
value: formatYear(selectedYear),
|
|
201
|
+
onSelectionChange: handleYearSelect,
|
|
202
|
+
...YearDropdownProps,
|
|
203
|
+
children: years.map((year) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
204
|
+
OptionWithTooltip,
|
|
205
|
+
{
|
|
206
|
+
value: year,
|
|
207
|
+
tooltipContent: "This year is out of range",
|
|
208
|
+
children: formatYear(year)
|
|
209
|
+
},
|
|
210
|
+
formatYear(year)
|
|
211
|
+
))
|
|
212
|
+
}
|
|
213
|
+
)
|
|
214
|
+
] }),
|
|
222
215
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
223
216
|
core.Tooltip,
|
|
224
217
|
{
|
|
225
218
|
placement: "top",
|
|
226
219
|
disabled: canNavigateNext,
|
|
227
220
|
content: "Future dates are out of range",
|
|
221
|
+
enterDelay: 0,
|
|
222
|
+
leaveDelay: 0,
|
|
228
223
|
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
229
|
-
|
|
224
|
+
core.Button,
|
|
230
225
|
{
|
|
231
|
-
"aria-label": `Next Month, ${utils.formatDate(
|
|
232
|
-
visibleMonth.add({ months: 1 })
|
|
233
|
-
)}`,
|
|
234
226
|
disabled: !canNavigateNext,
|
|
235
|
-
icon: "chevron-right",
|
|
236
227
|
variant: "secondary",
|
|
237
228
|
onClick: handleNavigateNext,
|
|
238
|
-
|
|
239
|
-
|
|
229
|
+
focusableWhenDisabled: true,
|
|
230
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
231
|
+
icons.ChevronRightIcon,
|
|
232
|
+
{
|
|
233
|
+
"aria-label": `Next Month, ${utils.formatDate(
|
|
234
|
+
visibleMonth.add({ months: 1 })
|
|
235
|
+
)}`
|
|
236
|
+
}
|
|
237
|
+
)
|
|
240
238
|
}
|
|
241
239
|
)
|
|
242
240
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CalendarNavigation.js","sources":["../../../src/calendar/internal/CalendarNavigation.tsx"],"sourcesContent":["import { ButtonProps, makePrefixer, Tooltip, useId } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n ComponentPropsWithRef,\n forwardRef,\n MouseEventHandler,\n SyntheticEvent,\n} from \"react\";\nimport { Dropdown, DropdownProps } from \"../../dropdown\";\nimport { ListItem, ListItemType } from \"../../list\";\nimport { useCalendarContext } from \"./CalendarContext\";\n\nimport calendarNavigationCss from \"./CalendarNavigation.css\";\n\nimport { DateValue, isSameMonth, isSameYear } from \"@internationalized/date\";\nimport { SingleSelectionHandler } from \"../../common-hooks\";\nimport { IconButton } from \"../../icon-button\";\nimport { formatDate, monthDiff, monthsForLocale } from \"./utils\";\n\ntype DropdownItem = {\n value: DateValue;\n disabled?: boolean;\n};\n\ntype dateDropdownProps = DropdownProps<DropdownItem>;\n\nexport interface CalendarNavigationProps extends ComponentPropsWithRef<\"div\"> {\n MonthDropdownProps?: dateDropdownProps;\n YearDropdownProps?: dateDropdownProps;\n onMonthSelect?: dateDropdownProps[\"onChange\"];\n onYearSelect?: dateDropdownProps[\"onChange\"];\n onNavigateNext?: ButtonProps[\"onClick\"];\n onNavigatePrevious?: ButtonProps[\"onClick\"];\n hideYearDropdown?: boolean;\n}\n\nconst withBaseName = makePrefixer(\"saltCalendarNavigation\");\n\nfunction useCalendarNavigation() {\n const {\n state: { visibleMonth, minDate, maxDate },\n helpers: {\n setVisibleMonth,\n isDayVisible,\n isOutsideAllowedYears,\n isOutsideAllowedMonths,\n },\n } = useCalendarContext();\n\n const moveToNextMonth = (event: SyntheticEvent) => {\n setVisibleMonth(event, visibleMonth.add({ months: 1 }));\n };\n\n const moveToPreviousMonth = (event: SyntheticEvent) => {\n setVisibleMonth(event, visibleMonth.subtract({ months: 1 }));\n };\n\n const moveToMonth = (event: SyntheticEvent, month: DateValue) => {\n let newMonth = month;\n\n if (!isOutsideAllowedYears(newMonth)) {\n if (isOutsideAllowedMonths(newMonth)) {\n // If month is navigable we should move to the closest navigable month\n const navigableMonths = monthsForLocale(visibleMonth).filter(\n (n) => !isOutsideAllowedMonths(n)\n );\n newMonth = navigableMonths.reduce((closestMonth, currentMonth) =>\n Math.abs(monthDiff(currentMonth, newMonth)) <\n Math.abs(monthDiff(closestMonth, newMonth))\n ? currentMonth\n : closestMonth\n );\n }\n setVisibleMonth(event, newMonth);\n }\n };\n\n const months = monthsForLocale(visibleMonth).map((month) => {\n return { value: month, disabled: isOutsideAllowedMonths(month) };\n });\n\n const years = [-2, -1, 0, 1, 2]\n .map((delta) => ({ value: visibleMonth.add({ years: delta }) }))\n .filter(({ value }) => !isOutsideAllowedYears(value));\n\n const selectedMonth = months.find((item: DropdownItem) =>\n isSameMonth(item.value, visibleMonth)\n );\n const selectedYear = years.find((item: DropdownItem) =>\n isSameYear(item.value, visibleMonth)\n );\n\n const canNavigatePrevious = !(minDate && isDayVisible(minDate));\n const canNavigateNext = !(maxDate && isDayVisible(maxDate));\n\n return {\n moveToNextMonth,\n moveToPreviousMonth,\n moveToMonth,\n visibleMonth,\n months,\n years,\n canNavigateNext,\n canNavigatePrevious,\n selectedMonth,\n selectedYear,\n };\n}\n\nconst ListItemWithTooltip: ListItemType<DropdownItem> = ({\n item,\n label,\n ...props\n}) => (\n <Tooltip\n placement=\"right\"\n disabled={!item?.disabled}\n content=\"This month is out of range\"\n >\n <ListItem {...props}>{label}</ListItem>\n </Tooltip>\n);\n\nexport const CalendarNavigation = forwardRef<\n HTMLDivElement,\n CalendarNavigationProps\n>(function CalendarNavigation(props, ref) {\n const {\n className,\n MonthDropdownProps,\n YearDropdownProps,\n hideYearDropdown,\n ...rest\n } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-calendar-month\",\n css: calendarNavigationCss,\n window: targetWindow,\n });\n\n const {\n moveToPreviousMonth,\n moveToNextMonth,\n moveToMonth,\n months,\n years,\n canNavigateNext,\n canNavigatePrevious,\n visibleMonth,\n selectedMonth,\n selectedYear,\n } = useCalendarNavigation();\n\n const handleNavigatePrevious: MouseEventHandler<HTMLButtonElement> = (\n event\n ) => {\n moveToPreviousMonth(event);\n };\n\n const handleNavigateNext: MouseEventHandler<HTMLButtonElement> = (event) => {\n moveToNextMonth(event);\n };\n\n const handleMonthSelect: SingleSelectionHandler<DropdownItem> = (\n event,\n month\n ) => {\n if (month && event) {\n moveToMonth(event, month.value);\n }\n };\n\n const handleYearSelect: SingleSelectionHandler<DropdownItem> = (\n event,\n year\n ) => {\n if (year && event) {\n moveToMonth(event, year.value);\n }\n };\n\n const monthDropdownId = useId(MonthDropdownProps?.id) || \"\";\n const monthDropdownLabelledBy = clsx(\n MonthDropdownProps?.[\"aria-labelledby\"],\n // TODO need a prop on Dropdown to allow buttonId to be passed, should not make assumptions about internal\n // id assignment like this\n `${monthDropdownId}-control`\n );\n\n const yearDropdownId = useId(YearDropdownProps?.id) || \"\";\n const yearDropdownLabelledBy = clsx(\n YearDropdownProps?.[\"aria-labelledby\"],\n `${yearDropdownId}-control`\n );\n\n const defaultItemToMonth = (date: DropdownItem) => {\n if (hideYearDropdown) {\n return formatDate(date.value, { month: \"long\" });\n }\n return formatDate(date.value, { month: \"short\" });\n };\n\n const defaultItemToYear = (date: DropdownItem) => {\n return formatDate(date.value, { year: \"numeric\" });\n };\n\n return (\n <div\n className={clsx(\n withBaseName(),\n { [withBaseName(\"hideYearDropdown\")]: hideYearDropdown },\n className\n )}\n ref={ref}\n {...rest}\n >\n <Tooltip\n placement=\"top\"\n disabled={canNavigatePrevious}\n content=\"Past dates are out of range\"\n >\n <IconButton\n aria-label={`Previous Month, ${formatDate(\n visibleMonth.subtract({ months: 1 })\n )}`}\n disabled={!canNavigatePrevious}\n icon=\"chevron-left\"\n variant=\"secondary\"\n onClick={handleNavigatePrevious}\n className={withBaseName(\"previousButton\")}\n focusableWhenDisabled={true}\n />\n </Tooltip>\n <Dropdown<DropdownItem>\n source={months}\n id={monthDropdownId}\n aria-labelledby={monthDropdownLabelledBy}\n aria-label=\"Month Dropdown\"\n {...MonthDropdownProps}\n ListItem={ListItemWithTooltip}\n selected={selectedMonth}\n itemToString={defaultItemToMonth}\n onSelectionChange={handleMonthSelect}\n fullWidth\n />\n {!hideYearDropdown && (\n <Dropdown<DropdownItem>\n source={years}\n id={yearDropdownId}\n aria-labelledby={yearDropdownLabelledBy}\n aria-label=\"Year Dropdown\"\n {...YearDropdownProps}\n ListItem={ListItemWithTooltip}\n selected={selectedYear}\n onSelectionChange={handleYearSelect}\n itemToString={defaultItemToYear}\n fullWidth\n />\n )}\n <Tooltip\n placement=\"top\"\n disabled={canNavigateNext}\n content=\"Future dates are out of range\"\n >\n <IconButton\n aria-label={`Next Month, ${formatDate(\n visibleMonth.add({ months: 1 })\n )}`}\n disabled={!canNavigateNext}\n icon=\"chevron-right\"\n variant=\"secondary\"\n onClick={handleNavigateNext}\n className={withBaseName(\"nextButton\")}\n focusableWhenDisabled={true}\n />\n </Tooltip>\n </div>\n );\n});\n"],"names":["makePrefixer","useCalendarContext","monthsForLocale","monthDiff","isSameMonth","isSameYear","jsx","Tooltip","ListItem","forwardRef","CalendarNavigation","useWindow","useComponentCssInjection","calendarNavigationCss","useId","clsx","formatDate","jsxs","IconButton","Dropdown"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CalendarNavigation.js","sources":["../../../src/calendar/internal/CalendarNavigation.tsx"],"sourcesContent":["import {\n ComponentPropsWithRef,\n forwardRef,\n MouseEventHandler,\n SyntheticEvent,\n} from \"react\";\nimport {\n Button,\n ButtonProps,\n makePrefixer,\n Tooltip,\n Dropdown,\n DropdownProps,\n Option,\n OptionProps,\n useListControlContext,\n} from \"@salt-ds/core\";\nimport { ChevronLeftIcon, ChevronRightIcon } from \"@salt-ds/icons\";\nimport { clsx } from \"clsx\";\n\nimport { useCalendarContext } from \"./CalendarContext\";\n\nimport calendarNavigationCss from \"./CalendarNavigation.css\";\nimport { DateValue, isSameMonth, isSameYear } from \"@internationalized/date\";\nimport { formatDate, monthDiff, monthsForLocale } from \"./utils\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\n\ntype dateDropdownProps = DropdownProps<DateValue>;\n\nexport interface CalendarNavigationProps extends ComponentPropsWithRef<\"div\"> {\n MonthDropdownProps?: dateDropdownProps;\n YearDropdownProps?: dateDropdownProps;\n onMonthSelect?: dateDropdownProps[\"onChange\"];\n onYearSelect?: dateDropdownProps[\"onChange\"];\n onNavigateNext?: ButtonProps[\"onClick\"];\n onNavigatePrevious?: ButtonProps[\"onClick\"];\n hideYearDropdown?: boolean;\n}\n\ninterface OptionWithTooltipProps extends OptionProps {\n value: DateValue;\n tooltipContent: string;\n}\n\nconst withBaseName = makePrefixer(\"saltCalendarNavigation\");\n\nfunction useCalendarNavigation() {\n const {\n state: { visibleMonth, minDate, maxDate },\n helpers: {\n setVisibleMonth,\n isDayVisible,\n isOutsideAllowedYears,\n isOutsideAllowedMonths,\n },\n } = useCalendarContext();\n\n const moveToNextMonth = (event: SyntheticEvent) => {\n setVisibleMonth(event, visibleMonth.add({ months: 1 }));\n };\n\n const moveToPreviousMonth = (event: SyntheticEvent) => {\n setVisibleMonth(event, visibleMonth.subtract({ months: 1 }));\n };\n\n const moveToMonth = (event: SyntheticEvent, month: DateValue) => {\n let newMonth = month;\n\n if (!isOutsideAllowedYears(newMonth)) {\n if (isOutsideAllowedMonths(newMonth)) {\n // If month is navigable we should move to the closest navigable month\n const navigableMonths = monthsForLocale(visibleMonth).filter(\n (n) => !isOutsideAllowedMonths(n)\n );\n newMonth = navigableMonths.reduce((closestMonth, currentMonth) =>\n Math.abs(monthDiff(currentMonth, newMonth)) <\n Math.abs(monthDiff(closestMonth, newMonth))\n ? currentMonth\n : closestMonth\n );\n }\n setVisibleMonth(event, newMonth);\n }\n };\n\n const months: DateValue[] = monthsForLocale(visibleMonth);\n\n const years: DateValue[] = [-2, -1, 0, 1, 2]\n .map((delta) => visibleMonth.add({ years: delta }))\n .filter((year) => !isOutsideAllowedYears(year));\n\n const selectedMonth: DateValue | undefined = months.find((month: DateValue) =>\n isSameMonth(month, visibleMonth)\n );\n const selectedYear: DateValue | undefined = years.find((year: DateValue) =>\n isSameYear(year, visibleMonth)\n );\n\n const canNavigatePrevious = !(minDate && isDayVisible(minDate));\n const canNavigateNext = !(maxDate && isDayVisible(maxDate));\n\n return {\n moveToNextMonth,\n moveToPreviousMonth,\n moveToMonth,\n visibleMonth,\n months,\n years,\n canNavigateNext,\n canNavigatePrevious,\n selectedMonth,\n selectedYear,\n isOutsideAllowedMonths,\n };\n}\n\nconst OptionWithTooltip = ({\n value,\n children,\n disabled,\n tooltipContent,\n}: OptionWithTooltipProps) => {\n const { activeState, openState } = useListControlContext();\n const open = activeState?.value === value;\n\n return (\n <Tooltip\n placement=\"right\"\n open={open && openState}\n disabled={!disabled}\n content={tooltipContent}\n enterDelay={0} // --salt-duration-instant\n leaveDelay={0} // --salt-duration-instant\n >\n <Option value={value} disabled={disabled}>\n {children}\n </Option>\n </Tooltip>\n );\n};\n\nexport const CalendarNavigation = forwardRef<\n HTMLDivElement,\n CalendarNavigationProps\n>(function CalendarNavigation(props, ref) {\n const {\n className,\n MonthDropdownProps,\n YearDropdownProps,\n hideYearDropdown,\n ...rest\n } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-calendar-navigation\",\n css: calendarNavigationCss,\n window: targetWindow,\n });\n\n const {\n moveToPreviousMonth,\n moveToNextMonth,\n moveToMonth,\n months,\n years,\n canNavigateNext,\n canNavigatePrevious,\n visibleMonth,\n selectedMonth,\n selectedYear,\n isOutsideAllowedMonths,\n } = useCalendarNavigation();\n\n const handleNavigatePrevious: MouseEventHandler<HTMLButtonElement> = (\n event\n ) => {\n moveToPreviousMonth(event);\n };\n\n const handleNavigateNext: MouseEventHandler<HTMLButtonElement> = (event) => {\n moveToNextMonth(event);\n };\n\n const handleMonthSelect = (event: SyntheticEvent, month: DateValue[]) => {\n moveToMonth(event, month[0]);\n };\n\n const handleYearSelect = (event: SyntheticEvent, year: DateValue[]) => {\n moveToMonth(event, year[0]);\n };\n\n const formatMonth = (date?: DateValue) => {\n return !date\n ? \"\"\n : formatDate(date, { month: hideYearDropdown ? \"long\" : \"short\" });\n };\n\n const formatYear = (date?: DateValue) => {\n return !date ? \"\" : formatDate(date, { year: \"numeric\" });\n };\n\n return (\n <div\n className={clsx(\n withBaseName(),\n { [withBaseName(\"hideYearDropdown\")]: hideYearDropdown },\n className\n )}\n ref={ref}\n {...rest}\n >\n <Tooltip\n placement=\"top\"\n disabled={canNavigatePrevious}\n content=\"Past dates are out of range\"\n enterDelay={0} // --salt-duration-instant\n leaveDelay={0} // --salt-duration-instant\n >\n <Button\n disabled={!canNavigatePrevious}\n variant=\"secondary\"\n onClick={handleNavigatePrevious}\n focusableWhenDisabled={true}\n >\n <ChevronLeftIcon\n aria-label={`Previous Month, ${formatDate(\n visibleMonth.subtract({ months: 1 })\n )}`}\n />\n </Button>\n </Tooltip>\n <div className={withBaseName(\"dropdowns\")}>\n <Dropdown\n aria-label=\"Month Dropdown\"\n selected={selectedMonth ? [selectedMonth] : []}\n value={formatMonth(selectedMonth)}\n onSelectionChange={handleMonthSelect}\n {...MonthDropdownProps}\n >\n {months.map((month) => (\n <OptionWithTooltip\n key={formatMonth(month)}\n value={month}\n disabled={isOutsideAllowedMonths(month)}\n tooltipContent=\"This month is out of range\"\n >\n {formatMonth(month)}\n </OptionWithTooltip>\n ))}\n </Dropdown>\n {!hideYearDropdown && (\n <Dropdown\n aria-label=\"Year Dropdown\"\n selected={selectedYear ? [selectedYear] : []}\n value={formatYear(selectedYear)}\n onSelectionChange={handleYearSelect}\n {...YearDropdownProps}\n >\n {years.map((year) => (\n <OptionWithTooltip\n key={formatYear(year)}\n value={year}\n tooltipContent=\"This year is out of range\"\n >\n {formatYear(year)}\n </OptionWithTooltip>\n ))}\n </Dropdown>\n )}\n </div>\n <Tooltip\n placement=\"top\"\n disabled={canNavigateNext}\n content=\"Future dates are out of range\"\n enterDelay={0} // --salt-duration-instant\n leaveDelay={0} // --salt-duration-instant\n >\n <Button\n disabled={!canNavigateNext}\n variant=\"secondary\"\n onClick={handleNavigateNext}\n focusableWhenDisabled={true}\n >\n <ChevronRightIcon\n aria-label={`Next Month, ${formatDate(\n visibleMonth.add({ months: 1 })\n )}`}\n />\n </Button>\n </Tooltip>\n </div>\n );\n});\n"],"names":["makePrefixer","useCalendarContext","monthsForLocale","monthDiff","isSameMonth","isSameYear","useListControlContext","jsx","Tooltip","Option","forwardRef","CalendarNavigation","useWindow","useComponentCssInjection","calendarNavigationCss","formatDate","jsxs","clsx","Button","ChevronLeftIcon","Dropdown","ChevronRightIcon"],"mappings":"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"}
|
|
@@ -9,9 +9,7 @@ var Calendar = require('../calendar/Calendar.js');
|
|
|
9
9
|
require('../calendar/internal/CalendarContext.js');
|
|
10
10
|
require('../calendar/internal/utils.js');
|
|
11
11
|
require('../calendar/useSelection.js');
|
|
12
|
-
var DropdownBase = require('../dropdown/DropdownBase.js');
|
|
13
|
-
require('../dropdown/DropdownButton.js');
|
|
14
|
-
require('../dropdown/Dropdown.js');
|
|
12
|
+
var DropdownBase = require('../dropdown-base/DropdownBase.js');
|
|
15
13
|
require('../common-hooks/collectionProvider.js');
|
|
16
14
|
require('../common-hooks/use-resize-observer.js');
|
|
17
15
|
require('@vuu-ui/vuu-utils');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DatePopup.js","sources":["../../src/date-popup/DatePopup.tsx"],"sourcesContent":["import {\n DateValue,\n getLocalTimeZone,\n today as getTodayDate,\n} from \"@internationalized/date\";\nimport { useForkRef } from \"@salt-ds/core\";\nimport cx from \"clsx\";\nimport { forwardRef, HTMLAttributes } from \"react\";\nimport { Calendar, CalendarProps } from \"../calendar\";\nimport { DropdownBase, DropdownCloseHandler } from \"../dropdown\";\nimport { IconButton } from \"../icon-button\";\nimport { useDatePopup } from \"./useDatePopup\";\n\nconst classBase = \"vuuDatePopup\";\n\nexport interface DatePopupProps\n extends Pick<CalendarProps, \"selectionVariant\">,\n Omit<HTMLAttributes<HTMLDivElement>, \"onChange\" | \"onKeyDown\"> {\n \"data-embedded\"?: boolean;\n selectedDate?: DateValue;\n onPopupClose?: DropdownCloseHandler;\n onPopupOpen?: () => void;\n onChange: (date: DateValue) => void;\n}\n\nconst tz = getLocalTimeZone();\nconst today = getTodayDate(tz);\n\nexport const DatePopup = forwardRef<HTMLButtonElement, DatePopupProps>(\n function DatePopup(\n {\n selectedDate,\n onChange,\n onPopupClose,\n onPopupOpen,\n selectionVariant,\n \"data-embedded\": dataEmbedded,\n ...htmlAttributes\n },\n forwardedRef\n ) {\n const {\n calendarRef,\n date,\n isOpen,\n onSelectedDateChange,\n onVisibleMonthChange,\n handleOpenChange,\n triggererRef,\n visibleMonth,\n } = useDatePopup({\n onChange,\n onPopupClose,\n onPopupOpen,\n selectedDate: selectedDate || today,\n selectionVariant,\n });\n\n return (\n <DropdownBase\n {...htmlAttributes}\n className={classBase}\n isOpen={isOpen}\n placement=\"below\"\n onOpenChange={handleOpenChange}\n >\n <IconButton\n data-embedded={dataEmbedded}\n icon=\"date\"\n ref={useForkRef(forwardedRef, triggererRef)}\n variant=\"secondary\"\n className={cx({ \"saltButton-active\": isOpen })}\n />\n <Calendar\n visibleMonth={visibleMonth}\n ref={calendarRef}\n selectedDate={date}\n selectionVariant=\"default\"\n onSelectedDateChange={onSelectedDateChange}\n onVisibleMonthChange={onVisibleMonthChange}\n className={`${classBase}-calendar`}\n />\n </DropdownBase>\n );\n }\n);\n"],"names":["getLocalTimeZone","getTodayDate","forwardRef","DatePopup","useDatePopup","jsxs","DropdownBase","jsx","IconButton","useForkRef","Calendar"],"mappings":"
|
|
1
|
+
{"version":3,"file":"DatePopup.js","sources":["../../src/date-popup/DatePopup.tsx"],"sourcesContent":["import {\n DateValue,\n getLocalTimeZone,\n today as getTodayDate,\n} from \"@internationalized/date\";\nimport { useForkRef } from \"@salt-ds/core\";\nimport cx from \"clsx\";\nimport { forwardRef, HTMLAttributes } from \"react\";\nimport { Calendar, CalendarProps } from \"../calendar\";\nimport { DropdownBase, DropdownCloseHandler } from \"../dropdown-base\";\nimport { IconButton } from \"../icon-button\";\nimport { useDatePopup } from \"./useDatePopup\";\n\nconst classBase = \"vuuDatePopup\";\n\nexport interface DatePopupProps\n extends Pick<CalendarProps, \"selectionVariant\">,\n Omit<HTMLAttributes<HTMLDivElement>, \"onChange\" | \"onKeyDown\"> {\n \"data-embedded\"?: boolean;\n selectedDate?: DateValue;\n onPopupClose?: DropdownCloseHandler;\n onPopupOpen?: () => void;\n onChange: (date: DateValue) => void;\n}\n\nconst tz = getLocalTimeZone();\nconst today = getTodayDate(tz);\n\nexport const DatePopup = forwardRef<HTMLButtonElement, DatePopupProps>(\n function DatePopup(\n {\n selectedDate,\n onChange,\n onPopupClose,\n onPopupOpen,\n selectionVariant,\n \"data-embedded\": dataEmbedded,\n ...htmlAttributes\n },\n forwardedRef\n ) {\n const {\n calendarRef,\n date,\n isOpen,\n onSelectedDateChange,\n onVisibleMonthChange,\n handleOpenChange,\n triggererRef,\n visibleMonth,\n } = useDatePopup({\n onChange,\n onPopupClose,\n onPopupOpen,\n selectedDate: selectedDate || today,\n selectionVariant,\n });\n\n return (\n <DropdownBase\n {...htmlAttributes}\n className={classBase}\n isOpen={isOpen}\n placement=\"below\"\n onOpenChange={handleOpenChange}\n >\n <IconButton\n data-embedded={dataEmbedded}\n icon=\"date\"\n ref={useForkRef(forwardedRef, triggererRef)}\n variant=\"secondary\"\n className={cx({ \"saltButton-active\": isOpen })}\n />\n <Calendar\n visibleMonth={visibleMonth}\n ref={calendarRef}\n selectedDate={date}\n selectionVariant=\"default\"\n onSelectedDateChange={onSelectedDateChange}\n onVisibleMonthChange={onVisibleMonthChange}\n className={`${classBase}-calendar`}\n />\n </DropdownBase>\n );\n }\n);\n"],"names":["getLocalTimeZone","getTodayDate","forwardRef","DatePopup","useDatePopup","jsxs","DropdownBase","jsx","IconButton","useForkRef","Calendar"],"mappings":";;;;;;;;;;;;;;;;;;;;AAaA,MAAM,SAAY,GAAA,cAAA,CAAA;AAYlB,MAAM,KAAKA,qBAAiB,EAAA,CAAA;AAC5B,MAAM,KAAA,GAAQC,WAAa,EAAE,CAAA,CAAA;AAEtB,MAAM,SAAY,GAAAC,gBAAA;AAAA,EACvB,SAASC,UACP,CAAA;AAAA,IACE,YAAA;AAAA,IACA,QAAA;AAAA,IACA,YAAA;AAAA,IACA,WAAA;AAAA,IACA,gBAAA;AAAA,IACA,eAAiB,EAAA,YAAA;AAAA,IACjB,GAAG,cAAA;AAAA,KAEL,YACA,EAAA;AACA,IAAM,MAAA;AAAA,MACJ,WAAA;AAAA,MACA,IAAA;AAAA,MACA,MAAA;AAAA,MACA,oBAAA;AAAA,MACA,oBAAA;AAAA,MACA,gBAAA;AAAA,MACA,YAAA;AAAA,MACA,YAAA;AAAA,QACEC,yBAAa,CAAA;AAAA,MACf,QAAA;AAAA,MACA,YAAA;AAAA,MACA,WAAA;AAAA,MACA,cAAc,YAAgB,IAAA,KAAA;AAAA,MAC9B,gBAAA;AAAA,KACD,CAAA,CAAA;AAED,IACE,uBAAAC,eAAA;AAAA,MAACC,yBAAA;AAAA,MAAA;AAAA,QACE,GAAG,cAAA;AAAA,QACJ,SAAW,EAAA,SAAA;AAAA,QACX,MAAA;AAAA,QACA,SAAU,EAAA,OAAA;AAAA,QACV,YAAc,EAAA,gBAAA;AAAA,QAEd,QAAA,EAAA;AAAA,0BAAAC,cAAA;AAAA,YAACC,qBAAA;AAAA,YAAA;AAAA,cACC,eAAe,EAAA,YAAA;AAAA,cACf,IAAK,EAAA,MAAA;AAAA,cACL,GAAA,EAAKC,eAAW,CAAA,YAAA,EAAc,YAAY,CAAA;AAAA,cAC1C,OAAQ,EAAA,WAAA;AAAA,cACR,SAAW,EAAA,EAAA,CAAG,EAAE,mBAAA,EAAqB,QAAQ,CAAA;AAAA,aAAA;AAAA,WAC/C;AAAA,0BACAF,cAAA;AAAA,YAACG,iBAAA;AAAA,YAAA;AAAA,cACC,YAAA;AAAA,cACA,GAAK,EAAA,WAAA;AAAA,cACL,YAAc,EAAA,IAAA;AAAA,cACd,gBAAiB,EAAA,SAAA;AAAA,cACjB,oBAAA;AAAA,cACA,oBAAA;AAAA,cACA,SAAA,EAAW,GAAG,SAAS,CAAA,SAAA,CAAA;AAAA,aAAA;AAAA,WACzB;AAAA,SAAA;AAAA,OAAA;AAAA,KACF,CAAA;AAAA,GAEJ;AACF;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useDatePopup.js","sources":["../../src/date-popup/useDatePopup.ts"],"sourcesContent":["import { useCallback, useMemo, useRef, useState } from \"react\";\nimport { OpenChangeHandler } from \"../dropdown\";\nimport { DateValue } from \"@internationalized/date\";\nimport { DatePopupProps } from \"./DatePopup\";\n\nconst SELECTED_DAY =\n \".saltCalendarDay-selected:not(.saltCalendarDay-outOfRange)\";\n\ntype WithRequired<T, K extends keyof T> = T & { [P in K]-?: T[P] };\n\nexport interface DatePopupHookProps\n extends Pick<DatePopupProps, \"onPopupClose\" | \"onPopupOpen\">,\n WithRequired<DatePopupProps, \"onChange\" | \"selectedDate\"> {}\n\nexport const useDatePopup = ({\n onChange,\n onPopupClose,\n onPopupOpen,\n selectedDate,\n}: // selectionVariant,\nDatePopupHookProps) => {\n const [date, setDate] = useState<DateValue>(selectedDate);\n const [, forceUpdate] = useState({});\n const [isOpen, setIsOpen] = useState<boolean>(false);\n const triggererRef = useRef<HTMLButtonElement>(null);\n const calendarRef = useRef<HTMLDivElement>(null);\n\n const visibleMonthRef = useRef<DateValue>(selectedDate);\n const setVisibleMonth = useMemo(() => {\n const setValue = (v: DateValue) => {\n if (v.toString() !== visibleMonthRef.current.toString()) {\n visibleMonthRef.current = v;\n forceUpdate({});\n }\n };\n setValue(selectedDate);\n return setValue;\n }, [selectedDate]);\n\n const handleOpenChange = useCallback<OpenChangeHandler>(\n (open, reason) => {\n setIsOpen(open);\n if (open) {\n onPopupOpen?.();\n requestAnimationFrame(() => {\n const el = calendarRef.current?.querySelector(\n SELECTED_DAY\n ) as HTMLElement;\n el?.focus();\n });\n } else {\n if (reason !== \"Tab\") {\n triggererRef.current?.focus();\n }\n onPopupClose?.(reason);\n }\n },\n [onPopupClose, onPopupOpen]\n );\n\n const handleDateSelection = useCallback(\n (e, date) => {\n setDate(date);\n console.log(date.toString());\n visibleMonthRef.current = date;\n handleOpenChange(false, \"select\");\n onChange(date);\n },\n [handleOpenChange, onChange]\n );\n\n const handleVisibleMonthChange = useCallback(\n (e, date) => {\n setVisibleMonth(date);\n },\n [setVisibleMonth]\n );\n\n return {\n calendarRef,\n date,\n handleOpenChange: handleOpenChange,\n isOpen,\n onSelectedDateChange: handleDateSelection,\n onVisibleMonthChange: handleVisibleMonthChange,\n triggererRef,\n visibleMonth: visibleMonthRef.current,\n };\n};\n"],"names":["useState","useRef","useMemo","useCallback","date"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useDatePopup.js","sources":["../../src/date-popup/useDatePopup.ts"],"sourcesContent":["import { useCallback, useMemo, useRef, useState } from \"react\";\nimport { OpenChangeHandler } from \"../dropdown-base\";\nimport { DateValue } from \"@internationalized/date\";\nimport { DatePopupProps } from \"./DatePopup\";\n\nconst SELECTED_DAY =\n \".saltCalendarDay-selected:not(.saltCalendarDay-outOfRange)\";\n\ntype WithRequired<T, K extends keyof T> = T & { [P in K]-?: T[P] };\n\nexport interface DatePopupHookProps\n extends Pick<DatePopupProps, \"onPopupClose\" | \"onPopupOpen\">,\n WithRequired<DatePopupProps, \"onChange\" | \"selectedDate\"> {}\n\nexport const useDatePopup = ({\n onChange,\n onPopupClose,\n onPopupOpen,\n selectedDate,\n}: // selectionVariant,\nDatePopupHookProps) => {\n const [date, setDate] = useState<DateValue>(selectedDate);\n const [, forceUpdate] = useState({});\n const [isOpen, setIsOpen] = useState<boolean>(false);\n const triggererRef = useRef<HTMLButtonElement>(null);\n const calendarRef = useRef<HTMLDivElement>(null);\n\n const visibleMonthRef = useRef<DateValue>(selectedDate);\n const setVisibleMonth = useMemo(() => {\n const setValue = (v: DateValue) => {\n if (v.toString() !== visibleMonthRef.current.toString()) {\n visibleMonthRef.current = v;\n forceUpdate({});\n }\n };\n setValue(selectedDate);\n return setValue;\n }, [selectedDate]);\n\n const handleOpenChange = useCallback<OpenChangeHandler>(\n (open, reason) => {\n setIsOpen(open);\n if (open) {\n onPopupOpen?.();\n requestAnimationFrame(() => {\n const el = calendarRef.current?.querySelector(\n SELECTED_DAY\n ) as HTMLElement;\n el?.focus();\n });\n } else {\n if (reason !== \"Tab\") {\n triggererRef.current?.focus();\n }\n onPopupClose?.(reason);\n }\n },\n [onPopupClose, onPopupOpen]\n );\n\n const handleDateSelection = useCallback(\n (e, date) => {\n setDate(date);\n console.log(date.toString());\n visibleMonthRef.current = date;\n handleOpenChange(false, \"select\");\n onChange(date);\n },\n [handleOpenChange, onChange]\n );\n\n const handleVisibleMonthChange = useCallback(\n (e, date) => {\n setVisibleMonth(date);\n },\n [setVisibleMonth]\n );\n\n return {\n calendarRef,\n date,\n handleOpenChange: handleOpenChange,\n isOpen,\n onSelectedDateChange: handleDateSelection,\n onVisibleMonthChange: handleVisibleMonthChange,\n triggererRef,\n visibleMonth: visibleMonthRef.current,\n };\n};\n"],"names":["useState","useRef","useMemo","useCallback","date"],"mappings":"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"}
|
|
@@ -3,4 +3,4 @@
|
|
|
3
3
|
var dropdownBaseCss = ".vuuDropdown {\n --saltIcon-margin: 2px 0 0 8px;\n --saltButton-height: var(--vuuDropdown-height);\n --saltButton-width : var(--vuuDropdown-width);\n\n line-height: 0;\n position: relative;\n\n}\n\n.vuuDropdownButton.saltButton-secondary {\n --saltButton-background: var(--salt-editable-background);\n --saltButton-color: var(--salt-editable-foreground);\n --saltButton-borderStyle: solid;\n --saltButton-borderColor: var(--salt-editable-borderColor);\n --saltButton-borderWidth: 1px;\n}\n\n.vuuDropdown-fullWidth {\n width: 100%;\n}\n\n.vuuDropdown-popup {\n background: var(--salt-container-primary-background);\n z-index: calc(var(--salt-zIndex-flyover) - 1);\n}\n\n.vuuDropdown-popup-component {\n --vuuList-borderStyle: none;\n}\n";
|
|
4
4
|
|
|
5
5
|
module.exports = dropdownBaseCss;
|
|
6
|
-
//# sourceMappingURL=
|
|
6
|
+
//# sourceMappingURL=DropdownBase.css.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DropdownBase.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
|
|
@@ -10,11 +10,11 @@ var window = require('@salt-ds/window');
|
|
|
10
10
|
var React = require('react');
|
|
11
11
|
var forwardCallbackProps = require('../utils/forwardCallbackProps.js');
|
|
12
12
|
var useDropdownBase = require('./useDropdownBase.js');
|
|
13
|
-
var
|
|
13
|
+
var DropdownBase$1 = require('./DropdownBase.css.js');
|
|
14
14
|
|
|
15
15
|
const classBase = "vuuDropdown";
|
|
16
16
|
const DropdownBase = React.forwardRef(
|
|
17
|
-
function Dropdown
|
|
17
|
+
function Dropdown({
|
|
18
18
|
PopupProps,
|
|
19
19
|
"aria-labelledby": ariaLabelledByProp,
|
|
20
20
|
children,
|
|
@@ -36,7 +36,7 @@ const DropdownBase = React.forwardRef(
|
|
|
36
36
|
const targetWindow = window.useWindow();
|
|
37
37
|
styles.useComponentCssInjection({
|
|
38
38
|
testId: "vuu-dropdown-base",
|
|
39
|
-
css:
|
|
39
|
+
css: DropdownBase$1,
|
|
40
40
|
window: targetWindow
|
|
41
41
|
});
|
|
42
42
|
const rootRef = React.useRef(null);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DropdownBase.js","sources":["../../src/dropdown-base/DropdownBase.tsx"],"sourcesContent":["import { PopupComponent as Popup, Portal } from \"@vuu-ui/vuu-popups\";\nimport { useId } from \"@vuu-ui/vuu-utils\";\nimport { useForkRef } from \"@salt-ds/core\";\nimport cx from \"clsx\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { Children, cloneElement, forwardRef, useRef } from \"react\";\nimport { forwardCallbackProps } from \"../utils\";\nimport { DropdownBaseProps } from \"./dropdownTypes\";\nimport { useDropdownBase } from \"./useDropdownBase\";\n\nimport dropdownBaseCss from \"./DropdownBase.css\";\n\n// Any component may be passed as our trigger or popup component.\n// Define the common props that we will act on, if present,\n// so we can type them.\nexport type MaybeChildProps = {\n className?: string;\n id?: string;\n role?: string;\n width: number | string;\n};\n\nconst classBase = \"vuuDropdown\";\n\nexport const DropdownBase = forwardRef<HTMLDivElement, DropdownBaseProps>(\n function Dropdown(\n {\n PopupProps,\n \"aria-labelledby\": ariaLabelledByProp,\n children,\n className: classNameProp,\n defaultIsOpen,\n disabled,\n fullWidth,\n id: idProp,\n isOpen: isOpenProp,\n onKeyDown,\n onOpenChange,\n openKeys,\n openOnFocus,\n placement = \"below-full-width\",\n popupWidth,\n width,\n ...htmlAttributes\n },\n forwardedRef\n ) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-dropdown-base\",\n css: dropdownBaseCss,\n window: targetWindow,\n });\n\n const rootRef = useRef<HTMLDivElement>(null);\n const className = cx(classBase, classNameProp, {\n [`${classBase}-fullWidth`]: fullWidth,\n [`${classBase}-disabled`]: disabled,\n });\n const [trigger, popupComponent] = Children.toArray(\n children\n ) as JSX.Element[];\n const id = useId(idProp);\n\n const { componentProps, isOpen, popupComponentRef, triggerProps } =\n useDropdownBase({\n ariaLabelledBy: ariaLabelledByProp,\n defaultIsOpen,\n disabled,\n fullWidth,\n id,\n isOpen: isOpenProp,\n onOpenChange,\n onKeyDown,\n openKeys,\n openOnFocus,\n popupComponent,\n popupWidth,\n rootRef,\n width,\n });\n\n const getTriggerComponent = () => {\n const {\n id: defaultId,\n role: defaultRole,\n ...restTriggerProps\n } = triggerProps;\n\n const {\n id = defaultId,\n role = defaultRole,\n ...ownProps\n } = trigger.props as MaybeChildProps;\n\n return cloneElement(\n trigger,\n forwardCallbackProps(ownProps, {\n ...restTriggerProps,\n id,\n role,\n })\n );\n };\n\n const getPopupComponent = () => {\n const { id: defaultId, width, ...restComponentProps } = componentProps;\n const {\n className,\n id = defaultId,\n width: ownWidth,\n ...ownProps\n } = popupComponent.props as MaybeChildProps;\n\n return cloneElement(popupComponent, {\n ...ownProps,\n ...restComponentProps,\n className: cx(className, `${classBase}-popup-component`),\n id,\n ref: popupComponentRef,\n width: placement.endsWith(\"full-width\") ? \"auto\" : ownWidth ?? width,\n });\n };\n\n const ref = useForkRef(rootRef, forwardedRef);\n\n return (\n <div {...htmlAttributes} className={className} id={idProp} ref={ref}>\n {getTriggerComponent()}\n {isOpen && (\n <Portal>\n <Popup\n {...PopupProps}\n anchorElement={rootRef}\n placement={placement}\n >\n {getPopupComponent()}\n </Popup>\n </Portal>\n )}\n </div>\n );\n }\n);\n"],"names":["forwardRef","useWindow","useComponentCssInjection","dropdownBaseCss","useRef","Children","useId","useDropdownBase","id","cloneElement","forwardCallbackProps","width","className","useForkRef","Portal","jsx","Popup"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useClickAway.js","sources":["../../src/dropdown-base/useClickAway.ts"],"sourcesContent":["import { queryClosest } from \"@vuu-ui/vuu-utils\";\nimport { RefObject, useEffect, useRef } from \"react\";\nimport { CloseReason } from \"./dropdownTypes\";\n\nexport type ClickawayHook = (props: {\n popperRef: RefObject<HTMLElement>;\n rootRef: RefObject<HTMLElement>;\n isOpen: boolean;\n onClose: (reason: CloseReason) => void;\n}) => void;\n\ntype MouseEventHandler = (e: MouseEvent) => void;\ntype KeyboardEventHandler = (e: KeyboardEvent) => void;\n\nconst NO_HANDLERS: [MouseEventHandler?, KeyboardEventHandler?] = [];\n\nexport const targetWithinSubPopup = (\n source: HTMLElement | null,\n target: HTMLElement\n) => {\n if (source === null) {\n return false;\n }\n\n const sourcePortal = queryClosest(source, \".vuuPortal\");\n const targetPortal = queryClosest(target, \".vuuPortal\");\n\n if (sourcePortal && targetPortal) {\n // If we have two portals, this can only be a popup launched from a popup.\n // There will be a relationship, described by aria attributes.\n const targetWithId = targetPortal.querySelector(\"[id]\");\n const targetOwner = sourcePortal.querySelector(\n `[aria-owns=\"${targetWithId?.id}\"]`\n );\n return targetOwner !== null;\n }\n\n return false;\n};\n\nexport const useClickAway: ClickawayHook = ({\n popperRef,\n rootRef,\n isOpen,\n onClose,\n}) => {\n //TODO usePropBackedRef\n const openRef = useRef(isOpen);\n useEffect(() => {\n openRef.current = isOpen;\n }, [isOpen]);\n\n useEffect(() => {\n const [clickHandler, escapeKeyHandler] = isOpen\n ? [\n (evt: MouseEvent) => {\n console.log(\"click away\");\n const targetElement = evt.target as HTMLElement;\n if (\n !popperRef.current?.contains(targetElement) &&\n !rootRef.current?.contains(targetElement)\n ) {\n if (!targetWithinSubPopup(popperRef.current, targetElement)) {\n onClose(\"click-away\");\n }\n }\n },\n (e: KeyboardEvent) => {\n if (e.key === \"Escape\") {\n if (openRef.current) {\n onClose(\"Escape\");\n e.stopPropagation();\n }\n }\n },\n ]\n : NO_HANDLERS;\n\n if (clickHandler && escapeKeyHandler) {\n document.body.addEventListener(\"mousedown\", clickHandler, true);\n document.body.addEventListener(\"keydown\", escapeKeyHandler, true);\n }\n\n return () => {\n if (clickHandler && escapeKeyHandler) {\n document.body.removeEventListener(\"mousedown\", clickHandler, true);\n document.body.removeEventListener(\"keydown\", escapeKeyHandler, true);\n }\n };\n }, [isOpen, onClose, popperRef, rootRef]);\n};\n"],"names":["queryClosest","useRef","useEffect"],"mappings":";;;;;AAcA,MAAM,cAA2D,EAAC,CAAA;AAErD,MAAA,oBAAA,GAAuB,CAClC,MAAA,EACA,MACG,KAAA;AACH,EAAA,IAAI,WAAW,IAAM,EAAA;AACnB,IAAO,OAAA,KAAA,CAAA;AAAA,GACT;AAEA,EAAM,MAAA,YAAA,GAAeA,qBAAa,CAAA,MAAA,EAAQ,YAAY,CAAA,CAAA;AACtD,EAAM,MAAA,YAAA,GAAeA,qBAAa,CAAA,MAAA,EAAQ,YAAY,CAAA,CAAA;AAEtD,EAAA,IAAI,gBAAgB,YAAc,EAAA;AAGhC,IAAM,MAAA,YAAA,GAAe,YAAa,CAAA,aAAA,CAAc,MAAM,CAAA,CAAA;AACtD,IAAA,MAAM,cAAc,YAAa,CAAA,aAAA;AAAA,MAC/B,CAAA,YAAA,EAAe,cAAc,EAAE,CAAA,EAAA,CAAA;AAAA,KACjC,CAAA;AACA,IAAA,OAAO,WAAgB,KAAA,IAAA,CAAA;AAAA,GACzB;AAEA,EAAO,OAAA,KAAA,CAAA;AACT,EAAA;AAEO,MAAM,eAA8B,CAAC;AAAA,EAC1C,SAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AACF,CAAM,KAAA;AAEJ,EAAM,MAAA,OAAA,GAAUC,aAAO,MAAM,CAAA,CAAA;AAC7B,EAAAC,eAAA,CAAU,MAAM;AACd,IAAA,OAAA,CAAQ,OAAU,GAAA,MAAA,CAAA;AAAA,GACpB,EAAG,CAAC,MAAM,CAAC,CAAA,CAAA;AAEX,EAAAA,eAAA,CAAU,MAAM;AACd,IAAA,MAAM,CAAC,YAAA,EAAc,gBAAgB,CAAA,GAAI,MACrC,GAAA;AAAA,MACE,CAAC,GAAoB,KAAA;AACnB,QAAA,OAAA,CAAQ,IAAI,YAAY,CAAA,CAAA;AACxB,QAAA,MAAM,gBAAgB,GAAI,CAAA,MAAA,CAAA;AAC1B,QACE,IAAA,CAAC,SAAU,CAAA,OAAA,EAAS,QAAS,CAAA,aAAa,CAC1C,IAAA,CAAC,OAAQ,CAAA,OAAA,EAAS,QAAS,CAAA,aAAa,CACxC,EAAA;AACA,UAAA,IAAI,CAAC,oBAAA,CAAqB,SAAU,CAAA,OAAA,EAAS,aAAa,CAAG,EAAA;AAC3D,YAAA,OAAA,CAAQ,YAAY,CAAA,CAAA;AAAA,WACtB;AAAA,SACF;AAAA,OACF;AAAA,MACA,CAAC,CAAqB,KAAA;AACpB,QAAI,IAAA,CAAA,CAAE,QAAQ,QAAU,EAAA;AACtB,UAAA,IAAI,QAAQ,OAAS,EAAA;AACnB,YAAA,OAAA,CAAQ,QAAQ,CAAA,CAAA;AAChB,YAAA,CAAA,CAAE,eAAgB,EAAA,CAAA;AAAA,WACpB;AAAA,SACF;AAAA,OACF;AAAA,KAEF,GAAA,WAAA,CAAA;AAEJ,IAAA,IAAI,gBAAgB,gBAAkB,EAAA;AACpC,MAAA,QAAA,CAAS,IAAK,CAAA,gBAAA,CAAiB,WAAa,EAAA,YAAA,EAAc,IAAI,CAAA,CAAA;AAC9D,MAAA,QAAA,CAAS,IAAK,CAAA,gBAAA,CAAiB,SAAW,EAAA,gBAAA,EAAkB,IAAI,CAAA,CAAA;AAAA,KAClE;AAEA,IAAA,OAAO,MAAM;AACX,MAAA,IAAI,gBAAgB,gBAAkB,EAAA;AACpC,QAAA,QAAA,CAAS,IAAK,CAAA,mBAAA,CAAoB,WAAa,EAAA,YAAA,EAAc,IAAI,CAAA,CAAA;AACjE,QAAA,QAAA,CAAS,IAAK,CAAA,mBAAA,CAAoB,SAAW,EAAA,gBAAA,EAAkB,IAAI,CAAA,CAAA;AAAA,OACrE;AAAA,KACF,CAAA;AAAA,KACC,CAAC,MAAA,EAAQ,OAAS,EAAA,SAAA,EAAW,OAAO,CAAC,CAAA,CAAA;AAC1C;;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useDropdownBase.js","sources":["../../src/dropdown-base/useDropdownBase.ts"],"sourcesContent":["import { useControlled, useForkRef } from \"@salt-ds/core\";\nimport {\n FocusEventHandler,\n KeyboardEvent,\n useCallback,\n useRef,\n useState,\n} from \"react\";\nimport { measurements, useResizeObserver, WidthOnly } from \"../common-hooks\";\nimport {\n CloseReason,\n DropdownHookProps,\n DropdownHookResult,\n DropdownOpenKey,\n} from \"./dropdownTypes\";\nimport { useClickAway, targetWithinSubPopup } from \"./useClickAway\";\n\nconst NO_OBSERVER: string[] = [];\n\nexport const useDropdownBase = ({\n defaultIsOpen,\n disabled,\n // TODO check how we're using fullWidth, do we need a separate value for the popup component\n fullWidth: fullWidthProp,\n id,\n isOpen: isOpenProp,\n onOpenChange,\n onKeyDown: onKeyDownProp,\n openKeys = [\"Enter\", \"ArrowDown\", \" \"],\n openOnFocus,\n popupComponent,\n popupWidth: popupWidthProp,\n rootRef,\n width,\n}: DropdownHookProps): DropdownHookResult => {\n const justFocused = useRef<number | null>(null);\n const popperRef = useRef<HTMLElement | null>(null);\n\n const [isOpen, setIsOpen] = useControlled({\n controlled: isOpenProp,\n default: Boolean(defaultIsOpen),\n name: \"useDropdown\",\n state: \"isOpen\",\n });\n const [popup, setPopup] = useState<measurements>({\n width: popupWidthProp ?? width ?? 0,\n });\n\n const showDropdown = useCallback(() => {\n setIsOpen(true);\n onOpenChange?.(true);\n }, [onOpenChange, setIsOpen]);\n\n const hideDropdown = useCallback(\n (reason: CloseReason) => {\n console.log(`hide dropdown ${reason}`);\n setIsOpen(false);\n onOpenChange?.(false, reason);\n },\n [onOpenChange, setIsOpen]\n );\n\n // Focus is not usually applied to the popped up component, we\n // manipulate active descendant whilst keeping focus in the\n // trigger. Some component, like Calendar ARE focussed, as they\n // have more complicated navigation. In these cases, we need to\n // listen for focus out.\n const handleComponentFocusOut = useCallback(\n (evt: FocusEvent) => {\n const target = evt.relatedTarget as HTMLElement;\n if (target === null) {\n // if component sets focus on a timeout (as calendar does when\n // transitioning month) wait before testing\n requestAnimationFrame(() => {\n if (!popperRef.current?.contains(document.activeElement)) {\n hideDropdown(\"Tab\");\n }\n });\n } else if (!popperRef.current?.contains(target)) {\n if (!targetWithinSubPopup(popperRef.current, target)) {\n hideDropdown(\"Tab\");\n }\n }\n },\n [hideDropdown]\n );\n\n const popperCallbackRef = useCallback(\n (element: HTMLElement | null) => {\n if (element) {\n element.addEventListener(\"focusout\", handleComponentFocusOut);\n } else if (popperRef.current) {\n popperRef.current.removeEventListener(\n \"focusout\",\n handleComponentFocusOut\n );\n }\n popperRef.current = element;\n },\n [handleComponentFocusOut]\n );\n\n useClickAway({\n popperRef,\n rootRef,\n isOpen,\n onClose: hideDropdown,\n });\n\n const handleTriggerFocus = useCallback(() => {\n if (!disabled) {\n if (openOnFocus) {\n setIsOpen(true);\n onOpenChange?.(true);\n // Suppress response to click if click was the cause of focus\n justFocused.current = window.setTimeout(() => {\n justFocused.current = null;\n }, 1000);\n }\n }\n }, [disabled, onOpenChange, openOnFocus, setIsOpen]);\n\n const handleTriggerToggle = useCallback(\n (e: MouseEvent) => {\n // Do not trigger menu open for 'Enter' and 'SPACE' key as they're handled in `handleKeyDown`\n if (\n [\"Enter\", \" \"].indexOf(\n (e as unknown as KeyboardEvent<HTMLDivElement>).key\n ) === -1\n ) {\n const newIsOpen = !isOpen;\n setIsOpen(newIsOpen);\n onOpenChange?.(newIsOpen);\n }\n },\n [isOpen, setIsOpen, onOpenChange]\n );\n\n const handleKeydown = useCallback(\n (evt: KeyboardEvent<HTMLElement>) => {\n if (/* evt.key === \"Tab\" || */ evt.key === \"Escape\" && isOpen) {\n // No preventDefault for Tab, but if we've handled Escape, we should own it\n if (evt.key === \"Escape\") {\n evt.stopPropagation();\n evt.preventDefault();\n }\n hideDropdown(evt.key);\n } else if (openKeys.includes(evt.key as DropdownOpenKey) && !isOpen) {\n evt.preventDefault();\n showDropdown();\n } else {\n onKeyDownProp?.(evt);\n }\n },\n [hideDropdown, isOpen, onKeyDownProp, openKeys, showDropdown]\n );\n\n const handleBlur = useCallback<FocusEventHandler<HTMLElement>>(\n (evt) => {\n if (isOpen) {\n if (popperRef.current?.contains(evt.relatedTarget)) {\n // ignore\n } else {\n hideDropdown(\"blur\");\n }\n }\n },\n [hideDropdown, isOpen]\n );\n\n const fullWidth = fullWidthProp ?? false;\n const measurements = fullWidth ? WidthOnly : NO_OBSERVER;\n useResizeObserver(rootRef, measurements, setPopup, fullWidth);\n\n const componentId = `${id}-dropdown`;\n\n // TODO do we use aria-popup - valid values are menu, disloag, grid, tree, listbox\n const triggerProps = {\n \"aria-expanded\": isOpen,\n \"aria-owns\": isOpen ? componentId : undefined,\n id: `${id}-control`,\n onClick: disabled || openOnFocus ? undefined : handleTriggerToggle,\n onFocus: handleTriggerFocus,\n role: \"listbox\",\n onBlur: handleBlur,\n onKeyDown: disabled ? undefined : handleKeydown,\n style: { width: fullWidth ? undefined : width },\n };\n\n const dropdownComponentProps = {\n id: componentId,\n width: popup.width,\n };\n\n const popupComponentRef = useForkRef(popperCallbackRef, popupComponent.ref);\n\n return {\n componentProps: dropdownComponentProps,\n popupComponentRef,\n isOpen,\n label: \"Dropdown Button\",\n triggerProps,\n };\n};\n"],"names":["useRef","useControlled","useState","useCallback","targetWithinSubPopup","useClickAway","measurements","WidthOnly","useResizeObserver","useForkRef"],"mappings":"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"}
|
package/cjs/index.js
CHANGED
|
@@ -4,7 +4,6 @@ var Calendar = require('./calendar/Calendar.js');
|
|
|
4
4
|
var useCalendarDay = require('./calendar/useCalendarDay.js');
|
|
5
5
|
var useCalendar = require('./calendar/useCalendar.js');
|
|
6
6
|
var useSelection = require('./calendar/useSelection.js');
|
|
7
|
-
var ComboBox = require('./combo-box/ComboBox.js');
|
|
8
7
|
var collectionProvider = require('./common-hooks/collectionProvider.js');
|
|
9
8
|
var itemToString = require('./common-hooks/itemToString.js');
|
|
10
9
|
var useCollectionItems = require('./common-hooks/useCollectionItems.js');
|
|
@@ -22,18 +21,14 @@ var useDragDrop = require('./drag-drop/useDragDrop.js');
|
|
|
22
21
|
var dropTargetUtils = require('./drag-drop/drop-target-utils.js');
|
|
23
22
|
var useGlobalDragDrop = require('./drag-drop/useGlobalDragDrop.js');
|
|
24
23
|
var DatePopup = require('./date-popup/DatePopup.js');
|
|
25
|
-
var DropdownBase = require('./dropdown/DropdownBase.js');
|
|
26
|
-
var
|
|
27
|
-
var Dropdown = require('./dropdown/Dropdown.js');
|
|
28
|
-
var useDropdownBase = require('./dropdown/useDropdownBase.js');
|
|
24
|
+
var DropdownBase = require('./dropdown-base/DropdownBase.js');
|
|
25
|
+
var useDropdownBase = require('./dropdown-base/useDropdownBase.js');
|
|
29
26
|
var editableUtils = require('./editable/editable-utils.js');
|
|
30
27
|
var useEditableText = require('./editable/useEditableText.js');
|
|
31
28
|
var EditableLabel = require('./editable-label/EditableLabel.js');
|
|
32
29
|
var ExpandoInput = require('./expando-input/ExpandoInput.js');
|
|
33
30
|
var Icon = require('./icon-button/Icon.js');
|
|
34
31
|
var IconButton = require('./icon-button/IconButton.js');
|
|
35
|
-
var Checkbox = require('./inputs/Checkbox.js');
|
|
36
|
-
var RadioButton = require('./inputs/RadioButton.js');
|
|
37
32
|
var InstrumentPicker = require('./instrument-picker/InstrumentPicker.js');
|
|
38
33
|
var InstrumentSearch = require('./instrument-search/InstrumentSearch.js');
|
|
39
34
|
var keyUtils = require('./list/common-hooks/keyUtils.js');
|
|
@@ -80,7 +75,6 @@ exports.useCalendarDay = useCalendarDay.useCalendarDay;
|
|
|
80
75
|
exports.useCalendar = useCalendar.useCalendar;
|
|
81
76
|
exports.useSelectionCalendar = useSelection.useSelectionCalendar;
|
|
82
77
|
exports.useSelectionDay = useSelection.useSelectionDay;
|
|
83
|
-
exports.ComboBox = ComboBox.ComboBox;
|
|
84
78
|
exports.CollectionContext = collectionProvider.CollectionContext;
|
|
85
79
|
exports.CollectionProvider = collectionProvider.CollectionProvider;
|
|
86
80
|
exports.useCollection = collectionProvider.useCollection;
|
|
@@ -127,8 +121,6 @@ exports.removeDraggedItem = dropTargetUtils.removeDraggedItem;
|
|
|
127
121
|
exports.useGlobalDragDrop = useGlobalDragDrop.useGlobalDragDrop;
|
|
128
122
|
exports.DatePopup = DatePopup.DatePopup;
|
|
129
123
|
exports.DropdownBase = DropdownBase.DropdownBase;
|
|
130
|
-
exports.DropdownButton = DropdownButton.DropdownButton;
|
|
131
|
-
exports.Dropdown = Dropdown.Dropdown;
|
|
132
124
|
exports.useDropdownBase = useDropdownBase.useDropdownBase;
|
|
133
125
|
exports.buildValidationChecker = editableUtils.buildValidationChecker;
|
|
134
126
|
exports.WarnCommit = useEditableText.WarnCommit;
|
|
@@ -138,8 +130,6 @@ exports.NullEditAPI = EditableLabel.NullEditAPI;
|
|
|
138
130
|
exports.ExpandoInput = ExpandoInput.ExpandoInput;
|
|
139
131
|
exports.Icon = Icon.Icon;
|
|
140
132
|
exports.IconButton = IconButton.IconButton;
|
|
141
|
-
exports.Checkbox = Checkbox.Checkbox;
|
|
142
|
-
exports.RadioButton = RadioButton.RadioButton;
|
|
143
133
|
exports.InstrumentPicker = InstrumentPicker.InstrumentPicker;
|
|
144
134
|
exports.InstrumentSearch = InstrumentSearch.InstrumentSearch;
|
|
145
135
|
exports.ArrowDown = keyUtils.ArrowDown;
|
package/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -7,9 +7,7 @@ var core = require('@salt-ds/core');
|
|
|
7
7
|
var styles = require('@salt-ds/styles');
|
|
8
8
|
var window = require('@salt-ds/window');
|
|
9
9
|
var React = require('react');
|
|
10
|
-
var DropdownBase = require('../dropdown/DropdownBase.js');
|
|
11
|
-
require('../dropdown/DropdownButton.js');
|
|
12
|
-
require('../dropdown/Dropdown.js');
|
|
10
|
+
var DropdownBase = require('../dropdown-base/DropdownBase.js');
|
|
13
11
|
require('../common-hooks/collectionProvider.js');
|
|
14
12
|
require('../common-hooks/use-resize-observer.js');
|
|
15
13
|
var SearchCell = require('./SearchCell.js');
|