@carbon/ibm-products 1.8.0 → 1.11.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (111) hide show
  1. package/css/index-full-carbon.css +270 -5656
  2. package/css/index-full-carbon.css.map +1 -1
  3. package/css/index-full-carbon.min.css +6 -6
  4. package/css/index-full-carbon.min.css.map +1 -1
  5. package/css/index-without-carbon-released-only.css +58 -3432
  6. package/css/index-without-carbon-released-only.css.map +1 -1
  7. package/css/index-without-carbon-released-only.min.css +3 -3
  8. package/css/index-without-carbon-released-only.min.css.map +1 -1
  9. package/css/index-without-carbon.css +238 -3922
  10. package/css/index-without-carbon.css.map +1 -1
  11. package/css/index-without-carbon.min.css +6 -6
  12. package/css/index-without-carbon.min.css.map +1 -1
  13. package/css/index.css +238 -3923
  14. package/css/index.css.map +1 -1
  15. package/css/index.min.css +6 -6
  16. package/css/index.min.css.map +1 -1
  17. package/es/components/AddSelect/AddSelect.js +147 -53
  18. package/es/components/AddSelect/AddSelectBreadcrumbs.js +4 -4
  19. package/es/components/AddSelect/AddSelectColumn.js +195 -0
  20. package/es/components/AddSelect/AddSelectList.js +67 -8
  21. package/es/components/AddSelect/AddSelectSidebar.js +8 -15
  22. package/es/components/AddSelect/add-select-utils.js +64 -0
  23. package/es/components/BreadcrumbWithOverflow/BreadcrumbWithOverflow.js +2 -1
  24. package/es/components/ButtonMenu/ButtonMenu.js +1 -1
  25. package/es/components/DataSpreadsheet/DataSpreadsheet.js +505 -167
  26. package/es/components/DataSpreadsheet/DataSpreadsheetBody.js +244 -17
  27. package/es/components/DataSpreadsheet/DataSpreadsheetHeader.js +74 -8
  28. package/es/components/DataSpreadsheet/hooks/useMoveActiveCell.js +27 -0
  29. package/es/components/DataSpreadsheet/hooks/useResetSpreadsheetFocus.js +28 -0
  30. package/es/components/DataSpreadsheet/hooks/useSpreadsheetOutsideClick.js +41 -0
  31. package/es/components/DataSpreadsheet/utils/checkActiveHeaderCell.js +34 -0
  32. package/es/components/DataSpreadsheet/utils/createActiveCellFn.js +58 -0
  33. package/es/components/DataSpreadsheet/utils/createCellSelectionArea.js +49 -0
  34. package/es/components/DataSpreadsheet/{generateData.js → utils/generateData.js} +6 -0
  35. package/es/components/DataSpreadsheet/{getCellSize.js → utils/getCellSize.js} +0 -0
  36. package/es/components/DataSpreadsheet/utils/handleHeaderCellSelection.js +46 -0
  37. package/es/components/DataSpreadsheet/utils/handleMultipleKeys.js +82 -0
  38. package/es/components/DataSpreadsheet/utils/removeCellSelections.js +30 -0
  39. package/es/components/InlineEdit/InlineEdit.js +80 -39
  40. package/es/components/OptionsTile/OptionsTile.js +31 -21
  41. package/es/components/OptionsTile/index.js +1 -1
  42. package/es/components/PageHeader/PageHeader.js +26 -15
  43. package/es/components/PageHeader/PageHeaderTitle.js +2 -1
  44. package/es/components/PageHeader/PageHeaderUtils.js +24 -29
  45. package/es/components/TagSet/TagSet.js +12 -3
  46. package/es/components/UserProfileImage/UserProfileImage.js +2 -1
  47. package/es/global/js/utils/DisplayBox.js +31 -0
  48. package/es/global/js/utils/deepCloneObject.js +26 -0
  49. package/lib/components/AddSelect/AddSelect.js +150 -54
  50. package/lib/components/AddSelect/AddSelectBreadcrumbs.js +2 -3
  51. package/lib/components/AddSelect/AddSelectColumn.js +219 -0
  52. package/lib/components/AddSelect/AddSelectList.js +65 -8
  53. package/lib/components/AddSelect/AddSelectSidebar.js +14 -15
  54. package/lib/components/AddSelect/add-select-utils.js +78 -0
  55. package/lib/components/BreadcrumbWithOverflow/BreadcrumbWithOverflow.js +2 -1
  56. package/lib/components/ButtonMenu/ButtonMenu.js +1 -1
  57. package/lib/components/DataSpreadsheet/DataSpreadsheet.js +514 -170
  58. package/lib/components/DataSpreadsheet/DataSpreadsheetBody.js +251 -18
  59. package/lib/components/DataSpreadsheet/DataSpreadsheetHeader.js +82 -9
  60. package/lib/components/DataSpreadsheet/hooks/useMoveActiveCell.js +37 -0
  61. package/lib/components/DataSpreadsheet/hooks/useResetSpreadsheetFocus.js +39 -0
  62. package/lib/components/DataSpreadsheet/hooks/useSpreadsheetOutsideClick.js +52 -0
  63. package/lib/components/DataSpreadsheet/utils/checkActiveHeaderCell.js +45 -0
  64. package/lib/components/DataSpreadsheet/{createActiveCellFn.js → utils/createActiveCellFn.js} +22 -9
  65. package/lib/components/DataSpreadsheet/utils/createCellSelectionArea.js +60 -0
  66. package/lib/components/DataSpreadsheet/{generateData.js → utils/generateData.js} +6 -0
  67. package/lib/components/DataSpreadsheet/{getCellSize.js → utils/getCellSize.js} +0 -0
  68. package/lib/components/DataSpreadsheet/utils/handleHeaderCellSelection.js +59 -0
  69. package/lib/components/DataSpreadsheet/utils/handleMultipleKeys.js +92 -0
  70. package/lib/components/DataSpreadsheet/utils/removeCellSelections.js +41 -0
  71. package/lib/components/InlineEdit/InlineEdit.js +82 -40
  72. package/lib/components/OptionsTile/OptionsTile.js +30 -20
  73. package/lib/components/PageHeader/PageHeader.js +25 -15
  74. package/lib/components/PageHeader/PageHeaderTitle.js +2 -1
  75. package/lib/components/PageHeader/PageHeaderUtils.js +24 -29
  76. package/lib/components/TagSet/TagSet.js +13 -3
  77. package/lib/components/UserProfileImage/UserProfileImage.js +2 -1
  78. package/lib/global/js/utils/DisplayBox.js +46 -0
  79. package/lib/global/js/utils/deepCloneObject.js +37 -0
  80. package/package.json +17 -17
  81. package/scss/components/ActionBar/_storybook-styles.scss +8 -0
  82. package/scss/components/ActionSet/_storybook-styles.scss +1 -3
  83. package/scss/components/AddSelect/_add-select.scss +99 -14
  84. package/scss/components/BreadcrumbWithOverflow/_breadcrumb-with-overflow.scss +7 -3
  85. package/scss/components/BreadcrumbWithOverflow/_storybook-styles.scss +8 -0
  86. package/scss/components/ButtonSetWithOverflow/_storybook-styles.scss +8 -0
  87. package/scss/components/CreateInfluencer/_create-influencer.scss +2 -0
  88. package/scss/components/CreateModal/_create-modal.scss +1 -0
  89. package/scss/components/CreateSidePanel/_create-side-panel.scss +1 -1
  90. package/scss/components/CreateSidePanel/_storybook-styles.scss +1 -1
  91. package/scss/components/CreateTearsheet/_create-tearsheet.scss +1 -0
  92. package/scss/components/CreateTearsheetNarrow/_create-tearsheet-narrow.scss +1 -0
  93. package/scss/components/DataSpreadsheet/_data-spreadsheet.scss +42 -6
  94. package/scss/components/EditSidePanel/_edit-side-panel.scss +9 -0
  95. package/scss/components/EditSidePanel/_storybook-styles.scss +1 -1
  96. package/scss/components/InlineEdit/_inline-edit.scss +53 -43
  97. package/scss/components/InlineEdit/_storybook-styles.scss +2 -0
  98. package/scss/components/LoadingBar/_loading-bar.scss +13 -0
  99. package/scss/components/NotificationsPanel/_notifications-panel.scss +3 -0
  100. package/scss/components/OptionsTile/_index.scss +1 -1
  101. package/scss/components/OptionsTile/_options-tile.scss +17 -17
  102. package/scss/components/OptionsTile/_storybook-styles.scss +4 -4
  103. package/scss/components/PageHeader/_page-header.scss +5 -2
  104. package/scss/components/SidePanel/_side-panel.scss +19 -12
  105. package/scss/components/StatusIcon/_status-icon.scss +1 -0
  106. package/scss/components/TagSet/_storybook-styles.scss +8 -0
  107. package/scss/components/Tearsheet/_tearsheet.scss +1 -2
  108. package/scss/components/UserProfileImage/_user-profile-image.scss +9 -0
  109. package/scss/components/WebTerminal/_web-terminal.scss +2 -0
  110. package/scss/global/styles/_display-box.scss +62 -0
  111. package/es/components/DataSpreadsheet/createActiveCellFn.js +0 -45
