@julseb-lib/react 0.0.86 → 0.0.88

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.
@@ -9,9 +9,9 @@ import { HeaderLogo } from "./HeaderLogo"
9
9
  import { StyledHeader, Overlay } from "./styles"
10
10
  import type { ILibHeader } from "./types"
11
11
  import type {
12
- ILibHeaderNav,
13
- ILibHeaderBurger,
14
- ILibHeaderSearch,
12
+ ILibHeaderNav,
13
+ ILibHeaderBurger,
14
+ ILibHeaderSearch,
15
15
  } from "./subtypes"
16
16
 
17
17
  /**
@@ -56,166 +56,168 @@ import type {
56
56
  * />
57
57
  */
58
58
  export const Header: FC<ILibHeader> = ({
59
- "data-testid": testid,
60
- as,
61
- ref,
62
- children,
63
- className,
64
- logo,
65
- variant = "primary",
66
- burgerPosition = "right",
67
- navDesktopVariant = "right",
68
- navMobileVariant = "drawer",
69
- search,
70
- position = "relative",
71
- hideOnScroll,
72
- links,
73
- nav,
74
- enableScrollingOpen,
75
- backgroundColor = "primary",
76
- textColor = "background",
77
- linkColor = "white",
78
- ...rest
59
+ "data-testid": testid,
60
+ as,
61
+ ref,
62
+ children,
63
+ role = "navigation",
64
+ className,
65
+ logo,
66
+ variant = "primary",
67
+ burgerPosition = "right",
68
+ navDesktopVariant = "right",
69
+ navMobileVariant = "drawer",
70
+ search,
71
+ position = "relative",
72
+ hideOnScroll,
73
+ links,
74
+ nav,
75
+ enableScrollingOpen,
76
+ backgroundColor = "primary",
77
+ textColor = "background",
78
+ linkColor = "white",
79
+ ...rest
79
80
  }) => {
80
- const [isOpen, setIsOpen] = useState(false)
81
-
82
- const handleOpen = () => {
83
- if (!enableScrollingOpen) disableScroll()
84
- setIsOpen(true)
85
- }
86
-
87
- const handleClose = () => {
88
- if (!enableScrollingOpen) enableScroll()
89
- setTimeout(() => setIsOpen(false), 10)
90
- }
91
-
92
- const isMobile = useMaxWidth(600)
93
-
94
- const logoObj = typeof logo === "object" ? logo : undefined
95
-
96
- const logoHeight = logoObj?.height || 30
97
- const burgerHeight = 32
98
- const logoTextHeight = 35
99
- const heightsArr = [logoHeight, burgerHeight, logoTextHeight].sort()
100
- const valueForHeight = heightsArr[heightsArr.length - 1]
101
-
102
- const headerHeight = valueForHeight + 16 * 2
103
-
104
- const [isHidden, setIsHidden] = useState(false)
105
- const hidePosition = typeof hideOnScroll === "boolean" ? 400 : hideOnScroll
106
-
107
- useEffect(() => {
108
- if (hidePosition) {
109
- if (window.pageYOffset >= hidePosition) {
110
- setIsHidden(true)
111
- } else {
112
- setIsHidden(false)
113
- }
114
-
115
- window.addEventListener("scroll", () => {
116
- if (window.pageYOffset >= hidePosition) {
117
- setIsHidden(true)
118
- } else {
119
- setIsHidden(false)
120
- }
121
- })
122
- }
123
- }, [hidePosition])
124
-
125
- const burgerRef = useRef<HTMLButtonElement>(null as any)
126
-
127
- useKeyPress("Escape", () => {
128
- if (isOpen) handleClose()
129
- })
130
-
131
- const burgerProps: ILibHeaderBurger & {
132
- ref: Ref<HTMLButtonElement>
133
- } = {
134
- "data-testid": testid,
135
- className,
136
- isOpen,
137
- navMobileVariant,
138
- variant,
139
- ref: burgerRef,
140
- handleOpen,
141
- handleClose,
142
- }
143
-
144
- const navProps: ILibHeaderNav = {
145
- "data-testid": testid,
146
- className,
147
- search,
148
- isOpen,
149
- handleClose,
150
- links,
151
- children,
152
- headerHeight,
153
- variant,
154
- navMobileVariant,
155
- burgerPosition,
156
- burgerRef,
157
- }
158
-
159
- const searchProps: ILibHeaderSearch = {
160
- "data-testid": testid,
161
- className,
162
- search,
163
- handleClose,
164
- }
165
-
166
- return (
167
- <StyledHeader
168
- data-testid={testid}
169
- ref={ref}
170
- as={as}
171
- className={classNames(
172
- className,
173
- { Hidden: isHidden },
174
- { Open: isOpen }
175
- )}
176
- $burgerPosition={burgerPosition}
177
- $headerHeight={headerHeight}
178
- $position={position}
179
- $variant={variant}
180
- $backgroundColor={backgroundColor}
181
- $linkColor={linkColor}
182
- $textColor={textColor}
183
- {...rest}
184
- >
185
- {burgerPosition === "left" && <HeaderBurger {...burgerProps} />}
186
-
187
- <HeaderLogo
188
- data-testid={testid}
189
- className={className}
190
- logo={logo}
191
- isOpen={isOpen}
192
- >
193
- {typeof logo === "object" ? logo.text : logo}
194
- </HeaderLogo>
195
-
196
- {navDesktopVariant === "left" && <HeaderNav {...navProps} />}
197
-
198
- {!isMobile && navDesktopVariant === "right" && (
199
- <HeaderSearch {...searchProps} />
200
- )}
201
-
202
- {burgerPosition === "right" && <HeaderBurger {...burgerProps} />}
203
-
204
- {navDesktopVariant === "right" && <HeaderNav {...navProps} />}
205
-
206
- {isMobile && navMobileVariant === "drawer" && (
207
- <Overlay
208
- onClick={() => setIsOpen(false)}
209
- className={classNames(
210
- { HeaderOverlay: className },
211
- { Visible: isOpen }
212
- )}
213
- />
214
- )}
215
-
216
- {!isMobile && navDesktopVariant === "left" && (
217
- <HeaderSearch {...searchProps} />
218
- )}
219
- </StyledHeader>
220
- )
81
+ const [isOpen, setIsOpen] = useState(false)
82
+
83
+ const handleOpen = () => {
84
+ if (!enableScrollingOpen) disableScroll()
85
+ setIsOpen(true)
86
+ }
87
+
88
+ const handleClose = () => {
89
+ if (!enableScrollingOpen) enableScroll()
90
+ setTimeout(() => setIsOpen(false), 10)
91
+ }
92
+
93
+ const isMobile = useMaxWidth(600)
94
+
95
+ const logoObj = typeof logo === "object" ? logo : undefined
96
+
97
+ const logoHeight = logoObj?.height || 30
98
+ const burgerHeight = 32
99
+ const logoTextHeight = 35
100
+ const heightsArr = [logoHeight, burgerHeight, logoTextHeight].sort()
101
+ const valueForHeight = heightsArr[heightsArr.length - 1]
102
+
103
+ const headerHeight = valueForHeight + 16 * 2
104
+
105
+ const [isHidden, setIsHidden] = useState(false)
106
+ const hidePosition = typeof hideOnScroll === "boolean" ? 400 : hideOnScroll
107
+
108
+ useEffect(() => {
109
+ if (hidePosition) {
110
+ if (window.pageYOffset >= hidePosition) {
111
+ setIsHidden(true)
112
+ } else {
113
+ setIsHidden(false)
114
+ }
115
+
116
+ window.addEventListener("scroll", () => {
117
+ if (window.pageYOffset >= hidePosition) {
118
+ setIsHidden(true)
119
+ } else {
120
+ setIsHidden(false)
121
+ }
122
+ })
123
+ }
124
+ }, [hidePosition])
125
+
126
+ const burgerRef = useRef<HTMLButtonElement>(null as any)
127
+
128
+ useKeyPress("Escape", () => {
129
+ if (isOpen) handleClose()
130
+ })
131
+
132
+ const burgerProps: ILibHeaderBurger & {
133
+ ref: Ref<HTMLButtonElement>
134
+ } = {
135
+ "data-testid": testid,
136
+ className,
137
+ isOpen,
138
+ navMobileVariant,
139
+ variant,
140
+ ref: burgerRef,
141
+ handleOpen,
142
+ handleClose,
143
+ }
144
+
145
+ const navProps: ILibHeaderNav = {
146
+ "data-testid": testid,
147
+ className,
148
+ search,
149
+ isOpen,
150
+ handleClose,
151
+ links,
152
+ children,
153
+ headerHeight,
154
+ variant,
155
+ navMobileVariant,
156
+ burgerPosition,
157
+ burgerRef,
158
+ }
159
+
160
+ const searchProps: ILibHeaderSearch = {
161
+ "data-testid": testid,
162
+ className,
163
+ search,
164
+ handleClose,
165
+ }
166
+
167
+ return (
168
+ <StyledHeader
169
+ data-testid={testid}
170
+ ref={ref}
171
+ as={as}
172
+ className={classNames(
173
+ className,
174
+ { Hidden: isHidden },
175
+ { Open: isOpen }
176
+ )}
177
+ role={role}
178
+ $burgerPosition={burgerPosition}
179
+ $headerHeight={headerHeight}
180
+ $position={position}
181
+ $variant={variant}
182
+ $backgroundColor={backgroundColor}
183
+ $linkColor={linkColor}
184
+ $textColor={textColor}
185
+ {...rest}
186
+ >
187
+ {burgerPosition === "left" && <HeaderBurger {...burgerProps} />}
188
+
189
+ <HeaderLogo
190
+ data-testid={testid}
191
+ className={className}
192
+ logo={logo}
193
+ isOpen={isOpen}
194
+ >
195
+ {typeof logo === "object" ? logo.text : logo}
196
+ </HeaderLogo>
197
+
198
+ {navDesktopVariant === "left" && <HeaderNav {...navProps} />}
199
+
200
+ {!isMobile && navDesktopVariant === "right" && (
201
+ <HeaderSearch {...searchProps} />
202
+ )}
203
+
204
+ {burgerPosition === "right" && <HeaderBurger {...burgerProps} />}
205
+
206
+ {navDesktopVariant === "right" && <HeaderNav {...navProps} />}
207
+
208
+ {isMobile && navMobileVariant === "drawer" && (
209
+ <Overlay
210
+ onClick={() => setIsOpen(false)}
211
+ className={classNames(
212
+ { HeaderOverlay: className },
213
+ { Visible: isOpen }
214
+ )}
215
+ />
216
+ )}
217
+
218
+ {!isMobile && navDesktopVariant === "left" && (
219
+ <HeaderSearch {...searchProps} />
220
+ )}
221
+ </StyledHeader>
222
+ )
221
223
  }
