@primer/components 0.0.0-20219293614 → 0.0.0-2021931194230

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (142) hide show
  1. package/CHANGELOG.md +1 -7
  2. package/dist/browser.esm.js +439 -436
  3. package/dist/browser.esm.js.map +1 -1
  4. package/dist/browser.umd.js +443 -440
  5. package/dist/browser.umd.js.map +1 -1
  6. package/lib/ActionList/Item.d.ts +0 -6
  7. package/lib/ActionList/Item.js +1 -5
  8. package/lib/ActionMenu.js +2 -2
  9. package/lib/AnchoredOverlay/AnchoredOverlay.d.ts +4 -2
  10. package/lib/Autocomplete/Autocomplete.d.ts +13 -11
  11. package/lib/Autocomplete/AutocompleteInput.d.ts +13 -11
  12. package/lib/Button/Button.d.ts +11 -11
  13. package/lib/Button/ButtonBase.d.ts +1 -1
  14. package/lib/Button/ButtonClose.d.ts +29 -29
  15. package/lib/Button/ButtonDanger.d.ts +11 -11
  16. package/lib/Button/ButtonInvisible.d.ts +11 -11
  17. package/lib/Button/ButtonOutline.d.ts +11 -11
  18. package/lib/Button/ButtonPrimary.d.ts +11 -11
  19. package/lib/Button/ButtonStyles.js +1 -1
  20. package/lib/CircleBadge.d.ts +2 -2
  21. package/lib/CircleOcticon.d.ts +33 -33
  22. package/lib/DatePicker/DatePicker.d.ts +48 -0
  23. package/lib/DatePicker/DatePicker.js +106 -0
  24. package/lib/DatePicker/DatePickerAnchor.d.ts +5 -0
  25. package/lib/DatePicker/DatePickerAnchor.js +223 -0
  26. package/lib/DatePicker/DatePickerOverlay.d.ts +3 -0
  27. package/lib/DatePicker/DatePickerOverlay.js +48 -0
  28. package/lib/DatePicker/DatePickerPanel.d.ts +2 -0
  29. package/lib/DatePicker/DatePickerPanel.js +143 -0
  30. package/lib/DatePicker/Day.d.ts +14 -0
  31. package/lib/DatePicker/Day.js +192 -0
  32. package/lib/DatePicker/Month.d.ts +9 -0
  33. package/lib/DatePicker/Month.js +122 -0
  34. package/lib/DatePicker/dateParser.d.ts +11 -0
  35. package/lib/DatePicker/dateParser.js +192 -0
  36. package/lib/DatePicker/index.d.ts +2 -0
  37. package/lib/DatePicker/index.js +13 -0
  38. package/lib/DatePicker/useDatePicker.d.ts +89 -0
  39. package/lib/DatePicker/useDatePicker.js +439 -0
  40. package/lib/Dialog/Dialog.d.ts +4 -4
  41. package/lib/Dialog/Dialog.js +22 -12
  42. package/lib/Dialog.d.ts +35 -35
  43. package/lib/Dropdown.d.ts +165 -85
  44. package/lib/Dropdown.js +5 -6
  45. package/lib/DropdownMenu/DropdownButton.d.ts +30 -30
  46. package/lib/FilterList.d.ts +26 -26
  47. package/lib/Label.d.ts +1 -1
  48. package/lib/Position.d.ts +4 -4
  49. package/lib/ProgressBar.d.ts +1 -1
  50. package/lib/SelectMenu/SelectMenu.d.ts +153 -151
  51. package/lib/SelectMenu/SelectMenuItem.d.ts +1 -1
  52. package/lib/SelectMenu/SelectMenuModal.d.ts +1 -1
  53. package/lib/TextInputWithTokens.d.ts +13 -11
  54. package/lib/Timeline.d.ts +33 -33
  55. package/lib/Token/AvatarToken.d.ts +1 -1
  56. package/lib/Token/IssueLabelToken.d.ts +1 -1
  57. package/lib/Token/Token.d.ts +1 -1
  58. package/lib/_TextInputWrapper.d.ts +1 -1
  59. package/lib/constants.js +1 -3
  60. package/lib/hooks/useDebounce.d.ts +2 -0
  61. package/lib/hooks/useDebounce.js +24 -0
  62. package/lib/hooks/useResizeObserver.d.ts +1 -1
  63. package/lib/hooks/useResizeObserver.js +1 -1
  64. package/lib/index.d.ts +0 -2
  65. package/lib/index.js +0 -8
  66. package/lib/theme-preval.js +2 -2
  67. package/lib/utils/testing.d.ts +1 -1
  68. package/lib-esm/ActionList/Item.d.ts +0 -6
  69. package/lib-esm/ActionList/Item.js +1 -5
  70. package/lib-esm/ActionMenu.js +2 -2
  71. package/lib-esm/AnchoredOverlay/AnchoredOverlay.d.ts +4 -2
  72. package/lib-esm/Autocomplete/Autocomplete.d.ts +13 -11
  73. package/lib-esm/Autocomplete/AutocompleteInput.d.ts +13 -11
  74. package/lib-esm/Button/Button.d.ts +11 -11
  75. package/lib-esm/Button/ButtonBase.d.ts +1 -1
  76. package/lib-esm/Button/ButtonClose.d.ts +29 -29
  77. package/lib-esm/Button/ButtonDanger.d.ts +11 -11
  78. package/lib-esm/Button/ButtonInvisible.d.ts +11 -11
  79. package/lib-esm/Button/ButtonOutline.d.ts +11 -11
  80. package/lib-esm/Button/ButtonPrimary.d.ts +11 -11
  81. package/lib-esm/Button/ButtonStyles.js +1 -1
  82. package/lib-esm/CircleBadge.d.ts +2 -2
  83. package/lib-esm/CircleOcticon.d.ts +33 -33
  84. package/lib-esm/DatePicker/DatePicker.d.ts +48 -0
  85. package/lib-esm/DatePicker/DatePicker.js +89 -0
  86. package/lib-esm/DatePicker/DatePickerAnchor.d.ts +5 -0
  87. package/lib-esm/DatePicker/DatePickerAnchor.js +196 -0
  88. package/lib-esm/DatePicker/DatePickerOverlay.d.ts +3 -0
  89. package/lib-esm/DatePicker/DatePickerOverlay.js +29 -0
  90. package/lib-esm/DatePicker/DatePickerPanel.d.ts +2 -0
  91. package/lib-esm/DatePicker/DatePickerPanel.js +116 -0
  92. package/lib-esm/DatePicker/Day.d.ts +14 -0
  93. package/lib-esm/DatePicker/Day.js +169 -0
  94. package/lib-esm/DatePicker/Month.d.ts +9 -0
  95. package/lib-esm/DatePicker/Month.js +98 -0
  96. package/lib-esm/DatePicker/dateParser.d.ts +11 -0
  97. package/lib-esm/DatePicker/dateParser.js +178 -0
  98. package/lib-esm/DatePicker/index.d.ts +2 -0
  99. package/lib-esm/DatePicker/index.js +1 -0
  100. package/lib-esm/DatePicker/useDatePicker.d.ts +89 -0
  101. package/lib-esm/DatePicker/useDatePicker.js +408 -0
  102. package/lib-esm/Dialog/Dialog.d.ts +4 -4
  103. package/lib-esm/Dialog/Dialog.js +21 -12
  104. package/lib-esm/Dialog.d.ts +35 -35
  105. package/lib-esm/Dropdown.d.ts +165 -85
  106. package/lib-esm/Dropdown.js +3 -4
  107. package/lib-esm/DropdownMenu/DropdownButton.d.ts +30 -30
  108. package/lib-esm/FilterList.d.ts +26 -26
  109. package/lib-esm/Label.d.ts +1 -1
  110. package/lib-esm/Position.d.ts +4 -4
  111. package/lib-esm/ProgressBar.d.ts +1 -1
  112. package/lib-esm/SelectMenu/SelectMenu.d.ts +153 -151
  113. package/lib-esm/SelectMenu/SelectMenuItem.d.ts +1 -1
  114. package/lib-esm/SelectMenu/SelectMenuModal.d.ts +1 -1
  115. package/lib-esm/TextInputWithTokens.d.ts +13 -11
  116. package/lib-esm/Timeline.d.ts +33 -33
  117. package/lib-esm/Token/AvatarToken.d.ts +1 -1
  118. package/lib-esm/Token/IssueLabelToken.d.ts +1 -1
  119. package/lib-esm/Token/Token.d.ts +1 -1
  120. package/lib-esm/_TextInputWrapper.d.ts +1 -1
  121. package/lib-esm/constants.js +1 -3
  122. package/lib-esm/hooks/useDebounce.d.ts +2 -0
  123. package/lib-esm/hooks/useDebounce.js +16 -0
  124. package/lib-esm/hooks/useResizeObserver.d.ts +1 -1
  125. package/lib-esm/hooks/useResizeObserver.js +1 -1
  126. package/lib-esm/index.d.ts +0 -2
  127. package/lib-esm/index.js +0 -1
  128. package/lib-esm/theme-preval.js +2 -2
  129. package/lib-esm/utils/testing.d.ts +1 -1
  130. package/package.json +14 -13
  131. package/lib/NewButton/button.d.ts +0 -579
  132. package/lib/NewButton/button.js +0 -298
  133. package/lib/NewButton/counter.d.ts +0 -6
  134. package/lib/NewButton/counter.js +0 -33
  135. package/lib/NewButton/index.d.ts +0 -4
  136. package/lib/NewButton/index.js +0 -21
  137. package/lib-esm/NewButton/button.d.ts +0 -579
  138. package/lib-esm/NewButton/button.js +0 -274
  139. package/lib-esm/NewButton/counter.d.ts +0 -6
  140. package/lib-esm/NewButton/counter.js +0 -21
  141. package/lib-esm/NewButton/index.d.ts +0 -4
  142. package/lib-esm/NewButton/index.js +0 -3