@@ -26,6 +26,7 @@
26
26
  // stylelint-disable-next-line carbon/layout-token-use
27
27
  transform: translateY(-38.5rem); // the height of the notification panel
28
28
  }
29
+
29
30
  100% {
30
31
  opacity: 1;
31
32
  transform: translateY(0);
@@ -37,6 +38,7 @@
37
38
  opacity: 1;
38
39
  transform: translateY(0);
39
40
  }
41
+
40
42
  100% {
41
43
  opacity: 0;
42
44
  // stylelint-disable-next-line carbon/layout-token-use
@@ -204,6 +206,7 @@
204
206
  padding: 0;
205
207
  color: $text-01;
206
208
  opacity: 0;
209
+
207
210
  &:hover,
208
211
  &:focus {
209
212
  opacity: 1;
@@ -1,5 +1,5 @@
1
1
  //
2
- // Copyright IBM Corp. 2021, 2021
2
+ // Copyright IBM Corp. 2021, 2022
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.
@@ -1,5 +1,5 @@
1
1
  //
2
- // Copyright IBM Corp. 2021, 2021
2
+ // Copyright IBM Corp. 2021, 2022
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.
@@ -12,6 +12,10 @@
12
12
  // Other Carbon settings.
13
13
  @import 'carbon-components/scss/globals/scss/helper-mixins';
14
14
 
15
+ // PageHeader uses the following Carbon components:
16
+ // Toggle
17
+ @import 'carbon-components/scss/components/toggle/toggle';
18
+
15
19
  // Define all component styles in a mixin which is then exported using
16
20
  // the Carbon import-once mechanism.
17
21
  @mixin options-tile {
@@ -44,7 +48,7 @@
44
48
  box-sizing: border-box;
45
49
  align-items: center;
46
50
  padding-right: $spacing-05;
47
- grid-template-columns: 3rem 1fr 1rem;
51
+ grid-template-columns: 3rem 1fr 2rem; // chevron container, heading, toggle width
48
52
  }
49
53
 
50
54
  .#{$block-class}__header {
@@ -53,6 +57,10 @@
53
57
  transition: background-color $duration--fast-01 motion(entrance, productive);
54
58
  }
55
59
 
60
+ .#{$block-class}__header::-webkit-details-marker {
61
+ display: none;
62
+ }
63
+
56
64
  .#{$block-class}__header:hover {
