@gympass/yoga 7.53.8 → 7.54.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -97,7 +97,7 @@ var DayField = _styledComponents["default"].div(_templateObject4 || (_templateOb
97
97
  radii = _ref4$theme$yoga.radii,
98
98
  spacing = _ref4$theme$yoga.spacing,
99
99
  datepicker = _ref4$theme$yoga.components.datepicker;
100
- return "\n p {\n color: " + getDayFieldColor(selected, disabled, colors, aux) + ";\n z-index: 1;\n }\n width: " + datepicker.width.day + "px;\n height: " + datepicker.width.day + "px;\n padding: " + spacing.zero + "px 21.3px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: " + (inRange ? colors.clear : colors.white) + ";\n position: relative;\n cursor: pointer;\n " + (selected && inRange ? "border-radius: " + getDayFieldRadius(aux, radii) : "") + "\n " + (selected && !disabled ? "&:before {\n content: '';\n position: absolute;\n background: " + colors.vibin + ";\n width: " + datepicker.width.day + "px;\n height: " + datepicker.width.day + "px;\n border-radius: " + radii.circle + "px;\n }" : "") + "\n " + (!disabled ? "&:hover {\n &:before {\n content: '';\n position: absolute;\n border: 1px solid " + colors.secondary + ";\n width: " + datepicker.width.day + "px;\n height: " + datepicker.width.day + "px;\n border-radius: " + radii.circle + "px;\n }\n }" : "") + "\n";
100
+ return "\n p {\n color: " + getDayFieldColor(selected, disabled, colors, aux) + ";\n z-index: 1;\n }\n width: " + datepicker.width.day + "px;\n height: " + datepicker.width.day + "px;\n padding: " + spacing.zero + "px 21.3px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: " + (inRange ? colors.clear : colors.white) + ";\n position: relative;\n cursor: pointer;\n " + (selected && inRange ? "border-radius: " + getDayFieldRadius(aux, radii) + ";" : "") + "\n " + (selected && !disabled ? "&:before {\n content: '';\n position: absolute;\n background: " + colors.vibin + ";\n width: " + datepicker.width.day + "px;\n height: " + datepicker.width.day + "px;\n border-radius: " + radii.circle + "px;\n };" : "") + "\n " + (!disabled ? "&:hover {\n &:before {\n content: '';\n position: absolute;\n border: 1px solid " + colors.secondary + ";\n width: " + datepicker.width.day + "px;\n height: " + datepicker.width.day + "px;\n border-radius: " + radii.circle + "px;\n }\n };" : "") + "\n";
101
101
  });
102
102
 
