design-react-kit 5.9.3 → 5.10.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.
@@ -1,5 +1,5 @@
1
1
  import classNames from 'classnames';
2
- import React from 'react';
2
+ import React, { useEffect, useRef, useState } from 'react';
3
3
  import { Collapse as CollapseBase } from 'reactstrap';
4
4
  import { Icon } from '../Icon/Icon';
5
5
  export const Collapse = ({ header = false, className, navbar, megamenu, children, isOpen = false, onOverlayClick, cssModule, testId, closeSrText = 'Nascondi la navigazione', ...attributes }) => {
@@ -7,17 +7,85 @@ export const Collapse = ({ header = false, className, navbar, megamenu, children
7
7
  'navbar-collapse': 'navbar-collapsable',
8
8
  ...cssModule
9
9
  };
10
+ // Two-phase state to allow CSS transitions to play.
11
+ // isVisible controls display:block/none; isExpanded controls the animation class.
12
+ const [isVisible, setIsVisible] = useState(isOpen);
13
+ const [isExpanded, setIsExpanded] = useState(isOpen);
14
+ const panelRef = useRef(null);
15
+ const triggerRef = useRef(null);
16
+ useEffect(() => {
17
+ if (!(megamenu || navbar))
18
+ return;
19
+ if (isOpen) {
20
+ triggerRef.current = document.activeElement;
21
+ setIsVisible(true);
22
+ // Double rAF ensures the browser has painted display:block before adding
23
+ // the expanded class, so the CSS transform transition can fire.
24
+ requestAnimationFrame(() => {
25
+ requestAnimationFrame(() => {
26
+ setIsExpanded(true);
27
+ panelRef.current?.focus();
28
+ });
29
+ });
30
+ return;
31
+ }
32
+ setIsExpanded(false);
33
+ // Wait for the CSS transition to complete before hiding.
34
+ const timer = setTimeout(() => {
35
+ setIsVisible(false);
36
+ triggerRef.current?.focus();
37
+ }, PANEL_TRANSITION_MS);
38
+ return () => clearTimeout(timer);
39
+ }, [isOpen, megamenu, navbar]);
40
+ useEffect(() => {
41
+ if (!(megamenu || navbar))
42
+ return;
43
+ if (isOpen) {
44
+ document.body.style.overflow = 'hidden';
45
+ }
46
+ else {
47
+ document.body.style.overflow = '';
48
+ }
49
+ return () => { document.body.style.overflow = ''; };
50
+ }, [isOpen, megamenu, navbar]);
51
+ useEffect(() => {
52
+ if (!(megamenu || navbar))
53
+ return;
54
+ const main = document.querySelector('main');
55
+ if (!main)
56
+ return;
57
+ if (isOpen) {
58
+ main.setAttribute('inert', '');
59
+ }
60
+ else {
61
+ main.removeAttribute('inert');
62
+ }
63
+ return () => main.removeAttribute('inert');
64
+ }, [isOpen, megamenu, navbar]);
65
+ useEffect(() => {
66
+ if (!(megamenu || navbar))
67
+ return;
68
+ const handleKeyDown = (e) => {
69
+ if (e.key === 'Escape' && isOpen) {
70
+ onOverlayClick?.();
71
+ }
72
+ };
73
+ document.addEventListener('keydown', handleKeyDown);
74
+ return () => document.removeEventListener('keydown', handleKeyDown);
75
+ }, [isOpen, megamenu, navbar, onOverlayClick]);
76
+ // Must match the longest CSS transition on .navbar-collapsable (currently 0.3s + buffer).
77
+ const PANEL_TRANSITION_MS = 350;
10
78
  if (megamenu || navbar) {
11
79
  const classes = classNames(className, 'navbar-collapse', {
12
- expanded: isOpen
80
+ expanded: isExpanded
13
81
  });
14
- const style = { display: isOpen ? 'block' : 'none' };
15
82
  const overlayClasses = classNames('overlay', {
16
- fade: isOpen,
17
- show: isOpen
83
+ fade: isVisible,
84
+ show: isExpanded
18
85
  });
19
- return (React.createElement(CollapseBase, { className: classes, cssModule: newCssModule, navbar: navbar, style: style, "data-testid": testId, ...attributes },
20
- React.createElement("div", { className: overlayClasses, style: style, onClick: onOverlayClick }),
86
+ const displayStyle = { display: isVisible ? 'block' : 'none' };
87
+ return (React.createElement(CollapseBase, { className: classes, cssModule: newCssModule, navbar: navbar, style: displayStyle, tabIndex: -1, innerRef: panelRef, role: isOpen ? 'dialog' : undefined, "aria-modal": isOpen ? true : undefined, "aria-label": isOpen ? 'Menu di navigazione' : undefined, "data-testid": testId, ...attributes },
88
+ React.createElement("div", { className: overlayClasses, style: displayStyle, onClick: onOverlayClick }),
21
89
  React.createElement("div", { className: 'close-div' },
22
90
  React.createElement("button", { className: 'btn close-menu', type: 'button', onClick: onOverlayClick },
23
91
  React.createElement("span", { className: 'visually-hidden' }, closeSrText),
@@ -1 +1 @@
1
- {"version":3,"file":"Collapse.js","sourceRoot":"","sources":["../../src/Collapse/Collapse.tsx"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,YAAY,CAAC;AACpC,OAAO,KAA+C,MAAM,OAAO,CAAC;AAEpE,OAAO,EAAE,QAAQ,IAAI,YAAY,EAAE,MAAM,YAAY,CAAC;AAGtD,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AA0CpC,MAAM,CAAC,MAAM,QAAQ,GAAsB,CAAC,EAC1C,MAAM,GAAG,KAAK,EACd,SAAS,EACT,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,MAAM,GAAG,KAAK,EACd,cAAc,EACd,SAAS,EACT,MAAM,EACN,WAAW,GAAG,yBAAyB,EACvC,GAAG,UAAU,EACd,EAAE,EAAE;IACH,MAAM,YAAY,GAAG;QACnB,iBAAiB,EAAE,oBAAoB;QACvC,GAAG,SAAS;KACb,CAAC;IACF,IAAI,QAAQ,IAAI,MAAM,EAAE,CAAC;QACvB,MAAM,OAAO,GAAG,UAAU,CAAC,SAAS,EAAE,iBAAiB,EAAE;YACvD,QAAQ,EAAE,MAAM;SACjB,CAAC,CAAC;QACH,MAAM,KAAK,GAAG,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QACrD,MAAM,cAAc,GAAG,UAAU,CAAC,SAAS,EAAE;YAC3C,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,MAAM;SACb,CAAC,CAAC;QACH,OAAO,CACL,oBAAC,YAAY,IACX,SAAS,EAAE,OAAO,EAClB,SAAS,EAAE,YAAY,EACvB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,KAAK,iBACC,MAAM,KACf,UAAU;YAEd,6BAAK,SAAS,EAAE,cAAc,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,cAAc,GAAQ;YAC7E,6BAAK,SAAS,EAAC,WAAW;gBACxB,gCAAQ,SAAS,EAAC,gBAAgB,EAAC,IAAI,EAAC,QAAQ,EAAC,OAAO,EAAE,cAAc;oBACtE,8BAAM,SAAS,EAAC,iBAAiB,IAAE,WAAW,CAAQ;oBACtD,oBAAC,IAAI,IAAC,KAAK,EAAC,OAAO,EAAC,IAAI,EAAC,cAAc,GAAG,CACnC,CACL;YACL,QAAQ,CAAC,CAAC,CAAC,6BAAK,SAAS,EAAC,eAAe,IAAE,QAAQ,CAAO,CAAC,CAAC,CAAC,0CAAG,QAAQ,CAAI,CAChE,CAChB,CAAC;IACJ,CAAC;IACD,MAAM,OAAO,GAAG,UAAU,CAAC,SAAS,EAAE;QACpC,mBAAmB,EAAE,MAAM;KAC5B,CAAC,CAAC;IAEH,OAAO,CACL,oBAAC,YAAY,IACX,SAAS,EAAE,OAAO,EAClB,SAAS,EAAE,YAAY,KACnB,UAAU,EACd,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,iBACD,MAAM,IAElB,QAAQ,CACI,CAChB,CAAC;AACJ,CAAC,CAAC"}
1
+ {"version":3,"file":"Collapse.js","sourceRoot":"","sources":["../../src/Collapse/Collapse.tsx"],"names":[],"mappings":"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"}