@conveyorhq/arrow-ds 1.155.0 → 1.157.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/README.md CHANGED
@@ -112,7 +112,7 @@ If you’d prefer to create a fork and run Storybook locally, there are instruct
112
112
 
113
113
  ## Publishing `@conveyorhq/arrow-ds` (npm)
114
114
 
115
- New releases of Arrow Design System are triggered automatically by [semantic-release](https://github.com/semantic-release/semantic-release). It uses the commit messages to determine the type of changes in the codebase. Following formalized conventions for commit messages, semantic-release automatically determines the next semantic version number, generates a changelog and publishes the release.
115
+ New releases of Arrow Design System are triggered automatically by [semantic-release](https://github.com/semantic-release/semantic-release). It uses the commit messages to determine the type of changes in the codebase. Following formalized conventions for commit messages, semantic-release automatically determines the next semantic version number, generates a changelog and publishes the release. Release only happen if commit messages have relevant changes.
116
116
 
117
117
  **Note**: No version number is committed to `package.json`. Instead, semantic-release adds it automatically before publishing to npm.
118
118
 
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.155.0",
5
+ "version": "1.157.0",
6
6
  "description": "Arrow Design System",
7
7
  "repository": "https://github.com/conveyor/arrow-ds",
8
8
  "publishConfig": {
@@ -46,7 +46,7 @@
46
46
  "react-hot-toast": "^2.4.1",
47
47
  "react-markdown": "^4.3.1",
48
48
  "react-merge-refs": "^1.1.0",
49
- "react-popper-2": "npm:react-popper@^2.3.0",
49
+ "react-popper": "^2.3.0",
50
50
  "react-remove-scroll": "^2.2.0",
51
51
  "react-select": "^4.0.2",
52
52
  "react-spring": "^8.0.27",
@@ -10,12 +10,15 @@ export interface DateRangePickerPreset {
10
10
  }
11
11
  export type DateRangePickerValue = DateRangePickerValueWithDates | null | DateRangePickerPreset;
12
12
  export interface DateRangePickerProps {
13
- value: DateRangePickerValue;
14
- onChange: (newValue: DateRangePickerValue) => void;
13
+ value: DateRangePickerPreset;
14
+ onChange: (newValue: DateRangePickerPreset) => void;
15
15
  presets: DateRangePickerPreset[];
16
16
  align?: "left" | "right";
17
17
  minDate?: Date;
18
18
  maxDate?: Date;
19
19
  className?: string;
20
+ onCustomChange: () => void;
21
+ onSave: (newValue: DateRangePickerPreset) => void;
22
+ disabled?: boolean;
20
23
  }
21
24
  export declare const DateRangePicker: FC<DateRangePickerProps>;
@@ -38,7 +38,6 @@ const PopoverMenu_1 = require("../PopoverMenu");
38
38
  const Icon_1 = require("../Icon");
39
39
  const Flex_1 = require("../Flex");
40
40
  const Text_1 = require("../Text");
41
- const Heading_1 = require("../Heading");
42
41
  const CustomDateRangeInput_1 = require("./CustomDateRangeInput");
43
42
  const utilities_1 = require("../../utilities");
44
43
  const DatePicker_1 = require("../DatePicker");
@@ -46,15 +45,9 @@ const isValidDate_1 = require("../../utilities/isValidDate");
46
45
  const cn = (0, bem_1.bemHOF)("DateRangePicker");
47
46
  const RangePickerPreset = ({ isSelected, children, onClick, }) => {
48
47
  const classes = (0, classnames_1.default)(cn({ e: "preset" }), isSelected && cn({ e: "preset", m: "isSelected" }));
49
- return (react_1.default.createElement("button", { type: "button", className: classes, onClick: onClick },
50
- react_1.default.createElement(Heading_1.Heading.H4, null, children)));
48
+ return (react_1.default.createElement("button", { type: "button", className: classes, onClick: onClick }, children));
51
49
  };
52
50
  const CUSTOM_PRESET = "Custom";
53
- const getMatchingPreset = (value, presets) => {
54
- if (!value || !("name" in value))
55
- return null;
56
- return presets.find((p) => p.name === value.name);
57
- };
58
51
  const focusInput = (ref) => {
59
52
  const input = ref.current;
60
53
  const { activeElement } = document;
@@ -62,9 +55,8 @@ const focusInput = (ref) => {
62
55
  input.focus();
63
56
  }
64
57
  };
65
- const DateRangePicker = ({ className, onChange, align = "left", presets, value, minDate, maxDate, ...rest }) => {
58
+ const DateRangePicker = ({ className, onChange, align = "left", presets, value, minDate, maxDate, onCustomChange, onSave, disabled, ...rest }) => {
66
59
  const placement = align === "left" ? "bottom-start" : "bottom-end";
67
- const [selectingCustomDate, setSelectingCustomDate] = (0, react_1.useState)(!getMatchingPreset(value, presets) && value !== null);
68
60
  const [customStartDateInputVal, setCustomStartDateInputVal,] = (0, react_1.useState)("");
69
61
  const [customStartDateError, setCustomStartDateError] = (0, react_1.useState)("");
70
62
  const [customEndDateInputVal, setCustomEndDateInputVal] = (0, react_1.useState)("");
@@ -74,18 +66,13 @@ const DateRangePicker = ({ className, onChange, align = "left", presets, value,
74
66
  const endInput = (0, react_1.useRef)(null);
75
67
  const handleClose = () => {
76
68
  setCustomStartDateError("");
77
- if (selectingCustomDate && value && "name" in value) {
78
- setSelectingCustomDate(false);
79
- }
80
69
  };
81
- const selectedPreset = (0, react_1.useMemo)(() => {
82
- if (!value)
83
- return null;
84
- if (selectingCustomDate)
85
- return CUSTOM_PRESET;
86
- const matchingPreset = getMatchingPreset(value, presets);
87
- return matchingPreset ? matchingPreset.name : CUSTOM_PRESET;
88
- }, [presets, value, selectingCustomDate]);
70
+ const [presetName, setPresetName] = (0, react_1.useState)(value.name);
71
+ (0, react_1.useEffect)(() => {
72
+ setPresetName(value.name);
73
+ setCustomStartDateInputVal(value.startDate ? (0, date_fns_1.format)(value.startDate, utilities_1.DATE_FORMAT) : "");
74
+ setCustomEndDateInputVal(value.endDate ? (0, date_fns_1.format)(value.endDate, utilities_1.DATE_FORMAT) : "");
75
+ }, [value]);
89
76
  const customDateInputsValid = (0, react_1.useMemo)(() => {
90
77
  const parsedStart = (0, utilities_1.parseDate)(customStartDateInputVal);
91
78
  const parsedEnd = (0, utilities_1.parseDate)(customEndDateInputVal);
@@ -94,19 +81,14 @@ const DateRangePicker = ({ className, onChange, align = "left", presets, value,
94
81
  const displayText = (0, react_1.useMemo)(() => {
95
82
  if (!value)
96
83
  return "Select Date Range";
97
- const matchingPreset = getMatchingPreset(value, presets);
98
- if (selectingCustomDate && matchingPreset)
99
- return CUSTOM_PRESET;
100
- return selectedPreset === CUSTOM_PRESET
101
- ? `${(0, date_fns_1.format)(value.startDate, utilities_1.DATE_FORMAT)} to ${(0, date_fns_1.format)(value.endDate, utilities_1.DATE_FORMAT)}`
102
- : selectedPreset;
103
- }, [selectedPreset, value, selectingCustomDate, presets]);
84
+ return presetName;
85
+ }, [presetName, value]);
104
86
  (0, react_1.useEffect)(() => {
105
- if (!selectingCustomDate || customDateInputsValid)
87
+ if (customDateInputsValid)
106
88
  return;
107
89
  const inputToFocus = customSelectingWhichDate === "start" ? startInput : endInput;
108
90
  focusInput(inputToFocus);
109
- }, [customSelectingWhichDate, selectingCustomDate, customDateInputsValid]);
91
+ }, [customSelectingWhichDate, customDateInputsValid]);
110
92
  const validDates = (0, react_1.useMemo)(() => {
111
93
  let start = null;
112
94
  let end = null;
@@ -161,7 +143,7 @@ const DateRangePicker = ({ className, onChange, align = "left", presets, value,
161
143
  !validDates.end ||
162
144
  !!customStartDateError ||
163
145
  !!customEndDateError;
164
- 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" }), ...triggerProps },
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 },
165
147
  react_1.default.createElement(Flex_1.Flex, { className: cn({ e: "trigger-inner" }) },
166
148
  react_1.default.createElement(Icon_1.Icon, { icon: Icon_1.ICON_TYPE.CALENDAR, className: cn({ e: "trigger-icon" }) }),
167
149
  " ",
@@ -173,23 +155,29 @@ const DateRangePicker = ({ className, onChange, align = "left", presets, value,
173
155
  react_1.default.createElement(Flex_1.Flex, { className: cn({ e: "presets-wrapper" }) },
174
156
  presets.map((p) => (react_1.default.createElement(RangePickerPreset, { key: p.name, onClick: () => {
175
157
  onChange(p);
176
- if (onClose) {
177
- onClose();
178
- }
179
- }, isSelected: p.name === selectedPreset }, p.name))),
158
+ setPresetName(p.name);
159
+ setCustomStartDateInputVal((0, date_fns_1.format)(p.startDate, utilities_1.DATE_FORMAT));
160
+ setCustomEndDateInputVal((0, date_fns_1.format)(p.endDate, utilities_1.DATE_FORMAT));
161
+ }, isSelected: p.name === presetName }, p.name))),
180
162
  react_1.default.createElement(RangePickerPreset, { onClick: () => {
181
- if (selectingCustomDate)
182
- return;
183
- setSelectingCustomDate(true);
184
- }, isSelected: selectedPreset === CUSTOM_PRESET }, "Custom")),
185
- selectedPreset === CUSTOM_PRESET ? (react_1.default.createElement(Box_1.Box, { className: (0, classnames_1.default)(cn({ e: "custom-wrapper" }), cn({ e: "custom-wrapper", m: `${align}Aligned` })) },
163
+ onCustomChange();
164
+ setPresetName(CUSTOM_PRESET);
165
+ setCustomStartDateInputVal("");
166
+ 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` })) },
186
169
  react_1.default.createElement(Flex_1.Flex, { className: cn({ e: "custom-date-inputs-wrapper" }) },
187
170
  react_1.default.createElement(CustomDateRangeInput_1.CustomDateRangeInput, { ref: startInput, value: customStartDateInputVal, setValue: setCustomStartDateInputVal, error: customStartDateError, setError: setCustomStartDateError, ariaLabel: "Start Date", onFocus: () => setCustomSelectingWhichDate("start") }),
188
171
  react_1.default.createElement(Text_1.Text, { as: "span", className: cn({ e: "custom-dates-to" }) }, "to"),
189
172
  react_1.default.createElement(CustomDateRangeInput_1.CustomDateRangeInput, { ref: endInput, value: customEndDateInputVal, setValue: setCustomEndDateInputVal, error: customEndDateError, setError: setCustomEndDateError, ariaLabel: "End Date", onFocus: () => setCustomSelectingWhichDate("end") })),
190
173
  react_1.default.createElement(Box_1.Box, { className: cn({ e: "custom-date-calendars-wrapper" }) },
191
- 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(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 })),
192
175
  react_1.default.createElement(Flex_1.Flex, { className: cn({ e: "custom-date-footer" }) },
176
+ react_1.default.createElement(Button_1.Button, { variant: Button_1.BUTTON_VARIANT.SECONDARY, onClick: () => {
177
+ if (onClose) {
178
+ onClose();
179
+ }
180
+ } }, "Cancel"),
193
181
  react_1.default.createElement(Button_1.Button, { disabled: customApplyBtnDisabled, onClick: () => {
194
182
  if (onClose) {
195
183
  onClose();
@@ -197,8 +185,8 @@ const DateRangePicker = ({ className, onChange, align = "left", presets, value,
197
185
  const startDate = (0, utilities_1.parseDate)(customStartDateInputVal);
198
186
  const endDate = (0, utilities_1.parseDate)(customEndDateInputVal);
199
187
  if (startDate && endDate) {
200
- onChange({ startDate, endDate });
188
+ onSave({ name: presetName, startDate, endDate });
201
189
  }
202
- } }, "Apply")))) : null)))));
190
+ } }, "Apply"))))))));
203
191
  };
204
192
  exports.DateRangePicker = DateRangePicker;
@@ -29,7 +29,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
29
29
  exports.MenuRenderer = void 0;
30
30
  const react_1 = __importStar(require("react"));
31
31
  const react_focus_lock_1 = __importDefault(require("react-focus-lock"));
32
- const react_popper_2_1 = require("react-popper-2");
32
+ const react_popper_1 = require("react-popper");
33
33
  const web_1 = require("@react-spring/web");
34
34
  const d3_ease_1 = require("d3-ease");
35
35
  const hooks_1 = require("../../hooks");
@@ -63,7 +63,7 @@ const MenuRenderer = ({ children, className, placement = "bottom-start", positio
63
63
  const [minWidth, setMinWidth] = (0, react_1.useState)(0);
64
64
  const [referenceElement, setReferenceElement] = (0, react_1.useState)(null);
65
65
  const [popperElement, setPopperElement] = (0, react_1.useState)(null);
66
- const { styles, attributes, update } = (0, react_popper_2_1.usePopper)(referenceElement, popperElement, {
66
+ const { styles, attributes, update } = (0, react_popper_1.usePopper)(referenceElement, popperElement, {
67
67
  placement,
68
68
  modifiers: [...defaultPopperModifiers, ...popperModifiers],
69
69
  strategy: position,
@@ -29,7 +29,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
29
29
  exports.Popover = void 0;
30
30
  const react_1 = __importStar(require("react"));
31
31
  const classnames_1 = __importDefault(require("classnames"));
32
- const react_popper_2_1 = require("react-popper-2");
32
+ const react_popper_1 = require("react-popper");
33
33
  const Box_1 = require("../Box");
34
34
  const Portal_1 = require("../Portal");
35
35
  const bem_1 = require("../../utilities/bem");
@@ -66,13 +66,13 @@ const Popover = ({ removePadding = false, ...props }) => {
66
66
  },
67
67
  ];
68
68
  const propModifiers = popperModifiers || [];
69
- return (react_1.default.createElement(react_popper_2_1.Manager, null,
70
- isVisible && (react_1.default.createElement(react_popper_2_1.Popper, { placement: placement, modifiers: [...defaultPopperModifiers, ...propModifiers], strategy: strategy }, ({ ref, style, placement: popperPlacement, arrowProps, update, }) => (react_1.default.createElement(InlinePopover, { ref: ref, style: {
69
+ return (react_1.default.createElement(react_popper_1.Manager, null,
70
+ isVisible && (react_1.default.createElement(react_popper_1.Popper, { placement: placement, modifiers: [...defaultPopperModifiers, ...propModifiers], strategy: strategy }, ({ ref, style, placement: popperPlacement, arrowProps, update, }) => (react_1.default.createElement(InlinePopover, { ref: ref, style: {
71
71
  ...style,
72
72
  ...styleProp,
73
73
  }, className: className, "data-placement": popperPlacement, hasPortal: true, removePadding: removePadding, ...rest },
74
74
  react_1.default.createElement(ChildrenWithArrow, { popperPlacement: popperPlacement, arrowProps: arrowProps, update: update, showArrow: showArrow }, children))))),
75
- react_1.default.createElement(react_popper_2_1.Reference, null, ({ ref }) => (0, react_1.cloneElement)(referenceElement, {
75
+ react_1.default.createElement(react_popper_1.Reference, null, ({ ref }) => (0, react_1.cloneElement)(referenceElement, {
76
76
  ref,
77
77
  }))));
78
78
  }
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.useSelectLayout = void 0;
7
7
  const classnames_1 = __importDefault(require("classnames"));
8
8
  const react_1 = require("react");
9
- const react_popper_2_1 = require("react-popper-2");
9
+ const react_popper_1 = require("react-popper");
10
10
  const types_1 = require("../../../types");
11
11
  const utilities_1 = require("../../../utilities");
12
12
  const FormGroupContext_1 = require("../../FormGroup/FormGroupContext");
@@ -58,7 +58,7 @@ function useSelectLayout({ isOpen, hasSearch, isDisabled, variantProp, getLabelP
58
58
  const [callbackElement, setCallbackElement] = (0, react_1.useState)(null);
59
59
  const isListRendered = callbackElement !== null;
60
60
  const inputRef = (0, react_1.useRef)(null);
61
- const { styles, attributes, update } = (0, react_popper_2_1.usePopper)(referenceElement, popperRef.current, {
61
+ const { styles, attributes, update } = (0, react_popper_1.usePopper)(referenceElement, popperRef.current, {
62
62
  placement: initialPlacement,
63
63
  modifiers: popperModifiers,
64
64
  });
@@ -30,7 +30,7 @@ exports.FilterDropdown = void 0;
30
30
  const react_1 = __importStar(require("react"));
31
31
  const classnames_1 = __importDefault(require("classnames"));
32
32
  const react_focus_lock_1 = __importDefault(require("react-focus-lock"));
33
- const react_popper_2_1 = require("react-popper-2");
33
+ const react_popper_1 = require("react-popper");
34
34
  const bem_1 = require("../../utilities/bem");
35
35
  const hooks_1 = require("../../hooks");
36
36
  const Icon_1 = require("../Icon");
@@ -93,9 +93,9 @@ const FilterDropdown = ({ isVisible = false, filterApplied = false, onSetVisible
93
93
  const getButtonElement = (buttonElement) => {
94
94
  buttonRef.current = buttonElement;
95
95
  };
96
- return (react_1.default.createElement(react_popper_2_1.Manager, null,
96
+ return (react_1.default.createElement(react_popper_1.Manager, null,
97
97
  isVisible && (react_1.default.createElement(Portal_1.Portal, null,
98
- react_1.default.createElement(react_popper_2_1.Popper, { placement: "bottom", innerRef: getPopperElement, modifiers: [
98
+ react_1.default.createElement(react_popper_1.Popper, { placement: "bottom", innerRef: getPopperElement, modifiers: [
99
99
  {
100
100
  name: "offset",
101
101
  options: {
@@ -103,6 +103,6 @@ const FilterDropdown = ({ isVisible = false, filterApplied = false, onSetVisible
103
103
  },
104
104
  },
105
105
  ] }, ({ ref, placement, style }) => (react_1.default.createElement(FilterMenu, { ref: ref, buttonRef: buttonRef, menuRef: menuRef, placement: placement, className: className, style: style, onSetVisible: onSetVisible, searchInputValue: searchInputValue, onFilterInputChange: onFilterInputChange, onFilterSelectAll: onFilterSelectAll, onFilterClear: onFilterClear, filterOptions: filterOptions, filterControl: filterControl, hideFilterSearch: hideFilterSearch }))))),
106
- react_1.default.createElement(react_popper_2_1.Reference, { innerRef: getButtonElement }, ({ ref }) => (react_1.default.createElement(FilterToggleButton, { ref: ref, onSetVisible: onSetVisible, isVisible: isVisible, filterApplied: filterApplied })))));
106
+ react_1.default.createElement(react_popper_1.Reference, { innerRef: getButtonElement }, ({ ref }) => (react_1.default.createElement(FilterToggleButton, { ref: ref, onSetVisible: onSetVisible, isVisible: isVisible, filterApplied: filterApplied })))));
107
107
  };
108
108
  exports.FilterDropdown = FilterDropdown;
@@ -3699,7 +3699,7 @@ override built-in Image component classes */
3699
3699
  }
3700
3700
 
3701
3701
  .ads-DateRangePicker-trigger {
3702
- width: 224px;
3702
+ width: 144px;
3703
3703
  }
3704
3704
 
3705
3705
  .ads-DateRangePicker-trigger-inner {
@@ -3711,7 +3711,7 @@ override built-in Image component classes */
3711
3711
  }
3712
3712
 
3713
3713
  .ads-DateRangePicker-trigger-text {
3714
- width: 160px;
3714
+ width: 80px;
3715
3715
  text-align: left;
3716
3716
  }
3717
3717
 
@@ -3731,6 +3731,8 @@ override built-in Image component classes */
3731
3731
  border-radius: 3px;
3732
3732
  padding: 8px;
3733
3733
  text-align: left;
3734
+ font-size: 14px;
3735
+ font-weight: 500;
3734
3736
  }
3735
3737
 
3736
3738
  .ads-DateRangePicker-preset:hover {
@@ -3738,12 +3740,12 @@ override built-in Image component classes */
3738
3740
  background-color: rgb(249 251 252 / var(--tw-bg-opacity));
3739
3741
  }
3740
3742
 
3741
- .ads-DateRangePicker-preset--isSelected {
3743
+ button.ads-DateRangePicker-preset--isSelected {
3742
3744
  --tw-bg-opacity: 1;
3743
3745
  background-color: rgb(244 247 249 / var(--tw-bg-opacity));
3744
3746
  }
3745
3747
 
3746
- .ads-DateRangePicker-preset--isSelected:hover {
3748
+ button.ads-DateRangePicker-preset--isSelected:hover {
3747
3749
  --tw-bg-opacity: 1;
3748
3750
  background-color: rgb(237 243 247 / var(--tw-bg-opacity));
3749
3751
  }
@@ -3784,6 +3786,8 @@ override built-in Image component classes */
3784
3786
 
3785
3787
  .ads-DateRangePicker-custom-date-footer {
3786
3788
  justify-content: flex-end;
3789
+ -webkit-column-gap: 8px;
3790
+ column-gap: 8px;
3787
3791
  padding: 12px;
3788
3792
  }
3789
3793