@carbon/ibm-products 2.67.0 → 2.68.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. package/css/index-full-carbon.css +252 -261
  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 +13 -31
  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 +252 -261
  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 +26 -35
  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/Carousel/Carousel.d.ts +6 -0
  18. package/es/components/Carousel/Carousel.js +45 -0
  19. package/es/components/CreateFullPage/CreateFullPage.d.ts +3 -2
  20. package/es/components/Datagrid/Datagrid/DraggableElement.d.ts +3 -0
  21. package/es/components/Datagrid/Datagrid/DraggableElement.js +23 -15
  22. package/es/components/Datagrid/Datagrid/addons/CustomizeColumns/ButtonWrapper.d.ts +16 -20
  23. package/es/components/Datagrid/Datagrid/addons/CustomizeColumns/ButtonWrapper.js +3 -5
  24. package/es/components/Datagrid/Datagrid/addons/CustomizeColumns/Columns.js +1 -3
  25. package/es/components/Datagrid/Datagrid/addons/CustomizeColumns/CustomizeColumnsTearsheet.d.ts +2 -1
  26. package/es/components/Datagrid/Datagrid/addons/CustomizeColumns/CustomizeColumnsTearsheet.js +2 -0
  27. package/es/components/Datagrid/Datagrid/addons/CustomizeColumns/DraggableItemsList.js +4 -11
  28. package/es/components/Datagrid/Datagrid/addons/CustomizeColumns/TearsheetWrapper.d.ts +2 -1
  29. package/es/components/Datagrid/Datagrid/addons/CustomizeColumns/TearsheetWrapper.js +3 -1
  30. package/es/components/Datagrid/useCustomizeColumns.js +29 -22
  31. package/es/components/Guidebanner/Guidebanner.js +2 -1
  32. package/es/components/InterstitialScreen/InterstitialScreen.d.ts +4 -0
  33. package/es/components/InterstitialScreen/InterstitialScreen.js +16 -4
  34. package/es/components/InterstitialScreen/InterstitialScreenBody.js +7 -7
  35. package/es/components/InterstitialScreen/InterstitialScreenFooter.js +8 -1
  36. package/es/components/InterstitialScreen/InterstitialScreenHeader.js +10 -4
  37. package/es/components/PageHeader/PageHeaderUtils.js +2 -1
  38. package/es/components/Tearsheet/TearsheetShell.js +0 -1
  39. package/es/global/js/hooks/useResizeObserver.d.ts +8 -1
  40. package/es/global/js/hooks/useResizeObserver.js +12 -13
  41. package/lib/components/Carousel/Carousel.d.ts +6 -0
  42. package/lib/components/Carousel/Carousel.js +45 -0
  43. package/lib/components/CreateFullPage/CreateFullPage.d.ts +3 -2
  44. package/lib/components/Datagrid/Datagrid/DraggableElement.d.ts +3 -0
  45. package/lib/components/Datagrid/Datagrid/DraggableElement.js +23 -15
  46. package/lib/components/Datagrid/Datagrid/addons/CustomizeColumns/ButtonWrapper.d.ts +16 -20
  47. package/lib/components/Datagrid/Datagrid/addons/CustomizeColumns/ButtonWrapper.js +3 -5
  48. package/lib/components/Datagrid/Datagrid/addons/CustomizeColumns/Columns.js +1 -3
  49. package/lib/components/Datagrid/Datagrid/addons/CustomizeColumns/CustomizeColumnsTearsheet.d.ts +2 -1
  50. package/lib/components/Datagrid/Datagrid/addons/CustomizeColumns/CustomizeColumnsTearsheet.js +2 -0
  51. package/lib/components/Datagrid/Datagrid/addons/CustomizeColumns/DraggableItemsList.js +4 -11
  52. package/lib/components/Datagrid/Datagrid/addons/CustomizeColumns/TearsheetWrapper.d.ts +2 -1
  53. package/lib/components/Datagrid/Datagrid/addons/CustomizeColumns/TearsheetWrapper.js +3 -1
  54. package/lib/components/Datagrid/useCustomizeColumns.js +29 -22
  55. package/lib/components/Guidebanner/Guidebanner.js +2 -1
  56. package/lib/components/InterstitialScreen/InterstitialScreen.d.ts +4 -0
  57. package/lib/components/InterstitialScreen/InterstitialScreen.js +15 -3
  58. package/lib/components/InterstitialScreen/InterstitialScreenBody.js +7 -7
  59. package/lib/components/InterstitialScreen/InterstitialScreenFooter.js +7 -0
  60. package/lib/components/InterstitialScreen/InterstitialScreenHeader.js +9 -3
  61. package/lib/components/PageHeader/PageHeaderUtils.js +2 -1
  62. package/lib/components/Tearsheet/TearsheetShell.js +0 -1
  63. package/lib/global/js/hooks/useResizeObserver.d.ts +8 -1
  64. package/lib/global/js/hooks/useResizeObserver.js +12 -13
  65. package/package.json +5 -5
  66. package/scss/components/AboutModal/_about-modal.scss +3 -1
  67. package/scss/components/BreadcrumbWithOverflow/_breadcrumb-with-overflow.scss +0 -1
  68. package/scss/components/Carousel/_carousel.scss +5 -0
  69. package/scss/components/Datagrid/styles/_draggableElement.scss +14 -8
  70. package/scss/components/Datagrid/styles/addons/_CustomizeColumnsTearsheet.scss +0 -7
  71. package/scss/components/FilterSummary/_filter-summary.scss +0 -5
  72. package/scss/components/InterstitialScreen/_interstitial-screen.scss +2 -2
  73. package/scss/global/styles/_display-box.scss +1 -3
  74. package/telemetry.yml +1 -0
  75. package/scss/components/FilterSummary/_animations.scss +0 -20