@@ -4,48 +4,49 @@ import { StyledHeaderBurger } from "./styles"
4
4
  import type { ILibHeaderBurger } from "./subtypes"
5
5
 
6
6
  export const HeaderBurger: FC<ILibHeaderBurger> = ({
7
- "data-testid": testid,
8
- ref,
9
- className,
10
- isOpen,
11
- navMobileVariant,
12
- variant,
13
- burgerColor,
14
- handleOpen,
15
- handleClose,
7
+ "data-testid": testid,
8
+ ref,
9
+ className,
10
+ isOpen,
11
+ navMobileVariant,
12
+ variant,
13
+ burgerColor,
14
+ handleOpen,
15
+ handleClose,
16
16
  }) => {
17
- const getBurgerColor = (): LibColorsHover => {
18
- if (burgerColor) {
19
- if (typeof burgerColor === "string") return burgerColor
17
+ const getBurgerColor = (): LibColorsHover => {
18
+ if (burgerColor) {
19
+ if (typeof burgerColor === "string") return burgerColor
20
20
 
21
- return isOpen ? burgerColor.open : burgerColor.closed
22
- }
21
+ return isOpen ? burgerColor.open : burgerColor.closed
22
+ }
23
23
 
24
- if (
25
- (navMobileVariant === "drawer" && isOpen) ||
26
- variant === "primary" ||
27
- navMobileVariant === "full" ||
28
- (navMobileVariant === "top" && isOpen && variant === "transparent")
29
- ) {
30
- return "white"
31
- }
24
+ if (
25
+ (navMobileVariant === "drawer" && isOpen) ||
26
+ variant === "primary" ||
27
+ navMobileVariant === "full" ||
28
+ (navMobileVariant === "top" && isOpen && variant === "transparent")
29
+ ) {
30
+ return "white"
31
+ }
32
32
 
33
- return "primary"
34
- }
33
+ return "primary"
34
+ }
35
35
 
36
- return (
37
- <StyledHeaderBurger
38
- data-testid={testid && `${testid}.HeaderBurger`}
39
- ref={ref}
40
- className={className && "HeaderBurger"}
41
- isOpen={isOpen}
42
- onClick={() => {
43
- if (isOpen) handleClose()
44
- else handleOpen()
45
- }}
46
- width={32}
47
- height={24}
48
- color={getBurgerColor()}
49
- />
50
- )
36
+ return (
37
+ <StyledHeaderBurger
38
+ data-testid={testid && `${testid}.HeaderBurger`}
39
+ ref={ref}
40
+ role="button"
41
+ className={className && "HeaderBurger"}
42
+ isOpen={isOpen}
43
+ onClick={() => {
44
+ if (isOpen) handleClose()
45
+ else handleOpen()
46
+ }}
47
+ width={32}
48
+ height={24}
49
+ color={getBurgerColor()}
50
+ />
51
+ )
51
52
  }
