@datarobot/design-system 29.7.4 → 29.7.6

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 (35) hide show
  1. package/cjs/code-editor/code-editor.d.ts +0 -16
  2. package/cjs/code-editor/code-editor.js +1 -15
  3. package/cjs/datetime-range-picker/datetime-range-picker-panel.d.ts +6 -4
  4. package/cjs/datetime-range-picker/datetime-range-picker-panel.js +21 -9
  5. package/cjs/datetime-range-picker/datetime-range-picker.d.ts +4 -3
  6. package/cjs/datetime-range-picker/datetime-range-picker.js +2 -0
  7. package/cjs/datetime-range-picker/helpers.d.ts +29 -0
  8. package/cjs/datetime-range-picker/helpers.js +123 -0
  9. package/esm/code-editor/code-editor.d.ts +0 -16
  10. package/esm/code-editor/code-editor.js +0 -14
  11. package/esm/datetime-range-picker/datetime-range-picker-panel.d.ts +6 -4
  12. package/esm/datetime-range-picker/datetime-range-picker-panel.js +22 -10
  13. package/esm/datetime-range-picker/datetime-range-picker.d.ts +4 -3
  14. package/esm/datetime-range-picker/datetime-range-picker.js +2 -0
  15. package/esm/datetime-range-picker/helpers.d.ts +29 -0
  16. package/esm/datetime-range-picker/helpers.js +120 -0
  17. package/js/139/139.min.js +1 -1
  18. package/js/244/244.min.js +1 -1
  19. package/js/633/633.min.js +1 -1
  20. package/js/784/784.min.js +1 -1
  21. package/js/86/86.min.js +1 -1
  22. package/js/bundle/bundle.js +1844 -75
  23. package/js/bundle/bundle.min.js +1 -1
  24. package/js/bundle/index.d.ts +39 -24
  25. package/js/src_locales_es_419_translation_json/src_locales_es_419_translation_json.js +1 -1
  26. package/js/src_locales_fr_translation_json/src_locales_fr_translation_json.js +1 -1
  27. package/js/src_locales_ja_translation_json/src_locales_ja_translation_json.js +1 -1
  28. package/js/src_locales_ko_translation_json/src_locales_ko_translation_json.js +1 -1
  29. package/js/src_locales_pt_BR_translation_json/src_locales_pt_BR_translation_json.js +1 -1
  30. package/locales/es_419/translation.json +8 -4
  31. package/locales/fr/translation.json +8 -4
  32. package/locales/ja/translation.json +6 -4
  33. package/locales/ko/translation.json +8 -4
  34. package/locales/pt_BR/translation.json +8 -4
  35. package/package.json +1 -1
@@ -1,5 +1,4 @@
1
1
  import { ReactElement } from 'react';
2
- import PropTypes from 'prop-types';
3
2
  import { ValueOf } from '../types';
4
3
  import 'codemirror/mode/sql/sql';
5
4
  import 'codemirror/mode/javascript/javascript';
@@ -57,21 +56,6 @@ export type CodeEditorOptions = {
57
56
  readOnly?: string | boolean;
58
57
  theme?: CodeEditorTheme;
59
58
  };
