@stfrigerio/sito-template 0.1.29 → 0.1.30
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/dist/components/organisms/Navbar/Navbar.d.ts +2 -0
- package/dist/components/organisms/Navbar/Navbar.d.ts.map +1 -1
- package/dist/components/organisms/Navbar/Navbar.stories.d.ts +2 -0
- package/dist/components/organisms/Navbar/Navbar.stories.d.ts.map +1 -1
- package/dist/index.esm.js +6 -3
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +6 -3
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { IconType } from 'react-icons';
|
|
3
|
+
import { ComponentSoundConfig } from '../../../utils/useSound';
|
|
3
4
|
export interface NavItem {
|
|
4
5
|
id: string;
|
|
5
6
|
label: string;
|
|
@@ -23,6 +24,7 @@ export interface NavbarProps {
|
|
|
23
24
|
isMobile?: boolean;
|
|
24
25
|
footer?: React.ReactNode;
|
|
25
26
|
className?: string;
|
|
27
|
+
soundConfig?: ComponentSoundConfig;
|
|
26
28
|
}
|
|
27
29
|
export declare const Navbar: React.FC<NavbarProps>;
|
|
28
30
|
//# sourceMappingURL=Navbar.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Navbar.d.ts","sourceRoot":"","sources":["../../../../src/components/organisms/Navbar/Navbar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAuC,MAAM,OAAO,CAAC;AAG5D,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"Navbar.d.ts","sourceRoot":"","sources":["../../../../src/components/organisms/Navbar/Navbar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAuC,MAAM,OAAO,CAAC;AAG5D,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAGvC,OAAO,EAAqB,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAElF,MAAM,WAAW,OAAO;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,WAAW;IACxB,KAAK,EAAE,OAAO,EAAE,CAAC;IACjB,IAAI,CAAC,EAAE;QACH,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACtC,OAAO,CAAC,EAAE,SAAS,GAAG,KAAK,GAAG,SAAS,CAAC;IACxC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,oBAAoB,CAAC;CACtC;AAED,eAAO,MAAM,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,WAAW,CAyQxC,CAAC"}
|
|
@@ -8,8 +8,10 @@ export declare const SidebarWithImage: Story;
|
|
|
8
8
|
export declare const TopNavigation: Story;
|
|
9
9
|
export declare const MinimalNavigation: Story;
|
|
10
10
|
export declare const MobileBottomNav: Story;
|
|
11
|
+
export declare const MobileWithSounds: Story;
|
|
11
12
|
export declare const ECommerceNav: Story;
|
|
12
13
|
export declare const DashboardNav: Story;
|
|
13
14
|
export declare const WithCustomFooter: Story;
|
|
14
15
|
export declare const InteractiveExample: Story;
|
|
16
|
+
export declare const WithSounds: Story;
|
|
15
17
|
//# sourceMappingURL=Navbar.stories.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Navbar.stories.d.ts","sourceRoot":"","sources":["../../../../src/components/organisms/Navbar/Navbar.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAGlC,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,MAAM,CAe7B,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AA8CnC,eAAO,MAAM,cAAc,EAAE,KAS5B,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,KAW9B,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,KAQ3B,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,KAK/B,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,KAkC7B,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,KAwD1B,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,KA8F1B,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,KA0B9B,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,KAahC,CAAC"}
|
|
1
|
+
{"version":3,"file":"Navbar.stories.d.ts","sourceRoot":"","sources":["../../../../src/components/organisms/Navbar/Navbar.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAGlC,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,MAAM,CAe7B,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AA8CnC,eAAO,MAAM,cAAc,EAAE,KAS5B,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,KAW9B,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,KAQ3B,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,KAK/B,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,KAkC7B,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,KAsC9B,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,KAwD1B,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,KA8F1B,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,KA0B9B,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,KAahC,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,KAaxB,CAAC"}
|
package/dist/index.esm.js
CHANGED
|
@@ -2751,10 +2751,11 @@ var desktopStyles = {"navbar":"Navbar-module_navbar__-SNiN","navbarSidebar":"Nav
|
|
|
2751
2751
|
|
|
2752
2752
|
var mobileStyles = {"navbar":"Navbar-mobile-module_navbar__-shkE","navLogo":"Navbar-mobile-module_navLogo__7Gnna","navList":"Navbar-mobile-module_navList__FBo8I","navItem":"Navbar-mobile-module_navItem__-9E9-","navLink":"Navbar-mobile-module_navLink__A8n8F","active":"Navbar-mobile-module_active__h3ajz","activeBackground":"Navbar-mobile-module_activeBackground__btXAN","navIcon":"Navbar-mobile-module_navIcon__4L17v","activeIcon":"Navbar-mobile-module_activeIcon__A8GF-","navText":"Navbar-mobile-module_navText__ewf-i","activeText":"Navbar-mobile-module_activeText__fNqcU","navBadge":"Navbar-mobile-module_navBadge__YccGx","chevron":"Navbar-mobile-module_chevron__nBPqn","subNavList":"Navbar-mobile-module_subNavList__8tINc","navFooter":"Navbar-mobile-module_navFooter__yijWu","mobileMenuButton":"Navbar-mobile-module_mobileMenuButton__Dx3t8","mobileBackdrop":"Navbar-mobile-module_mobileBackdrop__biYng","navbarTop":"Navbar-mobile-module_navbarTop__oyfPE","navbarMinimal":"Navbar-mobile-module_navbarMinimal__cudny"};
|
|
2753
2753
|
|
|
2754
|
-
const Navbar = ({ items, logo, onItemClick, variant = 'sidebar', isMobile = false, footer, className = '' }) => {
|
|
2754
|
+
const Navbar = ({ items, logo, onItemClick, variant = 'sidebar', isMobile = false, footer, className = '', soundConfig }) => {
|
|
2755
2755
|
const styles = useMemo(() => isMobile ? mobileStyles : desktopStyles, [isMobile]);
|
|
2756
2756
|
const [isMobileMenuOpen, setIsMobileMenuOpen] = useState(false);
|
|
2757
2757
|
const [expandedItems, setExpandedItems] = useState(new Set());
|
|
2758
|
+
const { handlers, playSound } = useComponentSound(soundConfig);
|
|
2758
2759
|
// Close mobile menu when screen size changes
|
|
2759
2760
|
useEffect(() => {
|
|
2760
2761
|
const handleResize = () => {
|
|
@@ -2766,6 +2767,7 @@ const Navbar = ({ items, logo, onItemClick, variant = 'sidebar', isMobile = fals
|
|
|
2766
2767
|
return () => window.removeEventListener('resize', handleResize);
|
|
2767
2768
|
}, []);
|
|
2768
2769
|
const toggleMobileMenu = () => {
|
|
2770
|
+
playSound('toggle');
|
|
2769
2771
|
setIsMobileMenuOpen(!isMobileMenuOpen);
|
|
2770
2772
|
};
|
|
2771
2773
|
const toggleExpanded = (itemId) => {
|
|
@@ -2781,6 +2783,7 @@ const Navbar = ({ items, logo, onItemClick, variant = 'sidebar', isMobile = fals
|
|
|
2781
2783
|
});
|
|
2782
2784
|
};
|
|
2783
2785
|
const handleItemClick = (item) => {
|
|
2786
|
+
handlers.onClick?.();
|
|
2784
2787
|
if (item.children && item.children.length > 0) {
|
|
2785
2788
|
toggleExpanded(item.id);
|
|
2786
2789
|
}
|
|
@@ -2800,13 +2803,13 @@ const Navbar = ({ items, logo, onItemClick, variant = 'sidebar', isMobile = fals
|
|
|
2800
2803
|
const Icon = item.icon;
|
|
2801
2804
|
const isExpanded = expandedItems.has(item.id);
|
|
2802
2805
|
const hasChildren = item.children && item.children.length > 0;
|
|
2803
|
-
return (jsxs(motion.li, { className: `${styles.navItem} ${depth > 0 ? styles.subNavItem : ''}`, initial: { opacity: 0, x: -20 }, animate: { opacity: 1, x: 0 }, transition: { delay: index * 0.05 }, children: [jsxs(motion.button, { className: `${styles.navLink} ${item.isActive ? styles.active : ''}`, onClick: () => handleItemClick(item), whileHover: { x: 5 }, whileTap: { scale: 0.98 }, children: [item.isActive && (jsx(motion.div, { className: styles.activeBackground, layoutId: "activeNavBackground", initial: false, transition: {
|
|
2806
|
+
return (jsxs(motion.li, { className: `${styles.navItem} ${depth > 0 ? styles.subNavItem : ''}`, initial: { opacity: 0, x: -20 }, animate: { opacity: 1, x: 0 }, transition: { delay: index * 0.05 }, children: [jsxs(motion.button, { className: `${styles.navLink} ${item.isActive ? styles.active : ''}`, onClick: () => handleItemClick(item), onMouseEnter: handlers.onMouseEnter, whileHover: { x: 5 }, whileTap: { scale: 0.98 }, children: [item.isActive && (jsx(motion.div, { className: styles.activeBackground, layoutId: "activeNavBackground", initial: false, transition: {
|
|
2804
2807
|
type: "spring",
|
|
2805
2808
|
stiffness: 500,
|
|
2806
2809
|
damping: 35
|
|
2807
2810
|
} })), Icon && (jsx(Icon, { className: `${styles.navIcon} ${item.isActive ? styles.activeIcon : ''}` })), jsx("span", { className: `${styles.navText} ${item.isActive ? styles.activeText : ''}`, children: item.label }), item.badge && (jsx("span", { className: styles.navBadge, children: item.badge })), hasChildren && (jsx(motion.span, { className: styles.chevron, animate: { rotate: isExpanded ? 180 : 0 }, transition: { duration: 0.2 }, children: "\u25BC" }))] }), hasChildren && (jsx(AnimatePresence, { children: isExpanded && (jsx(motion.ul, { className: styles.subNavList, initial: { height: 0, opacity: 0 }, animate: { height: 'auto', opacity: 1 }, exit: { height: 0, opacity: 0 }, transition: { duration: 0.2 }, children: item.children.map((child, childIndex) => renderNavItem(child, childIndex, depth + 1)) })) }))] }, item.id));
|
|
2808
2811
|
};
|
|
2809
|
-
const navContent = (jsxs(Fragment, { children: [logo && (jsx(motion.div, { className: styles.navLogo, initial: { opacity: 0, y: -20 }, animate: { opacity: 1, y: 0 }, transition: { delay: 0.1 }, children: jsxs("div", { className: styles.logoContainer, children: [logo.src ? (jsx(motion.img, { src: logo.src, alt: logo.alt || 'Logo', className: styles.logoImage, whileHover: { scale: 1.05 }, transition: { type: "spring", stiffness: 400 } })) : (jsx("div", { className: styles.logoPlaceholder, children: logo.text?.charAt(0) || 'L' })), (logo.text || logo.subtitle) && (jsxs("div", { className: styles.logoContent, children: [logo.text && (jsx("span", { className: styles.logoText, children: logo.text })), logo.subtitle && (jsx("span", { className: styles.logoSubtitle, children: logo.subtitle }))] }))] }) })), jsx("ul", { className: styles.navList, children: items.map((item, index) => renderNavItem(item, index)) }), footer && (jsx(motion.div, { className: styles.navFooter, initial: { opacity: 0, y: 20 }, animate: { opacity: 1, y: 0 }, transition: { delay: 0.3 }, children: footer }))] }));
|
|
2812
|
+
const navContent = (jsxs(Fragment, { children: [logo && (jsx(motion.div, { className: styles.navLogo, initial: { opacity: 0, y: -20 }, animate: { opacity: 1, y: 0 }, transition: { delay: 0.1 }, children: jsxs("div", { className: styles.logoContainer, children: [logo.src ? (jsx(motion.img, { src: logo.src, alt: logo.alt || 'Logo', className: styles.logoImage, onMouseEnter: handlers.onMouseEnter, whileHover: { scale: 1.05 }, transition: { type: "spring", stiffness: 400 } })) : (jsx("div", { className: styles.logoPlaceholder, children: logo.text?.charAt(0) || 'L' })), (logo.text || logo.subtitle) && (jsxs("div", { className: styles.logoContent, children: [logo.text && (jsx("span", { className: styles.logoText, children: logo.text })), logo.subtitle && (jsx("span", { className: styles.logoSubtitle, children: logo.subtitle }))] }))] }) })), jsx("ul", { className: styles.navList, children: items.map((item, index) => renderNavItem(item, index)) }), footer && (jsx(motion.div, { className: styles.navFooter, initial: { opacity: 0, y: 20 }, animate: { opacity: 1, y: 0 }, transition: { delay: 0.3 }, children: footer }))] }));
|
|
2810
2813
|
if (variant === 'top') {
|
|
2811
2814
|
return (jsx(motion.nav, { className: `${styles.navbar} ${styles.navbarTop} ${className}`, initial: { y: -100 }, animate: { y: 0 }, transition: { type: "spring", stiffness: 300, damping: 30 }, children: navContent }));
|
|
2812
2815
|
}
|