@carbon/ibm-products 1.62.1 → 1.63.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Copyright IBM Corp. 2023, 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
+ // Example usage for custom filter tag labels, in practice this
9
+ // is where a translation service would be utilized. This
10
+ // utility is for storybook demonstration purposes only.
11
+ export var handleFilterTagLabelText = function handleFilterTagLabelText(key, value) {
12
+ switch (key) {
13
+ case 'role':
14
+ return "Role: ".concat(value);
15
+ case 'joined':
16
+ return "Joined: ".concat(value);
17
+ case 'visits':
18
+ return "Visits: ".concat(value);
19
+ case 'passwordStrength':
20
+ return "Password strength: ".concat(value);
21
+ case 'status':
22
+ return "Status: ".concat(value);
23
+ default:
24
+ return "".concat(key, ": ").concat(value);
25
+ }
26
+ };
@@ -4,19 +4,21 @@ var _excluded = ["key", "value"];
4
4
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
5
5
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
6
6
  /**
7
- * Copyright IBM Corp. 2022, 2022
7
+ * Copyright IBM Corp. 2022, 2023
8
8
  *
9
9
  * This source code is licensed under the Apache-2.0 license found in the
10
10
  * LICENSE file in the root directory of this source tree.
11
11
  */
12
12
  import { Button } from 'carbon-components-react';
13
- import React from 'react';
13
+ import React, { useRef } from 'react';
14
14
  import PropTypes from 'prop-types';
15
15
  import cx from 'classnames';
16
16
  import { TagSet } from '../TagSet';
17
17
  import { pkg } from '../../settings';
18
+ import uuidv4 from '../../global/js/utils/uuidv4';
18
19
  var blockClass = "".concat(pkg.prefix, "--filter-summary");
19
20
  var FilterSummary = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
21
+ var _filterSummaryClearBu;
20
22
  var _ref$className = _ref.className,
21
23
  className = _ref$className === void 0 ? '' : _ref$className,
22
24
  _ref$clearFiltersText = _ref.clearFiltersText,
@@ -28,7 +30,10 @@ var FilterSummary = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
28
30
  _ref$renderLabel = _ref.renderLabel,
29
31
  renderLabel = _ref$renderLabel === void 0 ? null : _ref$renderLabel,
30
32
  _ref$overflowType = _ref.overflowType,
31
- overflowType = _ref$overflowType === void 0 ? 'default' : _ref$overflowType;
33
+ overflowType = _ref$overflowType === void 0 ? 'default' : _ref$overflowType,
34
+ _ref$clearButtonInlin = _ref.clearButtonInline,
35
+ clearButtonInline = _ref$clearButtonInlin === void 0 ? true : _ref$clearButtonInlin;
36
+ var filterSummaryId = "".concat(blockClass, "__").concat(uuidv4());
32
37
  var tagFilters = filters.map(function (_ref2) {
33
38
  var _renderLabel;
34
39
  var key = _ref2.key,
@@ -39,26 +44,35 @@ var FilterSummary = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
39
44
  label: (_renderLabel = renderLabel === null || renderLabel === void 0 ? void 0 : renderLabel(key, value)) !== null && _renderLabel !== void 0 ? _renderLabel : "".concat(key, ": ").concat(value)
40
45
  });
41
46
  });
47
+ var filterSummaryClearButton = useRef();
48
+ var filterSummaryRef = useRef();
49
+ var localRef = filterSummaryRef || ref;
42
50
  return /*#__PURE__*/React.createElement("div", {
43
- ref: ref,
44
- className: cx([blockClass, className])
51
+ ref: localRef,
52
+ className: cx([blockClass, className]),
53
+ id: filterSummaryId
45
54
  }, /*#__PURE__*/React.createElement(TagSet, {
46
55
  allTagsModalSearchLabel: "Search all tags",
47
56
  allTagsModalSearchPlaceholderText: "Search all tags",
48
57
  allTagsModalTitle: "All tags",
49
58
  showAllTagsLabel: "View all tags",
50
59
  tags: tagFilters,
51
- overflowType: overflowType
60
+ overflowType: overflowType,
61
+ className: cx(_defineProperty({}, "".concat(blockClass, "__clear-button-inline"), clearButtonInline)),
62
+ containingElementRef: localRef,
63
+ measurementOffset: filterSummaryClearButton === null || filterSummaryClearButton === void 0 ? void 0 : (_filterSummaryClearBu = filterSummaryClearButton.current) === null || _filterSummaryClearBu === void 0 ? void 0 : _filterSummaryClearBu.offsetWidth
52
64
  }), /*#__PURE__*/React.createElement(Button, {
53
65
  kind: "ghost",
54
66
  size: "sm",
55
- onClick: clearFilters
67
+ onClick: clearFilters,
68
+ ref: filterSummaryClearButton
56
69
  }, clearFiltersText));