60
- export declare const CodeEditorOptionsShape: PropTypes.Requireable<PropTypes.InferProps<{
61
- lineWrapping: PropTypes.Requireable<boolean>;
62
- tabSize: PropTypes.Requireable<number>;
63
- value: PropTypes.Requireable<string>;
64
- mode: PropTypes.Requireable<"r" | "python" | "text/plain" | "text/x-sparksql" | "javascript" | "shell" | "htmlmixed" | "clike" | "yaml" | "xml" | {
65
- name: "javascript";
66
- json: boolean;
67
- }>;
68
- lineNumbers: PropTypes.Requireable<boolean>;
69
- indentWithTabs: PropTypes.Requireable<boolean>;
70
- smartIndent: PropTypes.Requireable<boolean>;
71
- matchBrackets: PropTypes.Requireable<boolean>;
72
- readOnly: PropTypes.Requireable<NonNullable<string | boolean | null | undefined>>;
73
- theme: PropTypes.Requireable<"default" | "dracula">;
74
- }>>;
75
59
  export type CodeEditorControls = {
76
60
  placement?: CORNER_PLACEMENTS_TYPES;
77
61
  element?: ReactElement;
@@ -3,9 +3,8 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.JSON_MODE = exports.CodeEditorOptionsShape = exports.CodeEditor = exports.CORNER_PLACEMENTS_TYPES = exports.CORNER_PLACEMENTS = exports.CODE_EDITOR_THEMES = exports.CODE_EDITOR_MODES = void 0;
6
+ exports.JSON_MODE = exports.CodeEditor = exports.CORNER_PLACEMENTS_TYPES = exports.CORNER_PLACEMENTS = exports.CODE_EDITOR_THEMES = exports.CODE_EDITOR_MODES = void 0;
7
7
  var _react = _interopRequireDefault(require("react"));
8
- var _propTypes = _interopRequireDefault(require("prop-types"));
9
8
  var _classnames = _interopRequireDefault(require("classnames"));
10
9
  var _hintWrapper = _interopRequireDefault(require("./utils/hint-wrapper"));
11
10
  var _searchWrapper = require("./utils/search-wrapper");
@@ -65,19 +64,6 @@ const DefaultOptions = {
65
64
  matchBrackets: true,
66
65
  theme: CODE_EDITOR_THEMES.DARK
67
66
  };
68
- // Keeping this for backwards compatiblity
69
- const CodeEditorOptionsShape = exports.CodeEditorOptionsShape = _propTypes.default.shape({
70
- lineWrapping: _propTypes.default.bool,
71
- tabSize: _propTypes.default.number,
72
- value: _propTypes.default.string,
73
- mode: _propTypes.default.oneOf([...Object.values(CODE_EDITOR_MODES), JSON_MODE]),
74
- lineNumbers: _propTypes.default.bool,
75
- indentWithTabs: _propTypes.default.bool,
76
- smartIndent: _propTypes.default.bool,
77
- matchBrackets: _propTypes.default.bool,
78
- readOnly: _propTypes.default.oneOfType([_propTypes.default.bool, _propTypes.default.string]),
79
- theme: _propTypes.default.oneOf(Object.values(CODE_EDITOR_THEMES))
80
- });
81
67
 
82
68
  // We need this to ignore an error when defaultProps are defined but the linters throws an error
83
69
 
@@ -36,8 +36,9 @@ type ValidateOnClickProps = {
36
36
  dateTimeFormat: string;
37
37
  minStart?: Moment;
38
38
  maxEnd?: Moment;
39
+ sameDateError?: boolean;
39
40
  };
40
- export type ValidateOnClick = ({ start, end, viewMode, dateTimeFormat, minStart, maxEnd, }: ValidateOnClickProps) => {
41
+ export type ValidateOnClick = ({ start, end, viewMode, dateTimeFormat, minStart, maxEnd, sameDateError, }: ValidateOnClickProps) => {
41
42
  startErrors: DateRangeErrors;
42
43
  endErrors: DateRangeErrors;
43
44
  };
@@ -53,16 +54,17 @@ export type DateRangePickerPanelProps = {
53
54
  initialTargetInput?: DateRangeInputType;
54
55
  maxEnd?: Moment;
55
56
  minStart?: Moment;
57
+ sameDateError?: boolean;
56
58
  onSubmit: (start: Moment, end: Moment) => void;
57
59
  onDismiss: () => void;
58
60
  resetText?: string;
59
61
  timeFormat: string | boolean;
60
62
  utcSuffix?: string;
61
- validateOnClick: ValidateOnClick;
62
- validateOnChange: ValidateOnChange;
63
+ validateOnClick?: ValidateOnClick;
64
+ validateOnChange?: ValidateOnChange;
63
65
  dateStartInputAriaLabel: string;
64
66
  dateEndInputAriaLabel: string;
65
67
  };
66
68
  /** Represents the panel used to select two datetimes that make up a range. */
67
- declare function DateRangePickerPanel({ buttonText, cancelButtonText, dateFormat, defaultEnd, defaultStart, initialDirection, initialViewMode, initialTargetInput, maxEnd, minStart, onSubmit, onDismiss, resetText, timeFormat, utcSuffix, validateOnClick, validateOnChange, dateStartInputAriaLabel, dateEndInputAriaLabel, }: DateRangePickerPanelProps): import("react/jsx-runtime").JSX.Element;
69
+ declare function DateRangePickerPanel({ buttonText, cancelButtonText, dateFormat, defaultEnd, defaultStart, initialDirection, initialViewMode, initialTargetInput, maxEnd, minStart, sameDateError, onSubmit, onDismiss, resetText, timeFormat, utcSuffix, validateOnClick: propValidateOnClick, validateOnChange: propValidateOnChange, dateStartInputAriaLabel, dateEndInputAriaLabel, }: DateRangePickerPanelProps): import("react/jsx-runtime").JSX.Element;
68
70
  export default DateRangePickerPanel;
@@ -91,16 +91,21 @@ function DateRangePickerPanel({
91
91
  initialTargetInput,
92
92
  maxEnd,
93
93
  minStart,
94
+ sameDateError,
94
95
  onSubmit,
95
96
  onDismiss,
96
97
  resetText,
97
98
  timeFormat,
98
99
  utcSuffix,
99
- validateOnClick,
100
- validateOnChange,
100
+ validateOnClick: propValidateOnClick,
101
+ validateOnChange: propValidateOnChange,
101
102
  dateStartInputAriaLabel,
102
103
  dateEndInputAriaLabel
103
104
  }) {
105
+ const defaultValidateOnClick = (0, _helpers.useValidateOnClick)();
106
+ const defaultValidateOnChange = (0, _helpers.useGetDateTimeValidityError)();
107
+ const validateOnClick = propValidateOnClick || defaultValidateOnClick;
108
+ const validateOnChange = propValidateOnChange || defaultValidateOnChange;
104
109
  const dateTimeFormat = (0, _helpers.getDateTimeFormat)(dateFormat, timeFormat);
105
110
 
106
111
  // Developer-provided datetimes might not always follow the exact date and time format they want to use.
@@ -164,7 +169,8 @@ function DateRangePickerPanel({
164
169
  viewMode: initialViewMode,
165
170
  dateTimeFormat,
166
171
  minStart,
167
- maxEnd
172
+ maxEnd,
173
+ sameDateError
168
174
  })
169
175
  });
170
176
  }