@@ -0,0 +1,439 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.isSingleSelection = isSingleSelection;
7
+ exports.isMultiSelection = isMultiSelection;
8
+ exports.isRangeSelection = isRangeSelection;
9
+ exports.isStringRangeSelection = isStringRangeSelection;
10
+ exports.DatePickerProvider = exports.default = void 0;
11
+
12
+ var _octiconsReact = require("@primer/octicons-react");
13
+
14
+ var _dateFns = require("date-fns");
15
+
16
+ var _deepmerge = _interopRequireDefault(require("deepmerge"));
17
+
18
+ var _react = _interopRequireWildcard(require("react"));
19
+
20
+ var _ = require("..");
21
+
22
+ var _dateParser = require("./dateParser");
23
+
24
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
25
+
26
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
27
+
28
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
29
+
30
+ const DatePickerContext = /*#__PURE__*/(0, _react.createContext)(null);
31
+
32
+ const useDatePicker = date => {
33
+ const value = (0, _react.useContext)(DatePickerContext);
34
+ const [selected, setSelected] = (0, _react.useState)(false);
35
+ const today = date ? (0, _dateFns.isToday)(date) : false;
36
+
37
+ if (!value) {
38
+ throw new Error('useDatePicker must be used inside a DatePickerProvider');
39
+ }
40
+
41
+ (0, _react.useEffect)(() => {
42
+ if (date) {
43
+ if (value.hoverRange) {
44
+ if (isRangeSelection(value.hoverRange)) {
45
+ if ((0, _dateFns.isEqual)(date, value.hoverRange.from)) {
46
+ setSelected('start');
47
+ } else if (value.hoverRange.to && (0, _dateFns.isEqual)(date, value.hoverRange.to)) {
48
+ setSelected('end');
49
+ } else if ((0, _dateFns.isAfter)(date, value.hoverRange.from) && value.hoverRange.to && (0, _dateFns.isBefore)(date, value.hoverRange.to)) {
50
+ setSelected('middle');
51
+ } else {
52
+ setSelected(false);
53
+ }
54
+ }
55
+ } else if (value.selection) {
56
+ if (isMultiSelection(value.selection)) {
57
+ setSelected(!!value.selection.find(d => (0, _dateFns.isEqual)(d, date)));
58
+ } else if (isRangeSelection(value.selection)) {
59
+ if ((0, _dateFns.isEqual)(date, value.selection.from)) {
60
+ setSelected('start');
61
+ } else if (value.selection.to && (0, _dateFns.isEqual)(date, value.selection.to)) {
62
+ setSelected('end');
63
+ } else if ((0, _dateFns.isAfter)(date, value.selection.from) && value.selection.to && (0, _dateFns.isBefore)(date, value.selection.to)) {
64
+ setSelected('middle');
65
+ } else {
66
+ setSelected(false);
67
+ }
68
+ } else {
69
+ setSelected((0, _dateFns.isEqual)(date, value.selection));
70
+ }
71
+ }
72
+ }
73
+ }, [date, value.hoverRange, value.selection, today]);
74
+ let blocked,
75
+ disabled = false;
76
+
77
+ if (date) {
78
+ // Determine if date is blocked out
79
+ if (value.configuration.blockedDates) {
80
+ blocked = !!value.configuration.blockedDates.find(d => (0, _dateFns.isEqual)(d, date));
81
+ } // Determine if date is disabled
82
+
83
+
84
+ if (value.configuration.minDate || value.configuration.maxDate || value.configuration.disableWeekends) {
85
+ disabled = (value.configuration.minDate ? (0, _dateFns.isBefore)(date, value.configuration.minDate) : false) || (value.configuration.maxDate ? (0, _dateFns.isAfter)(date, value.configuration.maxDate) : false) || (value.configuration.disableWeekends ? (0, _dateFns.isWeekend)(date) : false);
86
+ }
87
+ }
88
+
89
+ return { ...value,
90
+ blocked,
91
+ disabled,
92
+ selected,
93
+ today
94
+ };
95
+ };
96
+
97
+ var _default = useDatePicker;
98
+ exports.default = _default;
99
+
100
+ function isSingleSelection(selection) {
101
+ return selection instanceof Date;
102
+ }
103
+
104
+ function isMultiSelection(selection) {
105
+ return Array.isArray(selection);
106
+ }
107
+
108
+ function isRangeSelection(selection) {
109
+ return !!selection.from;
110
+ }
111
+
112
+ function isStringRangeSelection(selection) {
113
+ return !!selection.from;
114
+ }
115
+
116
+ function parseSelection(selection, variant) {
117
+ if (!selection) return;
118
+
119
+ if (variant === 'multi') {
120
+ if (isMultiSelection(selection)) {
121
+ const parsedSelection = [];
122
+
123
+ for (const d of selection) {
124
+ parsedSelection.push(new Date(new Date(d).toDateString()));
125
+ }
126
+
127
+ return parsedSelection.sort((a, b) => a.getTime() - b.getTime());
128
+ } else if (selection instanceof Date) {
129
+ return [new Date(new Date(selection).toDateString())];
130
+ } else if (isRangeSelection(selection)) {
131
+ const parsedSelection = [];
132
+ parsedSelection.push(new Date(new Date(selection.from).toDateString()));
133
+
134
+ if (selection.to) {
135
+ parsedSelection.push(new Date(new Date(selection.to).toDateString()));
136
+ }
137
+
138
+ return parsedSelection.sort((a, b) => a.getTime() - b.getTime());
139
+ }
140
+ } else if (variant === 'range') {
141
+ if (isRangeSelection(selection)) {
142
+ return {
143
+ from: new Date(new Date(selection.from).toDateString()),
144
+ to: selection.to ? new Date(new Date(selection.to).toDateString()) : null
145
+ };
146
+ } else if (isMultiSelection(selection)) {
147
+ return {
148
+ from: new Date(new Date(selection[0]).toDateString()),
149
+ to: selection[1] ? new Date(new Date(selection[1]).toDateString()) : null
150
+ };
151
+ } else if (selection instanceof Date) {
152
+ return {
153
+ from: new Date(new Date(selection).toDateString()),
154
+ to: null
155
+ };
156
+ }
157
+ } else {
158
+ if (selection instanceof Date) {
159
+ return new Date(new Date(selection).toDateString());
160
+ } else if (isMultiSelection(selection)) {
161
+ return new Date(new Date(selection[0]).toDateString());
162
+ } else if (isRangeSelection(selection)) {
163
+ return new Date(new Date(selection.from).toDateString());
164
+ } else {
165
+ return;
166
+ }
167
+ }
168
+ }
169
+
170
+ const defaultConfiguration = {
171
+ anchorVariant: 'button',
172
+ confirmation: false,
173
+ confirmUnsavedClose: false,
174
+ disableWeekends: false,
175
+ iconPlacement: 'start',
176
+ placeholder: 'Select a Date...',
177
+ showInputPrompt: false,
178
+ variant: 'single',
179
+ view: '2-month',
180
+ weekStartsOn: 'Sunday'
181
+ };
182
+
183
+ const DatePickerProvider = ({
184
+ configuration: externalConfig = {},
185
+ children,
186
+ closePicker,
187
+ value
188
+ }) => {
189
+ const [configuration, setConfiguration] = (0, _react.useState)((0, _deepmerge.default)(defaultConfiguration, externalConfig));
190
+ const [previousSelection, setPreviousSelection] = (0, _react.useState)(parseSelection(value, configuration.variant));
191
+ const [isDirty, setIsDirty] = (0, _react.useState)(false);
192
+ const [selection, setSelection] = (0, _react.useState)(parseSelection(value, configuration.variant));
193
+ const [hoverRange, setHoverRange] = (0, _react.useState)(null);
194
+ const [currentViewingDate, setCurrentViewingDate] = (0, _react.useState)(new Date());
195
+ const confirm = (0, _.useConfirm)();
196
+ (0, _react.useEffect)(() => {
197
+ setConfiguration((0, _deepmerge.default)(defaultConfiguration, externalConfig));
198
+ setSelection(parseSelection(selection, configuration.variant)); // Don't want this to run every time selection gets updated
199
+ // eslint-disable-next-line react-hooks/exhaustive-deps
200
+ }, [configuration.variant, externalConfig]);
201
+ const goToMonth = (0, _react.useCallback)(date => {
202
+ setCurrentViewingDate(new Date(new Date(date).toDateString()));
203
+ }, []);
204
+ const nextMonth = (0, _react.useCallback)(() => {
205
+ setCurrentViewingDate((0, _dateFns.addMonths)(currentViewingDate, 1));
206
+ }, [currentViewingDate]);
207
+ const previousMonth = (0, _react.useCallback)(() => {
208
+ setCurrentViewingDate((0, _dateFns.subMonths)(currentViewingDate, 1));
209
+ }, [currentViewingDate]);
210
+ const getFormattedDate = (0, _react.useMemo)(() => {
211
+ const {
212
+ anchorVariant,
213
+ dateFormat,
214
+ placeholder,
215
+ variant
216
+ } = configuration;
217
+ return (0, _dateParser.formatDate)({
218
+ selection,
219
+ anchorVariant,
220
+ dateFormat,
221
+ placeholder,
222
+ variant
223
+ });
224
+ }, [configuration, selection]);
225
+ const saveValue = (0, _react.useCallback)(updatedSelection => {
226
+ setPreviousSelection(updatedSelection !== null && updatedSelection !== void 0 ? updatedSelection : selection);
227
+ setIsDirty(false);
228
+ closePicker === null || closePicker === void 0 ? void 0 : closePicker();
229
+ }, [closePicker, selection]);
230
+ const revertValue = (0, _react.useCallback)(() => {
231
+ setSelection(previousSelection);
232
+ setIsDirty(false);
233
+ }, [previousSelection]);
234
+ const handleClose = (0, _react.useCallback)(async () => {
235
+ if (configuration.confirmUnsavedClose) {
236
+ if (isDirty) {
237
+ const result = await confirm({
238
+ title: 'Save Changes?',
239
+ content: 'You have unsaved changes, would you like to save them?',
240
+ confirmButtonContent: /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_octiconsReact.CheckIcon, null), /*#__PURE__*/_react.default.createElement(_.Text, {
241
+ sx: {
242
+ ml: 1
243
+ }
244
+ }, "Save")),
245
+ cancelButtonContent: /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_octiconsReact.TrashIcon, null), /*#__PURE__*/_react.default.createElement(_.Text, {
246
+ sx: {
247
+ ml: 1
248
+ }
249
+ }, "Discard"))
250
+ });
251
+
252
+ if (result) {
253
+ saveValue();
254
+ } else {
255
+ revertValue();
256
+ }
257
+ }
258
+ } else if (isDirty) revertValue();
259
+ }, [configuration.confirmUnsavedClose, confirm, isDirty, revertValue, saveValue]);
260
+ const inputHandler = (0, _react.useCallback)(updatedSelection => {
261
+ if (!updatedSelection) return;
262
+ const {
263
+ maxDate,
264
+ minDate,
265
+ variant,
266
+ maxSelections,
267
+ maxRangeSize
268
+ } = configuration;
269
+
270
+ switch (variant) {
271
+ case 'single':
272
+ {
273
+ if (updatedSelection instanceof Date) {
274
+ if (maxDate && (0, _dateFns.isAfter)(updatedSelection, maxDate)) {
275
+ setSelection(maxDate);
276
+ } else if (minDate && (0, _dateFns.isBefore)(minDate, updatedSelection)) {
277
+ setSelection(minDate);
278
+ } else {
279
+ setSelection(updatedSelection);
280
+ }
281
+ }
282
+
283
+ break;
284
+ }
285
+
286
+ case 'multi':
287
+ {
288
+ if (Array.isArray(updatedSelection)) {
289
+ let validSelections = updatedSelection.filter(d => (maxDate ? (0, _dateFns.isBefore)(d, maxDate) : true) && (minDate ? (0, _dateFns.isAfter)(d, minDate) : true));
290
+
291
+ if (maxSelections) {
292
+ validSelections = validSelections.slice(0, maxSelections);
293
+ }
294
+
295
+ setSelection(validSelections);
296
+ }
297
+
298
+ break;
299
+ }
300
+
301
+ case 'range':
302
+ {
303
+ if (isRangeSelection(updatedSelection)) {
304
+ const validRange = updatedSelection;
305
+
306
+ if (minDate) {
307
+ validRange.from = (0, _dateFns.isAfter)(updatedSelection.from, minDate) ? updatedSelection.from : minDate;
308
+
309
+ if (updatedSelection.to) {
310
+ validRange.to = (0, _dateFns.isAfter)(updatedSelection.to, minDate) ? updatedSelection.to : minDate;
311
+ }
312
+ }
313
+
314
+ if (maxDate) {
315
+ validRange.from = (0, _dateFns.isBefore)(updatedSelection.from, maxDate) ? updatedSelection.from : maxDate;
316
+
317
+ if (updatedSelection.to) {
318
+ validRange.to = (0, _dateFns.isBefore)(updatedSelection.to, maxDate) ? updatedSelection.to : maxDate;
319
+ }
320
+ }
321
+
322
+ if (maxRangeSize && validRange.to && Math.abs((0, _dateFns.differenceInDays)(validRange.from, validRange.to)) >= maxRangeSize) {
323
+ validRange.to = (0, _dateFns.addDays)(validRange.from, maxRangeSize - 1);
324
+ }
325
+
326
+ setSelection(updatedSelection);
327
+ }
328
+
329
+ break;
330
+ }
331
+ }
332
+ }, [configuration]);
333
+ const selectionHandler = (0, _react.useCallback)(date => {
334
+ setIsDirty(true);
335
+
336
+ if (configuration.variant === 'multi') {
337
+ const selections = [...selection];
338
+ const existingIndex = selections.findIndex(s => (0, _dateFns.isEqual)(s, date));
339
+
340
+ if (existingIndex > -1) {
341
+ selections.splice(existingIndex, 1);
342
+ setSelection(selections.sort((a, b) => a.getTime() - b.getTime()));
343
+ } else {
344
+ if (configuration.maxSelections && selections.length + 1 > configuration.maxSelections) return;
345
+ setSelection([...selections, date].sort((a, b) => a.getTime() - b.getTime()));
346
+ }
347
+ } else if (configuration.variant === 'range') {
348
+ if (selection && isRangeSelection(selection) && !selection.to) {
349
+ let toDate = date;
350
+
351
+ if (configuration.maxRangeSize && Math.abs((0, _dateFns.differenceInDays)(selection.from, date)) >= configuration.maxRangeSize) {
352
+ toDate = (0, _dateFns.isBefore)(date, selection.from) ? (0, _dateFns.subDays)(selection.from, configuration.maxRangeSize - 1) : (0, _dateFns.addDays)(selection.from, configuration.maxRangeSize - 1);
353
+ }
354
+
355
+ const updatedSelection = (0, _dateFns.isBefore)(toDate, selection.from) ? {
356
+ from: toDate,
357
+ to: selection.from
358
+ } : {
359
+ from: selection.from,
360
+ to: toDate
361
+ };
362
+ setSelection(updatedSelection);
363
+ setHoverRange(null);
364
+
365
+ if (!configuration.confirmation) {
366
+ saveValue(updatedSelection);
367
+ }
368
+ } else {
369
+ setHoverRange({
370
+ from: date,
371
+ to: date
372
+ });
373
+ setSelection({
374
+ from: date,
375
+ to: null
376
+ });
377
+ }
378
+ } else {
379
+ setSelection(date);
380
+
381
+ if (!configuration.confirmation) {
382
+ saveValue(date);
383
+ }
384
+ }
385
+ }, [configuration.confirmation, configuration.maxRangeSize, configuration.maxSelections, configuration.variant, saveValue, selection]);
386
+ const focusHnadler = (0, _react.useCallback)(date => {
387
+ if (!selection) return;
388
+ const {
389
+ minDate,
390
+ maxDate,
391
+ maxRangeSize,
392
+ variant
393
+ } = configuration;
394
+
395
+ if (variant === 'range' && isRangeSelection(selection) && hoverRange) {
396
+ let hoverDate = date;
397
+ if (minDate) hoverDate = (0, _dateFns.isBefore)(date, minDate) ? minDate : hoverDate;
398
+ if (maxDate) hoverDate = (0, _dateFns.isAfter)(date, maxDate) ? maxDate : hoverDate;
399
+
400
+ if (maxRangeSize && Math.abs((0, _dateFns.differenceInDays)(selection.from, hoverDate)) >= maxRangeSize) {
401
+ hoverDate = (0, _dateFns.isBefore)(hoverDate, selection.from) ? (0, _dateFns.subDays)(selection.from, configuration.maxRangeSize - 1) : (0, _dateFns.addDays)(selection.from, configuration.maxRangeSize - 1);
402
+ }
403
+
404
+ setHoverRange((0, _dateFns.isBefore)(hoverDate, selection.from) ? {
405
+ from: hoverDate,
406
+ to: selection.from
407
+ } : {
408
+ from: selection.from,
409
+ to: hoverDate
410
+ });
411
+ }
412
+ }, [configuration, hoverRange, selection]);
413
+ const datePickerCtx = (0, _react.useMemo)(() => {
414
+ return {
415
+ configuration,
416
+ currentViewingDate,
417
+ disabled: false,
418
+ formattedDate: getFormattedDate,
419
+ goToMonth,
420
+ hoverRange,
421
+ nextMonth,
422
+ onClose: handleClose,
423
+ onDateInput: inputHandler,
424
+ onDayFocus: focusHnadler,
425
+ onSelection: selectionHandler,
426
+ previousMonth,
427
+ revertValue,
428
+ saveValue,
429
+ selectionActive: false,
430
+ selection
431
+ };
432
+ }, [configuration, currentViewingDate, focusHnadler, getFormattedDate, goToMonth, handleClose, hoverRange, inputHandler, nextMonth, previousMonth, revertValue, saveValue, selection, selectionHandler]);
433
+ return /*#__PURE__*/_react.default.createElement(DatePickerContext.Provider, {
434
+ value: datePickerCtx
435
+ }, children);
436
+ };
437
+
438
+ exports.DatePickerProvider = DatePickerProvider;
439
+ DatePickerProvider.displayName = "DatePickerProvider";
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- import { ButtonProps } from '../NewButton';
2
+ import { ButtonProps } from '../Button';
3
3
  import { SxProp } from '../sx';