103
103
  var Row = _styledComponents["default"].div(_templateObject5 || (_templateObject5 = _taggedTemplateLiteralLoose(["\n ", "\n"])), function (_ref5) {
@@ -114,7 +114,9 @@ function Calendar(_ref6) {
114
114
  onSelectSingle = _ref6.onSelectSingle,
115
115
  onSelectRange = _ref6.onSelectRange,
116
116
  disablePastDates = _ref6.disablePastDates,
117
- disableFutureDates = _ref6.disableFutureDates;
117
+ disableFutureDates = _ref6.disableFutureDates,
118
+ disablePastFrom = _ref6.disablePastFrom,
119
+ disableFutureFrom = _ref6.disableFutureFrom;
118
120
 
119
121
  var _useState = (0, _react.useState)(new Date().getUTCMonth()),
120
122
  month = _useState[0],
@@ -125,11 +127,14 @@ function Calendar(_ref6) {
125
127
  setYear = _useState2[1];
126
128
 
127
129
  (0, _react.useEffect)(function () {
128
- if (startDate) {
130
+ if (endDate) {
131
+ setMonth(endDate.getUTCMonth());
132
+ setYear(endDate.getUTCFullYear());
133
+ } else if (startDate) {
129
134
  setMonth(startDate.getUTCMonth());
130
135
  setYear(startDate.getUTCFullYear());
131
136
  }
132
- }, [startDate]);
137
+ }, [startDate, endDate]);
133
138
 
134
139
  var getDayOfWeek = function getDayOfWeek(day) {
135
140
  return new Date(Date.UTC(year, month, day)).getUTCDay();
@@ -159,8 +164,8 @@ function Calendar(_ref6) {
159
164
  var local = new Date(Date.UTC(year, month, day));
160
165
  var now = new Date();
161
166
  var nowUTC = Date.UTC(now.getFullYear(), now.getMonth(), now.getDate());
162
- var pastDatesDisabled = disablePastDates && local.getTime() < nowUTC;
163
- var futureDateDisabled = disableFutureDates && local.getTime() > nowUTC;
167
+ var pastDatesDisabled = disablePastDates && local.getTime() < nowUTC || disablePastFrom && local.getTime() < new Date(Date.UTC(disablePastFrom.getFullYear(), disablePastFrom.getMonth(), disablePastFrom.getDate()));
168
+ var futureDateDisabled = disableFutureDates && local.getTime() > nowUTC || disableFutureFrom && local.getTime() > new Date(Date.UTC(disableFutureFrom.getFullYear(), disableFutureFrom.getMonth(), disableFutureFrom.getDate()));
164
169
  return pastDatesDisabled || futureDateDisabled;
165
170
  };
166
171
 
@@ -341,7 +346,9 @@ Calendar.propTypes = {
341
346
  onSelectSingle: _propTypes.func,
342
347
  onSelectRange: _propTypes.func,
343
348
  disablePastDates: _propTypes.bool,
344
- disableFutureDates: _propTypes.bool
349
+ disableFutureDates: _propTypes.bool,
350
+ disablePastFrom: (0, _propTypes.instanceOf)(Date),
351
+ disableFutureFrom: (0, _propTypes.instanceOf)(Date)
345
352
  };
346
353
  Calendar.defaultProps = {
347
354
  startDate: undefined,
@@ -349,7 +356,9 @@ Calendar.defaultProps = {
349
356
  onSelectSingle: null,
350
357
  onSelectRange: null,
351
358
  disablePastDates: false,
352
- disableFutureDates: false
359
+ disableFutureDates: false,
360
+ disablePastFrom: undefined,
361
+ disableFutureFrom: undefined
353
362
  };
354
363
  var _default = Calendar;
355
364
  exports["default"] = _default;
@@ -39,7 +39,7 @@ var Wrapper = _styledComponents["default"].div(_templateObject || (_templateObje
39
39
  return props.fullWidth ? '100%' : (0, _styledComponents.css)(_templateObject2 || (_templateObject2 = _taggedTemplateLiteralLoose(["\n ", "px\n "])), _Theme.theme.components.input.width);
40
40
  });
41
41
 
42
- var getSelectorBorderColor = function getSelectorBorderColor(open, error, disabled, colors, input) {
42
+ var getSelectorBorderColor = function getSelectorBorderColor(open, error, disabled, inputFilled, colors) {
43
43
  if (error) {
44
44
  return colors.feedback.attention[1];
45
45
  }
@@ -48,22 +48,23 @@ var getSelectorBorderColor = function getSelectorBorderColor(open, error, disabl
48
48
  return colors.elements.backgroundAndDisabled;
49
49
  }
50
50
 
51
- if (open) {
52
- return colors.deep;
51
+ if (open || inputFilled) {
52
+ return colors.secondary;
53
53
  }
54
54
 
55
- return input.border.color["default"];
55
+ return colors.elements.lineAndBorders;
56
56
  };
57
57
 
58
58
  var Selector = _styledComponents["default"].div(_templateObject3 || (_templateObject3 = _taggedTemplateLiteralLoose(["\n ", "\n"])), function (_ref) {
59
59
  var open = _ref.open,
60
60
  error = _ref.error,
61
61
  disabled = _ref.disabled,
62
+ inputFilled = _ref.inputFilled,
62
63
  _ref$theme$yoga = _ref.theme.yoga,
63
64
  components = _ref$theme$yoga.components,
64
65
  colors = _ref$theme$yoga.colors,
65
66
  spacing = _ref$theme$yoga.spacing;
66
- return "\n position: relative;\n display: flex;\n justify-content: flex-start;\n align-items: center;\n box-sizing: border-box;\n height: " + components.input.height + "px;\n width: 100%;\n padding: " + spacing.small + "px;\n background-color: " + colors.white + ";\n border-radius: " + components.input.border.radius + "px;\n border-width: " + components.input.border.width + "px;\n border-style: solid;\n border-color: " + getSelectorBorderColor(open, error, disabled, colors, components.input) + "\n color: " + components.input.font.color.focus + ";\n ";
67
+ return "\n position: relative;\n display: flex;\n justify-content: flex-start;\n align-items: center;\n box-sizing: border-box;\n height: " + components.input.height + "px;\n width: 100%;\n padding: " + spacing.small + "px;\n background-color: " + colors.white + ";\n border-radius: " + components.input.border.radius + "px;\n border-width: " + components.input.border.width + "px;\n border-style: solid;\n border-color: " + getSelectorBorderColor(open, error, disabled, inputFilled, colors) + ";\n &:hover {\n border-color: " + colors.secondary + ";\n }\n ";
67
68
  });
68
69
 
69
70
  var Input = (0, _styledComponents["default"])(_yoga.Text.Small)(_templateObject4 || (_templateObject4 = _taggedTemplateLiteralLoose(["\n ", "\n"])), function (_ref2) {
@@ -125,27 +126,31 @@ function Datepicker(_ref8) {
125
126
  var fullWidth = _ref8.fullWidth,
126
127
  type = _ref8.type,
127
128
  placeholder = _ref8.placeholder,
128
- initialDate = _ref8.startDate,
129
- finishDate = _ref8.endDate,
129
+ startDate = _ref8.startDate,
130
+ endDate = _ref8.endDate,
130
131
  onSelectSingle = _ref8.onSelectSingle,
131
132
  disabled = _ref8.disabled,
132
133
  onSelectRange = _ref8.onSelectRange,
134
+ customOnSelectRange = _ref8.customOnSelectRange,
133
135
  disablePastDates = _ref8.disablePastDates,
134
136
  disableFutureDates = _ref8.disableFutureDates,
137
+ disablePastFrom = _ref8.disablePastFrom,
138
+ disableFutureFrom = _ref8.disableFutureFrom,
135
139
  error = _ref8.error,
136
- onOpen = _ref8.onOpen;
140
+ onOpen = _ref8.onOpen,
141
+ displayEndDateOnly = _ref8.displayEndDateOnly;
137
142
 
138
143
  var _useState = (0, _react.useState)(),
139
144
  open = _useState[0],
140
145
  setOpen = _useState[1];
141
146
 
142
- var _useState2 = (0, _react.useState)(initialDate),
143
- startDate = _useState2[0],
144
- setStartDate = _useState2[1];
147
+ var _useState2 = (0, _react.useState)(startDate),
148
+ startDateLocal = _useState2[0],
149
+ setStartDateLocal = _useState2[1];
145
150
 
146
- var _useState3 = (0, _react.useState)(finishDate),
147
- endDate = _useState3[0],
148
- setEndDate = _useState3[1];
151
+ var _useState3 = (0, _react.useState)(endDate),
152
+ endDateLocal = _useState3[0],
153
+ setEndDateLocal = _useState3[1];
149
154
 
150
155
  var ref = (0, _react.useRef)(null);
151
156
 
@@ -163,18 +168,23 @@ function Datepicker(_ref8) {
163
168
  };
164
169
 
165
170
  (0, _react.useEffect)(function () {
166
- if (type === 'single' && onSelectSingle) {
167
- onSelectSingle(startDate);
171
+ setInputFilled(startDate || endDate);
172
+ }, [startDate, endDate]);
173
+ (0, _react.useEffect)(function () {
174
+ setInputFilled(startDate || endDate);
175
+ setStartDateLocal(startDate);
176
+ setEndDateLocal(endDate);
177
+
178
+ if (type === 'single' && startDate) {
168
179
  setOpen(false.toString());
169
- } else if (type === 'range' && onSelectRange) {
170
- onSelectRange(startDate, endDate);
171
180
  }
172
181
 
173
- setInputFilled(!!startDate);
174
- }, [startDate, endDate]);
182
+ if ((startDate || endDate) && onSelectRange) onSelectRange(startDate, endDate);
183
+ if (displayEndDateOnly && !endDate) setInputFilled(false);
184
+ }, [startDate, endDate, type]);
175
185
 
176
186
  var onDateSingleSelect = function onDateSingleSelect(startLocal) {
177
- setStartDate(startLocal);
187
+ onSelectSingle(startLocal);
178
188
  };
179
189
 
180
190
  (0, _react.useEffect)(function () {
@@ -182,27 +192,38 @@ function Datepicker(_ref8) {
182
192
  }, [open]);
183
193
 
184
194
  var onDateRangeSelect = function onDateRangeSelect(selectedDate) {
185
- if (!endDate) {
186
- if (!startDate) {
187
- setStartDate(selectedDate);
188
- } else if (selectedDate < startDate) {
189
- setStartDate(selectedDate);
190
- setEndDate(undefined);
191
- } else setEndDate(selectedDate);
195
+ if (customOnSelectRange) {
196
+ customOnSelectRange(selectedDate);
197
+ return;
198
+ }
199
+
200
+ var onSelectRangeCallback = function onSelectRangeCallback(start, end) {
201
+ if (onSelectRange) {
202
+ onSelectRange(start, end);
203
+ }
204
+ };
205
+
206
+ if (!startDateLocal || startDateLocal > selectedDate && !endDateLocal || endDateLocal) {
207
+ setStartDateLocal(selectedDate);
208
+ if (endDateLocal) setEndDateLocal(undefined);
209
+ onSelectRangeCallback(selectedDate, undefined);
192
210
  } else {
193
- setStartDate(selectedDate);
194
- setEndDate(undefined);
211
+ setEndDateLocal(selectedDate);
212
+ onSelectRangeCallback(startDateLocal, selectedDate);
195
213
  }
196
214
  };
197
215
 
198
216
  var renderInput = function renderInput() {
199
- if (!startDate && !endDate) {
217
+ if (!startDate && !endDate || displayEndDateOnly && !endDate) {
200
218
  return /*#__PURE__*/_react["default"].createElement(InputPlaceholder, {
201
219
  disabled: disabled
202
220
  }, placeholder != null ? placeholder : "Select Date");
203
221
  }
204
222
 
205
223
  var dateFormat = 'MMM d, yyyy';
224
+ if (displayEndDateOnly) return /*#__PURE__*/_react["default"].createElement(Input, {
225
+ disabled: disabled
226
+ }, endDate && (0, _dateFns.format)(endDate, dateFormat));
206
227
  return startDate && /*#__PURE__*/_react["default"].createElement(Input, {
207
228
  disabled: disabled
208
229
  }, (0, _dateFns.format)(startDate, dateFormat), endDate && " - " + (0, _dateFns.format)(endDate, dateFormat));
@@ -214,7 +235,8 @@ function Datepicker(_ref8) {
214
235
  }, /*#__PURE__*/_react["default"].createElement(Selector, {
215
236
  open: open === 'true',
216
237
  disabled: disabled,
217
- error: error
238
+ error: error,
239
+ inputFilled: inputFilled
218
240
  }, renderInput(), /*#__PURE__*/_react["default"].createElement(TButton, {
219
241
  onClick: function onClick() {
220
242
  if (!disabled) {
@@ -232,12 +254,14 @@ function Datepicker(_ref8) {
232
254
  onBlur: onBlur
233
255
  }, /*#__PURE__*/_react["default"].createElement(_Calendar["default"], {
234
256
  type: type,
235
- startDate: startDate,
236
- endDate: endDate,
257
+ startDate: startDateLocal,
258
+ endDate: endDateLocal,
237
259
  onSelectSingle: onDateSingleSelect,
238
260
  onSelectRange: onDateRangeSelect,
239
261
  disablePastDates: disablePastDates,
240
- disableFutureDates: disableFutureDates
262
+ disableFutureDates: disableFutureDates,
263
+ disablePastFrom: disablePastFrom,
264
+ disableFutureFrom: disableFutureFrom
241
265
  })));
242
266
  }
243
267
 
@@ -250,10 +274,14 @@ Datepicker.propTypes = {
250
274
  disabled: _propTypes.bool,
251
275
  onSelectSingle: _propTypes.func,
252
276
  onSelectRange: _propTypes.func,
277
+ customOnSelectRange: _propTypes.func,
253
278
  disablePastDates: _propTypes.bool,
254
279
  disableFutureDates: _propTypes.bool,
280
+ disablePastFrom: (0, _propTypes.instanceOf)(Date),
281
+ disableFutureFrom: (0, _propTypes.instanceOf)(Date),
255
282
  error: _propTypes.string,
256
- onOpen: _propTypes.func
283
+ onOpen: _propTypes.func,
284
+ displayEndDateOnly: _propTypes.bool
257
285
  };
258
286
  Datepicker.defaultProps = {
259
287
  fullWidth: false,
@@ -263,10 +291,14 @@ Datepicker.defaultProps = {
263
291
  disabled: false,
264
292
  onSelectSingle: undefined,
265
293
  onSelectRange: undefined,
294
+ customOnSelectRange: undefined,
266
295
  disablePastDates: false,
267
296
  disableFutureDates: false,
297
+ disablePastFrom: undefined,
298
+ disableFutureFrom: undefined,
268
299
  error: undefined,
269
- onOpen: undefined
300
+ onOpen: undefined,
301
+ displayEndDateOnly: false
270
302
  };
271
303
  var _default = Datepicker;
272
304
  exports["default"] = _default;
@@ -30,8 +30,7 @@ describe('<Datepicker />', function () {
30
30
  expect(container).toMatchSnapshot();
31
31
  });
32
32
  it('should match with default selected date single Datepicker', function () {
33
- var mockedDate = new Date(2022, 7, 3);
34
- jest.useFakeTimers('modern').setSystemTime(mockedDate);
33
+ jest.useFakeTimers('modern').setSystemTime(testDate);
35
34
 
36
35
  var _render3 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_.ThemeProvider, null, /*#__PURE__*/_react["default"].createElement(_.Datepicker, {
37
36
  type: "single",
@@ -42,8 +41,7 @@ describe('<Datepicker />', function () {
42
41
  expect(container).toMatchSnapshot();
43
42
  });
44
43
  it('should match with default selected dates range Datepicker', function () {
45
- var mockedDate = new Date(2022, 7, 3);
46
- jest.useFakeTimers('modern').setSystemTime(mockedDate);
44
+ jest.useFakeTimers('modern').setSystemTime(testDate);
47
45
  var endDate = new Date();
48
46
  endDate.setDate(testDate.getDate() + 15);
49
47
 
@@ -110,7 +108,7 @@ describe('<Datepicker />', function () {
110
108
  type: "single",
111
109
  onSelectSingle: onSelectSingle
112
110
  })));
113
- expect(onSelectSingle).toHaveBeenCalledTimes(1);
111
+ expect(onSelectSingle).not.toHaveBeenCalled();
114
112
 
115
113
  _react2.fireEvent.click(_react2.screen.getByRole('button'));
116
114
 
@@ -118,7 +116,7 @@ describe('<Datepicker />', function () {
118
116
 
119
117
  _react2.fireEvent.click(day10);
120
118
 
121
- expect(onSelectSingle).toHaveBeenCalledTimes(2);
119
+ expect(onSelectSingle).toHaveBeenCalledTimes(1);
122
120
  });
123
121
  it('should call onSelectRange function on range Datepicker', function () {
124
122
  var onSelectRange = jest.fn();
@@ -126,7 +124,7 @@ describe('<Datepicker />', function () {
126
124
  type: "range",
127
125
  onSelectRange: onSelectRange
128
126
  })));
129
- expect(onSelectRange).toHaveBeenCalledTimes(1);
127
+ expect(onSelectRange).not.toHaveBeenCalled();
130
128
 
131
129
  _react2.fireEvent.click(_react2.screen.getByRole('button'));
132
130
 
@@ -136,11 +134,33 @@ describe('<Datepicker />', function () {
136
134
 
137
135
  _react2.fireEvent.click(day10);
138
136
 
137
+ expect(onSelectRange).toHaveBeenCalledTimes(1);
138
+
139
+ _react2.fireEvent.click(day20);
140
+
139
141
  expect(onSelectRange).toHaveBeenCalledTimes(2);
142
+ });
143
+ it('should call onCustomSelectRange function on range Datepicker', function () {
144
+ var onCustomSelectRange = jest.fn();
145
+ (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_.ThemeProvider, null, /*#__PURE__*/_react["default"].createElement(_.Datepicker, {
146
+ type: "range",
147
+ onSelectRange: onCustomSelectRange
148
+ })));
149
+ expect(onCustomSelectRange).not.toHaveBeenCalled();
150
+
151
+ _react2.fireEvent.click(_react2.screen.getByRole('button'));
152
+
153
+ var day10 = _react2.screen.queryAllByText('10')[0];
154
+
155
+ var day20 = _react2.screen.queryAllByText('20')[0];
156
+
157
+ _react2.fireEvent.click(day10);
158
+
159
+ expect(onCustomSelectRange).toHaveBeenCalledTimes(1);
140
160
 
141
161
  _react2.fireEvent.click(day20);
142
162
 
143
- expect(onSelectRange).toHaveBeenCalledTimes(3);
163
+ expect(onCustomSelectRange).toHaveBeenCalledTimes(2);
144
164
  });
145
165
  it('should display default date on single Datepicker', function () {
146
166
  var currentDate = new Date();
@@ -210,6 +230,36 @@ describe('<Datepicker />', function () {
210
230
  return expect(_react2.screen.getAllByText("" + (i + 1))[0].closest('div')).toHaveAttribute('disabled');
211
231
  });
212
232
  });
233
+ it('should disable past dates from specific date', function () {
234
+ jest.useFakeTimers('modern').setSystemTime(testDate);
235
+ var date = new Date();
236
+ date.setDate(testDate.getDate() + 15);
237
+ (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_.ThemeProvider, null, /*#__PURE__*/_react["default"].createElement(_.Datepicker, {
238
+ type: "single",
239
+ disablePastFrom: date
240
+ })));
241
+
242
+ _react2.fireEvent.click(_react2.screen.getByRole('button'));
243
+
244
+ for (var i = 1; i <= 17; i++) {
245
+ expect(_react2.screen.getAllByText("" + i)[0].closest('div')).toHaveAttribute('disabled');
246
+ }
247
+ });
248
+ it('should disable future dates from specific date', function () {
249
+ jest.useFakeTimers('modern').setSystemTime(testDate);
250
+ var date = new Date();
251
+ date.setDate(testDate.getDate() + 15);
252
+ (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_.ThemeProvider, null, /*#__PURE__*/_react["default"].createElement(_.Datepicker, {
253
+ type: "single",
254
+ disableFutureFrom: date
255
+ })));
256
+
257
+ _react2.fireEvent.click(_react2.screen.getByRole('button'));
258
+
259
+ for (var i = 19; i <= 31; i++) {
260
+ expect(_react2.screen.getAllByText("" + i)[0].closest('div')).toHaveAttribute('disabled');
261
+ }
262
+ });
213
263
  it('should be disabled', function () {
214
264
  (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_.ThemeProvider, null, /*#__PURE__*/_react["default"].createElement(_.Datepicker, {
215
265
  type: "single",
@@ -1 +1 @@
1
- var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports["default"]=void 0;var _extends2=_interopRequireDefault(require("@babel/runtime/helpers/extends"));var _objectWithoutProperties2=_interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));var _taggedTemplateLiteralLoose2=_interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteralLoose"));var _react=_interopRequireDefault(require("react"));var _styledComponents=_interopRequireWildcard(require("styled-components"));var _propTypes=require("prop-types");var _yogaSystem=require("@gympass/yoga-system");var _Tag=require("./Tag");var _Icon=_interopRequireDefault(require("../../Icon"));var _excluded=["children","icon","theme","small"];var _templateObject,_templateObject2,_templateObject3;function _getRequireWildcardCache(nodeInterop){if(typeof WeakMap!=="function")return null;var cacheBabelInterop=new WeakMap();var cacheNodeInterop=new WeakMap();return(_getRequireWildcardCache=function _getRequireWildcardCache(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop;})(nodeInterop);}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;}var Informative=(0,_styledComponents["default"])(_Tag.StyledTag)(_templateObject||(_templateObject=(0,_taggedTemplateLiteralLoose2["default"])(["\n ","\n\n ","\n"])),function(_ref){var variant=_ref.variant,_ref$theme$yoga=_ref.theme.yoga,_ref$theme$yoga$color=_ref$theme$yoga.colors,text=_ref$theme$yoga$color.text,_ref$theme$yoga$color2=_ref$theme$yoga$color.feedback[variant],color=_ref$theme$yoga$color2===void 0?{light:text.secondary}:_ref$theme$yoga$color2,tag=_ref$theme$yoga.components.tag;return"\n background-color: "+color.light+";\n border-color: "+color.light+";\n border-radius: "+tag.border.radius+"px;\n ";},_yogaSystem.margins);var Wrapper=_styledComponents["default"].View(_templateObject2||(_templateObject2=(0,_taggedTemplateLiteralLoose2["default"])(["\n flex-direction: row;\n justify-content: center;\n align-items: center;\n"])));var StyledTextInformative=(0,_styledComponents["default"])(_Tag.StyledText)(_templateObject3||(_templateObject3=(0,_taggedTemplateLiteralLoose2["default"])(["\n ","\n"])),function(_ref2){var _ref2$theme$yoga=_ref2.theme.yoga,text=_ref2$theme$yoga.colors.text,tag=_ref2$theme$yoga.components.tag;return"\n color: "+text.primary+";\n\n font-size: "+tag.font.size+"px;\n line-height: "+tag.font.lineHeight+"px;\n font-weight: "+tag.font.weight+";\n ";});var TagInformative=function TagInformative(_ref3){var children=_ref3.children,icon=_ref3.icon,_ref3$theme$yoga=_ref3.theme.yoga,text=_ref3$theme$yoga.colors.text,tag=_ref3$theme$yoga.components.tag,small=_ref3.small,props=(0,_objectWithoutProperties2["default"])(_ref3,_excluded);return _react["default"].createElement(Informative,(0,_extends2["default"])({small:small},props),_react["default"].createElement(Wrapper,null,icon&&_react["default"].createElement(_Icon["default"],{as:icon,size:small?tag.icon.size.small:tag.icon.size["default"],fill:text.primary,marginRight:tag.icon.margin.right}),_react["default"].createElement(StyledTextInformative,null,children)));};TagInformative.propTypes={variant:(0,_propTypes.oneOf)(['success','informative','attention']).isRequired,icon:_propTypes.func,children:_propTypes.node.isRequired,small:_propTypes.bool};TagInformative.defaultProps={icon:undefined,small:false};TagInformative.displayName='Tag.Informative';var _default=(0,_styledComponents.withTheme)(TagInformative);exports["default"]=_default;
1
+ var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports["default"]=void 0;var _extends2=_interopRequireDefault(require("@babel/runtime/helpers/extends"));var _objectWithoutProperties2=_interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));var _taggedTemplateLiteralLoose2=_interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteralLoose"));var _react=_interopRequireDefault(require("react"));var _styledComponents=_interopRequireWildcard(require("styled-components"));var _propTypes=require("prop-types");var _yogaSystem=require("@gympass/yoga-system");var _Tag=require("./Tag");var _Icon=_interopRequireDefault(require("../../Icon"));var _excluded=["children","icon","theme","small"];var _templateObject,_templateObject2,_templateObject3;function _getRequireWildcardCache(nodeInterop){if(typeof WeakMap!=="function")return null;var cacheBabelInterop=new WeakMap();var cacheNodeInterop=new WeakMap();return(_getRequireWildcardCache=function _getRequireWildcardCache(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop;})(nodeInterop);}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;}var Informative=(0,_styledComponents["default"])(_Tag.StyledTag)(_templateObject||(_templateObject=(0,_taggedTemplateLiteralLoose2["default"])(["\n ","\n\n ","\n"])),function(_ref){var variant=_ref.variant,_ref$theme$yoga=_ref.theme.yoga,_ref$theme$yoga$color=_ref$theme$yoga.colors,text=_ref$theme$yoga$color.text,_ref$theme$yoga$color2=_ref$theme$yoga$color.feedback[variant],color=_ref$theme$yoga$color2===void 0?{light:text.secondary}:_ref$theme$yoga$color2,tag=_ref$theme$yoga.components.tag;return"\n background-color: "+color.light+";\n border-color: "+color.light+";\n border-radius: "+tag.border.radius+"px;\n ";},_yogaSystem.margins);var Wrapper=_styledComponents["default"].View(_templateObject2||(_templateObject2=(0,_taggedTemplateLiteralLoose2["default"])(["\n flex-direction: row;\n justify-content: center;\n align-items: center;\n"])));var StyledTextInformative=(0,_styledComponents["default"])(_Tag.StyledText)(_templateObject3||(_templateObject3=(0,_taggedTemplateLiteralLoose2["default"])(["\n ","\n"])),function(_ref2){var _ref2$theme$yoga=_ref2.theme.yoga,text=_ref2$theme$yoga.colors.text,tag=_ref2$theme$yoga.components.tag;return"\n color: "+text.primary+";\n\n font-size: "+tag.font.size+"px;\n line-height: "+tag.font.lineHeight+"px;\n font-weight: "+tag.font.weight+";\n ";});var TagInformative=function TagInformative(_ref3){var children=_ref3.children,icon=_ref3.icon,_ref3$theme$yoga=_ref3.theme.yoga,text=_ref3$theme$yoga.colors.text,tag=_ref3$theme$yoga.components.tag,small=_ref3.small,props=(0,_objectWithoutProperties2["default"])(_ref3,_excluded);return _react["default"].createElement(Informative,(0,_extends2["default"])({small:small},props),_react["default"].createElement(Wrapper,null,icon&&_react["default"].createElement(_Icon["default"],{as:icon,size:small?tag.icon.size.small:tag.icon.size["default"],fill:text.primary,marginRight:tag.icon.margin.right}),_react["default"].createElement(StyledTextInformative,null,children)));};TagInformative.propTypes={variant:(0,_propTypes.oneOf)(['neutral','success','informative','attention']),icon:_propTypes.func,children:_propTypes.node.isRequired,small:_propTypes.bool};TagInformative.defaultProps={variant:'neutral',icon:undefined,small:false};TagInformative.displayName='Tag.Informative';var _default=(0,_styledComponents.withTheme)(TagInformative);exports["default"]=_default;
@@ -1 +1 @@
1
- var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");var _react=_interopRequireDefault(require("react"));var _reactNative=require("@testing-library/react-native");var _yogaIcons=require("@gympass/yoga-icons");var _=require("../..");describe('<Tag />',function(){it('should match snapshot',function(){var _render=(0,_reactNative.render)(_react["default"].createElement(_.ThemeProvider,null,_react["default"].createElement(_.Tag,null,"default"))),toJSON=_render.toJSON;expect(toJSON()).toMatchSnapshot();});it('should match snapshot with custom icon and informative type',function(){var _render2=(0,_reactNative.render)(_react["default"].createElement(_.ThemeProvider,null,_react["default"].createElement(_.Tag.Informative,{variant:"success",icon:_yogaIcons.Building},"success with custom icon"),_react["default"].createElement(_.Tag.Informative,{variant:"success",icon:_yogaIcons.Building,small:true},"success with custom icon"))),toJSON=_render2.toJSON;expect(toJSON()).toMatchSnapshot();});it('should match snapshot with without icon and informative type',function(){var _render3=(0,_reactNative.render)(_react["default"].createElement(_.ThemeProvider,null,_react["default"].createElement(_.Tag.Informative,{variant:"success"},"success without icon"),_react["default"].createElement(_.Tag.Informative,{variant:"success",small:true},"success without icon"))),toJSON=_render3.toJSON;expect(toJSON()).toMatchSnapshot();});it('should match snapshot with variant prop',function(){var _render4=(0,_reactNative.render)(_react["default"].createElement(_.ThemeProvider,null,_react["default"].createElement(_.Tag,{variant:"success"},"success"),_react["default"].createElement(_.Tag,{variant:"informative"},"informative"),_react["default"].createElement(_.Tag,{variant:"attention"},"attention"),_react["default"].createElement(_.Tag,{variant:"attention",small:true},"attention small"))),toJSON=_render4.toJSON;expect(toJSON()).toMatchSnapshot();});it('should match snapshot with variant prop and informative type',function(){var _render5=(0,_reactNative.render)(_react["default"].createElement(_.ThemeProvider,null,_react["default"].createElement(_.Tag.Informative,{variant:"success"},"success"),_react["default"].createElement(_.Tag.Informative,{variant:"informative"},"informative"),_react["default"].createElement(_.Tag.Informative,{variant:"attention"},"attention"),_react["default"].createElement(_.Tag.Informative,{variant:"attention",small:true},"attention small"))),toJSON=_render5.toJSON;expect(toJSON()).toMatchSnapshot();});it('should match snapshot with variant and margin prop ',function(){var _render6=(0,_reactNative.render)(_react["default"].createElement(_.ThemeProvider,null,_react["default"].createElement(_.Tag,{variant:"success"},"success"),_react["default"].createElement(_.Tag,{mv:"medium",variant:"informative"},"informative"),_react["default"].createElement(_.Tag,{variant:"attention"},"attention"))),toJSON=_render6.toJSON;expect(toJSON()).toMatchSnapshot();});it('should match snapshot with variant prop and informative type with margin prop',function(){var _render7=(0,_reactNative.render)(_react["default"].createElement(_.ThemeProvider,null,_react["default"].createElement(_.Tag.Informative,{variant:"success"},"success"),_react["default"].createElement(_.Tag.Informative,{mv:"medium",variant:"informative"},"informative"),_react["default"].createElement(_.Tag.Informative,{variant:"attention"},"attention"))),toJSON=_render7.toJSON;expect(toJSON()).toMatchSnapshot();});});
1
+ var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");var _react=_interopRequireDefault(require("react"));var _reactNative=require("@testing-library/react-native");var _yogaIcons=require("@gympass/yoga-icons");var _=require("../..");describe('<Tag />',function(){it('should match snapshot',function(){var _render=(0,_reactNative.render)(_react["default"].createElement(_.ThemeProvider,null,_react["default"].createElement(_.Tag,null,"default"))),toJSON=_render.toJSON;expect(toJSON()).toMatchSnapshot();});it('should match snapshot with custom icon and informative type',function(){var _render2=(0,_reactNative.render)(_react["default"].createElement(_.ThemeProvider,null,_react["default"].createElement(_.Tag.Informative,{variant:"success",icon:_yogaIcons.Building},"success with custom icon"),_react["default"].createElement(_.Tag.Informative,{variant:"success",icon:_yogaIcons.Building,small:true},"success with custom icon"))),toJSON=_render2.toJSON;expect(toJSON()).toMatchSnapshot();});it('should match snapshot with without icon and informative type',function(){var _render3=(0,_reactNative.render)(_react["default"].createElement(_.ThemeProvider,null,_react["default"].createElement(_.Tag.Informative,{variant:"success"},"success without icon"),_react["default"].createElement(_.Tag.Informative,{variant:"success",small:true},"success without icon"))),toJSON=_render3.toJSON;expect(toJSON()).toMatchSnapshot();});it('should match snapshot with variant prop',function(){var _render4=(0,_reactNative.render)(_react["default"].createElement(_.ThemeProvider,null,_react["default"].createElement(_.Tag,{variant:"success"},"success"),_react["default"].createElement(_.Tag,{variant:"informative"},"informative"),_react["default"].createElement(_.Tag,{variant:"attention"},"attention"),_react["default"].createElement(_.Tag,{variant:"attention",small:true},"attention small"))),toJSON=_render4.toJSON;expect(toJSON()).toMatchSnapshot();});it('should match snapshot with variant prop and informative type',function(){var _render5=(0,_reactNative.render)(_react["default"].createElement(_.ThemeProvider,null,_react["default"].createElement(_.Tag.Informative,{variant:"neutral"},"neutral"),_react["default"].createElement(_.Tag.Informative,{variant:"success"},"success"),_react["default"].createElement(_.Tag.Informative,{variant:"informative"},"informative"),_react["default"].createElement(_.Tag.Informative,{variant:"attention"},"attention"),_react["default"].createElement(_.Tag.Informative,{variant:"attention",small:true},"attention small"))),toJSON=_render5.toJSON;expect(toJSON()).toMatchSnapshot();});it('should match snapshot with variant and margin prop ',function(){var _render6=(0,_reactNative.render)(_react["default"].createElement(_.ThemeProvider,null,_react["default"].createElement(_.Tag,{variant:"success"},"success"),_react["default"].createElement(_.Tag,{mv:"medium",variant:"informative"},"informative"),_react["default"].createElement(_.Tag,{variant:"attention"},"attention"))),toJSON=_render6.toJSON;expect(toJSON()).toMatchSnapshot();});it('should match snapshot with variant prop and informative type with margin prop',function(){var _render7=(0,_reactNative.render)(_react["default"].createElement(_.ThemeProvider,null,_react["default"].createElement(_.Tag.Informative,{variant:"success"},"success"),_react["default"].createElement(_.Tag.Informative,{mv:"medium",variant:"informative"},"informative"),_react["default"].createElement(_.Tag.Informative,{variant:"attention"},"attention"))),toJSON=_render7.toJSON;expect(toJSON()).toMatchSnapshot();});});
@@ -78,7 +78,7 @@ var DayField = styled.div(_templateObject4 || (_templateObject4 = _taggedTemplat
78
78
  radii = _ref4$theme$yoga.radii,
79
79
  spacing = _ref4$theme$yoga.spacing,
80
80
  datepicker = _ref4$theme$yoga.components.datepicker;
81
- return "\n p {\n color: " + getDayFieldColor(selected, disabled, colors, aux) + ";\n z-index: 1;\n }\n width: " + datepicker.width.day + "px;\n height: " + datepicker.width.day + "px;\n padding: " + spacing.zero + "px 21.3px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: " + (inRange ? colors.clear : colors.white) + ";\n position: relative;\n cursor: pointer;\n " + (selected && inRange ? "border-radius: " + getDayFieldRadius(aux, radii) : "") + "\n " + (selected && !disabled ? "&:before {\n content: '';\n position: absolute;\n background: " + colors.vibin + ";\n width: " + datepicker.width.day + "px;\n height: " + datepicker.width.day + "px;\n border-radius: " + radii.circle + "px;\n }" : "") + "\n " + (!disabled ? "&:hover {\n &:before {\n content: '';\n position: absolute;\n border: 1px solid " + colors.secondary + ";\n width: " + datepicker.width.day + "px;\n height: " + datepicker.width.day + "px;\n border-radius: " + radii.circle + "px;\n }\n }" : "") + "\n";
81
+ return "\n p {\n color: " + getDayFieldColor(selected, disabled, colors, aux) + ";\n z-index: 1;\n }\n width: " + datepicker.width.day + "px;\n height: " + datepicker.width.day + "px;\n padding: " + spacing.zero + "px 21.3px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: " + (inRange ? colors.clear : colors.white) + ";\n position: relative;\n cursor: pointer;\n " + (selected && inRange ? "border-radius: " + getDayFieldRadius(aux, radii) + ";" : "") + "\n " + (selected && !disabled ? "&:before {\n content: '';\n position: absolute;\n background: " + colors.vibin + ";\n width: " + datepicker.width.day + "px;\n height: " + datepicker.width.day + "px;\n border-radius: " + radii.circle + "px;\n };" : "") + "\n " + (!disabled ? "&:hover {\n &:before {\n content: '';\n position: absolute;\n border: 1px solid " + colors.secondary + ";\n width: " + datepicker.width.day + "px;\n height: " + datepicker.width.day + "px;\n border-radius: " + radii.circle + "px;\n }\n };" : "") + "\n";
82
82
  });
83
83
  var Row = styled.div(_templateObject5 || (_templateObject5 = _taggedTemplateLiteralLoose(["\n ", "\n"])), function (_ref5) {
84
84
  var _ref5$theme$yoga = _ref5.theme.yoga,
@@ -94,7 +94,9 @@ function Calendar(_ref6) {
94
94
  onSelectSingle = _ref6.onSelectSingle,
95
95
  onSelectRange = _ref6.onSelectRange,
96
96
  disablePastDates = _ref6.disablePastDates,
97
- disableFutureDates = _ref6.disableFutureDates;
97
+ disableFutureDates = _ref6.disableFutureDates,
98
+ disablePastFrom = _ref6.disablePastFrom,
99
+ disableFutureFrom = _ref6.disableFutureFrom;
98
100
 
99
101
  var _useState = useState(new Date().getUTCMonth()),
100
102
  month = _useState[0],
@@ -105,11 +107,14 @@ function Calendar(_ref6) {
105
107
  setYear = _useState2[1];
106
108
 
107
109
  useEffect(function () {
108
- if (startDate) {
110
+ if (endDate) {
111
+ setMonth(endDate.getUTCMonth());
112
+ setYear(endDate.getUTCFullYear());
113
+ } else if (startDate) {
109
114
  setMonth(startDate.getUTCMonth());
110
115
  setYear(startDate.getUTCFullYear());
111
116
  }
112
- }, [startDate]);
117
+ }, [startDate, endDate]);
113
118
 
114
119
  var getDayOfWeek = function getDayOfWeek(day) {
115
120
  return new Date(Date.UTC(year, month, day)).getUTCDay();
@@ -139,8 +144,8 @@ function Calendar(_ref6) {
139
144
  var local = new Date(Date.UTC(year, month, day));
140
145
  var now = new Date();
141
146
  var nowUTC = Date.UTC(now.getFullYear(), now.getMonth(), now.getDate());
142
- var pastDatesDisabled = disablePastDates && local.getTime() < nowUTC;
143
- var futureDateDisabled = disableFutureDates && local.getTime() > nowUTC;
147
+ var pastDatesDisabled = disablePastDates && local.getTime() < nowUTC || disablePastFrom && local.getTime() < new Date(Date.UTC(disablePastFrom.getFullYear(), disablePastFrom.getMonth(), disablePastFrom.getDate()));
148
+ var futureDateDisabled = disableFutureDates && local.getTime() > nowUTC || disableFutureFrom && local.getTime() > new Date(Date.UTC(disableFutureFrom.getFullYear(), disableFutureFrom.getMonth(), disableFutureFrom.getDate()));
144
149
  return pastDatesDisabled || futureDateDisabled;
145
150
  };
146
151
 
@@ -321,7 +326,9 @@ Calendar.propTypes = {
321
326
  onSelectSingle: func,
322
327
  onSelectRange: func,
323
328
  disablePastDates: bool,
324
- disableFutureDates: bool
329
+ disableFutureDates: bool,
330
+ disablePastFrom: instanceOf(Date),
331
+ disableFutureFrom: instanceOf(Date)
325
332
  };
326
333
  Calendar.defaultProps = {
327
334
  startDate: undefined,
@@ -329,6 +336,8 @@ Calendar.defaultProps = {
329
336
  onSelectSingle: null,
330
337
  onSelectRange: null,
331
338
  disablePastDates: false,
332
- disableFutureDates: false
339
+ disableFutureDates: false,
340
+ disablePastFrom: undefined,
341
+ disableFutureFrom: undefined
333
342
  };
334
343
  export default Calendar;
@@ -21,7 +21,7 @@ var Wrapper = styled.div(_templateObject || (_templateObject = _taggedTemplateLi
21
21
  return props.fullWidth ? '100%' : css(_templateObject2 || (_templateObject2 = _taggedTemplateLiteralLoose(["\n ", "px\n "])), theme.components.input.width);
22
22
  });
23
23
 
24
- var getSelectorBorderColor = function getSelectorBorderColor(open, error, disabled, colors, input) {
24
+ var getSelectorBorderColor = function getSelectorBorderColor(open, error, disabled, inputFilled, colors) {
25
25
  if (error) {
26
26
  return colors.feedback.attention[1];
27
27
  }
@@ -30,22 +30,23 @@ var getSelectorBorderColor = function getSelectorBorderColor(open, error, disabl
30
30
  return colors.elements.backgroundAndDisabled;
31
31
  }
32
32
 
33
- if (open) {
34
- return colors.deep;
33
+ if (open || inputFilled) {
34
+ return colors.secondary;
35
35
  }
36
36
 
37
- return input.border.color["default"];
37
+ return colors.elements.lineAndBorders;
38
38
  };
39
39
 
40
40
  var Selector = styled.div(_templateObject3 || (_templateObject3 = _taggedTemplateLiteralLoose(["\n ", "\n"])), function (_ref) {
41
41
  var open = _ref.open,
42
42
  error = _ref.error,
43
43
  disabled = _ref.disabled,
44
+ inputFilled = _ref.inputFilled,
44
45
  _ref$theme$yoga = _ref.theme.yoga,
45
46
  components = _ref$theme$yoga.components,
46
47
  colors = _ref$theme$yoga.colors,
47
48
  spacing = _ref$theme$yoga.spacing;
48
- return "\n position: relative;\n display: flex;\n justify-content: flex-start;\n align-items: center;\n box-sizing: border-box;\n height: " + components.input.height + "px;\n width: 100%;\n padding: " + spacing.small + "px;\n background-color: " + colors.white + ";\n border-radius: " + components.input.border.radius + "px;\n border-width: " + components.input.border.width + "px;\n border-style: solid;\n border-color: " + getSelectorBorderColor(open, error, disabled, colors, components.input) + "\n color: " + components.input.font.color.focus + ";\n ";
49
+ return "\n position: relative;\n display: flex;\n justify-content: flex-start;\n align-items: center;\n box-sizing: border-box;\n height: " + components.input.height + "px;\n width: 100%;\n padding: " + spacing.small + "px;\n background-color: " + colors.white + ";\n border-radius: " + components.input.border.radius + "px;\n border-width: " + components.input.border.width + "px;\n border-style: solid;\n border-color: " + getSelectorBorderColor(open, error, disabled, inputFilled, colors) + ";\n &:hover {\n border-color: " + colors.secondary + ";\n }\n ";
49
50
  });
50
51
  var Input = styled(Text.Small)(_templateObject4 || (_templateObject4 = _taggedTemplateLiteralLoose(["\n ", "\n"])), function (_ref2) {
51
52
  var disabled = _ref2.disabled,
@@ -100,27 +101,31 @@ function Datepicker(_ref8) {
100
101
  var fullWidth = _ref8.fullWidth,
101
102
  type = _ref8.type,
102
103
  placeholder = _ref8.placeholder,
103
- initialDate = _ref8.startDate,
104
- finishDate = _ref8.endDate,
104
+ startDate = _ref8.startDate,
105
+ endDate = _ref8.endDate,
105
106
  onSelectSingle = _ref8.onSelectSingle,
106
107
  disabled = _ref8.disabled,
107
108
  onSelectRange = _ref8.onSelectRange,
109
+ customOnSelectRange = _ref8.customOnSelectRange,
108
110
  disablePastDates = _ref8.disablePastDates,
109
111
  disableFutureDates = _ref8.disableFutureDates,
112
+ disablePastFrom = _ref8.disablePastFrom,
113
+ disableFutureFrom = _ref8.disableFutureFrom,
110
114
  error = _ref8.error,
111
- onOpen = _ref8.onOpen;
115
+ onOpen = _ref8.onOpen,
116
+ displayEndDateOnly = _ref8.displayEndDateOnly;
112
117
 
113
118
  var _useState = useState(),
114
119
  open = _useState[0],
115
120
  setOpen = _useState[1];
116
121
 
117
- var _useState2 = useState(initialDate),
118
- startDate = _useState2[0],
119
- setStartDate = _useState2[1];
122
+ var _useState2 = useState(startDate),
123
+ startDateLocal = _useState2[0],
124
+ setStartDateLocal = _useState2[1];
120
125
 
121
- var _useState3 = useState(finishDate),
122
- endDate = _useState3[0],
123
- setEndDate = _useState3[1];
126
+ var _useState3 = useState(endDate),
127
+ endDateLocal = _useState3[0],
128
+ setEndDateLocal = _useState3[1];
124
129
 
125
130
  var ref = useRef(null);
126
131
 
@@ -138,18 +143,23 @@ function Datepicker(_ref8) {
138
143
  };
139
144
 
140
145
  useEffect(function () {
141
- if (type === 'single' && onSelectSingle) {
142
- onSelectSingle(startDate);
146
+ setInputFilled(startDate || endDate);
147
+ }, [startDate, endDate]);
148
+ useEffect(function () {
149
+ setInputFilled(startDate || endDate);
150
+ setStartDateLocal(startDate);
151
+ setEndDateLocal(endDate);
152
+
153
+ if (type === 'single' && startDate) {
143
154
  setOpen(false.toString());
144
- } else if (type === 'range' && onSelectRange) {
145
- onSelectRange(startDate, endDate);
146
155
  }
147
156
 
148
- setInputFilled(!!startDate);
149
- }, [startDate, endDate]);
157
+ if ((startDate || endDate) && onSelectRange) onSelectRange(startDate, endDate);
158
+ if (displayEndDateOnly && !endDate) setInputFilled(false);
159
+ }, [startDate, endDate, type]);
150
160
 
151
161
  var onDateSingleSelect = function onDateSingleSelect(startLocal) {
152
- setStartDate(startLocal);
162
+ onSelectSingle(startLocal);
153
163
  };
154
164
 
155
165
  useEffect(function () {
@@ -157,27 +167,38 @@ function Datepicker(_ref8) {
157
167
  }, [open]);
158
168
 
159
169
  var onDateRangeSelect = function onDateRangeSelect(selectedDate) {
160
- if (!endDate) {
161
- if (!startDate) {
162
- setStartDate(selectedDate);
163
- } else if (selectedDate < startDate) {
164
- setStartDate(selectedDate);
165
- setEndDate(undefined);
166
- } else setEndDate(selectedDate);
170
+ if (customOnSelectRange) {
171
+ customOnSelectRange(selectedDate);
172
+ return;
173
+ }
174
+
175
+ var onSelectRangeCallback = function onSelectRangeCallback(start, end) {
176
+ if (onSelectRange) {
177
+ onSelectRange(start, end);
178
+ }
179
+ };
180
+
181
+ if (!startDateLocal || startDateLocal > selectedDate && !endDateLocal || endDateLocal) {
182
+ setStartDateLocal(selectedDate);
183
+ if (endDateLocal) setEndDateLocal(undefined);
184
+ onSelectRangeCallback(selectedDate, undefined);
167
185
  } else {
168
- setStartDate(selectedDate);
169
- setEndDate(undefined);
186
+ setEndDateLocal(selectedDate);
187
+ onSelectRangeCallback(startDateLocal, selectedDate);
170
188
  }
171
189
  };
172
190
 
173
191
  var renderInput = function renderInput() {
174
- if (!startDate && !endDate) {
192
+ if (!startDate && !endDate || displayEndDateOnly && !endDate) {
175
193
  return /*#__PURE__*/React.createElement(InputPlaceholder, {
176
194
  disabled: disabled
177
195
  }, placeholder != null ? placeholder : "Select Date");
178
196
  }
179
197
 
180
198
  var dateFormat = 'MMM d, yyyy';
199
+ if (displayEndDateOnly) return /*#__PURE__*/React.createElement(Input, {
200
+ disabled: disabled
201
+ }, endDate && format(endDate, dateFormat));
181
202
  return startDate && /*#__PURE__*/React.createElement(Input, {
182
203
  disabled: disabled
183
204
  }, format(startDate, dateFormat), endDate && " - " + format(endDate, dateFormat));
@@ -189,7 +210,8 @@ function Datepicker(_ref8) {
189
210
  }, /*#__PURE__*/React.createElement(Selector, {
190
211
  open: open === 'true',
191
212
  disabled: disabled,
192
- error: error
213
+ error: error,
214
+ inputFilled: inputFilled
193
215
  }, renderInput(), /*#__PURE__*/React.createElement(TButton, {
194
216
  onClick: function onClick() {
195
217
  if (!disabled) {
@@ -207,12 +229,14 @@ function Datepicker(_ref8) {
207
229
  onBlur: onBlur
208
230
  }, /*#__PURE__*/React.createElement(Calendar, {
209
231
  type: type,
210
- startDate: startDate,
211
- endDate: endDate,
232
+ startDate: startDateLocal,
233
+ endDate: endDateLocal,
212
234
  onSelectSingle: onDateSingleSelect,
213
235
  onSelectRange: onDateRangeSelect,
214
236
  disablePastDates: disablePastDates,
215
- disableFutureDates: disableFutureDates
237
+ disableFutureDates: disableFutureDates,
238
+ disablePastFrom: disablePastFrom,
239
+ disableFutureFrom: disableFutureFrom
216
240
  })));
217
241
  }
218
242
 
@@ -225,10 +249,14 @@ Datepicker.propTypes = {
225
249
  disabled: bool,
226
250
  onSelectSingle: func,
227
251
  onSelectRange: func,
252
+ customOnSelectRange: func,
228
253
  disablePastDates: bool,
229
254
  disableFutureDates: bool,
255
+ disablePastFrom: instanceOf(Date),
256
+ disableFutureFrom: instanceOf(Date),
230
257
  error: string,
231
- onOpen: func
258
+ onOpen: func,
259
+ displayEndDateOnly: bool
232
260
  };
233
261
  Datepicker.defaultProps = {
234
262
  fullWidth: false,
@@ -238,9 +266,13 @@ Datepicker.defaultProps = {
238
266
  disabled: false,
239
267
  onSelectSingle: undefined,
240
268
  onSelectRange: undefined,
269
+ customOnSelectRange: undefined,
241
270
  disablePastDates: false,
242
271
  disableFutureDates: false,
272
+ disablePastFrom: undefined,
273
+ disableFutureFrom: undefined,
243
274
  error: undefined,
244
- onOpen: undefined
275
+ onOpen: undefined,
276
+ displayEndDateOnly: false
245
277
  };
246
278
  export default Datepicker;
@@ -22,8 +22,7 @@ describe('<Datepicker />', function () {
22
22
  expect(container).toMatchSnapshot();
23
23
  });
24
24
  it('should match with default selected date single Datepicker', function () {
25
- var mockedDate = new Date(2022, 7, 3);
26
- jest.useFakeTimers('modern').setSystemTime(mockedDate);
25
+ jest.useFakeTimers('modern').setSystemTime(testDate);
27
26
 
28
27
  var _render3 = render( /*#__PURE__*/React.createElement(ThemeProvider, null, /*#__PURE__*/React.createElement(Datepicker, {
29
28
  type: "single",
@@ -34,8 +33,7 @@ describe('<Datepicker />', function () {
34
33
  expect(container).toMatchSnapshot();
35
34
  });
36
35
  it('should match with default selected dates range Datepicker', function () {
37
- var mockedDate = new Date(2022, 7, 3);
38
- jest.useFakeTimers('modern').setSystemTime(mockedDate);
36
+ jest.useFakeTimers('modern').setSystemTime(testDate);
39
37
  var endDate = new Date();
40
38
  endDate.setDate(testDate.getDate() + 15);
41
39
 
@@ -102,11 +100,11 @@ describe('<Datepicker />', function () {
102
100
  type: "single",
103
101
  onSelectSingle: onSelectSingle
104
102
  })));
105
- expect(onSelectSingle).toHaveBeenCalledTimes(1);
103
+ expect(onSelectSingle).not.toHaveBeenCalled();
106
104
  fireEvent.click(screen.getByRole('button'));
107
105
  var day10 = screen.queryAllByText('10')[0];
108
106
  fireEvent.click(day10);
109
- expect(onSelectSingle).toHaveBeenCalledTimes(2);
107
+ expect(onSelectSingle).toHaveBeenCalledTimes(1);
110
108
  });
111
109
  it('should call onSelectRange function on range Datepicker', function () {
112
110
  var onSelectRange = jest.fn();
@@ -114,14 +112,29 @@ describe('<Datepicker />', function () {
114
112
  type: "range",
115
113
  onSelectRange: onSelectRange
116
114
  })));
117
- expect(onSelectRange).toHaveBeenCalledTimes(1);
115
+ expect(onSelectRange).not.toHaveBeenCalled();
118
116
  fireEvent.click(screen.getByRole('button'));
119
117
  var day10 = screen.queryAllByText('10')[0];
120
118
  var day20 = screen.queryAllByText('20')[0];
121
119
  fireEvent.click(day10);
120
+ expect(onSelectRange).toHaveBeenCalledTimes(1);
121
+ fireEvent.click(day20);
122
122
  expect(onSelectRange).toHaveBeenCalledTimes(2);
123
+ });
124
+ it('should call onCustomSelectRange function on range Datepicker', function () {
125
+ var onCustomSelectRange = jest.fn();
126
+ render( /*#__PURE__*/React.createElement(ThemeProvider, null, /*#__PURE__*/React.createElement(Datepicker, {
127
+ type: "range",
128
+ onSelectRange: onCustomSelectRange
129
+ })));
130
+ expect(onCustomSelectRange).not.toHaveBeenCalled();
131
+ fireEvent.click(screen.getByRole('button'));
132
+ var day10 = screen.queryAllByText('10')[0];
133
+ var day20 = screen.queryAllByText('20')[0];
134
+ fireEvent.click(day10);
135
+ expect(onCustomSelectRange).toHaveBeenCalledTimes(1);
123
136
  fireEvent.click(day20);
124
- expect(onSelectRange).toHaveBeenCalledTimes(3);
137
+ expect(onCustomSelectRange).toHaveBeenCalledTimes(2);
125
138
  });
126
139
  it('should display default date on single Datepicker', function () {
127
140
  var currentDate = new Date();
@@ -183,6 +196,34 @@ describe('<Datepicker />', function () {
183
196
  return expect(screen.getAllByText("" + (i + 1))[0].closest('div')).toHaveAttribute('disabled');
184
197
  });
185
198
  });
199
+ it('should disable past dates from specific date', function () {
200
+ jest.useFakeTimers('modern').setSystemTime(testDate);
201
+ var date = new Date();
202
+ date.setDate(testDate.getDate() + 15);
203
+ render( /*#__PURE__*/React.createElement(ThemeProvider, null, /*#__PURE__*/React.createElement(Datepicker, {
204
+ type: "single",
205
+ disablePastFrom: date
206
+ })));
207
+ fireEvent.click(screen.getByRole('button'));
208
+
209
+ for (var i = 1; i <= 17; i++) {
210
+ expect(screen.getAllByText("" + i)[0].closest('div')).toHaveAttribute('disabled');
211
+ }
212
+ });
213
+ it('should disable future dates from specific date', function () {
214
+ jest.useFakeTimers('modern').setSystemTime(testDate);
215
+ var date = new Date();
216
+ date.setDate(testDate.getDate() + 15);
217
+ render( /*#__PURE__*/React.createElement(ThemeProvider, null, /*#__PURE__*/React.createElement(Datepicker, {
218
+ type: "single",
219
+ disableFutureFrom: date
220
+ })));
221
+ fireEvent.click(screen.getByRole('button'));
222
+
223
+ for (var i = 19; i <= 31; i++) {
224
+ expect(screen.getAllByText("" + i)[0].closest('div')).toHaveAttribute('disabled');
225
+ }
226
+ });
186
227
  it('should be disabled', function () {
187
228
  render( /*#__PURE__*/React.createElement(ThemeProvider, null, /*#__PURE__*/React.createElement(Datepicker, {
188
229
  type: "single",
@@ -55,8 +55,8 @@ var TagInformative = function TagInformative(_ref3) {
55
55
  };
56
56
 
57
57
  TagInformative.propTypes = {
58
- /** style the tag following the theme (success, informative, attention) */
59
- variant: oneOf(['success', 'informative', 'attention']).isRequired,
58
+ /** style the tag following the theme (neutral, success, informative, attention) */
59
+ variant: oneOf(['neutral', 'success', 'informative', 'attention']),
60
60
  icon: func,
61
61
  children: node.isRequired,
62
62
 
@@ -64,6 +64,7 @@ TagInformative.propTypes = {
64
64
  small: bool
65
65
  };
66
66
  TagInformative.defaultProps = {
67
+ variant: 'neutral',
67
68
  icon: undefined,
68
69
  small: false
69
70
  };
@@ -50,6 +50,8 @@ describe('<Tag />', function () {
50
50
  });
51
51
  it('should match snapshot with variant prop and informative type', function () {
52
52
  var _render5 = render( /*#__PURE__*/React.createElement(ThemeProvider, null, /*#__PURE__*/React.createElement(Tag.Informative, {
53
+ variant: "neutral"
54
+ }, "neutral"), /*#__PURE__*/React.createElement(Tag.Informative, {
53
55
  variant: "success"
54
56
  }, "success"), /*#__PURE__*/React.createElement(Tag.Informative, {
55
57
  variant: "informative"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gympass/yoga",
3
- "version": "7.53.8",
3
+ "version": "7.54.1",
4
4
  "description": "Gympass component library",
5
5
  "main": "./cjs",
6
6
  "sideEffects": false,
@@ -52,7 +52,7 @@
52
52
  "react": ">=16",
53
53
  "styled-components": "^4.4.0"
54
54
  },
55
- "gitHead": "364b71b2503f465e8194514a03e8d6724f77ec42",
55
+ "gitHead": "926e58932991130c8d609193762dff01fe11c2b8",
56
56
  "module": "./esm",
57
57
  "private": false,
58
58
  "react-native": "./cjs/index.native.js"