@@ -31,15 +31,17 @@ const InterstitialScreenHeader = /*#__PURE__*/React.forwardRef(props => {
31
31
  bodyChildrenData,
32
32
  isFullScreen,
33
33
  progStep,
34
- handleClose
34
+ handleClose,
35
+ stepCount
35
36
  } = React.useContext(InterstitialScreen.InterstitialScreenContext);
36
37
  const blockClass = `${settings.pkg.prefix}--interstitial-screen`;
37
38
  const headerBlockClass = `${blockClass}--internal-header`;
38
39
  const _useId = useId.useId();
40
+ const carbonPrefix = react.usePrefix();
39
41
  const headerContent = () => {
40
42
  return /*#__PURE__*/React.createElement(React.Fragment, null, (headerTitle || headerSubTitle) && /*#__PURE__*/React.createElement("div", {
41
43
  className: `${blockClass}--titleContainer`
42
- }, headerTitle && (_h || (_h = /*#__PURE__*/React.createElement("h2", null, headerTitle))), headerSubTitle && (_h2 || (_h2 = /*#__PURE__*/React.createElement("h3", null, headerSubTitle)))), children, !hideProgressIndicator && bodyChildrenData && Array.isArray(bodyChildrenData) && /*#__PURE__*/React.createElement("div", {
44
+ }, headerTitle && (_h || (_h = /*#__PURE__*/React.createElement("h1", null, headerTitle))), headerSubTitle && (_h2 || (_h2 = /*#__PURE__*/React.createElement("h2", null, headerSubTitle)))), children, !hideProgressIndicator && bodyChildrenData && Array.isArray(bodyChildrenData) && /*#__PURE__*/React.createElement("div", {
43
45
  className: `${blockClass}--progress`
44
46
  }, /*#__PURE__*/React.createElement(react.ProgressIndicator, {
45
47
  vertical: false,
@@ -53,7 +55,11 @@ const InterstitialScreenHeader = /*#__PURE__*/React.forwardRef(props => {
53
55
  translateWithId: child.props.translateWithId
54
56
  });
55
57
  }
56
- }))));
58
+ })), /*#__PURE__*/React.createElement("div", {
59
+ "aria-live": "polite",
60
+ "aria-atomic": "true",
61
+ className: `${carbonPrefix}--visually-hidden`
62
+ }, "Step ", progStep + 1, " of ", stepCount)));
57
63
  };
