@cloudscape-design/components 3.0.608 → 3.0.610

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 (93) hide show
  1. package/annotation-context/annotation/styles.css.js +24 -24
  2. package/annotation-context/annotation/styles.scoped.css +33 -29
  3. package/annotation-context/annotation/styles.selectors.js +24 -24
  4. package/app-layout/classic.d.ts +9 -3
  5. package/app-layout/classic.d.ts.map +1 -1
  6. package/app-layout/classic.js +26 -25
  7. package/app-layout/classic.js.map +1 -1
  8. package/app-layout/implementation.d.ts +9 -3
  9. package/app-layout/implementation.d.ts.map +1 -1
  10. package/app-layout/index.d.ts.map +1 -1
  11. package/app-layout/index.js +6 -4
  12. package/app-layout/index.js.map +1 -1
  13. package/app-layout/interfaces.d.ts +9 -1
  14. package/app-layout/interfaces.d.ts.map +1 -1
  15. package/app-layout/interfaces.js.map +1 -1
  16. package/app-layout/internal.d.ts +9 -3
  17. package/app-layout/internal.d.ts.map +1 -1
  18. package/app-layout/utils/use-app-layout-placement.d.ts +9 -0
  19. package/app-layout/utils/use-app-layout-placement.d.ts.map +1 -0
  20. package/app-layout/utils/use-app-layout-placement.js +29 -0
  21. package/app-layout/utils/use-app-layout-placement.js.map +1 -0
  22. package/app-layout/visual-refresh/context.d.ts.map +1 -1
  23. package/app-layout/visual-refresh/context.js +10 -41
  24. package/app-layout/visual-refresh/context.js.map +1 -1
  25. package/app-layout/visual-refresh/index.d.ts +9 -3
  26. package/app-layout/visual-refresh/index.d.ts.map +1 -1
  27. package/app-layout/visual-refresh/tools.d.ts.map +1 -1
  28. package/app-layout/visual-refresh/tools.js +2 -9
  29. package/app-layout/visual-refresh/tools.js.map +1 -1
  30. package/button-dropdown/category-elements/styles.css.js +14 -14
  31. package/button-dropdown/category-elements/styles.scoped.css +25 -22
  32. package/button-dropdown/category-elements/styles.selectors.js +14 -14
  33. package/internal/components/chart-popover/index.d.ts +1 -1
  34. package/internal/components/chart-popover/index.d.ts.map +1 -1
  35. package/internal/components/chart-popover/index.js.map +1 -1
  36. package/internal/components/dropdown/dropdown-fit-handler.d.ts +12 -12
  37. package/internal/components/dropdown/dropdown-fit-handler.d.ts.map +1 -1
  38. package/internal/components/dropdown/dropdown-fit-handler.js +103 -83
  39. package/internal/components/dropdown/dropdown-fit-handler.js.map +1 -1
  40. package/internal/components/dropdown/index.d.ts.map +1 -1
  41. package/internal/components/dropdown/index.js +30 -29
  42. package/internal/components/dropdown/index.js.map +1 -1
  43. package/internal/components/tooltip/index.d.ts +1 -1
  44. package/internal/components/tooltip/index.d.ts.map +1 -1
  45. package/internal/components/tooltip/index.js.map +1 -1
  46. package/internal/direction.d.ts +14 -0
  47. package/internal/direction.d.ts.map +1 -1
  48. package/internal/direction.js +25 -0
  49. package/internal/direction.js.map +1 -1
  50. package/internal/environment.js +1 -1
  51. package/internal/environment.json +1 -1
  52. package/internal/manifest.json +1 -1
  53. package/internal/utils/handle-key.d.ts +15 -11
  54. package/internal/utils/handle-key.d.ts.map +1 -1
  55. package/internal/utils/handle-key.js +9 -9
  56. package/internal/utils/handle-key.js.map +1 -1
  57. package/internal/utils/scrollable-containers.d.ts +5 -5
  58. package/internal/utils/scrollable-containers.d.ts.map +1 -1
  59. package/internal/utils/scrollable-containers.js +19 -19
  60. package/internal/utils/scrollable-containers.js.map +1 -1
  61. package/package.json +1 -1
  62. package/popover/container.d.ts +1 -1
  63. package/popover/container.d.ts.map +1 -1
  64. package/popover/container.js.map +1 -1
  65. package/popover/interfaces.d.ts +4 -4
  66. package/popover/interfaces.d.ts.map +1 -1
  67. package/popover/interfaces.js.map +1 -1
  68. package/popover/styles.css.js +50 -50
  69. package/popover/styles.scoped.css +76 -64
  70. package/popover/styles.selectors.js +50 -50
  71. package/popover/use-popover-position.d.ts +1 -1
  72. package/popover/use-popover-position.d.ts.map +1 -1
  73. package/popover/use-popover-position.js +32 -29
  74. package/popover/use-popover-position.js.map +1 -1
  75. package/popover/utils/positions.d.ts +2 -2
  76. package/popover/utils/positions.d.ts.map +1 -1
  77. package/popover/utils/positions.js +74 -74
  78. package/popover/utils/positions.js.map +1 -1
  79. package/test-utils/dom/app-layout/index.d.ts +1 -0
  80. package/test-utils/dom/app-layout/index.js +4 -0
  81. package/test-utils/dom/app-layout/index.js.map +1 -1
  82. package/test-utils/selectors/app-layout/index.d.ts +1 -0
  83. package/test-utils/selectors/app-layout/index.js +4 -0
  84. package/test-utils/selectors/app-layout/index.js.map +1 -1
  85. package/test-utils/tsconfig.tsbuildinfo +1 -1
  86. package/app-layout/utils/use-app-layout-rect.d.ts +0 -8
  87. package/app-layout/utils/use-app-layout-rect.d.ts.map +0 -1
  88. package/app-layout/utils/use-app-layout-rect.js +0 -24
  89. package/app-layout/utils/use-app-layout-rect.js.map +0 -1
  90. package/app-layout/utils/use-content-height.d.ts +0 -8
  91. package/app-layout/utils/use-content-height.d.ts.map +0 -1
  92. package/app-layout/utils/use-content-height.js +0 -25
  93. package/app-layout/utils/use-content-height.js.map +0 -1
@@ -1,29 +1,29 @@
1
1
 
2
2
  import './styles.scoped.css';
