@patternfly/react-core 4.211.6 → 4.213.1

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 (36) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/dist/esm/components/Tabs/Tab.d.ts +5 -1
  3. package/dist/esm/components/Tabs/Tab.d.ts.map +1 -1
  4. package/dist/esm/components/Tabs/Tab.js +10 -3
  5. package/dist/esm/components/Tabs/Tab.js.map +1 -1
  6. package/dist/esm/components/Tabs/Tabs.d.ts +6 -0
  7. package/dist/esm/components/Tabs/Tabs.d.ts.map +1 -1
  8. package/dist/esm/components/Tabs/Tabs.js +14 -4
  9. package/dist/esm/components/Tabs/Tabs.js.map +1 -1
  10. package/dist/esm/components/Tabs/TabsContext.d.ts +1 -0
  11. package/dist/esm/components/Tabs/TabsContext.d.ts.map +1 -1
  12. package/dist/esm/components/Tabs/TabsContext.js +2 -1
  13. package/dist/esm/components/Tabs/TabsContext.js.map +1 -1
  14. package/dist/js/components/Tabs/Tab.d.ts +5 -1
  15. package/dist/js/components/Tabs/Tab.d.ts.map +1 -1
  16. package/dist/js/components/Tabs/Tab.js +10 -3
  17. package/dist/js/components/Tabs/Tab.js.map +1 -1
  18. package/dist/js/components/Tabs/Tabs.d.ts +6 -0
  19. package/dist/js/components/Tabs/Tabs.d.ts.map +1 -1
  20. package/dist/js/components/Tabs/Tabs.js +14 -4
  21. package/dist/js/components/Tabs/Tabs.js.map +1 -1
  22. package/dist/js/components/Tabs/TabsContext.d.ts +1 -0
  23. package/dist/js/components/Tabs/TabsContext.d.ts.map +1 -1
  24. package/dist/js/components/Tabs/TabsContext.js +2 -1
  25. package/dist/js/components/Tabs/TabsContext.js.map +1 -1
  26. package/dist/umd/react-core.css +69 -69
  27. package/dist/umd/react-core.js +36 -21
  28. package/dist/umd/react-core.min.js +1 -1
  29. package/package.json +6 -6
  30. package/src/components/Tabs/Tab.tsx +32 -2
  31. package/src/components/Tabs/Tabs.tsx +28 -2
  32. package/src/components/Tabs/TabsContext.ts +7 -1
  33. package/src/components/Tabs/__tests__/Tabs.test.tsx +22 -0
  34. package/src/components/Tabs/__tests__/__snapshots__/Tabs.test.tsx.snap +13 -13
  35. package/src/components/Tabs/examples/Tabs.md +7 -0
  36. package/src/components/Tabs/examples/TabsDynamic.tsx +64 -0
@@ -6,6 +6,7 @@ export interface TabsContextProps {
6
6
  localActiveKey: string | number;
7
7
  uniqueId: string;
8
8
  handleTabClick: (event: React.MouseEvent<HTMLElement, MouseEvent>, eventKey: number | string, tabContentRef: React.RefObject<any>) => void;
9
+ handleTabClose: (event: React.MouseEvent<HTMLElement, MouseEvent>, eventKey: number | string, tabContentRef?: React.RefObject<any>) => void;
9
10
  }
10
11
  export declare const TabsContext: React.Context<TabsContextProps>;
11
12
  export declare const TabsContextProvider: React.Provider<TabsContextProps>;