@@ -184,7 +190,8 @@ function DateRangePickerPanel({
184
190
  viewMode: initialViewMode,
185
191
  dateTimeFormat,
186
192
  minStart,
187
- maxEnd
193
+ maxEnd,
194
+ sameDateError
188
195
  })
189
196
  });
190
197
  }
@@ -206,7 +213,8 @@ function DateRangePickerPanel({
206
213
  viewMode: initialViewMode,
207
214
  dateTimeFormat,
208
215
  minStart,
209
- maxEnd
216
+ maxEnd,
217
+ sameDateError
210
218
  })
211
219
  });
212
220
  }
@@ -352,7 +360,8 @@ function DateRangePickerPanel({
352
360
  viewMode: initialViewMode,
353
361
  dateTimeFormat,
354
362
  minStart,
355
- maxEnd
363
+ maxEnd,
364
+ sameDateError
356
365
  })
357
366
  });
358
367
  }
@@ -365,7 +374,8 @@ function DateRangePickerPanel({
365
374
  viewMode: initialViewMode,
366
375
  dateTimeFormat,
367
376
  minStart,
368
- maxEnd
377
+ maxEnd,
378
+ sameDateError
369
379
  })
370
380
  });
371
381
  }
@@ -392,7 +402,8 @@ function DateRangePickerPanel({
392
402
  viewMode: initialViewMode,
393
403
  dateTimeFormat,
394
404
  minStart,
395
- maxEnd
405
+ maxEnd,
406
+ sameDateError
396
407
  })
397
408
  });
398
409
  }
@@ -405,7 +416,8 @@ function DateRangePickerPanel({
405
416
  viewMode: initialViewMode,
406
417
  dateTimeFormat,
407
418
  minStart,
408
- maxEnd
419
+ maxEnd,
420
+ sameDateError
409
421
  })
410
422
  });
411
423
  }
