@carbon/react 1.42.0 → 1.43.0-rc.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/.playwright/INTERNAL_AVT_REPORT_DO_NOT_USE.json +2583 -1398
- package/es/components/Breadcrumb/BreadcrumbItem.js +1 -2
- package/es/components/ComboBox/ComboBox.d.ts +5 -0
- package/es/components/ComboBox/ComboBox.js +16 -2
- package/es/components/ComposedModal/ModalFooter.d.ts +18 -0
- package/es/components/ComposedModal/ModalFooter.js +48 -16
- package/es/components/DatePickerInput/DatePickerInput.d.ts +4 -0
- package/es/components/DatePickerInput/DatePickerInput.js +16 -2
- package/es/components/Dropdown/Dropdown.d.ts +5 -0
- package/es/components/Dropdown/Dropdown.js +16 -2
- package/es/components/InlineLoading/index.js +9 -0
- package/es/components/Modal/Modal.d.ts +17 -0
- package/es/components/Modal/Modal.js +38 -3
- package/es/components/MultiSelect/FilterableMultiSelect.js +17 -3
- package/es/components/MultiSelect/MultiSelect.d.ts +5 -0
- package/es/components/MultiSelect/MultiSelect.js +17 -3
- package/es/components/NumberInput/NumberInput.d.ts +5 -0
- package/es/components/NumberInput/NumberInput.js +29 -4
- package/es/components/Select/Select.d.ts +6 -1
- package/es/components/Select/Select.js +16 -2
- package/es/components/Slug/index.js +187 -0
- package/es/components/TextArea/TextArea.d.ts +4 -0
- package/es/components/TextArea/TextArea.js +47 -31
- package/es/components/TextInput/TextInput.d.ts +5 -0
- package/es/components/TextInput/TextInput.js +16 -2
- package/es/components/UIShell/SideNavHeader.d.ts +29 -0
- package/es/components/UIShell/SideNavHeader.js +3 -3
- package/es/components/UIShell/SideNavItems.js +6 -8
- package/es/index.d.ts +1 -0
- package/es/index.js +1 -0
- package/lib/components/Breadcrumb/BreadcrumbItem.js +1 -2
- package/lib/components/ComboBox/ComboBox.d.ts +5 -0
- package/lib/components/ComboBox/ComboBox.js +16 -2
- package/lib/components/ComposedModal/ModalFooter.d.ts +18 -0
- package/lib/components/ComposedModal/ModalFooter.js +48 -16
- package/lib/components/DatePickerInput/DatePickerInput.d.ts +4 -0
- package/lib/components/DatePickerInput/DatePickerInput.js +16 -2
- package/lib/components/Dropdown/Dropdown.d.ts +5 -0
- package/lib/components/Dropdown/Dropdown.js +16 -2
- package/lib/components/InlineLoading/index.js +17 -0
- package/lib/components/Modal/Modal.d.ts +17 -0
- package/lib/components/Modal/Modal.js +38 -3
- package/lib/components/MultiSelect/FilterableMultiSelect.js +17 -3
- package/lib/components/MultiSelect/MultiSelect.d.ts +5 -0
- package/lib/components/MultiSelect/MultiSelect.js +17 -3
- package/lib/components/NumberInput/NumberInput.d.ts +5 -0
- package/lib/components/NumberInput/NumberInput.js +28 -3
- package/lib/components/Select/Select.d.ts +6 -1
- package/lib/components/Select/Select.js +16 -2
- package/lib/components/Slug/index.js +199 -0
- package/lib/components/TextArea/TextArea.d.ts +4 -0
- package/lib/components/TextArea/TextArea.js +47 -31
- package/lib/components/TextInput/TextInput.d.ts +5 -0
- package/lib/components/TextInput/TextInput.js +16 -2
- package/lib/components/UIShell/SideNavHeader.d.ts +29 -0
- package/lib/components/UIShell/SideNavHeader.js +3 -3
- package/lib/components/UIShell/SideNavItems.js +6 -8
- package/lib/index.d.ts +1 -0
- package/lib/index.js +45 -41
- package/package.json +5 -5
- package/scss/utilities/_ai-gradient.scss +9 -0
|
@@ -98,7 +98,8 @@ const MultiSelect = /*#__PURE__*/React__default["default"].forwardRef((_ref, ref
|
|
|
98
98
|
direction = 'bottom',
|
|
99
99
|
selectedItems: selected,
|
|
100
100
|
readOnly,
|
|
101
|
-
locale = 'en'
|
|
101
|
+
locale = 'en',
|
|
102
|
+
slug
|
|
102
103
|
} = _ref;
|
|
103
104
|
const prefix = usePrefix.usePrefix();
|
|
104
105
|
const {
|
|
@@ -192,7 +193,8 @@ const MultiSelect = /*#__PURE__*/React__default["default"].forwardRef((_ref, ref
|
|
|
192
193
|
[`${prefix}--multi-select__wrapper--inline--invalid`]: inline && invalid,
|
|
193
194
|
[`${prefix}--list-box__wrapper--inline--invalid`]: inline && invalid,
|
|
194
195
|
[`${prefix}--list-box__wrapper--fluid--invalid`]: isFluid && invalid,
|
|
195
|
-
[`${prefix}--list-box__wrapper--fluid--focus`]: !isOpen && isFluid && isFocused
|
|
196
|
+
[`${prefix}--list-box__wrapper--fluid--focus`]: !isOpen && isFluid && isFocused,
|
|
197
|
+
[`${prefix}--list-box__wrapper--slug`]: slug
|
|
196
198
|
});
|
|
197
199
|
const titleClasses = cx__default["default"](`${prefix}--label`, {
|
|
198
200
|
[`${prefix}--label--disabled`]: disabled,
|
|
@@ -304,6 +306,14 @@ const MultiSelect = /*#__PURE__*/React__default["default"].forwardRef((_ref, ref
|
|
|
304
306
|
}
|
|
305
307
|
}
|
|
306
308
|
} : {};
|
|
309
|
+
|
|
310
|
+
// Slug is always size `mini`
|
|
311
|
+
let normalizedSlug;
|
|
312
|
+
if (slug) {
|
|
313
|
+
normalizedSlug = /*#__PURE__*/React__default["default"].cloneElement(slug, {
|
|
314
|
+
size: 'mini'
|
|
315
|
+
});
|
|
316
|
+
}
|
|
307
317
|
return /*#__PURE__*/React__default["default"].createElement("div", {
|
|
308
318
|
className: wrapperClasses
|
|
309
319
|
}, /*#__PURE__*/React__default["default"].createElement("label", _rollupPluginBabelHelpers["extends"]({
|
|
@@ -352,7 +362,7 @@ const MultiSelect = /*#__PURE__*/React__default["default"].forwardRef((_ref, ref
|
|
|
352
362
|
}, label), /*#__PURE__*/React__default["default"].createElement(index["default"].MenuIcon, {
|
|
353
363
|
isOpen: isOpen,
|
|
354
364
|
translateWithId: translateWithId
|
|
355
|
-
}))), /*#__PURE__*/React__default["default"].createElement(index["default"].Menu, getMenuProps(), isOpen &&
|
|
365
|
+
})), normalizedSlug), /*#__PURE__*/React__default["default"].createElement(index["default"].Menu, getMenuProps(), isOpen &&
|
|
356
366
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
357
367
|
sortItems(items, sortOptions).map((item, index$1) => {
|
|
358
368
|
const isChecked = selectedItems.filter(selected => isEqual__default["default"](selected, item)).length > 0;
|
|
@@ -507,6 +517,10 @@ MultiSelect.propTypes = {
|
|
|
507
517
|
* Specify the size of the ListBox. Currently supports either `sm`, `md` or `lg` as an option.
|
|
508
518
|
*/
|
|
509
519
|
size: ListBoxPropTypes.ListBoxSize,
|
|
520
|
+
/**
|
|
521
|
+
* Provide a `Slug` component to be rendered inside the `MultiSelect` component
|
|
522
|
+
*/
|
|
523
|
+
slug: PropTypes__default["default"].node,
|
|
510
524
|
/**
|
|
511
525
|
* Provide a method that sorts all options in the control. Overriding this
|
|
512
526
|
* prop means that you also have to handle the sort logic for selected versus
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
* This source code is licensed under the Apache-2.0 license found in the
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
6
6
|
*/
|
|
7
|
+
import { ReactNodeLike } from 'prop-types';
|
|
7
8
|
import React, { ReactNode } from 'react';
|
|
8
9
|
export declare const translationIds: {
|
|
9
10
|
'increment.number': string;
|
|
@@ -107,6 +108,10 @@ export interface NumberInputProps extends Omit<React.InputHTMLAttributes<HTMLInp
|
|
|
107
108
|
* Specify the size of the Number Input.
|
|
108
109
|
*/
|
|
109
110
|
size?: 'sm' | 'md' | 'lg';
|
|
111
|
+
/**
|
|
112
|
+
* Provide a `Slug` component to be rendered inside the `TextInput` component
|
|
113
|
+
*/
|
|
114
|
+
slug?: ReactNodeLike;
|
|
110
115
|
/**
|
|
111
116
|
* Specify how much the values should increase/decrease upon clicking on up/down button
|
|
112
117
|
*/
|
|
@@ -44,7 +44,7 @@ const NumberInput = /*#__PURE__*/React__default["default"].forwardRef(function N
|
|
|
44
44
|
className: customClassName,
|
|
45
45
|
disabled = false,
|
|
46
46
|
disableWheel: disableWheelProp = false,
|
|
47
|
-
defaultValue,
|
|
47
|
+
defaultValue = 0,
|
|
48
48
|
helperText = '',
|
|
49
49
|
hideLabel = false,
|
|
50
50
|
hideSteppers,
|
|
@@ -61,6 +61,7 @@ const NumberInput = /*#__PURE__*/React__default["default"].forwardRef(function N
|
|
|
61
61
|
onKeyUp,
|
|
62
62
|
readOnly,
|
|
63
63
|
size = 'md',
|
|
64
|
+
slug,
|
|
64
65
|
step = 1,
|
|
65
66
|
translateWithId: t = id => defaultTranslations[id],
|
|
66
67
|
warn = false,
|
|
@@ -112,7 +113,8 @@ const NumberInput = /*#__PURE__*/React__default["default"].forwardRef(function N
|
|
|
112
113
|
});
|
|
113
114
|
const [incrementNumLabel, decrementNumLabel] = [t('increment.number'), t('decrement.number')];
|
|
114
115
|
const wrapperClasses = cx__default["default"](`${prefix}--number__input-wrapper`, {
|
|
115
|
-
[`${prefix}--number__input-wrapper--warning`]: normalizedProps.warn
|
|
116
|
+
[`${prefix}--number__input-wrapper--warning`]: normalizedProps.warn,
|
|
117
|
+
[`${prefix}--number__input-wrapper--slug`]: slug
|
|
116
118
|
});
|
|
117
119
|
const iconClasses = cx__default["default"]({
|
|
118
120
|
[`${prefix}--number__invalid`]: normalizedProps.invalid || normalizedProps.warn,
|
|
@@ -177,6 +179,25 @@ const NumberInput = /*#__PURE__*/React__default["default"].forwardRef(function N
|
|
|
177
179
|
}
|
|
178
180
|
}
|
|
179
181
|
}
|
|
182
|
+
|
|
183
|
+
// Slug is always size `mini`
|
|
184
|
+
let normalizedSlug;
|
|
185
|
+
if (slug) {
|
|
186
|
+
normalizedSlug = /*#__PURE__*/React__default["default"].cloneElement(slug, {
|
|
187
|
+
size: 'mini'
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
// Need to update the internal value when the revert button is clicked
|
|
192
|
+
let isRevertActive;
|
|
193
|
+
if (slug) {
|
|
194
|
+
isRevertActive = normalizedSlug.props.revertActive;
|
|
195
|
+
}
|
|
196
|
+
React.useEffect(() => {
|
|
197
|
+
if (!isRevertActive && slug && defaultValue) {
|
|
198
|
+
setValue(defaultValue);
|
|
199
|
+
}
|
|
200
|
+
}, [defaultValue, isRevertActive, slug]);
|
|
180
201
|
return /*#__PURE__*/React__default["default"].createElement("div", {
|
|
181
202
|
className: outerElementClasses,
|
|
182
203
|
onFocus: isFluid ? handleFocus : undefined,
|
|
@@ -224,7 +245,7 @@ const NumberInput = /*#__PURE__*/React__default["default"].forwardRef(function N
|
|
|
224
245
|
step: step,
|
|
225
246
|
type: "number",
|
|
226
247
|
value: value
|
|
227
|
-
})), Icon ? /*#__PURE__*/React__default["default"].createElement(Icon, {
|
|
248
|
+
})), normalizedSlug, Icon ? /*#__PURE__*/React__default["default"].createElement(Icon, {
|
|
228
249
|
className: iconClasses
|
|
229
250
|
}) : null, !hideSteppers && /*#__PURE__*/React__default["default"].createElement("div", {
|
|
230
251
|
className: `${prefix}--number__controls`
|
|
@@ -348,6 +369,10 @@ NumberInput.propTypes = {
|
|
|
348
369
|
* Specify the size of the Number Input.
|
|
349
370
|
*/
|
|
350
371
|
size: PropTypes__default["default"].oneOf(['sm', 'md', 'lg']),
|
|
372
|
+
/**
|
|
373
|
+
* Provide a `Slug` component to be rendered inside the `NumberInput` component
|
|
374
|
+
*/
|
|
375
|
+
slug: PropTypes__default["default"].node,
|
|
351
376
|
/**
|
|
352
377
|
* Specify how much the values should increase/decrease upon clicking on up/down button
|
|
353
378
|
*/
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
* This source code is licensed under the Apache-2.0 license found in the
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
6
6
|
*/
|
|
7
|
+
import { ReactNodeLike } from 'prop-types';
|
|
7
8
|
import React, { ChangeEventHandler, ComponentPropsWithRef, ReactNode } from 'react';
|
|
8
9
|
type ExcludedAttributes = 'size';
|
|
9
10
|
interface SelectProps extends Omit<ComponentPropsWithRef<'select'>, ExcludedAttributes> {
|
|
@@ -76,6 +77,10 @@ interface SelectProps extends Omit<ComponentPropsWithRef<'select'>, ExcludedAttr
|
|
|
76
77
|
* Specify the size of the Select Input.
|
|
77
78
|
*/
|
|
78
79
|
size?: 'sm' | 'md' | 'lg';
|
|
80
|
+
/**
|
|
81
|
+
* Provide a `Slug` component to be rendered inside the `Dropdown` component
|
|
82
|
+
*/
|
|
83
|
+
slug?: ReactNodeLike;
|
|
79
84
|
/**
|
|
80
85
|
* Specify whether the control is currently in warning state
|
|
81
86
|
*/
|
|
@@ -85,5 +90,5 @@ interface SelectProps extends Omit<ComponentPropsWithRef<'select'>, ExcludedAttr
|
|
|
85
90
|
*/
|
|
86
91
|
warnText?: ReactNode;
|
|
87
92
|
}
|
|
88
|
-
declare const Select: React.ForwardRefExoticComponent<Pick<SelectProps, "value" | "children" | "disabled" | "form" | "slot" | "style" | "title" | "className" | "size" | "dir" | "defaultChecked" | "defaultValue" | "suppressContentEditableWarning" | "suppressHydrationWarning" | "accessKey" | "autoFocus" | "autoComplete" | "multiple" | "key" | "id" | "aria-controls" | "aria-expanded" | "onClick" | "onAnimationEnd" | "onKeyDown" | "tabIndex" | "color" | "lang" | "name" | "role" | "aria-activedescendant" | "aria-atomic" | "aria-autocomplete" | "aria-busy" | "aria-checked" | "aria-colcount" | "aria-colindex" | "aria-colspan" | "aria-current" | "aria-describedby" | "aria-details" | "aria-disabled" | "aria-dropeffect" | "aria-errormessage" | "aria-flowto" | "aria-grabbed" | "aria-haspopup" | "aria-hidden" | "aria-invalid" | "aria-keyshortcuts" | "aria-label" | "aria-labelledby" | "aria-level" | "aria-live" | "aria-modal" | "aria-multiline" | "aria-multiselectable" | "aria-orientation" | "aria-owns" | "aria-placeholder" | "aria-posinset" | "aria-pressed" | "aria-readonly" | "aria-relevant" | "aria-required" | "aria-roledescription" | "aria-rowcount" | "aria-rowindex" | "aria-rowspan" | "aria-selected" | "aria-setsize" | "aria-sort" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "dangerouslySetInnerHTML" | "onCopy" | "onCopyCapture" | "onCut" | "onCutCapture" | "onPaste" | "onPasteCapture" | "onCompositionEnd" | "onCompositionEndCapture" | "onCompositionStart" | "onCompositionStartCapture" | "onCompositionUpdate" | "onCompositionUpdateCapture" | "onFocus" | "onFocusCapture" | "onBlur" | "onBlurCapture" | "onChange" | "onChangeCapture" | "onBeforeInput" | "onBeforeInputCapture" | "onInput" | "onInputCapture" | "onReset" | "onResetCapture" | "onSubmit" | "onSubmitCapture" | "onInvalid" | "onInvalidCapture" | "onLoad" | "onLoadCapture" | "onError" | "onErrorCapture" | "onKeyDownCapture" | "onKeyPress" | "onKeyPressCapture" | "onKeyUp" | "onKeyUpCapture" | "onAbort" | "onAbortCapture" | "onCanPlay" | "onCanPlayCapture" | "onCanPlayThrough" | "onCanPlayThroughCapture" | "onDurationChange" | "onDurationChangeCapture" | "onEmptied" | "onEmptiedCapture" | "onEncrypted" | "onEncryptedCapture" | "onEnded" | "onEndedCapture" | "onLoadedData" | "onLoadedDataCapture" | "onLoadedMetadata" | "onLoadedMetadataCapture" | "onLoadStart" | "onLoadStartCapture" | "onPause" | "onPauseCapture" | "onPlay" | "onPlayCapture" | "onPlaying" | "onPlayingCapture" | "onProgress" | "onProgressCapture" | "onRateChange" | "onRateChangeCapture" | "onSeeked" | "onSeekedCapture" | "onSeeking" | "onSeekingCapture" | "onStalled" | "onStalledCapture" | "onSuspend" | "onSuspendCapture" | "onTimeUpdate" | "onTimeUpdateCapture" | "onVolumeChange" | "onVolumeChangeCapture" | "onWaiting" | "onWaitingCapture" | "onAuxClick" | "onAuxClickCapture" | "onClickCapture" | "onContextMenu" | "onContextMenuCapture" | "onDoubleClick" | "onDoubleClickCapture" | "onDrag" | "onDragCapture" | "onDragEnd" | "onDragEndCapture" | "onDragEnter" | "onDragEnterCapture" | "onDragExit" | "onDragExitCapture" | "onDragLeave" | "onDragLeaveCapture" | "onDragOver" | "onDragOverCapture" | "onDragStart" | "onDragStartCapture" | "onDrop" | "onDropCapture" | "onMouseDown" | "onMouseDownCapture" | "onMouseEnter" | "onMouseLeave" | "onMouseMove" | "onMouseMoveCapture" | "onMouseOut" | "onMouseOutCapture" | "onMouseOver" | "onMouseOverCapture" | "onMouseUp" | "onMouseUpCapture" | "onSelect" | "onSelectCapture" | "onTouchCancel" | "onTouchCancelCapture" | "onTouchEnd" | "onTouchEndCapture" | "onTouchMove" | "onTouchMoveCapture" | "onTouchStart" | "onTouchStartCapture" | "onPointerDown" | "onPointerDownCapture" | "onPointerMove" | "onPointerMoveCapture" | "onPointerUp" | "onPointerUpCapture" | "onPointerCancel" | "onPointerCancelCapture" | "onPointerEnter" | "onPointerEnterCapture" | "onPointerLeave" | "onPointerLeaveCapture" | "onPointerOver" | "onPointerOverCapture" | "onPointerOut" | "onPointerOutCapture" | "onGotPointerCapture" | "onGotPointerCaptureCapture" | "onLostPointerCapture" | "onLostPointerCaptureCapture" | "onScroll" | "onScrollCapture" | "onWheel" | "onWheelCapture" | "onAnimationStart" | "onAnimationStartCapture" | "onAnimationEndCapture" | "onAnimationIteration" | "onAnimationIterationCapture" | "onTransitionEnd" | "onTransitionEndCapture" | "contentEditable" | "contextMenu" | "draggable" | "hidden" | "placeholder" | "spellCheck" | "translate" | "radioGroup" | "about" | "datatype" | "inlist" | "prefix" | "property" | "resource" | "typeof" | "vocab" | "autoCapitalize" | "autoCorrect" | "autoSave" | "itemProp" | "itemScope" | "itemType" | "itemID" | "itemRef" | "results" | "security" | "unselectable" | "inputMode" | "is" | "inline" | "readOnly" | "required" | "light" | "invalid" | "labelText" | "helperText" | "invalidText" | "hideLabel" | "warn" | "warnText" | "noLabel"> & React.RefAttributes<HTMLSelectElement>>;
|
|
93
|
+
declare const Select: React.ForwardRefExoticComponent<Pick<SelectProps, "value" | "children" | "disabled" | "form" | "slot" | "style" | "title" | "className" | "size" | "dir" | "defaultChecked" | "defaultValue" | "suppressContentEditableWarning" | "suppressHydrationWarning" | "accessKey" | "autoFocus" | "autoComplete" | "multiple" | "key" | "id" | "aria-controls" | "aria-expanded" | "onClick" | "onAnimationEnd" | "onKeyDown" | "tabIndex" | "color" | "lang" | "name" | "role" | "aria-activedescendant" | "aria-atomic" | "aria-autocomplete" | "aria-busy" | "aria-checked" | "aria-colcount" | "aria-colindex" | "aria-colspan" | "aria-current" | "aria-describedby" | "aria-details" | "aria-disabled" | "aria-dropeffect" | "aria-errormessage" | "aria-flowto" | "aria-grabbed" | "aria-haspopup" | "aria-hidden" | "aria-invalid" | "aria-keyshortcuts" | "aria-label" | "aria-labelledby" | "aria-level" | "aria-live" | "aria-modal" | "aria-multiline" | "aria-multiselectable" | "aria-orientation" | "aria-owns" | "aria-placeholder" | "aria-posinset" | "aria-pressed" | "aria-readonly" | "aria-relevant" | "aria-required" | "aria-roledescription" | "aria-rowcount" | "aria-rowindex" | "aria-rowspan" | "aria-selected" | "aria-setsize" | "aria-sort" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "dangerouslySetInnerHTML" | "onCopy" | "onCopyCapture" | "onCut" | "onCutCapture" | "onPaste" | "onPasteCapture" | "onCompositionEnd" | "onCompositionEndCapture" | "onCompositionStart" | "onCompositionStartCapture" | "onCompositionUpdate" | "onCompositionUpdateCapture" | "onFocus" | "onFocusCapture" | "onBlur" | "onBlurCapture" | "onChange" | "onChangeCapture" | "onBeforeInput" | "onBeforeInputCapture" | "onInput" | "onInputCapture" | "onReset" | "onResetCapture" | "onSubmit" | "onSubmitCapture" | "onInvalid" | "onInvalidCapture" | "onLoad" | "onLoadCapture" | "onError" | "onErrorCapture" | "onKeyDownCapture" | "onKeyPress" | "onKeyPressCapture" | "onKeyUp" | "onKeyUpCapture" | "onAbort" | "onAbortCapture" | "onCanPlay" | "onCanPlayCapture" | "onCanPlayThrough" | "onCanPlayThroughCapture" | "onDurationChange" | "onDurationChangeCapture" | "onEmptied" | "onEmptiedCapture" | "onEncrypted" | "onEncryptedCapture" | "onEnded" | "onEndedCapture" | "onLoadedData" | "onLoadedDataCapture" | "onLoadedMetadata" | "onLoadedMetadataCapture" | "onLoadStart" | "onLoadStartCapture" | "onPause" | "onPauseCapture" | "onPlay" | "onPlayCapture" | "onPlaying" | "onPlayingCapture" | "onProgress" | "onProgressCapture" | "onRateChange" | "onRateChangeCapture" | "onSeeked" | "onSeekedCapture" | "onSeeking" | "onSeekingCapture" | "onStalled" | "onStalledCapture" | "onSuspend" | "onSuspendCapture" | "onTimeUpdate" | "onTimeUpdateCapture" | "onVolumeChange" | "onVolumeChangeCapture" | "onWaiting" | "onWaitingCapture" | "onAuxClick" | "onAuxClickCapture" | "onClickCapture" | "onContextMenu" | "onContextMenuCapture" | "onDoubleClick" | "onDoubleClickCapture" | "onDrag" | "onDragCapture" | "onDragEnd" | "onDragEndCapture" | "onDragEnter" | "onDragEnterCapture" | "onDragExit" | "onDragExitCapture" | "onDragLeave" | "onDragLeaveCapture" | "onDragOver" | "onDragOverCapture" | "onDragStart" | "onDragStartCapture" | "onDrop" | "onDropCapture" | "onMouseDown" | "onMouseDownCapture" | "onMouseEnter" | "onMouseLeave" | "onMouseMove" | "onMouseMoveCapture" | "onMouseOut" | "onMouseOutCapture" | "onMouseOver" | "onMouseOverCapture" | "onMouseUp" | "onMouseUpCapture" | "onSelect" | "onSelectCapture" | "onTouchCancel" | "onTouchCancelCapture" | "onTouchEnd" | "onTouchEndCapture" | "onTouchMove" | "onTouchMoveCapture" | "onTouchStart" | "onTouchStartCapture" | "onPointerDown" | "onPointerDownCapture" | "onPointerMove" | "onPointerMoveCapture" | "onPointerUp" | "onPointerUpCapture" | "onPointerCancel" | "onPointerCancelCapture" | "onPointerEnter" | "onPointerEnterCapture" | "onPointerLeave" | "onPointerLeaveCapture" | "onPointerOver" | "onPointerOverCapture" | "onPointerOut" | "onPointerOutCapture" | "onGotPointerCapture" | "onGotPointerCaptureCapture" | "onLostPointerCapture" | "onLostPointerCaptureCapture" | "onScroll" | "onScrollCapture" | "onWheel" | "onWheelCapture" | "onAnimationStart" | "onAnimationStartCapture" | "onAnimationEndCapture" | "onAnimationIteration" | "onAnimationIterationCapture" | "onTransitionEnd" | "onTransitionEndCapture" | "contentEditable" | "contextMenu" | "draggable" | "hidden" | "placeholder" | "spellCheck" | "translate" | "radioGroup" | "about" | "datatype" | "inlist" | "prefix" | "property" | "resource" | "typeof" | "vocab" | "autoCapitalize" | "autoCorrect" | "autoSave" | "itemProp" | "itemScope" | "itemType" | "itemID" | "itemRef" | "results" | "security" | "unselectable" | "inputMode" | "is" | "inline" | "readOnly" | "required" | "light" | "invalid" | "labelText" | "helperText" | "invalidText" | "hideLabel" | "warn" | "warnText" | "slug" | "noLabel"> & React.RefAttributes<HTMLSelectElement>>;
|
|
89
94
|
export default Select;
|
|
@@ -51,6 +51,7 @@ const Select = /*#__PURE__*/React__default["default"].forwardRef(function Select
|
|
|
51
51
|
warn = false,
|
|
52
52
|
warnText,
|
|
53
53
|
onChange,
|
|
54
|
+
slug,
|
|
54
55
|
...other
|
|
55
56
|
} = _ref;
|
|
56
57
|
const prefix = usePrefix.usePrefix();
|
|
@@ -71,7 +72,8 @@ const Select = /*#__PURE__*/React__default["default"].forwardRef(function Select
|
|
|
71
72
|
[`${prefix}--select--readonly`]: readOnly,
|
|
72
73
|
[`${prefix}--select--warning`]: warn,
|
|
73
74
|
[`${prefix}--select--fluid--invalid`]: isFluid && invalid,
|
|
74
|
-
[`${prefix}--select--fluid--focus`]: isFluid && isFocused
|
|
75
|
+
[`${prefix}--select--fluid--focus`]: isFluid && isFocused,
|
|
76
|
+
[`${prefix}--select--slug`]: slug
|
|
75
77
|
});
|
|
76
78
|
const labelClasses = cx__default["default"](`${prefix}--label`, {
|
|
77
79
|
[`${prefix}--visually-hidden`]: hideLabel,
|
|
@@ -133,6 +135,14 @@ const Select = /*#__PURE__*/React__default["default"].forwardRef(function Select
|
|
|
133
135
|
}
|
|
134
136
|
}
|
|
135
137
|
};
|
|
138
|
+
|
|
139
|
+
// Slug is always size `mini`
|
|
140
|
+
let normalizedSlug;
|
|
141
|
+
if (slug) {
|
|
142
|
+
normalizedSlug = /*#__PURE__*/React__default["default"].cloneElement(slug, {
|
|
143
|
+
size: 'mini'
|
|
144
|
+
});
|
|
145
|
+
}
|
|
136
146
|
const input = (() => {
|
|
137
147
|
return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement("select", _rollupPluginBabelHelpers["extends"]({}, other, ariaProps, {
|
|
138
148
|
id: id,
|
|
@@ -170,7 +180,7 @@ const Select = /*#__PURE__*/React__default["default"].forwardRef(function Select
|
|
|
170
180
|
"data-invalid": invalid || null,
|
|
171
181
|
onFocus: handleFocus,
|
|
172
182
|
onBlur: handleFocus
|
|
173
|
-
}, input, isFluid && /*#__PURE__*/React__default["default"].createElement("hr", {
|
|
183
|
+
}, input, normalizedSlug, isFluid && /*#__PURE__*/React__default["default"].createElement("hr", {
|
|
174
184
|
className: `${prefix}--select__divider`
|
|
175
185
|
}), isFluid && error ? error : null), !inline && !isFluid && error ? error : helper));
|
|
176
186
|
});
|
|
@@ -244,6 +254,10 @@ Select.propTypes = {
|
|
|
244
254
|
* Specify the size of the Select Input.
|
|
245
255
|
*/
|
|
246
256
|
size: PropTypes__default["default"].oneOf(['sm', 'md', 'lg']),
|
|
257
|
+
/**
|
|
258
|
+
* Provide a `Slug` component to be rendered inside the `Select` component
|
|
259
|
+
*/
|
|
260
|
+
slug: PropTypes__default["default"].node,
|
|
247
261
|
/**
|
|
248
262
|
* Specify whether the control is currently in warning state
|
|
249
263
|
*/
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright IBM Corp. 2016, 2023
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the Apache-2.0 license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
'use strict';
|
|
9
|
+
|
|
10
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
11
|
+
|
|
12
|
+
var _rollupPluginBabelHelpers = require('../../_virtual/_rollupPluginBabelHelpers.js');
|
|
13
|
+
var cx = require('classnames');
|
|
14
|
+
var PropTypes = require('prop-types');
|
|
15
|
+
var React = require('react');
|
|
16
|
+
var usePrefix = require('../../internal/usePrefix.js');
|
|
17
|
+
var index = require('../Toggletip/index.js');
|
|
18
|
+
var index$1 = require('../IconButton/index.js');
|
|
19
|
+
var iconsReact = require('@carbon/icons-react');
|
|
20
|
+
var useId = require('../../internal/useId.js');
|
|
21
|
+
|
|
22
|
+
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
23
|
+
|
|
24
|
+
var cx__default = /*#__PURE__*/_interopDefaultLegacy(cx);
|
|
25
|
+
var PropTypes__default = /*#__PURE__*/_interopDefaultLegacy(PropTypes);
|
|
26
|
+
var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
|
|
27
|
+
|
|
28
|
+
var _Undo;
|
|
29
|
+
const SlugContent = /*#__PURE__*/React__default["default"].forwardRef(function SlugContent(_ref, ref) {
|
|
30
|
+
let {
|
|
31
|
+
children,
|
|
32
|
+
className
|
|
33
|
+
} = _ref;
|
|
34
|
+
const prefix = usePrefix.usePrefix();
|
|
35
|
+
const slugContentClasses = cx__default["default"](className, {
|
|
36
|
+
[`${prefix}--slug-content`]: true
|
|
37
|
+
});
|
|
38
|
+
return /*#__PURE__*/React__default["default"].createElement(index.ToggletipContent, {
|
|
39
|
+
className: slugContentClasses,
|
|
40
|
+
ref: ref
|
|
41
|
+
}, children);
|
|
42
|
+
});
|
|
43
|
+
SlugContent.propTypes = {
|
|
44
|
+
/**
|
|
45
|
+
* Specify the content you want rendered inside the slug ToggleTip
|
|
46
|
+
*/
|
|
47
|
+
children: PropTypes__default["default"].node,
|
|
48
|
+
/**
|
|
49
|
+
* Specify an optional className to be added to the AI slug callout
|
|
50
|
+
*/
|
|
51
|
+
className: PropTypes__default["default"].string
|
|
52
|
+
};
|
|
53
|
+
const SlugActions = /*#__PURE__*/React__default["default"].forwardRef(function SlugActions(_ref2, ref) {
|
|
54
|
+
let {
|
|
55
|
+
children,
|
|
56
|
+
className
|
|
57
|
+
} = _ref2;
|
|
58
|
+
const prefix = usePrefix.usePrefix();
|
|
59
|
+
const slugActionBarClasses = cx__default["default"](className, {
|
|
60
|
+
[`${prefix}--slug-actions`]: true
|
|
61
|
+
});
|
|
62
|
+
return /*#__PURE__*/React__default["default"].createElement(index.ToggletipActions, {
|
|
63
|
+
className: slugActionBarClasses,
|
|
64
|
+
ref: ref
|
|
65
|
+
}, children);
|
|
66
|
+
});
|
|
67
|
+
SlugActions.propTypes = {
|
|
68
|
+
/**
|
|
69
|
+
* Specify the content you want rendered inside the slug callout toolbar
|
|
70
|
+
*/
|
|
71
|
+
children: PropTypes__default["default"].node,
|
|
72
|
+
/**
|
|
73
|
+
* Specify an optional className to be added to the AI slug toolbar
|
|
74
|
+
*/
|
|
75
|
+
className: PropTypes__default["default"].string
|
|
76
|
+
};
|
|
77
|
+
const Slug = /*#__PURE__*/React__default["default"].forwardRef(function Slug(_ref3, ref) {
|
|
78
|
+
let {
|
|
79
|
+
aiText = 'AI',
|
|
80
|
+
aiTextLabel,
|
|
81
|
+
align,
|
|
82
|
+
autoAlign = true,
|
|
83
|
+
children,
|
|
84
|
+
className,
|
|
85
|
+
dotType,
|
|
86
|
+
kind,
|
|
87
|
+
onRevertClick,
|
|
88
|
+
revertActive,
|
|
89
|
+
revertLabel = 'Revert to AI input',
|
|
90
|
+
slugLabel = 'Show information',
|
|
91
|
+
size = 'xs',
|
|
92
|
+
...rest
|
|
93
|
+
} = _ref3;
|
|
94
|
+
const prefix = usePrefix.usePrefix();
|
|
95
|
+
const id = useId.useId('slug');
|
|
96
|
+
const slugClasses = cx__default["default"](className, {
|
|
97
|
+
[`${prefix}--slug`]: true,
|
|
98
|
+
[`${prefix}--slug--hollow`]: kind === 'hollow' || dotType === 'hollow',
|
|
99
|
+
// Need to come up with a better name; explainable?
|
|
100
|
+
// Need to be able to target the non-hollow variant another way
|
|
101
|
+
// other than using `:not` all over the styles
|
|
102
|
+
[`${prefix}--slug--enabled`]: kind !== 'hollow' && dotType !== 'hollow',
|
|
103
|
+
[`${prefix}--slug--revert`]: revertActive
|
|
104
|
+
});
|
|
105
|
+
const slugButtonClasses = cx__default["default"]({
|
|
106
|
+
[`${prefix}--slug__button`]: true,
|
|
107
|
+
[`${prefix}--slug__button--${size}`]: size,
|
|
108
|
+
[`${prefix}--slug__button--${kind}`]: kind,
|
|
109
|
+
[`${prefix}--slug__button--inline-with-content`]: kind === 'inline' && aiTextLabel
|
|
110
|
+
});
|
|
111
|
+
const handleOnRevertClick = evt => {
|
|
112
|
+
if (onRevertClick) {
|
|
113
|
+
onRevertClick(evt);
|
|
114
|
+
}
|
|
115
|
+
};
|
|
116
|
+
const ariaLabel = `${aiText} - ${slugLabel}`;
|
|
117
|
+
return /*#__PURE__*/React__default["default"].createElement("div", {
|
|
118
|
+
className: slugClasses,
|
|
119
|
+
ref: ref,
|
|
120
|
+
id: id
|
|
121
|
+
}, revertActive ? /*#__PURE__*/React__default["default"].createElement(index$1.IconButton, _rollupPluginBabelHelpers["extends"]({
|
|
122
|
+
onClick: handleOnRevertClick,
|
|
123
|
+
kind: "ghost",
|
|
124
|
+
size: "sm",
|
|
125
|
+
label: revertLabel
|
|
126
|
+
}, rest), _Undo || (_Undo = /*#__PURE__*/React__default["default"].createElement(iconsReact.Undo, null))) : /*#__PURE__*/React__default["default"].createElement(index.Toggletip, _rollupPluginBabelHelpers["extends"]({
|
|
127
|
+
align: align,
|
|
128
|
+
autoAlign: autoAlign
|
|
129
|
+
}, rest), /*#__PURE__*/React__default["default"].createElement(index.ToggletipButton, {
|
|
130
|
+
className: slugButtonClasses,
|
|
131
|
+
label: ariaLabel
|
|
132
|
+
}, /*#__PURE__*/React__default["default"].createElement("span", {
|
|
133
|
+
className: `${prefix}--slug__text`
|
|
134
|
+
}, aiText), aiTextLabel && /*#__PURE__*/React__default["default"].createElement("span", {
|
|
135
|
+
className: `${prefix}--slug__additional-text`
|
|
136
|
+
}, aiTextLabel)), children));
|
|
137
|
+
});
|
|
138
|
+
Slug.propTypes = {
|
|
139
|
+
/**
|
|
140
|
+
* Specify the correct translation of the AI text
|
|
141
|
+
*/
|
|
142
|
+
aiText: PropTypes__default["default"].string,
|
|
143
|
+
/**
|
|
144
|
+
* Specify additional text to be rendered next to the AI label in the inline variant
|
|
145
|
+
*/
|
|
146
|
+
aiTextLabel: PropTypes__default["default"].string,
|
|
147
|
+
/**
|
|
148
|
+
* Specify how the popover should align with the button
|
|
149
|
+
*/
|
|
150
|
+
align: PropTypes__default["default"].oneOf(['top', 'top-left', 'top-right', 'bottom', 'bottom-left', 'bottom-right', 'left', 'left-bottom', 'left-top', 'right', 'right-bottom', 'right-top']),
|
|
151
|
+
/**
|
|
152
|
+
* Will auto-align the popover on first render if it is not visible. This prop is currently experimental and is subject to future changes.
|
|
153
|
+
*/
|
|
154
|
+
autoAlign: PropTypes__default["default"].bool,
|
|
155
|
+
/**
|
|
156
|
+
* Specify the content you want rendered inside the slug ToggleTip
|
|
157
|
+
*/
|
|
158
|
+
children: PropTypes__default["default"].node,
|
|
159
|
+
/**
|
|
160
|
+
* Specify an optional className to be added to the AI slug
|
|
161
|
+
*/
|
|
162
|
+
className: PropTypes__default["default"].string,
|
|
163
|
+
/**
|
|
164
|
+
* Specify the type of dot that should be rendered in front of the inline variant
|
|
165
|
+
*/
|
|
166
|
+
dotType: PropTypes__default["default"].oneOf(['default', 'hollow']),
|
|
167
|
+
/**
|
|
168
|
+
* Specify the type of Slug, from the following list of types:
|
|
169
|
+
*/
|
|
170
|
+
kind: PropTypes__default["default"].oneOf(['default', 'hollow', 'inline']),
|
|
171
|
+
/**
|
|
172
|
+
* Callback function that fires when the revert button is clicked
|
|
173
|
+
*/
|
|
174
|
+
onRevertClick: PropTypes__default["default"].func,
|
|
175
|
+
/**
|
|
176
|
+
* Specify whether the revert button should be visible
|
|
177
|
+
*/
|
|
178
|
+
revertActive: PropTypes__default["default"].bool,
|
|
179
|
+
/**
|
|
180
|
+
* Specify the text that should be shown when the revert button is hovered
|
|
181
|
+
*/
|
|
182
|
+
revertLabel: PropTypes__default["default"].string,
|
|
183
|
+
/**
|
|
184
|
+
* Specify the size of the button, from the following list of sizes:
|
|
185
|
+
*/
|
|
186
|
+
size: PropTypes__default["default"].oneOf(['mini', '2xs', 'xs', 'sm', 'md', 'lg', 'xl']),
|
|
187
|
+
/**
|
|
188
|
+
* Specify the content you want rendered inside the slug ToggleTip
|
|
189
|
+
*/
|
|
190
|
+
slugContent: PropTypes__default["default"].node,
|
|
191
|
+
/**
|
|
192
|
+
* Specify the text that will be provided to the aria-label of the `Slug` button
|
|
193
|
+
*/
|
|
194
|
+
slugLabel: PropTypes__default["default"].string
|
|
195
|
+
};
|
|
196
|
+
|
|
197
|
+
exports.Slug = Slug;
|
|
198
|
+
exports.SlugActions = SlugActions;
|
|
199
|
+
exports.SlugContent = SlugContent;
|
|
@@ -85,6 +85,10 @@ export interface TextAreaProps extends React.InputHTMLAttributes<HTMLTextAreaEle
|
|
|
85
85
|
* Specify the rows attribute for the `<textarea>`
|
|
86
86
|
*/
|
|
87
87
|
rows?: number;
|
|
88
|
+
/**
|
|
89
|
+
* Provide a `Slug` component to be rendered inside the `TextArea` component
|
|
90
|
+
*/
|
|
91
|
+
slug?: ReactNodeLike;
|
|
88
92
|
/**
|
|
89
93
|
* Provide the current value of the `<textarea>`
|
|
90
94
|
*/
|
|
@@ -52,6 +52,7 @@ const TextArea = /*#__PURE__*/React__default["default"].forwardRef((props, forwa
|
|
|
52
52
|
warn = false,
|
|
53
53
|
warnText = '',
|
|
54
54
|
rows = 4,
|
|
55
|
+
slug,
|
|
55
56
|
...other
|
|
56
57
|
} = props;
|
|
57
58
|
const prefix = usePrefix.usePrefix();
|
|
@@ -66,9 +67,19 @@ const TextArea = /*#__PURE__*/React__default["default"].forwardRef((props, forwa
|
|
|
66
67
|
const {
|
|
67
68
|
current: textAreaInstanceId
|
|
68
69
|
} = React.useRef(getInstanceId());
|
|
70
|
+
const textareaRef = React.useRef(null);
|
|
71
|
+
const ref = useMergedRefs.useMergedRefs([forwardRef, textareaRef]);
|
|
69
72
|
React.useEffect(() => {
|
|
70
73
|
setTextCount(defaultValue?.toString()?.length || value?.toString()?.length || 0);
|
|
71
74
|
}, [value, defaultValue]);
|
|
75
|
+
useIsomorphicEffect["default"](() => {
|
|
76
|
+
if (other.cols && textareaRef.current) {
|
|
77
|
+
textareaRef.current.style.width = '';
|
|
78
|
+
textareaRef.current.style.resize = 'none';
|
|
79
|
+
} else if (textareaRef.current) {
|
|
80
|
+
textareaRef.current.style.width = `100%`;
|
|
81
|
+
}
|
|
82
|
+
}, [other.cols]);
|
|
72
83
|
const textareaProps = {
|
|
73
84
|
id,
|
|
74
85
|
onChange: evt => {
|
|
@@ -87,29 +98,36 @@ const TextArea = /*#__PURE__*/React__default["default"].forwardRef((props, forwa
|
|
|
87
98
|
}
|
|
88
99
|
}
|
|
89
100
|
};
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
101
|
+
const formItemClasses = cx__default["default"](`${prefix}--form-item`, className);
|
|
102
|
+
const textAreaWrapperClasses = cx__default["default"](`${prefix}--text-area__wrapper`, {
|
|
103
|
+
[`${prefix}--text-area__wrapper--readonly`]: other.readOnly,
|
|
104
|
+
[`${prefix}--text-area__wrapper--warn`]: warn,
|
|
105
|
+
[`${prefix}--text-area__wrapper--slug`]: slug
|
|
106
|
+
});
|
|
94
107
|
const labelClasses = cx__default["default"](`${prefix}--label`, {
|
|
95
108
|
[`${prefix}--visually-hidden`]: hideLabel && !isFluid,
|
|
96
109
|
[`${prefix}--label--disabled`]: disabled
|
|
97
110
|
});
|
|
111
|
+
const textareaClasses = cx__default["default"](`${prefix}--text-area`, {
|
|
112
|
+
[`${prefix}--text-area--light`]: light,
|
|
113
|
+
[`${prefix}--text-area--invalid`]: invalid,
|
|
114
|
+
[`${prefix}--text-area--warn`]: warn
|
|
115
|
+
});
|
|
116
|
+
const counterClasses = cx__default["default"](`${prefix}--label`, {
|
|
117
|
+
[`${prefix}--label--disabled`]: disabled
|
|
118
|
+
});
|
|
119
|
+
const helperTextClasses = cx__default["default"](`${prefix}--form__helper-text`, {
|
|
120
|
+
[`${prefix}--form__helper-text--disabled`]: disabled
|
|
121
|
+
});
|
|
98
122
|
const label = labelText ? /*#__PURE__*/React__default["default"].createElement(Text.Text, {
|
|
99
123
|
as: "label",
|
|
100
124
|
htmlFor: id,
|
|
101
125
|
className: labelClasses
|
|
102
126
|
}, labelText) : null;
|
|
103
|
-
const counterClasses = cx__default["default"](`${prefix}--label`, {
|
|
104
|
-
[`${prefix}--label--disabled`]: disabled
|
|
105
|
-
});
|
|
106
127
|
const counter = enableCounter && maxCount ? /*#__PURE__*/React__default["default"].createElement(Text.Text, {
|
|
107
128
|
as: "div",
|
|
108
129
|
className: counterClasses
|
|
109
130
|
}, `${textCount}/${maxCount}`) : null;
|
|
110
|
-
const helperTextClasses = cx__default["default"](`${prefix}--form__helper-text`, {
|
|
111
|
-
[`${prefix}--form__helper-text--disabled`]: disabled
|
|
112
|
-
});
|
|
113
131
|
const helperId = !helperText ? undefined : `text-area-helper-text-${textAreaInstanceId}`;
|
|
114
132
|
const helper = helperText ? /*#__PURE__*/React__default["default"].createElement(Text.Text, {
|
|
115
133
|
as: "div",
|
|
@@ -132,27 +150,16 @@ const TextArea = /*#__PURE__*/React__default["default"].forwardRef((props, forwa
|
|
|
132
150
|
}, warnText, isFluid && /*#__PURE__*/React__default["default"].createElement(iconsReact.WarningAltFilled, {
|
|
133
151
|
className: `${prefix}--text-area__invalid-icon ${prefix}--text-area__invalid-icon--warning`
|
|
134
152
|
})) : null;
|
|
135
|
-
const textareaClasses = cx__default["default"](`${prefix}--text-area`, {
|
|
136
|
-
[`${prefix}--text-area--light`]: light,
|
|
137
|
-
[`${prefix}--text-area--invalid`]: invalid,
|
|
138
|
-
[`${prefix}--text-area--warn`]: warn
|
|
139
|
-
});
|
|
140
|
-
const textareaRef = React.useRef(null);
|
|
141
|
-
const ref = useMergedRefs.useMergedRefs([forwardRef, textareaRef]);
|
|
142
|
-
useIsomorphicEffect["default"](() => {
|
|
143
|
-
if (other.cols && textareaRef.current) {
|
|
144
|
-
textareaRef.current.style.width = '';
|
|
145
|
-
textareaRef.current.style.resize = 'none';
|
|
146
|
-
} else if (textareaRef.current) {
|
|
147
|
-
textareaRef.current.style.width = `100%`;
|
|
148
|
-
}
|
|
149
|
-
}, [other.cols]);
|
|
150
153
|
let ariaDescribedBy;
|
|
151
154
|
if (invalid) {
|
|
152
155
|
ariaDescribedBy = errorId;
|
|
153
156
|
} else if (!invalid && !warn && !isFluid && helperText) {
|
|
154
157
|
ariaDescribedBy = helperId;
|
|
155
158
|
}
|
|
159
|
+
if (enableCounter) {
|
|
160
|
+
textareaProps.maxLength = maxCount;
|
|
161
|
+
}
|
|
162
|
+
const ariaAnnouncement = useAnnouncer.useAnnouncer(textCount, maxCount);
|
|
156
163
|
const input = /*#__PURE__*/React__default["default"].createElement("textarea", _rollupPluginBabelHelpers["extends"]({}, other, textareaProps, {
|
|
157
164
|
placeholder: placeholder,
|
|
158
165
|
className: textareaClasses,
|
|
@@ -163,21 +170,26 @@ const TextArea = /*#__PURE__*/React__default["default"].forwardRef((props, forwa
|
|
|
163
170
|
readOnly: other.readOnly,
|
|
164
171
|
ref: ref
|
|
165
172
|
}));
|
|
173
|
+
|
|
174
|
+
// Slug is always size `mini`
|
|
175
|
+
let normalizedSlug;
|
|
176
|
+
if (slug) {
|
|
177
|
+
normalizedSlug = /*#__PURE__*/React__default["default"].cloneElement(slug, {
|
|
178
|
+
size: 'mini'
|
|
179
|
+
});
|
|
180
|
+
}
|
|
166
181
|
return /*#__PURE__*/React__default["default"].createElement("div", {
|
|
167
|
-
className:
|
|
182
|
+
className: formItemClasses
|
|
168
183
|
}, /*#__PURE__*/React__default["default"].createElement("div", {
|
|
169
184
|
className: `${prefix}--text-area__label-wrapper`
|
|
170
185
|
}, label, counter), /*#__PURE__*/React__default["default"].createElement("div", {
|
|
171
|
-
className:
|
|
172
|
-
[`${prefix}--text-area__wrapper--readonly`]: other.readOnly,
|
|
173
|
-
[`${prefix}--text-area__wrapper--warn`]: warn
|
|
174
|
-
}),
|
|
186
|
+
className: textAreaWrapperClasses,
|
|
175
187
|
"data-invalid": invalid || null
|
|
176
188
|
}, invalid && !isFluid && /*#__PURE__*/React__default["default"].createElement(iconsReact.WarningFilled, {
|
|
177
189
|
className: `${prefix}--text-area__invalid-icon`
|
|
178
190
|
}), warn && !invalid && !isFluid && /*#__PURE__*/React__default["default"].createElement(iconsReact.WarningAltFilled, {
|
|
179
191
|
className: `${prefix}--text-area__invalid-icon ${prefix}--text-area__invalid-icon--warning`
|
|
180
|
-
}), input, /*#__PURE__*/React__default["default"].createElement("span", {
|
|
192
|
+
}), input, normalizedSlug, /*#__PURE__*/React__default["default"].createElement("span", {
|
|
181
193
|
className: `${prefix}--text-area__counter-alert`,
|
|
182
194
|
role: "alert"
|
|
183
195
|
}, ariaAnnouncement), isFluid && /*#__PURE__*/React__default["default"].createElement("hr", {
|
|
@@ -263,6 +275,10 @@ TextArea.propTypes = {
|
|
|
263
275
|
* Specify the rows attribute for the `<textarea>`
|
|
264
276
|
*/
|
|
265
277
|
rows: PropTypes__default["default"].number,
|
|
278
|
+
/**
|
|
279
|
+
* Provide a `Slug` component to be rendered inside the `TextArea` component
|
|
280
|
+
*/
|
|
281
|
+
slug: PropTypes__default["default"].node,
|
|
266
282
|
/**
|
|
267
283
|
* Provide the current value of the `<textarea>`
|
|
268
284
|
*/
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
* This source code is licensed under the Apache-2.0 license found in the
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
6
6
|
*/
|
|
7
|
+
import { ReactNodeLike } from 'prop-types';
|
|
7
8
|
import React, { ReactNode } from 'react';
|
|
8
9
|
type ExcludedAttributes = 'defaultValue' | 'id' | 'size' | 'value';
|
|
9
10
|
export interface TextInputProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, ExcludedAttributes> {
|
|
@@ -85,6 +86,10 @@ export interface TextInputProps extends Omit<React.InputHTMLAttributes<HTMLInput
|
|
|
85
86
|
* Specify the size of the Text Input. Currently supports the following:
|
|
86
87
|
*/
|
|
87
88
|
size?: 'sm' | 'md' | 'lg' | 'xl';
|
|
89
|
+
/**
|
|
90
|
+
* Provide a `Slug` component to be rendered inside the `TextInput` component
|
|
91
|
+
*/
|
|
92
|
+
slug?: ReactNodeLike;
|
|
88
93
|
/**
|
|
89
94
|
* Specify the type of the `<input>`
|
|
90
95
|
*/
|