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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "forstok-ui-lib",
3
- "version": "8.6.0",
3
+ "version": "8.6.2",
4
4
  "description": "Forstok UI Components Library",
5
5
  "path": "dist",
6
6
  "main": "dist/index.js",
@@ -1,28 +1,45 @@
1
- import { Emoji, EmojiPicker } from 'frimousse';
1
+ import { type CSSProperties } from "react";
2
2
 
3
- import ButtonComponent from '../button';
4
- import DropDownComponent from '../dropdown';
5
- import IconComponent from '../icon';
3
+ import { Emoji, EmojiPicker } from "frimousse";
6
4
 
7
- import { evForceCloseDropdown } from '../../assets/javascripts/function';
8
- import { EmojiContainer } from './styles';
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 = ({ $mode, evChange } : { $mode?: 'textarea', evChange: (emoji: string) => void }) => {
12
- const onChange = ({emoji}: Emoji) => {
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 $mode={$mode}>
19
- <DropDownComponent $internalWidth='314px' $bottom='40px' $openPosition='left' $placement='top'>
20
- <div aria-label='control'>
21
- <ButtonComponent $mode='clearL' title='Choose Emoticon'>
22
- <IconComponent $name='emoji' $width='12px' />
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='body'>
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 { type ChangeEvent, type FocusEvent, type TextareaHTMLAttributes, useEffect, useRef, useState } from 'react';
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 '../emoji';
11
+ import EmojiComponent from "../emoji";
4
12
 
5
- import { TextAreaContainer } from './styles';
13
+ import { TextAreaContainer } from "./styles";
6
14
 
7
- import { TState } from '../../typeds';
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 = ({ $isError, reset, setReset, isForceUpdate, setForceUpdate, evChange, evBlur, isField, evChangeCustom, $isEmoji,...props }: TTextArea) => {
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>(defaultValue?.toString() ?? '')
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: 'relative' }}>
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
- {$isEmoji ? ( <EmojiComponent $mode='textarea' evChange={evChangeEmoji} /> ) : null}
88
- </div>
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 $mode="textarea" evChange={evChangeEmoji} />
49
+ <EmojiComponent
50
+ $mode="textarea"
51
+ evChange={evChangeEmoji}
52
+ {...($emojiStyles && { $emojiStyles: $emojiStyles })}
53
+ />
48
54
  ) : null}
49
55
  </div>
50
56
  );