@carbon/react 1.84.0-rc.0 → 1.84.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.
Files changed (39) hide show
  1. package/.playwright/INTERNAL_AVT_REPORT_DO_NOT_USE.json +883 -883
  2. package/es/components/ComposedModal/ComposedModal.js +19 -2
  3. package/es/components/Modal/Modal.js +19 -2
  4. package/es/components/MultiSelect/FilterableMultiSelect.js +21 -0
  5. package/es/components/OverflowMenu/OverflowMenu.js +4 -5
  6. package/es/components/PageHeader/PageHeader.d.ts +10 -9
  7. package/es/components/PageHeader/PageHeader.js +92 -32
  8. package/es/components/PageHeader/index.d.ts +2 -2
  9. package/es/components/PageHeader/index.js +1 -1
  10. package/es/components/Search/Search.js +0 -1
  11. package/es/components/Slider/Slider.js +6 -0
  12. package/es/components/TextArea/TextArea.js +4 -4
  13. package/es/components/TileGroup/TileGroup.d.ts +4 -4
  14. package/es/components/TileGroup/TileGroup.js +45 -53
  15. package/es/components/TileGroup/index.d.ts +3 -3
  16. package/es/components/UIShell/HeaderMenuItem.js +2 -1
  17. package/es/index.js +1 -1
  18. package/es/internal/useOverflowItems.d.ts +29 -0
  19. package/es/internal/useOverflowItems.js +122 -0
  20. package/lib/components/ComposedModal/ComposedModal.js +19 -2
  21. package/lib/components/Modal/Modal.js +19 -2
  22. package/lib/components/MultiSelect/FilterableMultiSelect.js +21 -0
  23. package/lib/components/OverflowMenu/OverflowMenu.js +4 -5
  24. package/lib/components/PageHeader/PageHeader.d.ts +10 -9
  25. package/lib/components/PageHeader/PageHeader.js +90 -32
  26. package/lib/components/PageHeader/index.d.ts +2 -2
  27. package/lib/components/PageHeader/index.js +0 -2
  28. package/lib/components/Search/Search.js +0 -1
  29. package/lib/components/Slider/Slider.js +6 -0
  30. package/lib/components/TextArea/TextArea.js +4 -4
  31. package/lib/components/TileGroup/TileGroup.d.ts +4 -4
  32. package/lib/components/TileGroup/TileGroup.js +44 -52
  33. package/lib/components/TileGroup/index.d.ts +3 -3
  34. package/lib/components/UIShell/HeaderMenuItem.js +2 -1
  35. package/lib/index.js +1 -1
  36. package/lib/internal/useOverflowItems.d.ts +29 -0
  37. package/lib/internal/useOverflowItems.js +126 -0
  38. package/package.json +9 -9
  39. package/telemetry.yml +2 -0
