@carbon/ibm-products 2.41.1-canary.0 → 2.41.1-canary.13

Sign up to get free protection for your applications and to get access to all the features.
Files changed (68) hide show
  1. package/css/index-full-carbon.css +6 -0
  2. package/css/index-full-carbon.css.map +1 -1
  3. package/css/index-full-carbon.min.css +1 -1
  4. package/css/index-full-carbon.min.css.map +1 -1
  5. package/css/index-without-carbon-released-only.css +6 -0
  6. package/css/index-without-carbon-released-only.css.map +1 -1
  7. package/css/index-without-carbon-released-only.min.css +1 -1
  8. package/css/index-without-carbon-released-only.min.css.map +1 -1
  9. package/css/index-without-carbon.css +6 -0
  10. package/css/index-without-carbon.css.map +1 -1
  11. package/css/index-without-carbon.min.css +1 -1
  12. package/css/index-without-carbon.min.css.map +1 -1
  13. package/css/index.css +6 -0
  14. package/css/index.css.map +1 -1
  15. package/css/index.min.css +1 -1
  16. package/css/index.min.css.map +1 -1
  17. package/es/components/Coachmark/Coachmark.js +2 -1
  18. package/es/components/Datagrid/Datagrid/DatagridContent.js +21 -1
  19. package/es/components/Datagrid/Datagrid/addons/CustomizeColumns/TearsheetWrapper.js +12 -2
  20. package/es/components/Datagrid/Datagrid/addons/InlineEdit/InlineEditButton/InlineEditButton.d.ts +3 -3
  21. package/es/components/Datagrid/Datagrid/addons/InlineEdit/InlineEditButton/InlineEditButton.js +5 -5
  22. package/es/components/Datagrid/Datagrid/addons/InlineEdit/InlineEditCell/InlineEditCell.d.ts +3 -1
  23. package/es/components/Datagrid/Datagrid/addons/InlineEdit/InlineEditCell/InlineEditCell.js +12 -3
  24. package/es/components/Datagrid/Datagrid/addons/InlineEdit/InlineEditContext/InlineEditContext.js +7 -0
  25. package/es/components/Datagrid/useCustomizeColumns.js +0 -4
  26. package/es/components/Datagrid/useEditableCell.js +1 -1
  27. package/es/components/Datagrid/useFocusRowExpander.js +1 -1
  28. package/es/components/Datagrid/useInlineEdit.d.ts +1 -1
  29. package/es/components/Datagrid/useInlineEdit.js +9 -16
  30. package/es/components/EditUpdateCards/EditUpdateCards.d.ts +4 -3
  31. package/es/components/FeatureFlags/index.d.ts +37 -0
  32. package/es/components/FeatureFlags/index.js +151 -0
  33. package/es/components/Guidebanner/Guidebanner.js +7 -2
  34. package/es/components/ProductiveCard/ProductiveCard.d.ts +115 -2
  35. package/es/components/ProductiveCard/ProductiveCard.js +9 -9
  36. package/es/components/TagOverflow/TagOverflowModal.d.ts +34 -28
  37. package/es/components/TagOverflow/TagOverflowModal.js +4 -4
  38. package/es/components/index.d.ts +1 -0
  39. package/es/feature-flags.d.ts +1 -0
  40. package/es/global/js/hooks/usePortalTarget.js +4 -2
  41. package/es/index.js +1 -0
  42. package/lib/components/Coachmark/Coachmark.js +2 -1
  43. package/lib/components/Datagrid/Datagrid/DatagridContent.js +49 -29
  44. package/lib/components/Datagrid/Datagrid/addons/CustomizeColumns/TearsheetWrapper.js +13 -19
  45. package/lib/components/Datagrid/Datagrid/addons/InlineEdit/InlineEditButton/InlineEditButton.d.ts +3 -3
  46. package/lib/components/Datagrid/Datagrid/addons/InlineEdit/InlineEditButton/InlineEditButton.js +5 -5
  47. package/lib/components/Datagrid/Datagrid/addons/InlineEdit/InlineEditCell/InlineEditCell.d.ts +3 -1
  48. package/lib/components/Datagrid/Datagrid/addons/InlineEdit/InlineEditCell/InlineEditCell.js +12 -3
  49. package/lib/components/Datagrid/Datagrid/addons/InlineEdit/InlineEditContext/InlineEditContext.js +7 -0
  50. package/lib/components/Datagrid/useCustomizeColumns.js +0 -4
  51. package/lib/components/Datagrid/useEditableCell.js +1 -1
  52. package/lib/components/Datagrid/useFocusRowExpander.js +1 -1
  53. package/lib/components/Datagrid/useInlineEdit.d.ts +1 -1
  54. package/lib/components/Datagrid/useInlineEdit.js +8 -15
  55. package/lib/components/EditUpdateCards/EditUpdateCards.d.ts +4 -3
  56. package/lib/components/FeatureFlags/index.d.ts +37 -0
  57. package/lib/components/FeatureFlags/index.js +162 -0
  58. package/lib/components/Guidebanner/Guidebanner.js +7 -2
  59. package/lib/components/ProductiveCard/ProductiveCard.d.ts +115 -2
  60. package/lib/components/ProductiveCard/ProductiveCard.js +9 -9
  61. package/lib/components/TagOverflow/TagOverflowModal.d.ts +34 -28
  62. package/lib/components/TagOverflow/TagOverflowModal.js +2 -2
  63. package/lib/components/index.d.ts +1 -0
  64. package/lib/feature-flags.d.ts +1 -0
  65. package/lib/global/js/hooks/usePortalTarget.js +4 -2
  66. package/lib/index.js +4 -0
  67. package/package.json +7 -3
  68. package/scss/components/Datagrid/styles/_useInlineEdit.scss +6 -0