4
4
  /**
5
5
  * Props that characterize a button to be rendered into the footer of
@@ -9,7 +9,7 @@ export declare type DialogButtonProps = ButtonProps & {
9
9
  /**
10
10
  * The type of Button element to use
11
11
  */
12
- buttonType?: 'default' | 'primary' | 'danger' | 'invisible';
12
+ buttonType?: 'normal' | 'primary' | 'danger';
13
13
  /**
14
14
  * The Button's inner text
15
15
  */
@@ -160,8 +160,8 @@ export declare const Dialog: React.ForwardRefExoticComponent<DialogProps & {
160
160
  Buttons: React.FC<{
161
161
  buttons: DialogButtonProps[];
162
162
  }>;
163
- CloseButton: ({ onClose }: {
163
+ CloseButton: React.FC<{
164
164
  onClose: () => void;
165
- }) => JSX.Element;
165
+ }>;
166
166
  };
167
167
  export {};
@@ -9,7 +9,7 @@ var _react = _interopRequireWildcard(require("react"));
9
9
 
10
10
  var _styledComponents = _interopRequireDefault(require("styled-components"));
11
11
 
12
- var _NewButton = _interopRequireDefault(require("../NewButton"));
12
+ var _Button = _interopRequireWildcard(require("../Button"));
13
13
 