57
65
  background-color: $hover-ui;
58
66
  }
@@ -61,11 +69,11 @@
61
69
  @include focus-outline('outline');
62
70
  }
63
71
 
64
- .#{$block-class}__title {
72
+ .#{$block-class}__heading {
65
73
  grid-column: 2;
66
74
  }
67
75
 
68
- .#{$block-class}__heading {
76
+ .#{$block-class}__title {
69
77
  @include carbon--type-style('productive-heading-01');
70
78
 
71
79
  color: $text-01;
@@ -88,7 +96,7 @@
88
96
  .#{$block-class}__summary--warn,
89
97
  .#{$block-class}__summary--locked {
90
98
  column-gap: $spacing-02;
91
- grid-template-columns: 1rem 1fr;
99
+ grid-template-columns: 1rem 1fr; // icon, text
92
100
  }
93
101
 
94
102
  .#{$block-class}__summary--invalid {
@@ -110,11 +118,15 @@
110
118
  .#{$block-class}__summary-text {
111
119
  overflow: hidden;
112
120
  height: max-content;
121
+ // spacing-05 + toggle width
122
+ // stylelint-disable-next-line carbon/layout-token-use
123
+ padding-right: calc(#{$spacing-05} + 2rem);
113
124
  text-overflow: ellipsis;
114
125
  white-space: nowrap;
115
126
  }
