@qoretechnologies/reqore 0.30.6 → 0.30.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.
Files changed (215) hide show
  1. package/CODE_OF_CONDUCT.md +104 -104
  2. package/CONTRIBUTING.MD +78 -78
  3. package/LICENSE +1 -1
  4. package/README.md +1 -1
  5. package/SECURITY.md +5 -5
  6. package/__tests__/collection.test.tsx +1 -1
  7. package/__tests__/{control_group.text.tsx → control_group.test.tsx} +4 -2
  8. package/__tests__/modal.test.tsx +74 -2
  9. package/__tests__/panel.test.tsx +96 -24
  10. package/__tests__/popover.test.tsx +24 -2
  11. package/__tests__/tabs.test.tsx +75 -0
  12. package/dist/components/Button/index.d.ts +6 -1
  13. package/dist/components/Button/index.d.ts.map +1 -1
  14. package/dist/components/Button/index.js +30 -20
  15. package/dist/components/Button/index.js.map +1 -1
  16. package/dist/components/Checkbox/index.d.ts.map +1 -1
  17. package/dist/components/Checkbox/index.js +6 -3
  18. package/dist/components/Checkbox/index.js.map +1 -1
  19. package/dist/components/Collection/index.d.ts +7 -2
  20. package/dist/components/Collection/index.d.ts.map +1 -1
  21. package/dist/components/Collection/index.js +57 -53
  22. package/dist/components/Collection/index.js.map +1 -1
  23. package/dist/components/Collection/item.d.ts +5 -5
  24. package/dist/components/Collection/item.d.ts.map +1 -1
  25. package/dist/components/Collection/item.js +15 -4
  26. package/dist/components/Collection/item.js.map +1 -1
  27. package/dist/components/Columns/column.d.ts.map +1 -1
  28. package/dist/components/Columns/column.js +1 -1
  29. package/dist/components/Columns/column.js.map +1 -1
  30. package/dist/components/ControlGroup/index.d.ts +21 -4
  31. package/dist/components/ControlGroup/index.d.ts.map +1 -1
  32. package/dist/components/ControlGroup/index.js +250 -55
  33. package/dist/components/ControlGroup/index.js.map +1 -1
  34. package/dist/components/Drawer/index.d.ts +2 -2
  35. package/dist/components/Drawer/index.d.ts.map +1 -1
  36. package/dist/components/Drawer/index.js +27 -16
  37. package/dist/components/Drawer/index.js.map +1 -1
  38. package/dist/components/Dropdown/index.d.ts +1 -0
  39. package/dist/components/Dropdown/index.d.ts.map +1 -1
  40. package/dist/components/Dropdown/index.js +2 -2
  41. package/dist/components/Dropdown/index.js.map +1 -1
  42. package/dist/components/Effect/index.d.ts +1 -1
  43. package/dist/components/Effect/index.d.ts.map +1 -1
  44. package/dist/components/Effect/index.js +7 -6
  45. package/dist/components/Effect/index.js.map +1 -1
  46. package/dist/components/Icon/index.d.ts +5 -6
  47. package/dist/components/Icon/index.d.ts.map +1 -1
  48. package/dist/components/Icon/index.js +14 -7
  49. package/dist/components/Icon/index.js.map +1 -1
  50. package/dist/components/Input/index.d.ts +2 -0
  51. package/dist/components/Input/index.d.ts.map +1 -1
  52. package/dist/components/Input/index.js +10 -4
  53. package/dist/components/Input/index.js.map +1 -1
  54. package/dist/components/InternalPopover/index.d.ts.map +1 -1
  55. package/dist/components/InternalPopover/index.js +12 -10
  56. package/dist/components/InternalPopover/index.js.map +1 -1
  57. package/dist/components/Menu/index.d.ts.map +1 -1
  58. package/dist/components/Menu/index.js +1 -1
  59. package/dist/components/Menu/index.js.map +1 -1
  60. package/dist/components/Message/index.d.ts +2 -0
  61. package/dist/components/Message/index.d.ts.map +1 -1
  62. package/dist/components/Message/index.js +2 -2
  63. package/dist/components/Message/index.js.map +1 -1
  64. package/dist/components/MultiSelect/index.d.ts +1 -1
  65. package/dist/components/MultiSelect/index.d.ts.map +1 -1
  66. package/dist/components/MultiSelect/index.js +10 -10
  67. package/dist/components/MultiSelect/index.js.map +1 -1
  68. package/dist/components/Panel/index.d.ts +13 -6
  69. package/dist/components/Panel/index.d.ts.map +1 -1
  70. package/dist/components/Panel/index.js +78 -44
  71. package/dist/components/Panel/index.js.map +1 -1
  72. package/dist/components/Popover/index.d.ts +1 -2
  73. package/dist/components/Popover/index.d.ts.map +1 -1
  74. package/dist/components/Popover/index.js +2 -2
  75. package/dist/components/Popover/index.js.map +1 -1
  76. package/dist/components/Spacer/index.d.ts +2 -0
  77. package/dist/components/Spacer/index.d.ts.map +1 -1
  78. package/dist/components/Spacer/index.js +29 -7
  79. package/dist/components/Spacer/index.js.map +1 -1
  80. package/dist/components/Table/header.js +2 -2
  81. package/dist/components/Table/header.js.map +1 -1
  82. package/dist/components/Table/headerCell.js +2 -2
  83. package/dist/components/Table/headerCell.js.map +1 -1
  84. package/dist/components/Table/helpers.d.ts +3 -2
  85. package/dist/components/Table/helpers.d.ts.map +1 -1
  86. package/dist/components/Table/helpers.js +6 -3
  87. package/dist/components/Table/helpers.js.map +1 -1
  88. package/dist/components/Table/index.d.ts +1 -0
  89. package/dist/components/Table/index.d.ts.map +1 -1
  90. package/dist/components/Table/index.js.map +1 -1
  91. package/dist/components/Table/row.d.ts +0 -5
  92. package/dist/components/Table/row.d.ts.map +1 -1
  93. package/dist/components/Table/row.js +3 -7
  94. package/dist/components/Table/row.js.map +1 -1
  95. package/dist/components/Tabs/content.d.ts +3 -1
  96. package/dist/components/Tabs/content.d.ts.map +1 -1
  97. package/dist/components/Tabs/content.js +8 -3
  98. package/dist/components/Tabs/content.js.map +1 -1
  99. package/dist/components/Tabs/index.d.ts +4 -1
  100. package/dist/components/Tabs/index.d.ts.map +1 -1
  101. package/dist/components/Tabs/index.js +12 -4
  102. package/dist/components/Tabs/index.js.map +1 -1
  103. package/dist/components/Tabs/item.d.ts +1 -0
  104. package/dist/components/Tabs/item.d.ts.map +1 -1
  105. package/dist/components/Tabs/item.js +7 -7
  106. package/dist/components/Tabs/item.js.map +1 -1
  107. package/dist/components/Tabs/list.d.ts +1 -1
  108. package/dist/components/Tabs/list.d.ts.map +1 -1
  109. package/dist/components/Tabs/list.js +7 -6
  110. package/dist/components/Tabs/list.js.map +1 -1
  111. package/dist/components/Tag/group.d.ts +2 -2
  112. package/dist/components/Tag/group.d.ts.map +1 -1
  113. package/dist/components/Tag/group.js +7 -8
  114. package/dist/components/Tag/group.js.map +1 -1
  115. package/dist/components/Tag/index.d.ts +6 -2
  116. package/dist/components/Tag/index.d.ts.map +1 -1
  117. package/dist/components/Tag/index.js +24 -12
  118. package/dist/components/Tag/index.js.map +1 -1
  119. package/dist/components/Tree/index.js +1 -1
  120. package/dist/components/Tree/index.js.map +1 -1
  121. package/dist/constants/animations.js +1 -1
  122. package/dist/constants/sizes.js +10 -10
  123. package/dist/constants/sizes.js.map +1 -1
  124. package/dist/containers/PopoverProvider.d.ts.map +1 -1
  125. package/dist/containers/PopoverProvider.js +10 -8
  126. package/dist/containers/PopoverProvider.js.map +1 -1
  127. package/dist/containers/ReqoreProvider.d.ts.map +1 -1
  128. package/dist/containers/ReqoreProvider.js +4 -2
  129. package/dist/containers/ReqoreProvider.js.map +1 -1
  130. package/dist/containers/UIProvider.d.ts +7 -0
  131. package/dist/containers/UIProvider.d.ts.map +1 -1
  132. package/dist/containers/UIProvider.js.map +1 -1
  133. package/dist/context/ReqoreContext.d.ts +2 -0
  134. package/dist/context/ReqoreContext.d.ts.map +1 -1
  135. package/dist/context/ReqoreContext.js.map +1 -1
  136. package/dist/helpers/colors.d.ts +1 -1
  137. package/dist/helpers/colors.d.ts.map +1 -1
  138. package/dist/helpers/colors.js +6 -2
  139. package/dist/helpers/colors.js.map +1 -1
  140. package/dist/helpers/utils.d.ts +3 -0
  141. package/dist/helpers/utils.d.ts.map +1 -1
  142. package/dist/helpers/utils.js +16 -1
  143. package/dist/helpers/utils.js.map +1 -1
  144. package/dist/hooks/useLatestZIndex.js +2 -2
  145. package/dist/hooks/useLatestZIndex.js.map +1 -1
  146. package/dist/hooks/usePopover.d.ts +1 -0
  147. package/dist/hooks/usePopover.d.ts.map +1 -1
  148. package/dist/hooks/usePopover.js +8 -6
  149. package/dist/hooks/usePopover.js.map +1 -1
  150. package/dist/styles.d.ts +1 -0
  151. package/dist/styles.d.ts.map +1 -1
  152. package/dist/styles.js +6 -5
  153. package/dist/styles.js.map +1 -1
  154. package/dist/types/global.d.ts +26 -0
  155. package/dist/types/global.d.ts.map +1 -1
  156. package/package.json +1 -1
  157. package/src/components/Button/index.tsx +79 -34
  158. package/src/components/Checkbox/index.tsx +3 -2
  159. package/src/components/Collection/index.tsx +93 -60
  160. package/src/components/Collection/item.tsx +29 -9
  161. package/src/components/Columns/column.tsx +1 -0
  162. package/src/components/ControlGroup/index.tsx +449 -104
  163. package/src/components/Drawer/index.tsx +28 -27
  164. package/src/components/Dropdown/index.tsx +3 -1
  165. package/src/components/Effect/index.tsx +22 -14
  166. package/src/components/Icon/index.tsx +81 -62
  167. package/src/components/Input/index.tsx +8 -3
  168. package/src/components/InternalPopover/index.tsx +131 -126
  169. package/src/components/Menu/index.tsx +7 -1
  170. package/src/components/Message/index.tsx +9 -1
  171. package/src/components/MultiSelect/index.tsx +180 -188
  172. package/src/components/Panel/index.tsx +227 -100
  173. package/src/components/Popover/index.tsx +1 -3
  174. package/src/components/Spacer/index.tsx +63 -14
  175. package/src/components/Table/header.tsx +2 -2
  176. package/src/components/Table/headerCell.tsx +2 -2
  177. package/src/components/Table/helpers.ts +12 -6
  178. package/src/components/Table/index.tsx +1 -0
  179. package/src/components/Table/row.tsx +2 -7
  180. package/src/components/Tabs/content.tsx +11 -3
  181. package/src/components/Tabs/index.tsx +14 -3
  182. package/src/components/Tabs/item.tsx +28 -5
  183. package/src/components/Tabs/list.tsx +7 -3
  184. package/src/components/Tag/group.tsx +6 -12
  185. package/src/components/Tag/index.tsx +69 -35
  186. package/src/components/Tree/index.tsx +1 -1
  187. package/src/constants/animations.ts +1 -1
  188. package/src/constants/sizes.ts +10 -10
  189. package/src/containers/PopoverProvider.tsx +11 -8
  190. package/src/containers/ReqoreProvider.tsx +40 -35
  191. package/src/containers/UIProvider.tsx +7 -0
  192. package/src/context/ReqoreContext.tsx +2 -0
  193. package/src/helpers/colors.ts +8 -2
  194. package/src/helpers/utils.ts +18 -0
  195. package/src/hooks/useLatestZIndex.ts +2 -2
  196. package/src/hooks/usePopover.tsx +9 -6
  197. package/src/mock/collectionData.tsx +33 -2
  198. package/src/stories/Button/Button.stories.tsx +72 -7
  199. package/src/stories/Checkbox/Checkbox.stories.tsx +6 -3
  200. package/src/stories/Collection/Collection.stories.tsx +18 -2
  201. package/src/stories/ControlGroup/ControlGroup.stories.tsx +282 -33
  202. package/src/stories/Drawer/Drawer.stories.tsx +70 -3
  203. package/src/stories/Dropdown/Dropdown.stories.tsx +13 -3
  204. package/src/stories/Icon/Icon.stories.tsx +1 -0
  205. package/src/stories/Input/Input.stories.tsx +5 -3
  206. package/src/stories/Menu/Menu.stories.tsx +2 -0
  207. package/src/stories/Message/Message.stories.tsx +7 -0
  208. package/src/stories/Panel/Panel.stories.tsx +147 -13
  209. package/src/stories/Popover/Popover.stories.tsx +88 -82
  210. package/src/stories/Tabs/Tabs.stories.tsx +33 -15
  211. package/src/stories/Tag/Tag.stories.tsx +23 -3
  212. package/src/stories/TextArea/TextArea.stories.tsx +3 -3
  213. package/src/styles.ts +6 -0
  214. package/src/types/global.ts +28 -0
  215. package/tests.json +1 -1
