@telus-uds/components-base 3.28.0 → 3.28.2
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 +20 -2
- package/lib/cjs/Autocomplete/Autocomplete.js +86 -32
- package/lib/cjs/Autocomplete/constants.js +2 -1
- package/lib/cjs/Carousel/Carousel.js +17 -17
- package/lib/cjs/Carousel/CarouselItem/CarouselItem.js +3 -3
- package/lib/cjs/Listbox/ListboxOverlay.js +7 -1
- package/lib/cjs/Listbox/PressableItem.js +2 -2
- package/lib/cjs/MultiSelectFilter/MultiSelectFilter.js +5 -1
- package/lib/cjs/TextInput/TextInputBase.js +2 -2
- package/lib/esm/Autocomplete/Autocomplete.js +87 -33
- package/lib/esm/Autocomplete/constants.js +1 -0
- package/lib/esm/Carousel/Carousel.js +17 -17
- package/lib/esm/Carousel/CarouselItem/CarouselItem.js +3 -3
- package/lib/esm/Listbox/ListboxOverlay.js +7 -1
- package/lib/esm/Listbox/PressableItem.js +3 -3
- package/lib/esm/MultiSelectFilter/MultiSelectFilter.js +5 -1
- package/lib/esm/TextInput/TextInputBase.js +2 -2
- package/lib/package.json +1 -1
- package/package.json +1 -1
- package/src/Autocomplete/Autocomplete.jsx +142 -77
- package/src/Autocomplete/constants.js +1 -0
- package/src/Carousel/Carousel.jsx +17 -17
- package/src/Carousel/CarouselItem/CarouselItem.jsx +3 -3
- package/src/Listbox/ListboxOverlay.jsx +9 -1
- package/src/Listbox/PressableItem.jsx +1 -1
- package/src/MultiSelectFilter/MultiSelectFilter.jsx +6 -1
- package/src/TextInput/TextInputBase.jsx +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,9 +1,27 @@
|
|
|
1
1
|
# Change Log - @telus-uds/components-base
|
|
2
2
|
|
|
3
|
-
This log was last generated on
|
|
3
|
+
This log was last generated on Tue, 03 Mar 2026 23:02:55 GMT and should not be manually modified.
|
|
4
4
|
|
|
5
5
|
<!-- Start content -->
|
|
6
6
|
|
|
7
|
+
## 3.28.2
|
|
8
|
+
|
|
9
|
+
Tue, 03 Mar 2026 23:02:55 GMT
|
|
10
|
+
|
|
11
|
+
### Patches
|
|
12
|
+
|
|
13
|
+
- `Carousel`: inverse variant navigation arrows fixed by always using raised style even in the inverse state (josue.higueros@telus.com)
|
|
14
|
+
- `Autocomplete`: add the ability to show all values and filter them (josue.higueroscalderon@telus.com)
|
|
15
|
+
|
|
16
|
+
## 3.28.1
|
|
17
|
+
|
|
18
|
+
Fri, 20 Feb 2026 23:53:11 GMT
|
|
19
|
+
|
|
20
|
+
### Patches
|
|
21
|
+
|
|
22
|
+
- `MultiSelectFilter`: onOpen callback now triggers when filter opens instead of when it closes (josue.higueroscalderon@telus.com)
|
|
23
|
+
- `Carousel`: fix peeking when using a larger maxWidth (guillermo.peitzner@telus.com)
|
|
24
|
+
|
|
7
25
|
## 3.28.0
|
|
8
26
|
|
|
9
27
|
Wed, 18 Feb 2026 02:50:19 GMT
|
|
@@ -18,7 +36,7 @@ Wed, 18 Feb 2026 02:50:19 GMT
|
|
|
18
36
|
### Patches
|
|
19
37
|
|
|
20
38
|
- `Card`: background image hidden behind the default background color issue fixed (josue.higueroscalderon@telus.com)
|
|
21
|
-
- `IconButton`: Fix wrong specific padding calculation
|
|
39
|
+
- `IconButton`: Fix wrong specific padding calculation (david.melara1@telus.com)
|
|
22
40
|
|
|
23
41
|
## 3.27.0
|
|
24
42
|
|
|
@@ -51,22 +51,36 @@ const highlightAllMatches = function (str) {
|
|
|
51
51
|
tokens: {
|
|
52
52
|
color: resultsTextColor
|
|
53
53
|
},
|
|
54
|
-
children: matchIndexes.reduce((acc, matchIndex, index) =>
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
54
|
+
children: matchIndexes.reduce((acc, matchIndex, index) => {
|
|
55
|
+
const prefix = index === 0 ? str.slice(0, matchIndex) : null;
|
|
56
|
+
const match = str.slice(matchIndex, matchIndex + substring.length);
|
|
57
|
+
const suffix = str.slice(matchIndex + substring.length, matchIndexes[index + 1] ?? str.length);
|
|
58
|
+
return [...acc, prefix ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_Typography.default, {
|
|
59
|
+
variant: {
|
|
60
|
+
bold: false
|
|
61
|
+
},
|
|
62
|
+
tokens: {
|
|
63
|
+
color: resultsTextColor
|
|
64
|
+
},
|
|
65
|
+
children: prefix
|
|
66
|
+
}, `pre-${matchIndex}`) : null, /*#__PURE__*/(0, _jsxRuntime.jsx)(_Typography.default, {
|
|
67
|
+
variant: {
|
|
68
|
+
bold: true
|
|
69
|
+
},
|
|
70
|
+
tokens: {
|
|
71
|
+
color: resultsTextColor
|
|
72
|
+
},
|
|
73
|
+
children: match
|
|
74
|
+
}, matchIndex), suffix ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_Typography.default, {
|
|
75
|
+
variant: {
|
|
76
|
+
bold: false
|
|
77
|
+
},
|
|
78
|
+
tokens: {
|
|
79
|
+
color: resultsTextColor
|
|
80
|
+
},
|
|
81
|
+
children: suffix
|
|
82
|
+
}, `post-${matchIndex}`) : null];
|
|
83
|
+
}, []).filter(Boolean)
|
|
70
84
|
})
|
|
71
85
|
);
|
|
72
86
|
};
|
|
@@ -100,12 +114,14 @@ const Autocomplete = /*#__PURE__*/_react.default.forwardRef((_ref2, ref) => {
|
|
|
100
114
|
isLoading = false,
|
|
101
115
|
items,
|
|
102
116
|
maxSuggestions = _constants.DEFAULT_MAX_SUGGESTIONS,
|
|
117
|
+
maxDropdownHeight = _constants.DEFAULT_MAX_DROPDOWN_HEIGHT,
|
|
103
118
|
minToSuggestion = _constants.DEFAULT_MIN_TO_SUGGESTION,
|
|
104
119
|
noResults,
|
|
105
120
|
onChange,
|
|
106
121
|
onClear,
|
|
107
122
|
onSelect,
|
|
108
123
|
readOnly,
|
|
124
|
+
showOptionsOnFocus = false,
|
|
109
125
|
validation,
|
|
110
126
|
value,
|
|
111
127
|
helpText = '',
|
|
@@ -154,7 +170,7 @@ const Autocomplete = /*#__PURE__*/_react.default.forwardRef((_ref2, ref) => {
|
|
|
154
170
|
hint,
|
|
155
171
|
label: inputLabel
|
|
156
172
|
} = supportsProps;
|
|
157
|
-
const hintExpansionEnabled = isFocused && helpText && !currentValue;
|
|
173
|
+
const hintExpansionEnabled = isFocused && !!helpText && !currentValue;
|
|
158
174
|
const {
|
|
159
175
|
overlaidPosition,
|
|
160
176
|
sourceRef: inputRef,
|
|
@@ -208,9 +224,10 @@ const Autocomplete = /*#__PURE__*/_react.default.forwardRef((_ref2, ref) => {
|
|
|
208
224
|
}
|
|
209
225
|
};
|
|
210
226
|
const handleChange = newValue => {
|
|
211
|
-
onChange?.(newValue
|
|
227
|
+
onChange?.(newValue);
|
|
212
228
|
setCurrentValue(newValue);
|
|
213
|
-
|
|
229
|
+
const shouldExpand = newValue?.length >= minToSuggestion || showOptionsOnFocus && isFocused && newValue?.length === 0;
|
|
230
|
+
setIsExpanded(shouldExpand);
|
|
214
231
|
if (!isControlled && initialItems !== undefined) {
|
|
215
232
|
setCurrentItems(initialItems.filter(_ref3 => {
|
|
216
233
|
let {
|
|
@@ -222,25 +239,29 @@ const Autocomplete = /*#__PURE__*/_react.default.forwardRef((_ref2, ref) => {
|
|
|
222
239
|
};
|
|
223
240
|
const handleSelect = selectedId => {
|
|
224
241
|
onSelect?.(selectedId);
|
|
225
|
-
const {
|
|
226
|
-
label: newValue,
|
|
227
|
-
nested,
|
|
228
|
-
title
|
|
229
|
-
} = (isControlled ? items : currentItems)?.find(_ref4 => {
|
|
242
|
+
const selectedItem = (isControlled ? items : currentItems)?.find(_ref4 => {
|
|
230
243
|
let {
|
|
231
244
|
id
|
|
232
245
|
} = _ref4;
|
|
233
246
|
return id === selectedId;
|
|
234
247
|
});
|
|
248
|
+
const {
|
|
249
|
+
label,
|
|
250
|
+
nested,
|
|
251
|
+
title
|
|
252
|
+
} = selectedItem;
|
|
235
253
|
if (title) return;
|
|
236
254
|
if (!nested) {
|
|
237
255
|
setNestedSelectedValue(null);
|
|
238
|
-
onChange?.(
|
|
256
|
+
onChange?.(label);
|
|
239
257
|
setIsExpanded(false);
|
|
258
|
+
setCurrentValue(label);
|
|
259
|
+
}
|
|
260
|
+
if (!isControlled && inputRef?.current) inputRef.current.value = label;
|
|
261
|
+
if (nested) {
|
|
262
|
+
setNestedSelectedValue(label);
|
|
263
|
+
setCurrentValue(label);
|
|
240
264
|
}
|
|
241
|
-
setCurrentValue(newValue);
|
|
242
|
-
if (!isControlled && inputRef?.current) inputRef.current.value = newValue;
|
|
243
|
-
if (nested) setNestedSelectedValue(newValue);
|
|
244
265
|
inputRef.current.focus();
|
|
245
266
|
};
|
|
246
267
|
|
|
@@ -288,15 +309,33 @@ const Autocomplete = /*#__PURE__*/_react.default.forwardRef((_ref2, ref) => {
|
|
|
288
309
|
};
|
|
289
310
|
}, [inputRef]);
|
|
290
311
|
const handleClose = event => {
|
|
291
|
-
if (event.type === 'keydown' && (event.key === 'Escape' || event.key === '27')
|
|
312
|
+
if (event.type === 'keydown' && (event.key === 'Escape' || event.key === '27')) {
|
|
292
313
|
setIsExpanded(false);
|
|
293
314
|
setNestedSelectedValue(null);
|
|
294
|
-
|
|
315
|
+
return;
|
|
316
|
+
}
|
|
317
|
+
if (event.type === 'keydown' && (event.key === 'ArrowDown' || event.key === 'Tab') && isExpanded && !isLoading && targetRef?.current) {
|
|
295
318
|
event.preventDefault();
|
|
296
319
|
targetRef.current.focus();
|
|
320
|
+
return;
|
|
321
|
+
}
|
|
322
|
+
if (event.type === 'click' || event.type === 'touchstart') {
|
|
323
|
+
const clickTarget = event.type === 'click' ? event.target : event.touches[0]?.target;
|
|
324
|
+
const isOutsideOverlay = openOverlayRef?.current && !openOverlayRef.current.contains(clickTarget);
|
|
325
|
+
const isOutsideInput = inputRef?.current && !inputRef.current.contains(clickTarget);
|
|
326
|
+
if (isOutsideOverlay && isOutsideInput) {
|
|
327
|
+
setIsExpanded(false);
|
|
328
|
+
setNestedSelectedValue(null);
|
|
329
|
+
}
|
|
297
330
|
}
|
|
298
331
|
};
|
|
299
|
-
|
|
332
|
+
// Calculate items to show based on current state
|
|
333
|
+
let itemsToShow = [];
|
|
334
|
+
if (currentValue?.length > 0) {
|
|
335
|
+
itemsToShow = itemsToSuggest(highlight(isControlled ? items : currentItems, currentValue, resultsTextColor));
|
|
336
|
+
} else if (showOptionsOnFocus && isFocused) {
|
|
337
|
+
itemsToShow = itemsToSuggest(isControlled ? items : currentItems || initialItems);
|
|
338
|
+
}
|
|
300
339
|
const helpTextToShow = isFocused && !currentValue ? helpText : noResults ?? getCopy('noResults');
|
|
301
340
|
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_View.default, {
|
|
302
341
|
style: staticStyles.container,
|
|
@@ -333,9 +372,15 @@ const Autocomplete = /*#__PURE__*/_react.default.forwardRef((_ref2, ref) => {
|
|
|
333
372
|
onChange: handleChange,
|
|
334
373
|
onFocus: () => {
|
|
335
374
|
setisFocused(true);
|
|
375
|
+
if (showOptionsOnFocus && (!currentValue || currentValue.length === 0)) {
|
|
376
|
+
setIsExpanded(true);
|
|
377
|
+
}
|
|
336
378
|
},
|
|
337
379
|
onBlur: () => {
|
|
338
380
|
setisFocused(false);
|
|
381
|
+
if (showOptionsOnFocus && (!currentValue || currentValue.length === 0)) {
|
|
382
|
+
setIsExpanded(false);
|
|
383
|
+
}
|
|
339
384
|
},
|
|
340
385
|
onClear: onClear,
|
|
341
386
|
onKeyPress: handleClose,
|
|
@@ -367,12 +412,13 @@ const Autocomplete = /*#__PURE__*/_react.default.forwardRef((_ref2, ref) => {
|
|
|
367
412
|
})
|
|
368
413
|
});
|
|
369
414
|
}
|
|
370
|
-
}), (isExpanded || hintExpansionEnabled) && isInputVisible && /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
|
|
415
|
+
}), (isExpanded || hintExpansionEnabled) && isInputVisible && (itemsToShow.length > 0 || isExpanded || hintExpansionEnabled) && /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
|
|
371
416
|
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Listbox.default.Overlay, {
|
|
372
417
|
overlaidPosition: overlaidPosition,
|
|
373
418
|
isReady: isReady,
|
|
374
419
|
minWidth: fullWidth ? inputWidth : _constants.MIN_LISTBOX_WIDTH,
|
|
375
420
|
maxWidth: inputWidth,
|
|
421
|
+
maxHeight: maxDropdownHeight,
|
|
376
422
|
onLayout: handleMeasure,
|
|
377
423
|
tokens: restOfTokens,
|
|
378
424
|
ref: openOverlayRef,
|
|
@@ -456,6 +502,10 @@ Autocomplete.propTypes = {
|
|
|
456
502
|
* Maximum number of suggestions provided at the same time
|
|
457
503
|
*/
|
|
458
504
|
maxSuggestions: _propTypes.default.number,
|
|
505
|
+
/**
|
|
506
|
+
* Maximum height (in pixels) of the dropdown before scrolling is enabled
|
|
507
|
+
*/
|
|
508
|
+
maxDropdownHeight: _propTypes.default.number,
|
|
459
509
|
/**
|
|
460
510
|
* Text or JSX to render when no results are available
|
|
461
511
|
*/
|
|
@@ -476,6 +526,10 @@ Autocomplete.propTypes = {
|
|
|
476
526
|
* Callback function to be called when an item is selected from the list
|
|
477
527
|
*/
|
|
478
528
|
onSelect: _propTypes.default.func,
|
|
529
|
+
/**
|
|
530
|
+
* When true, displays all available options when the input receives focus (even without typing)
|
|
531
|
+
*/
|
|
532
|
+
showOptionsOnFocus: _propTypes.default.bool,
|
|
479
533
|
/**
|
|
480
534
|
* Input value for controlled usage
|
|
481
535
|
*/
|
|
@@ -3,8 +3,9 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.MIN_LISTBOX_WIDTH = exports.INPUT_LEFT_PADDING = exports.DEFAULT_MIN_TO_SUGGESTION = exports.DEFAULT_MAX_SUGGESTIONS = void 0;
|
|
6
|
+
exports.MIN_LISTBOX_WIDTH = exports.INPUT_LEFT_PADDING = exports.DEFAULT_MIN_TO_SUGGESTION = exports.DEFAULT_MAX_SUGGESTIONS = exports.DEFAULT_MAX_DROPDOWN_HEIGHT = void 0;
|
|
7
7
|
const DEFAULT_MIN_TO_SUGGESTION = exports.DEFAULT_MIN_TO_SUGGESTION = 1;
|
|
8
8
|
const DEFAULT_MAX_SUGGESTIONS = exports.DEFAULT_MAX_SUGGESTIONS = 5;
|
|
9
|
+
const DEFAULT_MAX_DROPDOWN_HEIGHT = exports.DEFAULT_MAX_DROPDOWN_HEIGHT = 336; // Approximately 7 items (48px each)
|
|
9
10
|
const INPUT_LEFT_PADDING = exports.INPUT_LEFT_PADDING = 16;
|
|
10
11
|
const MIN_LISTBOX_WIDTH = exports.MIN_LISTBOX_WIDTH = 288;
|
|
@@ -91,7 +91,7 @@ const selectControlButtonPositionStyles = _ref => {
|
|
|
91
91
|
isAutoPlayEnabled,
|
|
92
92
|
viewport,
|
|
93
93
|
maxWidth,
|
|
94
|
-
|
|
94
|
+
containerWidth
|
|
95
95
|
} = _ref;
|
|
96
96
|
const styles = {};
|
|
97
97
|
let positionOffset = 0;
|
|
@@ -107,18 +107,19 @@ const selectControlButtonPositionStyles = _ref => {
|
|
|
107
107
|
}
|
|
108
108
|
}
|
|
109
109
|
if (enablePeeking) {
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
110
|
+
const {
|
|
111
|
+
peekingMiddleSpace,
|
|
112
|
+
peekingGap
|
|
113
|
+
} = getPeekingProps(viewport);
|
|
114
|
+
const clampedMaxWidth = Math.min(maxWidth || containerWidth, containerWidth);
|
|
115
|
+
const slideRightEdge = (containerWidth + clampedMaxWidth) / 2 - peekingMiddleSpace;
|
|
116
|
+
const buttonCenter = slideRightEdge + peekingGap / 2;
|
|
117
|
+
positionOffset = containerWidth - buttonCenter - buttonWidth / 2;
|
|
117
118
|
}
|
|
118
119
|
styles[positionProperty] = positionOffset;
|
|
119
120
|
return styles;
|
|
120
121
|
};
|
|
121
|
-
const selectPreviousNextNavigationButtonStyles = (previousNextNavigationButtonWidth, previousNextNavigationPosition, spaceBetweenSlideAndPreviousNextNavigation, isFirstSlide, isLastSlide, areStylesAppliedOnPreviousButton, enablePeeking, enableDisplayMultipleItemsPerSlide, isAutoPlayEnabled, viewport, maxWidth,
|
|
122
|
+
const selectPreviousNextNavigationButtonStyles = (previousNextNavigationButtonWidth, previousNextNavigationPosition, spaceBetweenSlideAndPreviousNextNavigation, isFirstSlide, isLastSlide, areStylesAppliedOnPreviousButton, enablePeeking, enableDisplayMultipleItemsPerSlide, isAutoPlayEnabled, viewport, maxWidth, containerWidth) => {
|
|
122
123
|
const styles = {
|
|
123
124
|
zIndex: 1,
|
|
124
125
|
position: 'absolute'
|
|
@@ -142,7 +143,7 @@ const selectPreviousNextNavigationButtonStyles = (previousNextNavigationButtonWi
|
|
|
142
143
|
isAutoPlayEnabled,
|
|
143
144
|
viewport,
|
|
144
145
|
maxWidth,
|
|
145
|
-
|
|
146
|
+
containerWidth
|
|
146
147
|
})
|
|
147
148
|
};
|
|
148
149
|
};
|
|
@@ -279,7 +280,7 @@ const calculateFinalWidth = (containerWidth, enablePeeking, viewport, maxWidth)
|
|
|
279
280
|
peekingGap,
|
|
280
281
|
peekingMiddleSpace
|
|
281
282
|
} = getPeekingProps(viewport);
|
|
282
|
-
const baseWidth = maxWidth || containerWidth;
|
|
283
|
+
const baseWidth = Math.min(maxWidth || containerWidth, containerWidth);
|
|
283
284
|
finalWidth = baseWidth - peekingMiddleSpace * _Constants.PEEKING_MULTIPLIER + peekingGap;
|
|
284
285
|
}
|
|
285
286
|
return finalWidth;
|
|
@@ -499,7 +500,7 @@ const Carousel = /*#__PURE__*/_react.default.forwardRef((_ref3, ref) => {
|
|
|
499
500
|
peekingMiddleSpace
|
|
500
501
|
} = getPeekingProps(viewport);
|
|
501
502
|
let finalWidth;
|
|
502
|
-
const baseWidth = maxWidth || containerLayoutRef.current.width;
|
|
503
|
+
const baseWidth = Math.min(maxWidth || containerLayoutRef.current.width, containerLayoutRef.current.width);
|
|
503
504
|
const slideWide = baseWidth - peekingMiddleSpace * _Constants.PEEKING_MULTIPLIER;
|
|
504
505
|
if (activeIndexRef.current === 0) {
|
|
505
506
|
finalWidth = 0;
|
|
@@ -923,8 +924,7 @@ const Carousel = /*#__PURE__*/_react.default.forwardRef((_ref3, ref) => {
|
|
|
923
924
|
// Related discussion - https://github.com/telus/universal-design-system/issues/1549
|
|
924
925
|
const previousNextIconButtonVariants = {
|
|
925
926
|
size: previousNextIconSize,
|
|
926
|
-
raised:
|
|
927
|
-
inverse: variant?.inverse
|
|
927
|
+
raised: true
|
|
928
928
|
};
|
|
929
929
|
const getCopyWithPlaceholders = _react.default.useCallback(copyKey => {
|
|
930
930
|
const copyText = getCopy(copyKey).replace(/%\{title\}/g, title).replace(/%\{itemLabel\}/g, itemLabel).replace(/%\{stepNumber\}/g, activeIndex + 1).replace(/%\{stepCount\}/g, totalItems);
|
|
@@ -1021,7 +1021,7 @@ const Carousel = /*#__PURE__*/_react.default.forwardRef((_ref3, ref) => {
|
|
|
1021
1021
|
isAutoPlayEnabled,
|
|
1022
1022
|
viewport,
|
|
1023
1023
|
maxWidth,
|
|
1024
|
-
|
|
1024
|
+
containerWidth: containerLayout.width
|
|
1025
1025
|
})],
|
|
1026
1026
|
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_IconButton.default, {
|
|
1027
1027
|
icon: isCarouselPlaying ? pauseIcon : playIcon,
|
|
@@ -1030,7 +1030,7 @@ const Carousel = /*#__PURE__*/_react.default.forwardRef((_ref3, ref) => {
|
|
|
1030
1030
|
onPress: onAnimationControlButtonPress
|
|
1031
1031
|
})
|
|
1032
1032
|
}) : null, showPreviousNextNavigation && totalItems > 1 ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_View.default, {
|
|
1033
|
-
style: selectPreviousNextNavigationButtonStyles(previousNextNavigationButtonWidth, previousNextNavigationPosition, spaceBetweenSlideAndPreviousNextNavigation, isFirstSlide, isLastSlide, true, enablePeeking, enableDisplayMultipleItemsPerSlide, isAutoPlayEnabled, viewport, maxWidth,
|
|
1033
|
+
style: selectPreviousNextNavigationButtonStyles(previousNextNavigationButtonWidth, previousNextNavigationPosition, spaceBetweenSlideAndPreviousNextNavigation, isFirstSlide, isLastSlide, true, enablePeeking, enableDisplayMultipleItemsPerSlide, isAutoPlayEnabled, viewport, maxWidth, containerLayout.width),
|
|
1034
1034
|
testID: "previous-button-container",
|
|
1035
1035
|
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_IconButton.default, {
|
|
1036
1036
|
onLayout: onPreviousNextNavigationButtonLayout,
|
|
@@ -1090,7 +1090,7 @@ const Carousel = /*#__PURE__*/_react.default.forwardRef((_ref3, ref) => {
|
|
|
1090
1090
|
})
|
|
1091
1091
|
})
|
|
1092
1092
|
}), showPreviousNextNavigation && totalItems > 1 ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_View.default, {
|
|
1093
|
-
style: selectPreviousNextNavigationButtonStyles(previousNextNavigationButtonWidth, previousNextNavigationPosition, spaceBetweenSlideAndPreviousNextNavigation, isFirstSlide, isLastSlide, false, enablePeeking, enableDisplayMultipleItemsPerSlide, isAutoPlayEnabled, viewport, maxWidth,
|
|
1093
|
+
style: selectPreviousNextNavigationButtonStyles(previousNextNavigationButtonWidth, previousNextNavigationPosition, spaceBetweenSlideAndPreviousNextNavigation, isFirstSlide, isLastSlide, false, enablePeeking, enableDisplayMultipleItemsPerSlide, isAutoPlayEnabled, viewport, maxWidth, containerLayout.width),
|
|
1094
1094
|
testID: "next-button-container",
|
|
1095
1095
|
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_IconButton.default, {
|
|
1096
1096
|
onLayout: onPreviousNextNavigationButtonLayout,
|
|
@@ -31,10 +31,10 @@ const selectContainerStyle = _ref => {
|
|
|
31
31
|
let marginLeft = 0;
|
|
32
32
|
if (enablePeeking) {
|
|
33
33
|
const isFirst = elementIndex === 0;
|
|
34
|
-
const
|
|
35
|
-
adjustedWidth =
|
|
34
|
+
const clampedMaxWidth = Math.min(maxWidth || width, width);
|
|
35
|
+
adjustedWidth = clampedMaxWidth - peekingMiddleSpace * 2;
|
|
36
36
|
if (isFirst) {
|
|
37
|
-
marginLeft = peekingMiddleSpace + (viewportWidth -
|
|
37
|
+
marginLeft = peekingMiddleSpace + (viewportWidth - clampedMaxWidth) / 2;
|
|
38
38
|
} else {
|
|
39
39
|
marginLeft = peekingGap;
|
|
40
40
|
}
|
|
@@ -35,6 +35,7 @@ const DropdownOverlay = /*#__PURE__*/_react.default.forwardRef((_ref, ref) => {
|
|
|
35
35
|
isReady = false,
|
|
36
36
|
overlaidPosition,
|
|
37
37
|
maxWidth,
|
|
38
|
+
maxHeight,
|
|
38
39
|
minWidth,
|
|
39
40
|
onLayout,
|
|
40
41
|
tokens,
|
|
@@ -50,12 +51,16 @@ const DropdownOverlay = /*#__PURE__*/_react.default.forwardRef((_ref, ref) => {
|
|
|
50
51
|
maxWidth,
|
|
51
52
|
minWidth
|
|
52
53
|
}, staticStyles.positioner, !isReady && staticStyles.hidden],
|
|
54
|
+
onMouseDown: e => {
|
|
55
|
+
e.preventDefault();
|
|
56
|
+
},
|
|
53
57
|
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Card.default, {
|
|
54
58
|
tokens: {
|
|
55
59
|
shadow: systemTokens.shadow,
|
|
56
60
|
borderRadius: systemTokens.borderRadius,
|
|
57
61
|
...(_Platform.default.OS === 'web' && {
|
|
58
|
-
|
|
62
|
+
maxHeight,
|
|
63
|
+
overflowY: 'auto'
|
|
59
64
|
}),
|
|
60
65
|
paddingBottom: paddingVertical,
|
|
61
66
|
paddingTop: paddingVertical,
|
|
@@ -85,6 +90,7 @@ DropdownOverlay.propTypes = {
|
|
|
85
90
|
width: _propTypes.default.number
|
|
86
91
|
}),
|
|
87
92
|
maxWidth: _propTypes.default.number,
|
|
93
|
+
maxHeight: _propTypes.default.number,
|
|
88
94
|
minWidth: _propTypes.default.number,
|
|
89
95
|
onLayout: _propTypes.default.func,
|
|
90
96
|
tokens: _propTypes.default.object,
|
|
@@ -129,9 +129,9 @@ const PressableItem = /*#__PURE__*/_react.default.forwardRef((_ref2, ref) => {
|
|
|
129
129
|
onPress(event);
|
|
130
130
|
},
|
|
131
131
|
children: pressableState => {
|
|
132
|
-
return /*#__PURE__*/(0, _jsxRuntime.
|
|
132
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Text.default, {
|
|
133
133
|
style: selectTextStyles(resolveButtonTokens(pressableState)),
|
|
134
|
-
children:
|
|
134
|
+
children: children
|
|
135
135
|
});
|
|
136
136
|
}
|
|
137
137
|
});
|
|
@@ -185,6 +185,11 @@ const MultiSelectFilter = /*#__PURE__*/_react.default.forwardRef((_ref3, ref) =>
|
|
|
185
185
|
setMaxWidth(items.length >= rowLimit);
|
|
186
186
|
}, [items.length, rowLimit]);
|
|
187
187
|
_react.default.useEffect(() => setCheckedIds(currentValues ?? []), [currentValues]);
|
|
188
|
+
_react.default.useEffect(() => {
|
|
189
|
+
if (isOpen && onOpen) {
|
|
190
|
+
onOpen();
|
|
191
|
+
}
|
|
192
|
+
}, [isOpen, onOpen]);
|
|
188
193
|
const uniqueFields = ['id', 'label'];
|
|
189
194
|
if (!(0, _utils.containUniqueFields)(items, uniqueFields)) {
|
|
190
195
|
throw new Error(`MultiSelectFilter items must have unique ${uniqueFields.join(', ')}`);
|
|
@@ -197,7 +202,6 @@ const MultiSelectFilter = /*#__PURE__*/_react.default.forwardRef((_ref3, ref) =>
|
|
|
197
202
|
}]);
|
|
198
203
|
const handleChange = event => {
|
|
199
204
|
if (pressHandlers.onPress) pressHandlers?.onPress(event);
|
|
200
|
-
if (isOpen) onOpen();
|
|
201
205
|
setIsOpen(!isOpen);
|
|
202
206
|
};
|
|
203
207
|
const onApply = e => {
|
|
@@ -278,8 +278,8 @@ const TextInputBase = /*#__PURE__*/_react.default.forwardRef((_ref8, ref) => {
|
|
|
278
278
|
}
|
|
279
279
|
}, [element, pattern]);
|
|
280
280
|
const handleChangeText = event => {
|
|
281
|
-
const text = event.nativeEvent?.text
|
|
282
|
-
let filteredText = isNumeric ? text?.replace(/[^\d]/g, '') : text;
|
|
281
|
+
const text = event.nativeEvent?.text ?? event.target?.value;
|
|
282
|
+
let filteredText = isNumeric ? text?.replace(/[^\d]/g, '') || undefined : text;
|
|
283
283
|
if (type === 'card' && filteredText) {
|
|
284
284
|
const formattedValue = filteredText.replace(/[^a-zA-Z0-9]/g, '');
|
|
285
285
|
const regex = new RegExp(`([a-zA-Z0-9]{4})(?=[a-zA-Z0-9])`, 'g');
|