116
127
 
117
128
  .#{$block-class}__chevron {
129
+ display: block;
118
130
  justify-self: center;
119
131
  transition: transform $duration--fast-02 motion(standard, productive);
120
132
  }
@@ -195,18 +207,6 @@
195
207
  margin-top: $spacing-01;
196
208
  }
197
209
 
198
- .#{$block-class}--lg .#{$block-class}__summary-text {
199
- // spacing-05 + toggle width
200
- // stylelint-disable-next-line carbon/layout-token-use
201
- padding-right: calc(#{$spacing-05} + 1rem);
202
- }
203
-
204
- .#{$block-class}--xl .#{$block-class}__summary-text {
205
- // spacing-05 + toggle width
206
- // stylelint-disable-next-line carbon/layout-token-use
207
- padding-right: calc(#{$spacing-05} + 2rem);
208
- }
209
-
210
210
  @media (prefers-reduced-motion: reduce) {
211
211
  .#{$block-class}__summary,
212
212
  .#{$block-class}__chevron {
@@ -1,5 +1,5 @@
1
1
  //
2
- // Copyright IBM Corp. 2021, 2021
2
+ // Copyright IBM Corp. 2021, 2022
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.
@@ -10,9 +10,9 @@
10
10
  $block-class: #{$pkg-prefix}--options-tile;
11
11
 
12
12
  .#{$block-class} {
13
- width: 70vw;
14
- min-width: 32rem;
15
- max-width: 64rem;
13
+ width: 80vw;
14
+ min-width: 16rem;
15
+ max-width: 48rem;
16
16
  }
17
17
 
18
18
  .#{$block-class}__content p {
@@ -41,6 +41,7 @@ $right-section-alt-width: 100% - $left-section-alt-width;
41
41
  from {
42
42
  background-color: var(--from-color);
43
43
  }
44
+
44
45
  to {
45
46
  background-color: var(--to-color);
46
47
  }
@@ -50,6 +51,7 @@ $right-section-alt-width: 100% - $left-section-alt-width;
50
51
  background-color: var(--from-color);
51
52
  box-shadow: 0 1px 0 var(--from-color);
52
53
  }