@@ -1 +1 @@
1
- {"version":3,"file":"TabsContext.d.ts","sourceRoot":"","sources":["../../../../src/components/Tabs/TabsContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,SAAS,GAAG,UAAU,CAAC;IAChC,YAAY,EAAE,OAAO,CAAC;IACtB,aAAa,EAAE,OAAO,CAAC;IACvB,cAAc,EAAE,MAAM,GAAG,MAAM,CAAC;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,CACd,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,WAAW,EAAE,UAAU,CAAC,EAChD,QAAQ,EAAE,MAAM,GAAG,MAAM,EACzB,aAAa,EAAE,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,KAChC,IAAI,CAAC;CACX;AAED,eAAO,MAAM,WAAW,iCAOtB,CAAC;AAEH,eAAO,MAAM,mBAAmB,kCAAuB,CAAC;AACxD,eAAO,MAAM,mBAAmB,kCAAuB,CAAC"}
1
+ {"version":3,"file":"TabsContext.d.ts","sourceRoot":"","sources":["../../../../src/components/Tabs/TabsContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,SAAS,GAAG,UAAU,CAAC;IAChC,YAAY,EAAE,OAAO,CAAC;IACtB,aAAa,EAAE,OAAO,CAAC;IACvB,cAAc,EAAE,MAAM,GAAG,MAAM,CAAC;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,CACd,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,WAAW,EAAE,UAAU,CAAC,EAChD,QAAQ,EAAE,MAAM,GAAG,MAAM,EACzB,aAAa,EAAE,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,KAChC,IAAI,CAAC;IACV,cAAc,EAAE,CACd,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,WAAW,EAAE,UAAU,CAAC,EAChD,QAAQ,EAAE,MAAM,GAAG,MAAM,EACzB,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,KACjC,IAAI,CAAC;CACX;AAED,eAAO,MAAM,WAAW,iCAQtB,CAAC;AAEH,eAAO,MAAM,mBAAmB,kCAAuB,CAAC;AACxD,eAAO,MAAM,mBAAmB,kCAAuB,CAAC"}
@@ -9,7 +9,8 @@ exports.TabsContext = React.createContext({
9
9
  unmountOnExit: false,
10
10
  localActiveKey: '',
11
11
  uniqueId: '',
12
- handleTabClick: () => null
12
+ handleTabClick: () => null,
13
+ handleTabClose: undefined
13
14
  });
14
15
  exports.TabsContextProvider = exports.TabsContext.Provider;
15
16
  exports.TabsContextConsumer = exports.TabsContext.Consumer;
@@ -1 +1 @@
1
- {"version":3,"file":"TabsContext.js","sourceRoot":"","sources":["../../../../src/components/Tabs/TabsContext.ts"],"names":[],"mappings":";;;;AAAA,qDAA+B;AAelB,QAAA,WAAW,GAAG,KAAK,CAAC,aAAa,CAAmB;IAC/D,OAAO,EAAE,SAAS;IAClB,YAAY,EAAE,KAAK;IACnB,aAAa,EAAE,KAAK;IACpB,cAAc,EAAE,EAAE;IAClB,QAAQ,EAAE,EAAE;IACZ,cAAc,EAAE,GAAG,EAAE,CAAC,IAAI;CAC3B,CAAC,CAAC;AAEU,QAAA,mBAAmB,GAAG,mBAAW,CAAC,QAAQ,CAAC;AAC3C,QAAA,mBAAmB,GAAG,mBAAW,CAAC,QAAQ,CAAC"}
1
+ {"version":3,"file":"TabsContext.js","sourceRoot":"","sources":["../../../../src/components/Tabs/TabsContext.ts"],"names":[],"mappings":";;;;AAAA,qDAA+B;AAoBlB,QAAA,WAAW,GAAG,KAAK,CAAC,aAAa,CAAmB;IAC/D,OAAO,EAAE,SAAS;IAClB,YAAY,EAAE,KAAK;IACnB,aAAa,EAAE,KAAK;IACpB,cAAc,EAAE,EAAE;IAClB,QAAQ,EAAE,EAAE;IACZ,cAAc,EAAE,GAAG,EAAE,CAAC,IAAI;IAC1B,cAAc,EAAE,SAAS;CAC1B,CAAC,CAAC;AAEU,QAAA,mBAAmB,GAAG,mBAAW,CAAC,QAAQ,CAAC;AAC3C,QAAA,mBAAmB,GAAG,mBAAW,CAAC,QAAQ,CAAC"}
@@ -24718,75 +24718,6 @@ svg.pf-c-spinner.pf-m-xl {
24718
24718
  --pf-l-flex--spacer: var(--pf-l-flex--spacer--4xl);
24719
24719
  }
24720
24720
  }
24721
- .pf-l-gallery {
24722
- --pf-l-gallery--m-gutter--GridGap: var(--pf-global--gutter);
24723
- --pf-l-gallery--GridTemplateColumns--min: 250px;
24724
- --pf-l-gallery--GridTemplateColumns--minmax--min: var(--pf-l-gallery--GridTemplateColumns--min);
24725
- --pf-l-gallery--GridTemplateColumns--max: 1fr;
24726
- --pf-l-gallery--GridTemplateColumns--minmax--max: var(--pf-l-gallery--GridTemplateColumns--max);
24727
- --pf-l-gallery--GridTemplateColumns: repeat(auto-fill, minmax(var(--pf-l-gallery--GridTemplateColumns--minmax--min), var(--pf-l-gallery--GridTemplateColumns--minmax--max)));
24728
- --pf-l-gallery--GridTemplateRows: auto;
24729
- display: grid;
24730
- grid-template-columns: var(--pf-l-gallery--GridTemplateColumns);
24731
- grid-template-rows: var(--pf-l-gallery--GridTemplateRows);
24732
- --pf-l-gallery--GridTemplateColumns--minmax--min: var(--pf-l-gallery--GridTemplateColumns--min);
24733
- --pf-l-gallery--GridTemplateColumns--minmax--max: var(--pf-l-gallery--GridTemplateColumns--max);
24734
- }
24735
-
24736
- .pf-l-gallery.pf-m-gutter {
24737
- grid-gap: var(--pf-l-gallery--m-gutter--GridGap);
24738
- }
24739
-
24740
- @media (min-width: 576px) {
24741
- .pf-l-gallery {
24742
- --pf-l-gallery--GridTemplateColumns--minmax--min: var(--pf-l-gallery--GridTemplateColumns--min-on-sm, var(--pf-l-gallery--GridTemplateColumns--min));
24743
- }
24744
- }
24745
- @media (min-width: 768px) {
24746
- .pf-l-gallery {
24747
- --pf-l-gallery--GridTemplateColumns--minmax--min: var(--pf-l-gallery--GridTemplateColumns--min-on-md, var(--pf-l-gallery--GridTemplateColumns--min-on-sm, var(--pf-l-gallery--GridTemplateColumns--min)));
24748
- }
24749
- }
24750
- @media (min-width: 992px) {
24751
- .pf-l-gallery {
24752
- --pf-l-gallery--GridTemplateColumns--minmax--min: var(--pf-l-gallery--GridTemplateColumns--min-on-lg, var(--pf-l-gallery--GridTemplateColumns--min-on-md, var(--pf-l-gallery--GridTemplateColumns--min-on-sm, var(--pf-l-gallery--GridTemplateColumns--min))));
24753
- }
24754
- }
24755
- @media (min-width: 1200px) {
24756
- .pf-l-gallery {
24757
- --pf-l-gallery--GridTemplateColumns--minmax--min: var(--pf-l-gallery--GridTemplateColumns--min-on-xl, var(--pf-l-gallery--GridTemplateColumns--min-on-lg, var(--pf-l-gallery--GridTemplateColumns--min-on-md, var(--pf-l-gallery--GridTemplateColumns--min-on-sm, var(--pf-l-gallery--GridTemplateColumns--min)))));
24758
- }
24759
- }
24760
- @media (min-width: 1450px) {
24761
- .pf-l-gallery {
24762
- --pf-l-gallery--GridTemplateColumns--minmax--min: var(--pf-l-gallery--GridTemplateColumns--min-on-2xl, var(--pf-l-gallery--GridTemplateColumns--min-on-xl, var(--pf-l-gallery--GridTemplateColumns--min-on-lg, var(--pf-l-gallery--GridTemplateColumns--min-on-md, var(--pf-l-gallery--GridTemplateColumns--min-on-sm, var(--pf-l-gallery--GridTemplateColumns--min))))));
24763
- }
24764
- }
24765
- @media (min-width: 576px) {
24766
- .pf-l-gallery {
24767
- --pf-l-gallery--GridTemplateColumns--minmax--max: var(--pf-l-gallery--GridTemplateColumns--max-on-sm, var(--pf-l-gallery--GridTemplateColumns--max));
24768
- }
24769
- }
24770
- @media (min-width: 768px) {
24771
- .pf-l-gallery {
24772
- --pf-l-gallery--GridTemplateColumns--minmax--max: var(--pf-l-gallery--GridTemplateColumns--max-on-md, var(--pf-l-gallery--GridTemplateColumns--max-on-sm, var(--pf-l-gallery--GridTemplateColumns--max)));
24773
- }
24774
- }
24775
- @media (min-width: 992px) {
24776
- .pf-l-gallery {
24777
- --pf-l-gallery--GridTemplateColumns--minmax--max: var(--pf-l-gallery--GridTemplateColumns--max-on-lg, var(--pf-l-gallery--GridTemplateColumns--max-on-md, var(--pf-l-gallery--GridTemplateColumns--max-on-sm, var(--pf-l-gallery--GridTemplateColumns--max))));
24778
- }
24779
- }
24780
- @media (min-width: 1200px) {
24781
- .pf-l-gallery {
24782
- --pf-l-gallery--GridTemplateColumns--minmax--max: var(--pf-l-gallery--GridTemplateColumns--max-on-xl, var(--pf-l-gallery--GridTemplateColumns--max-on-lg, var(--pf-l-gallery--GridTemplateColumns--max-on-md, var(--pf-l-gallery--GridTemplateColumns--max-on-sm, var(--pf-l-gallery--GridTemplateColumns--max)))));
24783
- }
24784
- }
24785
- @media (min-width: 1450px) {
24786
- .pf-l-gallery {
24787
- --pf-l-gallery--GridTemplateColumns--minmax--max: var(--pf-l-gallery--GridTemplateColumns--max-on-2xl, var(--pf-l-gallery--GridTemplateColumns--max-on-xl, var(--pf-l-gallery--GridTemplateColumns--max-on-lg, var(--pf-l-gallery--GridTemplateColumns--max-on-md, var(--pf-l-gallery--GridTemplateColumns--max-on-sm, var(--pf-l-gallery--GridTemplateColumns--max))))));
24788
- }
24789
- }
24790
24721
  .pf-l-grid {
24791
24722
  --pf-l-grid--m-gutter--GridGap: var(--pf-global--gutter);
24792
24723
  --pf-l-grid__item--GridColumnStart: auto;
@@ -26001,6 +25932,75 @@ svg.pf-c-spinner.pf-m-xl {
26001
25932
  grid-gap: var(--pf-l-grid--m-gutter--GridGap);
26002
25933
  }
26003
25934
 
25935
+ .pf-l-gallery {
25936
+ --pf-l-gallery--m-gutter--GridGap: var(--pf-global--gutter);
25937
+ --pf-l-gallery--GridTemplateColumns--min: 250px;
25938
+ --pf-l-gallery--GridTemplateColumns--minmax--min: var(--pf-l-gallery--GridTemplateColumns--min);
25939
+ --pf-l-gallery--GridTemplateColumns--max: 1fr;
25940
+ --pf-l-gallery--GridTemplateColumns--minmax--max: var(--pf-l-gallery--GridTemplateColumns--max);
25941
+ --pf-l-gallery--GridTemplateColumns: repeat(auto-fill, minmax(var(--pf-l-gallery--GridTemplateColumns--minmax--min), var(--pf-l-gallery--GridTemplateColumns--minmax--max)));
25942
+ --pf-l-gallery--GridTemplateRows: auto;
25943
+ display: grid;
25944
+ grid-template-columns: var(--pf-l-gallery--GridTemplateColumns);
25945
+ grid-template-rows: var(--pf-l-gallery--GridTemplateRows);
25946
+ --pf-l-gallery--GridTemplateColumns--minmax--min: var(--pf-l-gallery--GridTemplateColumns--min);
25947
+ --pf-l-gallery--GridTemplateColumns--minmax--max: var(--pf-l-gallery--GridTemplateColumns--max);
25948
+ }
25949
+
25950
+ .pf-l-gallery.pf-m-gutter {
25951
+ grid-gap: var(--pf-l-gallery--m-gutter--GridGap);
25952
+ }
25953
+
25954
+ @media (min-width: 576px) {
25955
+ .pf-l-gallery {
25956
+ --pf-l-gallery--GridTemplateColumns--minmax--min: var(--pf-l-gallery--GridTemplateColumns--min-on-sm, var(--pf-l-gallery--GridTemplateColumns--min));
25957
+ }
25958
+ }
25959
+ @media (min-width: 768px) {
25960
+ .pf-l-gallery {
25961
+ --pf-l-gallery--GridTemplateColumns--minmax--min: var(--pf-l-gallery--GridTemplateColumns--min-on-md, var(--pf-l-gallery--GridTemplateColumns--min-on-sm, var(--pf-l-gallery--GridTemplateColumns--min)));
25962
+ }
25963
+ }
25964
+ @media (min-width: 992px) {
25965
+ .pf-l-gallery {
25966
+ --pf-l-gallery--GridTemplateColumns--minmax--min: var(--pf-l-gallery--GridTemplateColumns--min-on-lg, var(--pf-l-gallery--GridTemplateColumns--min-on-md, var(--pf-l-gallery--GridTemplateColumns--min-on-sm, var(--pf-l-gallery--GridTemplateColumns--min))));
25967
+ }
25968
+ }
25969
+ @media (min-width: 1200px) {
25970
+ .pf-l-gallery {
25971
+ --pf-l-gallery--GridTemplateColumns--minmax--min: var(--pf-l-gallery--GridTemplateColumns--min-on-xl, var(--pf-l-gallery--GridTemplateColumns--min-on-lg, var(--pf-l-gallery--GridTemplateColumns--min-on-md, var(--pf-l-gallery--GridTemplateColumns--min-on-sm, var(--pf-l-gallery--GridTemplateColumns--min)))));
25972
+ }
25973
+ }
25974
+ @media (min-width: 1450px) {
25975
+ .pf-l-gallery {
25976
+ --pf-l-gallery--GridTemplateColumns--minmax--min: var(--pf-l-gallery--GridTemplateColumns--min-on-2xl, var(--pf-l-gallery--GridTemplateColumns--min-on-xl, var(--pf-l-gallery--GridTemplateColumns--min-on-lg, var(--pf-l-gallery--GridTemplateColumns--min-on-md, var(--pf-l-gallery--GridTemplateColumns--min-on-sm, var(--pf-l-gallery--GridTemplateColumns--min))))));
25977
+ }
25978
+ }
25979
+ @media (min-width: 576px) {
25980
+ .pf-l-gallery {
25981
+ --pf-l-gallery--GridTemplateColumns--minmax--max: var(--pf-l-gallery--GridTemplateColumns--max-on-sm, var(--pf-l-gallery--GridTemplateColumns--max));
25982
+ }
25983
+ }
25984
+ @media (min-width: 768px) {
25985
+ .pf-l-gallery {
25986
+ --pf-l-gallery--GridTemplateColumns--minmax--max: var(--pf-l-gallery--GridTemplateColumns--max-on-md, var(--pf-l-gallery--GridTemplateColumns--max-on-sm, var(--pf-l-gallery--GridTemplateColumns--max)));
25987
+ }
25988
+ }
25989
+ @media (min-width: 992px) {
25990
+ .pf-l-gallery {
25991
+ --pf-l-gallery--GridTemplateColumns--minmax--max: var(--pf-l-gallery--GridTemplateColumns--max-on-lg, var(--pf-l-gallery--GridTemplateColumns--max-on-md, var(--pf-l-gallery--GridTemplateColumns--max-on-sm, var(--pf-l-gallery--GridTemplateColumns--max))));
25992
+ }
25993
+ }
25994
+ @media (min-width: 1200px) {
25995
+ .pf-l-gallery {
25996
+ --pf-l-gallery--GridTemplateColumns--minmax--max: var(--pf-l-gallery--GridTemplateColumns--max-on-xl, var(--pf-l-gallery--GridTemplateColumns--max-on-lg, var(--pf-l-gallery--GridTemplateColumns--max-on-md, var(--pf-l-gallery--GridTemplateColumns--max-on-sm, var(--pf-l-gallery--GridTemplateColumns--max)))));
25997
+ }
25998
+ }
25999
+ @media (min-width: 1450px) {
26000
+ .pf-l-gallery {
26001
+ --pf-l-gallery--GridTemplateColumns--minmax--max: var(--pf-l-gallery--GridTemplateColumns--max-on-2xl, var(--pf-l-gallery--GridTemplateColumns--max-on-xl, var(--pf-l-gallery--GridTemplateColumns--max-on-lg, var(--pf-l-gallery--GridTemplateColumns--max-on-md, var(--pf-l-gallery--GridTemplateColumns--max-on-sm, var(--pf-l-gallery--GridTemplateColumns--max))))));
26002
+ }
26003
+ }
26004
26004
  .pf-l-level {
26005
26005
  --pf-l-level--m-gutter--MarginRight: var(--pf-global--gutter);
26006
26006
  display: flex;
@@ -18271,17 +18271,18 @@
18271
18271
  unmountOnExit: false,
18272
18272
  localActiveKey: '',
18273
18273
  uniqueId: '',
18274
- handleTabClick: () => null
18274
+ handleTabClick: () => null,
18275
+ handleTabClose: undefined
18275
18276
  });
18276
18277
  const TabsContextProvider = TabsContext.Provider;
18277
18278
  const TabsContextConsumer = TabsContext.Consumer;
18278
18279
 
18279
18280
  const TabBase = (_a) => {
18280
- var { title, eventKey, tabContentRef, id: childId, tabContentId, className: childClassName = '', ouiaId: childOuiaId, isDisabled, isAriaDisabled, inoperableEvents = ['onClick', 'onKeyPress'], href, innerRef, tooltip } = _a, props = __rest$1(_a, ["title", "eventKey", "tabContentRef", "id", "tabContentId", "className", "ouiaId", "isDisabled", "isAriaDisabled", "inoperableEvents", "href", "innerRef", "tooltip"]);
18281
+ var { title, eventKey, tabContentRef, id: childId, tabContentId, className: childClassName = '', ouiaId: childOuiaId, isDisabled, isAriaDisabled, inoperableEvents = ['onClick', 'onKeyPress'], href, innerRef, tooltip, closeButtonAriaLabel, isCloseDisabled = false } = _a, props = __rest$1(_a, ["title", "eventKey", "tabContentRef", "id", "tabContentId", "className", "ouiaId", "isDisabled", "isAriaDisabled", "inoperableEvents", "href", "innerRef", "tooltip", "closeButtonAriaLabel", "isCloseDisabled"]);
18281
18282
  const preventedEvents = inoperableEvents.reduce((handlers, eventToPrevent) => (Object.assign(Object.assign({}, handlers), { [eventToPrevent]: (event) => {
18282
18283
  event.preventDefault();
18283
18284
  } })), {});
18284
- const { mountOnEnter, localActiveKey, unmountOnExit, uniqueId, handleTabClick } = React__namespace.useContext(TabsContext);
18285
+ const { mountOnEnter, localActiveKey, unmountOnExit, uniqueId, handleTabClick, handleTabClose } = React__namespace.useContext(TabsContext);
18285
18286
  let ariaControls = tabContentId ? `${tabContentId}` : `pf-tab-section-${eventKey}-${childId || uniqueId}`;
18286
18287
  if ((mountOnEnter || unmountOnExit) && eventKey !== localActiveKey) {
18287
18288
  ariaControls = undefined;
@@ -18296,11 +18297,29 @@
18296
18297
  }
18297
18298
  };
18298
18299
  const tabButton = (React__namespace.createElement(TabButton, Object.assign({ parentInnerRef: innerRef, className: css(styles$h.tabsLink, isDisabled && href && styles$h.modifiers.disabled, isAriaDisabled && styles$h.modifiers.ariaDisabled), disabled: isButtonElement ? isDisabled : null, "aria-disabled": isDisabled || isAriaDisabled, tabIndex: getDefaultTabIdx(), onClick: (event) => handleTabClick(event, eventKey, tabContentRef) }, (isAriaDisabled ? preventedEvents : null), { id: `pf-tab-${eventKey}-${childId || uniqueId}`, "aria-controls": ariaControls, tabContentRef: tabContentRef, ouiaId: childOuiaId, href: href, role: "tab", "aria-selected": eventKey === localActiveKey }, props), title));
18299
- return (React__namespace.createElement("li", { className: css(styles$h.tabsItem, eventKey === localActiveKey && styles$h.modifiers.current, childClassName), role: "presentation" }, tooltip ? React__namespace.createElement(Tooltip, Object.assign({}, tooltip.props), tabButton) : tabButton));
18300
+ return (React__namespace.createElement("li", { className: css(styles$h.tabsItem, eventKey === localActiveKey && styles$h.modifiers.current, handleTabClose && styles$h.modifiers.action, handleTabClose && (isDisabled || isAriaDisabled) && styles$h.modifiers.disabled, childClassName), role: "presentation" },
18301
+ tooltip ? React__namespace.createElement(Tooltip, Object.assign({}, tooltip.props), tabButton) : tabButton,
18302
+ handleTabClose !== undefined && (React__namespace.createElement("span", { className: css(styles$h.tabsItemClose) },
18303
+ React__namespace.createElement(Button, { variant: "plain", "aria-label": closeButtonAriaLabel || 'Close tab', onClick: (event) => handleTabClose(event, eventKey, tabContentRef), isDisabled: isCloseDisabled },
18304
+ React__namespace.createElement("span", { className: css(styles$h.tabsItemCloseIcon) },
18305
+ React__namespace.createElement(TimesIcon$1, null)))))));
18300
18306
  };