@@ -0,0 +1,122 @@
1
+ /**
2
+ * Copyright IBM Corp. 2016, 2023
3
+ *
4
+ * This source code is licensed under the Apache-2.0 license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+ import { useRef, useState, useMemo, useEffect } from 'react';
9
+ import { useResizeObserver } from './useResizeObserver.js';
10
+ import { usePreviousValue } from './usePreviousValue.js';
11
+
12
+ /**
13
+ * Manages overflow items in a container by automatically hiding items that don't fit.
14
+ * @param items - Array of items to manage for overflow, each must have an `id` property.
15
+ * @param containerRef - React ref to the container element that holds the items.
16
+ * @param offsetRef - Optional ref to an offset element (like a "more" button) whose width is reserved when calculating available space.
17
+ * @param maxItems - Optional maximum number of visible items. If undefined, only container space constrains visibility.
18
+ * @param onChange - Optional callback called when hidden items change. Receives array of currently hidden items.
19
+ * @returns Object with `visibleItems` (items to display), `hiddenItems` (items that don't fit), and `itemRefHandler` (function to attach refs to items for width measurement).
20
+ */
21
+
22
+ const useOverflowItems = (items, containerRef, offsetRef, maxItems, onChange) => {
23
+ const itemsRef = useRef(null);
24
+ const [maxWidth, setMaxWidth] = useState(0);
25
+ if (!items || !Array.isArray(items)) {
26
+ return {
27
+ visibleItems: [],
28
+ hiddenItems: [],
29
+ itemRefHandler: () => {}
30
+ };
31
+ }
32
+ const handleResize = () => {
33
+ if (containerRef.current) {
34
+ const offset = offsetRef?.current?.offsetWidth || 0;
35
+ const newMax = containerRef.current.offsetWidth - offset;
36
+ setMaxWidth(newMax);
37
+ }
38
+ };
39
+ useResizeObserver({
40
+ ref: containerRef,
41
+ onResize: handleResize
42
+ });
43
+ const getMap = () => {
44
+ if (!itemsRef.current) {
45
+ itemsRef.current = new Map();
46
+ }
47
+ return itemsRef.current;
48
+ };
49
+ const itemRefHandler = (id, node) => {
50
+ const map = getMap();
51
+ if (node) {
52
+ const style = getComputedStyle?.(node);
53
+ const totalWidth = node.offsetWidth + parseInt(style.marginLeft) + parseInt(style.marginRight);
54
+ map.set(id, totalWidth);
55
+ }
56
+ return () => {
57
+ map.delete(id);
58
+ };
59
+ };
60
+ const getVisibleItems = () => {
61
+ if (!items || Array.isArray(items) === false) {
62
+ return [];
63
+ }
64
+ if (!containerRef) {
65
+ return items;
66
+ }
67
+ const map = getMap();
68
+ let maxReached = false;
69
+ let accumulatedWidth = 0;
70
+ const visibleItems = items.slice(0, maxItems).reduce((prev, cur) => {
71
+ if (maxReached) {
72
+ return prev;
73
+ }
74
+ const itemWidth = map.get(cur.id) || 0;
75
+ const willFit = accumulatedWidth + itemWidth <= maxWidth;
76
+ if (willFit) {
77
+ accumulatedWidth += itemWidth;
78
+ prev.push(cur);
79
+ } else {
80
+ maxReached = true;
81
+ }
82
+ return prev;
83
+ }, []);
84
+ return visibleItems;
85
+ };
86
+
87
+ // Memoize visible items calculation to avoid recalculating on every render
88
+ const visibleItems = useMemo(() => {
89
+ if (!Array.isArray(items)) {
90
+ return [];
91
+ }
92
+ return getVisibleItems();
93
+ }, [items, maxWidth, maxItems]);
94
+
95
+ // Memoize hidden items calculation
96
+ const hiddenItems = useMemo(() => {
97
+ if (!Array.isArray(items)) {
98
+ return [];
99
+ }
100
+ return items.slice(visibleItems.length);
101
+ }, [items, visibleItems]);
102
+
103
+ // Use previous value to compare and only call onChange when needed
104
+ const previousHiddenItems = usePreviousValue(hiddenItems);
105
+
106
+ // Only call onChange if hidden items actually changed
107
+ useEffect(() => {
108
+ if (previousHiddenItems && onChange) {
109
+ const hasChanged = hiddenItems.length !== previousHiddenItems.length || hiddenItems.some((item, index) => item !== previousHiddenItems[index]);
110
+ if (hasChanged) {
111
+ onChange(hiddenItems);
112
+ }
113
+ }
114
+ }, [hiddenItems, previousHiddenItems, onChange]);
115
+ return {
116
+ visibleItems,
117
+ itemRefHandler,
118
+ hiddenItems
119
+ };
120
+ };
121
+
122
+ export { useOverflowItems as default };
@@ -186,7 +186,7 @@ const ComposedModal = /*#__PURE__*/React__default["default"].forwardRef(function
186
186
  target: oldActiveNode,
187
187
  relatedTarget: currentActiveNode
188
188
  }) {
189
- if (open && currentActiveNode && oldActiveNode && innerModal.current) {
189
+ if (!enableDialogElement && !focusTrapWithoutSentinels && open && currentActiveNode && oldActiveNode && innerModal.current) {
190
190
  const {
191
191
  current: bodyNode
192
192
  } = innerModal;
@@ -205,6 +205,23 @@ const ComposedModal = /*#__PURE__*/React__default["default"].forwardRef(function
205
205
  selectorsFloatingMenus: selectorsFloatingMenus?.filter(Boolean)
206
206
  });
207
207
  }
208
+
209
+ // Adjust scroll if needed so that element with focus is not obscured by gradient
210
+ const modalContent = document.querySelector(`.${prefix}--modal-content`);
211
+ if (!modalContent || !modalContent.classList.contains(`${prefix}--modal-scroll-content`) || !currentActiveNode || !modalContent.contains(currentActiveNode)) {
212
+ return;
213
+ }
214
+ const lastContent = modalContent.children[modalContent.children.length - 1];
215
+ const gradientSpacing = modalContent.scrollHeight - lastContent.offsetTop - lastContent.clientHeight;
216
+ for (let elem of modalContent.children) {
217
+ if (elem.contains(currentActiveNode)) {
218
+ const spaceBelow = modalContent.clientHeight - elem.offsetTop + modalContent.scrollTop - elem.clientHeight;
219
+ if (spaceBelow < gradientSpacing) {
220
+ modalContent.scrollTop = modalContent.scrollTop + (gradientSpacing - spaceBelow);
221
+ }
222
+ break;
223
+ }
224
+ }
208
225
  }
