funuicss 2.7.12 → 2.7.14

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.
@@ -45,6 +45,33 @@ var Functions_1 = require("../../utils/Functions");
45
45
  var Carousel = function (_a) {
46
46
  var _b = _a.scrollNumber, scrollNumber = _b === void 0 ? 320 : _b, _c = _a.gap, gap = _c === void 0 ? 0.5 : _c, _d = _a.funcss, funcss = _d === void 0 ? '' : _d, children = _a.children;
47
47
  var scrollRef = (0, react_1.useRef)(null);
48
+ var _e = (0, react_1.useState)('start'), scrollPosition = _e[0], setScrollPosition = _e[1];
49
+ var _f = (0, react_1.useState)(false), isPhone = _f[0], setIsPhone = _f[1];
50
+ (0, react_1.useEffect)(function () {
51
+ if ((0, Functions_1.isTouchDevice)()) {
52
+ setIsPhone(true);
53
+ }
54
+ else {
55
+ setIsPhone(false);
56
+ }
57
+ }, []);
58
+ // Track scroll position
59
+ var handleScroll = function () {
60
+ var container = scrollRef.current;
61
+ if (!container)
62
+ return;
63
+ var scrollLeft = container.scrollLeft, scrollWidth = container.scrollWidth, clientWidth = container.clientWidth;
64
+ var maxScrollLeft = scrollWidth - clientWidth;
65
+ if (scrollLeft === 0) {
66
+ setScrollPosition('start');
67
+ }
68
+ else if (scrollLeft >= maxScrollLeft - 10) {
69
+ setScrollPosition('end');
70
+ }
71
+ else {
72
+ setScrollPosition('middle');
73
+ }
74
+ };
48
75
  var scroll = function (direction) {
49
76
  var container = scrollRef.current;
50
77
  if (!container)
@@ -54,25 +81,52 @@ var Carousel = function (_a) {
54
81
  behavior: 'smooth',
55
82
  });
56
83
  };
57
- var _e = (0, react_1.useState)(false), isPhone = _e[0], setisPhone = _e[1];
58
84
  (0, react_1.useEffect)(function () {
59
- if ((0, Functions_1.isTouchDevice)()) {
60
- setisPhone(true);
61
- }
62
- else {
63
- setisPhone(false);
85
+ var container = scrollRef.current;
86
+ if (container) {
87
+ container.addEventListener('scroll', handleScroll);
88
+ return function () { return container.removeEventListener('scroll', handleScroll); };
64
89
  }
65
90
  }, []);
66
- return (react_1.default.createElement(RowFlex_1.default, { gap: 1, wrap: "nowrap", alignItems: "center" },
67
- !isPhone &&
68
- react_1.default.createElement("div", null,
91
+ return (react_1.default.createElement("div", { className: "carousel-wrapper ".concat(funcss) },
92
+ react_1.default.createElement(RowFlex_1.default, { gap: 1, wrap: "nowrap", alignItems: "center" },
93
+ !isPhone && (react_1.default.createElement("div", null,
69
94
  react_1.default.createElement(Circle_1.default, { onClick: function () { return scroll('left'); } },
70
- react_1.default.createElement(pi_1.PiCaretLeft, { size: 24 }))),
71
- react_1.default.createElement("div", { ref: scrollRef, className: "carousel-container scrollbar-hide w-full ".concat(funcss), style: { width: "100%", gap: gap + "rem" } }, react_1.default.Children.map(children, function (child) { return (react_1.default.createElement("div", { className: "carousel-item" },
72
- react_1.default.createElement("div", { className: "carousel-card" }, child))); })),
73
- !isPhone &&
74
- react_1.default.createElement("div", null,
95
+ react_1.default.createElement(pi_1.PiCaretLeft, { size: 24 })))),
96
+ react_1.default.createElement("div", { ref: scrollRef, className: "carousel-container scrollbar-hide w-full", style: {
97
+ width: '100%',
98
+ gap: gap + 'rem',
99
+ overflowX: 'auto',
100
+ display: 'flex',
101
+ scrollSnapType: 'x mandatory',
102
+ scrollBehavior: 'smooth',
103
+ } }, react_1.default.Children.map(children, function (child) { return (react_1.default.createElement("div", { className: "carousel-item", style: { flexShrink: 0 } },
104
+ react_1.default.createElement("div", { className: "carousel-card" }, child))); })),
105
+ !isPhone && (react_1.default.createElement("div", null,
75
106
  react_1.default.createElement(Circle_1.default, { onClick: function () { return scroll('right'); } },
76
- react_1.default.createElement(pi_1.PiCaretRight, { size: 24 })))));
107
+ react_1.default.createElement(pi_1.PiCaretRight, { size: 24 }))))),
108
+ react_1.default.createElement("div", { className: "center padding-top-10" },
109
+ react_1.default.createElement(RowFlex_1.default, { gap: 0.5, justify: "center" }, ['start', 'middle', 'end'].map(function (pos) { return (react_1.default.createElement("div", { className: 'pointer ', key: pos, onClick: function () {
110
+ var _a, _b;
111
+ if (pos === 'start') {
112
+ scroll('left');
113
+ }
114
+ else if (pos === 'middle') {
115
+ (_a = scrollRef.current) === null || _a === void 0 ? void 0 : _a.scrollTo({
116
+ left: ((_b = scrollRef.current) === null || _b === void 0 ? void 0 : _b.scrollWidth) / 2,
117
+ behavior: 'smooth',
118
+ });
119
+ }
120
+ else if (pos === 'end') {
121
+ scroll('right');
122
+ }
123
+ }, style: {
124
+ width: '10px',
125
+ height: '10px',
126
+ background: scrollPosition === pos ? 'var(--primary)' : 'var(--borderColor)',
127
+ borderRadius: '50%',
128
+ transform: scrollPosition === pos ? 'scale(1.3)' : 'scale(0.9)',
129
+ transition: 'transform 0.3s ease, background 0.3s ease',
130
+ } })); })))));
77
131
  };