18301
18307
  const Tab = React__namespace.forwardRef((props, ref) => React__namespace.createElement(TabBase, Object.assign({ innerRef: ref }, props)));
18302
18308
  Tab.displayName = 'Tab';
18303
18309
 
18310
+ const PlusIconConfig = {
18311
+ name: 'PlusIcon',
18312
+ height: 512,
18313
+ width: 448,
18314
+ svgPath: 'M416 208H272V64c0-17.67-14.33-32-32-32h-32c-17.67 0-32 14.33-32 32v144H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h144v144c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32V304h144c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32z',
18315
+ yOffset: 0,
18316
+ xOffset: 0,
18317
+ };
18318
+
18319
+ const PlusIcon = createIcon(PlusIconConfig);
18320
+
18321
+ var PlusIcon$1 = PlusIcon;
18322
+
18304
18323
  Promise.resolve().then(function () { return tabContent; });
18305
18324
  var styles$g = {
18306
18325
  "modifiers": {
@@ -18471,16 +18490,21 @@
18471
18490
  clearTimeout(this.scrollTimeout);
18472
18491
  }
18473
18492
  componentDidUpdate(prevProps) {
18474
- const { activeKey, mountOnEnter } = this.props;
18493
+ const { activeKey, mountOnEnter, children } = this.props;
18475
18494
  const { shownKeys } = this.state;
18476
18495
  if (prevProps.activeKey !== activeKey && mountOnEnter && shownKeys.indexOf(activeKey) < 0) {
18477
18496
  this.setState({
18478
18497
  shownKeys: shownKeys.concat(activeKey)
18479
18498
  });
18480
18499
  }
18500
+ if (prevProps.children &&
18501
+ children &&
18502
+ React__namespace.Children.toArray(prevProps.children).length !== React__namespace.Children.toArray(children).length) {
18503
+ this.handleScrollButtons();
18504
+ }
18481
18505
  }
18482
18506
  render() {
18483
- const _a = this.props, { className, children, activeKey, defaultActiveKey, id, isFilled, isSecondary, isVertical, isBox, hasBorderBottom, hasSecondaryBorderBottom, leftScrollAriaLabel, rightScrollAriaLabel, 'aria-label': ariaLabel, component, ouiaId, ouiaSafe, mountOnEnter, unmountOnExit, usePageInsets, inset, variant, expandable, isExpanded, defaultIsExpanded, toggleText, toggleAriaLabel, onToggle } = _a, props = __rest$1(_a, ["className", "children", "activeKey", "defaultActiveKey", "id", "isFilled", "isSecondary", "isVertical", "isBox", "hasBorderBottom", "hasSecondaryBorderBottom", "leftScrollAriaLabel", "rightScrollAriaLabel", 'aria-label', "component", "ouiaId", "ouiaSafe", "mountOnEnter", "unmountOnExit", "usePageInsets", "inset", "variant", "expandable", "isExpanded", "defaultIsExpanded", "toggleText", "toggleAriaLabel", "onToggle"]);
18507
+ const _a = this.props, { className, children, activeKey, defaultActiveKey, id, isFilled, isSecondary, isVertical, isBox, hasBorderBottom, hasSecondaryBorderBottom, leftScrollAriaLabel, rightScrollAriaLabel, 'aria-label': ariaLabel, component, ouiaId, ouiaSafe, mountOnEnter, unmountOnExit, usePageInsets, inset, variant, expandable, isExpanded, defaultIsExpanded, toggleText, toggleAriaLabel, addButtonAriaLabel, onToggle, onClose, onAdd } = _a, props = __rest$1(_a, ["className", "children", "activeKey", "defaultActiveKey", "id", "isFilled", "isSecondary", "isVertical", "isBox", "hasBorderBottom", "hasSecondaryBorderBottom", "leftScrollAriaLabel", "rightScrollAriaLabel", 'aria-label', "component", "ouiaId", "ouiaSafe", "mountOnEnter", "unmountOnExit", "usePageInsets", "inset", "variant", "expandable", "isExpanded", "defaultIsExpanded", "toggleText", "toggleAriaLabel", "addButtonAriaLabel", "onToggle", "onClose", "onAdd"]);
18484
18508
  const { showScrollButtons, disableLeftScrollButton, disableRightScrollButton, shownKeys, uncontrolledActiveKey, uncontrolledIsExpandedLocal } = this.state;
18485
18509
  const filteredChildren = React__namespace.Children.toArray(children)
18486
18510
  .filter(Boolean)
@@ -18504,7 +18528,8 @@
18504
18528
  unmountOnExit,
18505
18529
  localActiveKey,
18506
18530
  uniqueId,
18507
- handleTabClick: (...args) => this.handleTabClick(...args)
18531
+ handleTabClick: (...args) => this.handleTabClick(...args),
18532
+ handleTabClose: onClose
18508
18533
  } },