3
3
  export default {
4
- "arrow": "awsui_arrow_1hpp3_8n93s_99",
5
- "arrow-outer": "awsui_arrow-outer_1hpp3_8n93s_103",
6
- "arrow-inner": "awsui_arrow-inner_1hpp3_8n93s_103",
7
- "arrow-position-right-top": "awsui_arrow-position-right-top_1hpp3_8n93s_140",
8
- "arrow-position-right-bottom": "awsui_arrow-position-right-bottom_1hpp3_8n93s_140",
9
- "arrow-position-left-top": "awsui_arrow-position-left-top_1hpp3_8n93s_143",
10
- "arrow-position-left-bottom": "awsui_arrow-position-left-bottom_1hpp3_8n93s_143",
11
- "arrow-position-top-center": "awsui_arrow-position-top-center_1hpp3_8n93s_146",
12
- "arrow-position-top-responsive": "awsui_arrow-position-top-responsive_1hpp3_8n93s_146",
13
- "arrow-position-bottom-center": "awsui_arrow-position-bottom-center_1hpp3_8n93s_149",
14
- "arrow-position-bottom-responsive": "awsui_arrow-position-bottom-responsive_1hpp3_8n93s_149",
15
- "annotation": "awsui_annotation_1hpp3_8n93s_157",
16
- "next-button": "awsui_next-button_1hpp3_8n93s_158",
17
- "previous-button": "awsui_previous-button_1hpp3_8n93s_159",
18
- "finish-button": "awsui_finish-button_1hpp3_8n93s_160",
19
- "header": "awsui_header_1hpp3_8n93s_161",
20
- "step-counter-content": "awsui_step-counter-content_1hpp3_8n93s_162",
21
- "content": "awsui_content_1hpp3_8n93s_163",
22
- "description": "awsui_description_1hpp3_8n93s_167",
23
- "actionBar": "awsui_actionBar_1hpp3_8n93s_172",
24
- "stepCounter": "awsui_stepCounter_1hpp3_8n93s_179",
25
- "divider": "awsui_divider_1hpp3_8n93s_183",
26
- "hotspot": "awsui_hotspot_1hpp3_8n93s_187",
27
- "icon": "awsui_icon_1hpp3_8n93s_254"
4
+ "arrow": "awsui_arrow_1hpp3_10w1c_99",
5
+ "arrow-outer": "awsui_arrow-outer_1hpp3_10w1c_103",
6
+ "arrow-inner": "awsui_arrow-inner_1hpp3_10w1c_103",
7
+ "arrow-position-right-top": "awsui_arrow-position-right-top_1hpp3_10w1c_144",
8
+ "arrow-position-right-bottom": "awsui_arrow-position-right-bottom_1hpp3_10w1c_144",
9
+ "arrow-position-left-top": "awsui_arrow-position-left-top_1hpp3_10w1c_147",
10
+ "arrow-position-left-bottom": "awsui_arrow-position-left-bottom_1hpp3_10w1c_147",
11
+ "arrow-position-top-center": "awsui_arrow-position-top-center_1hpp3_10w1c_150",
12
+ "arrow-position-top-responsive": "awsui_arrow-position-top-responsive_1hpp3_10w1c_150",
13
+ "arrow-position-bottom-center": "awsui_arrow-position-bottom-center_1hpp3_10w1c_153",
14
+ "arrow-position-bottom-responsive": "awsui_arrow-position-bottom-responsive_1hpp3_10w1c_153",
15
+ "annotation": "awsui_annotation_1hpp3_10w1c_161",
16
+ "next-button": "awsui_next-button_1hpp3_10w1c_162",
17
+ "previous-button": "awsui_previous-button_1hpp3_10w1c_163",
18
+ "finish-button": "awsui_finish-button_1hpp3_10w1c_164",
19
+ "header": "awsui_header_1hpp3_10w1c_165",
20
+ "step-counter-content": "awsui_step-counter-content_1hpp3_10w1c_166",
21
+ "content": "awsui_content_1hpp3_10w1c_167",
22
+ "description": "awsui_description_1hpp3_10w1c_171",
23
+ "actionBar": "awsui_actionBar_1hpp3_10w1c_176",
24
+ "stepCounter": "awsui_stepCounter_1hpp3_10w1c_183",
25
+ "divider": "awsui_divider_1hpp3_10w1c_187",
26
+ "hotspot": "awsui_hotspot_1hpp3_10w1c_191",
27
+ "icon": "awsui_icon_1hpp3_10w1c_258"
28
28
  };
29
29
 
@@ -96,11 +96,11 @@ surrounding text. (WCAG F73) https://www.w3.org/WAI/WCAG21/Techniques/failures/F
96
96
  Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
97
97
  SPDX-License-Identifier: Apache-2.0
98
98
  */