54
+
53
55
  to {
54
56
  background-color: var(--to-color);
55
57
  box-shadow: 0 1px 0 var(--to-color-shadow);
@@ -207,8 +209,8 @@ $right-section-alt-width: 100% - $left-section-alt-width;
207
209
  .#{$block-class}__breadcrumb-row--has-breadcrumbs
208
210
  .#{$block-class}__action-bar-column {
209
211
  // back button displayed only
210
- max-width: $left-section-alt-width;
211
- flex: 0 1 $left-section-alt-width;
212
+ max-width: $right-section-alt-width;
213
+ flex: 0 1 $right-section-alt-width;
212
214
 
213
215
  @include carbon--breakpoint(md) {
214
216
  max-width: $right-section-std-width;
@@ -251,6 +253,7 @@ $right-section-alt-width: 100% - $left-section-alt-width;
251
253
  }
252
254
 
253
255
  .#{$block-class}__breadcrumb-column {
256
+ overflow: hidden; /* required for ellipsis in title, title not visible in breadcrumb with back arrow */
254
257
  max-width: 100%;
255
258
  flex: 0 0 100%;
256
259
 
@@ -31,6 +31,7 @@ $action-set-block-class: #{$pkg-prefix}--action-set;
31
31
  // stylelint-disable-next-line carbon/layout-token-use
32
32
  transform: translateX(#{$size}); // the size width of the side panel
33
33
  }
34
+
34
35
  100% {
35
36
  opacity: 1;
36
37
  transform: translateX(0);
@@ -45,6 +46,7 @@ $action-set-block-class: #{$pkg-prefix}--action-set;
45
46
  // stylelint-disable-next-line carbon/layout-token-use
46
47
  transform: translateX(-#{$size}); // the size width of the side panel
47
48
  }
49
+
48
50
  100% {
49
51
  opacity: 1;
50
52
  transform: translateX(0);
@@ -56,8 +58,8 @@ $action-set-block-class: #{$pkg-prefix}--action-set;
56
58
  $placement: 'right',
57
59
  $size: map-get($side-panel-sizes, md)
58
60
  ) {
59
- min-width: $size;
60
- max-width: $size;
61
+ width: $size;
62
+ max-width: 100%;
61
63
  @if $placement == right {
62
64
  @include sidePanelEntranceRight($size);
63
65
  } @else {
@@ -66,8 +68,8 @@ $action-set-block-class: #{$pkg-prefix}--action-set;
66
68
  }
67
69
 
68
70
  @mixin setPanelSize($size: map-get($side-panel-sizes, md)) {
69
- min-width: $size;
70
- max-width: $size;
71
+ width: $size;
72
+ max-width: 100%;
71
73
  }
72
74
 
73
75
  @mixin setDividerStyles() {
@@ -95,6 +97,7 @@ $action-set-block-class: #{$pkg-prefix}--action-set;
95
97
  opacity: 1;
96
98
  transform: translateX(0);
97
99
  }
100
+
98
101
  100% {
99
102
  opacity: 0;
100
103
  // stylelint-disable-next-line carbon/layout-token-use
@@ -107,6 +110,7 @@ $action-set-block-class: #{$pkg-prefix}--action-set;
107
110
  opacity: 1;
108
111
  transform: translateX(0);
109
112
  }
113
+
110
114
  100% {
111
115
  opacity: 0;
112
116
  // stylelint-disable-next-line carbon/layout-token-use
@@ -183,6 +187,7 @@ $action-set-block-class: #{$pkg-prefix}--action-set;
183
187
  );
184
188
  padding: $spacing-05 $spacing-05 $spacing-03 $spacing-05;
185
189
  background-color: $ui-01;
190
+
186
191
  &::before {
187
192
  @include setDividerStyles();
188
193
  }
@@ -442,14 +447,14 @@ $action-set-block-class: #{$pkg-prefix}--action-set;
442
447
  }
443
448
 
444
449
  // form fields should receive correct background color
445
- .#{$block-class}__container .bx--text-input,
446
- .#{$block-class}__container .bx--text-area,
447
- .#{$block-class}__container .bx--search-input,
448
- .#{$block-class}__container .bx--select-input,
449
- .#{$block-class}__container .bx--dropdown,
450
- .#{$block-class}__container .bx--dropdown-list,
451
- .#{$block-class}__container .bx--number input[type='number'],
452
- .#{$block-class}__container .bx--date-picker__input {
450
+ .#{$block-class}__container .#{$carbon-prefix}--text-input,
451
+ .#{$block-class}__container .#{$carbon-prefix}--text-area,
452
+ .#{$block-class}__container .#{$carbon-prefix}--search-input,
453
+ .#{$block-class}__container .#{$carbon-prefix}--select-input,
454
+ .#{$block-class}__container .#{$carbon-prefix}--dropdown,
455
+ .#{$block-class}__container .#{$carbon-prefix}--dropdown-list,
456
+ .#{$block-class}__container .#{$carbon-prefix}--number input[type='number'],
457
+ .#{$block-class}__container .#{$carbon-prefix}--date-picker__input {
453
458
  background-color: $field-02;
454
459
  }
455
460
 
@@ -457,6 +462,7 @@ $action-set-block-class: #{$pkg-prefix}--action-set;
457
462
  0% {
458
463
  opacity: 0;
459
464
  }
465
+
460
466
  100% {
461
467
  opacity: 1;
462
468
  }
@@ -466,6 +472,7 @@ $action-set-block-class: #{$pkg-prefix}--action-set;
466
472
  0% {
467
473
  opacity: 1;
468
474
  }
475
+
469
476
  100% {
470
477
  opacity: 0;
471
478
  }
@@ -82,6 +82,7 @@ $block-class: #{$pkg-prefix}--status-icon;
82
82
  0% {
83
83
  transform: scaleY(-1) rotate(360deg);
84
84
  }
85
+
85
86
  100% {
86
87
  transform: scaleY(-1) rotate(0deg);
87
88
  }
@@ -0,0 +1,8 @@
1
+ //
2
+ // Copyright IBM Corp. 2022, 2022
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
+ @import '../../global/styles/display-box';
@@ -152,8 +152,7 @@
152
152
  }
