@redsift/design-system 11.5.0 → 11.6.0-alpha.0
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/_internal/Alert2.js +197 -0
- package/_internal/Alert2.js.map +1 -0
- package/_internal/AppBar.js +248 -0
- package/_internal/AppBar.js.map +1 -0
- package/_internal/AppContainer.js +142 -0
- package/_internal/AppContainer.js.map +1 -0
- package/_internal/AppContent.js +92 -0
- package/_internal/AppContent.js.map +1 -0
- package/_internal/Badge2.js +142 -0
- package/_internal/Badge2.js.map +1 -0
- package/_internal/BreadcrumbItem.js +91 -0
- package/_internal/BreadcrumbItem.js.map +1 -0
- package/_internal/Breadcrumbs2.js +94 -0
- package/_internal/Breadcrumbs2.js.map +1 -0
- package/_internal/Button2.js +91 -0
- package/_internal/Button2.js.map +1 -0
- package/_internal/ButtonGroup.js +181 -0
- package/_internal/ButtonGroup.js.map +1 -0
- package/_internal/ButtonLink.js +84 -0
- package/_internal/ButtonLink.js.map +1 -0
- package/_internal/Card2.js +157 -0
- package/_internal/Card2.js.map +1 -0
- package/_internal/CardActions.js +44 -0
- package/_internal/CardActions.js.map +1 -0
- package/_internal/CardBody.js +42 -0
- package/_internal/CardBody.js.map +1 -0
- package/_internal/CardHeader.js +83 -0
- package/_internal/CardHeader.js.map +1 -0
- package/_internal/Checkbox2.js +244 -0
- package/_internal/Checkbox2.js.map +1 -0
- package/_internal/CheckboxGroup.js +188 -0
- package/_internal/CheckboxGroup.js.map +1 -0
- package/_internal/ConditionalWrapper.js +13 -0
- package/_internal/ConditionalWrapper.js.map +1 -0
- package/_internal/DetailedCard.js +6916 -0
- package/_internal/DetailedCard.js.map +1 -0
- package/_internal/DetailedCardCollapsibleSectionItems.js +64 -0
- package/_internal/DetailedCardCollapsibleSectionItems.js.map +1 -0
- package/_internal/DetailedCardHeader.js +67 -0
- package/_internal/DetailedCardHeader.js.map +1 -0
- package/_internal/DetailedCardSection.js +172 -0
- package/_internal/DetailedCardSection.js.map +1 -0
- package/_internal/DetailedCardSectionItem.js +94 -0
- package/_internal/DetailedCardSectionItem.js.map +1 -0
- package/_internal/Flexbox2.js +93 -0
- package/_internal/Flexbox2.js.map +1 -0
- package/_internal/Grid2.js +95 -0
- package/_internal/Grid2.js.map +1 -0
- package/_internal/GridItem.js +40 -0
- package/_internal/GridItem.js.map +1 -0
- package/_internal/Heading2.js +113 -0
- package/_internal/Heading2.js.map +1 -0
- package/_internal/Icon2.js +211 -0
- package/_internal/Icon2.js.map +1 -0
- package/_internal/IconButton.js +80 -0
- package/_internal/IconButton.js.map +1 -0
- package/_internal/IconButtonLink.js +75 -0
- package/_internal/IconButtonLink.js.map +1 -0
- package/_internal/Item2.js +399 -0
- package/_internal/Item2.js.map +1 -0
- package/_internal/Link2.js +67 -0
- package/_internal/Link2.js.map +1 -0
- package/_internal/LinkButton.js +66 -0
- package/_internal/LinkButton.js.map +1 -0
- package/_internal/Listbox2.js +274 -0
- package/_internal/Listbox2.js.map +1 -0
- package/_internal/Number2.js +111 -0
- package/_internal/Number2.js.map +1 -0
- package/_internal/NumberField.js +3974 -0
- package/_internal/NumberField.js.map +1 -0
- package/_internal/Pill2.js +405 -0
- package/_internal/Pill2.js.map +1 -0
- package/_internal/ProgressBar.js +69 -0
- package/_internal/ProgressBar.js.map +1 -0
- package/_internal/Radio2.js +237 -0
- package/_internal/Radio2.js.map +1 -0
- package/_internal/RadioGroup.js +176 -0
- package/_internal/RadioGroup.js.map +1 -0
- package/_internal/Shield2.js +225 -0
- package/_internal/Shield2.js.map +1 -0
- package/_internal/SideNavigationMenu.js +591 -0
- package/_internal/SideNavigationMenu.js.map +1 -0
- package/_internal/SideNavigationMenuItem.js +304 -0
- package/_internal/SideNavigationMenuItem.js.map +1 -0
- package/_internal/Skeleton2.js +42 -0
- package/_internal/Skeleton2.js.map +1 -0
- package/_internal/SkeletonCircle.js +58 -0
- package/_internal/SkeletonCircle.js.map +1 -0
- package/_internal/SkeletonText.js +77 -0
- package/_internal/SkeletonText.js.map +1 -0
- package/_internal/Spinner2.js +333 -0
- package/_internal/Spinner2.js.map +1 -0
- package/_internal/Switch2.js +320 -0
- package/_internal/Switch2.js.map +1 -0
- package/_internal/SwitchGroup.js +188 -0
- package/_internal/SwitchGroup.js.map +1 -0
- package/_internal/Text2.js +51 -0
- package/_internal/Text2.js.map +1 -0
- package/_internal/TextArea.js +444 -0
- package/_internal/TextArea.js.map +1 -0
- package/_internal/TextField.js +473 -0
- package/_internal/TextField.js.map +1 -0
- package/_internal/_rollupPluginBabelHelpers.js +133 -0
- package/_internal/_rollupPluginBabelHelpers.js.map +1 -0
- package/_internal/alert.js +2 -0
- package/_internal/alert.js.map +1 -0
- package/_internal/app-bar.js +2 -0
- package/_internal/app-bar.js.map +1 -0
- package/_internal/app-container.js +3 -0
- package/_internal/app-container.js.map +1 -0
- package/_internal/app-content.js +2 -0
- package/_internal/app-content.js.map +1 -0
- package/_internal/app-side-panel.js +3 -0
- package/_internal/app-side-panel.js.map +1 -0
- package/_internal/badge.js +2 -0
- package/_internal/badge.js.map +1 -0
- package/_internal/breadcrumb-item.js +2 -0
- package/_internal/breadcrumb-item.js.map +1 -0
- package/_internal/breadcrumbs.js +2 -0
- package/_internal/breadcrumbs.js.map +1 -0
- package/_internal/button-group.js +2 -0
- package/_internal/button-group.js.map +1 -0
- package/_internal/button-link.js +2 -0
- package/_internal/button-link.js.map +1 -0
- package/_internal/button.js +3 -0
- package/_internal/button.js.map +1 -0
- package/_internal/card-actions.js +2 -0
- package/_internal/card-actions.js.map +1 -0
- package/_internal/card-body.js +2 -0
- package/_internal/card-body.js.map +1 -0
- package/_internal/card-header.js +2 -0
- package/_internal/card-header.js.map +1 -0
- package/_internal/card.js +2 -0
- package/_internal/card.js.map +1 -0
- package/_internal/checkbox-group.js +2 -0
- package/_internal/checkbox-group.js.map +1 -0
- package/_internal/checkbox.js +2 -0
- package/_internal/checkbox.js.map +1 -0
- package/_internal/colors.js +98 -0
- package/_internal/colors.js.map +1 -0
- package/_internal/conditional-wrapper.js +2 -0
- package/_internal/conditional-wrapper.js.map +1 -0
- package/_internal/context.js +6 -0
- package/_internal/context.js.map +1 -0
- package/_internal/context2.js +300 -0
- package/_internal/context2.js.map +1 -0
- package/_internal/context3.js +6 -0
- package/_internal/context3.js.map +1 -0
- package/_internal/context4.js +6 -0
- package/_internal/context4.js.map +1 -0
- package/_internal/context5.js +6 -0
- package/_internal/context5.js.map +1 -0
- package/_internal/detailed-card-collapsible-section-items.js +2 -0
- package/_internal/detailed-card-collapsible-section-items.js.map +1 -0
- package/_internal/detailed-card-header.js +2 -0
- package/_internal/detailed-card-header.js.map +1 -0
- package/_internal/detailed-card-section-item.js +2 -0
- package/_internal/detailed-card-section-item.js.map +1 -0
- package/_internal/detailed-card-section.js +2 -0
- package/_internal/detailed-card-section.js.map +1 -0
- package/_internal/detailed-card.js +2 -0
- package/_internal/detailed-card.js.map +1 -0
- package/_internal/filterComponents.js +24 -0
- package/_internal/filterComponents.js.map +1 -0
- package/_internal/flexbox.js +2 -0
- package/_internal/flexbox.js.map +1 -0
- package/_internal/focus-within-group.js +3 -0
- package/_internal/focus-within-group.js.map +1 -0
- package/_internal/fonts.js +10 -0
- package/_internal/fonts.js.map +1 -0
- package/_internal/gradient-border.js +38 -0
- package/_internal/gradient-border.js.map +1 -0
- package/_internal/grid-item.js +2 -0
- package/_internal/grid-item.js.map +1 -0
- package/_internal/grid.js +2 -0
- package/_internal/grid.js.map +1 -0
- package/_internal/heading.js +3 -0
- package/_internal/heading.js.map +1 -0
- package/_internal/icon-button-link.js +2 -0
- package/_internal/icon-button-link.js.map +1 -0
- package/_internal/icon-button.js +3 -0
- package/_internal/icon-button.js.map +1 -0
- package/_internal/icon.js +2 -0
- package/_internal/icon.js.map +1 -0
- package/_internal/isComponent.js +15 -0
- package/_internal/isComponent.js.map +1 -0
- package/_internal/item.js +2 -0
- package/_internal/item.js.map +1 -0
- package/_internal/link-button.js +2 -0
- package/_internal/link-button.js.map +1 -0
- package/_internal/link.js +3 -0
- package/_internal/link.js.map +1 -0
- package/_internal/listbox.js +3 -0
- package/_internal/listbox.js.map +1 -0
- package/_internal/number-field.js +2 -0
- package/_internal/number-field.js.map +1 -0
- package/_internal/number.js +2 -0
- package/_internal/number.js.map +1 -0
- package/_internal/partitionComponents.js +26 -0
- package/_internal/partitionComponents.js.map +1 -0
- package/_internal/pill.js +2 -0
- package/_internal/pill.js.map +1 -0
- package/_internal/progress-bar.js +2 -0
- package/_internal/progress-bar.js.map +1 -0
- package/_internal/radio-group.js +2 -0
- package/_internal/radio-group.js.map +1 -0
- package/_internal/radio.js +2 -0
- package/_internal/radio.js.map +1 -0
- package/_internal/redsift-design-tokens.js +1391 -0
- package/_internal/redsift-design-tokens.js.map +1 -0
- package/_internal/shared.js +2 -0
- package/_internal/shared.js.map +1 -0
- package/_internal/shield.js +2 -0
- package/_internal/shield.js.map +1 -0
- package/_internal/side-navigation-menu-bar.js +3 -0
- package/_internal/side-navigation-menu-bar.js.map +1 -0
- package/_internal/side-navigation-menu-item.js +2 -0
- package/_internal/side-navigation-menu-item.js.map +1 -0
- package/_internal/side-navigation-menu.js +2 -0
- package/_internal/side-navigation-menu.js.map +1 -0
- package/_internal/skeleton-circle.js +2 -0
- package/_internal/skeleton-circle.js.map +1 -0
- package/_internal/skeleton-text.js +3 -0
- package/_internal/skeleton-text.js.map +1 -0
- package/_internal/skeleton.js +2 -0
- package/_internal/skeleton.js.map +1 -0
- package/_internal/spinner.js +2 -0
- package/_internal/spinner.js.map +1 -0
- package/_internal/styles.js +235 -0
- package/_internal/styles.js.map +1 -0
- package/_internal/styles2.js +47 -0
- package/_internal/styles2.js.map +1 -0
- package/_internal/styles3.js +145 -0
- package/_internal/styles3.js.map +1 -0
- package/_internal/styles4.js +250 -0
- package/_internal/styles4.js.map +1 -0
- package/_internal/styles5.js +143 -0
- package/_internal/styles5.js.map +1 -0
- package/_internal/styles6.js +84 -0
- package/_internal/styles6.js.map +1 -0
- package/_internal/switch-group.js +2 -0
- package/_internal/switch-group.js.map +1 -0
- package/_internal/switch.js +2 -0
- package/_internal/switch.js.map +1 -0
- package/_internal/text-area.js +2 -0
- package/_internal/text-area.js.map +1 -0
- package/_internal/text-field.js +2 -0
- package/_internal/text-field.js.map +1 -0
- package/_internal/text.js +3 -0
- package/_internal/text.js.map +1 -0
- package/_internal/theme.js +2 -0
- package/_internal/theme.js.map +1 -0
- package/_internal/types.js +15 -0
- package/_internal/types.js.map +1 -0
- package/_internal/types2.js +26 -0
- package/_internal/types2.js.map +1 -0
- package/_internal/types3.js +20 -0
- package/_internal/types3.js.map +1 -0
- package/_internal/useAppSidePanel.js +337 -0
- package/_internal/useAppSidePanel.js.map +1 -0
- package/_internal/useFocusOnList.js +541 -0
- package/_internal/useFocusOnList.js.map +1 -0
- package/_internal/useFocusOnListItem.js +203 -0
- package/_internal/useFocusOnListItem.js.map +1 -0
- package/_internal/useFocusRing.js +669 -0
- package/_internal/useFocusRing.js.map +1 -0
- package/_internal/useId.js +42 -0
- package/_internal/useId.js.map +1 -0
- package/_internal/useIsLoaded.js +14 -0
- package/_internal/useIsLoaded.js.map +1 -0
- package/_internal/useListboxItem.js +129 -0
- package/_internal/useListboxItem.js.map +1 -0
- package/_internal/useMessageFormatter.js +143 -0
- package/_internal/useMessageFormatter.js.map +1 -0
- package/_internal/useNumberFormatter.js +239 -0
- package/_internal/useNumberFormatter.js.map +1 -0
- package/_internal/useSideNavigationMenuBar.js +373 -0
- package/_internal/useSideNavigationMenuBar.js.map +1 -0
- package/_internal/useTheme.js +15 -0
- package/_internal/useTheme.js.map +1 -0
- package/_internal/warnIfNoAccessibleLabelFound.js +20 -0
- package/_internal/warnIfNoAccessibleLabelFound.js.map +1 -0
- package/index.js +315 -24243
- package/index.js.map +1 -1
- package/package.json +3 -3
|
@@ -0,0 +1,444 @@
|
|
|
1
|
+
import { b as _objectWithoutProperties, c as _extends } from './_rollupPluginBabelHelpers.js';
|
|
2
|
+
import React__default, { useState, forwardRef, useCallback, useEffect } from 'react';
|
|
3
|
+
import classNames from 'classnames';
|
|
4
|
+
import { w as warnIfNoAccessibleLabelFound } from './warnIfNoAccessibleLabelFound.js';
|
|
5
|
+
import styled, { css } from 'styled-components';
|
|
6
|
+
import { i as baseStyling } from './styles4.js';
|
|
7
|
+
import { T as Theme, B as ButtonsColorPalette } from './colors.js';
|
|
8
|
+
import { u as useFocusRing, a as useFocusWithin } from './useFocusRing.js';
|
|
9
|
+
import { u as useTheme } from './useTheme.js';
|
|
10
|
+
import { u as useId } from './useId.js';
|
|
11
|
+
import { a as Icon } from './Icon2.js';
|
|
12
|
+
import { F as Flexbox } from './Flexbox2.js';
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Hook that allows to calculate the number of rows needed for a text area.
|
|
16
|
+
* @param minimumRows Minimum number of rows that we want to display.
|
|
17
|
+
* @return rows to be used and a callback to recalculate
|
|
18
|
+
*/
|
|
19
|
+
const useComputeNumberOfRows = minimumRows => {
|
|
20
|
+
const [rows, setRows] = useState(minimumRows);
|
|
21
|
+
const recompute = target => {
|
|
22
|
+
/**
|
|
23
|
+
* HEAD's UP! This part is a little bit tricky. The idea here is to only
|
|
24
|
+
* display the necessary rows on the textarea. In order to dynamically adjust
|
|
25
|
+
* the height on that field, we need to:
|
|
26
|
+
* 1. Set the current amount of rows to the minimum. That will make the scroll appear.
|
|
27
|
+
* 2. With that, we will have the `scrollHeight`, meaning the height of the container adjusted to the current content
|
|
28
|
+
* 3. With the scroll height, we can figure out how many rows we need to use by dividing the scroll height
|
|
29
|
+
* by the line height.
|
|
30
|
+
* 4. With that number, we can readjust the number of rows on the text area. We need to do that here, if we leave that to
|
|
31
|
+
* the state change through React, there are some scenarios (resize, hitting ENTER or BACKSPACE which add or remove lines)
|
|
32
|
+
* when we will not see the update and the rows will be resized to the minimum.
|
|
33
|
+
* 5. In case there is any other update on the component that changes the UI, we need to keep the number of rows
|
|
34
|
+
* on the state in order to allow React to re-render. Therefore, we save them using `useState`
|
|
35
|
+
*/
|
|
36
|
+
// eslint-disable-next-line no-param-reassign
|
|
37
|
+
target.rows = minimumRows;
|
|
38
|
+
let currentRows = target.scrollHeight / (target.clientHeight / minimumRows);
|
|
39
|
+
currentRows = currentRows >= minimumRows ? currentRows : minimumRows;
|
|
40
|
+
// eslint-disable-next-line no-param-reassign
|
|
41
|
+
target.rows = currentRows;
|
|
42
|
+
setRows(currentRows);
|
|
43
|
+
};
|
|
44
|
+
return {
|
|
45
|
+
recomputeNumberOfRows: recompute,
|
|
46
|
+
rows
|
|
47
|
+
};
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Component variant.
|
|
52
|
+
*/
|
|
53
|
+
const TextAreaVariant = {
|
|
54
|
+
default: 'default',
|
|
55
|
+
underline: 'underline'
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Component props.
|
|
60
|
+
*/
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Component style.
|
|
64
|
+
*/
|
|
65
|
+
const StyledTextArea = styled.div`
|
|
66
|
+
height: fit-content;
|
|
67
|
+
position: relative;
|
|
68
|
+
width: fit-content;
|
|
69
|
+
margin: 0;
|
|
70
|
+
min-width: 0;
|
|
71
|
+
padding: 0;
|
|
72
|
+
${baseStyling}
|
|
73
|
+
|
|
74
|
+
border: 0;
|
|
75
|
+
display: inline-flex;
|
|
76
|
+
flex-direction: column;
|
|
77
|
+
vertical-align: top;
|
|
78
|
+
|
|
79
|
+
${_ref => {
|
|
80
|
+
let {
|
|
81
|
+
label,
|
|
82
|
+
$hasLeftIcon,
|
|
83
|
+
$hasContent,
|
|
84
|
+
$isFocused,
|
|
85
|
+
$isDisabled,
|
|
86
|
+
$isInvalid,
|
|
87
|
+
$color,
|
|
88
|
+
$isGradient,
|
|
89
|
+
$theme,
|
|
90
|
+
$variant
|
|
91
|
+
} = _ref;
|
|
92
|
+
return css`
|
|
93
|
+
${$isDisabled ? css`
|
|
94
|
+
pointer-events: none;
|
|
95
|
+
` : ''}
|
|
96
|
+
|
|
97
|
+
.redsift-text-area__label {
|
|
98
|
+
font-family: var(--redsift-typography-input-text-font-family);
|
|
99
|
+
font-size: var(--redsift-typography-input-text-font-size);
|
|
100
|
+
font-weight: var(--redsift-typography-input-text-font-weight);
|
|
101
|
+
line-height: var(--redsift-typography-input-text-line-height);
|
|
102
|
+
left: ${$hasLeftIcon && !$hasContent ? '32px' : '0'};
|
|
103
|
+
overflow: hidden;
|
|
104
|
+
pointer-events: none;
|
|
105
|
+
position: absolute;
|
|
106
|
+
text-overflow: ellipsis;
|
|
107
|
+
top: ${$hasContent ? '-8px' : '-6px'};
|
|
108
|
+
transform-origin: top left;
|
|
109
|
+
transition: color 200ms cubic-bezier(0, 0, 0.2, 1) 0ms, transform 200ms cubic-bezier(0, 0, 0.2, 1) 0ms,
|
|
110
|
+
max-width 200ms cubic-bezier(0, 0, 0.2, 1) 0ms;
|
|
111
|
+
white-space: nowrap;
|
|
112
|
+
z-index: 1;
|
|
113
|
+
|
|
114
|
+
${!$hasContent ? css`
|
|
115
|
+
max-width: calc(100% - 24px);
|
|
116
|
+
transform: translate(${$variant === TextAreaVariant.underline ? '0px' : '14px'}, 16px) scale(1);
|
|
117
|
+
` : css`
|
|
118
|
+
max-width: calc(133% - 32px);
|
|
119
|
+
transform: translate(${$variant === TextAreaVariant.underline ? '0px' : '14px'}, 1px) scale(0.733);
|
|
120
|
+
`}
|
|
121
|
+
|
|
122
|
+
${!$isGradient ? css`
|
|
123
|
+
color: var(
|
|
124
|
+
--redsift-color-${$theme}-components-buttons-secondary-button-${$isInvalid ? 'error' : $isFocused ? $color : 'grey'}-text-${$isDisabled ? 'disabled' : 'default'}
|
|
125
|
+
);
|
|
126
|
+
` : css`
|
|
127
|
+
background-color: var(--redsift-color-neutral-${$theme === Theme.dark ? 'x-dark-grey' : 'white'});
|
|
128
|
+
${$variant !== TextAreaVariant.underline ? css`
|
|
129
|
+
padding-right: 7px;
|
|
130
|
+
padding-left: 5px;
|
|
131
|
+
` : ''}
|
|
132
|
+
> span {
|
|
133
|
+
background: var(
|
|
134
|
+
--redsift-color-${$theme}-components-buttons-secondary-button-${$isInvalid ? 'error' : $isFocused ? $color : 'grey'}-text-${$isDisabled ? 'disabled' : 'default'}
|
|
135
|
+
);
|
|
136
|
+
background-clip: text;
|
|
137
|
+
color: transparent;
|
|
138
|
+
}
|
|
139
|
+
`}
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
.redsift-text-area__text-area-wrapper {
|
|
143
|
+
align-items: flex-start;
|
|
144
|
+
box-sizing: border-box;
|
|
145
|
+
cursor: text;
|
|
146
|
+
display: inline-flex;
|
|
147
|
+
min-height: 42px;
|
|
148
|
+
position: relative;
|
|
149
|
+
width: 100%;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
.redsift-text-area-text-area-wrapper__text-area {
|
|
153
|
+
textarea {
|
|
154
|
+
background: transparent;
|
|
155
|
+
display: block;
|
|
156
|
+
border: none;
|
|
157
|
+
outline: none;
|
|
158
|
+
width: 100%;
|
|
159
|
+
padding: 0;
|
|
160
|
+
margin: 0;
|
|
161
|
+
box-sizing: content-box;
|
|
162
|
+
font-family: var(--redsift-typography-input-text-font-family);
|
|
163
|
+
font-size: 14px;
|
|
164
|
+
font-weight: var(--redsift-typography-input-text-font-weight);
|
|
165
|
+
line-height: var(--redsift-typography-input-text-line-height);
|
|
166
|
+
resize: none;
|
|
167
|
+
|
|
168
|
+
${$isDisabled ? css`
|
|
169
|
+
color: var(--redsift-color-neutral-light-grey);
|
|
170
|
+
` : css`
|
|
171
|
+
color: var(--redsift-color-neutral-${$theme === Theme.dark ? 'white' : 'x-dark-grey'});
|
|
172
|
+
`}
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
flex: 1 1 auto;
|
|
176
|
+
padding-bottom: 9px;
|
|
177
|
+
${$variant !== TextAreaVariant.underline && !$hasLeftIcon ? css`
|
|
178
|
+
padding-left: 16px;
|
|
179
|
+
` : ''}
|
|
180
|
+
padding-top: ${label ? '10px' : '9px'};
|
|
181
|
+
padding-right: 8px;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
.redsift-text-area-text-area-wrapper-pills-and-text-area__text-area::placeholder {
|
|
185
|
+
color: var(--redsift-color-neutral-mid-grey);
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
.redsift-text-area-text-area-wrapper-pills-and-text-area__text-area:focus {
|
|
189
|
+
outline: 0;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
.redsift-text-area-text-area-wrapper__fieldset {
|
|
193
|
+
border-style: solid;
|
|
194
|
+
bottom: 0;
|
|
195
|
+
left: 1px;
|
|
196
|
+
margin: 0;
|
|
197
|
+
min-width: 0%;
|
|
198
|
+
overflow: hidden;
|
|
199
|
+
padding: 0 8px;
|
|
200
|
+
pointer-events: none;
|
|
201
|
+
position: absolute;
|
|
202
|
+
right: 0;
|
|
203
|
+
text-align: left;
|
|
204
|
+
top: -5px;
|
|
205
|
+
|
|
206
|
+
${!$isGradient || $isDisabled || !$isFocused || $isInvalid ? css`
|
|
207
|
+
${$variant === TextAreaVariant.underline ? css`
|
|
208
|
+
border-bottom-width: 2px;
|
|
209
|
+
` : css`
|
|
210
|
+
border-radius: 4px;
|
|
211
|
+
border-width: 2px;
|
|
212
|
+
`}
|
|
213
|
+
border-color: var(
|
|
214
|
+
--redsift-color-${$theme}-components-buttons-secondary-button-${$isInvalid ? 'error' : $isFocused ? $color : 'grey'}-text-${$isDisabled ? 'disabled' : 'default'}
|
|
215
|
+
);
|
|
216
|
+
` : css`
|
|
217
|
+
${$variant === TextAreaVariant.underline ? css`
|
|
218
|
+
border-bottom: 2px solid transparent;
|
|
219
|
+
` : css`
|
|
220
|
+
border: 2px solid transparent;
|
|
221
|
+
border-radius: 4px;
|
|
222
|
+
`}
|
|
223
|
+
background: transparent;
|
|
224
|
+
background-clip: padding-box, border-box;
|
|
225
|
+
background-origin: border-box;
|
|
226
|
+
background-image: linear-gradient(
|
|
227
|
+
90deg,
|
|
228
|
+
var(--redsift-color-neutral-${$theme === Theme.dark ? 'x-dark-grey' : 'white'}),
|
|
229
|
+
var(--redsift-color-neutral-${$theme === Theme.dark ? 'x-dark-grey' : 'white'})
|
|
230
|
+
),
|
|
231
|
+
var(--redsift-color-${$theme}-components-buttons-secondary-button-${$color}-text-default);
|
|
232
|
+
`}
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
.redsift-text-area-text-area-wrapper-fieldset__legend {
|
|
236
|
+
display: block;
|
|
237
|
+
float: unset;
|
|
238
|
+
font-size: 11px;
|
|
239
|
+
height: 11px;
|
|
240
|
+
overflow: hidden;
|
|
241
|
+
padding: 0;
|
|
242
|
+
visibility: hidden;
|
|
243
|
+
white-space: nowrap;
|
|
244
|
+
width: auto;
|
|
245
|
+
|
|
246
|
+
${!$hasContent ? css`
|
|
247
|
+
max-width: 0.01px;
|
|
248
|
+
transition: max-width 50ms cubic-bezier(0, 0, 0.2, 1) 0ms;
|
|
249
|
+
` : css`
|
|
250
|
+
max-width: 100%;
|
|
251
|
+
transition: max-width 100ms cubic-bezier(0, 0, 0.2, 1) 50ms;
|
|
252
|
+
`}
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
.redsift-text-area-text-area-wrapper-fieldset__legend > span {
|
|
256
|
+
display: inline-block;
|
|
257
|
+
opacity: 0;
|
|
258
|
+
padding-left: 5px;
|
|
259
|
+
padding-right: 5px;
|
|
260
|
+
visibility: visible;
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
.redsift-text-area-text-area-wrapper__toolbar {
|
|
264
|
+
position: relative;
|
|
265
|
+
top: 7px;
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
.redsift-icon-button {
|
|
269
|
+
padding: 2px;
|
|
270
|
+
height: 28px;
|
|
271
|
+
width: 28px;
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
${$variant !== TextAreaVariant.underline ? css`
|
|
275
|
+
.redsift-icon.left {
|
|
276
|
+
padding-left: 12px;
|
|
277
|
+
padding-right: 8px;
|
|
278
|
+
line-height: 28px;
|
|
279
|
+
top: 10px;
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
.redsift-text-area-text-area-wrapper__toolbar {
|
|
283
|
+
padding-right: 8px;
|
|
284
|
+
}
|
|
285
|
+
` : css`
|
|
286
|
+
.redsift-icon.left {
|
|
287
|
+
padding-right: 8px;
|
|
288
|
+
top: 10px;
|
|
289
|
+
}
|
|
290
|
+
`}
|
|
291
|
+
`;
|
|
292
|
+
}}
|
|
293
|
+
`;
|
|
294
|
+
|
|
295
|
+
const _excluded = ["aria-label", "aria-labelledby", "after", "autoFocus", "className", "color", "defaultValue", "forceColor", "isColored", "isDisabled", "isInvalid", "isReadOnly", "isRequired", "label", "leftIcon", "minimumRows", "name", "onBlur", "onChange", "onFocus", "placeholder", "textareaProps", "textareaRef", "theme", "value", "variant", "width"];
|
|
296
|
+
const COMPONENT_NAME = 'TextArea';
|
|
297
|
+
const CLASSNAME = 'redsift-text-area';
|
|
298
|
+
|
|
299
|
+
/**
|
|
300
|
+
* The TextArea component.
|
|
301
|
+
* Can be used as controlled or uncontrolled.
|
|
302
|
+
*/
|
|
303
|
+
const TextArea = /*#__PURE__*/forwardRef((props, ref) => {
|
|
304
|
+
const {
|
|
305
|
+
'aria-label': ariaLabel,
|
|
306
|
+
'aria-labelledby': ariaLabelledby,
|
|
307
|
+
after,
|
|
308
|
+
autoFocus,
|
|
309
|
+
className,
|
|
310
|
+
color: propsColor,
|
|
311
|
+
defaultValue = '',
|
|
312
|
+
forceColor,
|
|
313
|
+
isColored = true,
|
|
314
|
+
isDisabled,
|
|
315
|
+
isInvalid,
|
|
316
|
+
isReadOnly,
|
|
317
|
+
isRequired,
|
|
318
|
+
label,
|
|
319
|
+
leftIcon,
|
|
320
|
+
minimumRows,
|
|
321
|
+
name,
|
|
322
|
+
onBlur: onBlurProps,
|
|
323
|
+
onChange,
|
|
324
|
+
onFocus: onFocusProps,
|
|
325
|
+
placeholder,
|
|
326
|
+
textareaProps,
|
|
327
|
+
textareaRef: propsTextareaRef,
|
|
328
|
+
theme: propsTheme,
|
|
329
|
+
value: propsValue,
|
|
330
|
+
variant = TextAreaVariant.default,
|
|
331
|
+
width = '100%'
|
|
332
|
+
} = props,
|
|
333
|
+
forwardedProps = _objectWithoutProperties(props, _excluded);
|
|
334
|
+
const theme = useTheme(propsTheme);
|
|
335
|
+
const color = Object.values(ButtonsColorPalette).includes(propsColor) ? propsColor : isColored ? 'primary' : 'grey';
|
|
336
|
+
const isGradient = color === ButtonsColorPalette.radar;
|
|
337
|
+
const _textareaRef = React__default.useRef(null);
|
|
338
|
+
const textareaRef = propsTextareaRef !== null && propsTextareaRef !== void 0 ? propsTextareaRef : _textareaRef;
|
|
339
|
+
const {
|
|
340
|
+
isFocusVisible,
|
|
341
|
+
isFocused,
|
|
342
|
+
focusProps: {
|
|
343
|
+
onFocus,
|
|
344
|
+
onBlur
|
|
345
|
+
}
|
|
346
|
+
} = useFocusRing({
|
|
347
|
+
autoFocus
|
|
348
|
+
});
|
|
349
|
+
const [isFocusWithin, setFocusWithin] = useState(Boolean(autoFocus));
|
|
350
|
+
const {
|
|
351
|
+
focusWithinProps
|
|
352
|
+
} = useFocusWithin({
|
|
353
|
+
onFocusWithinChange: isFocusWithin => setFocusWithin(isFocusWithin)
|
|
354
|
+
});
|
|
355
|
+
const [value, setValue] = useState(defaultValue);
|
|
356
|
+
const isControlled = propsValue !== null && propsValue !== undefined;
|
|
357
|
+
const [labelId] = useId();
|
|
358
|
+
warnIfNoAccessibleLabelFound(props, [label], 'TextArea');
|
|
359
|
+
const handleChange = useCallback(event => {
|
|
360
|
+
if (isDisabled || isReadOnly) {
|
|
361
|
+
return;
|
|
362
|
+
}
|
|
363
|
+
if (onChange) {
|
|
364
|
+
onChange(event.target.value, name, event);
|
|
365
|
+
} else {
|
|
366
|
+
setValue(event.target.value);
|
|
367
|
+
}
|
|
368
|
+
}, [onChange]);
|
|
369
|
+
const {
|
|
370
|
+
rows,
|
|
371
|
+
recomputeNumberOfRows
|
|
372
|
+
} = useComputeNumberOfRows(minimumRows || 4);
|
|
373
|
+
useEffect(() => {
|
|
374
|
+
// Recompute the number of rows for the first rendering
|
|
375
|
+
if (textareaRef && textareaRef.current) {
|
|
376
|
+
recomputeNumberOfRows(textareaRef.current);
|
|
377
|
+
}
|
|
378
|
+
}, [textareaRef, recomputeNumberOfRows, value]);
|
|
379
|
+
return /*#__PURE__*/React__default.createElement(StyledTextArea, _extends({
|
|
380
|
+
width: width
|
|
381
|
+
}, focusWithinProps, forwardedProps, {
|
|
382
|
+
$hasContent: isFocusWithin || Boolean(isControlled ? propsValue : value) || Boolean(placeholder),
|
|
383
|
+
$hasLeftIcon: Boolean(leftIcon),
|
|
384
|
+
$color: color,
|
|
385
|
+
$isGradient: isGradient,
|
|
386
|
+
$isDisabled: isDisabled,
|
|
387
|
+
$isFocusVisible: isFocusVisible,
|
|
388
|
+
$isInvalid: isInvalid || isRequired && !(isControlled ? propsValue : value),
|
|
389
|
+
$isRequired: isRequired,
|
|
390
|
+
$isFocused: Boolean(isFocused || forceColor),
|
|
391
|
+
$theme: theme,
|
|
392
|
+
$variant: variant,
|
|
393
|
+
className: classNames(TextArea.className, className),
|
|
394
|
+
ref: ref
|
|
395
|
+
}), /*#__PURE__*/React__default.createElement("fieldset", {
|
|
396
|
+
"aria-hidden": "true",
|
|
397
|
+
className: `${TextArea.className}-text-area-wrapper__fieldset`
|
|
398
|
+
}, /*#__PURE__*/React__default.createElement("legend", {
|
|
399
|
+
id: labelId,
|
|
400
|
+
className: `${TextArea.className}-text-area-wrapper-fieldset__legend`
|
|
401
|
+
}, label ? /*#__PURE__*/React__default.createElement("span", null, label) : null)), label ? /*#__PURE__*/React__default.createElement("label", {
|
|
402
|
+
className: `${TextArea.className}__label`
|
|
403
|
+
}, /*#__PURE__*/React__default.createElement("span", null, label)) : null, /*#__PURE__*/React__default.createElement("div", {
|
|
404
|
+
className: `${TextArea.className}__text-area-wrapper`
|
|
405
|
+
}, leftIcon ? /*#__PURE__*/React__default.createElement(Icon, _extends({
|
|
406
|
+
color: isDisabled ? 'question' : 'black'
|
|
407
|
+
}, leftIcon, {
|
|
408
|
+
"aria-hidden": "true",
|
|
409
|
+
className: "left"
|
|
410
|
+
})) : null, /*#__PURE__*/React__default.createElement("div", {
|
|
411
|
+
className: `${TextArea.className}-text-area-wrapper__text-area`
|
|
412
|
+
}, /*#__PURE__*/React__default.createElement("textarea", _extends({}, textareaProps, {
|
|
413
|
+
onBlur: event => {
|
|
414
|
+
onBlur === null || onBlur === void 0 ? void 0 : onBlur(event);
|
|
415
|
+
onBlurProps === null || onBlurProps === void 0 ? void 0 : onBlurProps(event);
|
|
416
|
+
},
|
|
417
|
+
onFocus: event => {
|
|
418
|
+
onFocus === null || onFocus === void 0 ? void 0 : onFocus(event);
|
|
419
|
+
onFocusProps === null || onFocusProps === void 0 ? void 0 : onFocusProps(event);
|
|
420
|
+
},
|
|
421
|
+
"aria-disabled": isDisabled,
|
|
422
|
+
"aria-invalid": isInvalid || isRequired && !(isControlled ? propsValue : value),
|
|
423
|
+
"aria-label": ariaLabel,
|
|
424
|
+
"aria-labelledby": ariaLabelledby || (label ? labelId : undefined),
|
|
425
|
+
"aria-readonly": isReadOnly,
|
|
426
|
+
"aria-required": isRequired,
|
|
427
|
+
autoFocus: autoFocus,
|
|
428
|
+
disabled: isDisabled,
|
|
429
|
+
name: name,
|
|
430
|
+
onChange: handleChange,
|
|
431
|
+
placeholder: placeholder,
|
|
432
|
+
ref: textareaRef,
|
|
433
|
+
value: isControlled ? propsValue : value,
|
|
434
|
+
rows: rows
|
|
435
|
+
}))), after ? /*#__PURE__*/React__default.createElement(Flexbox, {
|
|
436
|
+
className: `${TextArea.className}-text-area-wrapper__toolbar`,
|
|
437
|
+
gap: "8px"
|
|
438
|
+
}, typeof after === 'function' ? after(isControlled ? propsValue : value, isDisabled, isInvalid || isRequired && !(isControlled ? propsValue : value), isRequired) : after) : null));
|
|
439
|
+
});
|
|
440
|
+
TextArea.className = CLASSNAME;
|
|
441
|
+
TextArea.displayName = COMPONENT_NAME;
|
|
442
|
+
|
|
443
|
+
export { TextAreaVariant as T, TextArea as a, useComputeNumberOfRows as u };
|
|
444
|
+
//# sourceMappingURL=TextArea.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TextArea.js","sources":["../../src/hooks/useComputeNumberOfRows.ts","../../src/components/text-area/types.ts","../../src/components/text-area/styles.ts","../../src/components/text-area/TextArea.tsx"],"sourcesContent":["import { useState } from 'react';\n\n/**\n * Hook that allows to calculate the number of rows needed for a text area.\n * @param minimumRows Minimum number of rows that we want to display.\n * @return rows to be used and a callback to recalculate\n */\nexport const useComputeNumberOfRows = (\n minimumRows: number\n): {\n /** number of rows to be used on the text area */\n rows: number;\n /**\n * Callback in order to recalculate the number of rows due to a change on the text area\n */\n recomputeNumberOfRows(target: Element): void;\n} => {\n const [rows, setRows] = useState(minimumRows);\n\n const recompute = (target: Element) => {\n /**\n * HEAD's UP! This part is a little bit tricky. The idea here is to only\n * display the necessary rows on the textarea. In order to dynamically adjust\n * the height on that field, we need to:\n * 1. Set the current amount of rows to the minimum. That will make the scroll appear.\n * 2. With that, we will have the `scrollHeight`, meaning the height of the container adjusted to the current content\n * 3. With the scroll height, we can figure out how many rows we need to use by dividing the scroll height\n * by the line height.\n * 4. With that number, we can readjust the number of rows on the text area. We need to do that here, if we leave that to\n * the state change through React, there are some scenarios (resize, hitting ENTER or BACKSPACE which add or remove lines)\n * when we will not see the update and the rows will be resized to the minimum.\n * 5. In case there is any other update on the component that changes the UI, we need to keep the number of rows\n * on the state in order to allow React to re-render. Therefore, we save them using `useState`\n */\n // eslint-disable-next-line no-param-reassign\n (target as HTMLTextAreaElement).rows = minimumRows;\n let currentRows = target.scrollHeight / (target.clientHeight / minimumRows);\n currentRows = currentRows >= minimumRows ? currentRows : minimumRows;\n // eslint-disable-next-line no-param-reassign\n (target as HTMLTextAreaElement).rows = currentRows;\n\n setRows(currentRows);\n };\n\n return {\n recomputeNumberOfRows: recompute,\n rows,\n };\n};\n","import { ChangeEvent, ComponentProps, MutableRefObject } from 'react';\nimport { ValueOf } from '../../types';\nimport { StyledTextFieldProps, TextFieldProps } from '../text-field';\n\n/**\n * Component variant.\n */\nexport const TextAreaVariant = {\n default: 'default',\n underline: 'underline',\n} as const;\nexport type TextAreaVariant = ValueOf<typeof TextAreaVariant>;\n\n/**\n * Component props.\n */\nexport interface TextAreaProps\n extends Omit<\n TextFieldProps,\n 'onChange' | 'inputRef' | 'inputProps' | 'pills' | 'internal' | 'hasClearButton' | 'onClear'\n > {\n /** Custom ref object to pass to the textarea element. */\n textareaRef?: MutableRefObject<HTMLTextAreaElement>;\n /** Custom props to pass to the textarea element. */\n textareaProps?: ComponentProps<'textarea'>;\n /** Method to handle component change. */\n onChange?(value?: string, name?: string, event?: ChangeEvent<HTMLTextAreaElement>): void;\n /** Minimum number of rows displayed in multiline mode (requires `multiline` to be enabled). */\n minimumRows?: number;\n}\n\nexport type StyledTextAreaProps = StyledTextFieldProps;\n","import styled, { css } from 'styled-components';\nimport { baseStyling } from '../shared';\nimport { StyledTextAreaProps, TextAreaVariant } from './types';\nimport { Theme } from '@redsift/design-system/types';\n\n/**\n * Component style.\n */\nexport const StyledTextArea = styled.div<StyledTextAreaProps>`\n height: fit-content;\n position: relative;\n width: fit-content;\n margin: 0;\n min-width: 0;\n padding: 0;\n ${baseStyling}\n\n border: 0;\n display: inline-flex;\n flex-direction: column;\n vertical-align: top;\n\n ${({\n label,\n $hasLeftIcon,\n $hasContent,\n $isFocused,\n $isDisabled,\n $isInvalid,\n $color,\n $isGradient,\n $theme,\n $variant,\n }) => css`\n ${$isDisabled\n ? css`\n pointer-events: none;\n `\n : ''}\n\n .redsift-text-area__label {\n font-family: var(--redsift-typography-input-text-font-family);\n font-size: var(--redsift-typography-input-text-font-size);\n font-weight: var(--redsift-typography-input-text-font-weight);\n line-height: var(--redsift-typography-input-text-line-height);\n left: ${$hasLeftIcon && !$hasContent ? '32px' : '0'};\n overflow: hidden;\n pointer-events: none;\n position: absolute;\n text-overflow: ellipsis;\n top: ${$hasContent ? '-8px' : '-6px'};\n transform-origin: top left;\n transition: color 200ms cubic-bezier(0, 0, 0.2, 1) 0ms, transform 200ms cubic-bezier(0, 0, 0.2, 1) 0ms,\n max-width 200ms cubic-bezier(0, 0, 0.2, 1) 0ms;\n white-space: nowrap;\n z-index: 1;\n\n ${!$hasContent\n ? css`\n max-width: calc(100% - 24px);\n transform: translate(${$variant === TextAreaVariant.underline ? '0px' : '14px'}, 16px) scale(1);\n `\n : css`\n max-width: calc(133% - 32px);\n transform: translate(${$variant === TextAreaVariant.underline ? '0px' : '14px'}, 1px) scale(0.733);\n `}\n\n ${!$isGradient\n ? css`\n color: var(\n --redsift-color-${$theme}-components-buttons-secondary-button-${$isInvalid\n ? 'error'\n : $isFocused\n ? $color\n : 'grey'}-text-${$isDisabled ? 'disabled' : 'default'}\n );\n `\n : css`\n background-color: var(--redsift-color-neutral-${$theme === Theme.dark ? 'x-dark-grey' : 'white'});\n ${$variant !== TextAreaVariant.underline\n ? css`\n padding-right: 7px;\n padding-left: 5px;\n `\n : ''}\n > span {\n background: var(\n --redsift-color-${$theme}-components-buttons-secondary-button-${$isInvalid\n ? 'error'\n : $isFocused\n ? $color\n : 'grey'}-text-${$isDisabled ? 'disabled' : 'default'}\n );\n background-clip: text;\n color: transparent;\n }\n `}\n }\n\n .redsift-text-area__text-area-wrapper {\n align-items: flex-start;\n box-sizing: border-box;\n cursor: text;\n display: inline-flex;\n min-height: 42px;\n position: relative;\n width: 100%;\n }\n\n .redsift-text-area-text-area-wrapper__text-area {\n textarea {\n background: transparent;\n display: block;\n border: none;\n outline: none;\n width: 100%;\n padding: 0;\n margin: 0;\n box-sizing: content-box;\n font-family: var(--redsift-typography-input-text-font-family);\n font-size: 14px;\n font-weight: var(--redsift-typography-input-text-font-weight);\n line-height: var(--redsift-typography-input-text-line-height);\n resize: none;\n\n ${$isDisabled\n ? css`\n color: var(--redsift-color-neutral-light-grey);\n `\n : css`\n color: var(--redsift-color-neutral-${$theme === Theme.dark ? 'white' : 'x-dark-grey'});\n `}\n }\n\n flex: 1 1 auto;\n padding-bottom: 9px;\n ${$variant !== TextAreaVariant.underline && !$hasLeftIcon\n ? css`\n padding-left: 16px;\n `\n : ''}\n padding-top: ${label ? '10px' : '9px'};\n padding-right: 8px;\n }\n\n .redsift-text-area-text-area-wrapper-pills-and-text-area__text-area::placeholder {\n color: var(--redsift-color-neutral-mid-grey);\n }\n\n .redsift-text-area-text-area-wrapper-pills-and-text-area__text-area:focus {\n outline: 0;\n }\n\n .redsift-text-area-text-area-wrapper__fieldset {\n border-style: solid;\n bottom: 0;\n left: 1px;\n margin: 0;\n min-width: 0%;\n overflow: hidden;\n padding: 0 8px;\n pointer-events: none;\n position: absolute;\n right: 0;\n text-align: left;\n top: -5px;\n\n ${!$isGradient || $isDisabled || !$isFocused || $isInvalid\n ? css`\n ${$variant === TextAreaVariant.underline\n ? css`\n border-bottom-width: 2px;\n `\n : css`\n border-radius: 4px;\n border-width: 2px;\n `}\n border-color: var(\n --redsift-color-${$theme}-components-buttons-secondary-button-${$isInvalid\n ? 'error'\n : $isFocused\n ? $color\n : 'grey'}-text-${$isDisabled ? 'disabled' : 'default'}\n );\n `\n : css`\n ${$variant === TextAreaVariant.underline\n ? css`\n border-bottom: 2px solid transparent;\n `\n : css`\n border: 2px solid transparent;\n border-radius: 4px;\n `}\n background: transparent;\n background-clip: padding-box, border-box;\n background-origin: border-box;\n background-image: linear-gradient(\n 90deg,\n var(--redsift-color-neutral-${$theme === Theme.dark ? 'x-dark-grey' : 'white'}),\n var(--redsift-color-neutral-${$theme === Theme.dark ? 'x-dark-grey' : 'white'})\n ),\n var(--redsift-color-${$theme}-components-buttons-secondary-button-${$color}-text-default);\n `}\n }\n\n .redsift-text-area-text-area-wrapper-fieldset__legend {\n display: block;\n float: unset;\n font-size: 11px;\n height: 11px;\n overflow: hidden;\n padding: 0;\n visibility: hidden;\n white-space: nowrap;\n width: auto;\n\n ${!$hasContent\n ? css`\n max-width: 0.01px;\n transition: max-width 50ms cubic-bezier(0, 0, 0.2, 1) 0ms;\n `\n : css`\n max-width: 100%;\n transition: max-width 100ms cubic-bezier(0, 0, 0.2, 1) 50ms;\n `}\n }\n\n .redsift-text-area-text-area-wrapper-fieldset__legend > span {\n display: inline-block;\n opacity: 0;\n padding-left: 5px;\n padding-right: 5px;\n visibility: visible;\n }\n\n .redsift-text-area-text-area-wrapper__toolbar {\n position: relative;\n top: 7px;\n }\n\n .redsift-icon-button {\n padding: 2px;\n height: 28px;\n width: 28px;\n }\n\n ${$variant !== TextAreaVariant.underline\n ? css`\n .redsift-icon.left {\n padding-left: 12px;\n padding-right: 8px;\n line-height: 28px;\n top: 10px;\n }\n\n .redsift-text-area-text-area-wrapper__toolbar {\n padding-right: 8px;\n }\n `\n : css`\n .redsift-icon.left {\n padding-right: 8px;\n top: 10px;\n }\n `}\n `}\n`;\n","import React, {\n ComponentProps,\n FocusEvent,\n forwardRef,\n MutableRefObject,\n useCallback,\n useEffect,\n useState,\n} from 'react';\nimport classNames from 'classnames';\nimport { useFocusRing } from '../../react-aria/react-aria/focus';\nimport { useFocusWithin } from '../../react-aria/react-aria/interactions';\nimport { ButtonsColorPalette, Comp } from '../../types';\nimport { warnIfNoAccessibleLabelFound } from '../../utils/warnIfNoAccessibleLabelFound';\nimport { TextAreaProps, TextAreaVariant } from './types';\nimport { StyledTextArea } from './styles';\nimport { Icon } from '../../components/icon';\nimport { useTheme } from '../theme';\nimport { useComputeNumberOfRows } from '../../hooks';\nimport { useId } from '../../utils';\nimport { Flexbox } from '../flexbox';\n\nconst COMPONENT_NAME = 'TextArea';\nconst CLASSNAME = 'redsift-text-area';\n\n/**\n * The TextArea component.\n * Can be used as controlled or uncontrolled.\n */\nexport const TextArea: Comp<TextAreaProps, HTMLDivElement> = forwardRef((props, ref) => {\n const {\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledby,\n after,\n autoFocus,\n className,\n color: propsColor,\n defaultValue = '',\n forceColor,\n isColored = true,\n isDisabled,\n isInvalid,\n isReadOnly,\n isRequired,\n label,\n leftIcon,\n minimumRows,\n name,\n onBlur: onBlurProps,\n onChange,\n onFocus: onFocusProps,\n placeholder,\n textareaProps,\n textareaRef: propsTextareaRef,\n theme: propsTheme,\n value: propsValue,\n variant = TextAreaVariant.default,\n width = '100%',\n ...forwardedProps\n } = props;\n\n const theme = useTheme(propsTheme);\n const color = Object.values(ButtonsColorPalette).includes(propsColor!) ? propsColor : isColored ? 'primary' : 'grey';\n const isGradient = color === ButtonsColorPalette.radar;\n\n const _textareaRef = React.useRef(null);\n const textareaRef = propsTextareaRef ?? _textareaRef;\n\n const {\n isFocusVisible,\n isFocused,\n focusProps: { onFocus, onBlur },\n } = useFocusRing({\n autoFocus,\n });\n const [isFocusWithin, setFocusWithin] = useState(Boolean(autoFocus));\n const { focusWithinProps } = useFocusWithin({\n onFocusWithinChange: (isFocusWithin) => setFocusWithin(isFocusWithin),\n });\n\n const [value, setValue] = useState(defaultValue);\n const isControlled = propsValue !== null && propsValue !== undefined;\n\n const [labelId] = useId();\n\n warnIfNoAccessibleLabelFound(props as ComponentProps<'label'>, [label], 'TextArea');\n\n const handleChange = useCallback(\n (event: React.ChangeEvent<HTMLTextAreaElement>) => {\n if (isDisabled || isReadOnly) {\n return;\n }\n\n if (onChange) {\n onChange(event.target.value, name, event);\n } else {\n setValue(event.target.value);\n }\n },\n [onChange]\n );\n\n const { rows, recomputeNumberOfRows } = useComputeNumberOfRows(minimumRows || 4);\n useEffect(() => {\n // Recompute the number of rows for the first rendering\n if (textareaRef && textareaRef.current) {\n recomputeNumberOfRows(textareaRef.current);\n }\n }, [textareaRef, recomputeNumberOfRows, value]);\n\n return (\n <StyledTextArea\n width={width}\n {...focusWithinProps}\n {...forwardedProps}\n $hasContent={isFocusWithin || Boolean(isControlled ? propsValue : value) || Boolean(placeholder)}\n $hasLeftIcon={Boolean(leftIcon)}\n $color={color}\n $isGradient={isGradient}\n $isDisabled={isDisabled}\n $isFocusVisible={isFocusVisible}\n $isInvalid={isInvalid || (isRequired && !(isControlled ? propsValue : value))}\n $isRequired={isRequired}\n $isFocused={Boolean(isFocused || forceColor)}\n $theme={theme}\n $variant={variant}\n className={classNames(TextArea.className, className)}\n ref={ref as MutableRefObject<HTMLDivElement>}\n >\n <fieldset aria-hidden=\"true\" className={`${TextArea.className}-text-area-wrapper__fieldset`}>\n <legend id={labelId} className={`${TextArea.className}-text-area-wrapper-fieldset__legend`}>\n {label ? <span>{label}</span> : null}\n </legend>\n </fieldset>\n {label ? (\n <label className={`${TextArea.className}__label`}>\n <span>{label}</span>\n </label>\n ) : null}\n <div className={`${TextArea.className}__text-area-wrapper`}>\n {leftIcon ? (\n <Icon color={isDisabled ? 'question' : 'black'} {...leftIcon} aria-hidden=\"true\" className=\"left\" />\n ) : null}\n <div className={`${TextArea.className}-text-area-wrapper__text-area`}>\n <textarea\n {...textareaProps}\n onBlur={(event) => {\n onBlur?.(event);\n onBlurProps?.(event as unknown as FocusEvent<HTMLDivElement, Element>);\n }}\n onFocus={(event) => {\n onFocus?.(event);\n onFocusProps?.(event as unknown as FocusEvent<HTMLDivElement, Element>);\n }}\n aria-disabled={isDisabled}\n aria-invalid={isInvalid || (isRequired && !(isControlled ? propsValue : value))}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledby || (label ? labelId : undefined)}\n aria-readonly={isReadOnly}\n aria-required={isRequired}\n autoFocus={autoFocus}\n disabled={isDisabled}\n name={name}\n onChange={handleChange}\n placeholder={placeholder}\n ref={textareaRef as MutableRefObject<HTMLTextAreaElement>}\n value={isControlled ? propsValue : value}\n rows={rows}\n />\n </div>\n {after ? (\n <Flexbox className={`${TextArea.className}-text-area-wrapper__toolbar`} gap=\"8px\">\n {typeof after === 'function'\n ? after(\n isControlled ? propsValue : value,\n isDisabled,\n isInvalid || (isRequired && !(isControlled ? propsValue : value)),\n isRequired\n )\n : after}\n </Flexbox>\n ) : null}\n </div>\n </StyledTextArea>\n );\n});\nTextArea.className = CLASSNAME;\nTextArea.displayName = COMPONENT_NAME;\n"],"names":["useComputeNumberOfRows","minimumRows","rows","setRows","useState","recompute","target","currentRows","scrollHeight","clientHeight","recomputeNumberOfRows","TextAreaVariant","default","underline","StyledTextArea","styled","div","baseStyling","_ref","label","$hasLeftIcon","$hasContent","$isFocused","$isDisabled","$isInvalid","$color","$isGradient","$theme","$variant","css","Theme","dark","COMPONENT_NAME","CLASSNAME","TextArea","forwardRef","props","ref","ariaLabel","ariaLabelledby","after","autoFocus","className","color","propsColor","defaultValue","forceColor","isColored","isDisabled","isInvalid","isReadOnly","isRequired","leftIcon","name","onBlur","onBlurProps","onChange","onFocus","onFocusProps","placeholder","textareaProps","textareaRef","propsTextareaRef","theme","propsTheme","value","propsValue","variant","width","forwardedProps","_objectWithoutProperties","_excluded","useTheme","Object","values","ButtonsColorPalette","includes","isGradient","radar","_textareaRef","React","useRef","isFocusVisible","isFocused","focusProps","useFocusRing","isFocusWithin","setFocusWithin","Boolean","focusWithinProps","useFocusWithin","onFocusWithinChange","setValue","isControlled","undefined","labelId","useId","warnIfNoAccessibleLabelFound","handleChange","useCallback","event","useEffect","current","createElement","_extends","$isFocusVisible","$isRequired","classNames","id","Icon","disabled","Flexbox","gap","displayName"],"mappings":"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"}
|