57
70
  });
58
71
  var componentName = 'FilterSummary';
59
72
  FilterSummary.displayName = componentName;
60
73
  FilterSummary.propTypes = {
61
74
  className: PropTypes.string,
75
+ clearButtonInline: PropTypes.boolean,
62
76
  clearFilters: PropTypes.func.isRequired,
63
77
  clearFiltersText: PropTypes.string,
64
78
  filters: PropTypes.arrayOf(PropTypes.object).isRequired,
@@ -2,13 +2,13 @@ import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
2
  import _extends from "@babel/runtime/helpers/extends";
3
3
  import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
4
4
  import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
5
- var _excluded = ["align", "allTagsModalTarget", "className", "maxVisible", "multiline", "overflowAlign", "overflowClassName", "overflowType", "overflowDirection", "allTagsModalTitle", "allTagsModalSearchLabel", "allTagsModalSearchPlaceholderText", "showAllTagsLabel", "tags"],
5
+ var _excluded = ["align", "allTagsModalTarget", "className", "maxVisible", "multiline", "overflowAlign", "overflowClassName", "overflowType", "overflowDirection", "allTagsModalTitle", "allTagsModalSearchLabel", "allTagsModalSearchPlaceholderText", "showAllTagsLabel", "tags", "containingElementRef", "measurementOffset"],
6
6
  _excluded2 = ["label", "id"],
7
7
  _excluded3 = ["label"];
8
8
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
9
9
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
10
10
  //
11
- // Copyright IBM Corp. 2020, 2021
11
+ // Copyright IBM Corp. 2020, 2023
12
12
  //
13
13
  // This source code is licensed under the Apache-2.0 license found in the
14
14
  // LICENSE file in the root directory of this source tree.
@@ -33,6 +33,7 @@ var allTagsModalSearchThreshold = 10;
33
33
  var defaults = {
34
34
  align: 'start',
35
35
  // allTagsModalTarget: document.body,
36
+ measurementOffset: 0,
36
37
  overflowAlign: 'center',
37
38
  overflowDirection: 'bottom',
38
39
  overflowType: 'default'
@@ -56,6 +57,9 @@ export var TagSet = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
56
57
  allTagsModalSearchPlaceholderText = _ref.allTagsModalSearchPlaceholderText,
57
58
  showAllTagsLabel = _ref.showAllTagsLabel,
58
59
  tags = _ref.tags,
60
+ containingElementRef = _ref.containingElementRef,
61
+ _ref$measurementOffse = _ref.measurementOffset,
62
+ measurementOffset = _ref$measurementOffse === void 0 ? defaults.measurementOffset : _ref$measurementOffse,
59
63
  rest = _objectWithoutProperties(_ref, _excluded);
60
64
  var _useState = useState(3),
61
65
  _useState2 = _slicedToArray(_useState, 2),
@@ -160,7 +164,9 @@ export var TagSet = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
160
164
  // how many will fit?
161
165
  var willFit = 0;
162
166
  if (sizingTags.length > 0) {
163
- var spaceAvailable = tagSetRef.current.offsetWidth;
167
+ var optionalContainingElement = containingElementRef === null || containingElementRef === void 0 ? void 0 : containingElementRef.current;
168
+ var measurementOffsetValue = typeof measurementOffset === 'number' ? measurementOffset : 0;
169
+ var spaceAvailable = optionalContainingElement ? optionalContainingElement.offsetWidth - measurementOffsetValue : tagSetRef.current.offsetWidth;
164
170
  for (var i in sizingTags) {
165
171
  var tagWidth = sizingTags[i].offsetWidth;
166
172
  if (spaceAvailable >= tagWidth) {
@@ -183,7 +189,7 @@ export var TagSet = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
183
189
  } else {
184
190
  setDisplayCount(maxVisible ? Math.min(willFit, maxVisible) : willFit);
185
191
  }
186
- }, [maxVisible, multiline, sizingTags, tagSetRef]);
192
+ }, [maxVisible, multiline, sizingTags, tagSetRef, containingElementRef, measurementOffset]);
187
193
  useEffect(function () {
188
194
  checkFullyVisibleTags();
189
195
  }, [checkFullyVisibleTags, maxVisible, multiline, sizingTags]);