@@ -9,7 +9,6 @@
9
9
 
10
10
  Object.defineProperty(exports, '__esModule', { value: true });
11
11
 
12
- var _rollupPluginBabelHelpers = require('../../_virtual/_rollupPluginBabelHelpers.js');
13
12
  var React = require('react');
14
13
  var settings = require('../../settings.js');
15
14
  var cx = require('classnames');
@@ -21,27 +20,21 @@ var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
21
20
  var cx__default = /*#__PURE__*/_interopDefaultLegacy(cx);
22
21
 
23
22
  var blockClass = "".concat(settings.pkg.prefix, "--datagrid");
24
- var useInlineEdit = function useInlineEdit(hooks, usingEditableCell) {
25
- React.useEffect(function () {
26
- if (!usingEditableCell) {
27
- settings.pkg.checkReportFeatureEnabled('Datagrid.useInlineEdit');
28
- }
29
- if (usingEditableCell) {
30
- settings.pkg.checkReportFeatureEnabled('Datagrid.useEditableCell');
31
- }
32
- }, [usingEditableCell]);
23
+ var useInlineEdit = function useInlineEdit(hooks) {
33
24
  var addInlineEdit = function addInlineEdit(props, _ref) {
34
- var _cell$column;
25
+ var _cell$column, _cell$column2;
35
26
  var cell = _ref.cell,
36
27
  instance = _ref.instance;
37
28
  var columnInlineEditConfig = cell.column.inlineEdit;
38
29
  var inlineEditType = (_cell$column = cell.column) === null || _cell$column === void 0 || (_cell$column = _cell$column.inlineEdit) === null || _cell$column === void 0 ? void 0 : _cell$column.type;
30
+ var isDisabled = (_cell$column2 = cell.column) === null || _cell$column2 === void 0 ? void 0 : _cell$column2.isDisabled;
39
31
  var renderInlineEditComponent = function renderInlineEditComponent(type) {
40
32
  return /*#__PURE__*/React__default["default"].createElement(InlineEditCell.InlineEditCell, {
41
33
  config: columnInlineEditConfig,
42
34
  tabIndex: -1,
43
35
  value: cell.value,
44
36
  cell: cell,
37
+ isDisabled: isDisabled,
45
38
  instance: instance,
46
39
  type: type
47
40
  });
@@ -52,15 +45,15 @@ var useInlineEdit = function useInlineEdit(hooks, usingEditableCell) {
52
45
  }];
53
46
  }
54
47
  return [props, {
55
- className: cx__default["default"]("".concat(blockClass, "__cell"), _rollupPluginBabelHelpers.defineProperty({}, "".concat(blockClass, "__cell-inline-edit"), !!usingEditableCell || settings.pkg.isFeatureEnabled('Datagrid.useInlineEdit') ? true : '')),
48
+ className: cx__default["default"]("".concat(blockClass, "__cell"), "".concat(blockClass, "__cell-inline-edit")),
56
49
  role: 'gridcell',
57
- children: (!!usingEditableCell || settings.pkg.isFeatureEnabled('Datagrid.useInlineEdit')) && /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, inlineEditType === 'text' && renderInlineEditComponent(inlineEditType), inlineEditType === 'number' && renderInlineEditComponent(inlineEditType), inlineEditType === 'selection' && renderInlineEditComponent(inlineEditType), inlineEditType === 'date' && renderInlineEditComponent(inlineEditType), !inlineEditType && /*#__PURE__*/React__default["default"].createElement(InlineEditCell.InlineEditCell, {
50
+ children: /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, inlineEditType === 'text' && renderInlineEditComponent(inlineEditType), inlineEditType === 'number' && renderInlineEditComponent(inlineEditType), inlineEditType === 'selection' && renderInlineEditComponent(inlineEditType), inlineEditType === 'date' && renderInlineEditComponent(inlineEditType), !inlineEditType && /*#__PURE__*/React__default["default"].createElement(InlineEditCell.InlineEditCell, {
58
51
  config: columnInlineEditConfig,
59
52
  tabIndex: -1,
60
53
  value: cell.value,
61
54
  cell: cell,
62
55
  instance: instance,
63
- disabled: true,
56
+ disabledCell: isDisabled,
64
57
  nonEditCell: true,
65
58
  type: "text"
66
59
  }))
@@ -69,7 +62,7 @@ var useInlineEdit = function useInlineEdit(hooks, usingEditableCell) {
69
62
  hooks.getCellProps.push(addInlineEdit);
70
63
  hooks.useInstance.push(function (instance) {
71
64
  Object.assign(instance, {
72
- withInlineEdit: !!usingEditableCell || settings.pkg.isFeatureEnabled('Datagrid.useInlineEdit') ? true : false
65
+ withInlineEdit: true
73
66
  });
74
67
  });
75
68
  };
@@ -14,6 +14,7 @@ type ActionIcon = {
14
14
  iconDescription: string;
15
15
  href?: string;
16
16
  };
17
+ type PlacementType = 'top' | 'bottom';
17
18
  interface EditUpdateCardsProps {
18
19
  /**
19
20
  * Icons that are displayed on card. Refer to design documentation for implementation guidelines
@@ -22,7 +23,7 @@ interface EditUpdateCardsProps {
22
23
  /**
23
24
  * Determines if the action icons are on the top or bottom of the card
24
25
  */
25
- actionsPlacement?: 'top' | 'bottom';
26
+ actionsPlacement?: PlacementType;
26
27
  /**
27
28
  * Optional label for the top of the card.
28
29
  */
@@ -66,7 +67,7 @@ interface EditUpdateCardsProps {
66
67
  /**
67
68
  * Determines if the primary button is on the top or bottom of the card
68
69
  */
69
- primaryButtonPlacement?: 'top' | 'bottom';
70
+ primaryButtonPlacement?: PlacementType;
70
71
  /**
71
72
  * The text that's displayed in the primary button
72
73
  */
@@ -86,7 +87,7 @@ interface EditUpdateCardsProps {
86
87
  /**
87
88
  * Determines if the secondary button is on the top or bottom of the card
88
89
  */
89
- secondaryButtonPlacement?: 'top' | 'bottom';
90
+ secondaryButtonPlacement?: PlacementType;
90
91
  /**
91
92
  * The text that's displayed in the secondary button
92
93
  */
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Supports an object of feature flag values with the `flags` prop, merging them
3
+ * along with the current `FeatureFlagContext` to provide consumers to check if
4
+ * a feature flag is enabled or disabled in a given React tree
5
+ */
6
+ export function FeatureFlags({ children, flags }: {
7
+ children: any;
8
+ flags?: {} | undefined;
9
+ }): import("react/jsx-runtime").JSX.Element;
10
+ export namespace FeatureFlags {
11
+ namespace propTypes {
12
+ let children: PropTypes.Requireable<PropTypes.ReactNodeLike>;
13
+ let flags: PropTypes.Requireable<{
14
+ [x: string]: boolean | null | undefined;
15
+ }>;
16
+ }
17
+ }
18
+ /**
19
+ * Our FeatureFlagContext is used alongside the FeatureFlags component to enable
20
+ * or disable feature flags in a given React tree
21
+ */
22
+ export const FeatureFlagContext: React.Context<any>;
23
+ /**
24
+ * Access all feature flag information for the given FeatureFlagContext
25
+ *
26
+ * @returns {FeatureFlagScope}
27
+ */
28
+ export function useFeatureFlags(): FeatureFlagScope;
29
+ /**
30
+ * Access whether a given flag is enabled or disabled in a given
31
+ * FeatureFlagContext
32
+ *
33
+ * @returns {boolean}
34
+ */
35
+ export function useFeatureFlag(flag: any): boolean;
36
+ import PropTypes from 'prop-types';
37
+ import React from 'react';
@@ -0,0 +1,162 @@
1
+ /**
2
+ * Copyright IBM Corp. 2020, 2024
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
+ 'use strict';
9
+
10
+ Object.defineProperty(exports, '__esModule', { value: true });
11
+
12
+ var _rollupPluginBabelHelpers = require('../../_virtual/_rollupPluginBabelHelpers.js');
13
+ var React = require('react');
14
+ var index = require('../../node_modules/prop-types/index.js');
15
+ var FeatureFlags$1 = require('@carbon/feature-flags');
16
+
17
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
18
+
19
+ var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
20
+
21
+ /**
22
+ * Our FeatureFlagContext is used alongside the FeatureFlags component to enable
23
+ * or disable feature flags in a given React tree
24
+ */
25
+ var FeatureFlagContext = /*#__PURE__*/React.createContext(FeatureFlags$1.FeatureFlags);
26
+
27
+ /**
28
+ * Supports an object of feature flag values with the `flags` prop, merging them
29
+ * along with the current `FeatureFlagContext` to provide consumers to check if
30
+ * a feature flag is enabled or disabled in a given React tree
31
+ */
32
+ function FeatureFlags(_ref) {
33
+ var children = _ref.children,
34
+ _ref$flags = _ref.flags,
35
+ flags = _ref$flags === void 0 ? {} : _ref$flags;
36
+ var parentScope = React.useContext(FeatureFlagContext);
37
+ var _useState = React.useState(parentScope),
38
+ _useState2 = _rollupPluginBabelHelpers.slicedToArray(_useState, 2),
39
+ prevParentScope = _useState2[0],
40
+ setPrevParentScope = _useState2[1];
41
+ var _useState3 = React.useState(function () {
42
+ var scope = FeatureFlags$1.createScope(flags);
43
+ scope.mergeWithScope(parentScope);
44
+ return scope;
45
+ }),
46
+ _useState4 = _rollupPluginBabelHelpers.slicedToArray(_useState3, 2),
47
+ scope = _useState4[0],
48
+ updateScope = _useState4[1];
49
+ if (parentScope !== prevParentScope) {
50
+ var _scope = FeatureFlags$1.createScope(flags);
51
+ _scope.mergeWithScope(parentScope);
52
+ updateScope(_scope);
53
+ setPrevParentScope(parentScope);
54
+ }
55
+
56
+ // We use a custom hook to detect if any of the keys or their values change
57
+ // for flags that are passed in. If they have changed, then we re-create the
58
+ // FeatureFlagScope using the new flags
59
+ useChangedValue(flags, isEqual, function (changedFlags) {
60
+ var scope = FeatureFlags$1.createScope(changedFlags);
61
+ scope.mergeWithScope(parentScope);
62
+ updateScope(scope);
63
+ });
64
+ return /*#__PURE__*/React__default["default"].createElement(FeatureFlagContext.Provider, {
65
+ value: scope
66
+ }, children);
67
+ }
68
+ FeatureFlags.propTypes = {
69
+ children: index["default"].node,
70
+ /**
71
+ * Provide the feature flags to enabled or disabled in the current React tree
72
+ */
73
+ flags: index["default"].objectOf(index["default"].bool)
74
+ };
75
+
76
+ /**
77
+ * This hook will store previous versions of the given `value` and compare the
78
+ * current value to the previous one using the `compare` function. If the
79
+ * compare function returns true, then the given `callback` is invoked in an
80
+ * effect.
81
+ *
82
+ * @param {any} value
83
+ * @param {Function} compare
84
+ * @param {Function} callback
85
+ */
86
+ function useChangedValue(value, compare, callback) {
87
+ var initialRender = React.useRef(false);
88
+ var savedCallback = React.useRef(callback);
89
+ var _useState5 = React.useState(value),
90
+ _useState6 = _rollupPluginBabelHelpers.slicedToArray(_useState5, 2),
91
+ prevValue = _useState6[0],
92
+ setPrevValue = _useState6[1];
93
+ if (!compare(prevValue, value)) {
94
+ setPrevValue(value);
95
+ }
96
+ React.useEffect(function () {
97
+ savedCallback.current = callback;
98
+ });
99
+ React.useEffect(function () {
100
+ // We only want the callback triggered after the first render
101
+ if (initialRender.current) {
102
+ savedCallback.current(prevValue);
103
+ }
104
+ }, [prevValue]);
105
+ React.useEffect(function () {
106
+ initialRender.current = true;
107
+ }, []);
108
+ }
109
+
110
+ /**
111
+ * Access whether a given flag is enabled or disabled in a given
112
+ * FeatureFlagContext
113
+ *
114
+ * @returns {boolean}
115
+ */
116
+ function useFeatureFlag(flag) {
117
+ var scope = React.useContext(FeatureFlagContext);
118
+ // console.log(scope);
119
+ return scope.enabled(flag);
120
+ }
121
+
122
+ /**
123
+ * Access all feature flag information for the given FeatureFlagContext
124
+ *
125
+ * @returns {FeatureFlagScope}
126
+ */
127
+ function useFeatureFlags() {
128
+ return React.useContext(FeatureFlagContext);
129
+ }
130
+
131
+ /**
132
+ * Compare two objects and determine if they are equal. This is a shallow
133
+ * comparison since the objects we are comparing are objects with boolean flags
134
+ * from the flags prop in the `FeatureFlags` component
135
+ *
136
+ * @param {object} a
137
+ * @param {object} b
138
+ * @returns {boolean}
139
+ */
140
+ function isEqual(a, b) {
141
+ if (a === b) {
142
+ return true;
143
+ }
144
+ for (var _i = 0, _Object$keys = Object.keys(a); _i < _Object$keys.length; _i++) {
145
+ var key = _Object$keys[_i];
146
+ if (a[key] !== b[key]) {
147
+ return false;
148
+ }
149
+ }
150
+ for (var _i2 = 0, _Object$keys2 = Object.keys(b); _i2 < _Object$keys2.length; _i2++) {
151
+ var _key = _Object$keys2[_i2];
152
+ if (b[_key] !== a[_key]) {
153
+ return false;
154
+ }
155
+ }
156
+ return true;
157
+ }
158
+
159
+ exports.FeatureFlagContext = FeatureFlagContext;
160
+ exports.FeatureFlags = FeatureFlags;
161
+ exports.useFeatureFlag = useFeatureFlag;
162
+ exports.useFeatureFlags = useFeatureFlags;
@@ -18,6 +18,7 @@ var icons = require('@carbon/react/icons');
18
18
  var react = require('@carbon/react');
19
19
  var devtools = require('../../global/js/utils/devtools.js');
20
20
  var settings = require('../../settings.js');
21
+ var uuidv4 = require('../../global/js/utils/uuidv4.js');
21
22
  var Carousel = require('../Carousel/Carousel.js');
22
23
 
23
24
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
@@ -85,8 +86,9 @@ exports.Guidebanner = /*#__PURE__*/React__default["default"].forwardRef(function
85
86
  return !prevState;
86
87
  });
87
88
  };
89
+ var carouselContentId = "".concat(uuidv4["default"](), "--carousel-content-id");
88
90
  return /*#__PURE__*/React__default["default"].createElement("div", _rollupPluginBabelHelpers["extends"]({}, rest, {
89
- "aria-expanded": !isCollapsed,
91
+ "aria-owns": !isCollapsed ? carouselContentId : undefined,
90
92
  className: cx__default["default"](blockClass, className, collapsible && "".concat(blockClass, "__collapsible"), isCollapsed && "".concat(blockClass, "__collapsible-collapsed"), withLeftGutter && "".concat(blockClass, "__with-left-gutter")),
91
93
  ref: ref
92
94
  }, devtools.getDevtoolsProps(componentName)), /*#__PURE__*/React__default["default"].createElement(icons.Idea, {
@@ -95,6 +97,7 @@ exports.Guidebanner = /*#__PURE__*/React__default["default"].forwardRef(function
95
97
  }), /*#__PURE__*/React__default["default"].createElement("div", {
96
98
  className: "".concat(blockClass, "__title")
97
99
  }, title), /*#__PURE__*/React__default["default"].createElement(Carousel.Carousel, {
100
+ id: carouselContentId,
98
101
  className: "".concat(blockClass, "__carousel")
99
102
  // These colors are to match the Carousel's faded edges
100
103
  // against the Guidebanner's gradient background.
@@ -117,7 +120,9 @@ exports.Guidebanner = /*#__PURE__*/React__default["default"].forwardRef(function
117
120
  size: "md",
118
121
  className: "".concat(blockClass, "__toggle-button"),
119
122
  onClick: handleClickToggle,
120
- ref: toggleRef
123
+ ref: toggleRef,
124
+ "aria-controls": !isCollapsed ? carouselContentId : undefined,
125
+ "aria-expanded": !isCollapsed
121
126
  }, isCollapsed ? expandButtonLabel : collapseButtonLabel), showNavigation && /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement("span", {
122
127
  className: cx__default["default"]("".concat(blockClass, "__back-button"), [scrollPosition === 0 ? "".concat(blockClass, "__back-button--disabled") : null])
123
128
  }, /*#__PURE__*/React__default["default"].createElement(react.IconButton, {
@@ -1,2 +1,115 @@
1
- export let ProductiveCard: React.ForwardRefExoticComponent<React.RefAttributes<any>>;
2
- import React from 'react';
1
+ import React, { PropsWithChildren, ReactNode } from 'react';
2
+ import { CarbonIconType } from '@carbon/icons-react/lib/CarbonIcon';
3
+ type ActionIcon = {
4
+ id?: string;
5
+ icon?: CarbonIconType;
6
+ onKeyDown?(): void;
7
+ onClick?(): void;
8
+ iconDescription?: string;
9
+ href?: string;
10
+ };
11
+ type overflowAction = {
12
+ id?: string;
13
+ itemText?: string;
14
+ onClick?: () => void;
15
+ onKeydown?: () => void;
16
+ };
17
+ type PlacementType = 'top' | 'bottom';
18
+ type ClickZoneType = 'one' | 'two' | 'three';
19
+ interface ProductiveCardProps extends PropsWithChildren {
20
+ /**
21
+ * Icons that are displayed on card. Refer to design documentation for implementation guidelines. Note- href will supersede onClick
22
+ */
23
+ actionIcons?: ActionIcon[];
24
+ /**
25
+ * Determines if the action icons are on the top or bottom of the card
26
+ */
27
+ actionsPlacement?: PlacementType;
28
+ /**
29
+ * Content that shows in the body of the card
30
+ */
31
+ /**
32
+ * Optional user provided class
33
+ */
34
+ className?: string;
35
+ children: ReactNode;
36
+ /**
37
+ * Designates which zones of the card are clickable. Refer to design documentation for implementation guidelines
38
+ */
39
+ clickZone?: ClickZoneType;
40
+ /**
41
+ * Optional header description
42
+ */
43
+ description?: string | object | ReactNode;
44
+ /**
45
+ * Optional label for the top of the card
46
+ */
47
+ label?: string | object | ReactNode;
48
+ /**
49
+ * Provides the callback for a clickable card
50
+ */
51
+ onClick?: () => void;
52
+ /**
53
+ * Function that's called from the primary button or action icon
54
+ */
55
+ onPrimaryButtonClick?: () => void;
56
+ /**
57
+ * Function that's called from the secondary button
58
+ */
59
+ onSecondaryButtonClick?: () => void;
60
+ /**
61
+ * Use an overflow menu instead of action icons. Refer to design documentation for implementation guidelines
62
+ */
63
+ overflowActions?: overflowAction[];
64
+ /**
65
+ * Aria label prop required for OverflowMenu
66
+ */
67
+ overflowAriaLabel?: string;
68
+ /**
69
+ * Optionally specify an href for your Button to become an <a> element
70
+ */
71
+ primaryButtonHref?: string;
72
+ /**
73
+ * Optional prop to allow overriding the icon rendering. Can be a React component class
74
+ */
75
+ primaryButtonIcon?: CarbonIconType;
76
+ /**
77
+ * Determines if the primary button is on the top or bottom of the card
78
+ */
79
+ primaryButtonPlacement?: PlacementType;
80
+ /**
81
+ * The text that's displayed in the primary button
82
+ */
83
+ primaryButtonText?: string;
84
+ /**
85
+ * Optionally specify an href for your Button to become an <a> element
86
+ */
87
+ secondaryButtonHref?: string;
88
+ /**
89
+ * Optional prop to allow overriding the icon rendering. Can be a React component class
90
+ */
91
+ secondaryButtonIcon?: CarbonIconType;
92
+ /**
93
+ * Determines if the secondary button is on the top or bottom of the card
94
+ */
95
+ secondaryButtonPlacement?: PlacementType;
96
+ /**
97
+ * The text that's displayed in the secondary button
98
+ */
99
+ secondaryButtonText?: string;
100
+ /**
101
+ * **Experimental:** For all cases a `Slug` component can be provided.
102
+ * Clickable tiles only accept a boolean value of true and display a hollow slug.
103
+ */
104
+ slug?: ReactNode | boolean;
105
+ /**
106
+ * Title that's displayed at the top of the card
107
+ */
108
+ title?: string | object | ReactNode;
109
+ /**
110
+ * Determines title size
111
+ */
112
+ titleSize?: 'default' | 'large';
113
+ }
114
+ export declare let ProductiveCard: React.ForwardRefExoticComponent<ProductiveCardProps & React.RefAttributes<HTMLDivElement>>;
115
+ export {};
@@ -23,22 +23,16 @@ var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
23
23
 
24
24
  var _excluded = ["actionsPlacement"];
25
25
  var componentName = 'ProductiveCard';
26
-
27
- // Default values for props
28
- var defaults = {
29
- actionsPlacement: 'top'
30
- };
31
26
  exports.ProductiveCard = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
32
27
  var _ref$actionsPlacement = _ref.actionsPlacement,
33
- actionsPlacement = _ref$actionsPlacement === void 0 ? defaults.actionsPlacement : _ref$actionsPlacement,
28
+ actionsPlacement = _ref$actionsPlacement === void 0 ? 'top' : _ref$actionsPlacement,
34
29
  rest = _rollupPluginBabelHelpers.objectWithoutProperties(_ref, _excluded);
35
30
  var validProps = propsHelper.prepareProps(rest, ['media', 'mediaPosition', 'pictogram', 'primaryButtonClick', 'productive', 'secondaryButtonKind']);
36
31
  return /*#__PURE__*/React__default["default"].createElement(Card.Card, _rollupPluginBabelHelpers["extends"]({}, _rollupPluginBabelHelpers.objectSpread2(_rollupPluginBabelHelpers.objectSpread2({}, validProps), {}, {
37
32
  actionsPlacement: actionsPlacement,
38
- ref: ref
39
- }), {
33
+ ref: ref,
40
34
  productive: true
41
- }, devtools.getDevtoolsProps(componentName)));
35
+ }), devtools.getDevtoolsProps(componentName)));
42
36
  });
43
37
 
44
38
  // Return a placeholder if not released and not enabled by feature flag
@@ -47,6 +41,7 @@ exports.ProductiveCard.propTypes = {
47
41
  /**
48
42
  * Icons that are displayed on card. Refer to design documentation for implementation guidelines
49
43
  */
44
+ /**@ts-ignore */
50
45
  actionIcons: index["default"].arrayOf(index["default"].shape({
51
46
  id: index["default"].string,
52
47
  icon: index["default"].oneOfType([index["default"].func, index["default"].object]),
@@ -94,6 +89,7 @@ exports.ProductiveCard.propTypes = {
94
89
  /**
95
90
  * Use an overflow menu instead of action icons. Refer to design documentation for implementation guidelines
96
91
  */
92
+ /**@ts-ignore */
97
93
  overflowActions: index["default"].arrayOf(index["default"].shape({
98
94
  id: index["default"].string,
99
95
  itemText: index["default"].string,
@@ -111,6 +107,7 @@ exports.ProductiveCard.propTypes = {
111
107
  /**
112
108
  * Optional prop to allow overriding the icon rendering. Can be a React component class
113
109
  */
110
+ /**@ts-ignore */
114
111
  primaryButtonIcon: index["default"].oneOfType([index["default"].func, index["default"].object]),
115
112
  /**
116
113
  * Determines if the primary button is on the top or bottom of the card
@@ -119,6 +116,7 @@ exports.ProductiveCard.propTypes = {
119
116
  /**
120
117
  * The text that's displayed in the primary button
121
118
  */
119
+ /**@ts-ignore */
122
120
  primaryButtonText: index["default"].node,
123
121
  /**
124
122
  * Optionally specify an href for your Button to become an <a> element
@@ -127,6 +125,7 @@ exports.ProductiveCard.propTypes = {
127
125
  /**
128
126
  * Optional prop to allow overriding the icon rendering. Can be a React component class
129
127
  */
128
+ /**@ts-ignore */
130
129
  secondaryButtonIcon: index["default"].oneOfType([index["default"].func, index["default"].object]),
131
130
  /**
132
131
  * Determines if the secondary button is on the top or bottom of the card
@@ -135,6 +134,7 @@ exports.ProductiveCard.propTypes = {
135
134
  /**
136
135
  * The text that's displayed in the secondary button
137
136
  */
137
+ /**@ts-ignore */
138
138
  secondaryButtonText: index["default"].node,
139
139
  /**
140
140
  * **Experimental:** For all cases a `Slug` component can be provided.
@@ -1,31 +1,37 @@
1
- export function TagOverflowModal({ allTags, className, title, onClose, open, overflowType, portalTarget: portalTargetIn, searchLabel, searchPlaceholder, ...rest }: {
2
- [x: string]: any;
3
- allTags: any;
4
- className: any;
5
- title: any;
6
- onClose: any;
7
- open: any;
8
- overflowType: any;
9
- portalTarget: any;
10
- searchLabel?: string | undefined;
11
- searchPlaceholder: any;
12
- }): any;
13
- export namespace TagOverflowModal {
14
- export namespace propTypes {
15
- let allTags: PropTypes.Requireable<(PropTypes.InferProps<{
1
+ /// <reference path="../../../src/custom-typings/index.d.ts" />
2
+ import React, { ReactNode } from 'react';
3
+ import PropTypes from 'prop-types';
4
+ import { Tag } from '@carbon/react';
5
+ interface TagType {
6
+ label: string;
7
+ }
8
+ type AllTags = (TagType & Omit<React.ComponentProps<Tag>, 'filter'>)[];
9
+ interface TagOverflowModalProps {
10
+ allTags?: AllTags;
11
+ className?: string;
12
+ onClose?: () => void;
13
+ open?: boolean;
14
+ overflowType?: 'default' | 'tag';
15
+ portalTarget?: ReactNode;
16
+ searchLabel?: string;
17
+ searchPlaceholder?: string;
18
+ title?: string;
19
+ }
20
+ export declare const TagOverflowModal: {
21
+ ({ allTags, className, title, onClose, open, overflowType, portalTarget: portalTargetIn, searchLabel, searchPlaceholder, ...rest }: TagOverflowModalProps): any;
22
+ propTypes: {
23
+ allTags: PropTypes.Requireable<(PropTypes.InferProps<{
16
24
  label: PropTypes.Validator<string>;
17
25
  }> | null | undefined)[]>;
18
- let className: PropTypes.Requireable<string>;
19
- let onClose: PropTypes.Requireable<(...args: any[]) => any>;
20
- let open: PropTypes.Requireable<boolean>;
21
- let overflowType: PropTypes.Requireable<string>;
22
- let portalTarget: PropTypes.Requireable<PropTypes.ReactNodeLike>;
23
- let searchLabel: PropTypes.Requireable<string>;
24
- let searchPlaceholder: PropTypes.Requireable<string>;
25
- let title: PropTypes.Requireable<string>;
26
- }
27
- export { componentName as displayName };
28
- }
29
- import PropTypes from 'prop-types';
30
- declare const componentName: "TagOverflowModal";
26
+ className: PropTypes.Requireable<string>;
27
+ onClose: PropTypes.Requireable<(...args: any[]) => any>;
28
+ open: PropTypes.Requireable<boolean>;
29
+ overflowType: PropTypes.Requireable<string>;
30
+ portalTarget: PropTypes.Requireable<PropTypes.ReactNodeLike>;
31
+ searchLabel: PropTypes.Requireable<string>;
32
+ searchPlaceholder: PropTypes.Requireable<string>;
33
+ title: PropTypes.Requireable<string>;
34
+ };
35
+ displayName: string;
36
+ };
31
37
  export {};
@@ -51,13 +51,13 @@ var TagOverflowModal = function TagOverflowModal(_ref) {
51
51
  setSearch = _useState2[1];
52
52
  var renderPortalUse = usePortalTarget.usePortalTarget(portalTargetIn);
53
53
  var getFilteredItems = function getFilteredItems() {
54
- if (open && search) {
54
+ if (open && search && allTags) {
55
55
  return allTags.filter(function (tag) {
56
56
  var _tag$label;
57
57
  return (_tag$label = tag.label) === null || _tag$label === void 0 || (_tag$label = _tag$label.toLocaleLowerCase()) === null || _tag$label === void 0 ? void 0 : _tag$label.includes(search.toLocaleLowerCase());
58
58
  });
59
59
  }
60
- return allTags;
60
+ return allTags || [];
61
61
  };
62
62
  var handleSearch = function handleSearch(evt) {
63
63
  setSearch(evt.target.value || '');
@@ -69,3 +69,4 @@ export { Guidebanner, GuidebannerElement, GuidebannerElementButton, GuidebannerE
69
69
  export { InlineTip, InlineTipButton, InlineTipLink } from "./InlineTip";
70
70
  export { DescriptionList, DescriptionListBody, DescriptionListCell, DescriptionListRow } from "./DescriptionList";
71
71
  export { FilterPanel, FilterPanelAccordion, FilterPanelAccordionItem, FilterPanelCheckbox, FilterPanelCheckboxWithOverflow, FilterPanelGroup, FilterPanelLabel, FilterPanelSearch } from "./FilterPanel";
72
+ export { FeatureFlags as unstable_FeatureFlags, useFeatureFlag as unstable_useFeatureFlag, useFeatureFlags as unstable_useFeatureFlags } from "./FeatureFlags";
@@ -0,0 +1 @@
1
+ export {};
@@ -13,8 +13,10 @@ var _rollupPluginBabelHelpers = require('../../../_virtual/_rollupPluginBabelHel
13
13
  var React = require('react');
14
14
  var settings = require('../../../settings.js');
15
15
  var reactDom = require('react-dom');
16
+ var index = require('../../../components/FeatureFlags/index.js');
16
17
 
17
18
  var usePortalTarget = function usePortalTarget(portalTargetIn) {
19
+ var enablePortalTarget = index.useFeatureFlag('default-portal-target-body');
18
20
  var _useState = React.useState(null),
19
21
  _useState2 = _rollupPluginBabelHelpers.slicedToArray(_useState, 2),
20
22
  portalTarget = _useState2[0],
@@ -23,11 +25,11 @@ var usePortalTarget = function usePortalTarget(portalTargetIn) {
23
25
  if (portalTargetIn) {
24
26
  setPortalTarget(portalTargetIn);
25
27
  } else {
26
- if (settings.pkg.isFeatureEnabled('default-portal-target-body')) {
28
+ if (settings.pkg.isFeatureEnabled('default-portal-target-body') || enablePortalTarget) {
27
29
  setPortalTarget(document.body);
28
30
  }
29
31
  }
30
- }, [portalTargetIn]);
32
+ }, [portalTargetIn, enablePortalTarget]);
31
33
  var renderPortalUse = React.useCallback(function (children) {
32
34
  return portalTarget ? /*#__PURE__*/reactDom.createPortal(children, portalTarget) : children;
33
35
  }, [portalTarget]);
package/lib/index.js CHANGED
@@ -137,6 +137,7 @@ var FilterPanelLabel = require('./components/FilterPanel/FilterPanelLabel/Filter
137
137
  var FilterPanelSearch = require('./components/FilterPanel/FilterPanelSearch/FilterPanelSearch.js');
138
138
  var ConditionBuilder = require('./components/ConditionBuilder/ConditionBuilder.js');
139
139
  var GetStartedCard = require('./components/GetStartedCard/GetStartedCard.js');
140
+ var index$2 = require('./components/FeatureFlags/index.js');
140
141
 
141
142
 
142
143
 
@@ -581,3 +582,6 @@ Object.defineProperty(exports, 'GetStartedCard', {
581
582
  enumerable: true,
582
583
  get: function () { return GetStartedCard.GetStartedCard; }
583
584
  });
585
+ exports.unstable_FeatureFlags = index$2.FeatureFlags;
586
+ exports.unstable_useFeatureFlag = index$2.useFeatureFlag;
587
+ exports.unstable_useFeatureFlags = index$2.useFeatureFlags;