14
14
  var _Box = _interopRequireDefault(require("../Box"));
15
15
 
@@ -21,6 +21,8 @@ var _useFocusTrap = require("../hooks/useFocusTrap");
21
21
 
22
22
  var _sx = _interopRequireDefault(require("../sx"));
23
23
 
24
+ var _StyledOcticon = _interopRequireDefault(require("../StyledOcticon"));
25
+
24
26
  var _octiconsReact = require("@primer/octicons-react");
25
27
 
26
28
  var _useFocusZone = require("../hooks/useFocusZone");
@@ -211,6 +213,11 @@ const Footer = (0, _styledComponents.default)(_Box.default).attrs({
211
213
  displayName: "Dialog__Footer",
212
214
  componentId: "sc-11pkgky-6"
213
215
  })(["box-shadow:0 -1px 0 ", ";padding:", ";display:flex;flex-flow:wrap;justify-content:flex-end;z-index:1;flex-shrink:0;button{margin-left:", ";&:first-child{margin-left:0;}}"], (0, _constants.get)('colors.border.default'), (0, _constants.get)('space.3'), (0, _constants.get)('space.1'));
216
+ const buttonTypes = {
217
+ normal: _Button.default,
218
+ primary: _Button.ButtonPrimary,
219
+ danger: _Button.ButtonDanger
220
+ };
214
221
 
