@connectif/ui-components 5.5.1 → 5.6.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/CHANGELOG.md CHANGED
@@ -1,5 +1,12 @@
1
1
  # Changelog
2
2
 
3
+ ## [5.6.0] - 2026-03-12
4
+
5
+ ### Added
6
+
7
+ - Added an `input` variant to `DateIntervalPicker`.
8
+ - Added `selectableItemComponent`, `itemsPerRow`, and `itemsTitle` props to the `SelectPopover` component.
9
+
3
10
  ## [5.5.1] - 2026-03-10
4
11
 
5
12
  ### Fixed
@@ -114,6 +114,10 @@ export type ButtonProps = Pick<MuiButtonProps, 'id' | 'disabled' | 'onClick' | '
114
114
  * The link element type to be used if this button is a link.
115
115
  */
116
116
  link?: React.ElementType;
117
+ /**
118
+ * Optional data-testid for testing purposes.
119
+ */
120
+ 'data-testid'?: string;
117
121
  };
118
122
  /**
119
123
  * A component that displays a button with text and icon.
@@ -173,5 +177,9 @@ declare const Button: React.ForwardRefExoticComponent<Pick<MuiButtonProps, "id"
173
177
  * The link element type to be used if this button is a link.
174
178
  */
175
179
  link?: React.ElementType;
180
+ /**
181
+ * Optional data-testid for testing purposes.
182
+ */
183
+ 'data-testid'?: string;
176
184
  } & React.RefAttributes<HTMLButtonElement>>;
177
185
  export default Button;
@@ -43,6 +43,7 @@ declare const ButtonWithActions: React.ForwardRefExoticComponent<Pick<MuiButtonP
43
43
  badgeLeft?: boolean;
44
44
  children?: React.ReactElement<"input">;
45
45
  link?: React.ElementType;
