funuicss 2.7.6 → 2.7.8
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 +113 -13
- package/index.d.ts +3 -0
- package/index.js +8 -1
- package/index.tsx +3 -0
- package/package.json +4 -1
- package/tsconfig.tsbuildinfo +1 -1
- package/ui/ScrollInView/ScrollInView.d.ts +72 -0
- package/ui/ScrollInView/ScrollInView.js +70 -0
- package/ui/ScrollInView/ScrollInView.tsx +69 -0
- package/ui/accordion/Accordion.d.ts +1 -0
- package/ui/accordion/Accordion.js +12 -7
- package/ui/accordion/Accordion.tsx +16 -15
- package/ui/alert/Alert.js +1 -1
- package/ui/alert/Alert.tsx +2 -2
- package/ui/avatar/Avatar.d.ts +6 -3
- package/ui/avatar/Avatar.js +27 -6
- package/ui/avatar/Avatar.tsx +29 -9
- package/ui/datepicker/DatePicker.d.ts +10 -0
- package/ui/datepicker/DatePicker.js +129 -0
- package/ui/datepicker/DatePicker.tsx +143 -0
- package/ui/specials/Circle.js +1 -1
- package/ui/specials/Circle.tsx +1 -1
- package/ui/theme/theme.d.ts +1 -1
- package/ui/theme/theme.js +1 -1
- package/ui/theme/theme.tsx +2 -2
- package/ui/theme/themes.d.ts +113 -0
- package/ui/theme/themes.js +48 -3
- package/ui/theme/themes.ts +75 -0
- package/ui/view/View.d.ts +44 -0
- package/ui/view/View.js +64 -0
- package/ui/view/View.tsx +157 -0
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import React, { ReactNode } from 'react';
|
|
2
|
+
declare const animationVariants: {
|
|
3
|
+
'fade-up': {
|
|
4
|
+
hidden: {
|
|
5
|
+
opacity: number;
|
|
6
|
+
y: number;
|
|
7
|
+
};
|
|
8
|
+
visible: {
|
|
9
|
+
opacity: number;
|
|
10
|
+
y: number;
|
|
11
|
+
};
|
|
12
|
+
};
|
|
13
|
+
'fade-down': {
|
|
14
|
+
hidden: {
|
|
15
|
+
opacity: number;
|
|
16
|
+
y: number;
|
|
17
|
+
};
|
|
18
|
+
visible: {
|
|
19
|
+
opacity: number;
|
|
20
|
+
y: number;
|
|
21
|
+
};
|
|
22
|
+
};
|
|
23
|
+
'fade-in': {
|
|
24
|
+
hidden: {
|
|
25
|
+
opacity: number;
|
|
26
|
+
};
|
|
27
|
+
visible: {
|
|
28
|
+
opacity: number;
|
|
29
|
+
};
|
|
30
|
+
};
|
|
31
|
+
'zoom-in': {
|
|
32
|
+
hidden: {
|
|
33
|
+
scale: number;
|
|
34
|
+
opacity: number;
|
|
35
|
+
};
|
|
36
|
+
visible: {
|
|
37
|
+
scale: number;
|
|
38
|
+
opacity: number;
|
|
39
|
+
};
|
|
40
|
+
};
|
|
41
|
+
'slide-left': {
|
|
42
|
+
hidden: {
|
|
43
|
+
x: number;
|
|
44
|
+
opacity: number;
|
|
45
|
+
};
|
|
46
|
+
visible: {
|
|
47
|
+
x: number;
|
|
48
|
+
opacity: number;
|
|
49
|
+
};
|
|
50
|
+
};
|
|
51
|
+
'slide-right': {
|
|
52
|
+
hidden: {
|
|
53
|
+
x: number;
|
|
54
|
+
opacity: number;
|
|
55
|
+
};
|
|
56
|
+
visible: {
|
|
57
|
+
x: number;
|
|
58
|
+
opacity: number;
|
|
59
|
+
};
|
|
60
|
+
};
|
|
61
|
+
};
|
|
62
|
+
interface ScrollInViewProps {
|
|
63
|
+
children: ReactNode;
|
|
64
|
+
animationType?: keyof typeof animationVariants;
|
|
65
|
+
delay?: number;
|
|
66
|
+
duration?: number;
|
|
67
|
+
threshold?: number;
|
|
68
|
+
once?: boolean;
|
|
69
|
+
className?: string;
|
|
70
|
+
}
|
|
71
|
+
declare const ScrollInView: React.FC<ScrollInViewProps>;
|
|
72
|
+
export default ScrollInView;
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
'use client';
|
|
3
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
4
|
+
if (k2 === undefined) k2 = k;
|
|
5
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
6
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
7
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
8
|
+
}
|
|
9
|
+
Object.defineProperty(o, k2, desc);
|
|
10
|
+
}) : (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
o[k2] = m[k];
|
|
13
|
+
}));
|
|
14
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
15
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
16
|
+
}) : function(o, v) {
|
|
17
|
+
o["default"] = v;
|
|
18
|
+
});
|
|
19
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
20
|
+
var ownKeys = function(o) {
|
|
21
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
22
|
+
var ar = [];
|
|
23
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
24
|
+
return ar;
|
|
25
|
+
};
|
|
26
|
+
return ownKeys(o);
|
|
27
|
+
};
|
|
28
|
+
return function (mod) {
|
|
29
|
+
if (mod && mod.__esModule) return mod;
|
|
30
|
+
var result = {};
|
|
31
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
32
|
+
__setModuleDefault(result, mod);
|
|
33
|
+
return result;
|
|
34
|
+
};
|
|
35
|
+
})();
|
|
36
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
37
|
+
var react_1 = __importStar(require("react"));
|
|
38
|
+
var framer_motion_1 = require("framer-motion");
|
|
39
|
+
var react_intersection_observer_1 = require("react-intersection-observer");
|
|
40
|
+
var animationVariants = {
|
|
41
|
+
'fade-up': { hidden: { opacity: 0, y: 20 }, visible: { opacity: 1, y: 0 } },
|
|
42
|
+
'fade-down': { hidden: { opacity: 0, y: -20 }, visible: { opacity: 1, y: 0 } },
|
|
43
|
+
'fade-in': { hidden: { opacity: 0 }, visible: { opacity: 1 } },
|
|
44
|
+
'zoom-in': { hidden: { scale: 0.95, opacity: 0 }, visible: { scale: 1, opacity: 1 } },
|
|
45
|
+
'slide-left': { hidden: { x: 20, opacity: 0 }, visible: { x: 0, opacity: 1 } },
|
|
46
|
+
'slide-right': { hidden: { x: -20, opacity: 0 }, visible: { x: 0, opacity: 1 } },
|
|
47
|
+
};
|
|
48
|
+
var ScrollInView = function (_a) {
|
|
49
|
+
var children = _a.children, _b = _a.animationType, animationType = _b === void 0 ? 'fade-up' : _b, _c = _a.delay, delay = _c === void 0 ? 0 : _c, _d = _a.duration, duration = _d === void 0 ? 0.6 : _d, _e = _a.threshold, threshold = _e === void 0 ? 0.2 : _e, _f = _a.once, once = _f === void 0 ? false : _f, _g = _a.className, className = _g === void 0 ? '' : _g;
|
|
50
|
+
var controls = (0, framer_motion_1.useAnimation)();
|
|
51
|
+
var _h = (0, react_intersection_observer_1.useInView)({
|
|
52
|
+
threshold: threshold,
|
|
53
|
+
triggerOnce: once,
|
|
54
|
+
}), ref = _h[0], inView = _h[1];
|
|
55
|
+
(0, react_1.useEffect)(function () {
|
|
56
|
+
if (inView) {
|
|
57
|
+
controls.start('visible');
|
|
58
|
+
}
|
|
59
|
+
else if (!once) {
|
|
60
|
+
controls.start('hidden');
|
|
61
|
+
}
|
|
62
|
+
}, [inView, once, controls]);
|
|
63
|
+
var variants = animationVariants[animationType] || animationVariants['fade-up'];
|
|
64
|
+
return (react_1.default.createElement(framer_motion_1.motion.div, { ref: ref, variants: variants, initial: "hidden", animate: controls, transition: {
|
|
65
|
+
delay: delay,
|
|
66
|
+
duration: duration,
|
|
67
|
+
ease: 'linear', // SMOOTH and STRAIGHT
|
|
68
|
+
}, className: className }, children));
|
|
69
|
+
};
|
|
70
|
+
exports.default = ScrollInView;
|
|
@@ -0,0 +1,69 @@
|
|
|
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 = false,
|
|
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;
|
|
@@ -42,17 +42,22 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
|
42
42
|
}
|
|
43
43
|
return to.concat(ar || Array.prototype.slice.call(from));
|
|
44
44
|
};
|
|
45
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
46
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
47
|
+
};
|
|
45
48
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
46
49
|
var react_1 = __importStar(require("react"));
|
|
47
50
|
var pi_1 = require("react-icons/pi");
|
|
51
|
+
var RowFlex_1 = __importDefault(require("../specials/RowFlex"));
|
|
48
52
|
var AccordionItem = function (_a) {
|
|
49
|
-
var title = _a.title, content = _a.content, isOpen = _a.isOpen, onToggle = _a.onToggle, _b = _a.itemClass, itemClass = _b === void 0 ? '' : _b, _c = _a.titleClass, titleClass = _c === void 0 ? '' : _c, _d = _a.iconClass, iconClass = _d === void 0 ? '' : _d, _e = _a.contentClass, contentClass = _e === void 0 ? '' : _e, _f = _a.activeClass, activeClass = _f === void 0 ? '' : _f;
|
|
53
|
+
var icon = _a.icon, title = _a.title, content = _a.content, isOpen = _a.isOpen, onToggle = _a.onToggle, _b = _a.itemClass, itemClass = _b === void 0 ? '' : _b, _c = _a.titleClass, titleClass = _c === void 0 ? '' : _c, _d = _a.iconClass, iconClass = _d === void 0 ? '' : _d, _e = _a.contentClass, contentClass = _e === void 0 ? '' : _e, _f = _a.activeClass, activeClass = _f === void 0 ? '' : _f;
|
|
50
54
|
return (react_1.default.createElement("div", { className: "accordion-item ".concat(itemClass, " ").concat(isOpen ? activeClass : '') },
|
|
51
|
-
react_1.default.createElement("
|
|
52
|
-
react_1.default.createElement(
|
|
53
|
-
|
|
54
|
-
react_1.default.createElement(
|
|
55
|
-
|
|
55
|
+
react_1.default.createElement("div", { className: "accordion-header ".concat(titleClass), onClick: onToggle },
|
|
56
|
+
react_1.default.createElement(RowFlex_1.default, { alignItems: 'center', gap: 0.6 },
|
|
57
|
+
icon && react_1.default.createElement("div", { style: { lineHeight: 0 } }, icon),
|
|
58
|
+
react_1.default.createElement("div", { className: 'col fit' }, title)),
|
|
59
|
+
react_1.default.createElement("div", { style: { lineHeight: 0 }, className: "".concat(iconClass, " ").concat(isOpen ? "accordion-rotated" : "") },
|
|
60
|
+
react_1.default.createElement(pi_1.PiCaretDown, null))),
|
|
56
61
|
react_1.default.createElement("div", { className: "accordion-content ".concat(contentClass, " ").concat(isOpen ? 'open' : '') },
|
|
57
62
|
react_1.default.createElement("div", { className: "accordion-inner" }, content))));
|
|
58
63
|
};
|
|
@@ -75,6 +80,6 @@ var Accordion = function (_a) {
|
|
|
75
80
|
setOpenIndexes(openIndexes.includes(index) ? [] : [index]);
|
|
76
81
|
}
|
|
77
82
|
};
|
|
78
|
-
return (react_1.default.createElement("div", { className: "accordion" }, items.map(function (item, index) { return (react_1.default.createElement(AccordionItem, { key: index, index: index, title: item.title, content: item.content, isOpen: openIndexes.includes(index), onToggle: function () { return toggleIndex(index); }, itemClass: itemClass, titleClass: titleClass, iconClass: iconClass, contentClass: contentClass, activeClass: activeClass })); })));
|
|
83
|
+
return (react_1.default.createElement("div", { className: "accordion" }, items.map(function (item, index) { return (react_1.default.createElement(AccordionItem, { key: index, index: index, icon: item.icon, title: item.title, content: item.content, isOpen: openIndexes.includes(index), onToggle: function () { return toggleIndex(index); }, itemClass: itemClass, titleClass: titleClass, iconClass: iconClass, contentClass: contentClass, activeClass: activeClass })); })));
|
|
79
84
|
};
|
|
80
85
|
exports.default = Accordion;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import React, { useState } from 'react';
|
|
3
3
|
import { PiCaretDown, PiCaretUp } from 'react-icons/pi';
|
|
4
|
+
import RowFlex from '../specials/RowFlex';
|
|
4
5
|
|
|
5
6
|
interface AccordionItemProps {
|
|
6
7
|
title: string;
|
|
@@ -8,7 +9,7 @@ interface AccordionItemProps {
|
|
|
8
9
|
isOpen?: boolean;
|
|
9
10
|
onToggle?: () => void;
|
|
10
11
|
index?: number;
|
|
11
|
-
|
|
12
|
+
icon?: React.ReactNode;
|
|
12
13
|
// Customization
|
|
13
14
|
itemClass?: string;
|
|
14
15
|
titleClass?: string;
|
|
@@ -18,6 +19,7 @@ interface AccordionItemProps {
|
|
|
18
19
|
}
|
|
19
20
|
|
|
20
21
|
const AccordionItem: React.FC<AccordionItemProps> = ({
|
|
22
|
+
icon,
|
|
21
23
|
title,
|
|
22
24
|
content,
|
|
23
25
|
isOpen,
|
|
@@ -30,20 +32,17 @@ const AccordionItem: React.FC<AccordionItemProps> = ({
|
|
|
30
32
|
}) => {
|
|
31
33
|
return (
|
|
32
34
|
<div className={`accordion-item ${itemClass} ${isOpen ? activeClass : ''}`}>
|
|
33
|
-
<
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
)}
|
|
45
|
-
</span>
|
|
46
|
-
</button>
|
|
35
|
+
<div className={`accordion-header ${titleClass}`} onClick={onToggle}>
|
|
36
|
+
<RowFlex alignItems='center' gap={0.6}>
|
|
37
|
+
{
|
|
38
|
+
icon && <div style={{lineHeight:0}}>{icon}</div>
|
|
39
|
+
}
|
|
40
|
+
<div className='col fit'>{title}</div>
|
|
41
|
+
</RowFlex>
|
|
42
|
+
<div style={{lineHeight:0}} className={`${iconClass} ${isOpen ? "accordion-rotated" : ""}`}>
|
|
43
|
+
<PiCaretDown />
|
|
44
|
+
</div>
|
|
45
|
+
</div>
|
|
47
46
|
<div className={`accordion-content ${contentClass} ${isOpen ? 'open' : ''}`}>
|
|
48
47
|
<div className="accordion-inner">{content}</div>
|
|
49
48
|
</div>
|
|
@@ -55,6 +54,7 @@ interface AccordionProps {
|
|
|
55
54
|
items: {
|
|
56
55
|
title: string;
|
|
57
56
|
content: React.ReactNode;
|
|
57
|
+
icon?: React.ReactNode;
|
|
58
58
|
}[];
|
|
59
59
|
allowMultiple?: boolean; // ✅ NEW
|
|
60
60
|
defaultOpenIndexes?: number[]; // optional
|
|
@@ -99,6 +99,7 @@ const Accordion: React.FC<AccordionProps> = ({
|
|
|
99
99
|
<AccordionItem
|
|
100
100
|
key={index}
|
|
101
101
|
index={index}
|
|
102
|
+
icon={item.icon}
|
|
102
103
|
title={item.title}
|
|
103
104
|
content={item.content}
|
|
104
105
|
isOpen={openIndexes.includes(index)}
|
package/ui/alert/Alert.js
CHANGED
|
@@ -82,7 +82,7 @@ function Alert(_a) {
|
|
|
82
82
|
type === 'success' && react_1.default.createElement(pi_1.PiCheckCircleDuotone, null),
|
|
83
83
|
type === 'info' && react_1.default.createElement(pi_1.PiInfo, null),
|
|
84
84
|
type === 'warning' && react_1.default.createElement(pi_1.PiWarning, null),
|
|
85
|
-
type === 'error' && react_1.default.createElement(pi_1.PiX, null))) : (react_1.default.createElement("
|
|
85
|
+
type === 'error' && react_1.default.createElement(pi_1.PiX, null))) : (react_1.default.createElement("div", { className: "rotate", style: { lineHeight: "0" } },
|
|
86
86
|
react_1.default.createElement(pi_1.PiSpinner, null)))),
|
|
87
87
|
react_1.default.createElement("div", { className: "alert-text" }, message || children))));
|
|
88
88
|
}
|
package/ui/alert/Alert.tsx
CHANGED
|
@@ -94,9 +94,9 @@ export default function Alert({
|
|
|
94
94
|
{type === 'error' && <PiX />}
|
|
95
95
|
</div>
|
|
96
96
|
) : (
|
|
97
|
-
<
|
|
97
|
+
<div className="rotate" style={{lineHeight:"0"}}>
|
|
98
98
|
<PiSpinner />
|
|
99
|
-
</
|
|
99
|
+
</div>
|
|
100
100
|
)}
|
|
101
101
|
</div>
|
|
102
102
|
<div className="alert-text">{message || children}</div>
|
package/ui/avatar/Avatar.d.ts
CHANGED
|
@@ -1,11 +1,14 @@
|
|
|
1
|
-
import { ReactNode } from 'react';
|
|
1
|
+
import { ReactNode, MouseEventHandler } from 'react';
|
|
2
2
|
import * as React from 'react';
|
|
3
3
|
interface AvatarProps {
|
|
4
4
|
funcss?: string;
|
|
5
5
|
children?: ReactNode;
|
|
6
|
-
size?:
|
|
6
|
+
size?: number;
|
|
7
7
|
bg?: string;
|
|
8
|
+
bordered?: boolean;
|
|
9
|
+
color?: string;
|
|
8
10
|
content?: ReactNode;
|
|
11
|
+
onClick?: MouseEventHandler<HTMLDivElement>;
|
|
9
12
|
}
|
|
10
|
-
export default function Avatar({ funcss, children, size, bg, content, }: AvatarProps): React.JSX.Element;
|
|
13
|
+
export default function Avatar({ funcss, children, size, bordered, bg, content, color, onClick, ...rest }: AvatarProps): React.JSX.Element;
|
|
11
14
|
export {};
|
package/ui/avatar/Avatar.js
CHANGED
|
@@ -1,5 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
'use client';
|
|
3
|
+
var __assign = (this && this.__assign) || function () {
|
|
4
|
+
__assign = Object.assign || function(t) {
|
|
5
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
6
|
+
s = arguments[i];
|
|
7
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
8
|
+
t[p] = s[p];
|
|
9
|
+
}
|
|
10
|
+
return t;
|
|
11
|
+
};
|
|
12
|
+
return __assign.apply(this, arguments);
|
|
13
|
+
};
|
|
3
14
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
4
15
|
if (k2 === undefined) k2 = k;
|
|
5
16
|
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
@@ -33,14 +44,24 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
33
44
|
return result;
|
|
34
45
|
};
|
|
35
46
|
})();
|
|
47
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
48
|
+
var t = {};
|
|
49
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
50
|
+
t[p] = s[p];
|
|
51
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
52
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
53
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
54
|
+
t[p[i]] = s[p[i]];
|
|
55
|
+
}
|
|
56
|
+
return t;
|
|
57
|
+
};
|
|
36
58
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
37
59
|
exports.default = Avatar;
|
|
38
60
|
var React = __importStar(require("react"));
|
|
39
61
|
function Avatar(_a) {
|
|
40
|
-
var funcss = _a.funcss, children = _a.children,
|
|
41
|
-
return (React.createElement("div", { className: "avatar ".concat(funcss || '', " ").concat(bg || ''), style: {
|
|
42
|
-
width: "".concat(size
|
|
43
|
-
height: "".concat(size
|
|
44
|
-
} },
|
|
45
|
-
React.createElement(React.Fragment, null, content ? content : children)));
|
|
62
|
+
var funcss = _a.funcss, children = _a.children, _b = _a.size, size = _b === void 0 ? 2 : _b, _c = _a.bordered, bordered = _c === void 0 ? true : _c, bg = _a.bg, content = _a.content, color = _a.color, onClick = _a.onClick, rest = __rest(_a, ["funcss", "children", "size", "bordered", "bg", "content", "color", "onClick"]);
|
|
63
|
+
return (React.createElement("div", __assign({ className: "\n animated \n pointer\n fade-in \n avatar \n ".concat(funcss || '', " \n ").concat(bg || 'lighter', " \n ").concat(bordered ? 'border' : '', "\n ").concat(color ? "text-".concat(color) : '', "\n "), style: {
|
|
64
|
+
width: "".concat(size, "rem"),
|
|
65
|
+
height: "".concat(size, "rem"),
|
|
66
|
+
}, onClick: onClick }, rest), content || children));
|
|
46
67
|
}
|
package/ui/avatar/Avatar.tsx
CHANGED
|
@@ -1,30 +1,50 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
|
|
3
|
-
import
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { ReactNode, MouseEventHandler } from 'react';
|
|
4
|
+
import * as React from 'react';
|
|
5
|
+
|
|
4
6
|
interface AvatarProps {
|
|
5
7
|
funcss?: string;
|
|
6
8
|
children?: ReactNode;
|
|
7
|
-
size?:
|
|
9
|
+
size?: number;
|
|
8
10
|
bg?: string;
|
|
11
|
+
bordered?: boolean;
|
|
12
|
+
color?: string;
|
|
9
13
|
content?: ReactNode;
|
|
14
|
+
onClick?: MouseEventHandler<HTMLDivElement>;
|
|
10
15
|
}
|
|
11
16
|
|
|
12
17
|
export default function Avatar({
|
|
13
18
|
funcss,
|
|
14
19
|
children,
|
|
15
|
-
size,
|
|
20
|
+
size = 2,
|
|
21
|
+
bordered = true,
|
|
16
22
|
bg,
|
|
17
23
|
content,
|
|
24
|
+
color,
|
|
25
|
+
onClick,
|
|
26
|
+
...rest
|
|
18
27
|
}: AvatarProps) {
|
|
19
28
|
return (
|
|
20
29
|
<div
|
|
21
|
-
className={`
|
|
30
|
+
className={`
|
|
31
|
+
animated
|
|
32
|
+
pointer
|
|
33
|
+
fade-in
|
|
34
|
+
avatar
|
|
35
|
+
${funcss || ''}
|
|
36
|
+
${bg || 'lighter'}
|
|
37
|
+
${bordered ? 'border' : ''}
|
|
38
|
+
${color ? `text-${color}` : ''}
|
|
39
|
+
`}
|
|
22
40
|
style={{
|
|
23
|
-
width: `${size
|
|
24
|
-
height: `${size
|
|
41
|
+
width: `${size}rem`,
|
|
42
|
+
height: `${size}rem`,
|
|
25
43
|
}}
|
|
44
|
+
onClick={onClick}
|
|
45
|
+
{...rest}
|
|
26
46
|
>
|
|
27
|
-
|
|
47
|
+
{content || children}
|
|
28
48
|
</div>
|
|
29
49
|
);
|
|
30
50
|
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
interface DatePickerProps {
|
|
3
|
+
mode?: 'single' | 'interval';
|
|
4
|
+
funcss?: string;
|
|
5
|
+
onSelect?: (value: Date | [Date, Date]) => void;
|
|
6
|
+
value?: Date | [Date, Date];
|
|
7
|
+
className?: string;
|
|
8
|
+
}
|
|
9
|
+
declare const DatePicker: React.FC<DatePickerProps>;
|
|
10
|
+
export default DatePicker;
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
'use client';
|
|
3
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
4
|
+
if (k2 === undefined) k2 = k;
|
|
5
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
6
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
7
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
8
|
+
}
|
|
9
|
+
Object.defineProperty(o, k2, desc);
|
|
10
|
+
}) : (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
o[k2] = m[k];
|
|
13
|
+
}));
|
|
14
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
15
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
16
|
+
}) : function(o, v) {
|
|
17
|
+
o["default"] = v;
|
|
18
|
+
});
|
|
19
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
20
|
+
var ownKeys = function(o) {
|
|
21
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
22
|
+
var ar = [];
|
|
23
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
24
|
+
return ar;
|
|
25
|
+
};
|
|
26
|
+
return ownKeys(o);
|
|
27
|
+
};
|
|
28
|
+
return function (mod) {
|
|
29
|
+
if (mod && mod.__esModule) return mod;
|
|
30
|
+
var result = {};
|
|
31
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
32
|
+
__setModuleDefault(result, mod);
|
|
33
|
+
return result;
|
|
34
|
+
};
|
|
35
|
+
})();
|
|
36
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
37
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
38
|
+
};
|
|
39
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
40
|
+
var react_1 = __importStar(require("react"));
|
|
41
|
+
var dayjs_1 = __importDefault(require("dayjs"));
|
|
42
|
+
var Avatar_1 = __importDefault(require("../avatar/Avatar"));
|
|
43
|
+
var pi_1 = require("react-icons/pi");
|
|
44
|
+
var DatePicker = function (_a) {
|
|
45
|
+
var _b = _a.mode, mode = _b === void 0 ? 'single' : _b, onSelect = _a.onSelect, value = _a.value, funcss = _a.funcss, _c = _a.className, className = _c === void 0 ? '' : _c;
|
|
46
|
+
var _d = (0, react_1.useState)((0, dayjs_1.default)()), currentMonth = _d[0], setCurrentMonth = _d[1];
|
|
47
|
+
var _e = (0, react_1.useState)(value || null), selected = _e[0], setSelected = _e[1];
|
|
48
|
+
var daysInMonth = currentMonth.daysInMonth();
|
|
49
|
+
var firstDay = currentMonth.startOf('month').day(); // 0 = Sunday
|
|
50
|
+
var days = [];
|
|
51
|
+
for (var i = 0; i < firstDay; i++) {
|
|
52
|
+
days.push(null); // padding
|
|
53
|
+
}
|
|
54
|
+
for (var i = 1; i <= daysInMonth; i++) {
|
|
55
|
+
days.push(currentMonth.date(i).toDate());
|
|
56
|
+
}
|
|
57
|
+
var handleSelect = function (date) {
|
|
58
|
+
if (mode === 'single') {
|
|
59
|
+
setSelected(date);
|
|
60
|
+
onSelect === null || onSelect === void 0 ? void 0 : onSelect(date);
|
|
61
|
+
}
|
|
62
|
+
else if (mode === 'interval') {
|
|
63
|
+
if (!selected || !Array.isArray(selected)) {
|
|
64
|
+
setSelected([date, null]);
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
var start = selected[0], end = selected[1];
|
|
68
|
+
if (!end) {
|
|
69
|
+
var range = (0, dayjs_1.default)(date).isBefore((0, dayjs_1.default)(start)) ? [date, start] : [start, date];
|
|
70
|
+
setSelected(range);
|
|
71
|
+
onSelect === null || onSelect === void 0 ? void 0 : onSelect(range);
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
setSelected([date, null]); // restart
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
var isSelected = function (date) {
|
|
80
|
+
if (!selected)
|
|
81
|
+
return false;
|
|
82
|
+
if (mode === 'single' && selected instanceof Date) {
|
|
83
|
+
return (0, dayjs_1.default)(selected).isSame(date, 'day');
|
|
84
|
+
}
|
|
85
|
+
if (Array.isArray(selected)) {
|
|
86
|
+
var start = selected[0], end = selected[1];
|
|
87
|
+
if (start && end) {
|
|
88
|
+
return ((0, dayjs_1.default)(date).isSame(start, 'day') ||
|
|
89
|
+
(0, dayjs_1.default)(date).isSame(end, 'day') ||
|
|
90
|
+
((0, dayjs_1.default)(date).isAfter(start) && (0, dayjs_1.default)(date).isBefore(end)));
|
|
91
|
+
}
|
|
92
|
+
return (0, dayjs_1.default)(date).isSame(start, 'day');
|
|
93
|
+
}
|
|
94
|
+
return false;
|
|
95
|
+
};
|
|
96
|
+
var nextMonth = function () { return setCurrentMonth(currentMonth.add(1, 'month')); };
|
|
97
|
+
var prevMonth = function () { return setCurrentMonth(currentMonth.subtract(1, 'month')); };
|
|
98
|
+
var handleClear = function () {
|
|
99
|
+
setSelected(null);
|
|
100
|
+
onSelect === null || onSelect === void 0 ? void 0 : onSelect(mode === 'single' ? null : null);
|
|
101
|
+
};
|
|
102
|
+
var formatDate = function (date) {
|
|
103
|
+
return date ? (0, dayjs_1.default)(date).format('MMM D, YYYY') : '...';
|
|
104
|
+
};
|
|
105
|
+
return (react_1.default.createElement("div", { className: "datepicker ".concat(funcss, " ").concat(className) },
|
|
106
|
+
react_1.default.createElement("div", { className: "datepicker-header" },
|
|
107
|
+
react_1.default.createElement(Avatar_1.default, { onClick: prevMonth },
|
|
108
|
+
react_1.default.createElement(pi_1.PiCaretLeft, null)),
|
|
109
|
+
react_1.default.createElement("span", null, currentMonth.format('MMMM YYYY')),
|
|
110
|
+
react_1.default.createElement(Avatar_1.default, { onClick: nextMonth },
|
|
111
|
+
react_1.default.createElement(pi_1.PiCaretRight, null))),
|
|
112
|
+
selected && (react_1.default.createElement("div", { className: "datepicker-selected" },
|
|
113
|
+
react_1.default.createElement("span", { className: "interval-display" },
|
|
114
|
+
mode === 'single' && selected instanceof Date && (react_1.default.createElement(react_1.default.Fragment, null,
|
|
115
|
+
"Selected: ",
|
|
116
|
+
formatDate(selected))),
|
|
117
|
+
mode === 'interval' && Array.isArray(selected) && (react_1.default.createElement("div", { className: 'text-sm' }, selected[1]
|
|
118
|
+
? "From ".concat(formatDate(selected[0]), " to ").concat(formatDate(selected[1]))
|
|
119
|
+
: "Start: ".concat(formatDate(selected[0]), " - Select end date")))),
|
|
120
|
+
react_1.default.createElement("div", { style: { lineHeight: "0" } },
|
|
121
|
+
react_1.default.createElement(pi_1.PiX, { className: "clear-icon", onClick: handleClear, style: { cursor: 'pointer' } })))),
|
|
122
|
+
react_1.default.createElement("div", { className: "datepicker-weekdays" }, ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'].map(function (d) { return (react_1.default.createElement("div", { key: d }, d)); })),
|
|
123
|
+
react_1.default.createElement("div", { className: "datepicker-grid" }, days.map(function (date, idx) {
|
|
124
|
+
var isSelectedClass = date && isSelected(date) ? 'selected' : '';
|
|
125
|
+
var isInRangeClass = date && isSelected(date) && Array.isArray(selected) ? 'in-range' : '';
|
|
126
|
+
return (react_1.default.createElement("div", { key: idx, onClick: function () { return date && handleSelect(date); }, className: "datepicker-day ".concat(!date ? 'empty' : '', " ").concat(isSelectedClass, " ").concat(isInRangeClass) }, date ? (0, dayjs_1.default)(date).date() : ''));
|
|
127
|
+
}))));
|
|
128
|
+
};
|
|
129
|
+
exports.default = DatePicker;
|