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.
@@ -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;
@@ -3,6 +3,7 @@ interface AccordionProps {
3
3
  items: {
4
4
  title: string;
5
5
  content: React.ReactNode;
6
+ icon?: React.ReactNode;
6
7
  }[];
7
8
  allowMultiple?: boolean;
8
9
  defaultOpenIndexes?: number[];
@@ -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("button", { className: "accordion-header ".concat(titleClass), onClick: onToggle },
52
- react_1.default.createElement("span", null, title),
53
- react_1.default.createElement("span", { className: iconClass }, isOpen ? (react_1.default.createElement("span", { className: "animated slide-up" },
54
- react_1.default.createElement(pi_1.PiCaretUp, null))) : (react_1.default.createElement("span", { className: "animated slide-down" },
55
- react_1.default.createElement(pi_1.PiCaretDown, null))))),
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
- <button className={`accordion-header ${titleClass}`} onClick={onToggle}>
34
- <span>{title}</span>
35
- <span className={iconClass}>
36
- {isOpen ? (
37
- <span className="animated slide-up">
38
- <PiCaretUp />
39
- </span>
40
- ) : (
41
- <span className="animated slide-down">
42
- <PiCaretDown />
43
- </span>
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("span", { className: "rotate", style: { lineHeight: "0" } },
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
  }
@@ -94,9 +94,9 @@ export default function Alert({
94
94
  {type === 'error' && <PiX />}
95
95
  </div>
96
96
  ) : (
97
- <span className="rotate" style={{lineHeight:"0"}}>
97
+ <div className="rotate" style={{lineHeight:"0"}}>
98
98
  <PiSpinner />
99
- </span>
99
+ </div>
100
100
  )}
101
101
  </div>
102
102
  <div className="alert-text">{message || children}</div>
@@ -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?: string;
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 {};
@@ -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, size = _a.size, bg = _a.bg, content = _a.content;
41
- return (React.createElement("div", { className: "avatar ".concat(funcss || '', " ").concat(bg || ''), style: {
42
- width: "".concat(size || '2.3rem'),
43
- height: "".concat(size || '2.3rem'),
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
  }
@@ -1,30 +1,50 @@
1
- 'use client';
2
- import { ReactNode } from 'react';
3
- import * as React from 'react'
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?: string;
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={`avatar ${funcss || ''} ${bg || ''}`}
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 || '2.3rem'}`,
24
- height: `${size || '2.3rem'}`,
41
+ width: `${size}rem`,
42
+ height: `${size}rem`,
25
43
  }}
44
+ onClick={onClick}
45
+ {...rest}
26
46
  >
27
- <>{content ? content : children}</>
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;