209
226
  function closeModal(evt) {
210
227
  if (!onClose || onClose(evt) !== false) {
@@ -319,7 +336,7 @@ const ComposedModal = /*#__PURE__*/React__default["default"].forwardRef(function
319
336
  role: "presentation",
320
337
  ref: ref,
321
338
  "aria-hidden": !open,
322
- onBlur: !enableDialogElement && !focusTrapWithoutSentinels ? handleBlur : () => {},
339
+ onBlur: handleBlur,
323
340
  onClick: events.composeEventHandlers([rest?.onClick, handleOnClick]),
324
341
  onMouseDown: events.composeEventHandlers([rest?.onMouseDown, handleOnMouseDown]),
325
342
  onKeyDown: handleKeyDown,
@@ -139,7 +139,7 @@ const Modal = /*#__PURE__*/React__default["default"].forwardRef(function Modal({
139
139
  target: oldActiveNode,
140
140
  relatedTarget: currentActiveNode
141
141
  }) {
142
- if (open && oldActiveNode instanceof HTMLElement && currentActiveNode instanceof HTMLElement) {
142
+ if (!enableDialogElement && open && oldActiveNode instanceof HTMLElement && currentActiveNode instanceof HTMLElement) {
143
143
  const {
144
144
  current: bodyNode
145
145
  } = innerModal;
@@ -158,6 +158,23 @@ const Modal = /*#__PURE__*/React__default["default"].forwardRef(function Modal({
158
158
  selectorsFloatingMenus
159
159
  });
160
160
  }
161
+
162
+ // Adjust scroll if needed so that element with focus is not obscured by gradient
163
+ const modalContent = document.querySelector(`.${prefix}--modal-content`);
164
+ if (!modalContent || !modalContent.classList.contains(`${prefix}--modal-scroll-content`) || !currentActiveNode || !modalContent.contains(currentActiveNode)) {
165
+ return;
166
+ }
167
+ const lastContent = modalContent.children[modalContent.children.length - 1];
168
+ const gradientSpacing = modalContent.scrollHeight - lastContent.offsetTop - lastContent.clientHeight;
169
+ for (let elem of modalContent.children) {
170
+ if (elem.contains(currentActiveNode)) {
171
+ const spaceBelow = modalContent.clientHeight - elem.offsetTop + modalContent.scrollTop - elem.clientHeight;
172
+ if (spaceBelow < gradientSpacing) {
173
+ modalContent.scrollTop = modalContent.scrollTop + (gradientSpacing - spaceBelow);
174
+ }
175
+ break;
176
+ }
177
+ }
161
178
  }
162
179
  const onSecondaryButtonClick = onSecondarySubmit ? onSecondarySubmit : onRequestClose;
163
180
  const modalClasses = cx__default["default"](`${prefix}--modal`, {
@@ -414,7 +431,7 @@ const Modal = /*#__PURE__*/React__default["default"].forwardRef(function Modal({
414
431
  level: 0,
415
432
  onKeyDown: handleKeyDown,
416
433
  onClick: events.composeEventHandlers([rest?.onClick, handleOnClick]),
417
- onBlur: !enableDialogElement ? handleBlur : () => {},
434
+ onBlur: handleBlur,
418
435
  className: modalClasses,
419
436
  role: "presentation",
420
437
  ref: ref
@@ -260,6 +260,27 @@ const FilterableMultiSelect = /*#__PURE__*/React.forwardRef(function FilterableM
260
260
  onMenuChange?.(isOpen);
261
261
  }
262
262
  }, [isOpen, onMenuChange, open]);
263
+ React.useEffect(() => {
264
+ const handleClickOutside = event => {
265
+ const target = event.target;
266
+ const wrapper = document.getElementById(id)?.closest(`.${prefix}--multi-select__wrapper`);
267
+
268
+ // If click is outside our component and menu is open or input is focused
269
+ if (wrapper && !wrapper.contains(target)) {
270
+ if (isOpen || inputFocused) {
271
+ setIsOpen(false);
272
+ setInputFocused(false);
273
+ setInputValue('');
274
+ }
275
+ }
276
+ };
277
+ if (inputFocused || isOpen) {
278
+ document.addEventListener('mousedown', handleClickOutside);
279
+ }
280
+ return () => {
281
+ document.removeEventListener('mousedown', handleClickOutside);
282
+ };
283
+ }, [isOpen, inputFocused]);
263
284
  const {
264
285
  getToggleButtonProps,
265
286
  getLabelProps,
@@ -154,14 +154,14 @@ const OverflowMenu = /*#__PURE__*/React.forwardRef(({
154
154
  setHasMountedTrigger(true);
155
155
  }
156
156
  }, []);
157
-
158
- // Call `onClose` when menu closes.
159
157
  React.useEffect(() => {
160
- if (!open && prevOpenState.current) {
158
+ if (open && !prevOpenState.current) {
159
+ onOpen();
160
+ } else if (!open && prevOpenState.current) {
161
161
  onClose();
162
162
  }
163
163
  prevOpenState.current = open;
164
- }, [open, onClose]);
164
+ }, [open, onClose, onOpen]);
165
165
  useOutsideClick.useOutsideClick(wrapperRef, ({
166
166
  target
167
167
  }) => {
@@ -270,7 +270,6 @@ const OverflowMenu = /*#__PURE__*/React.forwardRef(({
270
270
  }
271
271
  }
272
272
  }, !hasFocusin);
273
- onOpen();
274
273
  };
275
274
  const getTarget = () => {
276
275
  const triggerEl = triggerRef.current;
@@ -6,7 +6,7 @@
6
6
  */
7
7
  import React, { type ComponentType, type FunctionComponent } from 'react';
8
8
  import PropTypes from 'prop-types';
9
- import { Tabs as BaseTabs } from '../Tabs/Tabs';
9
+ import { TYPES } from '../Tag/Tag';
10
10
  /**
11
11
  * ----------
12
12
  * PageHeader
@@ -199,16 +199,18 @@ declare const PageHeaderHeroImage: {
199
199
  * PageHeaderTabBar
200
200
  * ----------------
201
201
  */
202
+ interface TagItem {
203
+ type: keyof typeof TYPES;
204
+ text: string;
205
+ size?: 'sm' | 'md' | 'lg';
206
+ id: string;
207
+ }
202
208
  interface PageHeaderTabBarProps {
203
209
  children?: React.ReactNode;
204
210
  className?: string;
211
+ tags?: TagItem[];
205
212
  }
206
213
  declare const PageHeaderTabBar: React.ForwardRefExoticComponent<PageHeaderTabBarProps & React.RefAttributes<HTMLDivElement>>;
207
- interface PageHeaderTabsProps extends React.ComponentProps<typeof BaseTabs> {
208
- children?: React.ReactNode;
209
- className?: string;
210
- }
211
- declare const PageHeaderTabs: React.ForwardRefExoticComponent<PageHeaderTabsProps & React.RefAttributes<HTMLDivElement>>;
212
214
  /**
213
215
  * -------
214
216
  * Exports
@@ -272,6 +274,5 @@ declare const HeroImage: {
272
274
  };
273
275
  };
274
276
  declare const TabBar: React.ForwardRefExoticComponent<PageHeaderTabBarProps & React.RefAttributes<HTMLDivElement>>;
275
- declare const Tabs: React.ForwardRefExoticComponent<PageHeaderTabsProps & React.RefAttributes<HTMLDivElement>>;
276
- export { PageHeader, PageHeaderBreadcrumbBar, PageHeaderContent, PageHeaderContentPageActions, PageHeaderContentText, PageHeaderHeroImage, PageHeaderTabBar, PageHeaderTabs, Root, BreadcrumbBar, Content, ContentPageActions, ContentText, HeroImage, TabBar, Tabs, };
277
- export type { PageHeaderProps, PageHeaderBreadcrumbBarProps, PageHeaderContentProps, PageHeaderContentPageActionsProps, PageHeaderContentTextProps, PageHeaderHeroImageProps, PageHeaderTabBarProps, PageHeaderTabsProps, };
277
+ export { PageHeader, PageHeaderBreadcrumbBar, PageHeaderContent, PageHeaderContentPageActions, PageHeaderContentText, PageHeaderHeroImage, PageHeaderTabBar, Root, BreadcrumbBar, Content, ContentPageActions, ContentText, HeroImage, TabBar, };
278
+ export type { PageHeaderProps, PageHeaderBreadcrumbBarProps, PageHeaderContentProps, PageHeaderContentPageActionsProps, PageHeaderContentTextProps, PageHeaderHeroImageProps, PageHeaderTabBarProps, };
@@ -24,7 +24,14 @@ var DefinitionTooltip = require('../Tooltip/DefinitionTooltip.js');
24
24
  require('../Tooltip/Tooltip.js');
25
25
  var AspectRatio = require('../AspectRatio/AspectRatio.js');
26
26
  var utilities = require('@carbon/utilities');
27
- var Tabs$1 = require('../Tabs/Tabs.js');
27
+ var Tag = require('../Tag/Tag.js');
28
+ require('../Tag/DismissibleTag.js');
29
+ var OperationalTag = require('../Tag/OperationalTag.js');
30
+ require('../Tag/SelectableTag.js');
31
+ require('../Tag/Tag.Skeleton.js');
32
+ var useOverflowItems = require('../../internal/useOverflowItems.js');
33
+ var index$1 = require('../Popover/index.js');
34
+ var useId = require('../../internal/useId.js');
28
35
  require('../Grid/FlexGrid.js');
29
36
  var Grid = require('../Grid/Grid.js');
30
37
  require('../Grid/Row.js');
@@ -365,46 +372,101 @@ PageHeaderHeroImage.propTypes = {
365
372
  const PageHeaderTabBar = /*#__PURE__*/React__default["default"].forwardRef(function PageHeaderTabBar({
366
373
  className,
367
374
  children,
375
+ tags = [],
368
376
  ...other
369
377
  }, ref) {
370
378
  const prefix = usePrefix.usePrefix();
371
379
  const classNames = cx__default["default"]({
372
380
  [`${prefix}--page-header__tab-bar`]: true
373
381
  }, className);
382
+ // Early return if no tags are provided
383
+ if (!tags.length) {
384
+ return /*#__PURE__*/React__default["default"].createElement("div", _rollupPluginBabelHelpers["extends"]({
385
+ className: classNames,
386
+ ref: ref
387
+ }, other), /*#__PURE__*/React__default["default"].createElement(Grid.Grid, null, /*#__PURE__*/React__default["default"].createElement(Column["default"], {
388
+ lg: 16,
389
+ md: 8,
390
+ sm: 4
391
+ }, children)));
392
+ }
393
+ const [openPopover, setOpenPopover] = React.useState(false);
394
+ const tagSize = tags[0]?.size || 'md';
395
+ const instanceId = useId.useId('PageHeaderTabBar');
396
+ const tagsWithIds = React.useMemo(() => {
397
+ return tags.map((tag, index) => ({
398
+ ...tag,
399
+ id: tag.id || `tag-${index}-${instanceId}`
400
+ }));
401
+ }, [tags]);
402
+ const tagsContainerRef = React.useRef(null);
403
+ const offsetRef = React.useRef(null);
404
+ // To close popover when window resizes
405
+ React.useEffect(() => {
406
+ const handleResize = () => {
407
+ // Close the popover when window resizes to prevent unwanted opens
408
+ setOpenPopover(false);
409
+ };
410
+ window.addEventListener('resize', handleResize);
411
+ return () => {
412
+ window.removeEventListener('resize', handleResize);
413
+ };
414
+ }, []);
415
+
416
+ // overflow items hook
417
+ const {
418
+ visibleItems = [],
419
+ hiddenItems = [],
420
+ itemRefHandler = () => {}
421
+ } = useOverflowItems["default"](tagsWithIds, tagsContainerRef, offsetRef) || {
422
+ visibleItems: [],
423
+ hiddenItems: [],
424
+ itemRefHandler: () => {}
425
+ };
426
+ const handleOverflowClick = React.useCallback(event => {
427
+ event.stopPropagation();
428
+ setOpenPopover(prev => !prev);
429
+ }, []);
430
+
431
+ // Function to render tags
432
+ const renderTags = () => /*#__PURE__*/React__default["default"].createElement("div", {
433
+ className: `${prefix}--page-header__tags`,
434
+ ref: tagsContainerRef
435
+ }, visibleItems.map(tag => /*#__PURE__*/React__default["default"].createElement(Tag["default"], {
436
+ key: tag.id,
437
+ ref: node => itemRefHandler(tag.id, node),
438
+ type: tag.type,
439
+ size: tag.size,
440
+ className: `${prefix}--page-header__tag-item`
441
+ }, tag.text)), hiddenItems.length > 0 && /*#__PURE__*/React__default["default"].createElement(index$1.Popover, {
442
+ open: openPopover,
443
+ onRequestClose: () => setOpenPopover(false)
444
+ }, /*#__PURE__*/React__default["default"].createElement(OperationalTag["default"], {
445
+ onClick: handleOverflowClick,
446
+ "aria-expanded": openPopover,
447
+ text: `+${hiddenItems.length}`,
448
+ size: tagSize
449
+ }), /*#__PURE__*/React__default["default"].createElement(index$1.PopoverContent, {
450
+ className: "tag-popover-content"
451
+ }, /*#__PURE__*/React__default["default"].createElement("div", {
452
+ className: `${prefix}--page-header__tags-popover-list`
453
+ }, hiddenItems.map(tag => /*#__PURE__*/React__default["default"].createElement(Tag["default"], {
454
+ key: tag.id,
455
+ type: tag.type,
456
+ size: tag.size
457
+ }, tag.text))))));
374
458
  return /*#__PURE__*/React__default["default"].createElement("div", _rollupPluginBabelHelpers["extends"]({
375
459
  className: classNames,
376
460
  ref: ref
377
- }, other), children);
378
- });
379
- PageHeaderTabBar.displayName = 'PageHeaderTabBar';
380
- const PageHeaderTabs = /*#__PURE__*/React__default["default"].forwardRef(function PageHeaderTabs({
381
- className,
382
- children,
383
- ...other
384
- }, ref) {
385
- const prefix = usePrefix.usePrefix();
386
- const childrenArray = React__default["default"].Children.toArray(children);
387
- let tabListElement = null;
388
- const otherChildren = [];
389
-
390
- // extract the TabList component so we can wrap a needed div around for
391
- // layout purposes
392
- childrenArray.forEach(child => {
393
- if (child?.type?.displayName === 'TabList' || child?.type?.name === 'TabList') {
394
- tabListElement = child;
395
- } else {
396
- otherChildren.push(child);
397
- }
398
- });
399
- return /*#__PURE__*/React__default["default"].createElement(Tabs$1.Tabs, other, tabListElement && /*#__PURE__*/React__default["default"].createElement("div", {
400
- className: `${prefix}--page-header__tablist-wrapper`
401
- }, /*#__PURE__*/React__default["default"].createElement(Grid.Grid, null, /*#__PURE__*/React__default["default"].createElement(Column["default"], {
461
+ }, other), /*#__PURE__*/React__default["default"].createElement(Grid.Grid, null, /*#__PURE__*/React__default["default"].createElement(Column["default"], {
402
462
  lg: 16,
403
463
  md: 8,
404
464
  sm: 4
405
- }, tabListElement))), otherChildren);
465
+ }, /*#__PURE__*/React__default["default"].createElement("div", {
466
+ className: `${prefix}--page-header__tab-bar--tablist`
467
+ }, children, tags.length > 0 && renderTags()))));
406
468
  });
407
- PageHeaderTabs.displayName = 'PageHeaderTabs';
469
+ PageHeaderTabBar.displayName = 'PageHeaderTabBar';
408
470
 
409
471
  /**
410
472
  * -------
@@ -425,8 +487,6 @@ const HeroImage = PageHeaderHeroImage;
425
487
  HeroImage.displayName = 'PageHeaderHeroImage';
426
488
  const TabBar = PageHeaderTabBar;
427
489
  TabBar.displayName = 'PageHeaderTabBar';
428
- const Tabs = PageHeaderTabs;
429
- Tabs.displayName = 'PageHeader.Tabs';
430
490
 
431
491
  exports.BreadcrumbBar = BreadcrumbBar;
432
492
  exports.Content = Content;
@@ -440,7 +500,5 @@ exports.PageHeaderContentPageActions = PageHeaderContentPageActions;
440
500
  exports.PageHeaderContentText = PageHeaderContentText;
441
501
  exports.PageHeaderHeroImage = PageHeaderHeroImage;
442
502
  exports.PageHeaderTabBar = PageHeaderTabBar;
443
- exports.PageHeaderTabs = PageHeaderTabs;
444
503
  exports.Root = Root;
445
504
  exports.TabBar = TabBar;
446
- exports.Tabs = Tabs;
@@ -4,5 +4,5 @@
4
4
  * This source code is licensed under the Apache-2.0 license found in the
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  */
7
- export { PageHeader, PageHeaderBreadcrumbBar, PageHeaderContent, PageHeaderContentPageActions, PageHeaderContentText, PageHeaderTabBar, PageHeaderHeroImage, PageHeaderTabs, Root, BreadcrumbBar, Content, ContentPageActions, ContentText, TabBar, HeroImage, Tabs, } from './PageHeader';
8
- export type { PageHeaderProps, PageHeaderBreadcrumbBarProps, PageHeaderContentProps, PageHeaderContentPageActionsProps, PageHeaderContentTextProps, PageHeaderTabBarProps, PageHeaderHeroImageProps, PageHeaderTabsProps, } from './PageHeader';
7
+ export { PageHeader, PageHeaderBreadcrumbBar, PageHeaderContent, PageHeaderContentPageActions, PageHeaderContentText, PageHeaderTabBar, PageHeaderHeroImage, Root, BreadcrumbBar, Content, ContentPageActions, ContentText, TabBar, HeroImage, } from './PageHeader';
8
+ export type { PageHeaderProps, PageHeaderBreadcrumbBarProps, PageHeaderContentProps, PageHeaderContentPageActionsProps, PageHeaderContentTextProps, PageHeaderTabBarProps, PageHeaderHeroImageProps, } from './PageHeader';
@@ -25,7 +25,5 @@ exports.PageHeaderContentPageActions = PageHeader.PageHeaderContentPageActions;
25
25
  exports.PageHeaderContentText = PageHeader.PageHeaderContentText;
26
26
  exports.PageHeaderHeroImage = PageHeader.PageHeaderHeroImage;
27
27
  exports.PageHeaderTabBar = PageHeader.PageHeaderTabBar;
28
- exports.PageHeaderTabs = PageHeader.PageHeaderTabs;
29
28
  exports.Root = PageHeader.Root;
30
29
  exports.TabBar = PageHeader.TabBar;
31
- exports.Tabs = PageHeader.Tabs;
@@ -144,7 +144,6 @@ const Search = /*#__PURE__*/React__default["default"].forwardRef(function Search
144
144
  "aria-label": placeholder,
145
145
  className: searchClasses
146
146
  }, /*#__PURE__*/React__default["default"].createElement("div", {
147
- "aria-label": onExpand ? 'button' : undefined,
148
147
  "aria-labelledby": onExpand ? searchId : undefined,
149
148
  role: onExpand ? 'button' : undefined,
150
149
  className: `${prefix}--search-magnifier`,
@@ -768,6 +768,9 @@ class Slider extends React.PureComponent {
768
768
  valueUpper,
769
769
  leftUpper
770
770
  });
771
+ if (this.filledTrackRef.current) {
772
+ this.filledTrackRef.current.style.transform = this.state.isRtl ? `translate(${100 - this.state.leftUpper}%, -50%) scaleX(${(this.state.leftUpper - this.state.left) / 100})` : `translate(${this.state.left}%, -50%) scaleX(${(this.state.leftUpper - this.state.left) / 100})`;
773
+ }
771
774
  } else {
772
775
  const {
773
776
  value,
@@ -781,6 +784,9 @@ class Slider extends React.PureComponent {
781
784
  value,
782
785
  left
783
786
  });
787
+ if (this.filledTrackRef.current) {
788
+ this.filledTrackRef.current.style.transform = this.state.isRtl ? `translate(100%, -50%) scaleX(-${this.state.left / 100})` : `translate(0%, -50%) scaleX(${this.state.left / 100})`;
789
+ }
784
790
  }
785
791
  }
786
792
  }
@@ -75,7 +75,7 @@ const TextArea = frFn((props, forwardRef) => {
75
75
  if (counterMode === 'character') {
76
76
  return strValue.length;
77
77
  } else {
78
- return strValue.match(/\w+/g)?.length || 0;
78
+ return strValue.match(/\p{L}+/gu)?.length || 0;
79
79
  }
80
80
  }
81
81
  const [textCount, setTextCount] = React.useState(getInitialTextCount());
@@ -107,8 +107,8 @@ const TextArea = frFn((props, forwardRef) => {
107
107
  onPaste: evt => {
108
108
  if (!disabled) {
109
109
  if (counterMode === 'word' && enableCounter && typeof maxCount !== 'undefined' && textareaRef.current !== null) {
110
- const existingWords = textareaRef.current.value.match(/\w+/g) || [];
111
- const pastedWords = evt.clipboardData.getData('Text').match(/\w+/g) || [];
110
+ const existingWords = textareaRef.current.value.match(/\p{L}+/gu) || [];
111
+ const pastedWords = evt.clipboardData.getData('Text').match(/\p{L}+/gu) || [];
112
112
  const totalWords = existingWords.length + pastedWords.length;
113
113
  if (totalWords > maxCount) {
114
114
  evt.preventDefault();
@@ -137,7 +137,7 @@ const TextArea = frFn((props, forwardRef) => {
137
137
  return;
138
138
  }
139
139
  if (enableCounter && typeof maxCount !== 'undefined' && textareaRef.current !== null) {
140
- const matchedWords = evt.target?.value?.match(/\w+/g);
140
+ const matchedWords = evt.target?.value?.match(/\p{L}+/gu);
141
141
  if (matchedWords && matchedWords.length <= maxCount) {
142
142
  textareaRef.current.removeAttribute('maxLength');
143
143
  setTimeout(() => {
@@ -45,8 +45,9 @@ export interface TileGroupProps extends Omit<HTMLAttributes<HTMLFieldSetElement>
45
45
  */
46
46
  required?: boolean;
47
47
  }
48
- declare const TileGroup: {
49
- (props: any): import("react/jsx-runtime").JSX.Element;
48
+ export declare const TileGroup: {
49
+ ({ children, className, defaultSelected, disabled, legend, name, onChange, valueSelected, required, }: TileGroupProps): import("react/jsx-runtime").JSX.Element;
50
+ displayName: string;
50
51
  propTypes: {
51
52
  /**
52
53
  * Provide a collection of <RadioTile> components to render in the group
@@ -86,6 +87,5 @@ declare const TileGroup: {
86
87
  */
87
88
  valueSelected: PropTypes.Requireable<NonNullable<string | number | null | undefined>>;
88
89
  };
89
- displayName: string;
90
90
  };
91
- export default TileGroup;
91
+ export {};