58
64
  return isFullScreen ? /*#__PURE__*/React.createElement("header", {
59
65
  className: cx(headerBlockClass, className, {
@@ -160,7 +160,7 @@ const utilGetBreadcrumbItemForTitle = (blockClass, collapseTitle, title) => {
160
160
  if (title.text !== undefined) {
161
161
  // Shape title provided
162
162
  breadcrumbTitle = {
163
- label: /*#__PURE__*/React.createElement("span", null, title.loading ? _SkeletonText || (_SkeletonText = /*#__PURE__*/React.createElement(react.SkeletonText, null)) : title.text),
163
+ label: title.loading ? _SkeletonText || (_SkeletonText = /*#__PURE__*/React.createElement(react.SkeletonText, null)) : title.text,
164
164
  title: title.text
165
165
  };
166
166
  } else if (title.content !== undefined) {
@@ -178,6 +178,7 @@ const utilGetBreadcrumbItemForTitle = (blockClass, collapseTitle, title) => {
178
178
  if (breadcrumbTitle) {
179
179
  breadcrumbTitle.key = 'breadcrumb-title';
180
180
  breadcrumbTitle.isCurrentPage = true;
181
+ breadcrumbTitle.href = '#';
181
182
  breadcrumbTitle.className = cx([`${blockClass}__breadcrumb-title`, {
182
183
  [`${blockClass}__breadcrumb-title--pre-collapsed`]: collapseTitle
183
184
  }]);
@@ -307,7 +307,6 @@ const TearsheetShell = /*#__PURE__*/React.forwardRef((_ref2, ref) => {
307
307
  }, /*#__PURE__*/React.createElement(Wrap.Wrap, {
308
308
  className: `${bc}__content`,
309
309
  alwaysRender: !!(influencer && influencerPosition === 'right'),
310
- tabIndex: -1,
311
310
  element: SectionLevel3
312
311
  }, children), /*#__PURE__*/React.createElement(Wrap.Wrap, {
313
312
  className: cx({
@@ -1,4 +1,11 @@
1
- export function useResizeObserver(ref: any, callback: any, deps?: any[]): {
1
+ /**
2
+ * Copyright IBM Corp. 2023, 2025
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
+ import { RefObject } from 'react';
8
+ export declare const useResizeObserver: (ref: RefObject<HTMLElement>, onResize?: (rect: DOMRectReadOnly) => void) => {
2
9
  width: number;
3
10
  height: number;
4
11
  };
@@ -9,24 +9,23 @@
9
9
 
10
10
  var React = require('react');
11
11
 
12
- const useResizeObserver = function (ref, callback) {
13
- let deps = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
12
+ const useResizeObserver = (ref, onResize) => {
14
13
  const [width, setWidth] = React.useState(-1);
15
14
  const [height, setHeight] = React.useState(-1);
16
15
  const entriesToHandle = React.useRef(null);
17
- const cb = React.useRef(callback);
16
+ const cb = React.useRef(onResize);
18
17
  React.useEffect(() => {
19
- // ref for callback removes it as dependency from useLayoutEffect
18
+ // ref for onResize removes it as dependency from useLayoutEffect
20
19
  // This significantly reduces repeated calls if a function is redefined on every
21
20
  // render
22
- cb.current = callback;
23
- }, [callback]);
21
+ cb.current = onResize;
22
+ }, [onResize]);
24
23
  React.useEffect(() => {
25
24
  const getInitialSize = () => {
26
25
  if (ref.current) {
27
26
  const refComputedStyle = window.getComputedStyle(ref.current);
28
- const initialWidth = (ref.current?.offsetWidth || 0) - (parseFloat(refComputedStyle?.paddingLeft || 0), parseFloat(refComputedStyle?.paddingRight || 0));
29
- const initialHeight = (ref.current?.offsetHeight || 0) - (parseFloat(refComputedStyle?.paddingTop || 0), parseFloat(refComputedStyle?.paddingLeft || 0));
27
+ const initialWidth = (ref.current?.offsetWidth ?? 0) - (typeof refComputedStyle?.paddingLeft === 'string' && refComputedStyle?.paddingLeft.length ? parseFloat(refComputedStyle?.paddingLeft) : 0) - (typeof refComputedStyle?.paddingRight === 'string' && refComputedStyle?.paddingRight.length ? parseFloat(refComputedStyle?.paddingRight) : 0);
28
+ const initialHeight = (ref.current?.offsetHeight ?? 0) - (typeof refComputedStyle?.paddingTop === 'string' && refComputedStyle?.paddingTop.length ? parseFloat(refComputedStyle?.paddingTop) : 0) - (typeof refComputedStyle?.paddingBottom === 'string' && refComputedStyle?.paddingBottom.length ? parseFloat(refComputedStyle?.paddingBottom) : 0);
30
29
  setWidth(initialWidth);
31
30
  setHeight(initialHeight);
32
31
  }
@@ -35,8 +34,9 @@ const useResizeObserver = function (ref, callback) {
35
34
  return;
36
35
  }
37
36
  getInitialSize();
37
+ // Ignoring exhaustive-deps as we do NOT want to include the ref in dep array
38
38
  // eslint-disable-next-line react-hooks/exhaustive-deps
39
- }, [width, height, ref.current, ...deps]);
39
+ }, [width, height]);
40
40
  React.useLayoutEffect(() => {
41
41
  if (!ref?.current) {
42
42
  return;
@@ -50,7 +50,7 @@ const useResizeObserver = function (ref, callback) {
50
50
  setHeight(entry.contentRect.height);
51
51
  cb.current && cb.current(entry.contentRect);
52
52
  };
53
- let observer = new ResizeObserver(entries => {
53
+ const observer = new ResizeObserver(entries => {
54
54
  // always update entriesToHandle
55
55
  entriesToHandle.current = entries;
56
56
  window.requestAnimationFrame(() => {
@@ -62,11 +62,10 @@ const useResizeObserver = function (ref, callback) {
62
62
  // observe all refs passed
63
63
  observer.observe(ref.current);
64
64
  return () => {
65
- observer?.disconnect();
66
- observer = null;
65
+ observer.disconnect();
67
66
  };
68
67
  // eslint-disable-next-line react-hooks/exhaustive-deps
69
- }, [ref.current, ...deps]);
68
+ }, [ref.current]);
70
69
  return {
71
70
  width,
72
71
  height
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.67.0",
4
+ "version": "2.68.0",
5
5
  "license": "Apache-2.0",
6
6
  "main": "lib/index.js",
7
7
  "module": "es/index.js",
@@ -95,7 +95,7 @@
95
95
  "@storybook/theming": "^8.6.12",
96
96
  "@types/react-table": "^7.7.20",
97
97
  "babel-plugin-dev-expression": "^0.2.3",
98
- "babel-preset-ibm-cloud-cognitive": "^0.25.0",
98
+ "babel-preset-ibm-cloud-cognitive": "^0.26.0",
99
99
  "chalk": "^4.1.2",
100
100
  "change-case": "5.4.4",
101
101
  "classnames": "^2.5.1",
@@ -104,7 +104,7 @@
104
104
  "fs-extra": "^11.3.0",
105
105
  "glob": "^11.0.1",
106
106
  "jest": "^29.7.0",
107
- "jest-config-ibm-cloud-cognitive": "^1.26.0",
107
+ "jest-config-ibm-cloud-cognitive": "^1.27.0",
108
108
  "jest-environment-jsdom": "^29.7.0",
109
109
  "namor": "^1.1.2",
110
110
  "npm-check-updates": "^18.0.0",
@@ -120,7 +120,7 @@
120
120
  "dependencies": {
121
121
  "@babel/runtime": "^7.26.10",
122
122
  "@carbon/feature-flags": "^0.26.0",
123
- "@carbon/ibm-products-styles": "^2.63.0",
123
+ "@carbon/ibm-products-styles": "^2.64.0",
124
124
  "@carbon/telemetry": "^0.1.0",
125
125
  "@carbon/utilities": "^0.5.0",
126
126
  "@carbon/utilities-react": "0.7.0",
@@ -142,5 +142,5 @@
142
142
  "react": "^16.8.6 || ^17.0.1 || ^18.2.0 || ^19.0.0",
143
143
  "react-dom": "^16.8.6 || ^17.0.1 || ^18.2.0 || ^19.0.0"
144
144
  },
145
- "gitHead": "814c1a14aeeeecd6d954b45db355d5720b0e5a49"
145
+ "gitHead": "b17f047c13c438ecf4a53c66381ed9fdcbf0c7e7"
146
146
  }
@@ -25,9 +25,11 @@ $block-class: #{c4p-settings.$pkg-prefix}--about-modal;
25
25
  }
26
26
 
27
27
  .#{$block-class} .#{$block-class}__header {
28
- padding: 0 20% 0 $spacing-05;
28
+ padding: 0;
29
29
  grid-row: auto;
30
30
  margin-block-end: 0;
31
+ padding-inline-end: 20%;
32
+ padding-inline-start: $spacing-05;
31
33
  }
32
34
 
33
35
  .#{$block-class} .#{$block-class}__title {
@@ -80,7 +80,6 @@ $_block-class: #{c4p-settings.$pkg-prefix}--breadcrumb-with-overflow;
80
80
 
81
81
  .#{$_block-class}__displayed-breadcrumb:last-child {
82
82
  display: inline-flex; // flex instead of block due to spacing
83
- overflow: hidden;
84
83
  }
85
84
 
86
85
  .#{$_block-class}__displayed-breadcrumb:last-child
@@ -13,6 +13,7 @@
13
13
  @use '@carbon/styles/scss/theme' as *;
14
14
  @use '@carbon/styles/scss/themes';
15
15
  @use '@carbon/styles/scss/type' as *;
16
+ @use '@carbon/styles/scss/utilities';
16
17
  @use '../../global/styles/project-settings' as c4p-settings;
17
18
 
18
19
  // The block part of our conventional BEM class names (blockClass__E--M).
@@ -60,6 +61,10 @@ $block-class: #{c4p-settings.$pkg-prefix}--carousel;
60
61
  -ms-user-select: none;
61
62
  user-select: none;
62
63
 
64
+ &:focus {
65
+ @include utilities.focus-outline('outline');
66
+ }
67
+
63
68
  /* stylelint-disable-next-line max-nesting-depth */
64
69
  @media (prefers-reduced-motion) {
65
70
  scroll-behavior: auto;
@@ -11,13 +11,24 @@
11
11
  @use '@carbon/styles/scss/motion' as *;
12
12
  @use './variables';
13
13
 
14
+ // Drag handle.
14
15
  .#{variables.$block-class}__draggable-handleStyle {
15
- display: flex;
16
- align-items: center;
16
+ // Cancel out default button styling.
17
+ padding: 0;
18
+ border: none;
19
+ background: none;
20
+
21
+ cursor: grab;
17
22
  margin-inline-end: $spacing-03;
18
23
  }
19
24
 
25
+ .#{variables.$block-class}__draggable-handleStyle:active,
26
+ .#{variables.$block-class}__draggable-handleHolder--dragging {
27
+ cursor: grabbing;
28
+ }
29
+
20
30
  .#{variables.$block-class}__draggable-handleStyle.disabled {
31
+ cursor: none;
21
32
  pointer-events: none;
22
33
  }
23
34
 
@@ -39,13 +50,13 @@
39
50
  inline-size: 100%;
40
51
  }
41
52
 
53
+ // The draggable element itself.
42
54
  .#{variables.$block-class}__draggable-handleHolder {
43
55
  position: relative; // above underlay
44
56
  display: flex;
45
57
  background-color: $layer;
46
58
  block-size: $spacing-09;
47
59
  border-block-end: 1px solid $layer-active;
48
- cursor: grab;
49
60
  }
50
61
 
51
62
  .#{variables.$block-class}__draggable-handleHolder:hover {
@@ -68,11 +79,6 @@
68
79
  outline: none;
69
80
  }
70
81
 
71
- .#{variables.$block-class}__draggable-handleHolder:active,
72
- .#{variables.$block-class}__draggable-handleHolder--dragging {
73
- cursor: grabbing;
74
- }
75
-
76
82
  .#{variables.$block-class}__draggable-handleHolder-selected:hover {
77
83
  background-color: $layer-selected-hover-01;
78
84
  }
@@ -38,13 +38,6 @@
38
38
  justify-content: center;
39
39
  }
40
40
 
41
- .#{variables.$block-class}__customize-columns-column-list
42
- .#{variables.$block-class}__customize-columns-checkbox-visible-label {
43
- // Disabling linter only to match the spacing that Carbon uses for the Checkbox label
44
- /* stylelint-disable-next-line */
45
- padding-inline-start: convert.to-rem(6px);
46
- }
47
-
48
41
  .#{variables.$block-class}__customize-columns-column-list
49
42
  .#{variables.$block-class}__customize-columns-checkbox-wrapper.#{c4p-settings.$carbon-prefix}--form-item {
50
43
  margin-block-end: 0;
@@ -9,7 +9,6 @@
9
9
  @use '@carbon/styles/scss/spacing' as *;
10
10
  @use '@carbon/styles/scss/theme' as *;
11
11
  @use '@carbon/styles/scss/motion' as *;
12
- @use './animations' as *;
13
12
 
14
13
  $block-class: #{$pkg-prefix}--filter-summary;
15
14
 
@@ -31,10 +30,6 @@ $block-class: #{$pkg-prefix}--filter-summary;
31
30
  &.#{$block-class}__expanded {
32
31
  block-size: fit-content;
33
32
  }
34
- .#{$pkg-prefix}--tag-set__tag-container {
35
- animation: filter-summary-enter $duration-moderate-01
36
- motion(entrance, productive) forwards;
37
- }
38
33
  }
39
34
 
40
35
  .#{$block-class}
@@ -70,7 +70,7 @@ $one-grid-column: calc(100% / 16);
70
70
  .#{$block-class}--titleContainer {
71
71
  margin-block-end: $spacing-05;
72
72
 
73
- h2 {
73
+ h1 {
74
74
  @include type.type-style('productive-heading-04');
75
75
 
76
76
  margin-block-end: $spacing-03;
@@ -80,7 +80,7 @@ $one-grid-column: calc(100% / 16);
80
80
  }
81
81
  }
82
82
 
83
- h3 {
83
+ h2 {
84
84
  @include type.type-style('productive-heading-03');
85
85
 
86
86
  &:empty {
@@ -41,10 +41,8 @@ $indicator-height: $spacing-04;
41
41
  }
42
42
 
43
43
  .sb-main-centered .#{$block-class}__message {
44
- inset-inline-start: 50%;
45
- min-inline-size: 100vh;
44
+ inline-size: inherit;
46
45
  text-align: center;
47
- transform: translateX(-50%);
48
46
  }
49
47
 
50
48
  .#{$block-class}__indicator--left,
package/telemetry.yml CHANGED
@@ -515,6 +515,7 @@ collect:
515
515
  # Carousel
516
516
  - disableArrowScroll
517
517
  - fadedEdgeColor
518
+ - isScrollMode
518
519
  - onChangeIsScrollable
519
520
  # Checklist
520
521
  - chartLabel
@@ -1,20 +0,0 @@
1
- //
2
- // Copyright IBM Corp. 2025, 2025
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
- @keyframes filter-summary-enter {
8
- 0% {
9
- block-size: 0;
10
- opacity: 0;
11
- /* Move from top */
12
- transform: translateY(calc(var(--panel-transform) * -1));
13
- }
14
-
15
- 100% {
16
- block-size: var(--panel-transform);
17
- opacity: 1;
18
- transform: translateY(0);
19
- }
20
- }