forstok-ui-lib 8.6.0 → 8.6.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +6 -3
- package/dist/index.js +21 -21
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +22 -22
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
- package/src/components/emoji/index.tsx +34 -17
- package/src/components/textarea/index.tsx +80 -49
- package/src/components/textarea/ref.tsx +8 -2
package/package.json
CHANGED
|
@@ -1,28 +1,45 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { type CSSProperties } from "react";
|
|
2
2
|
|
|
3
|
-
import
|
|
4
|
-
import DropDownComponent from '../dropdown';
|
|
5
|
-
import IconComponent from '../icon';
|
|
3
|
+
import { Emoji, EmojiPicker } from "frimousse";
|
|
6
4
|
|
|
7
|
-
import
|
|
8
|
-
import
|
|
5
|
+
import ButtonComponent from "../button";
|
|
6
|
+
import DropDownComponent from "../dropdown";
|
|
7
|
+
import IconComponent from "../icon";
|
|
9
8
|
|
|
9
|
+
import { evForceCloseDropdown } from "../../assets/javascripts/function";
|
|
10
|
+
import { EmojiContainer } from "./styles";
|
|
10
11
|
|
|
11
|
-
const EmojiComponent = ({
|
|
12
|
-
|
|
12
|
+
const EmojiComponent = ({
|
|
13
|
+
$mode,
|
|
14
|
+
evChange,
|
|
15
|
+
$emojiStyles,
|
|
16
|
+
}: {
|
|
17
|
+
$mode?: "textarea";
|
|
18
|
+
evChange: (emoji: string) => void;
|
|
19
|
+
$emojiStyles?: CSSProperties;
|
|
20
|
+
}) => {
|
|
21
|
+
const onChange = ({ emoji }: Emoji) => {
|
|
13
22
|
evChange(emoji);
|
|
14
23
|
evForceCloseDropdown();
|
|
15
|
-
}
|
|
24
|
+
};
|
|
16
25
|
|
|
17
26
|
return (
|
|
18
|
-
<EmojiContainer
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
27
|
+
<EmojiContainer
|
|
28
|
+
$mode={$mode}
|
|
29
|
+
{...($emojiStyles && { style: $emojiStyles })}
|
|
30
|
+
>
|
|
31
|
+
<DropDownComponent
|
|
32
|
+
$internalWidth="314px"
|
|
33
|
+
$bottom="40px"
|
|
34
|
+
$openPosition="left"
|
|
35
|
+
$placement="top"
|
|
36
|
+
>
|
|
37
|
+
<div aria-label="control">
|
|
38
|
+
<ButtonComponent $mode="clearL" title="Choose Emoticon">
|
|
39
|
+
<IconComponent $name="emoji" $width="12px" />
|
|
23
40
|
</ButtonComponent>
|
|
24
41
|
</div>
|
|
25
|
-
<div aria-label=
|
|
42
|
+
<div aria-label="body">
|
|
26
43
|
<EmojiPicker.Root onEmojiSelect={onChange}>
|
|
27
44
|
<EmojiPicker.Search />
|
|
28
45
|
<EmojiPicker.Viewport>
|
|
@@ -34,7 +51,7 @@ const EmojiComponent = ({ $mode, evChange } : { $mode?: 'textarea', evChange: (e
|
|
|
34
51
|
</div>
|
|
35
52
|
</DropDownComponent>
|
|
36
53
|
</EmojiContainer>
|
|
37
|
-
)
|
|
54
|
+
);
|
|
38
55
|
};
|
|
39
56
|
|
|
40
|
-
export default EmojiComponent;
|
|
57
|
+
export default EmojiComponent;
|
|
@@ -1,53 +1,77 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
type ChangeEvent,
|
|
3
|
+
type FocusEvent,
|
|
4
|
+
type TextareaHTMLAttributes,
|
|
5
|
+
type CSSProperties,
|
|
6
|
+
useEffect,
|
|
7
|
+
useRef,
|
|
8
|
+
useState,
|
|
9
|
+
} from "react";
|
|
2
10
|
|
|
3
|
-
import EmojiComponent from
|
|
11
|
+
import EmojiComponent from "../emoji";
|
|
4
12
|
|
|
5
|
-
import { TextAreaContainer } from
|
|
13
|
+
import { TextAreaContainer } from "./styles";
|
|
6
14
|
|
|
7
|
-
import { TState } from
|
|
15
|
+
import { TState } from "../../typeds";
|
|
8
16
|
|
|
9
17
|
type TTextArea = TextareaHTMLAttributes<HTMLTextAreaElement> & {
|
|
10
|
-
$isError?: boolean
|
|
11
|
-
reset?: boolean
|
|
12
|
-
setReset?: TState<boolean
|
|
13
|
-
isForceUpdate?: boolean
|
|
14
|
-
setForceUpdate?: TState<boolean | undefined
|
|
15
|
-
evChange?: (e: ChangeEvent<HTMLTextAreaElement>) => void
|
|
16
|
-
evBlur?: (e: FocusEvent<HTMLTextAreaElement>) => void
|
|
17
|
-
isField?: boolean
|
|
18
|
-
evChangeCustom?: (name: string, value: any) => void
|
|
19
|
-
$isEmoji?: boolean
|
|
20
|
-
|
|
18
|
+
$isError?: boolean;
|
|
19
|
+
reset?: boolean;
|
|
20
|
+
setReset?: TState<boolean>;
|
|
21
|
+
isForceUpdate?: boolean;
|
|
22
|
+
setForceUpdate?: TState<boolean | undefined>;
|
|
23
|
+
evChange?: (e: ChangeEvent<HTMLTextAreaElement>) => void;
|
|
24
|
+
evBlur?: (e: FocusEvent<HTMLTextAreaElement>) => void;
|
|
25
|
+
isField?: boolean;
|
|
26
|
+
evChangeCustom?: (name: string, value: any) => void;
|
|
27
|
+
$isEmoji?: boolean;
|
|
28
|
+
$emojiStyles?: CSSProperties;
|
|
29
|
+
};
|
|
21
30
|
|
|
22
|
-
const TextAreaComponent = ({
|
|
31
|
+
const TextAreaComponent = ({
|
|
32
|
+
$isError,
|
|
33
|
+
reset,
|
|
34
|
+
setReset,
|
|
35
|
+
isForceUpdate,
|
|
36
|
+
setForceUpdate,
|
|
37
|
+
evChange,
|
|
38
|
+
evBlur,
|
|
39
|
+
isField,
|
|
40
|
+
evChangeCustom,
|
|
41
|
+
$isEmoji,
|
|
42
|
+
$emojiStyles,
|
|
43
|
+
...props
|
|
44
|
+
}: TTextArea) => {
|
|
23
45
|
const innerRef = useRef<HTMLTextAreaElement>(null);
|
|
24
46
|
|
|
25
|
-
const { name, defaultValue } = props
|
|
47
|
+
const { name, defaultValue } = props;
|
|
26
48
|
|
|
27
|
-
const [valueInput, setValueInput] = useState<string>(
|
|
49
|
+
const [valueInput, setValueInput] = useState<string>(
|
|
50
|
+
defaultValue?.toString() ?? "",
|
|
51
|
+
);
|
|
28
52
|
|
|
29
53
|
useEffect(() => {
|
|
30
54
|
if (isForceUpdate) {
|
|
31
|
-
setValueInput(defaultValue?.toString() ??
|
|
32
|
-
setForceUpdate && setForceUpdate(false)
|
|
55
|
+
setValueInput(defaultValue?.toString() ?? "");
|
|
56
|
+
setForceUpdate && setForceUpdate(false);
|
|
33
57
|
}
|
|
34
58
|
if (reset) {
|
|
35
|
-
setValueInput(
|
|
36
|
-
setReset && setReset(false)
|
|
59
|
+
setValueInput("");
|
|
60
|
+
setReset && setReset(false);
|
|
37
61
|
}
|
|
38
|
-
}, [isForceUpdate, setForceUpdate, reset, setReset, defaultValue])
|
|
62
|
+
}, [isForceUpdate, setForceUpdate, reset, setReset, defaultValue]);
|
|
39
63
|
|
|
40
64
|
const handleChange = (e: ChangeEvent<HTMLTextAreaElement>) => {
|
|
41
|
-
const _value = e.target.value
|
|
42
|
-
setValueInput(_value)
|
|
43
|
-
}
|
|
65
|
+
const _value = e.target.value;
|
|
66
|
+
setValueInput(_value);
|
|
67
|
+
};
|
|
44
68
|
|
|
45
69
|
const _evBlur = (e: FocusEvent<HTMLTextAreaElement>) => {
|
|
46
70
|
evBlur && evBlur(e);
|
|
47
71
|
if (isField && name) {
|
|
48
|
-
evChangeCustom && evChangeCustom(name, e.target.value)
|
|
72
|
+
evChangeCustom && evChangeCustom(name, e.target.value);
|
|
49
73
|
}
|
|
50
|
-
}
|
|
74
|
+
};
|
|
51
75
|
|
|
52
76
|
const evChangeEmoji = (emoji: string) => {
|
|
53
77
|
const uValue = valueInput + emoji;
|
|
@@ -58,35 +82,42 @@ const TextAreaComponent = ({ $isError, reset, setReset, isForceUpdate, setForceU
|
|
|
58
82
|
if (innerRef.current) {
|
|
59
83
|
const event = {
|
|
60
84
|
target: innerRef.current,
|
|
61
|
-
currentTarget: innerRef.current
|
|
85
|
+
currentTarget: innerRef.current,
|
|
62
86
|
} as unknown as ChangeEvent<HTMLTextAreaElement>;
|
|
63
87
|
|
|
64
88
|
innerRef.current.value = uValue;
|
|
65
89
|
evChange && evChange(event);
|
|
66
90
|
}
|
|
67
|
-
}
|
|
91
|
+
};
|
|
68
92
|
|
|
69
|
-
let parseProps = {...props}
|
|
70
|
-
delete parseProps.defaultValue
|
|
93
|
+
let parseProps = { ...props };
|
|
94
|
+
delete parseProps.defaultValue;
|
|
71
95
|
|
|
72
96
|
return (
|
|
73
|
-
<div style={{ position:
|
|
74
|
-
<TextAreaContainer
|
|
97
|
+
<div style={{ position: "relative" }}>
|
|
98
|
+
<TextAreaContainer
|
|
75
99
|
ref={innerRef}
|
|
76
|
-
$isError={$isError}
|
|
100
|
+
$isError={$isError}
|
|
77
101
|
value={valueInput}
|
|
78
|
-
onChange={(e: ChangeEvent<HTMLTextAreaElement>) => {
|
|
79
|
-
handleChange(e)
|
|
80
|
-
evChange && evChange(e)
|
|
81
|
-
}}
|
|
82
|
-
onBlur={(e: FocusEvent<HTMLTextAreaElement>) => {
|
|
83
|
-
handleChange(e)
|
|
84
|
-
_evBlur(e)
|
|
85
|
-
}}
|
|
86
|
-
{...parseProps}
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
102
|
+
onChange={(e: ChangeEvent<HTMLTextAreaElement>) => {
|
|
103
|
+
handleChange(e);
|
|
104
|
+
evChange && evChange(e);
|
|
105
|
+
}}
|
|
106
|
+
onBlur={(e: FocusEvent<HTMLTextAreaElement>) => {
|
|
107
|
+
handleChange(e);
|
|
108
|
+
_evBlur(e);
|
|
109
|
+
}}
|
|
110
|
+
{...parseProps}
|
|
111
|
+
/>
|
|
112
|
+
{$isEmoji ? (
|
|
113
|
+
<EmojiComponent
|
|
114
|
+
$mode="textarea"
|
|
115
|
+
evChange={evChangeEmoji}
|
|
116
|
+
{...($emojiStyles && { style: $emojiStyles })}
|
|
117
|
+
/>
|
|
118
|
+
) : null}
|
|
119
|
+
</div>
|
|
120
|
+
);
|
|
121
|
+
};
|
|
91
122
|
|
|
92
|
-
export default TextAreaComponent
|
|
123
|
+
export default TextAreaComponent;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
type TextareaHTMLAttributes,
|
|
3
|
+
type CSSProperties,
|
|
3
4
|
forwardRef,
|
|
4
5
|
useImperativeHandle,
|
|
5
6
|
useRef,
|
|
@@ -14,8 +15,9 @@ const TextAreaRefComponent = forwardRef<
|
|
|
14
15
|
TextareaHTMLAttributes<HTMLTextAreaElement> & {
|
|
15
16
|
$isError?: boolean;
|
|
16
17
|
$isEmoji?: boolean;
|
|
18
|
+
$emojiStyles?: CSSProperties;
|
|
17
19
|
}
|
|
18
|
-
>(({ $isError, $isEmoji, ...props }, ref) => {
|
|
20
|
+
>(({ $isError, $isEmoji, $emojiStyles, ...props }, ref) => {
|
|
19
21
|
const innerRef = useRef<HTMLTextAreaElement>(null);
|
|
20
22
|
|
|
21
23
|
useImperativeHandle(ref, () => innerRef.current as HTMLTextAreaElement);
|
|
@@ -44,7 +46,11 @@ const TextAreaRefComponent = forwardRef<
|
|
|
44
46
|
<div style={{ position: "relative" }}>
|
|
45
47
|
<TextAreaContainer ref={innerRef} $isError={$isError} {...props} />
|
|
46
48
|
{$isEmoji ? (
|
|
47
|
-
<EmojiComponent
|
|
49
|
+
<EmojiComponent
|
|
50
|
+
$mode="textarea"
|
|
51
|
+
evChange={evChangeEmoji}
|
|
52
|
+
{...($emojiStyles && { $emojiStyles: $emojiStyles })}
|
|
53
|
+
/>
|
|
48
54
|
) : null}
|
|
49
55
|
</div>
|
|
50
56
|
);
|