@conveyorhq/arrow-ds 1.157.0 → 1.159.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@conveyorhq/arrow-ds",
3
3
  "author": "Conveyor",
4
4
  "license": "MIT",
5
- "version": "1.157.0",
5
+ "version": "1.159.0",
6
6
  "description": "Arrow Design System",
7
7
  "repository": "https://github.com/conveyor/arrow-ds",
8
8
  "publishConfig": {
@@ -1,24 +1,3 @@
1
1
  import { FC } from "react";
2
- export interface DateRangePickerValueWithDates {
3
- startDate: Date;
4
- endDate: Date;
5
- }
6
- export interface DateRangePickerPreset {
7
- name: string;
8
- startDate: Date;
9
- endDate: Date;
10
- }
11
- export type DateRangePickerValue = DateRangePickerValueWithDates | null | DateRangePickerPreset;
12
- export interface DateRangePickerProps {
13
- value: DateRangePickerPreset;
14
- onChange: (newValue: DateRangePickerPreset) => void;
15
- presets: DateRangePickerPreset[];
16
- align?: "left" | "right";
17
- minDate?: Date;
18
- maxDate?: Date;
19
- className?: string;
20
- onCustomChange: () => void;
21
- onSave: (newValue: DateRangePickerPreset) => void;
22
- disabled?: boolean;
23
- }
2
+ import { DateRangePickerProps } from "./types";
24
3
  export declare const DateRangePicker: FC<DateRangePickerProps>;
@@ -31,7 +31,6 @@ const react_1 = __importStar(require("react"));
31
31
  const classnames_1 = __importDefault(require("classnames"));
32
32
  const date_fns_1 = require("date-fns");
33
33
  const Box_1 = require("../Box");
34
- const bem_1 = require("../../utilities/bem");
35
34
  const Button_1 = require("../Button");
36
35
  const MenuRenderer_1 = require("../MenuRenderer");
37
36
  const PopoverMenu_1 = require("../PopoverMenu");
@@ -42,19 +41,7 @@ const CustomDateRangeInput_1 = require("./CustomDateRangeInput");
42
41
  const utilities_1 = require("../../utilities");
43
42
  const DatePicker_1 = require("../DatePicker");
44
43
  const isValidDate_1 = require("../../utilities/isValidDate");
45
- const cn = (0, bem_1.bemHOF)("DateRangePicker");
46
- const RangePickerPreset = ({ isSelected, children, onClick, }) => {
47
- const classes = (0, classnames_1.default)(cn({ e: "preset" }), isSelected && cn({ e: "preset", m: "isSelected" }));
48
- return (react_1.default.createElement("button", { type: "button", className: classes, onClick: onClick }, children));
49
- };
50
- const CUSTOM_PRESET = "Custom";
51
- const focusInput = (ref) => {
52
- const input = ref.current;
53
- const { activeElement } = document;
54
- if (input && input !== activeElement) {
55
- input.focus();
56
- }
57
- };
44
+ const utils_1 = require("./utils");
58
45
  const DateRangePicker = ({ className, onChange, align = "left", presets, value, minDate, maxDate, onCustomChange, onSave, disabled, ...rest }) => {
59
46
  const placement = align === "left" ? "bottom-start" : "bottom-end";
60
47
  const [customStartDateInputVal, setCustomStartDateInputVal,] = (0, react_1.useState)("");
@@ -67,9 +54,10 @@ const DateRangePicker = ({ className, onChange, align = "left", presets, value,
67
54
  const handleClose = () => {
68
55
  setCustomStartDateError("");
69
56
  };
70
- const [presetName, setPresetName] = (0, react_1.useState)(value.name);
57
+ const [selectedPresetName, setSelectedPresetName] = (0, react_1.useState)(value.name);
58
+ const [currentPresetName, setCurrentPresetName] = (0, react_1.useState)(value.name);
71
59
  (0, react_1.useEffect)(() => {
72
- setPresetName(value.name);
60
+ setSelectedPresetName(value.name);
73
61
  setCustomStartDateInputVal(value.startDate ? (0, date_fns_1.format)(value.startDate, utilities_1.DATE_FORMAT) : "");
74
62
  setCustomEndDateInputVal(value.endDate ? (0, date_fns_1.format)(value.endDate, utilities_1.DATE_FORMAT) : "");
75
63
  }, [value]);
@@ -81,13 +69,13 @@ const DateRangePicker = ({ className, onChange, align = "left", presets, value,
81
69
  const displayText = (0, react_1.useMemo)(() => {
82
70
  if (!value)
83
71
  return "Select Date Range";
84
- return presetName;
85
- }, [presetName, value]);
72
+ return currentPresetName;
73
+ }, [currentPresetName, value]);
86
74
  (0, react_1.useEffect)(() => {
87
75
  if (customDateInputsValid)
88
76
  return;
89
77
  const inputToFocus = customSelectingWhichDate === "start" ? startInput : endInput;
90
- focusInput(inputToFocus);
78
+ (0, utils_1.dateRangePickerFocusInput)(inputToFocus);
91
79
  }, [customSelectingWhichDate, customDateInputsValid]);
92
80
  const validDates = (0, react_1.useMemo)(() => {
93
81
  let start = null;
@@ -126,7 +114,7 @@ const DateRangePicker = ({ className, onChange, align = "left", presets, value,
126
114
  }, [customStartDateInputVal, customEndDateInputVal, minDate, maxDate]);
127
115
  const handleDatePickerChange = ([newStartDate, newEndDate]) => {
128
116
  if (!newEndDate)
129
- focusInput(endInput);
117
+ (0, utils_1.dateRangePickerFocusInput)(endInput);
130
118
  const newStartString = newStartDate
131
119
  ? (0, date_fns_1.format)(newStartDate, utilities_1.DATE_FORMAT)
132
120
  : "";
@@ -143,36 +131,38 @@ const DateRangePicker = ({ className, onChange, align = "left", presets, value,
143
131
  !validDates.end ||
144
132
  !!customStartDateError ||
145
133
  !!customEndDateError;
146
- return (react_1.default.createElement(MenuRenderer_1.MenuRenderer, { className: (0, classnames_1.default)(cn(), className), placement: placement, onClose: handleClose, hasPortal: true, trigger: (triggerProps) => (react_1.default.createElement(Button_1.Button, { variant: Button_1.BUTTON_VARIANT.SECONDARY, icon: Icon_1.ICON_TYPE.CARET_DOWN, iconPosition: Button_1.BUTTON_ICON_POSITION.RIGHT, className: cn({ e: "trigger" }), disabled: disabled, ...triggerProps },
147
- react_1.default.createElement(Flex_1.Flex, { className: cn({ e: "trigger-inner" }) },
148
- react_1.default.createElement(Icon_1.Icon, { icon: Icon_1.ICON_TYPE.CALENDAR, className: cn({ e: "trigger-icon" }) }),
134
+ return (react_1.default.createElement(MenuRenderer_1.MenuRenderer, { className: (0, classnames_1.default)((0, utils_1.cn)(), className), placement: placement, onClose: handleClose, hasPortal: true, trigger: (triggerProps) => (react_1.default.createElement(Button_1.Button, { variant: Button_1.BUTTON_VARIANT.SECONDARY, icon: Icon_1.ICON_TYPE.CARET_DOWN, iconPosition: Button_1.BUTTON_ICON_POSITION.RIGHT, className: (0, utils_1.cn)({ e: "custom-trigger" }), disabled: disabled, ...triggerProps },
135
+ react_1.default.createElement(Flex_1.Flex, { className: (0, utils_1.cn)({ e: "trigger-inner" }) },
136
+ react_1.default.createElement(Icon_1.Icon, { icon: Icon_1.ICON_TYPE.CALENDAR, className: (0, utils_1.cn)({ e: "trigger-icon" }) }),
149
137
  " ",
150
- react_1.default.createElement(Text_1.Text, { as: "span", className: cn({ e: "trigger-text" }) }, displayText)))), ...rest }, ({ listProps, onClose }) => (react_1.default.createElement(PopoverMenu_1.PopoverMenu, { ...listProps },
151
- react_1.default.createElement(Flex_1.Flex, { className: cn({
138
+ react_1.default.createElement(Text_1.Text, { as: "span", className: (0, utils_1.cn)({ e: "custom-trigger-text" }) }, displayText)))), ...rest }, ({ listProps, onClose }) => (react_1.default.createElement(PopoverMenu_1.PopoverMenu, { ...listProps },
139
+ react_1.default.createElement(Flex_1.Flex, { className: (0, utils_1.cn)({
152
140
  e: "popover-inner-wrapper",
153
141
  m: `${align}Aligned`,
154
142
  }) },
155
- react_1.default.createElement(Flex_1.Flex, { className: cn({ e: "presets-wrapper" }) },
156
- presets.map((p) => (react_1.default.createElement(RangePickerPreset, { key: p.name, onClick: () => {
143
+ react_1.default.createElement(Flex_1.Flex, { className: (0, utils_1.cn)({ e: "presets-wrapper" }) },
144
+ presets.map((p) => (react_1.default.createElement(utils_1.RangePickerPreset, { key: p.name, onClick: () => {
157
145
  onChange(p);
158
- setPresetName(p.name);
146
+ setSelectedPresetName(p.name);
159
147
  setCustomStartDateInputVal((0, date_fns_1.format)(p.startDate, utilities_1.DATE_FORMAT));
160
148
  setCustomEndDateInputVal((0, date_fns_1.format)(p.endDate, utilities_1.DATE_FORMAT));
161
- }, isSelected: p.name === presetName }, p.name))),
162
- react_1.default.createElement(RangePickerPreset, { onClick: () => {
149
+ }, isSelected: p.name === selectedPresetName }, p.name))),
150
+ react_1.default.createElement(utils_1.RangePickerPreset, { onClick: () => {
163
151
  onCustomChange();
164
- setPresetName(CUSTOM_PRESET);
152
+ setSelectedPresetName(utils_1.DATE_RANGE_PICKER_CUSTOM_PRESET);
165
153
  setCustomStartDateInputVal("");
166
154
  setCustomEndDateInputVal("");
167
- }, isSelected: presetName === CUSTOM_PRESET }, "Custom")),
168
- react_1.default.createElement(Box_1.Box, { className: (0, classnames_1.default)(cn({ e: "custom-wrapper" }), cn({ e: "custom-wrapper", m: `${align}Aligned` })) },
169
- react_1.default.createElement(Flex_1.Flex, { className: cn({ e: "custom-date-inputs-wrapper" }) },
155
+ }, isSelected: selectedPresetName === utils_1.DATE_RANGE_PICKER_CUSTOM_PRESET }, "Custom")),
156
+ react_1.default.createElement(Box_1.Box, { className: (0, classnames_1.default)((0, utils_1.cn)({ e: "custom-wrapper" }), (0, utils_1.cn)({ e: "custom-wrapper", m: `${align}Aligned` })) },
157
+ react_1.default.createElement(Flex_1.Flex, { className: (0, utils_1.cn)({ e: "custom-date-inputs-wrapper" }) },
170
158
  react_1.default.createElement(CustomDateRangeInput_1.CustomDateRangeInput, { ref: startInput, value: customStartDateInputVal, setValue: setCustomStartDateInputVal, error: customStartDateError, setError: setCustomStartDateError, ariaLabel: "Start Date", onFocus: () => setCustomSelectingWhichDate("start") }),
171
- react_1.default.createElement(Text_1.Text, { as: "span", className: cn({ e: "custom-dates-to" }) }, "to"),
159
+ react_1.default.createElement(Text_1.Text, { as: "span", className: (0, utils_1.cn)({ e: "custom-dates-to" }) }, "to"),
172
160
  react_1.default.createElement(CustomDateRangeInput_1.CustomDateRangeInput, { ref: endInput, value: customEndDateInputVal, setValue: setCustomEndDateInputVal, error: customEndDateError, setError: setCustomEndDateError, ariaLabel: "End Date", onFocus: () => setCustomSelectingWhichDate("end") })),
173
- react_1.default.createElement(Box_1.Box, { className: cn({ e: "custom-date-calendars-wrapper" }) },
174
- react_1.default.createElement(DatePicker_1.DatePicker, { monthsShown: 2, inline: true, onChange: handleDatePickerChange, onSelect: handleDatePickerSelect, selectsRange: true, selected: validDates.start, startDate: validDates.start, endDate: validDates.end, minDate: minDate, maxDate: maxDate, openToDate: presetName === CUSTOM_PRESET ? new Date() : undefined })),
175
- react_1.default.createElement(Flex_1.Flex, { className: cn({ e: "custom-date-footer" }) },
161
+ react_1.default.createElement(Box_1.Box, { className: (0, utils_1.cn)({ e: "custom-date-calendars-wrapper" }) },
162
+ react_1.default.createElement(DatePicker_1.DatePicker, { monthsShown: 2, inline: true, onChange: handleDatePickerChange, onSelect: handleDatePickerSelect, selectsRange: true, selected: validDates.start, startDate: validDates.start, endDate: validDates.end, minDate: minDate, maxDate: maxDate, openToDate: selectedPresetName === utils_1.DATE_RANGE_PICKER_CUSTOM_PRESET
163
+ ? new Date()
164
+ : undefined })),
165
+ react_1.default.createElement(Flex_1.Flex, { className: (0, utils_1.cn)({ e: "custom-date-footer" }) },
176
166
  react_1.default.createElement(Button_1.Button, { variant: Button_1.BUTTON_VARIANT.SECONDARY, onClick: () => {
177
167
  if (onClose) {
178
168
  onClose();
@@ -185,7 +175,8 @@ const DateRangePicker = ({ className, onChange, align = "left", presets, value,
185
175
  const startDate = (0, utilities_1.parseDate)(customStartDateInputVal);
186
176
  const endDate = (0, utilities_1.parseDate)(customEndDateInputVal);
187
177
  if (startDate && endDate) {
188
- onSave({ name: presetName, startDate, endDate });
178
+ setCurrentPresetName(selectedPresetName);
179
+ onSave({ name: selectedPresetName, startDate, endDate });
189
180
  }
190
181
  } }, "Apply"))))))));
191
182
  };
@@ -0,0 +1,3 @@
1
+ import { FC } from "react";
2
+ import { DateRangePickerLegacyProps } from "./types";
3
+ export declare const DateRangePickerLegacy: FC<DateRangePickerLegacyProps>;
@@ -0,0 +1,186 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.DateRangePickerLegacy = void 0;
30
+ const react_1 = __importStar(require("react"));
31
+ const classnames_1 = __importDefault(require("classnames"));
32
+ const date_fns_1 = require("date-fns");
33
+ const Box_1 = require("../Box");
34
+ const Button_1 = require("../Button");
35
+ const MenuRenderer_1 = require("../MenuRenderer");
36
+ const PopoverMenu_1 = require("../PopoverMenu");
37
+ const Icon_1 = require("../Icon");
38
+ const Flex_1 = require("../Flex");
39
+ const Text_1 = require("../Text");
40
+ const CustomDateRangeInput_1 = require("./CustomDateRangeInput");
41
+ const utilities_1 = require("../../utilities");
42
+ const DatePicker_1 = require("../DatePicker");
43
+ const isValidDate_1 = require("../../utilities/isValidDate");
44
+ const utils_1 = require("./utils");
45
+ const DateRangePickerLegacy = ({ className, onChange, align = "left", presets, value, minDate, maxDate, ...rest }) => {
46
+ const placement = align === "left" ? "bottom-start" : "bottom-end";
47
+ const [selectingCustomDate, setSelectingCustomDate] = (0, react_1.useState)(!(0, utils_1.getMatchingDateRangePickerPreset)(value, presets) && value !== null);
48
+ const [customStartDateInputVal, setCustomStartDateInputVal,] = (0, react_1.useState)("");
49
+ const [customStartDateError, setCustomStartDateError] = (0, react_1.useState)("");
50
+ const [customEndDateInputVal, setCustomEndDateInputVal] = (0, react_1.useState)("");
51
+ const [customEndDateError, setCustomEndDateError] = (0, react_1.useState)("");
52
+ const [customSelectingWhichDate, setCustomSelectingWhichDate] = (0, react_1.useState)("start");
53
+ const startInput = (0, react_1.useRef)(null);
54
+ const endInput = (0, react_1.useRef)(null);
55
+ const handleClose = () => {
56
+ setCustomStartDateError("");
57
+ if (selectingCustomDate && value && "name" in value) {
58
+ setSelectingCustomDate(false);
59
+ }
60
+ };
61
+ const selectedPreset = (0, react_1.useMemo)(() => {
62
+ if (!value)
63
+ return null;
64
+ if (selectingCustomDate)
65
+ return utils_1.DATE_RANGE_PICKER_CUSTOM_PRESET;
66
+ const matchingPreset = (0, utils_1.getMatchingDateRangePickerPreset)(value, presets);
67
+ return matchingPreset
68
+ ? matchingPreset.name
69
+ : utils_1.DATE_RANGE_PICKER_CUSTOM_PRESET;
70
+ }, [presets, value, selectingCustomDate]);
71
+ const customDateInputsValid = (0, react_1.useMemo)(() => {
72
+ const parsedStart = (0, utilities_1.parseDate)(customStartDateInputVal);
73
+ const parsedEnd = (0, utilities_1.parseDate)(customEndDateInputVal);
74
+ return !!(parsedStart && parsedEnd);
75
+ }, [customStartDateInputVal, customEndDateInputVal]);
76
+ const displayText = (0, react_1.useMemo)(() => {
77
+ if (!value)
78
+ return "Select Date Range";
79
+ const matchingPreset = (0, utils_1.getMatchingDateRangePickerPreset)(value, presets);
80
+ if (selectingCustomDate && matchingPreset)
81
+ return utils_1.DATE_RANGE_PICKER_CUSTOM_PRESET;
82
+ return selectedPreset === utils_1.DATE_RANGE_PICKER_CUSTOM_PRESET
83
+ ? `${(0, date_fns_1.format)(value.startDate, utilities_1.DATE_FORMAT)} to ${(0, date_fns_1.format)(value.endDate, utilities_1.DATE_FORMAT)}`
84
+ : selectedPreset;
85
+ }, [selectedPreset, value, selectingCustomDate, presets]);
86
+ (0, react_1.useEffect)(() => {
87
+ if (!selectingCustomDate || customDateInputsValid)
88
+ return;
89
+ const inputToFocus = customSelectingWhichDate === "start" ? startInput : endInput;
90
+ (0, utils_1.dateRangePickerFocusInput)(inputToFocus);
91
+ }, [customSelectingWhichDate, selectingCustomDate, customDateInputsValid]);
92
+ const validDates = (0, react_1.useMemo)(() => {
93
+ let start = null;
94
+ let end = null;
95
+ if (customStartDateInputVal) {
96
+ const parsed = (0, date_fns_1.parse)(customStartDateInputVal, utilities_1.DATE_FORMAT, new Date());
97
+ start = (0, isValidDate_1.isValidDate)(parsed) ? parsed : null;
98
+ }
99
+ if (customEndDateInputVal) {
100
+ const parsed = (0, date_fns_1.parse)(customEndDateInputVal, utilities_1.DATE_FORMAT, new Date());
101
+ end = (0, isValidDate_1.isValidDate)(parsed) ? parsed : null;
102
+ }
103
+ if (start &&
104
+ ((minDate && (0, date_fns_1.isBefore)(start, minDate)) ||
105
+ (maxDate && (0, date_fns_1.isAfter)(start, maxDate)))) {
106
+ setCustomStartDateError("Outside allowed date range");
107
+ start = null;
108
+ }
109
+ if (end &&
110
+ ((minDate && (0, date_fns_1.isBefore)(end, minDate)) ||
111
+ (maxDate && (0, date_fns_1.isAfter)(end, maxDate)))) {
112
+ setCustomEndDateError("Outside allowed date range");
113
+ end = null;
114
+ }
115
+ if (start && end && (0, date_fns_1.isAfter)(start, end)) {
116
+ setCustomEndDateError("End date cannot be before start date");
117
+ end = null;
118
+ }
119
+ if (start) {
120
+ setCustomStartDateError("");
121
+ }
122
+ if (end) {
123
+ setCustomEndDateError("");
124
+ }
125
+ return { start, end };
126
+ }, [customStartDateInputVal, customEndDateInputVal, minDate, maxDate]);
127
+ const handleDatePickerChange = ([newStartDate, newEndDate]) => {
128
+ if (!newEndDate)
129
+ (0, utils_1.dateRangePickerFocusInput)(endInput);
130
+ const newStartString = newStartDate
131
+ ? (0, date_fns_1.format)(newStartDate, utilities_1.DATE_FORMAT)
132
+ : "";
133
+ const newEndString = newEndDate ? (0, date_fns_1.format)(newEndDate, utilities_1.DATE_FORMAT) : "";
134
+ setCustomStartDateInputVal(newStartString);
135
+ setCustomEndDateInputVal(newEndString);
136
+ };
137
+ const handleDatePickerSelect = (date) => {
138
+ if (!validDates.start && validDates.end) {
139
+ setCustomStartDateInputVal((0, date_fns_1.format)(date, utilities_1.DATE_FORMAT));
140
+ }
141
+ };
142
+ const customApplyBtnDisabled = !validDates.start ||
143
+ !validDates.end ||
144
+ !!customStartDateError ||
145
+ !!customEndDateError;
146
+ return (react_1.default.createElement(MenuRenderer_1.MenuRenderer, { className: (0, classnames_1.default)((0, utils_1.cn)(), className), placement: placement, onClose: handleClose, hasPortal: true, trigger: (triggerProps) => (react_1.default.createElement(Button_1.Button, { variant: Button_1.BUTTON_VARIANT.SECONDARY, icon: Icon_1.ICON_TYPE.CARET_DOWN, iconPosition: Button_1.BUTTON_ICON_POSITION.RIGHT, className: (0, utils_1.cn)({ e: "trigger" }), ...triggerProps },
147
+ react_1.default.createElement(Flex_1.Flex, { className: (0, utils_1.cn)({ e: "trigger-inner" }) },
148
+ react_1.default.createElement(Icon_1.Icon, { icon: Icon_1.ICON_TYPE.CALENDAR, className: (0, utils_1.cn)({ e: "trigger-icon" }) }),
149
+ " ",
150
+ react_1.default.createElement(Text_1.Text, { as: "span", className: (0, utils_1.cn)({ e: "trigger-text" }) }, displayText)))), ...rest }, ({ listProps, onClose }) => (react_1.default.createElement(PopoverMenu_1.PopoverMenu, { ...listProps },
151
+ react_1.default.createElement(Flex_1.Flex, { className: (0, utils_1.cn)({
152
+ e: "popover-inner-wrapper",
153
+ m: `${align}Aligned`,
154
+ }) },
155
+ react_1.default.createElement(Flex_1.Flex, { className: (0, utils_1.cn)({ e: "presets-wrapper" }) },
156
+ presets.map((p) => (react_1.default.createElement(utils_1.RangePickerPreset, { key: p.name, onClick: () => {
157
+ onChange(p);
158
+ if (onClose) {
159
+ onClose();
160
+ }
161
+ }, isSelected: p.name === selectedPreset }, p.name))),
162
+ react_1.default.createElement(utils_1.RangePickerPreset, { onClick: () => {
163
+ if (selectingCustomDate)
164
+ return;
165
+ setSelectingCustomDate(true);
166
+ }, isSelected: selectedPreset === utils_1.DATE_RANGE_PICKER_CUSTOM_PRESET }, "Custom")),
167
+ selectedPreset === utils_1.DATE_RANGE_PICKER_CUSTOM_PRESET ? (react_1.default.createElement(Box_1.Box, { className: (0, classnames_1.default)((0, utils_1.cn)({ e: "custom-wrapper" }), (0, utils_1.cn)({ e: "custom-wrapper", m: `${align}Aligned` })) },
168
+ react_1.default.createElement(Flex_1.Flex, { className: (0, utils_1.cn)({ e: "custom-date-inputs-wrapper" }) },
169
+ react_1.default.createElement(CustomDateRangeInput_1.CustomDateRangeInput, { ref: startInput, value: customStartDateInputVal, setValue: setCustomStartDateInputVal, error: customStartDateError, setError: setCustomStartDateError, ariaLabel: "Start Date", onFocus: () => setCustomSelectingWhichDate("start") }),
170
+ react_1.default.createElement(Text_1.Text, { as: "span", className: (0, utils_1.cn)({ e: "custom-dates-to" }) }, "to"),
171
+ react_1.default.createElement(CustomDateRangeInput_1.CustomDateRangeInput, { ref: endInput, value: customEndDateInputVal, setValue: setCustomEndDateInputVal, error: customEndDateError, setError: setCustomEndDateError, ariaLabel: "End Date", onFocus: () => setCustomSelectingWhichDate("end") })),
172
+ react_1.default.createElement(Box_1.Box, { className: (0, utils_1.cn)({ e: "custom-date-calendars-wrapper" }) },
173
+ react_1.default.createElement(DatePicker_1.DatePicker, { monthsShown: 2, inline: true, onChange: handleDatePickerChange, onSelect: handleDatePickerSelect, selectsRange: true, selected: validDates.start, startDate: validDates.start, endDate: validDates.end, minDate: minDate, maxDate: maxDate })),
174
+ react_1.default.createElement(Flex_1.Flex, { className: (0, utils_1.cn)({ e: "custom-date-footer" }) },
175
+ react_1.default.createElement(Button_1.Button, { disabled: customApplyBtnDisabled, onClick: () => {
176
+ if (onClose) {
177
+ onClose();
178
+ }
179
+ const startDate = (0, utilities_1.parseDate)(customStartDateInputVal);
180
+ const endDate = (0, utilities_1.parseDate)(customEndDateInputVal);
181
+ if (startDate && endDate) {
182
+ onChange({ startDate, endDate });
183
+ }
184
+ } }, "Apply")))) : null)))));
185
+ };
186
+ exports.DateRangePickerLegacy = DateRangePickerLegacy;
@@ -1 +1,3 @@
1
+ export * from "./types";
2
+ export * from "./DateRangePickerLegacy";
1
3
  export * from "./DateRangePicker";
@@ -14,4 +14,6 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./types"), exports);
18
+ __exportStar(require("./DateRangePickerLegacy"), exports);
17
19
  __exportStar(require("./DateRangePicker"), exports);
@@ -0,0 +1,29 @@
1
+ export interface DateRangePickerValueWithDates {
2
+ startDate: Date;
3
+ endDate: Date;
4
+ }
5
+ export interface DateRangePickerPreset {
6
+ name: string;
7
+ startDate: Date;
8
+ endDate: Date;
9
+ }
10
+ export type DateRangePickerValue = DateRangePickerValueWithDates | null | DateRangePickerPreset;
11
+ interface SharedDateRangePickerProps {
12
+ presets: DateRangePickerPreset[];
13
+ align?: "left" | "right";
14
+ minDate?: Date;
15
+ maxDate?: Date;
16
+ className?: string;
17
+ }
18
+ export interface DateRangePickerLegacyProps extends SharedDateRangePickerProps {
19
+ value: DateRangePickerValue;
20
+ onChange: (newValue: DateRangePickerValue) => void;
21
+ }
22
+ export interface DateRangePickerProps extends SharedDateRangePickerProps {
23
+ value: DateRangePickerPreset;
24
+ onChange: (newValue: DateRangePickerPreset) => void;
25
+ onCustomChange: () => void;
26
+ onSave: (newValue: DateRangePickerPreset) => void;
27
+ disabled?: boolean;
28
+ }
29
+ export {};
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,13 @@
1
+ import React, { ReactNode, RefObject } from "react";
2
+ import { DateRangePickerPreset, DateRangePickerValue } from "./types";
3
+ export declare const cn: (options?: import("../../utilities/bem").BemOptions | undefined) => string;
4
+ interface DateRangePickerPresetProps {
5
+ isSelected: boolean;
6
+ children: ReactNode;
7
+ onClick: () => void;
8
+ }
9
+ export declare const RangePickerPreset: ({ isSelected, children, onClick, }: DateRangePickerPresetProps) => React.JSX.Element;
10
+ export declare const DATE_RANGE_PICKER_CUSTOM_PRESET = "Custom";
11
+ export declare const getMatchingDateRangePickerPreset: (value: DateRangePickerValue, presets: DateRangePickerPreset[]) => DateRangePickerPreset | null | undefined;
12
+ export declare const dateRangePickerFocusInput: (ref: RefObject<HTMLInputElement>) => void;
13
+ export {};
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.dateRangePickerFocusInput = exports.getMatchingDateRangePickerPreset = exports.DATE_RANGE_PICKER_CUSTOM_PRESET = exports.RangePickerPreset = exports.cn = void 0;
7
+ const react_1 = __importDefault(require("react"));
8
+ const classnames_1 = __importDefault(require("classnames"));
9
+ const bem_1 = require("../../utilities/bem");
10
+ const Heading_1 = require("../Heading");
11
+ exports.cn = (0, bem_1.bemHOF)("DateRangePicker");
12
+ const RangePickerPreset = ({ isSelected, children, onClick, }) => {
13
+ const classes = (0, classnames_1.default)((0, exports.cn)({ e: "preset" }), isSelected && (0, exports.cn)({ e: "preset", m: "isSelected" }));
14
+ return (react_1.default.createElement("button", { type: "button", className: classes, onClick: onClick },
15
+ react_1.default.createElement(Heading_1.Heading.H4, null, children)));
16
+ };
17
+ exports.RangePickerPreset = RangePickerPreset;
18
+ exports.DATE_RANGE_PICKER_CUSTOM_PRESET = "Custom";
19
+ const getMatchingDateRangePickerPreset = (value, presets) => {
20
+ if (!value || !("name" in value))
21
+ return null;
22
+ return presets.find((p) => p.name === value.name);
23
+ };
24
+ exports.getMatchingDateRangePickerPreset = getMatchingDateRangePickerPreset;
25
+ const dateRangePickerFocusInput = (ref) => {
26
+ const input = ref.current;
27
+ const { activeElement } = document;
28
+ if (input && input !== activeElement) {
29
+ input.focus();
30
+ }
31
+ };
32
+ exports.dateRangePickerFocusInput = dateRangePickerFocusInput;
@@ -3699,6 +3699,10 @@ override built-in Image component classes */
3699
3699
  }
3700
3700
 
3701
3701
  .ads-DateRangePicker-trigger {
3702
+ width: 224px;
3703
+ }
3704
+
3705
+ .ads-DateRangePicker-custom-trigger {
3702
3706
  width: 144px;
3703
3707
  }
3704
3708
 
@@ -3711,6 +3715,11 @@ override built-in Image component classes */
3711
3715
  }
3712
3716
 
3713
3717
  .ads-DateRangePicker-trigger-text {
3718
+ width: 160px;
3719
+ text-align: left;
3720
+ }
3721
+
3722
+ .ads-DateRangePicker-custom-trigger-text {
3714
3723
  width: 80px;
3715
3724
  text-align: left;
3716
3725
  }