@latte-macchiat-io/latte-vanilla-components 0.0.235 → 0.0.237

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@latte-macchiat-io/latte-vanilla-components",
3
- "version": "0.0.235",
3
+ "version": "0.0.237",
4
4
  "description": "Beautiful components for amazing projects, with a touch of Vanilla 🥤",
5
5
  "type": "module",
6
6
  "main": "./src/index.ts",
@@ -1,7 +1,7 @@
1
- import { clsx } from 'clsx';
1
+ import clsx from 'clsx';
2
2
  import { useState } from 'react';
3
3
 
4
- import { HeaderToggleNav } from './HeaderToggleNav/export';
4
+ import { HeaderToggleNav } from './HeaderToggleNav';
5
5
  import { headerOverlayRecipe, headerPlaceholder, headerRecipe, headerToggleNav, HeaderToggleNavVariants } from './styles.css';
6
6
 
7
7
  export type HeaderProps = React.HTMLAttributes<HTMLDivElement> &
@@ -9,13 +9,24 @@ export type HeaderProps = React.HTMLAttributes<HTMLDivElement> &
9
9
  isFixed?: boolean;
10
10
  children: React.ReactNode;
11
11
  childrenOverlay?: React.ReactNode;
12
- childrenToggleNav?: React.ReactNode;
12
+ childrenToggleNav?: React.ReactNode | ((args: { isOpen: boolean; onToggle: () => void }) => React.ReactNode);
13
13
  };
14
14
 
15
15
  export const Header = ({ children, childrenOverlay, childrenToggleNav, isFixed = false, toggleNavVisibility, className }: HeaderProps) => {
16
16
  const [isNavOpen, setNavOpen] = useState(false);
17
17
  const onToggleNav = () => setNavOpen(!isNavOpen);
18
18
 
19
+ const renderToggleNav = () => {
20
+ if (typeof childrenToggleNav === 'function') {
21
+ return childrenToggleNav({ isOpen: isNavOpen, onToggle: onToggleNav });
22
+ }
23
+ return (
24
+ <button onClick={onToggleNav} aria-label="Toggle navigation" className={headerToggleNav({ toggleNavVisibility })}>
25
+ {childrenToggleNav || <HeaderToggleNav isOpen={isNavOpen} />}
26
+ </button>
27
+ );
28
+ };
29
+
19
30
  return (
20
31
  <>
21
32
  <header className={clsx(headerRecipe({ isFixed }), className)}>
@@ -23,11 +34,7 @@ export const Header = ({ children, childrenOverlay, childrenToggleNav, isFixed =
23
34
 
24
35
  {children}
25
36
 
26
- {toggleNavVisibility !== 'hide' && (
27
- <button onClick={onToggleNav} aria-label="Toggle navigation" className={headerToggleNav({ toggleNavVisibility })}>
28
- {childrenToggleNav || <HeaderToggleNav isOpen={isNavOpen} />}
29
- </button>
30
- )}
37
+ {toggleNavVisibility !== 'hide' && renderToggleNav()}
31
38
  </header>
32
39
 
33
40
  {isFixed && <div className={headerPlaceholder} />}
@@ -1,7 +1,7 @@
1
1
  'use client';
2
2
 
3
3
  import { clsx } from 'clsx';
4
- import { useState } from 'react';
4
+ import { ReactNode, useState } from 'react';
5
5
 
6
6
  import { modal, modalContentCloseButton, modalContentRecipe, type ModalVariants } from './styles.css';
7
7
 
@@ -10,13 +10,13 @@ import { Actions } from '../Actions';
10
10
  import { Button } from '../Button';
11
11
  import { Icon } from '../Icon';
12
12
 
13
- type ModalRenderProp = (args: { closeModal: () => void }) => React.ReactNode;
13
+ type ModalRenderProp = (args: { closeModal: () => void }) => ReactNode;
14
14
 
15
15
  export type ModalProps = React.HTMLAttributes<HTMLDivElement> &
16
16
  ModalVariants & {
17
17
  triggerLabel: string;
18
18
  withCloseButton?: boolean;
19
- children: React.ReactNode | ModalRenderProp;
19
+ children: ReactNode | ModalRenderProp;
20
20
  };
21
21
 
22
22
  export const Modal = ({ triggerLabel, className, children, align, withCloseButton = false }: ModalProps) => {
@@ -24,6 +24,13 @@ export const Modal = ({ triggerLabel, className, children, align, withCloseButto
24
24
 
25
25
  const closeModal = () => setIsOpen(false);
26
26
 
27
+ const renderChildren = () => {
28
+ if (typeof children === 'function') {
29
+ return (children as ModalRenderProp)({ closeModal });
30
+ }
31
+ return children;
32
+ };
33
+
27
34
  return (
28
35
  <>
29
36
  <Actions align="center">
@@ -39,7 +46,7 @@ export const Modal = ({ triggerLabel, className, children, align, withCloseButto
39
46
  </button>
40
47
  )}
41
48
 
42
- {typeof children === 'function' ? (children as ModalRenderProp)({ closeModal }) : children}
49
+ {renderChildren()}
43
50
  </div>
44
51
  </div>
45
52
  )}