153
153
 
154
154
  &.#{$block-class}--wide .#{$block-class}__header--with-close-icon {
155
- padding-right: $spacing-05;
156
- margin-right: $spacing-09;
155
+ padding-right: $spacing-10;
157
156
  }
158
157
 
159
158
  .#{$block-class}__header-content {
@@ -66,6 +66,15 @@ $theme-keys: map-keys($themes);
66
66
  }
67
67
  }
68
68
 
69
+ .#{$carbon-prefix}--tooltip__trigger.#{$block-class}__tooltip {
70
+ &:hover,
71
+ &:focus {
72
+ svg {
73
+ fill: $ui-01;
74
+ }
75
+ }
76
+ }
77
+
69
78
  .#{$block-class} {
70
79
  display: flex;
71
80
  flex-direction: column;
@@ -10,6 +10,7 @@ $block-class: #{$pkg-prefix}--web-terminal;
10
10
  // stylelint-disable-next-line carbon/layout-token-use
11
11
  transform: translateX(#{$web-terminal-width});
12
12
  }
13
+
13
14
  100% {
14
15
  opacity: 1;
15
16
  transform: translateX(0);
@@ -21,6 +22,7 @@ $block-class: #{$pkg-prefix}--web-terminal;
21
22
  opacity: 1;
22
23
  transform: translateX(0);
23
24
  }
