funuicss 2.7.16 → 3.0.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.
- package/css/fun.css +6663 -6653
- package/index.d.ts +2 -0
- package/index.js +5 -1
- package/js/google/AnalyticsHandler.d.ts +10 -0
- package/js/google/AnalyticsHandler.js +20 -0
- package/js/google/analytics.d.ts +6 -0
- package/js/google/analytics.js +53 -0
- package/package.json +1 -1
- package/tsconfig.tsbuildinfo +1 -1
- package/ui/flex/Flex.d.ts +3 -3
- package/ui/flex/Flex.js +2 -2
- package/ui/notification/Notification.d.ts +7 -3
- package/ui/notification/Notification.js +18 -14
- package/ui/scrolltotop/ScrollToTop.d.ts +3 -0
- package/ui/scrolltotop/ScrollToTop.js +61 -0
- package/ui/view/View.d.ts +27 -38
- package/ui/view/View.js +10 -38
- package/ui/vista/Vista.d.ts +6 -1
- package/ui/vista/Vista.js +33 -4
- package/assets/colors/colors.d.ts +0 -347
- package/assets/colors/colors.js +0 -348
- package/assets/colors/colors.tsx +0 -697
- package/hooks/useHls.tsx +0 -69
- package/index.tsx +0 -58
- package/js/Cookie.tsx +0 -91
- package/js/Fun.jsx +0 -225
- package/js/Fun.tsx +0 -239
- package/tsconfig.json +0 -20
- package/types/react-easy-export.d.ts +0 -4
- package/ui/ScrollInView/ScrollInView.tsx +0 -69
- package/ui/accordion/Accordion.tsx +0 -125
- package/ui/alert/Alert.tsx +0 -106
- package/ui/aos/AOS.tsx +0 -24
- package/ui/appbar/AppBar.tsx +0 -115
- package/ui/appbar/Hamburger.tsx +0 -30
- package/ui/avatar/Avatar.tsx +0 -52
- package/ui/blob/Blob.tsx +0 -34
- package/ui/breadcrumb/BreadCrumb.tsx +0 -48
- package/ui/button/Button.tsx +0 -153
- package/ui/calendar/ActivityCard.tsx +0 -27
- package/ui/calendar/Calendar.tsx +0 -343
- package/ui/card/Card.tsx +0 -117
- package/ui/card/CardBody.tsx +0 -14
- package/ui/card/CardFab.tsx +0 -16
- package/ui/card/CardFooter.tsx +0 -14
- package/ui/card/CardHeader.tsx +0 -14
- package/ui/carousel/Carousel.tsx +0 -148
- package/ui/chart/Bar.tsx +0 -121
- package/ui/chart/Line.tsx +0 -186
- package/ui/chart/Pie.tsx +0 -127
- package/ui/container/Container.tsx +0 -38
- package/ui/datepicker/DatePicker.tsx +0 -148
- package/ui/div/Div.tsx +0 -61
- package/ui/drop/Action.tsx +0 -16
- package/ui/drop/Down.tsx +0 -18
- package/ui/drop/Dropdown.tsx +0 -117
- package/ui/drop/Item.tsx +0 -15
- package/ui/drop/Menu.tsx +0 -40
- package/ui/drop/Up.tsx +0 -18
- package/ui/flex/Flex.tsx +0 -97
- package/ui/flex/FlexItem.tsx +0 -64
- package/ui/grid/Col.tsx +0 -43
- package/ui/grid/Grid.tsx +0 -37
- package/ui/input/Iconic.tsx +0 -43
- package/ui/input/Input.tsx +0 -409
- package/ui/list/Item.tsx +0 -18
- package/ui/list/List.tsx +0 -45
- package/ui/loader/Loader.tsx +0 -47
- package/ui/modal/Action.tsx +0 -14
- package/ui/modal/Close.tsx +0 -14
- package/ui/modal/Content.tsx +0 -15
- package/ui/modal/Header.tsx +0 -19
- package/ui/modal/Modal.tsx +0 -140
- package/ui/notification/Content.tsx +0 -14
- package/ui/notification/Footer.tsx +0 -14
- package/ui/notification/Header.tsx +0 -14
- package/ui/notification/Notification.tsx +0 -62
- package/ui/page/NotFound.tsx +0 -67
- package/ui/page/UnAuthorized.tsx +0 -64
- package/ui/progress/Bar.tsx +0 -114
- package/ui/richtext/RichText.tsx +0 -156
- package/ui/sidebar/SideBar.tsx +0 -202
- package/ui/sidebar/SideContent.tsx +0 -16
- package/ui/slider/Slider.tsx +0 -75
- package/ui/snackbar/SnackBar.tsx +0 -56
- package/ui/specials/Circle.tsx +0 -49
- package/ui/specials/CircleGroup.tsx +0 -49
- package/ui/specials/FullCenteredPage.tsx +0 -25
- package/ui/specials/Hr.tsx +0 -16
- package/ui/specials/RowFlex.tsx +0 -56
- package/ui/specials/Section.tsx +0 -18
- package/ui/step/Container.tsx +0 -27
- package/ui/step/Header.tsx +0 -16
- package/ui/step/Line.tsx +0 -17
- package/ui/step/Step.tsx +0 -17
- package/ui/table/Body.tsx +0 -10
- package/ui/table/Data.tsx +0 -15
- package/ui/table/Head.tsx +0 -10
- package/ui/table/Row.tsx +0 -16
- package/ui/table/Table.tsx +0 -372
- package/ui/text/Text.tsx +0 -179
- package/ui/theme/dark.tsx +0 -45
- package/ui/theme/darkenUtils.ts +0 -15
- package/ui/theme/theme.tsx +0 -48
- package/ui/theme/themes.ts +0 -154
- package/ui/tooltip/Tip.tsx +0 -34
- package/ui/tooltip/ToolTip.tsx +0 -20
- package/ui/video/Video.tsx +0 -348
- package/ui/video/videoFunctions.tsx +0 -19
- package/ui/video/videoShortcuts.ts +0 -13
- package/ui/view/View.tsx +0 -157
- package/ui/vista/Vista.tsx +0 -165
- package/utils/Emojis.tsx +0 -59
- package/utils/Functions.tsx +0 -9
- package/utils/getCssVariable.tsx +0 -9
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
|
|
3
|
-
import React, { ReactNode, useEffect } from 'react';
|
|
4
|
-
import { motion, useAnimation } from 'framer-motion';
|
|
5
|
-
import { useInView } from 'react-intersection-observer';
|
|
6
|
-
|
|
7
|
-
const animationVariants = {
|
|
8
|
-
'fade-up': { hidden: { opacity: 0, y: 20 }, visible: { opacity: 1, y: 0 } },
|
|
9
|
-
'fade-down': { hidden: { opacity: 0, y: -20 }, visible: { opacity: 1, y: 0 } },
|
|
10
|
-
'fade-in': { hidden: { opacity: 0 }, visible: { opacity: 1 } },
|
|
11
|
-
'zoom-in': { hidden: { scale: 0.95, opacity: 0 }, visible: { scale: 1, opacity: 1 } },
|
|
12
|
-
'slide-left': { hidden: { x: 20, opacity: 0 }, visible: { x: 0, opacity: 1 } },
|
|
13
|
-
'slide-right': { hidden: { x: -20, opacity: 0 }, visible: { x: 0, opacity: 1 } },
|
|
14
|
-
};
|
|
15
|
-
|
|
16
|
-
interface ScrollInViewProps {
|
|
17
|
-
children: ReactNode;
|
|
18
|
-
animationType?: keyof typeof animationVariants;
|
|
19
|
-
delay?: number;
|
|
20
|
-
duration?: number;
|
|
21
|
-
threshold?: number;
|
|
22
|
-
once?: boolean;
|
|
23
|
-
className?: string;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
const ScrollInView: React.FC<ScrollInViewProps> = ({
|
|
27
|
-
children,
|
|
28
|
-
animationType = 'fade-up',
|
|
29
|
-
delay = 0,
|
|
30
|
-
duration = 0.6,
|
|
31
|
-
threshold = 0.2,
|
|
32
|
-
once = true,
|
|
33
|
-
className = '',
|
|
34
|
-
}) => {
|
|
35
|
-
const controls = useAnimation();
|
|
36
|
-
const [ref, inView] = useInView({
|
|
37
|
-
threshold,
|
|
38
|
-
triggerOnce: once,
|
|
39
|
-
});
|
|
40
|
-
|
|
41
|
-
useEffect(() => {
|
|
42
|
-
if (inView) {
|
|
43
|
-
controls.start('visible');
|
|
44
|
-
} else if (!once) {
|
|
45
|
-
controls.start('hidden');
|
|
46
|
-
}
|
|
47
|
-
}, [inView, once, controls]);
|
|
48
|
-
|
|
49
|
-
const variants = animationVariants[animationType] || animationVariants['fade-up'];
|
|
50
|
-
|
|
51
|
-
return (
|
|
52
|
-
<motion.div
|
|
53
|
-
ref={ref}
|
|
54
|
-
variants={variants}
|
|
55
|
-
initial="hidden"
|
|
56
|
-
animate={controls}
|
|
57
|
-
transition={{
|
|
58
|
-
delay,
|
|
59
|
-
duration,
|
|
60
|
-
ease: 'linear', // SMOOTH and STRAIGHT
|
|
61
|
-
}}
|
|
62
|
-
className={className}
|
|
63
|
-
>
|
|
64
|
-
{children}
|
|
65
|
-
</motion.div>
|
|
66
|
-
);
|
|
67
|
-
};
|
|
68
|
-
|
|
69
|
-
export default ScrollInView;
|
|
@@ -1,125 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
import React, { useState } from 'react';
|
|
3
|
-
import { PiCaretDown } from 'react-icons/pi';
|
|
4
|
-
import RowFlex from '../specials/RowFlex';
|
|
5
|
-
|
|
6
|
-
export type AccordionItemProps = {
|
|
7
|
-
title: string;
|
|
8
|
-
content: React.ReactNode;
|
|
9
|
-
isOpen?: boolean;
|
|
10
|
-
onToggle?: () => void;
|
|
11
|
-
index?: number;
|
|
12
|
-
icon?: React.ReactNode;
|
|
13
|
-
|
|
14
|
-
// Customization
|
|
15
|
-
itemClass?: string;
|
|
16
|
-
titleClass?: string;
|
|
17
|
-
iconClass?: string;
|
|
18
|
-
contentClass?: string;
|
|
19
|
-
activeClass?: string;
|
|
20
|
-
};
|
|
21
|
-
|
|
22
|
-
export const AccordionItem: React.FC<AccordionItemProps> = ({
|
|
23
|
-
icon,
|
|
24
|
-
title,
|
|
25
|
-
content,
|
|
26
|
-
isOpen,
|
|
27
|
-
onToggle,
|
|
28
|
-
itemClass = '',
|
|
29
|
-
titleClass = '',
|
|
30
|
-
iconClass = '',
|
|
31
|
-
contentClass = '',
|
|
32
|
-
activeClass = '',
|
|
33
|
-
}) => {
|
|
34
|
-
return (
|
|
35
|
-
<div className={`accordion-item ${itemClass} ${isOpen ? activeClass : ''}`}>
|
|
36
|
-
<div
|
|
37
|
-
className={`accordion-header ${titleClass}`}
|
|
38
|
-
onClick={onToggle}
|
|
39
|
-
role="button"
|
|
40
|
-
aria-expanded={isOpen}
|
|
41
|
-
>
|
|
42
|
-
<RowFlex alignItems="center" gap={0.6}>
|
|
43
|
-
{icon && <div style={{ lineHeight: 0 }}>{icon}</div>}
|
|
44
|
-
<div className="col fit">{title}</div>
|
|
45
|
-
</RowFlex>
|
|
46
|
-
<div
|
|
47
|
-
style={{ lineHeight: 0 }}
|
|
48
|
-
className={`${iconClass} ${isOpen ? 'accordion-rotated' : ''}`}
|
|
49
|
-
>
|
|
50
|
-
<PiCaretDown />
|
|
51
|
-
</div>
|
|
52
|
-
</div>
|
|
53
|
-
<div className={`accordion-content ${contentClass} ${isOpen ? 'open' : ''}`}>
|
|
54
|
-
<div className="accordion-inner">{content}</div>
|
|
55
|
-
</div>
|
|
56
|
-
</div>
|
|
57
|
-
);
|
|
58
|
-
};
|
|
59
|
-
|
|
60
|
-
export type AccordionProps = {
|
|
61
|
-
items: {
|
|
62
|
-
title: string;
|
|
63
|
-
content: React.ReactNode;
|
|
64
|
-
icon?: React.ReactNode;
|
|
65
|
-
}[];
|
|
66
|
-
allowMultiple?: boolean;
|
|
67
|
-
defaultOpenIndexes?: number[];
|
|
68
|
-
|
|
69
|
-
// Custom styles
|
|
70
|
-
itemClass?: string;
|
|
71
|
-
titleClass?: string;
|
|
72
|
-
iconClass?: string;
|
|
73
|
-
contentClass?: string;
|
|
74
|
-
activeClass?: string;
|
|
75
|
-
};
|
|
76
|
-
|
|
77
|
-
const Accordion: React.FC<AccordionProps> = ({
|
|
78
|
-
items,
|
|
79
|
-
allowMultiple = false,
|
|
80
|
-
defaultOpenIndexes = [],
|
|
81
|
-
itemClass,
|
|
82
|
-
titleClass,
|
|
83
|
-
iconClass,
|
|
84
|
-
contentClass,
|
|
85
|
-
activeClass,
|
|
86
|
-
}) => {
|
|
87
|
-
const [openIndexes, setOpenIndexes] = useState<number[]>(
|
|
88
|
-
allowMultiple ? defaultOpenIndexes : [defaultOpenIndexes[0] ?? -1]
|
|
89
|
-
);
|
|
90
|
-
|
|
91
|
-
const toggleIndex = (index: number) => {
|
|
92
|
-
if (allowMultiple) {
|
|
93
|
-
if (openIndexes.includes(index)) {
|
|
94
|
-
setOpenIndexes(openIndexes.filter((i) => i !== index));
|
|
95
|
-
} else {
|
|
96
|
-
setOpenIndexes([...openIndexes, index]);
|
|
97
|
-
}
|
|
98
|
-
} else {
|
|
99
|
-
setOpenIndexes(openIndexes.includes(index) ? [] : [index]);
|
|
100
|
-
}
|
|
101
|
-
};
|
|
102
|
-
|
|
103
|
-
return (
|
|
104
|
-
<div className="accordion">
|
|
105
|
-
{items.map((item, index) => (
|
|
106
|
-
<AccordionItem
|
|
107
|
-
key={index}
|
|
108
|
-
index={index}
|
|
109
|
-
icon={item.icon}
|
|
110
|
-
title={item.title}
|
|
111
|
-
content={item.content}
|
|
112
|
-
isOpen={openIndexes.includes(index)}
|
|
113
|
-
onToggle={() => toggleIndex(index)}
|
|
114
|
-
itemClass={itemClass}
|
|
115
|
-
titleClass={titleClass}
|
|
116
|
-
iconClass={iconClass}
|
|
117
|
-
contentClass={contentClass}
|
|
118
|
-
activeClass={activeClass}
|
|
119
|
-
/>
|
|
120
|
-
))}
|
|
121
|
-
</div>
|
|
122
|
-
);
|
|
123
|
-
};
|
|
124
|
-
|
|
125
|
-
export default Accordion;
|
package/ui/alert/Alert.tsx
DELETED
|
@@ -1,106 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
import { PiInfo , PiCheckCircleDuotone , PiWarning , PiX , PiSpinner } from "react-icons/pi";
|
|
3
|
-
import React, { ReactNode, useEffect, useState } from 'react';
|
|
4
|
-
|
|
5
|
-
interface AlertProps {
|
|
6
|
-
message?: string;
|
|
7
|
-
funcss?: string;
|
|
8
|
-
type?: 'success' | 'info' | 'warning' | 'error';
|
|
9
|
-
outlined?: boolean;
|
|
10
|
-
fixed?: 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right' | 'top-middle' | 'bottom-middle' | 'middle';
|
|
11
|
-
fullWidth?: boolean;
|
|
12
|
-
isLoading?: boolean;
|
|
13
|
-
children?: ReactNode;
|
|
14
|
-
animation?: string;
|
|
15
|
-
duration?: string;
|
|
16
|
-
raised?: boolean;
|
|
17
|
-
card?: boolean;
|
|
18
|
-
variant?: string;
|
|
19
|
-
flat?: boolean;
|
|
20
|
-
standard?: boolean;
|
|
21
|
-
style?: React.CSSProperties;
|
|
22
|
-
autoHide?: boolean;
|
|
23
|
-
autoHideDuration?: number;
|
|
24
|
-
onClose?: () => void;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
export default function Alert({
|
|
28
|
-
message,
|
|
29
|
-
funcss,
|
|
30
|
-
type,
|
|
31
|
-
outlined,
|
|
32
|
-
fixed,
|
|
33
|
-
raised,
|
|
34
|
-
fullWidth,
|
|
35
|
-
isLoading,
|
|
36
|
-
children,
|
|
37
|
-
animation,
|
|
38
|
-
duration,
|
|
39
|
-
variant,
|
|
40
|
-
flat,
|
|
41
|
-
standard,
|
|
42
|
-
card,
|
|
43
|
-
style,
|
|
44
|
-
autoHide = false,
|
|
45
|
-
autoHideDuration = 3000,
|
|
46
|
-
onClose,
|
|
47
|
-
...rest
|
|
48
|
-
}: AlertProps) {
|
|
49
|
-
const [visible, setVisible] = useState(true);
|
|
50
|
-
|
|
51
|
-
useEffect(() => {
|
|
52
|
-
let timeout: NodeJS.Timeout;
|
|
53
|
-
if (autoHide) {
|
|
54
|
-
timeout = setTimeout(() => {
|
|
55
|
-
setVisible(false);
|
|
56
|
-
onClose?.();
|
|
57
|
-
}, autoHideDuration);
|
|
58
|
-
}
|
|
59
|
-
return () => clearTimeout(timeout);
|
|
60
|
-
}, [autoHide, autoHideDuration, onClose]);
|
|
61
|
-
|
|
62
|
-
if (!visible) return null;
|
|
63
|
-
|
|
64
|
-
return (
|
|
65
|
-
<div
|
|
66
|
-
className={`${
|
|
67
|
-
fixed ? 'alert-container ' : ''
|
|
68
|
-
} ${fixed === 'top-left' ? 'top-left' : ''}
|
|
69
|
-
${fixed === 'top-right' ? 'top-right' : ''}
|
|
70
|
-
${fixed === 'bottom-left' ? 'bottom-left' : ''}
|
|
71
|
-
${fixed === 'bottom-right' ? 'bottom-right' : ''}
|
|
72
|
-
${fixed === 'middle' ? 'middle-alert' : ''}
|
|
73
|
-
${fixed === 'top-middle' ? 'top-middle' : ''}
|
|
74
|
-
${fixed === 'bottom-middle' ? 'bottom-middle' : ''}`}
|
|
75
|
-
>
|
|
76
|
-
<div
|
|
77
|
-
style={{
|
|
78
|
-
animation: `${duration || '0.3'}s ${animation || 'ScaleUp'}`,
|
|
79
|
-
...style,
|
|
80
|
-
}}
|
|
81
|
-
className={`text-${type}800 alert ${card ? 'card' : ''} ${flat ? 'flat' : ''} ${raised ? 'raised' : ''} ${
|
|
82
|
-
outlined
|
|
83
|
-
? `outline-${type}500`
|
|
84
|
-
: `${variant || (standard ? `top-${type}` : `${type}200` + ` outline-${type}300 `)}`
|
|
85
|
-
} ${funcss || ''} ${fullWidth ? 'width-100-p' : ''}`}
|
|
86
|
-
{...rest}
|
|
87
|
-
>
|
|
88
|
-
<div className="alert-icon">
|
|
89
|
-
{!isLoading ? (
|
|
90
|
-
<div className={`text-${type}900`} style={{lineHeight:"0"}}>
|
|
91
|
-
{type === 'success' && <PiCheckCircleDuotone />}
|
|
92
|
-
{type === 'info' && <PiInfo />}
|
|
93
|
-
{type === 'warning' && <PiWarning />}
|
|
94
|
-
{type === 'error' && <PiX />}
|
|
95
|
-
</div>
|
|
96
|
-
) : (
|
|
97
|
-
<div className="rotate" style={{lineHeight:"0"}}>
|
|
98
|
-
<PiSpinner />
|
|
99
|
-
</div>
|
|
100
|
-
)}
|
|
101
|
-
</div>
|
|
102
|
-
<div className="alert-text">{message || children}</div>
|
|
103
|
-
</div>
|
|
104
|
-
</div>
|
|
105
|
-
);
|
|
106
|
-
}
|
package/ui/aos/AOS.tsx
DELETED
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import * as React from 'react';
|
|
2
|
-
interface ListItemProps {
|
|
3
|
-
children?: React.ReactNode;
|
|
4
|
-
funcss?: string;
|
|
5
|
-
animation?: string
|
|
6
|
-
anchorPlacement? : string
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
export default function Animation({
|
|
11
|
-
children,
|
|
12
|
-
funcss,
|
|
13
|
-
animation ,
|
|
14
|
-
anchorPlacement,
|
|
15
|
-
...rest
|
|
16
|
-
}: ListItemProps) {
|
|
17
|
-
|
|
18
|
-
return (
|
|
19
|
-
<div data-aos-anchor-placement={anchorPlacement || ""} className={`list ${funcss ? funcss : ''}`} {...rest} data-aos={animation ? animation : "fade-up"}>
|
|
20
|
-
{children}
|
|
21
|
-
</div>
|
|
22
|
-
)
|
|
23
|
-
|
|
24
|
-
}
|
package/ui/appbar/AppBar.tsx
DELETED
|
@@ -1,115 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
import * as React from 'react';
|
|
3
|
-
import { useState, useEffect } from 'react';
|
|
4
|
-
import { usePathname } from 'next/navigation'; // <-- Updated import
|
|
5
|
-
import Hamburger from './Hamburger';
|
|
6
|
-
|
|
7
|
-
interface NavbarProps {
|
|
8
|
-
fixedTop?: boolean;
|
|
9
|
-
funcss?: string;
|
|
10
|
-
padding?: string;
|
|
11
|
-
fixedBottom?: boolean;
|
|
12
|
-
justify?: string;
|
|
13
|
-
children?: React.ReactNode;
|
|
14
|
-
left?: React.ReactNode;
|
|
15
|
-
center?: React.ReactNode;
|
|
16
|
-
right?: React.ReactNode;
|
|
17
|
-
sidebarTrigger?: React.ReactNode;
|
|
18
|
-
transparent?: boolean;
|
|
19
|
-
sideBar?: number;
|
|
20
|
-
hasSidebar?: boolean;
|
|
21
|
-
sidebarOpen?: boolean;
|
|
22
|
-
openSidebar?: () => void;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
export default function AppBar({
|
|
26
|
-
fixedTop,
|
|
27
|
-
funcss,
|
|
28
|
-
padding,
|
|
29
|
-
fixedBottom,
|
|
30
|
-
justify,
|
|
31
|
-
left,
|
|
32
|
-
center,
|
|
33
|
-
right,
|
|
34
|
-
sideBar,
|
|
35
|
-
sidebarTrigger,
|
|
36
|
-
transparent,
|
|
37
|
-
hasSidebar,
|
|
38
|
-
openSidebar,
|
|
39
|
-
sidebarOpen = false
|
|
40
|
-
}: NavbarProps) {
|
|
41
|
-
const [isMobileMenuOpen, setIsMobileMenuOpen] = useState(false);
|
|
42
|
-
const [isMobileScreen, setIsMobileScreen] = useState(false);
|
|
43
|
-
const pathname = usePathname(); // <-- New hook to detect path changes
|
|
44
|
-
|
|
45
|
-
const toggleMenu = () => setIsMobileMenuOpen((prev) => !prev);
|
|
46
|
-
const closeMenu = () => setIsMobileMenuOpen(false);
|
|
47
|
-
|
|
48
|
-
useEffect(() => {
|
|
49
|
-
const handleResize = () => {
|
|
50
|
-
const isMobile = window.innerWidth < 992;
|
|
51
|
-
setIsMobileScreen(isMobile);
|
|
52
|
-
if (!isMobile) {
|
|
53
|
-
closeMenu(); // close on larger screens
|
|
54
|
-
}
|
|
55
|
-
};
|
|
56
|
-
|
|
57
|
-
handleResize(); // initial check
|
|
58
|
-
window.addEventListener('resize', handleResize);
|
|
59
|
-
return () => window.removeEventListener('resize', handleResize);
|
|
60
|
-
}, []);
|
|
61
|
-
|
|
62
|
-
// Automatically close menu on route (pathname) change
|
|
63
|
-
useEffect(() => {
|
|
64
|
-
closeMenu();
|
|
65
|
-
}, [pathname]);
|
|
66
|
-
|
|
67
|
-
const Trigger = ({ isOpen }: { isOpen: boolean }) => {
|
|
68
|
-
return <Hamburger isOpen={isOpen} />;
|
|
69
|
-
};
|
|
70
|
-
|
|
71
|
-
return (
|
|
72
|
-
<nav
|
|
73
|
-
// the id will be used to get the height for the sidebar in the sidebar file
|
|
74
|
-
id='appBar'
|
|
75
|
-
className={`navigation-bar
|
|
76
|
-
${isMobileMenuOpen ? 'navbar-mobile-open' : ''}
|
|
77
|
-
${funcss || ''}
|
|
78
|
-
${fixedTop ? 'fixed_top_navbar' : ''}
|
|
79
|
-
${sideBar ? 'there_is_sidebar' : ''}
|
|
80
|
-
${transparent ? 'transparent' : ''}
|
|
81
|
-
${fixedBottom ? 'fixedBottom' : ''}
|
|
82
|
-
`}
|
|
83
|
-
style={{
|
|
84
|
-
padding: `${padding || ''}`,
|
|
85
|
-
justifyContent: `${justify || ''}`,
|
|
86
|
-
}}
|
|
87
|
-
>
|
|
88
|
-
<div className="logoWrapper">
|
|
89
|
-
{left}
|
|
90
|
-
{isMobileScreen && isMobileMenuOpen && (
|
|
91
|
-
<div className="hover-text-error pointer _closeNav" onClick={closeMenu}>
|
|
92
|
-
<Trigger isOpen={isMobileMenuOpen} />
|
|
93
|
-
</div>
|
|
94
|
-
)}
|
|
95
|
-
</div>
|
|
96
|
-
|
|
97
|
-
<div className="linkWrapper">{center}</div>
|
|
98
|
-
<div className="linkWrapper">{right}</div>
|
|
99
|
-
|
|
100
|
-
{isMobileScreen && !isMobileMenuOpen && (
|
|
101
|
-
<>
|
|
102
|
-
{
|
|
103
|
-
hasSidebar ?
|
|
104
|
-
<span className="sidebar-trigger pointer hover-text-primary" onClick={openSidebar}>
|
|
105
|
-
{sidebarTrigger || <Trigger isOpen={sidebarOpen} />}
|
|
106
|
-
</span>
|
|
107
|
-
: <span className="sidebar-trigger pointer hover-text-primary" onClick={toggleMenu}>
|
|
108
|
-
{sidebarTrigger || <Trigger isOpen={isMobileMenuOpen} />}
|
|
109
|
-
</span>
|
|
110
|
-
}
|
|
111
|
-
</>
|
|
112
|
-
)}
|
|
113
|
-
</nav>
|
|
114
|
-
);
|
|
115
|
-
}
|
package/ui/appbar/Hamburger.tsx
DELETED
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
import React, { useState } from 'react';
|
|
3
|
-
|
|
4
|
-
interface HamburgerProps {
|
|
5
|
-
isOpen?: boolean;
|
|
6
|
-
toggle?: () => void;
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
const Hamburger: React.FC<HamburgerProps> = ({ isOpen: controlledOpen, toggle }) => {
|
|
10
|
-
const [internalOpen, setInternalOpen] = useState(false);
|
|
11
|
-
const isOpen = controlledOpen !== undefined ? controlledOpen : internalOpen;
|
|
12
|
-
|
|
13
|
-
const handleClick = () => {
|
|
14
|
-
if (toggle) {
|
|
15
|
-
toggle();
|
|
16
|
-
} else {
|
|
17
|
-
setInternalOpen(!isOpen);
|
|
18
|
-
}
|
|
19
|
-
};
|
|
20
|
-
|
|
21
|
-
return (
|
|
22
|
-
<div className={`navhamburger ${isOpen ? 'navopen' : ''}`} onClick={handleClick}>
|
|
23
|
-
<span className="navline navtop"></span>
|
|
24
|
-
<span className="navline navmiddle"></span>
|
|
25
|
-
<span className="navline navbottom"></span>
|
|
26
|
-
</div>
|
|
27
|
-
);
|
|
28
|
-
};
|
|
29
|
-
|
|
30
|
-
export default Hamburger;
|
package/ui/avatar/Avatar.tsx
DELETED
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
|
|
3
|
-
import { ReactNode, MouseEventHandler } from 'react';
|
|
4
|
-
import * as React from 'react';
|
|
5
|
-
|
|
6
|
-
interface AvatarProps {
|
|
7
|
-
funcss?: string;
|
|
8
|
-
children?: ReactNode;
|
|
9
|
-
size?: number;
|
|
10
|
-
bg?: string;
|
|
11
|
-
bordered?: boolean;
|
|
12
|
-
color?: string;
|
|
13
|
-
content?: ReactNode;
|
|
14
|
-
onClick?: MouseEventHandler<HTMLDivElement>;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
export default function Avatar({
|
|
18
|
-
funcss,
|
|
19
|
-
children,
|
|
20
|
-
size = 2,
|
|
21
|
-
bordered = true,
|
|
22
|
-
bg,
|
|
23
|
-
content,
|
|
24
|
-
color,
|
|
25
|
-
onClick,
|
|
26
|
-
...rest
|
|
27
|
-
}: AvatarProps) {
|
|
28
|
-
return (
|
|
29
|
-
<div>
|
|
30
|
-
<div
|
|
31
|
-
className={`
|
|
32
|
-
animated
|
|
33
|
-
pointer
|
|
34
|
-
fade-in
|
|
35
|
-
avatar
|
|
36
|
-
${funcss || ''}
|
|
37
|
-
${bg || 'lighter'}
|
|
38
|
-
${bordered ? 'border' : ''}
|
|
39
|
-
${color ? `text-${color}` : ''}
|
|
40
|
-
`}
|
|
41
|
-
style={{
|
|
42
|
-
width: `${size}rem`,
|
|
43
|
-
height: `${size}rem`,
|
|
44
|
-
}}
|
|
45
|
-
onClick={onClick}
|
|
46
|
-
{...rest}
|
|
47
|
-
>
|
|
48
|
-
{content || children}
|
|
49
|
-
</div>
|
|
50
|
-
</div>
|
|
51
|
-
);
|
|
52
|
-
}
|
package/ui/blob/Blob.tsx
DELETED
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import * as React from 'react';
|
|
2
|
-
|
|
3
|
-
interface BlobProps {
|
|
4
|
-
height?: string;
|
|
5
|
-
width?: string;
|
|
6
|
-
background?: string;
|
|
7
|
-
funcss?: string;
|
|
8
|
-
shape?: string;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
const Blob: React.FC<BlobProps> = ({
|
|
12
|
-
height = '',
|
|
13
|
-
width = '',
|
|
14
|
-
background = '',
|
|
15
|
-
funcss = '',
|
|
16
|
-
shape = '',
|
|
17
|
-
}) => {
|
|
18
|
-
return (
|
|
19
|
-
<div
|
|
20
|
-
className={`${funcss}`}
|
|
21
|
-
style={{
|
|
22
|
-
height,
|
|
23
|
-
width,
|
|
24
|
-
background: background ? `url(${background})` : '',
|
|
25
|
-
backgroundSize: 'cover',
|
|
26
|
-
backgroundRepeat: 'no-repeat',
|
|
27
|
-
borderRadius: shape,
|
|
28
|
-
transition: '0.3s linear',
|
|
29
|
-
}}
|
|
30
|
-
></div>
|
|
31
|
-
);
|
|
32
|
-
};
|
|
33
|
-
|
|
34
|
-
export default Blob;
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
import * as React from 'react';
|
|
3
|
-
import { PiCaretLeft, PiCaretRight } from 'react-icons/pi';
|
|
4
|
-
interface BreadCrumbProps {
|
|
5
|
-
type?: 'slash' | 'greater' | 'less' | 'straight';
|
|
6
|
-
funcss?: string;
|
|
7
|
-
color?: string;
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
export default function BreadCrumb({ type, funcss, color }: BreadCrumbProps) {
|
|
11
|
-
return (
|
|
12
|
-
<span >
|
|
13
|
-
{type === 'slash' && (
|
|
14
|
-
<span
|
|
15
|
-
style={{lineHeight:"0"}}
|
|
16
|
-
className={` ${funcss ? funcss : ''} ${color ? 'text-' + color : ''}`}
|
|
17
|
-
>
|
|
18
|
-
{' / '}
|
|
19
|
-
</span>
|
|
20
|
-
)}
|
|
21
|
-
{type === 'greater' && (
|
|
22
|
-
<span
|
|
23
|
-
className={` ${funcss ? funcss : ''} ${color ? 'text-' + color : ''}`}
|
|
24
|
-
>
|
|
25
|
-
<span style={{lineHeight:"0"}} className={`${color ? `text-${color}` : ''}`}>
|
|
26
|
-
<PiCaretRight />
|
|
27
|
-
</span>
|
|
28
|
-
</span>
|
|
29
|
-
)}
|
|
30
|
-
{type === 'less' && (
|
|
31
|
-
<span
|
|
32
|
-
className={` ${funcss ? funcss : ''} ${color ? 'text-' + color : ''}`}
|
|
33
|
-
> <span style={{lineHeight:"0"}} className={`${color ? `text-${color}` : ''}`}>
|
|
34
|
-
<PiCaretLeft />
|
|
35
|
-
</span>
|
|
36
|
-
</span>
|
|
37
|
-
)}
|
|
38
|
-
{type === 'straight' && (
|
|
39
|
-
<span
|
|
40
|
-
style={{lineHeight:"0"}}
|
|
41
|
-
className={` ${funcss ? funcss : ''} ${color ? 'text-' + color : ''}`}
|
|
42
|
-
>
|
|
43
|
-
{' | '}
|
|
44
|
-
</span>
|
|
45
|
-
)}
|
|
46
|
-
</span>
|
|
47
|
-
);
|
|
48
|
-
}
|