18509
18534
  React__namespace.createElement(Component, Object.assign({ "aria-label": ariaLabel, className: css(styles$h.tabs, isFilled && styles$h.modifiers.fill, isSecondary && styles$h.modifiers.secondary, isVertical && styles$h.modifiers.vertical, isVertical && expandable && formatBreakpointMods(expandable, styles$h), isVertical && expandable && isExpandedLocal && styles$h.modifiers.expanded, isBox && styles$h.modifiers.box, showScrollButtons && !isVertical && styles$h.modifiers.scrollable, usePageInsets && styles$h.modifiers.pageInsets, !hasBorderBottom && styles$h.modifiers.noBorderBottom, hasSecondaryBorderBottom && styles$h.modifiers.borderBottom, formatBreakpointMods(inset, styles$h), variantStyle[variant], className) }, getOUIAProps(Tabs.displayName, ouiaId !== undefined ? ouiaId : this.state.ouiaStateId, ouiaSafe), { id: id && id }, props),
18510
18535
  expandable && isVertical && (React__namespace.createElement(GenerateId, null, randomId => (React__namespace.createElement("div", { className: css(styles$h.tabsToggle) },
@@ -18517,7 +18542,10 @@
18517
18542
  React__namespace.createElement(AngleLeftIcon$1, null)),
18518
18543
  React__namespace.createElement("ul", { className: css(styles$h.tabsList), ref: this.tabList, onScroll: this.handleScrollButtons, role: "tablist" }, filteredChildren),
18519
18544
  React__namespace.createElement("button", { className: css(styles$h.tabsScrollButton, isSecondary && buttonStyles.modifiers.secondary), "aria-label": rightScrollAriaLabel, onClick: this.scrollRight, disabled: disableRightScrollButton, "aria-hidden": disableRightScrollButton },
18520
- React__namespace.createElement(AngleRightIcon$1, null))),
18545
+ React__namespace.createElement(AngleRightIcon$1, null)),
18546
+ onAdd !== undefined && (React__namespace.createElement("span", { className: css(styles$h.tabsAdd) },
18547
+ React__namespace.createElement(Button, { variant: "plain", "aria-label": addButtonAriaLabel || 'Add tab', onClick: onAdd },
18548
+ React__namespace.createElement(PlusIcon$1, null))))),
18521
18549
  filteredChildren
18522
18550
  .filter(child => child.props.children &&
18523
18551
  !(unmountOnExit && child.props.eventKey !== localActiveKey) &&
@@ -19607,19 +19635,6 @@
19607
19635
  "numberInputUnit": "pf-c-number-input__unit"
19608
19636
  };
19609
19637
 
19610
- const PlusIconConfig = {
19611
- name: 'PlusIcon',
19612
- height: 512,
19613
- width: 448,
19614
- svgPath: 'M416 208H272V64c0-17.67-14.33-32-32-32h-32c-17.67 0-32 14.33-32 32v144H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h144v144c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32V304h144c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32z',
19615
- yOffset: 0,
19616
- xOffset: 0,
19617
- };
19618
-
19619
- const PlusIcon = createIcon(PlusIconConfig);
19620
-
19621
- var PlusIcon$1 = PlusIcon;
19622
-
19623
19638
  const defaultKeyDownHandler = (args) => (event) => {
19624
19639
  if (KEY_CODES.ARROW_UP === event.keyCode && args.onPlus) {
19625
19640
  event.preventDefault();