25
+
24
26
  100% {
25
27
  opacity: 0;
26
28
  // stylelint-disable-next-line carbon/layout-token-use
@@ -0,0 +1,62 @@
1
+ //
2
+ // Copyright IBM Corp. 2022, 2022
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 '../../global/styles/project-settings';
8
+
9
+ $block-class: 'ccs-sb--display-box';
10
+
11
+ $indicator-width: $spacing-02;
12
+ $indicator-height: $spacing-04;
13
+
14
+ /**
15
+ Adds a box indicating the extent of the available space to the displayed component
16
+ */
17
+ .#{$block-class} {
18
+ position: relative;
19
+ display: inline-block;
20
+ padding-top: $spacing-05; // space for the indicators
21
+ color: $text-05;
22
+ }
23
+
24
+ .#{$block-class}__indicator {
25
+ position: absolute;
26
+ top: 0;
27
+ width: 100%;
28
+ border-bottom: 1px solid $text-05;
29
+ white-space: nowrap;
30
+ @include carbon--type-style('helper-text-01');
31
+ }
32
+
33
+ .#{$block-class}__message {
34
+ position: absolute;
35
+ bottom: $spacing-02;
36
+ }
37
+
38
+ .sb-main-centered .#{$block-class}__message {
39
+ left: 50%;
40
+ min-width: 100vh;
41
+ text-align: center;
42
+ transform: translateX(-50%);
43
+ }
44
+
45
+ .#{$block-class}__indicator--left,
46
+ .#{$block-class}__indicator--right {
47
+ position: absolute;
48
+ bottom: calc(-1 * $indicator-height);
49
+ width: 0;
50
+ height: 0;
51
+ border-top: $indicator-height solid $text-05;
52
+ border-right: $indicator-width solid transparent;
53
+ border-left: $indicator-width solid transparent;
54
+ }
55
+
56
+ .#{$block-class}__indicator--left {
57
+ left: calc(-1 * $indicator-width);
58
+ }
59
+
60
+ .#{$block-class}__indicator--right {
61
+ right: calc(-1 * $indicator-width);
62
+ }
@@ -1,45 +0,0 @@
1
- /**
2
- * Copyright IBM Corp. 2022, 2022
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 { px } from '@carbon/layout';
8
- import { pkg } from '../../settings';
9
- export var createActiveCellFn = function createActiveCellFn(_ref) {
10
- var placementElement = _ref.placementElement,
11
- coords = _ref.coords,
12
- _ref$addToHeader = _ref.addToHeader,
13
- addToHeader = _ref$addToHeader === void 0 ? false : _ref$addToHeader,
14
- contextRef = _ref.contextRef,
15
- _ref$blockClass = _ref.blockClass,
16
- blockClass = _ref$blockClass === void 0 ? "".concat(pkg.prefix, "--data-spreadsheet") : _ref$blockClass,
17
- onActiveCellChange = _ref.onActiveCellChange,
18
- activeCellValue = _ref.activeCellValue;
19
-
20
- if (!coords) {
21
- return;
22
- } // If the active cell is in the column header row (very first), we need to append this element
23
- // to `.${blockClass}__header--container`, otherwise it should be appended to `.${blockClass}__listContainer` firstElementChild
24
-
25
-
26
- var activeElementContainer = addToHeader ? contextRef === null || contextRef === void 0 ? void 0 : contextRef.current.querySelector(".".concat(blockClass, "__header--container")) : contextRef === null || contextRef === void 0 ? void 0 : contextRef.current.querySelector(".".concat(blockClass, "__list--container")).firstElementChild;
27
- var relativePosition = {
28
- top: placementElement.getBoundingClientRect().top - activeElementContainer.getBoundingClientRect().top,
29
- left: placementElement.getBoundingClientRect().left - activeElementContainer.getBoundingClientRect().left
30
- };
31
- var activeCellButton = (contextRef === null || contextRef === void 0 ? void 0 : contextRef.current.querySelector(".".concat(blockClass, "__active-cell--highlight"))) || document.createElement('button');
32
- activeCellButton.classList.add("".concat(blockClass, "__active-cell--highlight"), "".concat(blockClass, "--interactive-cell-element"));
33
- activeCellButton.style.width = px(placementElement === null || placementElement === void 0 ? void 0 : placementElement.offsetWidth);
34
- activeCellButton.style.height = px(placementElement === null || placementElement === void 0 ? void 0 : placementElement.offsetHeight);
35
- activeCellButton.style.left = px(relativePosition.left);
36
- activeCellButton.style.top = px(relativePosition.top);
37
- activeCellButton.setAttribute('data-active-row-index', typeof (coords === null || coords === void 0 ? void 0 : coords.row) === 'number' ? coords.row : 'header');
38
- activeCellButton.setAttribute('data-active-column-index', typeof (coords === null || coords === void 0 ? void 0 : coords.column) === 'number' ? coords.column : 'header');
39
- activeElementContainer.appendChild(activeCellButton);
40
- activeCellButton.focus();
41
-
42
- if (typeof (coords === null || coords === void 0 ? void 0 : coords.column) === 'number' && typeof (coords === null || coords === void 0 ? void 0 : coords.row) === 'number') {
43
- onActiveCellChange(activeCellValue);
44
- }
45
- };