46
+ 'data-testid'?: string;
46
47
  } & Pick<PopoverProps, "horizontalAlign" | "anchorHorizontalOrigin"> & {
47
48
  /**
48
49
  * The options to show in button submenu
@@ -13,6 +13,7 @@ export type CalendarMonthProps = {
13
13
  intersectionColor?: string;
14
14
  onSelect?: (day: number) => void;
15
15
  allowKeyboardNavigation?: boolean;
16
+ focusedDate?: SimpleDate | null;
16
17
  };
17
- declare const CalendarMonth: ({ minDate, maxDate, year, month, selections, intersectionColor, onSelect, allowKeyboardNavigation }: CalendarMonthProps) => import("react/jsx-runtime").JSX.Element;
18
+ declare const CalendarMonth: ({ minDate, maxDate, year, month, selections, intersectionColor, onSelect, allowKeyboardNavigation, focusedDate }: CalendarMonthProps) => import("react/jsx-runtime").JSX.Element;
18
19
  export default CalendarMonth;
@@ -1,4 +1,5 @@
1
1
  import { SelectPopoverProps } from './SelectPopover';
2
+ import { SelectableItem } from '../../models/SelectableItem';
2
3
  export type ItemSelectorItem = {
3
4
  id: string;
4
5
  };
@@ -21,6 +22,6 @@ export type ItemSelectorProps<T extends ItemSelectorItem> = {
21
22
  onChange: (value: T[]) => void;
22
23
  onClose?: () => void;
23
24
  onLoadMore?: (searchText: string) => void;
24
- } & Pick<SelectPopoverProps, 'applyButtonText' | 'emptyListPlaceholder' | 'hasMore' | 'isLoading' | 'isLoadingSubtitle2' | 'maxSelectedItems' | 'onSearch' | 'requiredSelectedItemsToApply' | 'disableApplyWithoutChanges' | 'popoverWidth'>;
25
+ } & Pick<SelectPopoverProps<SelectableItem>, 'applyButtonText' | 'emptyListPlaceholder' | 'hasMore' | 'isLoading' | 'isLoadingSubtitle2' | 'maxSelectedItems' | 'onSearch' | 'requiredSelectedItemsToApply' | 'disableApplyWithoutChanges' | 'popoverWidth'>;
25
26
  declare const ItemSelector: <T extends ItemSelectorItem>({ items, selectedItems, maxSelectedItems, variant, placeholder, disabled, helperText, isError, limitItemChips, itemChipWidth, isLoading, isLoadingSubtitle2, hasMore, applyButtonText, emptyListPlaceholder, requiredSelectedItemsToApply, disableApplyWithoutChanges, popoverWidth, renderChipLabel, renderItem, onChange, onLoadMore, onSearch, onClose }: ItemSelectorProps<T>) => import("react/jsx-runtime").JSX.Element;
26
27
  export default ItemSelector;
@@ -1,24 +1,11 @@
1
1
  import * as React from 'react';
2
2
  import { PopoverProps } from '../popover/Popover';
3
- import { IconId } from '../icon';
4
- export type SelectableItem = {
5
- id: string;
6
- name: string;
7
- subtitle1?: string;
8
- subtitle2?: string;
9
- disabled?: boolean;
10
- selected: boolean;
11
- color?: string;
12
- iconId?: IconId;
13
- chipText?: string;
14
- tooltip?: string;
15
- isLoadingSubtitle2?: boolean;
16
- };
17
- export type SelectPopoverProps = Pick<PopoverProps, 'anchorEl'> & {
3
+ import { SelectableItem } from '../../models/SelectableItem';
4
+ export type SelectPopoverProps<T extends SelectableItem> = Pick<PopoverProps, 'anchorEl'> & {
18
5
  /**
19
6
  * Called every time the popover apply changes.
20
7
  */
21
- onApply: (selectedItemsIds: string[]) => void;
8
+ onApply: (selectedItemsIds: T['id'][]) => void;
22
9
  /**
23
10
  * Called every time the popover cancel changes.
24
11
  */
@@ -54,7 +41,7 @@ export type SelectPopoverProps = Pick<PopoverProps, 'anchorEl'> & {
54
41
  /**
55
42
  * The selectable items.
56
43
  */
57
- items: SelectableItem[];
44
+ items: T[];
58
45
  /**
59
46
  * Elements colors depending on state.
60
47
  */
@@ -65,7 +52,7 @@ export type SelectPopoverProps = Pick<PopoverProps, 'anchorEl'> & {
65
52
  /**
66
53
  * The selected items.
67
54
  */
68
- selectedItemsIds: string[];
55
+ selectedItemsIds: T['id'][];
69
56
  popoverWidth?: React.CSSProperties['width'];
70
57
  /** If `true`, the modal will not restore focus to previously focused element once modal is hidden or unmounted.*/
71
58
  disableRestoreFocus?: boolean;
@@ -103,9 +90,21 @@ export type SelectPopoverProps = Pick<PopoverProps, 'anchorEl'> & {
103
90
  centeredInScreen?: boolean;
104
91
  /** Padding for div content*/
105
92
  paddingContent?: string;
93
+ /**
94
+ * Component to override rendered item
95
+ */
96
+ selectableItemComponent?: React.ComponentType<T>;
97
+ /**
98
+ * Item number per row
99
+ */
100
+ itemsPerRow?: number;
101
+ /**
102
+ * Node as show as item children title
103
+ */
104
+ itemsTitle?: React.ReactNode;
106
105
  };
107
106
  /**
108
107
  * SelectPopover is a components that renders a complex selector with DataDisplayItems and is multiselectable, infinite scroll and search input.
109
108
  */
110
- declare const SelectPopover: ({ onApply, onCancel, onLoadMore, onSearch, debounce, multiple, hasMore, isLoading, isLoadingSubtitle2, requiredSelectedItemsToApply, searchPlaceholder, items, anchorEl, itemsColorStyles, selectedItemsIds, popoverWidth, disableRestoreFocus, applyButtonText, maxSelectedItems, keepCurrentSelectionOnSearch, emptyListPlaceholder, disableApplyWithoutChanges, centeredInScreen, paddingContent }: SelectPopoverProps) => import("react/jsx-runtime").JSX.Element;
109
+ declare const SelectPopover: <T extends SelectableItem = SelectableItem>({ onApply, onCancel, onLoadMore, onSearch, debounce, multiple, hasMore, isLoading, isLoadingSubtitle2, requiredSelectedItemsToApply, searchPlaceholder, items, anchorEl, itemsColorStyles, selectedItemsIds, popoverWidth, disableRestoreFocus, applyButtonText, maxSelectedItems, keepCurrentSelectionOnSearch, emptyListPlaceholder, disableApplyWithoutChanges, centeredInScreen, paddingContent, selectableItemComponent, itemsPerRow, itemsTitle }: SelectPopoverProps<T>) => import("react/jsx-runtime").JSX.Element;
111
110
  export default SelectPopover;
@@ -1,16 +1,9 @@
1
- import { IconId } from '../icon';
2
- export type SelectPopoverItemProps = {
3
- id: string;
4
- name: string;
5
- subtitle1?: string;
6
- subtitle2?: string;
7
- disabled?: boolean;
8
- iconId?: IconId;
9
- chipText?: string;
10
- color?: string;
11
- tooltip?: string;
12
- isLoadingSubtitle2?: boolean;
1
+ import * as React from 'react';
2
+ import { SelectableItem } from '../../models/SelectableItem';
3
+ export type SelectPopoverItemProps<T extends SelectableItem> = T & {
4
+ itemsPerRow?: number;
13
5
  onClick?: () => void;
6
+ selectableItemComponent?: React.ComponentType<T>;
14
7
  };
15
- declare const SelectPopoverItem: ({ id, name, subtitle1, subtitle2, disabled, iconId, chipText, color, tooltip, isLoadingSubtitle2, onClick }: SelectPopoverItemProps) => import("react/jsx-runtime").JSX.Element;
8
+ declare const SelectPopoverItem: <T extends SelectableItem>({ onClick, itemsPerRow, selectableItemComponent, ...rest }: SelectPopoverItemProps<T>) => import("react/jsx-runtime").JSX.Element;
16
9
  export default SelectPopoverItem;
@@ -1,5 +1,5 @@
1
- import { DateInterval } from '../../models/DateInterval';
2
- import { ComparisonInterval } from '../../models/ComparisonInterval';
1
+ import { DateInterval } from '../../../models/DateInterval';
2
+ import { ComparisonInterval } from '../../../models/ComparisonInterval';
3
3
  export type DateIntervalValues = {
4
4
  interval: DateInterval;
5
5
  startDate: Date;
@@ -8,11 +8,11 @@ export type DateIntervalValues = {
8
8
  comparisonStartDate: Date | null;
9
9
  comparisonEndDate: Date | null;
10
10
  };
11
- export type DateIntervalPickerProps = {
11
+ type DateIntervalPickerDefault = {
12
12
  /**
13
- * The identifier of the interval.
13
+ * Component variant.
14
14
  */
15
- interval: DateInterval;
15
+ variant?: 'default';
16
16
  /**
17
17
  * The start date of the date interval
18
18
  */
@@ -22,21 +22,21 @@ export type DateIntervalPickerProps = {
22
22
  */
23
23
  endDate: Date;
24
24
  /**
25
- * The color to mark the selected interval. If not provided, the Theme primary color will be used.
25
+ * The identifier of the interval.
26
26
  */
27
- color?: string;
27
+ interval: DateInterval;
28
28
  /**
29
- * The maximum quantity of days allowed to be selected in the date interval
29
+ * Whether it should allow comparison of intervals
30
30
  */
31
- maxSelectableDays: number;
31
+ allowCompare?: boolean;
32
32
  /**
33
- * Whether the date interval picker is disabled
33
+ * Also show time
34
34
  */
35
- disabled?: boolean;
35
+ showTime?: boolean;
36
36
  /**
37
- * Whether it should allow comparison of intervals
37
+ * Set of intervals to show at the DateIntervalPicker popover. All showed by default.
38
38
  */
39
- allowCompare?: boolean;
39
+ allowedIntervals?: DateInterval[];
40
40
  /**
41
41
  * The identifier of the comparison interval.
42
42
  */
@@ -58,30 +58,54 @@ export type DateIntervalPickerProps = {
58
58
  */
59
59
  intersectionColor?: string;
60
60
  /**
61
- * The minimum date allowed to be selected in the date interval.
62
- * By default it will be the maxDate minus the maxSelectableDays
61
+ * Function to be called when the date interval changes
63
62
  */
64
- minDate?: Date;
63
+ onChange?: (values: DateIntervalValues) => void;
64
+ };
65
+ type DateIntervalPickerInput = {
65
66
  /**
66
- * The maximum date allowed to be selected in the date interval.
67
- * By default it will be the current date
67
+ * Component variant.
68
68
  */
69
- maxDate?: Date;
69
+ variant: 'input';
70
70
  /**
71
- * Set of intervals to show at the DateIntervalPicker popover. All showed by default.
71
+ * The start date of the date interval
72
72
  */
73
- allowedIntervals?: DateInterval[];
73
+ startDate?: Date;
74
74
  /**
75
- * Also show time
75
+ * The end date of the date interval
76
76
  */
77
- showTime?: boolean;
77
+ endDate?: Date;
78
78
  /**
79
79
  * Function to be called when the date interval changes
80
80
  */
81
- onChange?: (values: DateIntervalValues) => void;
81
+ onChange: (values: Partial<Pick<DateIntervalValues, 'startDate' | 'endDate'>>) => void;
82
+ };
83
+ export type DateIntervalPickerProps = (DateIntervalPickerDefault | DateIntervalPickerInput) & {
84
+ /**
85
+ * The color to mark the selected interval. If not provided, the Theme primary color will be used.
86
+ */
87
+ color?: string;
88
+ /**
89
+ * The maximum quantity of days allowed to be selected in the date interval
90
+ */
91
+ maxSelectableDays: number;
92
+ /**
93
+ * Whether the date interval picker is disabled
94
+ */
95
+ disabled?: boolean;
96
+ /**
97
+ * The minimum date allowed to be selected in the date interval.
98
+ * By default it will be the maxDate minus the maxSelectableDays
99
+ */
100
+ minDate?: Date;
101
+ /**
102
+ * The maximum date allowed to be selected in the date interval.
103
+ * By default it will be the current date
104
+ */
105
+ maxDate?: Date;
82
106
  };
83
107
  /**
84
108
  * Date interval picker component, which allows to select an interval between two Dates.
85
109
  */
86
- declare const DateIntervalPicker: ({ interval, startDate, endDate, color, maxSelectableDays, disabled, allowCompare, comparisonInterval, comparisonStartDate, comparisonEndDate, comparisonColor, intersectionColor, minDate, maxDate, allowedIntervals, showTime, onChange }: DateIntervalPickerProps) => import("react/jsx-runtime").JSX.Element;
110
+ declare const DateIntervalPicker: ({ color, maxSelectableDays, disabled, minDate, maxDate, ...rest }: DateIntervalPickerProps) => import("react/jsx-runtime").JSX.Element;
87
111
  export default DateIntervalPicker;
@@ -0,0 +1,9 @@
1
+ import { DateIntervalPickerProps } from './DateIntervalPicker';
2
+ type DateIntervalPickerDefaultButtonProps = Pick<Exclude<DateIntervalPickerProps, {
3
+ variant: 'input';
4
+ }>, 'startDate' | 'endDate' | 'interval' | 'showTime' | 'comparisonStartDate' | 'comparisonEndDate' | 'disabled'> & {
5
+ isEndDateVisible: boolean;
6
+ onClick: (anchorEl: HTMLButtonElement) => void;
7
+ };
8
+ declare const DateIntervalPickerDefaultButton: ({ interval, startDate, endDate, disabled, comparisonStartDate, comparisonEndDate, showTime, isEndDateVisible, onClick }: DateIntervalPickerDefaultButtonProps) => import("react/jsx-runtime").JSX.Element;
9
+ export default DateIntervalPickerDefaultButton;
@@ -0,0 +1,10 @@
1
+ import { DateIntervalPickerProps } from './DateIntervalPicker';
2
+ type DateIntervalPickerInputButtonProps = Pick<Extract<DateIntervalPickerProps, {
3
+ variant: 'input';
4
+ }>, 'startDate' | 'endDate' | 'disabled'> & {
5
+ isPopoverOpen: boolean;
6
+ isEndDateVisible: boolean;
7
+ onClick: (anchorEl: HTMLInputElement) => void;
8
+ };
9
+ declare const DateIntervalPickerInputButton: ({ startDate, endDate, disabled, isPopoverOpen, isEndDateVisible, onClick }: DateIntervalPickerInputButtonProps) => import("react/jsx-runtime").JSX.Element;
10
+ export default DateIntervalPickerInputButton;
@@ -1,9 +1,9 @@
1
1
  export type FocusableInputDate = 'startDate' | 'endDate' | 'comparisonStartDate' | 'comparisonEndDate';
2
2
  export type DateIntervalPickerInputsProps = {
3
- startDate: string;
4
- startTime: Date;
5
- endDate: string;
6
- endTime: Date;
3
+ startDate?: string;
4
+ startTime?: Date;
5
+ endDate?: string;
6
+ endTime?: Date;
7
7
  comparisonStartDate: string;
8
8
  comparisonStartTime: Date;
9
9
  comparisonEndDate: string;
@@ -1,5 +1,5 @@
1
- import { ComparisonInterval } from '../../models/ComparisonInterval';
2
- import { DateInterval } from '../../models/DateInterval';
1
+ import { ComparisonInterval } from '../../../models/ComparisonInterval';
2
+ import { DateInterval } from '../../../models/DateInterval';
3
3
  export declare const dateIntervals: {
4
4
  readonly today: "TODAY";
5
5
  readonly yesterday: "YESTERDAY";
@@ -0,0 +1,54 @@
1
+ import { SimpleDate } from '../../../models/SimpleDate';
2
+ import { FocusableInputDate } from './DateIntervalPickerInputs';
3
+ import { DateInterval } from '../../../models/DateInterval';
4
+ import { ComparisonInterval } from '../../../models/ComparisonInterval';
5
+ export type DateIntervalPickerState = {
6
+ interval?: DateInterval;
7
+ highlightedInput: FocusableInputDate;
8
+ focusedDateInCalendar: SimpleDate | null;
9
+ startDate?: string;
10
+ startTime?: Date;
11
+ startSimpleDate: SimpleDate | null;
12
+ endDate?: string;
13
+ endTime?: Date;
14
+ endSimpleDate: SimpleDate | null;
15
+ comparisonInterval: ComparisonInterval;
16
+ comparisonStartDate: string;
17
+ comparisonStartTime: Date;
18
+ comparisonStartSimpleDate: SimpleDate | null;
19
+ comparisonEndDate: string;
20
+ comparisonEndTime: Date;
21
+ comparisonEndSimpleDate: SimpleDate | null;
22
+ isComparing: boolean | undefined;
23
+ };
24
+ export type DateIntervalPickerPopoverProps = {
25
+ variant?: 'default' | 'input';
26
+ interval: DateInterval;
27
+ startDate?: Date;
28
+ endDate?: Date;
29
+ color: string;
30
+ maxSelectableDays: number;
31
+ disabled?: boolean;
32
+ allowCompare?: boolean;
33
+ comparisonInterval?: ComparisonInterval | null;
34
+ comparisonStartDate?: Date | null;
35
+ comparisonEndDate?: Date | null;
36
+ comparisonColor: string;
37
+ intersectionColor: string;
38
+ minDate: Date;
39
+ maxDate: Date;
40
+ allowedIntervals?: DateInterval[];
41
+ anchorEl?: HTMLElement | null;
42
+ showTime?: boolean;
43
+ onApply: (values: {
44
+ interval: DateInterval;
45
+ startDate: Date;
46
+ endDate: Date;
47
+ comparisonInterval: ComparisonInterval | null;
48
+ comparisonStartDate: Date | null;
49
+ comparisonEndDate: Date | null;
50
+ }) => void;
51
+ onCancel: () => void;
52
+ };
53
+ declare const DateIntervalPickerPopover: ({ variant, interval, startDate, endDate, color, maxSelectableDays, allowCompare, comparisonInterval, comparisonStartDate, comparisonEndDate, comparisonColor, intersectionColor, anchorEl, minDate, maxDate, allowedIntervals, showTime, onApply, onCancel }: DateIntervalPickerPopoverProps) => import("react/jsx-runtime").JSX.Element;
54
+ export default DateIntervalPickerPopover;
@@ -0,0 +1,13 @@
1
+ import { DateIntervalPickerState } from './DateIntervalPickerPopover';
2
+ export type DateIntervalRangeSelectorProps = {
3
+ state: DateIntervalPickerState;
4
+ color: string;
5
+ minDate: Date;
6
+ maxDate: Date;
7
+ comparisonColor: string;
8
+ intersectionColor: string;
9
+ showTime: boolean;
10
+ onChange: (state: DateIntervalPickerState) => void;
11
+ };
12
+ declare const DateIntervalRangeSelector: ({ state, color, minDate, maxDate, comparisonColor, intersectionColor, showTime, onChange }: DateIntervalRangeSelectorProps) => import("react/jsx-runtime").JSX.Element;
13
+ export default DateIntervalRangeSelector;
@@ -4,8 +4,8 @@ export { default as DebouncedTextField } from './DebouncedTextField';
4
4
  export type { DebouncedTextFieldProps } from './DebouncedTextField';
5
5
  export { default as InputHelperText } from './InputHelperText';
6
6
  export type { InputHelperTextProps } from './InputHelperText';
7
- export { default as DateIntervalPicker } from './DateIntervalPicker';
8
- export type { DateIntervalPickerProps, DateIntervalValues } from './DateIntervalPicker';
7
+ export { default as DateIntervalPicker } from './date-interval-picker/DateIntervalPicker';
8
+ export type { DateIntervalPickerProps, DateIntervalValues } from './date-interval-picker/DateIntervalPicker';
9
9
  export { default as SelectPopoverItem } from './SelectPopoverItem';
10
10
  export type { SelectPopoverItemProps } from './SelectPopoverItem';
11
11
  export { default as TimezoneSelector } from './TimezoneSelector';
@@ -46,7 +46,8 @@ export type { PhoneFieldProps } from './PhoneField';
46
46
  export type { NumberFieldProps } from './NumberField';
47
47
  export type { DatePickerProps } from './DatePicker';
48
48
  export type { InputLabelProps } from './InputLabel';
49
- export type { SelectPopoverProps, SelectableItem } from './SelectPopover';
49
+ export type { SelectPopoverProps } from './SelectPopover';
50
+ export type { SelectableItem } from '../../models/SelectableItem';
50
51
  export type { CheckboxProps } from './Checkbox';
51
52
  export type { RadioProps } from './Radio';
52
53
  export type { PageSelectorProps } from './PageSelector';