99
- .awsui_arrow_1hpp3_8n93s_99:not(#\9) {
99
+ .awsui_arrow_1hpp3_10w1c_99:not(#\9) {
100
100
  inline-size: 20px;
101
101
  block-size: 10px;
102
102
  }
103
- .awsui_arrow-outer_1hpp3_8n93s_103:not(#\9), .awsui_arrow-inner_1hpp3_8n93s_103:not(#\9) {
103
+ .awsui_arrow-outer_1hpp3_10w1c_103:not(#\9), .awsui_arrow-inner_1hpp3_10w1c_103:not(#\9) {
104
104
  position: absolute;
105
105
  overflow: hidden;
106
106
  inline-size: 20px;
@@ -108,7 +108,7 @@ surrounding text. (WCAG F73) https://www.w3.org/WAI/WCAG21/Techniques/failures/F
108
108
  inset-block-start: 0;
109
109
  inset-inline-start: 0;
110
110
  }
111
- .awsui_arrow-outer_1hpp3_8n93s_103:not(#\9)::after, .awsui_arrow-inner_1hpp3_8n93s_103:not(#\9)::after {
111
+ .awsui_arrow-outer_1hpp3_10w1c_103:not(#\9)::after, .awsui_arrow-inner_1hpp3_10w1c_103:not(#\9)::after {
112
112
  content: "";
113
113
  box-sizing: border-box;
114
114
  display: inline-block;
@@ -124,29 +124,33 @@ surrounding text. (WCAG F73) https://www.w3.org/WAI/WCAG21/Techniques/failures/F
124
124
  transform: rotate(45deg);
125
125
  transform-origin: 0 100%;
126
126
  }
127
- .awsui_arrow-outer_1hpp3_8n93s_103:not(#\9)::after {
127
+ .awsui_arrow-outer_1hpp3_10w1c_103:not(#\9):dir(rtl)::after, .awsui_arrow-inner_1hpp3_10w1c_103:not(#\9):dir(rtl)::after {
128
+ transform: rotate(-45deg);
129
+ transform-origin: 100% 100%;
130
+ }
131
+ .awsui_arrow-outer_1hpp3_10w1c_103:not(#\9)::after {
128
132
  background-color: var(--color-border-status-info-8upc6f, #0972d3);
129
133
  }
130
- .awsui_arrow-inner_1hpp3_8n93s_103:not(#\9) {
134
+ .awsui_arrow-inner_1hpp3_10w1c_103:not(#\9) {
131
135
  inset-block-start: 2px;
132
136
  }
133
- .awsui_arrow-inner_1hpp3_8n93s_103:not(#\9)::after {
137
+ .awsui_arrow-inner_1hpp3_10w1c_103:not(#\9)::after {
134
138
  border-start-start-radius: 1px;
135
139
  border-start-end-radius: 0;
136
140
  border-end-start-radius: 0;
137
141
  border-end-end-radius: 0;
138
142
  background-color: var(--color-background-status-info-mvnbre, #f2f8fd);
139
143
  }
140
- .awsui_arrow-position-right-top_1hpp3_8n93s_140 > .awsui_arrow-outer_1hpp3_8n93s_103:not(#\9)::after, .awsui_arrow-position-right-bottom_1hpp3_8n93s_140 > .awsui_arrow-outer_1hpp3_8n93s_103:not(#\9)::after {
144
+ .awsui_arrow-position-right-top_1hpp3_10w1c_144 > .awsui_arrow-outer_1hpp3_10w1c_103:not(#\9)::after, .awsui_arrow-position-right-bottom_1hpp3_10w1c_144 > .awsui_arrow-outer_1hpp3_10w1c_103:not(#\9)::after {
141
145
  box-shadow: -0.71px 0.71px 4px -2px var(--color-shadow-default-8jp634, rgba(0, 7, 22, 0.12));
142
146
  }
143
- .awsui_arrow-position-left-top_1hpp3_8n93s_143 > .awsui_arrow-outer_1hpp3_8n93s_103:not(#\9)::after, .awsui_arrow-position-left-bottom_1hpp3_8n93s_143 > .awsui_arrow-outer_1hpp3_8n93s_103:not(#\9)::after {
147
+ .awsui_arrow-position-left-top_1hpp3_10w1c_147 > .awsui_arrow-outer_1hpp3_10w1c_103:not(#\9)::after, .awsui_arrow-position-left-bottom_1hpp3_10w1c_147 > .awsui_arrow-outer_1hpp3_10w1c_103:not(#\9)::after {
144
148
  box-shadow: 0.71px -0.71px 4px -2px var(--color-shadow-default-8jp634, rgba(0, 7, 22, 0.12));
145
149
  }
146
- .awsui_arrow-position-top-center_1hpp3_8n93s_146 > .awsui_arrow-outer_1hpp3_8n93s_103:not(#\9)::after, .awsui_arrow-position-top-responsive_1hpp3_8n93s_146 > .awsui_arrow-outer_1hpp3_8n93s_103:not(#\9)::after {
150
+ .awsui_arrow-position-top-center_1hpp3_10w1c_150 > .awsui_arrow-outer_1hpp3_10w1c_103:not(#\9)::after, .awsui_arrow-position-top-responsive_1hpp3_10w1c_150 > .awsui_arrow-outer_1hpp3_10w1c_103:not(#\9)::after {
147
151
  box-shadow: -0.71px -0.71px 4px -2px var(--color-shadow-default-8jp634, rgba(0, 7, 22, 0.12));
148
152
  }
149
- .awsui_arrow-position-bottom-center_1hpp3_8n93s_149 > .awsui_arrow-outer_1hpp3_8n93s_103:not(#\9)::after, .awsui_arrow-position-bottom-responsive_1hpp3_8n93s_149 > .awsui_arrow-outer_1hpp3_8n93s_103:not(#\9)::after {
153
+ .awsui_arrow-position-bottom-center_1hpp3_10w1c_153 > .awsui_arrow-outer_1hpp3_10w1c_103:not(#\9)::after, .awsui_arrow-position-bottom-responsive_1hpp3_10w1c_153 > .awsui_arrow-outer_1hpp3_10w1c_103:not(#\9)::after {
150
154
  box-shadow: 0.71px 0.71px 4px -2px var(--color-shadow-default-8jp634, rgba(0, 7, 22, 0.12));
151
155
  }
152
156
 
@@ -154,37 +158,37 @@ surrounding text. (WCAG F73) https://www.w3.org/WAI/WCAG21/Techniques/failures/F
154
158
  Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
155
159
  SPDX-License-Identifier: Apache-2.0
156
160
  */
157
- .awsui_annotation_1hpp3_8n93s_157:not(#\9),
158
- .awsui_next-button_1hpp3_8n93s_158:not(#\9),
159
- .awsui_previous-button_1hpp3_8n93s_159:not(#\9),
160
- .awsui_finish-button_1hpp3_8n93s_160:not(#\9),
161
- .awsui_header_1hpp3_8n93s_161:not(#\9),
162
- .awsui_step-counter-content_1hpp3_8n93s_162:not(#\9),
163
- .awsui_content_1hpp3_8n93s_163:not(#\9) {
161
+ .awsui_annotation_1hpp3_10w1c_161:not(#\9),
162
+ .awsui_next-button_1hpp3_10w1c_162:not(#\9),
163
+ .awsui_previous-button_1hpp3_10w1c_163:not(#\9),
164
+ .awsui_finish-button_1hpp3_10w1c_164:not(#\9),
165
+ .awsui_header_1hpp3_10w1c_165:not(#\9),
166
+ .awsui_step-counter-content_1hpp3_10w1c_166:not(#\9),
167
+ .awsui_content_1hpp3_10w1c_167:not(#\9) {
164
168
  /* used in test-utils */
165
169
  }
166
170
 
167
- .awsui_description_1hpp3_8n93s_167:not(#\9) {
171
+ .awsui_description_1hpp3_10w1c_171:not(#\9) {
168
172
  overflow: hidden;
169
173
  margin-block-start: var(--space-xxs-p8yyaw, 4px);
170
174
  }
171
175
 
172
- .awsui_actionBar_1hpp3_8n93s_172:not(#\9) {
176
+ .awsui_actionBar_1hpp3_10w1c_176:not(#\9) {
173
177
  display: flex;
174
178
  justify-content: space-between;
175
179
  align-items: center;
176
180
  position: relative;
177
181
  }
178
182
 
179
- .awsui_stepCounter_1hpp3_8n93s_179:not(#\9) {
183
+ .awsui_stepCounter_1hpp3_10w1c_183:not(#\9) {
180
184
  margin-inline-end: 20px;
181
185
  }
182
186
 
183
- .awsui_divider_1hpp3_8n93s_183:not(#\9) {
187
+ .awsui_divider_1hpp3_10w1c_187:not(#\9) {
184
188
  border-block-end: var(--border-divider-section-width-1061zr, 1px) solid var(--color-border-divider-default-j74lyz, #b6bec9);
185
189
  }
186
190
 
187
- .awsui_hotspot_1hpp3_8n93s_187:not(#\9) {
191
+ .awsui_hotspot_1hpp3_10w1c_191:not(#\9) {
188
192
  border-collapse: separate;
189
193
  border-spacing: 0;
190
194
  box-sizing: border-box;
@@ -228,17 +232,17 @@ surrounding text. (WCAG F73) https://www.w3.org/WAI/WCAG21/Techniques/failures/F
228
232
  inline-size: 16px;
229
233
  block-size: 16px;
230
234
  }
231
- .awsui_hotspot_1hpp3_8n93s_187:not(#\9):focus {
235
+ .awsui_hotspot_1hpp3_10w1c_191:not(#\9):focus {
232
236
  outline: none;
233
237
  }
234
- body[data-awsui-focus-visible=true] .awsui_hotspot_1hpp3_8n93s_187:not(#\9):focus {
238
+ body[data-awsui-focus-visible=true] .awsui_hotspot_1hpp3_10w1c_191:not(#\9):focus {
235
239
  position: relative;
236
240
  }
237
- body[data-awsui-focus-visible=true] .awsui_hotspot_1hpp3_8n93s_187:not(#\9):focus {
241
+ body[data-awsui-focus-visible=true] .awsui_hotspot_1hpp3_10w1c_191:not(#\9):focus {
238
242
  outline: 2px dotted transparent;
239
243
  outline-offset: calc(2px - 1px);
240
244
  }
241
- body[data-awsui-focus-visible=true] .awsui_hotspot_1hpp3_8n93s_187:not(#\9):focus::before {
245
+ body[data-awsui-focus-visible=true] .awsui_hotspot_1hpp3_10w1c_191:not(#\9):focus::before {
242
246
  content: " ";
243
247
  display: block;
244
248
  position: absolute;
@@ -252,13 +256,13 @@ body[data-awsui-focus-visible=true] .awsui_hotspot_1hpp3_8n93s_187:not(#\9):focu
252
256
  border-end-end-radius: var(--border-radius-control-circular-focus-ring-w07mub, 4px);
253
257
  box-shadow: 0 0 0 2px var(--color-border-item-focused-b2ntyl, #0972d3);
254
258
  }
255
- .awsui_hotspot_1hpp3_8n93s_187 > .awsui_icon_1hpp3_8n93s_254:not(#\9) {
259
+ .awsui_hotspot_1hpp3_10w1c_191 > .awsui_icon_1hpp3_10w1c_258:not(#\9) {
256
260
  position: relative;
257
261
  stroke: var(--color-text-link-default-latg1a, #0972d3);
258
262
  }
259
- .awsui_hotspot_1hpp3_8n93s_187:not(#\9):hover > .awsui_icon_1hpp3_8n93s_254 {
263
+ .awsui_hotspot_1hpp3_10w1c_191:not(#\9):hover > .awsui_icon_1hpp3_10w1c_258 {
260
264
  stroke: var(--color-text-link-hover-8j6p14, #033160);
261
265
  }
262
- .awsui_hotspot_1hpp3_8n93s_187:not(#\9):active > .awsui_icon_1hpp3_8n93s_254 {
266
+ .awsui_hotspot_1hpp3_10w1c_191:not(#\9):active > .awsui_icon_1hpp3_10w1c_258 {
263
267
  stroke: var(--color-text-link-default-latg1a, #0972d3);
264
268
  }
@@ -2,29 +2,29 @@
2
2
  // es-module interop with Babel and Typescript
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
4
  module.exports.default = {
5
- "arrow": "awsui_arrow_1hpp3_8n93s_99",
6
- "arrow-outer": "awsui_arrow-outer_1hpp3_8n93s_103",
7
- "arrow-inner": "awsui_arrow-inner_1hpp3_8n93s_103",
8
- "arrow-position-right-top": "awsui_arrow-position-right-top_1hpp3_8n93s_140",
9
- "arrow-position-right-bottom": "awsui_arrow-position-right-bottom_1hpp3_8n93s_140",
10
- "arrow-position-left-top": "awsui_arrow-position-left-top_1hpp3_8n93s_143",
11
- "arrow-position-left-bottom": "awsui_arrow-position-left-bottom_1hpp3_8n93s_143",
12
- "arrow-position-top-center": "awsui_arrow-position-top-center_1hpp3_8n93s_146",
13
- "arrow-position-top-responsive": "awsui_arrow-position-top-responsive_1hpp3_8n93s_146",
14
- "arrow-position-bottom-center": "awsui_arrow-position-bottom-center_1hpp3_8n93s_149",
15
- "arrow-position-bottom-responsive": "awsui_arrow-position-bottom-responsive_1hpp3_8n93s_149",
16
- "annotation": "awsui_annotation_1hpp3_8n93s_157",
17
- "next-button": "awsui_next-button_1hpp3_8n93s_158",
18
- "previous-button": "awsui_previous-button_1hpp3_8n93s_159",
19
- "finish-button": "awsui_finish-button_1hpp3_8n93s_160",
20
- "header": "awsui_header_1hpp3_8n93s_161",
21
- "step-counter-content": "awsui_step-counter-content_1hpp3_8n93s_162",
22
- "content": "awsui_content_1hpp3_8n93s_163",
23
- "description": "awsui_description_1hpp3_8n93s_167",
24
- "actionBar": "awsui_actionBar_1hpp3_8n93s_172",
25
- "stepCounter": "awsui_stepCounter_1hpp3_8n93s_179",
26
- "divider": "awsui_divider_1hpp3_8n93s_183",
27
- "hotspot": "awsui_hotspot_1hpp3_8n93s_187",
28
- "icon": "awsui_icon_1hpp3_8n93s_254"
5
+ "arrow": "awsui_arrow_1hpp3_10w1c_99",
6
+ "arrow-outer": "awsui_arrow-outer_1hpp3_10w1c_103",
7
+ "arrow-inner": "awsui_arrow-inner_1hpp3_10w1c_103",
8
+ "arrow-position-right-top": "awsui_arrow-position-right-top_1hpp3_10w1c_144",
9
+ "arrow-position-right-bottom": "awsui_arrow-position-right-bottom_1hpp3_10w1c_144",
10
+ "arrow-position-left-top": "awsui_arrow-position-left-top_1hpp3_10w1c_147",
11
+ "arrow-position-left-bottom": "awsui_arrow-position-left-bottom_1hpp3_10w1c_147",
12
+ "arrow-position-top-center": "awsui_arrow-position-top-center_1hpp3_10w1c_150",
13
+ "arrow-position-top-responsive": "awsui_arrow-position-top-responsive_1hpp3_10w1c_150",
14
+ "arrow-position-bottom-center": "awsui_arrow-position-bottom-center_1hpp3_10w1c_153",
15
+ "arrow-position-bottom-responsive": "awsui_arrow-position-bottom-responsive_1hpp3_10w1c_153",
16
+ "annotation": "awsui_annotation_1hpp3_10w1c_161",
17
+ "next-button": "awsui_next-button_1hpp3_10w1c_162",
18
+ "previous-button": "awsui_previous-button_1hpp3_10w1c_163",
19
+ "finish-button": "awsui_finish-button_1hpp3_10w1c_164",
20
+ "header": "awsui_header_1hpp3_10w1c_165",
21
+ "step-counter-content": "awsui_step-counter-content_1hpp3_10w1c_166",
22
+ "content": "awsui_content_1hpp3_10w1c_167",
23
+ "description": "awsui_description_1hpp3_10w1c_171",
24
+ "actionBar": "awsui_actionBar_1hpp3_10w1c_176",
25
+ "stepCounter": "awsui_stepCounter_1hpp3_10w1c_183",
26
+ "divider": "awsui_divider_1hpp3_10w1c_187",
27
+ "hotspot": "awsui_hotspot_1hpp3_10w1c_191",
28
+ "icon": "awsui_icon_1hpp3_10w1c_258"
29
29
  };
30
30
 
@@ -1,14 +1,20 @@
1
1
  import React from 'react';
2
2
  import { AppLayoutProps } from './interfaces';
3
- declare const ClassicAppLayout: React.ForwardRefExoticComponent<AppLayoutProps & {
3
+ declare const ClassicAppLayout: React.ForwardRefExoticComponent<Omit<AppLayoutProps, "headerSelector" | "footerSelector"> & {
4
4
  contentType: AppLayoutProps.ContentType;
5
5
  navigationOpen: boolean;
6
6
  navigationWidth: number;
7
7
  toolsWidth: number;
8
8
  minContentWidth: number;
9
- headerSelector: string;
10
- footerSelector: string;
11
9
  onNavigationChange: import("../internal/events").NonCancelableEventHandler<AppLayoutProps.ChangeDetail>;
10
+ } & {
11
+ placement: {
12
+ top: number;
13
+ bottom: number;
14
+ left: number;
15
+ right: number;
16
+ width: number;
17
+ };
12
18
  } & React.RefAttributes<AppLayoutProps.Ref>>;
13
19
  export default ClassicAppLayout;
14
20
  //# sourceMappingURL=classic.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"classic.d.ts","sourceRoot":"","sources":["../../../src/app-layout/classic.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAwE,MAAM,OAAO,CAAC;AAI7F,OAAO,EAAE,cAAc,EAA8B,MAAM,cAAc,CAAC;AAiC1E,QAAA,MAAM,gBAAgB;;;;;;;;;4CAwjBrB,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
1
+ {"version":3,"file":"classic.d.ts","sourceRoot":"","sources":["../../../src/app-layout/classic.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAwE,MAAM,OAAO,CAAC;AAI7F,OAAO,EAAE,cAAc,EAA8B,MAAM,cAAc,CAAC;AA+B1E,QAAA,MAAM,gBAAgB;;;;;;;;;;;;;;;4CAsjBrB,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
@@ -9,7 +9,6 @@ import { fireNonCancelableEvent } from '../internal/events';
9
9
  import { Notifications } from './notifications';
10
10
  import { MobileToolbar } from './mobile-toolbar';
11
11
  import { useFocusControl } from './utils/use-focus-control';
12
- import useContentHeight from './utils/use-content-height';
13
12
  import styles from './styles.css.js';
14
13
  import testutilStyles from './test-classes/styles.css.js';
15
14
  import { findUpUntil } from '../internal/utils/dom';
@@ -19,7 +18,6 @@ import ContentWrapper from './content-wrapper';
19
18
  import { Drawer, DrawerTriggersBar } from './drawer';
20
19
  import { ResizableDrawer } from './drawer/resizable-drawer';
21
20
  import { SPLIT_PANEL_MIN_WIDTH, SideSplitPanelDrawer, SplitPanelProvider, } from './split-panel';
22
- import useAppLayoutRect from './utils/use-app-layout-rect';
23
21
  import { useStableCallback } from '@cloudscape-design/component-toolkit/internal';
24
22
  import { useSplitPanelFocusControl } from './utils/use-split-panel-focus-control';
25
23
  import { TOOLS_DRAWER_ID, useDrawers } from './utils/use-drawers';
@@ -27,7 +25,7 @@ import { useContainerQuery } from '@cloudscape-design/component-toolkit';
27
25
  import { togglesConfig } from './toggles';
28
26
  const ClassicAppLayout = React.forwardRef((_a, ref) => {
29
27
  var _b, _c, _d, _e, _f, _g;
30
- var { navigation, navigationWidth, navigationHide, navigationOpen, tools, toolsWidth, toolsHide, toolsOpen: controlledToolsOpen, breadcrumbs, notifications, stickyNotifications, contentHeader, disableContentHeaderOverlap, content, contentType, disableContentPaddings, disableBodyScroll, maxContentWidth, minContentWidth, headerSelector, footerSelector, ariaLabels, splitPanel, splitPanelSize: controlledSplitPanelSize, splitPanelOpen: controlledSplitPanelOpen, splitPanelPreferences: controlledSplitPanelPreferences, onSplitPanelPreferencesChange, onSplitPanelResize, onSplitPanelToggle, onNavigationChange, onToolsChange, drawers: controlledDrawers, onDrawerChange, activeDrawerId: controlledActiveDrawerId } = _a, rest = __rest(_a, ["navigation", "navigationWidth", "navigationHide", "navigationOpen", "tools", "toolsWidth", "toolsHide", "toolsOpen", "breadcrumbs", "notifications", "stickyNotifications", "contentHeader", "disableContentHeaderOverlap", "content", "contentType", "disableContentPaddings", "disableBodyScroll", "maxContentWidth", "minContentWidth", "headerSelector", "footerSelector", "ariaLabels", "splitPanel", "splitPanelSize", "splitPanelOpen", "splitPanelPreferences", "onSplitPanelPreferencesChange", "onSplitPanelResize", "onSplitPanelToggle", "onNavigationChange", "onToolsChange", "drawers", "onDrawerChange", "activeDrawerId"]);
28
+ var { navigation, navigationWidth, navigationHide, navigationOpen, tools, toolsWidth, toolsHide, toolsOpen: controlledToolsOpen, breadcrumbs, notifications, stickyNotifications, contentHeader, disableContentHeaderOverlap, content, contentType, disableContentPaddings, disableBodyScroll, maxContentWidth, minContentWidth, placement, ariaLabels, splitPanel, splitPanelSize: controlledSplitPanelSize, splitPanelOpen: controlledSplitPanelOpen, splitPanelPreferences: controlledSplitPanelPreferences, onSplitPanelPreferencesChange, onSplitPanelResize, onSplitPanelToggle, onNavigationChange, onToolsChange, drawers: controlledDrawers, onDrawerChange, activeDrawerId: controlledActiveDrawerId } = _a, rest = __rest(_a, ["navigation", "navigationWidth", "navigationHide", "navigationOpen", "tools", "toolsWidth", "toolsHide", "toolsOpen", "breadcrumbs", "notifications", "stickyNotifications", "contentHeader", "disableContentHeaderOverlap", "content", "contentType", "disableContentPaddings", "disableBodyScroll", "maxContentWidth", "minContentWidth", "placement", "ariaLabels", "splitPanel", "splitPanelSize", "splitPanelOpen", "splitPanelPreferences", "onSplitPanelPreferencesChange", "onSplitPanelResize", "onSplitPanelToggle", "onNavigationChange", "onToolsChange", "drawers", "onDrawerChange", "activeDrawerId"]);
31
29
  // Private API for embedded view mode
32
30
  const __embeddedViewMode = Boolean(rest.__embeddedViewMode);
33
31
  const rootRef = useRef(null);
@@ -73,7 +71,17 @@ const ClassicAppLayout = React.forwardRef((_a, ref) => {
73
71
  }, [isMobile, onNavigationToggle]);
74
72
  const navigationVisible = !navigationHide && navigationOpen;
75
73
  const toolsVisible = !toolsHide && toolsOpen;
76
- const { contentHeightStyle, headerHeight, footerHeight } = useContentHeight(headerSelector, footerSelector, disableBodyScroll);
74
+ const [headerFooterHeight, setHeaderFooterHeight] = useState(0);
75
+ // Delay applying changes in header/footer height, as applying them immediately can cause
76
+ // ResizeOberver warnings due to the algorithm thinking that the change might have side-effects
77
+ // further up the tree, therefore blocking notifications to prevent loops
78
+ useEffect(() => {
79
+ const id = requestAnimationFrame(() => setHeaderFooterHeight(placement.top + placement.bottom));
80
+ return () => cancelAnimationFrame(id);
81
+ }, [placement.top, placement.bottom]);
82
+ const contentHeightStyle = {
83
+ [disableBodyScroll ? 'height' : 'minHeight']: `calc(100vh - ${headerFooterHeight}px)`,
84
+ };
77
85
  const [notificationsHeight, notificationsRef] = useContainerQuery(rect => rect.contentBoxHeight);
78
86
  const anyPanelOpen = navigationVisible || toolsVisible || !!activeDrawer;
79
87
  const hasRenderedNotifications = notificationsHeight ? notificationsHeight > 0 : false;
@@ -144,23 +152,16 @@ const ClassicAppLayout = React.forwardRef((_a, ref) => {
144
152
  return availableHeight < CONSTRAINED_PAGE_HEIGHT ? availableHeight : availableHeight - MAIN_PANEL_MIN_HEIGHT;
145
153
  }
146
154
  else {
147
- const availableHeight = document.documentElement.clientHeight - headerHeight - footerHeight;
155
+ const availableHeight = document.documentElement.clientHeight - placement.top - placement.bottom;
148
156
  return availableHeight < CONSTRAINED_PAGE_HEIGHT
149
157
  ? availableHeight - CONSTRAINED_MAIN_PANEL_MIN_HEIGHT
150
158
  : availableHeight - MAIN_PANEL_MIN_HEIGHT;
151
159
  }
152
160
  });
153
- const { left: leftOffset, right: rightOffset, width: documentWidth } = useAppLayoutRect(rootRef.current);
154
161
  const rightDrawerBarWidth = drawers ? (drawers.length > 1 ? closedDrawerWidth : 0) : 0;
155
162
  const contentPadding = 80;
156
163
  // all content except split-panel + drawers/tools area
157
- const resizableSpaceAvailable = Math.max(0, documentWidth -
158
- leftOffset -
159
- rightOffset -
160
- effectiveNavigationWidth -
161
- minContentWidth -
162
- contentPadding -
163
- rightDrawerBarWidth);
164
+ const resizableSpaceAvailable = Math.max(0, placement.width - effectiveNavigationWidth - minContentWidth - contentPadding - rightDrawerBarWidth);
164
165
  // if there is no space to display split panel in the side, force to bottom
165
166
  const isSplitPanelForcedPosition = isMobile || resizableSpaceAvailable - effectiveToolsWidth < SPLIT_PANEL_MIN_WIDTH;
166
167
  const finalSplitPanePosition = isSplitPanelForcedPosition ? 'bottom' : splitPanelPosition;
@@ -173,10 +174,10 @@ const ClassicAppLayout = React.forwardRef((_a, ref) => {
173
174
  const [splitPanelReportedSize, setSplitPanelReportedSize] = useState(0);
174
175
  const [splitPanelReportedHeaderHeight, setSplitPanelReportedHeaderHeight] = useState(0);
175
176
  const splitPanelContextProps = {
176
- topOffset: headerHeight + (finalSplitPanePosition === 'bottom' ? stickyNotificationsHeight || 0 : 0),
177
- bottomOffset: footerHeight,
178
- leftOffset: leftOffset + (isMobile ? 0 : !navigationHide && navigationOpen ? navigationWidth : navigationClosedWidth),
179
- rightOffset: isMobile ? 0 : rightOffset + effectiveToolsWidth + rightDrawerBarWidth,
177
+ topOffset: placement.top + (finalSplitPanePosition === 'bottom' ? stickyNotificationsHeight || 0 : 0),
178
+ bottomOffset: placement.bottom,
179
+ leftOffset: placement.left + (isMobile ? 0 : !navigationHide && navigationOpen ? navigationWidth : navigationClosedWidth),
180
+ rightOffset: isMobile ? 0 : placement.right + effectiveToolsWidth + rightDrawerBarWidth,
180
181
  position: finalSplitPanePosition,
181
182
  size: splitPanelSize,
182
183
  maxWidth: splitPanelMaxWidth,
@@ -234,7 +235,7 @@ const ClassicAppLayout = React.forwardRef((_a, ref) => {
234
235
  : splitPanelReportedHeaderHeight)) !== null && _b !== void 0 ? _b : undefined;
235
236
  const [mobileBarHeight, mobileBarRef] = useContainerQuery(rect => rect.contentBoxHeight);
236
237
  return (React.createElement("div", { className: clsx(styles.root, testutilStyles.root, disableBodyScroll && styles['root-no-scroll']), ref: rootRef, style: contentHeightStyle },
237
- isMobile && !__embeddedViewMode && (!toolsHide || !navigationHide || breadcrumbs) && (React.createElement(MobileToolbar, { anyPanelOpen: anyPanelOpen, toggleRefs: { navigation: navigationRefs.toggle, tools: toolsRefs.toggle }, topOffset: headerHeight, ariaLabels: ariaLabels, navigationHide: navigationHide, toolsHide: toolsHide, onNavigationOpen: () => onNavigationToggle(true), onToolsOpen: () => onToolsToggle(true), unfocusable: anyPanelOpen, mobileBarRef: mobileBarRef, drawers: drawers, activeDrawerId: activeDrawerId, onDrawerChange: newDrawerId => {
238
+ isMobile && !__embeddedViewMode && (!toolsHide || !navigationHide || breadcrumbs) && (React.createElement(MobileToolbar, { anyPanelOpen: anyPanelOpen, toggleRefs: { navigation: navigationRefs.toggle, tools: toolsRefs.toggle }, topOffset: placement.top, ariaLabels: ariaLabels, navigationHide: navigationHide, toolsHide: toolsHide, onNavigationOpen: () => onNavigationToggle(true), onToolsOpen: () => onToolsToggle(true), unfocusable: anyPanelOpen, mobileBarRef: mobileBarRef, drawers: drawers, activeDrawerId: activeDrawerId, onDrawerChange: newDrawerId => {
238
239
  onActiveDrawerChange(newDrawerId);
239
240
  if (newDrawerId !== activeDrawerId) {
240
241
  focusToolsButtons();
@@ -242,7 +243,7 @@ const ClassicAppLayout = React.forwardRef((_a, ref) => {
242
243
  }
243
244
  } }, breadcrumbs)),
244
245
  React.createElement("div", { className: clsx(styles.layout, disableBodyScroll && styles['layout-no-scroll']) },
245
- !navigationHide && (React.createElement(Drawer, { contentClassName: testutilStyles.navigation, toggleClassName: testutilStyles['navigation-toggle'], closeClassName: testutilStyles['navigation-close'], ariaLabels: togglesConfig.navigation.getLabels(ariaLabels), bottomOffset: footerHeight, topOffset: headerHeight, isMobile: isMobile, isOpen: navigationOpen, onClick: isMobile ? onNavigationClick : undefined, onToggle: onNavigationToggle, toggleRefs: navigationRefs, type: "navigation", width: navigationWidth }, navigation)),
246
+ !navigationHide && (React.createElement(Drawer, { contentClassName: testutilStyles.navigation, toggleClassName: testutilStyles['navigation-toggle'], closeClassName: testutilStyles['navigation-close'], ariaLabels: togglesConfig.navigation.getLabels(ariaLabels), bottomOffset: placement.bottom, topOffset: placement.top, isMobile: isMobile, isOpen: navigationOpen, onClick: isMobile ? onNavigationClick : undefined, onToggle: onNavigationToggle, toggleRefs: navigationRefs, type: "navigation", width: navigationWidth }, navigation)),
246
247
  React.createElement("main", { ref: legacyScrollRootRef, className: clsx(styles['layout-main'], {
247
248
  [styles['layout-main-scrollable']]: disableBodyScroll,
248
249
  [testutilStyles['disable-body-scroll-root']]: disableBodyScroll,
@@ -251,7 +252,7 @@ const ClassicAppLayout = React.forwardRef((_a, ref) => {
251
252
  React.createElement("div", { style: {
252
253
  marginBottom: splitPanelBottomOffset,
253
254
  } },
254
- notifications && (React.createElement(Notifications, { disableContentPaddings: disableContentPaddings, testUtilsClassName: testutilStyles.notifications, labels: ariaLabels, topOffset: disableBodyScroll ? 0 : headerHeight, sticky: !isMobile && stickyNotifications, ref: notificationsRef }, notifications)),
255
+ notifications && (React.createElement(Notifications, { disableContentPaddings: disableContentPaddings, testUtilsClassName: testutilStyles.notifications, labels: ariaLabels, topOffset: disableBodyScroll ? 0 : placement.top, sticky: !isMobile && stickyNotifications, ref: notificationsRef }, notifications)),
255
256
  ((!isMobile && breadcrumbs) || contentHeader) && (React.createElement(ContentWrapper, Object.assign({}, contentWrapperProps),
256
257
  !isMobile && breadcrumbs && (React.createElement("div", { className: clsx(testutilStyles.breadcrumbs, styles['breadcrumbs-desktop']) }, breadcrumbs)),
257
258
  contentHeader && (React.createElement("div", { className: clsx(styles['content-header-wrapper'], !hasRenderedNotifications && (isMobile || !breadcrumbs) && styles['content-extra-top-padding'], !hasRenderedNotifications && !breadcrumbs && styles['content-header-wrapper-first-child'], !disableContentHeaderOverlap && styles['content-header-wrapper-overlapped']) }, contentHeader)))),
@@ -269,9 +270,9 @@ const ClassicAppLayout = React.forwardRef((_a, ref) => {
269
270
  stickyOffsetTop:
270
271
  // We don't support the table header being sticky in case the deprecated disableBodyScroll is enabled,
271
272
  // therefore we ensure the table header scrolls out of view by offseting a large enough value (9999px)
272
- (disableBodyScroll ? (isMobile ? -9999 : 0) : headerHeight) +
273
+ (disableBodyScroll ? (isMobile ? -9999 : 0) : placement.top) +
273
274
  (isMobile ? 0 : stickyNotificationsHeight !== null ? stickyNotificationsHeight : 0),
274
- stickyOffsetBottom: footerHeight + (splitPanelBottomOffset || 0),
275
+ stickyOffsetBottom: placement.bottom + (splitPanelBottomOffset || 0),
275
276
  mobileBarHeight: mobileBarHeight !== null && mobileBarHeight !== void 0 ? mobileBarHeight : 0,
276
277
  } }, content))),
277
278
  finalSplitPanePosition === 'bottom' && splitPanelWrapped),
@@ -281,14 +282,14 @@ const ClassicAppLayout = React.forwardRef((_a, ref) => {
281
282
  closeLabel: (_d = activeDrawer === null || activeDrawer === void 0 ? void 0 : activeDrawer.ariaLabels) === null || _d === void 0 ? void 0 : _d.closeButton,
282
283
  mainLabel: (_e = activeDrawer === null || activeDrawer === void 0 ? void 0 : activeDrawer.ariaLabels) === null || _e === void 0 ? void 0 : _e.drawerName,
283
284
  resizeHandle: (_f = activeDrawer === null || activeDrawer === void 0 ? void 0 : activeDrawer.ariaLabels) === null || _f === void 0 ? void 0 : _f.resizeHandle,
284
- }, minWidth: minDrawerSize, maxWidth: drawerMaxSize, width: activeDrawerSize, bottomOffset: footerHeight, topOffset: headerHeight, isMobile: isMobile, onToggle: isOpen => {
285
+ }, minWidth: minDrawerSize, maxWidth: drawerMaxSize, width: activeDrawerSize, bottomOffset: placement.bottom, topOffset: placement.top, isMobile: isMobile, onToggle: isOpen => {
285
286
  if (!isOpen) {
286
287
  focusToolsButtons();
287
288
  focusDrawersButtons();
288
289
  onActiveDrawerChange(null);
289
290
  }
290
- }, isOpen: true, hideOpenButton: true, toggleRefs: drawerRefs, type: "tools", onLoseFocus: loseDrawersFocus, activeDrawer: activeDrawer, onResize: changeDetail => onActiveDrawerResize(changeDetail), refs: drawerRefs, toolsContent: (_g = drawers === null || drawers === void 0 ? void 0 : drawers.find(drawer => drawer.id === TOOLS_DRAWER_ID)) === null || _g === void 0 ? void 0 : _g.content }, activeDrawer === null || activeDrawer === void 0 ? void 0 : activeDrawer.content)) : (!toolsHide && (React.createElement(Drawer, { contentClassName: testutilStyles.tools, toggleClassName: testutilStyles['tools-toggle'], closeClassName: testutilStyles['tools-close'], ariaLabels: togglesConfig.tools.getLabels(ariaLabels), width: toolsWidth, bottomOffset: footerHeight, topOffset: headerHeight, isMobile: isMobile, onToggle: onToolsToggle, isOpen: toolsOpen, toggleRefs: toolsRefs, type: "tools", onLoseFocus: loseToolsFocus }, tools))),
291
- hasDrawers && drawers.length > 0 && (React.createElement(DrawerTriggersBar, { drawerRefs: drawerRefs, bottomOffset: footerHeight, topOffset: headerHeight, isMobile: isMobile, drawers: drawers, activeDrawerId: activeDrawerId, onDrawerChange: newDrawerId => {
291
+ }, isOpen: true, hideOpenButton: true, toggleRefs: drawerRefs, type: "tools", onLoseFocus: loseDrawersFocus, activeDrawer: activeDrawer, onResize: changeDetail => onActiveDrawerResize(changeDetail), refs: drawerRefs, toolsContent: (_g = drawers === null || drawers === void 0 ? void 0 : drawers.find(drawer => drawer.id === TOOLS_DRAWER_ID)) === null || _g === void 0 ? void 0 : _g.content }, activeDrawer === null || activeDrawer === void 0 ? void 0 : activeDrawer.content)) : (!toolsHide && (React.createElement(Drawer, { contentClassName: testutilStyles.tools, toggleClassName: testutilStyles['tools-toggle'], closeClassName: testutilStyles['tools-close'], ariaLabels: togglesConfig.tools.getLabels(ariaLabels), width: toolsWidth, bottomOffset: placement.bottom, topOffset: placement.top, isMobile: isMobile, onToggle: onToolsToggle, isOpen: toolsOpen, toggleRefs: toolsRefs, type: "tools", onLoseFocus: loseToolsFocus }, tools))),
292
+ hasDrawers && drawers.length > 0 && (React.createElement(DrawerTriggersBar, { drawerRefs: drawerRefs, bottomOffset: placement.bottom, topOffset: placement.top, isMobile: isMobile, drawers: drawers, activeDrawerId: activeDrawerId, onDrawerChange: newDrawerId => {
292
293
  if (activeDrawerId !== newDrawerId) {
293
294
  focusToolsButtons();
294
295
  focusDrawersButtons();