@@ -4,61 +4,65 @@ import { Logo, LogoImg } from "./styles"
4
4
  import type { ILibHeaderLogo } from "./subtypes"
5
5
 
6
6
  export const HeaderLogo: FC<ILibHeaderLogo> = ({
7
- "data-testid": testid,
8
- className,
9
- logo,
10
- children,
11
- isOpen,
7
+ "data-testid": testid,
8
+ className,
9
+ logo,
10
+ children,
11
+ isOpen,
12
12
  }) => {
13
- const {
14
- to = "/",
15
- href,
16
- img,
17
- imgOpen,
18
- alt = "Logo",
19
- width = 100,
20
- height = 30,
21
- } = logo as any
13
+ const {
14
+ to = "/",
15
+ href,
16
+ img,
17
+ imgOpen,
18
+ alt = "Logo",
19
+ width = 100,
20
+ height = 30,
21
+ } = logo as any
22
22
 
23
- if (img) {
24
- const imgProps = {
25
- "data-testid": testid && `${testid}.HeaderLogo.Img`,
26
- className: className && "HeaderLogoImg",
27
- src: imgOpen && isOpen ? imgOpen : img,
28
- alt,
29
- width,
30
- height,
31
- }
23
+ if (img) {
24
+ const imgProps = {
25
+ "data-testid": testid && `${testid}.HeaderLogo.Img`,
26
+ className: className && "HeaderLogoImg",
27
+ src: imgOpen && isOpen ? imgOpen : img,
28
+ alt,
29
+ width,
30
+ height,
31
+ }
32
32
 
33
- return href ? (
34
- <a
35
- href={href}
36
- data-testid={testid && `${testid}.HeaderLogo`}
37
- className={className && "HeaderLogo"}
38
- >
39
- <LogoImg {...imgProps} />
40
- </a>
41
- ) : (
42
- <Link
43
- data-testid={testid && `${testid}.HeaderLogo`}
44
- className={className && "HeaderLogo"}
45
- to={to}
46
- >
47
- <LogoImg {...imgProps} />
48
- </Link>
49
- )
50
- }
33
+ return href ? (
34
+ <a
35
+ href={href}
36
+ data-testid={testid && `${testid}.HeaderLogo`}
37
+ className={className && "HeaderLogo"}
38
+ role="link"
39
+ >
40
+ <LogoImg {...imgProps} />
41
+ </a>
42
+ ) : (
43
+ <Link
44
+ data-testid={testid && `${testid}.HeaderLogo`}
45
+ className={className && "HeaderLogo"}
46
+ to={to}
47
+ role="link"
48
+ >
49
+ <LogoImg {...imgProps} />
50
+ </Link>
51
+ )
52
+ }
51
53
 
52
- return (
53
- <Logo
54
- data-testid={testid && `${testid}.HeaderLogo`}
55
- as={href ? "a" : Link}
56
- className={className && "HeaderLogo"}
57
- to={to}
58
- href={href}
59
- translate="no"
60
- >
61
- {children}
62
- </Logo>
63
- )
54
+ return (
55
+ <Logo
56
+ data-testid={testid && `${testid}.HeaderLogo`}
57
+ as={href ? "a" : Link}
58
+ className={className && "HeaderLogo"}
59
+ to={to}
60
+ href={href}
61
+ translate="no"
62
+ role="link"
63
+ aria-label="Header Logo"
64
+ >
65
+ {children}
66
+ </Logo>
67
+ )
64
68
  }