@superdispatch/dates 0.16.0-alpha.0 → 0.16.0-alpha.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.
@@ -1,96 +0,0 @@
1
- import _objectSpread from "@babel/runtime/helpers/objectSpread2";
2
- import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
3
- var _excluded = ["onDayClick"],
4
- _excluded2 = ["onBlur", "onFocus", "onChange", "renderFooter", "renderQuickSelection", "value", "format", "fallback", "variant", "enableClearable", "disableCloseOnSelect", "CalendarProps"];
5
- import { forwardRef, useMemo, useRef } from 'react';
6
- import { BaseDatePicker } from "../base-date-picker/BaseDatePicker.js";
7
- import { Calendar } from "../calendar/Calendar.js";
8
- import { useDateConfig } from "../date-config/DateConfig.js";
9
- import { stringifyDate, toDatePayload } from "../date-time-utils/DateTimeUtils.js";
10
- import { useFormattedDate } from "../formatted-date/FormattedDate.js";
11
- import { useDateTime } from "../use-date-time/useDateTime.js";
12
- import { jsx as _jsx } from "react/jsx-runtime";
13
- export var DateField = /*#__PURE__*/forwardRef((_ref, ref) => {
14
- var {
15
- onBlur,
16
- onFocus,
17
- onChange,
18
- renderFooter,
19
- renderQuickSelection,
20
- value: valueProp,
21
- format: formatProp,
22
- fallback = '',
23
- variant = 'Date',
24
- enableClearable,
25
- disableCloseOnSelect,
26
- CalendarProps: {
27
- onDayClick: _onDayClick
28
- } = {}
29
- } = _ref,
30
- calendarProps = _objectWithoutProperties(_ref.CalendarProps, _excluded),
31
- textFieldProps = _objectWithoutProperties(_ref, _excluded2);
32
-
33
- var config = useDateConfig({
34
- format: formatProp
35
- });
36
- var apiRef = useRef(null);
37
- var date = useDateTime(valueProp, config);
38
- var displayValue = useFormattedDate(date, _objectSpread({
39
- variant,
40
- fallback
41
- }, config));
42
- var dateString = useMemo(() => stringifyDate(date, config), [date, config]);
43
-
44
- function handleClose() {
45
- var _apiRef$current;
46
-
47
- (_apiRef$current = apiRef.current) === null || _apiRef$current === void 0 ? void 0 : _apiRef$current.close();
48
- }
49
-
50
- function handleChange(nextInput) {
51
- if (onChange) {
52
- onChange(toDatePayload(nextInput, config));
53
- }
54
-
55
- if (!disableCloseOnSelect) {
56
- handleClose();
57
- }
58
- }
59
-
60
- var api = {
61
- config,
62
- dateValue: date,
63
- stringValue: dateString,
64
- close: handleClose,
65
- change: handleChange
66
- };
67
- return /*#__PURE__*/_jsx(BaseDatePicker, _objectSpread(_objectSpread({}, textFieldProps), {}, {
68
- ref: ref,
69
- api: apiRef,
70
- onClose: onBlur,
71
- value: displayValue || fallback,
72
- enableClearable: enableClearable && date.isValid,
73
- onClear: () => {
74
- handleChange(undefined);
75
- },
76
- children: /*#__PURE__*/_jsx(Calendar, _objectSpread(_objectSpread({}, calendarProps), {}, {
77
- initialMonth: date,
78
- footer: renderFooter === null || renderFooter === void 0 ? void 0 : renderFooter(api),
79
- quickSelection: renderQuickSelection === null || renderQuickSelection === void 0 ? void 0 : renderQuickSelection(api),
80
- selectedDays: _ref2 => {
81
- var {
82
- dateValue
83
- } = _ref2;
84
- return date.hasSame(dateValue, 'day');
85
- },
86
- onDayClick: event => {
87
- _onDayClick === null || _onDayClick === void 0 ? void 0 : _onDayClick(event);
88
-
89
- if (!event.disabled) {
90
- handleChange(event.dateValue);
91
- }
92
- }
93
- }))
94
- }));
95
- });
96
- if (process.env.NODE_ENV !== "production") DateField.displayName = "DateField";
@@ -1,204 +0,0 @@
1
- import _objectSpread from "@babel/runtime/helpers/objectSpread2";
2
- import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
3
- var _excluded = ["modifiers", "onDayClick", "onDayMouseEnter"],
4
- _excluded2 = ["onBlur", "onFocus", "onChange", "renderFooter", "renderQuickSelection", "value", "format", "fallback", "enableClearable", "disableCloseOnSelect", "CalendarProps"],
5
- _excluded3 = ["rangeStart", "rangeFinish"];
6
- import { makeStyles } from '@mui/styles';
7
- import { Color } from '@superdispatch/ui';
8
- import { forwardRef, useMemo, useRef, useState } from 'react';
9
- import { BaseDatePicker } from "../base-date-picker/BaseDatePicker.js";
10
- import { Calendar } from "../calendar/Calendar.js";
11
- import { useDateConfig } from "../date-config/DateConfig.js";
12
- import { formatDateRange, parseDateRange, stringifyDateRange, toDateRangePayload } from "../date-time-utils/DateTimeUtils.js";
13
- import { useDateTimeRange } from "../use-date-time-range/useDateTimeRange.js";
14
- import { jsx as _jsx } from "react/jsx-runtime";
15
- var useStyles = /*#__PURE__*/makeStyles(theme => ({
16
- rangeStart: {},
17
- rangeFinish: {},
18
- outside: {},
19
- disabled: {},
20
- selected: {},
21
- day: {
22
- '&$selected:not($outside)': {
23
- '&$rangeStart:before': {
24
- left: theme.spacing(0.5)
25
- },
26
- '&$rangeFinish:before': {
27
- right: theme.spacing(0.5)
28
- },
29
- '&:not($rangeStart):not($rangeFinish)': {
30
- '&:after': {
31
- backgroundColor: Color.Transparent
32
- },
33
- '&$disabled': {
34
- '&:before': {
35
- backgroundColor: Color.Silver100
36
- }
37
- },
38
- '&:not($disabled)': {
39
- color: Color.Blue500,
40
- '&:before': {
41
- backgroundColor: Color.Blue50
42
- }
43
- }
44
- }
45
- }
46
- }
47
- }), {
48
- name: 'SD-DateRangeField'
49
- });
50
- export var DateRangeField = /*#__PURE__*/forwardRef((_ref, ref) => {
51
- var {
52
- onBlur,
53
- onFocus,
54
- onChange,
55
- renderFooter,
56
- renderQuickSelection,
57
- value: valueProp,
58
- format: formatProp,
59
- fallback = '',
60
- enableClearable,
61
- disableCloseOnSelect,
62
- CalendarProps: {
63
- modifiers,
64
- onDayClick: _onDayClick,
65
- onDayMouseEnter: _onDayMouseEnter
66
- } = {}
67
- } = _ref,
68
- calendarProps = _objectWithoutProperties(_ref.CalendarProps, _excluded),
69
- textFieldProps = _objectWithoutProperties(_ref, _excluded2);
70
-
71
- var apiRef = useRef(null);
72
-
73
- var _useStyles = useStyles({}),
74
- {
75
- rangeStart,
76
- rangeFinish
77
- } = _useStyles,
78
- styles = _objectWithoutProperties(_useStyles, _excluded3);
79
-
80
- var config = useDateConfig({
81
- format: formatProp
82
- });
83
- var [startDate, finishDate] = useDateTimeRange(valueProp, config);
84
- var [startDateString, finishDateString] = useMemo(() => stringifyDateRange([startDate, finishDate], config), [config, startDate, finishDate]);
85
- var displayValue = useMemo(() => formatDateRange([startDate, finishDate], {
86
- fallback
87
- }, config), [config, fallback, startDate, finishDate]);
88
- var [hoveredDate, setHoveredDate] = useState();
89
- var [calendarStartDate, calendarFinishDate] = useMemo(() => {
90
- var [nextCalendarStartDate, nextCalendarFinishDate] = parseDateRange([startDate, finishDate || hoveredDate], config);
91
- return [nextCalendarStartDate === null || nextCalendarStartDate === void 0 ? void 0 : nextCalendarStartDate.startOf('day'), nextCalendarFinishDate === null || nextCalendarFinishDate === void 0 ? void 0 : nextCalendarFinishDate.endOf('day')];
92
- }, [config, startDate, finishDate, hoveredDate]);
93
-
94
- function handleClose() {
95
- var _apiRef$current;
96
-
97
- (_apiRef$current = apiRef.current) === null || _apiRef$current === void 0 ? void 0 : _apiRef$current.close();
98
- }
99
-
100
- function handleChange(nextValue) {
101
- var _nextFinishDate;
102
-
103
- var [nextStartDate, nextFinishDate] = parseDateRange(nextValue, config);
104
-
105
- if (onChange) {
106
- if (nextStartDate) {
107
- if (startDate) {
108
- nextStartDate = nextStartDate.set({
109
- hour: startDate.hour,
110
- minute: startDate.minute,
111
- second: startDate.second,
112
- millisecond: startDate.millisecond
113
- });
114
- } else {
115
- nextStartDate = nextStartDate.startOf('day');
116
- }
117
- }
118
-
119
- if (nextFinishDate) {
120
- nextFinishDate = nextFinishDate.endOf('day');
121
- }
122
-
123
- onChange(toDateRangePayload([nextStartDate, nextFinishDate], config));
124
- }
125
-
126
- if (!disableCloseOnSelect && (_nextFinishDate = nextFinishDate) !== null && _nextFinishDate !== void 0 && _nextFinishDate.isValid) {
127
- handleClose();
128
- }
129
- }
130
-
131
- var api = {
132
- config,
133
- close: handleClose,
134
- change: handleChange,
135
- dateValue: [startDate, finishDate],
136
- stringValue: [startDateString, finishDateString]
137
- };
138
- return /*#__PURE__*/_jsx(BaseDatePicker, _objectSpread(_objectSpread({}, textFieldProps), {}, {
139
- ref: ref,
140
- api: apiRef,
141
- value: displayValue || fallback,
142
- enableClearable: enableClearable && !!startDate && !!finishDate,
143
- onClear: () => {
144
- handleChange([undefined, undefined]);
145
- },
146
- onClose: () => {
147
- onBlur === null || onBlur === void 0 ? void 0 : onBlur();
148
- setHoveredDate(undefined);
149
- },
150
- children: /*#__PURE__*/_jsx(Calendar, _objectSpread(_objectSpread({
151
- numberOfMonths: 2
152
- }, calendarProps), {}, {
153
- classes: styles,
154
- initialMonth: startDateString,
155
- modifiers: _objectSpread(_objectSpread({}, modifiers), {}, {
156
- [rangeStart]: _ref2 => {
157
- var {
158
- dateValue
159
- } = _ref2;
160
- return !!(calendarStartDate !== null && calendarStartDate !== void 0 && calendarStartDate.hasSame(dateValue, 'day'));
161
- },
162
- [rangeFinish]: _ref3 => {
163
- var {
164
- dateValue
165
- } = _ref3;
166
- return !!(calendarFinishDate !== null && calendarFinishDate !== void 0 && calendarFinishDate.hasSame(dateValue, 'day'));
167
- }
168
- }),
169
- selectedDays: _ref4 => {
170
- var {
171
- dateValue
172
- } = _ref4;
173
-
174
- if (calendarStartDate) {
175
- if (!calendarFinishDate) {
176
- return calendarStartDate.hasSame(dateValue, 'day');
177
- }
178
-
179
- return calendarStartDate <= dateValue && dateValue <= calendarFinishDate;
180
- }
181
-
182
- return false;
183
- },
184
- footer: renderFooter === null || renderFooter === void 0 ? void 0 : renderFooter(api),
185
- quickSelection: renderQuickSelection === null || renderQuickSelection === void 0 ? void 0 : renderQuickSelection(api),
186
- onDayMouseEnter: event => {
187
- _onDayMouseEnter === null || _onDayMouseEnter === void 0 ? void 0 : _onDayMouseEnter(event);
188
- setHoveredDate(!event.disabled ? event.dateValue.valueOf() : undefined);
189
- },
190
- onDayClick: event => {
191
- _onDayClick === null || _onDayClick === void 0 ? void 0 : _onDayClick(event);
192
-
193
- if (!event.disabled) {
194
- if (startDate && !finishDate) {
195
- handleChange([startDateString, event.stringValue]);
196
- } else {
197
- handleChange([event.stringValue, undefined]);
198
- }
199
- }
200
- }
201
- }))
202
- }));
203
- });
204
- if (process.env.NODE_ENV !== "production") DateRangeField.displayName = "DateRangeField";
@@ -1,238 +0,0 @@
1
- import { DateTime, Settings } from 'luxon';
2
- import { defaultDateConfig } from "../date-config/DateConfig.js"; //
3
- // Config
4
- //
5
-
6
- var DATE_FORMATS = {
7
- DateISO: '',
8
- DateTimeISO: '',
9
- JodaISO: "yyyy-MM-dd'T'HH:mm:ss.SSSZZZ"
10
- };
11
- var DATE_DISPLAY_VARIANTS = {
12
- Date: {
13
- day: '2-digit',
14
- month: 'short',
15
- year: 'numeric'
16
- },
17
- ShortDate: {
18
- day: '2-digit',
19
- month: 'short'
20
- },
21
- Time: {
22
- hour: 'numeric',
23
- minute: 'numeric'
24
- },
25
- DateTime: {
26
- day: '2-digit',
27
- month: 'short',
28
- year: 'numeric',
29
- hour: 'numeric',
30
- minute: 'numeric'
31
- }
32
- }; //
33
- // Date Utils
34
- //
35
-
36
- export function toPrimitiveDateInput(input) {
37
- if (typeof input == 'number' || typeof input == 'string') {
38
- return input;
39
- }
40
-
41
- if (input instanceof Date || input instanceof DateTime) {
42
- return input.valueOf();
43
- }
44
-
45
- return NaN;
46
- }
47
- export function parseDate(input) {
48
- var {
49
- format
50
- } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : defaultDateConfig;
51
-
52
- if (input instanceof DateTime) {
53
- var {
54
- defaultZone
55
- } = Settings;
56
-
57
- if (!defaultZone.equals(input.zone)) {
58
- return input.setZone(defaultZone);
59
- }
60
-
61
- return input;
62
- }
63
-
64
- if (input instanceof Date) {
65
- return DateTime.fromJSDate(input);
66
- }
67
-
68
- if (typeof input === 'number') {
69
- return DateTime.fromMillis(input);
70
- }
71
-
72
- if (typeof input == 'string') {
73
- switch (format) {
74
- case 'DateISO':
75
- case 'DateTimeISO':
76
- return DateTime.fromISO(input);
77
-
78
- default:
79
- return DateTime.fromFormat(input, DATE_FORMATS[format]);
80
- }
81
- }
82
-
83
- return DateTime.invalid('invalid input');
84
- }
85
- export function stringifyDate(input) {
86
- var config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : defaultDateConfig;
87
- var date = parseDate(input, config);
88
-
89
- if (date.isValid) {
90
- var {
91
- format
92
- } = config;
93
-
94
- switch (format) {
95
- case 'DateISO':
96
- return date.toISODate();
97
-
98
- case 'DateTimeISO':
99
- return date.toISO();
100
-
101
- default:
102
- return date.toFormat(DATE_FORMATS[format]);
103
- }
104
- }
105
-
106
- return null;
107
- }
108
- export function formatDate(input, _ref) {
109
- var {
110
- variant,
111
- fallback = 'Invalid Date'
112
- } = _ref;
113
- var config = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : defaultDateConfig;
114
- var date = parseDate(input, config);
115
-
116
- if (!date.isValid) {
117
- return fallback;
118
- }
119
-
120
- return date.toLocaleString(DATE_DISPLAY_VARIANTS[variant]);
121
- }
122
-
123
- function formatUnit(unit) {
124
- switch (unit) {
125
- case 'months':
126
- return 'mo';
127
-
128
- default:
129
- return unit.charAt(0);
130
- }
131
- }
132
-
133
- export function formatRelativeTime(input) {
134
- var {
135
- round = true,
136
- unit: unitOption,
137
- base: baseOption,
138
- padding: paddingOption,
139
- fallback = 'Invalid Date'
140
- } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
141
- var config = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : defaultDateConfig;
142
- var base = baseOption == null ? DateTime.now() : parseDate(baseOption, config);
143
- var date = parseDate(input, config);
144
- var padding = paddingOption ? date < base ? -paddingOption : paddingOption : 0;
145
-
146
- function format(value, unit) {
147
- var isPast = Object.is(value, -0) || value < 0;
148
- var diff = Math.abs(!round ? value : Math.trunc(value));
149
- var formattedUnit = formatUnit(unit);
150
- return isPast ? "".concat(diff).concat(formattedUnit, " ago") : "in ".concat(diff).concat(formattedUnit);
151
- }
152
-
153
- function differ(unit) {
154
- return date.plus(padding).diff(base, unit).get(unit);
155
- }
156
-
157
- if (date.isValid && base.isValid) {
158
- var units = ['years', 'months', 'days', 'hours', 'minutes', 'seconds'];
159
-
160
- if (unitOption) {
161
- return format(differ(unitOption), unitOption);
162
- }
163
-
164
- for (var unit of units) {
165
- var diff = differ(unit);
166
-
167
- if (Math.abs(diff) >= 1) {
168
- return format(diff, unit);
169
- }
170
- }
171
-
172
- return format(0, 'seconds');
173
- }
174
-
175
- return fallback;
176
- }
177
- export function toDatePayload(input) {
178
- var config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : defaultDateConfig;
179
- var dateValue = parseDate(input, config);
180
- return {
181
- config,
182
- dateValue,
183
- stringValue: stringifyDate(dateValue, config)
184
- };
185
- } //
186
- // Date Range Utils
187
- //
188
-
189
- export function toPrimitiveDateRangeInput(input) {
190
- if (!Array.isArray(input)) {
191
- return [undefined, undefined];
192
- }
193
-
194
- return [toPrimitiveDateInput(input[0]), toPrimitiveDateInput(input[1])];
195
- }
196
- export function parseDateRange(input, config) {
197
- var start = null;
198
- var finish = null;
199
-
200
- if (Array.isArray(input)) {
201
- [start = null, finish = null] = input.map(value => parseDate(value, config)).filter(date => date.isValid).sort((a, b) => a.valueOf() - b.valueOf());
202
- }
203
-
204
- return [start, finish];
205
- }
206
- export function stringifyDateRange(input, config) {
207
- var [start, finish] = parseDateRange(input, config);
208
- return [stringifyDate(start, config), stringifyDate(finish, config)];
209
- }
210
- export function formatDateRange(input, _ref2) {
211
- var {
212
- fallback = 'Invalid Date Range'
213
- } = _ref2;
214
- var config = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : defaultDateConfig;
215
- var [start, finish] = parseDateRange(input, config);
216
-
217
- if (!start) {
218
- return fallback;
219
- }
220
-
221
- var startVariant = !(finish !== null && finish !== void 0 && finish.hasSame(start, 'year')) ? 'Date' : 'ShortDate';
222
- var startText = formatDate(start, {
223
- variant: startVariant
224
- }, config);
225
- var finishText = !finish ? '…' : formatDate(finish, {
226
- variant: 'Date'
227
- });
228
- return "".concat(startText, " - ").concat(finishText);
229
- }
230
- export function toDateRangePayload(input) {
231
- var config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : defaultDateConfig;
232
- var dateValue = parseDateRange(input, config);
233
- return {
234
- config,
235
- dateValue,
236
- stringValue: stringifyDateRange(dateValue, config)
237
- };
238
- }