@@ -27,7 +27,7 @@ export interface IReqoreDrawerProps extends Omit<IReqorePanelProps, 'size'> {
27
27
  onClose?: () => void;
28
28
  onHideToggle?: (isHidden: boolean) => void;
29
29
  hasBackdrop?: boolean;
30
- size?: string;
30
+ size?: string | 'auto';
31
31
  maxSize?: string;
32
32
  minSize?: string;
33
33
  opacity?: number;
@@ -170,6 +170,7 @@ export const ReqoreDrawer = ({
170
170
  _isModal,
171
171
  width,
172
172
  height,
173
+ actions = [],
173
174
  ...rest
174
175
  }: IReqoreDrawerProps) => {
175
176
  const { animations } = useContext(ReqoreContext);
@@ -199,12 +200,13 @@ export const ReqoreDrawer = ({
199
200
 
200
201
  const zIndex = useLatestZIndex();
201
202
  const wrapperZIndex = useLatestZIndex();
202
- const actions: IReqorePanelAction[] = useMemo(() => {
203
- const actions: IReqorePanelAction[] = [];
203
+ const _actions: IReqorePanelAction[] = useMemo(() => {
204
+ const builtActions: IReqorePanelAction[] = [...actions];
204
205
 
205
206
  /* Adding a hide/show button to the drawer. */
206
207
  if (hidable) {
207
- actions.push({
208
+ builtActions.push({
209
+ responsive: false,
208
210
  icon: getHideShowIcon(position, _isHidden),
209
211
  onClick: () => {
210
212
  setIsHidden(!_isHidden);
@@ -218,14 +220,15 @@ export const ReqoreDrawer = ({
218
220
 
219
221
  /* Adding a close button to the drawer. */
220
222
  if (onClose) {
221
- actions.push({
223
+ builtActions.push({
224
+ responsive: false,
222
225
  icon: 'CloseLine',
223
226
  onClick: onClose,
224
227
  className: 'reqore-drawer-close-button',
225
228
  });
226
229
  }
227
230
 
228
- return actions;
231
+ return builtActions;
229
232
  }, [hidable, position, onClose]);
230
233
 
231
234
  const positions = useMemo(() => {
@@ -263,27 +266,27 @@ export const ReqoreDrawer = ({
263
266
  />
264
267
  ) : null}
265
268
  <Resizable
266
- className='reqore-drawer-resizable'
269
+ className={`${className || ''} reqore-drawer-resizable`}
267
270
  maxHeight={
268
271
  layout === 'horizontal' || layout === 'center' ? maxSize || '90vh' : undefined
269
272
  }
270
273
  minHeight={
271
274
  layout === 'center'
272
- ? '140px'
275
+ ? '40px'
273
276
  : layout === 'horizontal'
274
277
  ? _isHidden
275
278
  ? 0
276
- : minSize || '140px'
279
+ : minSize || '40px'
277
280
  : undefined
278
281
  }
279
282
  maxWidth={layout === 'vertical' || layout === 'center' ? maxSize || '90vw' : undefined}
280
283
  minWidth={
281
284
  layout === 'center'
282
- ? '140px'
285
+ ? '40px'
283
286
  : layout === 'vertical'
284
287
  ? _isHidden
285
288
  ? 0
286
- : minSize || '140px'
289
+ : minSize || '40px'
287
290
  : undefined
288
291
  }
289
292
  as={StyledDrawerResizable}
@@ -342,21 +345,19 @@ export const ReqoreDrawer = ({
342
345
  <StyledCloseWrapper
343
346
  className='reqore-drawer-controls'
344
347
  position={position}
345
- w={layout === 'vertical' && _isHidden ? 0 : _size.width}
346
- h={layout === 'horizontal' && _isHidden ? 0 : _size.height}
348
+ w={layout === 'vertical' ? 0 : _size.width}
349
+ h={layout === 'horizontal' ? 0 : _size.height}
347
350
  >
348
- {hidable && (
349
- <ReqoreButton
350
- flat
351
- customTheme={theme}
352
- className='reqore-drawer-control reqore-drawer-hide-button'
353
- icon={getHideShowIcon(position, _isHidden)}
354
- onClick={() => {
355
- setIsHidden(!_isHidden);
356
- onHideToggle && onHideToggle(!_isHidden);
357
- }}
358
- />
359
- )}
351
+ <ReqoreButton
352
+ flat
353
+ customTheme={theme}
354
+ className='reqore-drawer-control reqore-drawer-hide-button'
355
+ icon={getHideShowIcon(position, _isHidden)}
356
+ onClick={() => {
357
+ setIsHidden(!_isHidden);
358
+ onHideToggle && onHideToggle(!_isHidden);
359
+ }}
360
+ />
360
361
  </StyledCloseWrapper>
361
362
  ) : null}
362
363
  {!_isHidden && (
@@ -364,12 +365,12 @@ export const ReqoreDrawer = ({
364
365
  {...rest}
365
366
  opacity={opacity}
366
367
  blur={hasBackdrop ? 0 : blur}
367
- actions={actions}
368
+ actions={_actions}
368
369
  customTheme={customTheme}
369
370
  intent={intent}
370
371
  rounded={floating || _isModal ? true : false}
371
372
  flat={flat}
372
- className={`${className || ''} reqore-drawer`}
373
+ className={`reqore-drawer`}
373
374
  style={{
374
375
  width: '100%',
375
376
  maxHeight: '100%',
@@ -22,6 +22,7 @@ export interface IReqoreDropdownProps extends Partial<IPopoverOptions> {
22
22
  caretPosition?: 'left' | 'right';
23
23
  isDefaultOpen?: boolean;
24
24
  onItemSelect?: TDropdownItemOnClick;
25
+ style?: React.CSSProperties;
25
26
  }
26
27
 
27
28
  function ReqoreDropdown<T extends unknown = IReqoreButtonProps>({
@@ -64,7 +65,7 @@ function ReqoreDropdown<T extends unknown = IReqoreButtonProps>({
64
65
  ...rest,
65
66
  icon: caretPosition === 'left' ? icon || 'ArrowDownSFill' : rightIcon,
66
67
  rightIcon: caretPosition === 'right' ? icon || 'ArrowDownSFill' : rightIcon,
67
- style: buttonStyle,
68
+ style: buttonStyle || rest.style,
68
69
  disabled: !size(items),
69
70
  className: `${(rest as any)?.className || ''} reqore-dropdown-control`,
70
71
  } as T),
@@ -98,6 +99,7 @@ function ReqoreDropdown<T extends unknown = IReqoreButtonProps>({
98
99
  useTargetWidth={useTargetWidth}
99
100
  component={component || ReqoreButton}
100
101
  componentProps={componentProps}
102
+ isReqoreComponent
101
103
  noWrapper
102
104
  placement={placement || 'bottom-start'}
103
105
  handler={handler || 'click'}
@@ -114,10 +114,16 @@ export const StyledEffect = styled.span`
114
114
  const gradientColors = createEffectGradient(
115
115
  theme,
116
116
  effect.gradient.colors,
117
- 0,
117
+ minimal ? 0.05 : 0,
118
118
  !isText && minimal && !active
119
119
  );
120
- const gradientColorsActive = createEffectGradient(theme, effect.gradient.colors, 0.05);
120
+ const gradientColorsActive = createEffectGradient(
121
+ theme,
122
+ effect.gradient.colors,
123
+ 0.05,
124
+ minimal,
125
+ true
126
+ );
121
127
 
122
128
  const gradientDirectionOrShape =
123
129
  gradientType === 'linear'
@@ -167,16 +173,17 @@ export const StyledEffect = styled.span`
167
173
  background: ${active ? gradientActive : gradient};
168
174
  border-color: ${borderColor} !important;
169
175
 
170
- ${color &&
171
- css`
172
- color: ${getReadableColorFrom(getColorFromMaybeString(theme, color), false)} !important;
173
- &::placeholder {
174
- color: ${rgba(
175
- getReadableColorFrom(getColorFromMaybeString(theme, color), false),
176
- 0.7
177
- )} !important;
178
- }
179
- `}
176
+ ${color && !minimal
177
+ ? css`
178
+ color: ${getReadableColorFrom(getColorFromMaybeString(theme, color), false)} !important;
179
+ &::placeholder {
180
+ color: ${rgba(
181
+ getReadableColorFrom(getColorFromMaybeString(theme, color), false),
182
+ 0.7
183
+ )} !important;
184
+ }
185
+ `
186
+ : undefined}
180
187
 
181
188
  ${effect.gradient.animate === 'always' || (effect.gradient.animate === 'active' && active)
182
189
  ? css`
@@ -269,6 +276,7 @@ export const StyledEffect = styled.span`
269
276
  white-space: nowrap;
270
277
  text-overflow: ellipsis;
271
278
  overflow: hidden;
279
+ min-width: 30px;
272
280
  `
273
281
  : undefined}
274
282
 
@@ -364,9 +372,9 @@ export const ReqoreEffect = ({ children, ...rest }: IReqoreTextEffectProps) => {
364
372
  );
365
373
  };
366
374
 
367
- export const ReqoreTextEffect = ({ children, ...rest }: IReqoreTextEffectProps) => {
375
+ export const ReqoreTextEffect = ({ children, className, ...rest }: IReqoreTextEffectProps) => {
368
376
  return (
369
- <StyledTextEffect className='reqore-text-effect' {...rest}>
377
+ <StyledTextEffect className={`${className || ''} reqore-text-effect`} {...rest}>
370
378
  {children}
371
379
  </StyledTextEffect>
372
380
  );
@@ -1,22 +1,27 @@
1
- import React, { memo, useContext } from 'react';
1
+ import React, { forwardRef, memo, useContext } from 'react';
2
2
  import { IconContext } from 'react-icons';
3
3
  import { IconBaseProps, IconType } from 'react-icons/lib';
4
4
  import * as RemixIcons from 'react-icons/ri';
5
5
  import styled, { css } from 'styled-components';
6
6
  import { ReqoreThemeContext } from '../..';
7
7
  import { ICON_FROM_SIZE, PADDING_FROM_SIZE, TSizes } from '../../constants/sizes';
8
- import { TReqoreIntent } from '../../constants/theme';
8
+ import { getColorFromMaybeString } from '../../helpers/colors';
9
9
  import { isStringSize } from '../../helpers/utils';
10
- import { IWithReqoreEffect } from '../../types/global';
10
+ import { useCombinedRefs } from '../../hooks/useCombinedRefs';
11
+ import { useTooltip } from '../../hooks/useTooltip';
12
+ import { IReqoreIntent, IWithReqoreEffect, IWithReqoreTooltip } from '../../types/global';
11
13
  import { IReqoreIconName } from '../../types/icons';
12
- import { StyledEffect } from '../Effect';
14
+ import { StyledEffect, TReqoreEffectColor } from '../Effect';
13
15
 
14
- export interface IReqoreIconProps extends React.HTMLAttributes<HTMLSpanElement>, IWithReqoreEffect {
16
+ export interface IReqoreIconProps
17
+ extends React.HTMLAttributes<HTMLSpanElement>,
18
+ IWithReqoreEffect,
19
+ IWithReqoreTooltip,
20
+ IReqoreIntent {
15
21
  icon?: IReqoreIconName;
16
- color?: string;
22
+ color?: TReqoreEffectColor;
17
23
  size?: TSizes | string;
18
24
  iconProps?: IconBaseProps;
19
- intent?: TReqoreIntent;
20
25
  margin?: 'right' | 'left' | 'both';
21
26
  image?: string;
22
27
  rounded?: boolean;
@@ -52,71 +57,85 @@ export const StyledIconWrapper = styled(StyledEffect)<{ margin: 'right' | 'left'
52
57
  `;
53
58
 
54
59
  const ReqoreIcon = memo(
55
- ({
56
- icon,
57
- size = 'normal',
58
- className,
59
- color,
60
- margin,
61
- style = {},
62
- iconProps,
63
- intent,
64
- image,
65
- ...rest
66
- }: IReqoreIconProps) => {
67
- const theme = useContext(ReqoreThemeContext);
68
- const Icon: IconType = RemixIcons[`Ri${icon}`];
69
- const finalColor: string | undefined = intent ? theme.intents[intent] : color;
70
- const finalSize: string = isStringSize(size) ? ICON_FROM_SIZE[size] : size;
60
+ forwardRef<HTMLSpanElement, IReqoreIconProps>(
61
+ (
62
+ {
63
+ icon,
64
+ size = 'normal',
65
+ className,
66
+ color,
67
+ margin,
68
+ style = {},
69
+ iconProps,
70
+ intent,
71
+ image,
72
+ tooltip,
73
+ ...rest
74
+ }: IReqoreIconProps,
75
+ ref
76
+ ) => {
77
+ const { targetRef } = useCombinedRefs(ref);
78
+ const theme = useContext(ReqoreThemeContext);
79
+ const Icon: IconType = RemixIcons[`Ri${icon}`];
80
+ const finalColor: string | undefined = intent
81
+ ? theme.intents[intent]
82
+ : getColorFromMaybeString(theme, color);
83
+ const finalSize: string = isStringSize(size) ? ICON_FROM_SIZE[size] : size;
84
+
85
+ useTooltip(targetRef.current, tooltip);
86
+
87
+ if (image) {
88
+ return (
89
+ <StyledIconWrapper
90
+ {...rest}
91
+ ref={targetRef}
92
+ size={size}
93
+ margin={margin}
94
+ className={`${className || ''} reqore-icon`}
95
+ style={{ ...style, width: finalSize, height: finalSize }}
96
+ >
97
+ <img src={image} alt='' />
98
+ </StyledIconWrapper>
99
+ );
100
+ }
101
+
102
+ if (!Icon) {
103
+ return (
104
+ <StyledIconWrapper
105
+ {...rest}
106
+ ref={targetRef}
107
+ size={size}
108
+ margin={margin}
109
+ className={`${className || ''} reqore-icon`}
110
+ style={{ ...style, width: finalSize, height: finalSize }}
111
+ />
112
+ );
113
+ }
71
114
 
72
- if (image) {
73
115
  return (
74
116
  <StyledIconWrapper
75
117
  {...rest}
76
- size={size}
118
+ ref={targetRef}
77
119
  margin={margin}
78
- className={`${className || ''} reqore-icon`}
120
+ size={size}
79
121
  style={{ ...style, width: finalSize, height: finalSize }}
122
+ className={`${className || ''} reqore-icon`}
80
123
  >
81
- <img src={image} alt='' />
124
+ <IconContext.Provider
125
+ value={{
126
+ color: finalColor || 'inherit',
127
+ size: finalSize,
128
+ style: {
129
+ verticalAlign: 'super',
130
+ },
131
+ }}
132
+ >
133
+ <Icon {...iconProps} />
134
+ </IconContext.Provider>
82
135
  </StyledIconWrapper>
83
136
  );
84
137
  }
85
-
86
- if (!Icon) {
87
- return (
88
- <StyledIconWrapper
89
- {...rest}
90
- size={size}
91
- margin={margin}
92
- className={`${className || ''} reqore-icon`}
93
- style={{ ...style, width: finalSize, height: finalSize }}
94
- />
95
- );
96
- }
97
-
98
- return (
99
- <StyledIconWrapper
100
- {...rest}
101
- margin={margin}
102
- size={size}
103
- style={{ ...style, width: finalSize, height: finalSize }}
104
- className={`${className || ''} reqore-icon`}
105
- >
106
- <IconContext.Provider
107
- value={{
108
- color: finalColor || 'inherit',
109
- size: finalSize,
110
- style: {
111
- verticalAlign: 'super',
112
- },
113
- }}
114
- >
115
- <Icon {...iconProps} />
116
- </IconContext.Provider>
117
- </StyledIconWrapper>
118
- );
119
- }
138
+ )
120
139
  );
121
140
 
122
141
  export default ReqoreIcon;
@@ -22,7 +22,7 @@ import {
22
22
  IWithReqoreEffect,
23
23
  } from '../../types/global';
24
24
  import { IReqoreIconName } from '../../types/icons';
25
- import { StyledEffect } from '../Effect';
25
+ import { StyledEffect, TReqoreEffectColor } from '../Effect';
26
26
  import ReqoreIcon from '../Icon';
27
27
  import ReqoreInputClearButton from '../InputClearButton';
28
28
 
@@ -48,6 +48,7 @@ export interface IReqoreInputProps
48
48
  rounded?: boolean;
49
49
  type?: 'text' | 'password' | 'email' | 'number' | 'tel' | 'url';
50
50
  wrapperStyle?: React.CSSProperties;
51
+ iconColor?: TReqoreEffectColor;
51
52
  }
52
53
 
53
54
  export interface IReqoreInputStyle extends IReqoreInputProps {
@@ -60,7 +61,10 @@ export interface IReqoreInputStyle extends IReqoreInputProps {
60
61
  export const StyledInputWrapper = styled.div<IReqoreInputStyle>`
61
62
  height: ${({ _size }) => SIZE_TO_PX[_size]}px;
62
63
  width: ${({ width }) => (width ? `${width}px` : 'auto')};
63
- flex: ${({ fluid, fixed }) => (fixed ? '0 auto' : fluid ? '1 0 auto' : '0 0 auto')};
64
+ max-width: ${({ fluid, fixed }) => (fluid && !fixed ? '100%' : undefined)};
65
+ min-width: 60px;
66
+ flex: ${({ fluid, fixed }) => (fixed ? '0 auto' : fluid ? '1 auto' : '0 1 auto')};
67
+ align-self: ${({ fixed, fluid }) => (fixed ? 'flex-start' : fluid ? 'stretch' : undefined)};
64
68
  font-size: ${({ _size }) => TEXT_FROM_SIZE[_size]}px;
65
69
  position: relative;
66
70
  overflow: hidden;
@@ -150,6 +154,7 @@ const ReqoreInput = forwardRef<HTMLDivElement, IReqoreInputProps>(
150
154
  className,
151
155
  onClearClick,
152
156
  icon,
157
+ iconColor,
153
158
  flat,
154
159
  rounded = true,
155
160
  minimal,
@@ -185,7 +190,7 @@ const ReqoreInput = forwardRef<HTMLDivElement, IReqoreInputProps>(
185
190
  >
186
191
  {icon && (
187
192
  <StyledIconWrapper _size={size}>
188
- <ReqoreIcon size={size} icon={icon} />
193
+ <ReqoreIcon size={size} icon={icon} color={iconColor} />
189
194
  </StyledIconWrapper>
190
195
  )}
191
196
  <StyledInput