@carbon/ibm-products 2.41.1-canary.5 → 2.41.1-canary.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (58) 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/Datagrid/Datagrid/DatagridContent.js +21 -1
  18. package/es/components/Datagrid/Datagrid/addons/CustomizeColumns/TearsheetWrapper.js +12 -2
  19. package/es/components/Datagrid/Datagrid/addons/InlineEdit/InlineEditButton/InlineEditButton.d.ts +3 -3
  20. package/es/components/Datagrid/Datagrid/addons/InlineEdit/InlineEditButton/InlineEditButton.js +5 -5
  21. package/es/components/Datagrid/Datagrid/addons/InlineEdit/InlineEditCell/InlineEditCell.d.ts +3 -1
  22. package/es/components/Datagrid/Datagrid/addons/InlineEdit/InlineEditCell/InlineEditCell.js +12 -3
  23. package/es/components/Datagrid/Datagrid/addons/InlineEdit/InlineEditContext/InlineEditContext.js +7 -0
  24. package/es/components/Datagrid/useCustomizeColumns.js +0 -4
  25. package/es/components/Datagrid/useEditableCell.js +1 -1
  26. package/es/components/Datagrid/useInlineEdit.d.ts +1 -1
  27. package/es/components/Datagrid/useInlineEdit.js +9 -16
  28. package/es/components/EditUpdateCards/EditUpdateCards.d.ts +4 -3
  29. package/es/components/FeatureFlags/index.d.ts +37 -0
  30. package/es/components/FeatureFlags/index.js +151 -0
  31. package/es/components/ProductiveCard/ProductiveCard.d.ts +115 -2
  32. package/es/components/ProductiveCard/ProductiveCard.js +9 -9
  33. package/es/components/index.d.ts +1 -0
  34. package/es/feature-flags.d.ts +1 -0
  35. package/es/global/js/hooks/usePortalTarget.js +4 -2
  36. package/es/index.js +1 -0
  37. package/lib/components/Datagrid/Datagrid/DatagridContent.js +49 -29
  38. package/lib/components/Datagrid/Datagrid/addons/CustomizeColumns/TearsheetWrapper.js +13 -19
  39. package/lib/components/Datagrid/Datagrid/addons/InlineEdit/InlineEditButton/InlineEditButton.d.ts +3 -3
  40. package/lib/components/Datagrid/Datagrid/addons/InlineEdit/InlineEditButton/InlineEditButton.js +5 -5
  41. package/lib/components/Datagrid/Datagrid/addons/InlineEdit/InlineEditCell/InlineEditCell.d.ts +3 -1
  42. package/lib/components/Datagrid/Datagrid/addons/InlineEdit/InlineEditCell/InlineEditCell.js +12 -3
  43. package/lib/components/Datagrid/Datagrid/addons/InlineEdit/InlineEditContext/InlineEditContext.js +7 -0
  44. package/lib/components/Datagrid/useCustomizeColumns.js +0 -4
  45. package/lib/components/Datagrid/useEditableCell.js +1 -1
  46. package/lib/components/Datagrid/useInlineEdit.d.ts +1 -1
  47. package/lib/components/Datagrid/useInlineEdit.js +8 -15
  48. package/lib/components/EditUpdateCards/EditUpdateCards.d.ts +4 -3
  49. package/lib/components/FeatureFlags/index.d.ts +37 -0
  50. package/lib/components/FeatureFlags/index.js +162 -0
  51. package/lib/components/ProductiveCard/ProductiveCard.d.ts +115 -2
  52. package/lib/components/ProductiveCard/ProductiveCard.js +9 -9
  53. package/lib/components/index.d.ts +1 -0
  54. package/lib/feature-flags.d.ts +1 -0
  55. package/lib/global/js/hooks/usePortalTarget.js +4 -2
  56. package/lib/index.js +4 -0
  57. package/package.json +7 -3
  58. package/scss/components/Datagrid/styles/_useInlineEdit.scss +6 -0
@@ -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;
@@ -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.
@@ -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;
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": "2.41.1-canary.5+e4c6a2c8e",
4
+ "version": "2.41.1-canary.9+1a6cb2508",
5
5
  "license": "Apache-2.0",
6
6
  "main": "lib/index.js",
7
7
  "module": "es/index.js",
@@ -17,7 +17,10 @@
17
17
  "sideEffects": [
18
18
  "**/global/js/utils/props-helper.js",
19
19
  "**/*.css",
20
- "**/*.scss"
20
+ "**/*.scss",
21
+ "es/feature-flags.js",
22
+ "lib/feature-flags.js",
23
+ "src/feature-flags.js"
21
24
  ],
22
25
  "files": [
23
26
  "css",
@@ -92,6 +95,7 @@
92
95
  },
93
96
  "dependencies": {
94
97
  "@babel/runtime": "^7.23.9",
98
+ "@carbon/feature-flags": "^0.20.0",
95
99
  "@carbon/ibm-products-styles": "^2.38.0",
96
100
  "@carbon/telemetry": "^0.1.0",
97
101
  "@dnd-kit/core": "^6.0.8",
@@ -116,5 +120,5 @@
116
120
  "react": "^16.8.6 || ^17.0.1 || ^18.2.0",
117
121
  "react-dom": "^16.8.6 || ^17.0.1 || ^18.2.0"
118
122
  },
119
- "gitHead": "e4c6a2c8e8d42dd74abf2370331dde96c258de1c"
123
+ "gitHead": "1a6cb2508013be43018ba1a2a5325cf82b09e040"
120
124
  }
@@ -80,6 +80,12 @@ $row-heights: (
80
80
  align-items: center;
81
81
  }
82
82
 
83
+ .#{variables.$block-class}__static--outer-cell {
84
+ display: flex;
85
+ height: -webkit-fill-available;
86
+ align-items: center;
87
+ }
88
+
83
89
  .#{variables.$block-class}__inline-edit--outer-cell-button {
84
90
  width: 100%;
85
91
  height: calc(100% + 2px); // account for borders