78
132
  exports.default = Carousel;
@@ -6,15 +6,46 @@ import RowFlex from '../specials/RowFlex';
6
6
  import { isTouchDevice } from '../../utils/Functions';
7
7
 
8
8
  interface CarouselProps {
9
-
10
- scrollNumber?: number;
11
- gap?:number;
12
- funcss?: string;
13
- children: ReactNode;
9
+ scrollNumber?: number;
10
+ gap?: number;
11
+ funcss?: string;
12
+ children: ReactNode;
14
13
  }
15
14
 
16
- const Carousel: React.FC<CarouselProps> = ({ scrollNumber = 320, gap = 0.5, funcss = '', children }) => {
15
+ const Carousel: React.FC<CarouselProps> = ({
16
+ scrollNumber = 320,
17
+ gap = 0.5,
18
+ funcss = '',
19
+ children,
20
+ }) => {
17
21
  const scrollRef = useRef<HTMLDivElement | null>(null);
22
+ const [scrollPosition, setScrollPosition] = useState<'start' | 'middle' | 'end'>('start');
23
+ const [isPhone, setIsPhone] = useState(false);
24
+
25
+ useEffect(() => {
26
+ if (isTouchDevice()) {
27
+ setIsPhone(true);
28
+ } else {
29
+ setIsPhone(false);
30
+ }
31
+ }, []);
32
+
33
+ // Track scroll position
34
+ const handleScroll = () => {
35
+ const container = scrollRef.current;
36
+ if (!container) return;
37
+
38
+ const { scrollLeft, scrollWidth, clientWidth } = container;
39
+ const maxScrollLeft = scrollWidth - clientWidth;
40
+
41
+ if (scrollLeft === 0) {
42
+ setScrollPosition('start');
43
+ } else if (scrollLeft >= maxScrollLeft - 10) {
44
+ setScrollPosition('end');
45
+ } else {
46
+ setScrollPosition('middle');
47
+ }
48
+ };
18
49
 
19
50
  const scroll = (direction: 'left' | 'right') => {
20
51
  const container = scrollRef.current;
@@ -25,48 +56,86 @@ const Carousel: React.FC<CarouselProps> = ({ scrollNumber = 320, gap = 0.5, func
25
56
  behavior: 'smooth',
26
57
  });
27
58
  };
28
- const [isPhone, setisPhone] = useState(false)
29
- useEffect(() => {
30
- if (isTouchDevice()) {
31
- setisPhone(true)
32
- } else {
33
- setisPhone(false)
59
+
60
+ useEffect(() => {
61
+ const container = scrollRef.current;
62
+ if (container) {
63
+ container.addEventListener('scroll', handleScroll);
64
+ return () => container.removeEventListener('scroll', handleScroll);
34
65
  }
35
66
  }, []);
36
67
 
37
68
  return (
38
- <RowFlex gap={1} wrap="nowrap" alignItems="center">
39
- {
40
- !isPhone &&
41
- <div >
42
- <Circle onClick={() => scroll('left')}>
43
- <PiCaretLeft size={24} />
44
- </Circle>
45
- </div>
46
- }
69
+ <div className={`carousel-wrapper ${funcss}`}>
70
+ <RowFlex gap={1} wrap="nowrap" alignItems="center">
71
+ {!isPhone && (
72
+ <div>
73
+ <Circle onClick={() => scroll('left')}>
74
+ <PiCaretLeft size={24} />
75
+ </Circle>
76
+ </div>
77
+ )}
78
+
79
+ <div
80
+ ref={scrollRef}
81
+ className={`carousel-container scrollbar-hide w-full`}
82
+ style={{
83
+ width: '100%',
84
+ gap: gap + 'rem',
85
+ overflowX: 'auto',
86
+ display: 'flex',
87
+ scrollSnapType: 'x mandatory',
88
+ scrollBehavior: 'smooth',
89
+ }}
90
+ >
91
+ {React.Children.map(children, (child) => (
92
+ <div className="carousel-item" style={{ flexShrink: 0 }}>
93
+ <div className="carousel-card">{child}</div>
94
+ </div>
95
+ ))}
96
+ </div>
47
97
 
48
- {/* Scrollable container */}
49
- <div
50
- ref={scrollRef}
51
- className={`carousel-container scrollbar-hide w-full ${funcss}`}
52
- style={{width:"100%" , gap:gap + "rem"}}
53
- >
54
- {React.Children.map(children, (child) => (
55
- <div className="carousel-item">
56
- <div className="carousel-card">{child}</div>
98
+ {!isPhone && (
99
+ <div>
100
+ <Circle onClick={() => scroll('right')}>
101
+ <PiCaretRight size={24} />
102
+ </Circle>
57
103
  </div>
58
- ))}
59
- </div>
104
+ )}
105
+ </RowFlex>
60
106
 
61
- {
62
- !isPhone &&
63
- <div>
64
- <Circle onClick={() => scroll('right')}>
65
- <PiCaretRight size={24} />
66
- </Circle>
107
+ {/* Dashes below the carousel */}
108
+ <div className="center padding-top-10">
109
+ <RowFlex gap={0.5} justify="center">
110
+ {['start', 'middle', 'end'].map((pos) => (
111
+ <div
112
+ className={'pointer '}
113
+ key={pos}
114
+ onClick={() => {
115
+ if(pos === 'start') {
116
+ scroll('left')
117
+ } else if(pos === 'middle') {
118
+ scrollRef.current?.scrollTo({
119
+ left: scrollRef.current?.scrollWidth / 2,
120
+ behavior: 'smooth',
121
+ });
122
+ } else if(pos === 'end') {
123
+ scroll('right')
124
+ }
125
+ }}
126
+ style={{
127
+ width: '10px',
128
+ height: '10px',
129
+ background: scrollPosition === pos ? 'var(--primary)' : 'var(--borderColor)',
130
+ borderRadius: '50%',
131
+ transform: scrollPosition === pos ? 'scale(1.3)' : 'scale(0.9)',
132
+ transition: 'transform 0.3s ease, background 0.3s ease',
133
+ }}
134
+ />
135
+ ))}
136
+ </RowFlex>
67
137
  </div>
68
- }
69
- </RowFlex>
138
+ </div>
70
139
  );
71
140
  };
72
141
 
@@ -1,17 +1,19 @@
1
1
  import React from 'react';
2
2
  import 'quill/dist/quill.bubble.css';
3
+ import 'quill/dist/quill.snow.css';
3
4
  interface RichTextProps {
4
- /** The HTML content of the editor */
5
5
  value: string;
6
- showEmojis: boolean;
7
- /** Function triggered when the editor content changes */
8
6
  onChange: (content: string) => void;
9
- /** Placeholder shown when editor is empty */
7
+ showEmojis?: boolean;
10
8
  placeholder?: string;
11
- /** Optional ReactNode to be rendered after the emoji dropdown */
12
9
  afterEmoji?: React.ReactNode;
13
- /** Extra class names for container styling */
14
10
  funcss?: string;
11
+ /** Custom Quill modules (e.g., additional toolbar items) */
12
+ modules?: any;
13
+ /** Quill theme (e.g. 'bubble' | 'snow') */
14
+ theme?: 'bubble' | 'snow';
15
+ /** Optional fontFamily override */
16
+ fontFamily?: string;
15
17
  }
16
18
  declare const RichText: React.FC<RichTextProps>;
17
19
  export default RichText;
@@ -40,6 +40,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
40
40
  var react_1 = __importStar(require("react"));
41
41
  var react_quilljs_1 = require("react-quilljs");
42
42
  require("quill/dist/quill.bubble.css");
43
+ require("quill/dist/quill.snow.css"); // Add support for snow theme
43
44
  var md_1 = require("react-icons/md");
44
45
  var Emojis_1 = require("../../utils/Emojis");
45
46
  var Dropdown_1 = __importDefault(require("../drop/Dropdown"));
@@ -48,15 +49,17 @@ var ToolTip_1 = __importDefault(require("../tooltip/ToolTip"));
48
49
  var Circle_1 = __importDefault(require("../specials/Circle"));
49
50
  var Tip_1 = __importDefault(require("../tooltip/Tip"));
50
51
  var RichText = function (_a) {
51
- var value = _a.value, onChange = _a.onChange, _b = _a.placeholder, placeholder = _b === void 0 ? 'Write something...' : _b, afterEmoji = _a.afterEmoji, showEmojis = _a.showEmojis, _c = _a.funcss, funcss = _c === void 0 ? '' : _c;
52
- var _d = (0, react_quilljs_1.useQuill)({
53
- theme: 'bubble',
54
- placeholder: placeholder,
55
- modules: {
56
- toolbar: [['bold', 'italic', 'underline'], [{ list: 'bullet' }]],
57
- },
58
- }), quill = _d.quill, quillRef = _d.quillRef;
52
+ var value = _a.value, onChange = _a.onChange, _b = _a.showEmojis, showEmojis = _b === void 0 ? false : _b, _c = _a.placeholder, placeholder = _c === void 0 ? 'Write something...' : _c, afterEmoji = _a.afterEmoji, _d = _a.funcss, funcss = _d === void 0 ? '' : _d, modules = _a.modules, _e = _a.theme, theme = _e === void 0 ? 'bubble' : _e, fontFamily = _a.fontFamily;
59
53
  var savedRange = (0, react_1.useRef)(null);
54
+ // Default modules (basic toolbar)
55
+ var defaultModules = {
56
+ toolbar: [['bold', 'italic', 'underline'], [{ list: 'bullet' }]],
57
+ };
58
+ var _f = (0, react_quilljs_1.useQuill)({
59
+ theme: theme,
60
+ placeholder: placeholder,
61
+ modules: modules || defaultModules,
62
+ }), quill = _f.quill, quillRef = _f.quillRef;
60
63
  (0, react_1.useEffect)(function () {
61
64
  if (!quill)
62
65
  return;
@@ -89,24 +92,25 @@ var RichText = function (_a) {
89
92
  react_1.default.createElement("div", { className: "mb-2 mt-2 text-sm" }, title),
90
93
  react_1.default.createElement(RowFlex_1.default, { gap: 0.3 }, emojis.map(function (emoji, i) { return (react_1.default.createElement("span", { key: i, className: "h6 pointer", onClick: function () { return insertEmoji(emoji); } }, emoji)); })))); };
91
94
  return (react_1.default.createElement("div", { className: funcss },
92
- react_1.default.createElement("div", { id: "bubble-editor-container", className: "bubble-editor-container p-0" },
93
- react_1.default.createElement("div", { ref: quillRef, className: "bubble-editor" })),
94
- react_1.default.createElement(RowFlex_1.default, { gap: 0.5 },
95
- showEmojis &&
96
- react_1.default.createElement(Dropdown_1.default, { closableOnlyOutside: true, direction: "dropdown", openOnHover: false, button: react_1.default.createElement(ToolTip_1.default, null,
97
- react_1.default.createElement(Circle_1.default, { funcss: "bg border" },
98
- react_1.default.createElement(md_1.MdOutlineEmojiEmotions, null)),
99
- react_1.default.createElement(Tip_1.default, { tip: "top", animation: "ScaleUp", duration: 0.5, content: "Emojis" })), items: [
100
- {
101
- label: (react_1.default.createElement("div", { className: "w-200 h-300", style: { overflowY: 'auto' } },
102
- renderEmojiSection('❤️ Smileys & People', Emojis_1.AllEmojis.Smiley),
103
- renderEmojiSection('👍 Gestures & Body Parts', Emojis_1.AllEmojis.Gesture),
104
- renderEmojiSection('🔥 Symbols & Expressions', Emojis_1.AllEmojis.Symbols),
105
- renderEmojiSection('🚀 Travel, Objects & Activities', Emojis_1.AllEmojis.Travel),
106
- renderEmojiSection('👨‍👩‍👧‍👦 People & Professions', Emojis_1.AllEmojis.People),
107
- renderEmojiSection('🐶 Animals & Nature', Emojis_1.AllEmojis.Animals))),
108
- },
109
- ] }),
110
- afterEmoji || null)));
95
+ react_1.default.createElement("div", { id: "editor-container", className: "bubble-editor-container p-0" },
96
+ react_1.default.createElement("div", { ref: quillRef, className: theme === 'bubble' ? "bubble-editor " : "snow-editor ", style: {
97
+ fontFamily: fontFamily || 'inherit',
98
+ } })),
99
+ (showEmojis || afterEmoji) && (react_1.default.createElement(RowFlex_1.default, { gap: 0.5, funcss: 'mt-1' },
100
+ showEmojis && (react_1.default.createElement(Dropdown_1.default, { closableOnlyOutside: true, direction: "dropdown", openOnHover: false, button: react_1.default.createElement(ToolTip_1.default, null,
101
+ react_1.default.createElement(Circle_1.default, { funcss: "bg border" },
102
+ react_1.default.createElement(md_1.MdOutlineEmojiEmotions, null)),
103
+ react_1.default.createElement(Tip_1.default, { tip: "top", animation: "ScaleUp", duration: 0.5, content: "Emojis" })), items: [
104
+ {
105
+ label: (react_1.default.createElement("div", { className: "w-200 h-300", style: { overflowY: 'auto' } },
106
+ renderEmojiSection('❤️ Smileys & People', Emojis_1.AllEmojis.Smiley),
107
+ renderEmojiSection('👍 Gestures & Body Parts', Emojis_1.AllEmojis.Gesture),
108
+ renderEmojiSection('🔥 Symbols & Expressions', Emojis_1.AllEmojis.Symbols),
109
+ renderEmojiSection('🚀 Travel, Objects & Activities', Emojis_1.AllEmojis.Travel),
110
+ renderEmojiSection('👨‍👩‍👧‍👦 People & Professions', Emojis_1.AllEmojis.People),
111
+ renderEmojiSection('🐶 Animals & Nature', Emojis_1.AllEmojis.Animals))),
112
+ },
113
+ ] })),
114
+ afterEmoji))));
111
115
  };
112
116
  exports.default = RichText;
@@ -2,6 +2,7 @@
2
2
  import React, { useEffect, useRef } from 'react';
3
3
  import { useQuill } from 'react-quilljs';
4
4
  import 'quill/dist/quill.bubble.css';
5
+ import 'quill/dist/quill.snow.css'; // Add support for snow theme
5
6
  import { MdOutlineEmojiEmotions } from 'react-icons/md';
6
7
  import { AllEmojis } from '../../utils/Emojis';
7
8
  import Dropdown from '../drop/Dropdown';
@@ -10,47 +11,53 @@ import ToolTip from '../tooltip/ToolTip';
10
11
  import Circle from '../specials/Circle';
11
12
  import Tip from '../tooltip/Tip';
12
13
 
13
- // ✅ Define RangeStatic locally since Quill does not export it
14
14
  type RangeStatic = {
15
15
  index: number;
16
16
  length: number;
17
17
  };
18
18
 
19
19
  interface RichTextProps {
20
- /** The HTML content of the editor */
21
20
  value: string;
22
- showEmojis: boolean;
23
- /** Function triggered when the editor content changes */
24
21
  onChange: (content: string) => void;
25
-
26
- /** Placeholder shown when editor is empty */
22
+ showEmojis?: boolean;
27
23
  placeholder?: string;
28
-
29
- /** Optional ReactNode to be rendered after the emoji dropdown */
30
24
  afterEmoji?: React.ReactNode;
31
-
32
- /** Extra class names for container styling */
33
25
  funcss?: string;
26
+
27
+ /** Custom Quill modules (e.g., additional toolbar items) */
28
+ modules?: any;
29
+
30
+ /** Quill theme (e.g. 'bubble' | 'snow') */
31
+ theme?: 'bubble' | 'snow';
32
+
33
+ /** Optional fontFamily override */
34
+ fontFamily?: string;
34
35
  }
35
36
 
36
37
  const RichText: React.FC<RichTextProps> = ({
37
38
  value,
38
39
  onChange,
40
+ showEmojis = false,
39
41
  placeholder = 'Write something...',
40
42
  afterEmoji,
41
- showEmojis,
42
43
  funcss = '',
44
+ modules,
45
+ theme = 'bubble',
46
+ fontFamily,
43
47
  }) => {
48
+ const savedRange = useRef<RangeStatic | null>(null);
49
+
50
+ // Default modules (basic toolbar)
51
+ const defaultModules = {
52
+ toolbar: [['bold', 'italic', 'underline'], [{ list: 'bullet' }]],
53
+ };
54
+
44
55
  const { quill, quillRef } = useQuill({
45
- theme: 'bubble',
56
+ theme,
46
57
  placeholder,
47
- modules: {
48
- toolbar: [['bold', 'italic', 'underline'], [{ list: 'bullet' }]],
49
- },
58
+ modules: modules || defaultModules,
50
59
  });
51
60
 
52
- const savedRange = useRef<RangeStatic | null>(null);
53
-
54
61
  useEffect(() => {
55
62
  if (!quill) return;
56
63
 
@@ -98,46 +105,50 @@ const RichText: React.FC<RichTextProps> = ({
98
105
  );
99
106
 
100
107
  return (
101
- <div className={funcss} >
102
- {/* Editor Container */}
103
- <div id={"bubble-editor-container"} className="bubble-editor-container p-0">
104
- <div ref={quillRef} className="bubble-editor" />
108
+ <div
109
+ className={funcss}
110
+ >
111
+ <div id="editor-container" className="bubble-editor-container p-0">
112
+ <div ref={quillRef} className={theme === 'bubble' ? "bubble-editor " : "snow-editor "}
113
+ style={{
114
+ fontFamily: fontFamily || 'inherit',
115
+ }}/>
105
116
  </div>
106
117
 
107
- {/* Emoji Dropdown */}
108
- <RowFlex gap={0.5}>
109
- {
110
- showEmojis &&
111
- <Dropdown
112
- closableOnlyOutside
113
- direction="dropdown"
114
- openOnHover={false}
115
- button={
116
- <ToolTip>
117
- <Circle funcss="bg border">
118
- <MdOutlineEmojiEmotions />
119
- </Circle>
120
- <Tip tip="top" animation="ScaleUp" duration={0.5} content="Emojis" />
121
- </ToolTip>
122
- }
123
- items={[
124
- {
125
- label: (
126
- <div className="w-200 h-300" style={{ overflowY: 'auto' }}>
127
- {renderEmojiSection('❤️ Smileys & People', AllEmojis.Smiley)}
128
- {renderEmojiSection('👍 Gestures & Body Parts', AllEmojis.Gesture)}
129
- {renderEmojiSection('🔥 Symbols & Expressions', AllEmojis.Symbols)}
130
- {renderEmojiSection('🚀 Travel, Objects & Activities', AllEmojis.Travel)}
131
- {renderEmojiSection('👨‍👩‍👧‍👦 People & Professions', AllEmojis.People)}
132
- {renderEmojiSection('🐶 Animals & Nature', AllEmojis.Animals)}
133
- </div>
134
- ),
135
- },
136
- ]}
137
- />
138
- }
139
- {afterEmoji || null}
140
- </RowFlex>
118
+ {(showEmojis || afterEmoji) && (
119
+ <RowFlex gap={0.5} funcss='mt-1'>
120
+ {showEmojis && (
121
+ <Dropdown
122
+ closableOnlyOutside
123
+ direction="dropdown"
124
+ openOnHover={false}
125
+ button={
126
+ <ToolTip>
127
+ <Circle funcss="bg border">
128
+ <MdOutlineEmojiEmotions />
129
+ </Circle>
130
+ <Tip tip="top" animation="ScaleUp" duration={0.5} content="Emojis" />
131
+ </ToolTip>
132
+ }
133
+ items={[
134
+ {
135
+ label: (
136
+ <div className="w-200 h-300" style={{ overflowY: 'auto' }}>
137
+ {renderEmojiSection('❤️ Smileys & People', AllEmojis.Smiley)}
138
+ {renderEmojiSection('👍 Gestures & Body Parts', AllEmojis.Gesture)}
139
+ {renderEmojiSection('🔥 Symbols & Expressions', AllEmojis.Symbols)}
140
+ {renderEmojiSection('🚀 Travel, Objects & Activities', AllEmojis.Travel)}
141
+ {renderEmojiSection('👨‍👩‍👧‍👦 People & Professions', AllEmojis.People)}
142
+ {renderEmojiSection('🐶 Animals & Nature', AllEmojis.Animals)}
143
+ </div>
144
+ ),
145
+ },
146
+ ]}
147
+ />
148
+ )}
149
+ {afterEmoji}
150
+ </RowFlex>
151
+ )}
141
152
  </div>
142
153
  );
143
154
  };
@@ -0,0 +1,14 @@
1
+ import React from 'react';
2
+ type RangeSliderProps = {
3
+ min?: number;
4
+ max?: number;
5
+ step?: number;
6
+ value: number;
7
+ height?: number;
8
+ onChange: (value: number) => void;
9
+ label?: string;
10
+ showTooltip?: boolean;
11
+ funcss?: string;
12
+ };
13
+ declare const Slider: React.FC<RangeSliderProps>;
14
+ export default Slider;
@@ -0,0 +1,57 @@
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 getCssVariable_1 = require("../../utils/getCssVariable");
39
+ var Slider = function (_a) {
40
+ var _b = _a.min, min = _b === void 0 ? 0 : _b, _c = _a.max, max = _c === void 0 ? 100 : _c, _d = _a.step, step = _d === void 0 ? 1 : _d, value = _a.value, onChange = _a.onChange, _e = _a.height, height = _e === void 0 ? 6 : _e, label = _a.label, _f = _a.showTooltip, showTooltip = _f === void 0 ? true : _f, _g = _a.funcss, funcss = _g === void 0 ? '' : _g;
41
+ var _h = (0, react_1.useState)(false), isDragging = _h[0], setIsDragging = _h[1];
42
+ var handleChange = function (e) {
43
+ onChange(Number(e.target.value));
44
+ };
45
+ var percent = ((value - min) / (max - min)) * 100;
46
+ var pColor = (0, getCssVariable_1.getCssVariableValue)("primary");
47
+ return (react_1.default.createElement("div", { className: "range-slider-container ".concat(funcss) },
48
+ react_1.default.createElement("div", { className: "range-wrapper" },
49
+ showTooltip && (react_1.default.createElement("div", { className: "range-tooltip ".concat(isDragging ? 'visible' : ''), style: { left: "calc(".concat(percent, "% - 20px)") } },
50
+ value,
51
+ "%")),
52
+ react_1.default.createElement("input", { type: "range", min: min, max: max, step: step, value: value, onChange: handleChange, onMouseDown: function () { return setIsDragging(true); }, onMouseUp: function () { return setIsDragging(false); }, onTouchStart: function () { return setIsDragging(true); }, onTouchEnd: function () { return setIsDragging(false); }, className: "range-slider", style: {
53
+ background: "linear-gradient(to right, ".concat(pColor, " 0%, ").concat(pColor, " ").concat(percent, "%, var(--lighter) ").concat(percent, "%, var(--lighter) 100%)"),
54
+ height: "".concat(height, "px"),
55
+ } }))));
56
+ };
57
+ exports.default = Slider;