@@ -205,7 +211,8 @@ export var TagSet = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
205
211
  setShowAllModalOpen(false);
206
212
  };
207
213
  useResizeObserver(sizingContainerRef, handleSizerTagsResize);
208
- useResizeObserver(tagSetRef, handleResize);
214
+ var resizeOption = containingElementRef ? containingElementRef : tagSetRef;
215
+ useResizeObserver(resizeOption, handleResize);
209
216
  return /*#__PURE__*/React.createElement("div", _extends({}, rest, {
210
217
  className: cx([blockClass, className]),
211
218
  ref: tagSetRef
@@ -284,10 +291,20 @@ TagSet.propTypes = {
284
291
  * className
285
292
  */
286
293
  className: PropTypes.string,
294
+ /**
295
+ * Optional ref for custom resize container to measure available space
296
+ * Default will measure the available space of the TagSet container itself.
297
+ */
298
+ containingElementRef: PropTypes.object,
287
299
  /**
288
300
  * maximum visible tags
289
301
  */
290
302
  maxVisible: PropTypes.number,
303
+ /**
304
+ * Specify offset amount for measure available space, only used when `containingElementSelector`
305
+ * is also provided
306
+ */
307
+ measurementOffset: PropTypes.number,
291
308
  /**
292
309
  * display tags in multiple lines
293
310
  */
@@ -53,7 +53,7 @@ var useFilters = function useFilters(_ref) {
53
53
  /** Methods */
54
54
  // If the user decides to cancel or click outside the flyout, it reverts back to the filters that were
55
55
  // there when they opened the flyout
56
- var revertToPreviousFilters = function revertToPreviousFilters() {
56
+ var revertToPreviousFilters = (0, _react.useCallback)(function () {
57
57
  setFiltersState(JSON.parse(prevFiltersRef.current));
58
58
  setFiltersObjectArray(JSON.parse(prevFiltersObjectArrayRef.current));
59
59
  setAllFilters(JSON.parse(lastAppliedFilters.current));
@@ -63,7 +63,7 @@ var useFilters = function useFilters(_ref) {
63
63
  holdingPrevFiltersRef.current = JSON.parse(prevFiltersRef.current);
64
64
  holdingLastAppliedFiltersRef.current = JSON.parse(prevFiltersObjectArrayRef.current);
65
65
  holdingPrevFiltersObjectArrayRef.current = JSON.parse(lastAppliedFilters.current);
66
- };
66
+ }, [setAllFilters]);
67
67
  var reset = (0, _react.useCallback)(function () {
68
68
  // When we reset we want the "initialFilters" to be an empty array
69
69
  var resetFiltersArray = [];
@@ -317,6 +317,7 @@ var useFilters = function useFilters(_ref) {
317
317
  */
318
318
  (0, _react.useEffect)(function () {
319
319
  if (!panelOpen && previousState !== null && previousState !== void 0 && previousState.panelOpen) {
320
+ revertToPreviousFilters();
320
321
  setAllFilters(holdingLastAppliedFiltersRef.current);
321
322
  }
322
323
  if (panelOpen && !(previousState !== null && previousState !== void 0 && previousState.panelOpen)) {
@@ -326,7 +327,7 @@ var useFilters = function useFilters(_ref) {
326
327
  setAllFilters(JSON.parse(prevFiltersObjectArrayRef.current));
327
328
  }
328
329
  }
329
- }, [panelOpen, previousState, previousState === null || previousState === void 0 ? void 0 : previousState.panelOpen, reset, setAllFilters]);
330
+ }, [panelOpen, previousState, previousState === null || previousState === void 0 ? void 0 : previousState.panelOpen, reset, setAllFilters, revertToPreviousFilters]);
330
331
  var cancel = function cancel() {
331
332
  // Reverting to previous filters only applies when using batch actions
332
333
  if (updateMethod === _constants.BATCH) {
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.handleFilterTagLabelText = void 0;
7
+ /**
8
+ * Copyright IBM Corp. 2023, 2023
9
+ *
10
+ * This source code is licensed under the Apache-2.0 license found in the
11
+ * LICENSE file in the root directory of this source tree.
12
+ */
13
+
14
+ // Example usage for custom filter tag labels, in practice this
15
+ // is where a translation service would be utilized. This
16
+ // utility is for storybook demonstration purposes only.
17
+ var handleFilterTagLabelText = function handleFilterTagLabelText(key, value) {
18
+ switch (key) {
19
+ case 'role':
20
+ return "Role: ".concat(value);
21
+ case 'joined':
22
+ return "Joined: ".concat(value);
23
+ case 'visits':
24
+ return "Visits: ".concat(value);
25
+ case 'passwordStrength':
26
+ return "Password strength: ".concat(value);
27
+ case 'status':
28
+ return "Status: ".concat(value);
29
+ default:
30
+ return "".concat(key, ": ").concat(value);
31
+ }
32
+ };
33
+ exports.handleFilterTagLabelText = handleFilterTagLabelText;
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _typeof = require("@babel/runtime/helpers/typeof");
4
5
  Object.defineProperty(exports, "__esModule", {
5
6
  value: true
6
7
  });
@@ -8,16 +9,20 @@ exports.default = void 0;
8
9
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
9
10
  var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
10
11
  var _carbonComponentsReact = require("carbon-components-react");
11
- var _react = _interopRequireDefault(require("react"));
12
+ var _react = _interopRequireWildcard(require("react"));
12
13
  var _propTypes = _interopRequireDefault(require("prop-types"));
13
14
  var _classnames = _interopRequireDefault(require("classnames"));
14
15
  var _TagSet = require("../TagSet");
15
16
  var _settings = require("../../settings");
17
+ var _uuidv = _interopRequireDefault(require("../../global/js/utils/uuidv4"));
16
18
  var _excluded = ["key", "value"];
19
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
20
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
17
21
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
18
22
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
19
23
  var blockClass = "".concat(_settings.pkg.prefix, "--filter-summary");
20
24
  var FilterSummary = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref) {
25
+ var _filterSummaryClearBu;
21
26
  var _ref$className = _ref.className,
22
27
  className = _ref$className === void 0 ? '' : _ref$className,
23
28
  _ref$clearFiltersText = _ref.clearFiltersText,
@@ -29,7 +34,10 @@ var FilterSummary = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref)
29
34
  _ref$renderLabel = _ref.renderLabel,
30
35
  renderLabel = _ref$renderLabel === void 0 ? null : _ref$renderLabel,
31
36
  _ref$overflowType = _ref.overflowType,
32
- overflowType = _ref$overflowType === void 0 ? 'default' : _ref$overflowType;
37
+ overflowType = _ref$overflowType === void 0 ? 'default' : _ref$overflowType,
38
+ _ref$clearButtonInlin = _ref.clearButtonInline,
39
+ clearButtonInline = _ref$clearButtonInlin === void 0 ? true : _ref$clearButtonInlin;
40
+ var filterSummaryId = "".concat(blockClass, "__").concat((0, _uuidv.default)());
33
41
  var tagFilters = filters.map(function (_ref2) {
34
42
  var _renderLabel;
35
43
  var key = _ref2.key,
@@ -40,26 +48,35 @@ var FilterSummary = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref)
40
48
  label: (_renderLabel = renderLabel === null || renderLabel === void 0 ? void 0 : renderLabel(key, value)) !== null && _renderLabel !== void 0 ? _renderLabel : "".concat(key, ": ").concat(value)
41
49
  });
42
50
  });
51
+ var filterSummaryClearButton = (0, _react.useRef)();
52
+ var filterSummaryRef = (0, _react.useRef)();
53
+ var localRef = filterSummaryRef || ref;
43
54
  return /*#__PURE__*/_react.default.createElement("div", {
44
- ref: ref,
45
- className: (0, _classnames.default)([blockClass, className])
55
+ ref: localRef,
56
+ className: (0, _classnames.default)([blockClass, className]),
57
+ id: filterSummaryId
46
58
  }, /*#__PURE__*/_react.default.createElement(_TagSet.TagSet, {
47
59
  allTagsModalSearchLabel: "Search all tags",
48
60
  allTagsModalSearchPlaceholderText: "Search all tags",
49
61
  allTagsModalTitle: "All tags",
50
62
  showAllTagsLabel: "View all tags",
51
63
  tags: tagFilters,
52
- overflowType: overflowType
64
+ overflowType: overflowType,
65
+ className: (0, _classnames.default)((0, _defineProperty2.default)({}, "".concat(blockClass, "__clear-button-inline"), clearButtonInline)),
66
+ containingElementRef: localRef,
67
+ measurementOffset: filterSummaryClearButton === null || filterSummaryClearButton === void 0 ? void 0 : (_filterSummaryClearBu = filterSummaryClearButton.current) === null || _filterSummaryClearBu === void 0 ? void 0 : _filterSummaryClearBu.offsetWidth
53
68
  }), /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.Button, {
54
69
  kind: "ghost",
55
70
  size: "sm",
56
- onClick: clearFilters
71
+ onClick: clearFilters,
72
+ ref: filterSummaryClearButton
57
73
  }, clearFiltersText));
58
74
  });
59
75
  var componentName = 'FilterSummary';
60
76
  FilterSummary.displayName = componentName;
61
77
  FilterSummary.propTypes = {
62
78
  className: _propTypes.default.string,
79
+ clearButtonInline: _propTypes.default.boolean,
63
80
  clearFilters: _propTypes.default.func.isRequired,
64
81
  clearFiltersText: _propTypes.default.string,
65
82
  filters: _propTypes.default.arrayOf(_propTypes.default.object).isRequired,
@@ -21,7 +21,7 @@ var _useResizeObserver = require("../../global/js/hooks/useResizeObserver");
21
21
  var _devtools = require("../../global/js/utils/devtools");
22
22
  var _propsHelper = require("../../global/js/utils/props-helper");
23
23
  var _settings = require("../../settings");
24
- var _excluded = ["align", "allTagsModalTarget", "className", "maxVisible", "multiline", "overflowAlign", "overflowClassName", "overflowType", "overflowDirection", "allTagsModalTitle", "allTagsModalSearchLabel", "allTagsModalSearchPlaceholderText", "showAllTagsLabel", "tags"],
24
+ var _excluded = ["align", "allTagsModalTarget", "className", "maxVisible", "multiline", "overflowAlign", "overflowClassName", "overflowType", "overflowDirection", "allTagsModalTitle", "allTagsModalSearchLabel", "allTagsModalSearchPlaceholderText", "showAllTagsLabel", "tags", "containingElementRef", "measurementOffset"],
25
25
  _excluded2 = ["label", "id"],
26
26
  _excluded3 = ["label"];
27
27
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
@@ -36,6 +36,7 @@ var allTagsModalSearchThreshold = 10;
36
36
  var defaults = {
37
37
  align: 'start',
38
38
  // allTagsModalTarget: document.body,
39
+ measurementOffset: 0,
39
40
  overflowAlign: 'center',
40
41
  overflowDirection: 'bottom',
41
42
  overflowType: 'default'
@@ -59,6 +60,9 @@ var TagSet = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref) {
59
60
  allTagsModalSearchPlaceholderText = _ref.allTagsModalSearchPlaceholderText,
60
61
  showAllTagsLabel = _ref.showAllTagsLabel,
61
62
  tags = _ref.tags,
63
+ containingElementRef = _ref.containingElementRef,
64
+ _ref$measurementOffse = _ref.measurementOffset,
65
+ measurementOffset = _ref$measurementOffse === void 0 ? defaults.measurementOffset : _ref$measurementOffse,
62
66
  rest = (0, _objectWithoutProperties2.default)(_ref, _excluded);
63
67
  var _useState = (0, _react.useState)(3),
64
68
  _useState2 = (0, _slicedToArray2.default)(_useState, 2),
@@ -163,7 +167,9 @@ var TagSet = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref) {
163
167
  // how many will fit?
164
168
  var willFit = 0;
165
169
  if (sizingTags.length > 0) {
166
- var spaceAvailable = tagSetRef.current.offsetWidth;
170
+ var optionalContainingElement = containingElementRef === null || containingElementRef === void 0 ? void 0 : containingElementRef.current;
171
+ var measurementOffsetValue = typeof measurementOffset === 'number' ? measurementOffset : 0;
172
+ var spaceAvailable = optionalContainingElement ? optionalContainingElement.offsetWidth - measurementOffsetValue : tagSetRef.current.offsetWidth;
167
173
  for (var i in sizingTags) {
168
174
  var tagWidth = sizingTags[i].offsetWidth;
169
175
  if (spaceAvailable >= tagWidth) {
@@ -186,7 +192,7 @@ var TagSet = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref) {
186
192
  } else {
187
193
  setDisplayCount(maxVisible ? Math.min(willFit, maxVisible) : willFit);
188
194
  }
189
- }, [maxVisible, multiline, sizingTags, tagSetRef]);
195
+ }, [maxVisible, multiline, sizingTags, tagSetRef, containingElementRef, measurementOffset]);
190
196
  (0, _react.useEffect)(function () {
191
197
  checkFullyVisibleTags();
192
198
  }, [checkFullyVisibleTags, maxVisible, multiline, sizingTags]);
@@ -208,7 +214,8 @@ var TagSet = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref) {
208
214
  setShowAllModalOpen(false);
209
215
  };
210
216
  (0, _useResizeObserver.useResizeObserver)(sizingContainerRef, handleSizerTagsResize);
211
- (0, _useResizeObserver.useResizeObserver)(tagSetRef, handleResize);
217
+ var resizeOption = containingElementRef ? containingElementRef : tagSetRef;
218
+ (0, _useResizeObserver.useResizeObserver)(resizeOption, handleResize);
212
219
  return /*#__PURE__*/_react.default.createElement("div", (0, _extends2.default)({}, rest, {
213
220
  className: (0, _classnames.default)([blockClass, className]),
214
221
  ref: tagSetRef
@@ -289,10 +296,20 @@ TagSet.propTypes = {
289
296
  * className
290
297
  */
291
298
  className: _propTypes.default.string,
299
+ /**
300
+ * Optional ref for custom resize container to measure available space
301
+ * Default will measure the available space of the TagSet container itself.
302
+ */
303
+ containingElementRef: _propTypes.default.object,
292
304
  /**
293
305
  * maximum visible tags
294
306
  */
295
307
  maxVisible: _propTypes.default.number,
308
+ /**
309
+ * Specify offset amount for measure available space, only used when `containingElementSelector`
310
+ * is also provided
311
+ */
312
+ measurementOffset: _propTypes.default.number,
296
313
  /**
297
314
  * display tags in multiple lines
298
315
  */
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@carbon/ibm-products",
3
3
  "description": "Carbon for IBM Products",
4
- "version": "1.62.1",
4
+ "version": "1.63.0",
5
5
  "license": "Apache-2.0",
6
6
  "main": "lib/index.js",
7
7
  "module": "es/index.js",
@@ -92,10 +92,10 @@
92
92
  "@carbon/themes": "^10.55.3",
93
93
  "@carbon/type": "^10.45.3",
94
94
  "carbon-components": "^10.58.12",
95
- "carbon-components-react": "^7.59.16",
95
+ "carbon-components-react": "^7.59.17",
96
96
  "carbon-icons": "^7.0.7",
97
97
  "react": "^16.8.6 || ^17.0.1",
98
98
  "react-dom": "^16.8.6 || ^17.0.1"
99
99
  },
100
- "gitHead": "9de0589dad65ac5c559578d5f53c6ee31432717a"
100
+ "gitHead": "2fe150f0f2374e506659d44f2c4a616ef7c4f2b0"
101
101
  }
@@ -1,5 +1,5 @@
1
1
  //
2
- // Copyright IBM Corp. 2022
2
+ // Copyright IBM Corp. 2022, 2023
3
3
  //
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.
@@ -17,3 +17,8 @@ $block-class: #{$pkg-prefix}--filter-summary;
17
17
  border-top: 1px solid $ui-03;
18
18
  background: $ui-01;
19
19
  }
20
+
21
+ .#{$block-class}
22
+ .#{$pkg-prefix}--tag-set.#{$pkg-prefix}--tag-set.#{$block-class}__clear-button-inline {
23
+ width: auto;
24
+ }