@carbon-labs/react-ui-shell 0.46.0 → 0.48.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.
@@ -157,6 +157,7 @@ function SideNavRenderFunction(_ref, ref) {
157
157
  const backButton = sideNavRef?.current.querySelector(`.${prefix}--side-nav__back-button`);
158
158
  const slotElement = sideNavRef?.current.querySelector(`.${prefix}--side-nav__slot`);
159
159
  const firstElement = sideNavRef?.current?.querySelector('a, button');
160
+ const currentElement = sideNavRef?.current?.querySelector(`.cds--side-nav__link--current`);
160
161
  if (navType == SIDE_NAV_TYPE.PANEL || expanded) {
161
162
  if (isSm && backButton) {
162
163
  backButton.tabIndex = 0;
@@ -164,6 +165,8 @@ function SideNavRenderFunction(_ref, ref) {
164
165
  if (firstElementAfterBack) {
165
166
  firstElementAfterBack.tabIndex = 0;
166
167
  }
168
+ } else if (currentElement && currentElement.closest(`[id="${currentPrimaryMenu}"]`)) {
169
+ currentElement.tabIndex = 0;
167
170
  } else if (firstElement) {
168
171
  firstElement.tabIndex = 0;
169
172
  if (slotElement) {
@@ -173,7 +173,7 @@ const SideNavMenu = /*#__PURE__*/React.forwardRef(function SideNavMenu(_ref, ref
173
173
  return node;
174
174
  }
175
175
  function handleKeyDown(event) {
176
- if (match(event, Escape)) {
176
+ if (match(event, Escape) && !primary) {
177
177
  setIsExpanded(false);
178
178
  if (onMenuToggle) {
179
179
  onMenuToggle();
@@ -275,23 +275,21 @@ const SideNavMenu = /*#__PURE__*/React.forwardRef(function SideNavMenu(_ref, ref
275
275
  setSecondaryOpen(isExpanded);
276
276
  }, [isExpanded]);
277
277
  useEffect(() => {
278
- if (currentPrimaryMenu !== uniqueId) {
278
+ if (primary && currentPrimaryMenu !== uniqueId) {
279
279
  setIsExpanded(false);
280
280
  } else {
281
281
  setIsExpanded(true);
282
282
  }
283
283
  }, [currentPrimaryMenu]);
284
-
285
- // save expanded state before SideNav collapse
286
- const [lastExpandedState, setLastExpandedState] = useState(isExpanded);
287
-
288
284
  // reset to opened/collapsed menu state when Panel SideNav is toggled
289
285
  useEffect(() => {
290
286
  if (navType == SIDE_NAV_TYPE.PANEL && !sideNavExpanded) {
291
- setLastExpandedState(isExpanded);
292
287
  setIsExpanded(false);
293
- } else {
294
- setIsExpanded(lastExpandedState);
288
+ }
289
+
290
+ // will always open to the menu with an active element
291
+ if (primary && (active || hasActiveDescendant(children))) {
292
+ setIsExpanded(true);
295
293
  }
296
294
  }, [sideNavExpanded]);
297
295
  const [openPopover, setOpenPopover] = React.useState(false);
@@ -327,7 +325,6 @@ const SideNavMenu = /*#__PURE__*/React.forwardRef(function SideNavMenu(_ref, ref
327
325
  // window.location.href = firstLink.current;
328
326
  } else if (isSm || !primary || currentPrimaryMenu !== uniqueId) {
329
327
  setIsExpanded(!isExpanded);
330
- setLastExpandedState(!isExpanded);
331
328
  }
332
329
  if (isSm && backButtonRef.current) {
333
330
  backButtonRef.current.focus();
@@ -159,6 +159,7 @@ function SideNavRenderFunction(_ref, ref) {
159
159
  const backButton = sideNavRef?.current.querySelector(`.${prefix}--side-nav__back-button`);
160
160
  const slotElement = sideNavRef?.current.querySelector(`.${prefix}--side-nav__slot`);
161
161
  const firstElement = sideNavRef?.current?.querySelector('a, button');
162
+ const currentElement = sideNavRef?.current?.querySelector(`.cds--side-nav__link--current`);
162
163
  if (navType == SIDE_NAV_TYPE.PANEL || expanded) {
163
164
  if (isSm && backButton) {
164
165
  backButton.tabIndex = 0;
@@ -166,6 +167,8 @@ function SideNavRenderFunction(_ref, ref) {
166
167
  if (firstElementAfterBack) {
167
168
  firstElementAfterBack.tabIndex = 0;
168
169
  }
170
+ } else if (currentElement && currentElement.closest(`[id="${currentPrimaryMenu}"]`)) {
171
+ currentElement.tabIndex = 0;
169
172
  } else if (firstElement) {
170
173
  firstElement.tabIndex = 0;
171
174
  if (slotElement) {
@@ -175,7 +175,7 @@ const SideNavMenu = /*#__PURE__*/React.forwardRef(function SideNavMenu(_ref, ref
175
175
  return node;
176
176
  }
177
177
  function handleKeyDown(event) {
178
- if (match.match(event, keys.Escape)) {
178
+ if (match.match(event, keys.Escape) && !primary) {
179
179
  setIsExpanded(false);
180
180
  if (onMenuToggle) {
181
181
  onMenuToggle();
@@ -277,23 +277,21 @@ const SideNavMenu = /*#__PURE__*/React.forwardRef(function SideNavMenu(_ref, ref
277
277
  setSecondaryOpen(isExpanded);
278
278
  }, [isExpanded]);
279
279
  React.useEffect(() => {
280
- if (currentPrimaryMenu !== uniqueId) {
280
+ if (primary && currentPrimaryMenu !== uniqueId) {
281
281
  setIsExpanded(false);
282
282
  } else {
283
283
  setIsExpanded(true);
284
284
  }
285
285
  }, [currentPrimaryMenu]);
286
-
287
- // save expanded state before SideNav collapse
288
- const [lastExpandedState, setLastExpandedState] = React.useState(isExpanded);
289
-
290
286
  // reset to opened/collapsed menu state when Panel SideNav is toggled
291
287
  React.useEffect(() => {
292
288
  if (navType == SideNav.SIDE_NAV_TYPE.PANEL && !sideNavExpanded) {
293
- setLastExpandedState(isExpanded);
294
289
  setIsExpanded(false);
295
- } else {
296
- setIsExpanded(lastExpandedState);
290
+ }
291
+
292
+ // will always open to the menu with an active element
293
+ if (primary && (active || hasActiveDescendant(children))) {
294
+ setIsExpanded(true);
297
295
  }
298
296
  }, [sideNavExpanded]);
299
297
  const [openPopover, setOpenPopover] = React.useState(false);
@@ -329,7 +327,6 @@ const SideNavMenu = /*#__PURE__*/React.forwardRef(function SideNavMenu(_ref, ref
329
327
  // window.location.href = firstLink.current;
330
328
  } else if (isSm || !primary || currentPrimaryMenu !== uniqueId) {
331
329
  setIsExpanded(!isExpanded);
332
- setLastExpandedState(!isExpanded);
333
330
  }
334
331
  if (isSm && backButtonRef.current) {
335
332
  backButtonRef.current.focus();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@carbon-labs/react-ui-shell",
3
- "version": "0.46.0",
3
+ "version": "0.48.0",
4
4
  "publishConfig": {
5
5
  "access": "public",
6
6
  "provenance": true
@@ -41,5 +41,5 @@
41
41
  "dependencies": {
42
42
  "@ibm/telemetry-js": "^1.9.1"
43
43
  },
44
- "gitHead": "25a4ee32036576869be9cb12de891826699587e8"
44
+ "gitHead": "1a3a98d3c24b71489bc34df3f8577f3b392c2891"
45
45
  }
@@ -8,7 +8,6 @@
8
8
  @use '@carbon/styles/scss/utilities/convert' as convert;
9
9
  @use '@carbon/styles/scss/utilities/custom-property' as custom-property;
10
10
  @use '@carbon/styles/scss/utilities/button-reset' as button-reset;
11
- @use '@carbon/react/scss/breakpoint' as breakpoint;
12
11
  @use '@carbon/styles/scss/utilities/focus-outline' as *;
13
12
  @use '@carbon/styles/scss/breakpoint' as *;
14
13
  @use '@carbon/styles/scss/theme' as *;
@@ -152,6 +151,7 @@ div:has(.#{$prefix}--header)
152
151
 
153
152
  .#{$prefix}--side-nav__menu-secondary-wrapper-expanded {
154
153
  inline-size: 16rem;
154
+ overflow-y: auto;
155
155
  transform: translateX(0);
156
156
  }
157
157
 
@@ -456,7 +456,7 @@ div:has(.#{$prefix}--header)
456
456
  //----------------------------------------------------------------------------
457
457
  // Mobile
458
458
  //----------------------------------------------------------------------------
459
- @include breakpoint.breakpoint-down(md) {
459
+ @include breakpoint-down(md) {
460
460
  .#{$prefix}--side-nav--collapsible.#{$prefix}--side-nav--expanded {
461
461
  inline-size: 100%;
462
462
  max-inline-size: 100%;