215
222
  const Buttons = ({
216
223
  buttons
@@ -233,30 +240,33 @@ const Buttons = ({
233
240
  return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, buttons.map((dialogButtonProps, index) => {
234
241
  const {
235
242
  content,
236
- buttonType = 'default',
243
+ buttonType = 'normal',
237
244
  autoFocus = false,
238
245
  ...buttonProps
239
246
  } = dialogButtonProps;
240
- return /*#__PURE__*/_react.default.createElement(_NewButton.default, _extends({
247
+ const ButtonElement = buttonTypes[buttonType];
248
+ return /*#__PURE__*/_react.default.createElement(ButtonElement, _extends({
241
249
  key: index
242
250
  }, buttonProps, {
243
- variant: buttonType,
244
251
  ref: autoFocus && autoFocusCount === 0 ? (autoFocusCount++, autoFocusRef) : null
245
252
  }), content);
246
253
  }));
247
254
  };
248
255
 
256
+ const DialogCloseButton = (0, _styledComponents.default)(_Button.default).withConfig({
257
+ displayName: "Dialog__DialogCloseButton",
258
+ componentId: "sc-11pkgky-7"
259
+ })(["border-radius:4px;background:transparent;border:0;vertical-align:middle;color:", ";padding:", ";align-self:flex-start;line-height:normal;box-shadow:none;"], (0, _constants.get)('colors.fg.muted'), (0, _constants.get)('space.2'));
260
+
249
261
  const CloseButton = ({
250
262
  onClose
251
263
  }) => {
252
- return /*#__PURE__*/_react.default.createElement(_NewButton.default, {
253
- onClick: onClose,
254
- sx: {
255
- alignSelf: 'flex-start'
256
- },
257
- variant: "invisible",
258
- icon: () => /*#__PURE__*/_react.default.createElement(_octiconsReact.XIcon, null)
259
- });
264
+ return /*#__PURE__*/_react.default.createElement(DialogCloseButton, {
265
+ "aria-label": "Close",
266
+ onClick: onClose
267
+ }, /*#__PURE__*/_react.default.createElement(_StyledOcticon.default, {
268
+ icon: _octiconsReact.XIcon
269
+ }));
260
270
  };
261
271
 
262
272
  CloseButton.displayName = "CloseButton";