@@ -23,12 +23,13 @@ export declare const INITIAL_DIRECTION: {
23
23
  export type InitialDirection = ValueOf<typeof INITIAL_DIRECTION>;
24
24
  export type DateRangePickerProps = {
25
25
  onUpdate: (updatedStart: Moment, updatedEnd: Moment) => void;
26
- validateOnClick: ValidateOnClick;
27
- validateOnChange: ValidateOnChange;
26
+ validateOnClick?: ValidateOnClick;
27
+ validateOnChange?: ValidateOnChange;
28
28
  start: Moment;
29
29
  end: Moment;
30
30
  minStart?: Moment;
31
31
  maxEnd?: Moment;
32
+ sameDateError?: boolean;
32
33
  labelFormat?: string;
33
34
  anchorType?: AnchorType;
34
35
  isDisabled?: boolean;
@@ -50,5 +51,5 @@ export type DateRangePickerProps = {
50
51
  * @midnight-gray-supported
51
52
  * @alpine-light-supported
52
53
  * */
53
- declare function DateRangePicker({ onUpdate, validateOnChange, validateOnClick, start, end, minStart, maxEnd, labelFormat, anchorType, buttonText, cancelButtonText, resetText, dateFormat, timeFormat, initialDirection, initialViewMode, placement, showTimeZoneSuffix, isDisabled, utcSuffix, dateStartInputAriaLabel, dateEndInputAriaLabel, }: DateRangePickerProps): import("react/jsx-runtime").JSX.Element;
54
+ declare function DateRangePicker({ onUpdate, validateOnChange, validateOnClick, start, end, minStart, maxEnd, sameDateError, labelFormat, anchorType, buttonText, cancelButtonText, resetText, dateFormat, timeFormat, initialDirection, initialViewMode, placement, showTimeZoneSuffix, isDisabled, utcSuffix, dateStartInputAriaLabel, dateEndInputAriaLabel, }: DateRangePickerProps): import("react/jsx-runtime").JSX.Element;
54
55
  export default DateRangePicker;
@@ -41,6 +41,7 @@ function DateRangePicker({
41
41
  end,
42
42
  minStart,
43
43
  maxEnd,
44
+ sameDateError,
44
45
  labelFormat,
45
46
  anchorType = ANCHOR_TYPES.BUTTON,
46
47
  buttonText,
@@ -120,6 +121,7 @@ function DateRangePicker({
120
121
  defaultEnd: end,
121
122
  minStart: minStart,
122
123
  maxEnd: maxEnd,
124
+ sameDateError: sameDateError,
123
125
  dateFormat: dateFormat,
124
126
  timeFormat: timeFormat,
125
127
  initialViewMode: initialViewMode,
@@ -2,6 +2,35 @@ import React, { RefObject } from 'react';
2
2
  import moment, { MomentInput, Moment, unitOfTime } from 'moment';
3
3
  import Datetime from 'react-datetime';
4
4
  import { InitialDirection } from './datetime-range-picker';
5
+ export declare function useValidateOnClick(): ({ start, end, minStart, maxEnd, viewMode, dateTimeFormat, sameDateError, }: {
6
+ start?: moment.Moment | null | undefined;
7
+ end?: moment.Moment | null | undefined;
8
+ viewMode: string;
9
+ dateTimeFormat: string;
10
+ minStart?: moment.Moment | undefined;
11
+ maxEnd?: moment.Moment | undefined;
12
+ sameDateError?: boolean | undefined;
13
+ }) => {
14
+ startErrors: {
15
+ START_BEFORE_MIN?: string | undefined;
16
+ START_AFTER_MAX?: string | undefined;
17
+ INVALID_START_DATE?: string | undefined;
18
+ START_END_SAME?: string | undefined;
19
+ };
20
+ endErrors: {
21
+ INVALID_END_DATE?: string | undefined;
22
+ END_AFTER_MIN?: string | undefined;
23
+ END_AFTER_MAX?: string | undefined;
24
+ };
25
+ };
26
+ /** Checks whether a string can be strictly parsed as a moment object following a provided datetime format
27
+ *
28
+ * @param {string} proposedDateTime
29
+ * @param {string} dateTimeFormat
30
+ * @returns {boolean}
31
+ */
32
+ export declare function isValidDateTime(proposedDateTime: string, dateTimeFormat: string): boolean;
33
+ export declare function useGetDateTimeValidityError(): (dateTime: string, dateTimeFormat: string) => string | undefined;
5
34
  export interface StringToMomentParams {
6
35
  dateTimeFormat?: string;
7
36
  strictParse?: boolean;
@@ -13,17 +13,140 @@ exports.getValidityFromErrors = getValidityFromErrors;
13
13
  exports.isMonthRelatedToTimePicker = isMonthRelatedToTimePicker;
14
14
  exports.isNavigationAvailableForMonthsView = isNavigationAvailableForMonthsView;
15
15
  exports.isNavigationAvailableForYearsView = isNavigationAvailableForYearsView;
16
+ exports.isValidDateTime = isValidDateTime;
16
17
  exports.truncateDateTimeToFormat = truncateDateTimeToFormat;
18
+ exports.useGetDateTimeValidityError = useGetDateTimeValidityError;
19
+ exports.useValidateOnClick = useValidateOnClick;
17
20
  var _react = _interopRequireDefault(require("react"));
18
21
  var _moment = _interopRequireDefault(require("moment"));
19
22
  var _isEmpty = _interopRequireDefault(require("lodash-es/isEmpty"));
23
+ var _omit = _interopRequireDefault(require("lodash-es/omit"));
20
24
  var _formField = require("../form-field");
21
25
  var _message = require("../message");
22
26
  var _button = require("../button");
23
27
  var _datetimeRangePicker = require("./datetime-range-picker");
28
+ var _useTranslation = require("../hooks/use-translation");
29
+ var _datetimeRangePickerPanel = require("./datetime-range-picker-panel");
24
30
  var _jsxRuntime = require("react/jsx-runtime");
25
31
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
26
32
  const DEFAULT_DATETIME_FORMAT = 'YYYY-MM-DDTHH:mm:ss.SSSSSSZ';
33
+ const VALIDATION_ENTITY = {
34
+ days: {
35
+ start: 'Start Date',
36
+ end: 'End Date'
37
+ },
38
+ months: {
39
+ start: 'Start Month',
40
+ end: 'End Month'
41
+ }
42
+ };
43
+ function useValidateOnClick() {
44
+ const {
45
+ t
46
+ } = (0, _useTranslation.useTranslation)();
47
+ return function validateOnClick({
48
+ start,
49
+ end,
50
+ minStart,
51
+ maxEnd,
52
+ viewMode,
53
+ dateTimeFormat,
54
+ sameDateError
55
+ }) {
56
+ const [minStartTrimmed, maxEndTrimmed] = [minStart, maxEnd].map(datetime => datetime ? truncateDateTimeToFormat(datetime, dateTimeFormat) : null);
57
+ const startErrors = {};
58
+ let endErrors = {};
59
+ if (minStartTrimmed && start?.isBefore(minStartTrimmed)) {
60
+ startErrors[_datetimeRangePickerPanel.DATE_RANGE_ERROR_TYPES.START_BEFORE_MIN] = t('{{fieldName}} cannot be before {{date}}.', {
61
+ fieldName: VALIDATION_ENTITY[viewMode].start,
62
+ date: minStartTrimmed.format(dateTimeFormat)
63
+ });
64
+ }
65
+ if (maxEndTrimmed && start?.isAfter(maxEndTrimmed)) {
66
+ startErrors[_datetimeRangePickerPanel.DATE_RANGE_ERROR_TYPES.START_AFTER_MAX] = t('{{fieldName}} cannot be after {{date}}.', {
67
+ fieldName: VALIDATION_ENTITY[viewMode].start,
68
+ date: maxEndTrimmed.format(dateTimeFormat)
69
+ });
70
+ }
71
+ if (maxEndTrimmed && end?.isAfter(maxEndTrimmed)) {
72
+ endErrors[_datetimeRangePickerPanel.DATE_RANGE_ERROR_TYPES.END_AFTER_MAX] = t('{{fieldName}} cannot be after {{date}}.', {
73
+ fieldName: VALIDATION_ENTITY[viewMode].end,
74
+ date: maxEndTrimmed.format(dateTimeFormat)
75
+ });
76
+ }
77
+ if (minStartTrimmed && end?.isBefore(minStartTrimmed)) {
78
+ endErrors[_datetimeRangePickerPanel.DATE_RANGE_ERROR_TYPES.END_AFTER_MIN] = t('{{fieldName}} cannot be before {{date}}.', {
79
+ fieldName: VALIDATION_ENTITY[viewMode].end,
80
+ date: minStartTrimmed.format(dateTimeFormat)
81
+ });
82
+ }
83
+ if (!start?.isValid()) {
84
+ startErrors[_datetimeRangePickerPanel.DATE_RANGE_ERROR_TYPES.INVALID_START_DATE] = t('You need to set {{fieldName}}', {
85
+ fieldName: VALIDATION_ENTITY[viewMode].start
86
+ });
87
+ }
88
+ if (!end?.isValid()) {
89
+ endErrors[_datetimeRangePickerPanel.DATE_RANGE_ERROR_TYPES.INVALID_END_DATE] = t('You need to set {{fieldName}}', {
90
+ fieldName: VALIDATION_ENTITY[viewMode].end
91
+ });
92
+ }
93
+ if (start && !end?.isValid()) {
94
+ endErrors[_datetimeRangePickerPanel.DATE_RANGE_ERROR_TYPES.INVALID_END_DATE] = t('You need to set {{fieldName}}', {
95
+ fieldName: VALIDATION_ENTITY[viewMode].end
96
+ });
97
+ }
98
+ if (start && end && end.isValid()) {
99
+ endErrors = (0, _omit.default)(endErrors, [_datetimeRangePickerPanel.DATE_RANGE_ERROR_TYPES.INVALID_END_DATE]);
100
+ }
101
+ if (sameDateError && start?.isSame(end)) {
102
+ startErrors[_datetimeRangePickerPanel.DATE_RANGE_ERROR_TYPES.START_END_SAME] = t('{{startField}} and {{endField}} cannot be the same', {
103
+ startField: VALIDATION_ENTITY[viewMode].start,
104
+ endField: VALIDATION_ENTITY[viewMode].end
105
+ });
106
+ }
107
+ return {
108
+ startErrors,
109
+ endErrors
110
+ };
111
+ };
112
+ }
113
+
114
+ /** Checks whether a string can be strictly parsed as a moment object following a provided datetime format
115
+ *
116
+ * @param {string} proposedDateTime
117
+ * @param {string} dateTimeFormat
118
+ * @returns {boolean}
119
+ */
120
+ function isValidDateTime(proposedDateTime, dateTimeFormat) {
121
+ try {
122
+ convertStringToMoment(proposedDateTime, {
123
+ dateTimeFormat
124
+ })?.isValid();
125
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
126
+ } catch (err) {
127
+ return false;
128
+ }
129
+ return true;
130
+ }
131
+ function useGetDateTimeValidityError() {
132
+ const {
133
+ t
134
+ } = (0, _useTranslation.useTranslation)();
135
+ return function getDateTimeValidityError(dateTime, dateTimeFormat) {
136
+ if (_moment.default.isMoment(dateTime)) {
137
+ return;
138
+ }
139
+ if (typeof dateTime === 'string') {
140
+ if (isValidDateTime(dateTime, dateTimeFormat)) {
141
+ return;
142
+ }
143
+ return t('Must follow {{dateTimeFormat}} format', {
144
+ dateTimeFormat
145
+ });
146
+ }
147
+ return t('Expected a datetime');
148
+ };
149
+ }
27
150
  function getValidityFromErrors(errorMapping) {
28
151
  let validityValues;
29
152
  if ((0, _isEmpty.default)(errorMapping)) {
@@ -1,5 +1,4 @@
1
1
  import { ReactElement } from 'react';
2
- import PropTypes from 'prop-types';
3
2
  import { ValueOf } from '../types';
4
3
  import 'codemirror/mode/sql/sql';
5
4
  import 'codemirror/mode/javascript/javascript';
@@ -57,21 +56,6 @@ export type CodeEditorOptions = {
57
56
  readOnly?: string | boolean;
58
57
  theme?: CodeEditorTheme;
59
58
  };
60
- export declare const CodeEditorOptionsShape: PropTypes.Requireable<PropTypes.InferProps<{
61
- lineWrapping: PropTypes.Requireable<boolean>;
62
- tabSize: PropTypes.Requireable<number>;
63
- value: PropTypes.Requireable<string>;
64
- mode: PropTypes.Requireable<"r" | "python" | "text/plain" | "text/x-sparksql" | "javascript" | "shell" | "htmlmixed" | "clike" | "yaml" | "xml" | {
65
- name: "javascript";
66
- json: boolean;
67
- }>;
68
- lineNumbers: PropTypes.Requireable<boolean>;
69
- indentWithTabs: PropTypes.Requireable<boolean>;
70
- smartIndent: PropTypes.Requireable<boolean>;
71
- matchBrackets: PropTypes.Requireable<boolean>;
72
- readOnly: PropTypes.Requireable<NonNullable<string | boolean | null | undefined>>;
73
- theme: PropTypes.Requireable<"default" | "dracula">;
74
- }>>;
75
59
  export type CodeEditorControls = {
76
60
  placement?: CORNER_PLACEMENTS_TYPES;
77
61
  element?: ReactElement;
@@ -1,5 +1,4 @@
1
1
  import React from 'react';
2
- import PropTypes from 'prop-types';
3
2
  import classnames from 'classnames';
4
3
  import InjectCombinedHint from './utils/hint-wrapper';
5
4
  import { InjectSearch } from './utils/search-wrapper';
@@ -57,19 +56,6 @@ const DefaultOptions = {
57
56
  matchBrackets: true,
58
57
  theme: CODE_EDITOR_THEMES.DARK
59
58
  };
60
- // Keeping this for backwards compatiblity
61
- export const CodeEditorOptionsShape = PropTypes.shape({
62
- lineWrapping: PropTypes.bool,
63
- tabSize: PropTypes.number,
64
- value: PropTypes.string,
65
- mode: PropTypes.oneOf([...Object.values(CODE_EDITOR_MODES), JSON_MODE]),
66
- lineNumbers: PropTypes.bool,
67
- indentWithTabs: PropTypes.bool,
68
- smartIndent: PropTypes.bool,
69
- matchBrackets: PropTypes.bool,
70
- readOnly: PropTypes.oneOfType([PropTypes.bool, PropTypes.string]),
71
- theme: PropTypes.oneOf(Object.values(CODE_EDITOR_THEMES))
72
- });
73
59
 
74
60
  // We need this to ignore an error when defaultProps are defined but the linters throws an error
75
61
 
@@ -36,8 +36,9 @@ type ValidateOnClickProps = {
36
36
  dateTimeFormat: string;
37
37
  minStart?: Moment;
38
38
  maxEnd?: Moment;
39
+ sameDateError?: boolean;
39
40
  };
40
- export type ValidateOnClick = ({ start, end, viewMode, dateTimeFormat, minStart, maxEnd, }: ValidateOnClickProps) => {
41
+ export type ValidateOnClick = ({ start, end, viewMode, dateTimeFormat, minStart, maxEnd, sameDateError, }: ValidateOnClickProps) => {
41
42
  startErrors: DateRangeErrors;
42
43
  endErrors: DateRangeErrors;
43
44
  };
@@ -53,16 +54,17 @@ export type DateRangePickerPanelProps = {
53
54
  initialTargetInput?: DateRangeInputType;
54
55
  maxEnd?: Moment;
55
56
  minStart?: Moment;
57
+ sameDateError?: boolean;
56
58
  onSubmit: (start: Moment, end: Moment) => void;
57
59
  onDismiss: () => void;
58
60
  resetText?: string;
59
61
  timeFormat: string | boolean;
60
62
  utcSuffix?: string;
61
- validateOnClick: ValidateOnClick;
62
- validateOnChange: ValidateOnChange;
63
+ validateOnClick?: ValidateOnClick;
64
+ validateOnChange?: ValidateOnChange;
63
65
  dateStartInputAriaLabel: string;
64
66
  dateEndInputAriaLabel: string;
65
67
  };
66
68
  /** Represents the panel used to select two datetimes that make up a range. */
67
- declare function DateRangePickerPanel({ buttonText, cancelButtonText, dateFormat, defaultEnd, defaultStart, initialDirection, initialViewMode, initialTargetInput, maxEnd, minStart, onSubmit, onDismiss, resetText, timeFormat, utcSuffix, validateOnClick, validateOnChange, dateStartInputAriaLabel, dateEndInputAriaLabel, }: DateRangePickerPanelProps): import("react/jsx-runtime").JSX.Element;
69
+ declare function DateRangePickerPanel({ buttonText, cancelButtonText, dateFormat, defaultEnd, defaultStart, initialDirection, initialViewMode, initialTargetInput, maxEnd, minStart, sameDateError, onSubmit, onDismiss, resetText, timeFormat, utcSuffix, validateOnClick: propValidateOnClick, validateOnChange: propValidateOnChange, dateStartInputAriaLabel, dateEndInputAriaLabel, }: DateRangePickerPanelProps): import("react/jsx-runtime").JSX.Element;
68
70
  export default DateRangePickerPanel;
@@ -7,7 +7,7 @@ import { ValidityMessages } from '../form-field';
7
7
  import DateRangeSingleDatePicker from './date-range-single-date-picker';
8
8
  import { VIEW_MODE_TYPE } from './datetime-range-picker';
9
9
  import DateRangeSingleDatePickerInput from './date-range-single-date-picker-input';
10
- import { getValidityFromErrors, customizeCalendarView, customizeRenderCalendarView, isMonthRelatedToTimePicker, isNavigationAvailableForMonthsView, isNavigationAvailableForYearsView, getLeftCalendarInitialView, getRightCalendarInitialView, truncateDateTimeToFormat, convertStringToMoment, getDateTimeFormat } from './helpers';
10
+ import { getValidityFromErrors, customizeCalendarView, customizeRenderCalendarView, isMonthRelatedToTimePicker, isNavigationAvailableForMonthsView, isNavigationAvailableForYearsView, getLeftCalendarInitialView, getRightCalendarInitialView, truncateDateTimeToFormat, convertStringToMoment, getDateTimeFormat, useValidateOnClick, useGetDateTimeValidityError } from './helpers';
11
11
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
12
12
  export let DATE_RANGE_ERROR_TYPES = /*#__PURE__*/function (DATE_RANGE_ERROR_TYPES) {
13
13
  DATE_RANGE_ERROR_TYPES["INVALID_DATETIME"] = "INVALID_DATETIME";
@@ -83,16 +83,21 @@ function DateRangePickerPanel({
83
83
  initialTargetInput,
84
84
  maxEnd,
85
85
  minStart,
86
+ sameDateError,
86
87
  onSubmit,
87
88
  onDismiss,
88
89
  resetText,
89
90
  timeFormat,
90
91
  utcSuffix,
91
- validateOnClick,
92
- validateOnChange,
92
+ validateOnClick: propValidateOnClick,
93
+ validateOnChange: propValidateOnChange,
93
94
  dateStartInputAriaLabel,
94
95
  dateEndInputAriaLabel
95
96
  }) {
97
+ const defaultValidateOnClick = useValidateOnClick();
98
+ const defaultValidateOnChange = useGetDateTimeValidityError();
99
+ const validateOnClick = propValidateOnClick || defaultValidateOnClick;
100
+ const validateOnChange = propValidateOnChange || defaultValidateOnChange;
96
101
  const dateTimeFormat = getDateTimeFormat(dateFormat, timeFormat);
97
102
 
98
103
  // Developer-provided datetimes might not always follow the exact date and time format they want to use.
@@ -156,7 +161,8 @@ function DateRangePickerPanel({
156
161
  viewMode: initialViewMode,
157
162
  dateTimeFormat,
158
163
  minStart,
159
- maxEnd
164
+ maxEnd,
165
+ sameDateError
160
166
  })
161
167
  });
162
168
  }
@@ -176,7 +182,8 @@ function DateRangePickerPanel({
176
182
  viewMode: initialViewMode,
177
183
  dateTimeFormat,
178
184
  minStart,
179
- maxEnd
185
+ maxEnd,
186
+ sameDateError
180
187
  })
181
188
  });
182
189
  }
@@ -198,7 +205,8 @@ function DateRangePickerPanel({
198
205
  viewMode: initialViewMode,
199
206
  dateTimeFormat,
200
207
  minStart,
201
- maxEnd
208
+ maxEnd,
209
+ sameDateError
202
210
  })
203
211
  });
204
212
  }
@@ -344,7 +352,8 @@ function DateRangePickerPanel({
344
352
  viewMode: initialViewMode,
345
353
  dateTimeFormat,
346
354
  minStart,
347
- maxEnd
355
+ maxEnd,
356
+ sameDateError
348
357
  })
349
358
  });
350
359
  }
@@ -357,7 +366,8 @@ function DateRangePickerPanel({
357
366
  viewMode: initialViewMode,
358
367
  dateTimeFormat,
359
368
  minStart,
360
- maxEnd
369
+ maxEnd,
370
+ sameDateError
361
371
  })
362
372
  });
363
373
  }
@@ -384,7 +394,8 @@ function DateRangePickerPanel({
384
394
  viewMode: initialViewMode,
385
395
  dateTimeFormat,
386
396
  minStart,
387
- maxEnd
397
+ maxEnd,
398
+ sameDateError
388
399
  })
389
400
  });
390
401
  }
@@ -397,7 +408,8 @@ function DateRangePickerPanel({
397
408
  viewMode: initialViewMode,
398
409
  dateTimeFormat,
399
410
  minStart,
400
- maxEnd
411
+ maxEnd,
412
+ sameDateError
401
413
  })
402
414
  });
403
415
  }
@@ -23,12 +23,13 @@ export declare const INITIAL_DIRECTION: {
23
23
  export type InitialDirection = ValueOf<typeof INITIAL_DIRECTION>;
24
24
  export type DateRangePickerProps = {
25
25
  onUpdate: (updatedStart: Moment, updatedEnd: Moment) => void;
26
- validateOnClick: ValidateOnClick;
27
- validateOnChange: ValidateOnChange;
26
+ validateOnClick?: ValidateOnClick;
27
+ validateOnChange?: ValidateOnChange;
28
28
  start: Moment;
29
29
  end: Moment;
30
30
  minStart?: Moment;
31
31
  maxEnd?: Moment;
32
+ sameDateError?: boolean;
32
33
  labelFormat?: string;
33
34
  anchorType?: AnchorType;
34
35
  isDisabled?: boolean;
@@ -50,5 +51,5 @@ export type DateRangePickerProps = {
50
51
  * @midnight-gray-supported
51
52
  * @alpine-light-supported
52
53
  * */
53
- declare function DateRangePicker({ onUpdate, validateOnChange, validateOnClick, start, end, minStart, maxEnd, labelFormat, anchorType, buttonText, cancelButtonText, resetText, dateFormat, timeFormat, initialDirection, initialViewMode, placement, showTimeZoneSuffix, isDisabled, utcSuffix, dateStartInputAriaLabel, dateEndInputAriaLabel, }: DateRangePickerProps): import("react/jsx-runtime").JSX.Element;
54
+ declare function DateRangePicker({ onUpdate, validateOnChange, validateOnClick, start, end, minStart, maxEnd, sameDateError, labelFormat, anchorType, buttonText, cancelButtonText, resetText, dateFormat, timeFormat, initialDirection, initialViewMode, placement, showTimeZoneSuffix, isDisabled, utcSuffix, dateStartInputAriaLabel, dateEndInputAriaLabel, }: DateRangePickerProps): import("react/jsx-runtime").JSX.Element;
54
55
  export default DateRangePicker;
@@ -33,6 +33,7 @@ function DateRangePicker({
33
33
  end,
34
34
  minStart,
35
35
  maxEnd,
36
+ sameDateError,
36
37
  labelFormat,
37
38
  anchorType = ANCHOR_TYPES.BUTTON,
38
39
  buttonText,
@@ -112,6 +113,7 @@ function DateRangePicker({
112
113
  defaultEnd: end,
113
114
  minStart: minStart,
114
115
  maxEnd: maxEnd,
116
+ sameDateError: sameDateError,
115
117
  dateFormat: dateFormat,
116
118
  timeFormat: timeFormat,
117
119
  initialViewMode: initialViewMode,
@@ -2,6 +2,35 @@ import React, { RefObject } from 'react';
2
2
  import moment, { MomentInput, Moment, unitOfTime } from 'moment';
3
3
  import Datetime from 'react-datetime';
4
4
  import { InitialDirection } from './datetime-range-picker';
5
+ export declare function useValidateOnClick(): ({ start, end, minStart, maxEnd, viewMode, dateTimeFormat, sameDateError, }: {
6
+ start?: moment.Moment | null | undefined;
7
+ end?: moment.Moment | null | undefined;
8
+ viewMode: string;
9
+ dateTimeFormat: string;
10
+ minStart?: moment.Moment | undefined;
11
+ maxEnd?: moment.Moment | undefined;
12
+ sameDateError?: boolean | undefined;
13
+ }) => {
14
+ startErrors: {
15
+ START_BEFORE_MIN?: string | undefined;
16
+ START_AFTER_MAX?: string | undefined;
17
+ INVALID_START_DATE?: string | undefined;
18
+ START_END_SAME?: string | undefined;
19
+ };
20
+ endErrors: {
21
+ INVALID_END_DATE?: string | undefined;
22
+ END_AFTER_MIN?: string | undefined;
23
+ END_AFTER_MAX?: string | undefined;
24
+ };
25
+ };
26
+ /** Checks whether a string can be strictly parsed as a moment object following a provided datetime format
27
+ *
28
+ * @param {string} proposedDateTime
29
+ * @param {string} dateTimeFormat
30
+ * @returns {boolean}
31
+ */
32
+ export declare function isValidDateTime(proposedDateTime: string, dateTimeFormat: string): boolean;
33
+ export declare function useGetDateTimeValidityError(): (dateTime: string, dateTimeFormat: string) => string | undefined;
5
34
  export interface StringToMomentParams {
6
35
  dateTimeFormat?: string;
7
36
  strictParse?: boolean;