@cloud-ru/ds-fields 1.0.8-preview-563d8ff6.0 → 1.0.8-preview-13225cc1.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/README.md +22 -19
- package/dist/cjs/components/FieldTextArea/FieldTextArea.d.ts +7 -1
- package/dist/cjs/components/FieldTextArea/FieldTextArea.js +4 -4
- package/dist/esm/components/FieldTextArea/FieldTextArea.d.ts +7 -1
- package/dist/esm/components/FieldTextArea/FieldTextArea.js +4 -4
- package/dist/tsconfig.cjs.tsbuildinfo +1 -1
- package/dist/tsconfig.esm.tsbuildinfo +1 -1
- package/package.json +14 -14
- package/src/components/FieldTextArea/FieldTextArea.tsx +11 -4
package/README.md
CHANGED
|
@@ -216,24 +216,6 @@ export function Affixes() {
|
|
|
216
216
|
| `variant` | `"after"` \| `"before"` | — | Положение относительно поля |
|
|
217
217
|
| `withDropdownList` | `boolean \| undefined` | — | Показать шеврон раскрытия |
|
|
218
218
|
|
|
219
|
-
**FieldElementDroplistProps**
|
|
220
|
-
|
|
221
|
-
| Prop | Type | Default | Description |
|
|
222
|
-
|------|------|---------|-------------|
|
|
223
|
-
| `closeDroplistOnItemClick` | `boolean \| undefined` | — | Закрывать выпадающий список после клика на базовый айтем. <br/> Работает в режимах selection: 'none' \| 'single' |
|
|
224
|
-
| `items` | `BaseItemWithoutNonGroup` \| `CommonGroupItem` \| `Item` \| `ScrollProps` | — | Основные элементы списка |
|
|
225
|
-
| `onOpenChange` | `((open: boolean) => void) \| undefined` | — | Колбек смены состояния раскрытия |
|
|
226
|
-
| `open` | `boolean \| undefined` | — | Контролируемое состояние раскрытия |
|
|
227
|
-
| `pinBottom` | `BaseItemWithoutNonGroup` \| `CommonGroupItem` \| `Item` \| `ScrollProps` | — | Элементы списка, закрепленные снизу |
|
|
228
|
-
| `pinTop` | `BaseItemWithoutNonGroup` \| `CommonGroupItem` \| `Item` \| `ScrollProps` | — | Элементы списка, закрепленные сверху |
|
|
229
|
-
| `placement` | `"bottom"` \| `"bottom-end"` \| `"bottom-start"` \| `"left"` \| `"left-end"` \| `"left-start"` \| `"right"` \| `"right-end"` \| `"right-start"` \| `"top"` \| `"top-end"` \| `"top-start"` | — | Положение поповера относительно своего триггера (children). |
|
|
230
|
-
| `scroll` | `boolean \| undefined` | — | Включить ли скролл для основной части списка |
|
|
231
|
-
| `scrollToSelectedItem` | `boolean \| undefined` | — | Флаг, отвечающий за прокручивание до выбранного элемента |
|
|
232
|
-
| `search` | `SearchState` | — | Настройки поисковой строки |
|
|
233
|
-
| `selection` | `SelectionMultipleState` \| `SelectionSingleState` | — | Настройки выбора элементов. `mode: 'single'` — один выбранный элемент (`value: ItemId`), <br/> `mode: 'multiple'` — множественный выбор (`value: ItemId[]`). Без `selection` выбора нет — <br/> клик вызывает только `onClick` элемента. |
|
|
234
|
-
| `virtualized` | `boolean \| undefined` | — | Включить виртуализацию элементов списка. Рекомендуется при количестве элементов от 1000. |
|
|
235
|
-
| `widthStrategy` | `"auto"` \| `"eq"` \| `"gte"` | — | Стратегия управления шириной контейнера поповера <br/> - `auto` - соответствует ширине контента, <br/> - `gte` - Great Than or Equal, равен ширине таргета или больше ее, если контент в поповере шире, <br/> - `eq` - Equal, строго равен ширине таргета. |
|
|
236
|
-
|
|
237
219
|
**FieldElementSlot**
|
|
238
220
|
|
|
239
221
|
| Prop | Type | Default | Description |
|
|
@@ -249,6 +231,15 @@ export function Affixes() {
|
|
|
249
231
|
| `tabIndex` | `number \| undefined` | — | HTML tabIndex (`-1` — исключить кнопку из tab-order, фокус по Tab уходит в поле) |
|
|
250
232
|
| `withDropdownList` | `boolean \| undefined` | — | Показать шеврон раскрытия |
|
|
251
233
|
|
|
234
|
+
**FieldLayoutPresets**
|
|
235
|
+
|
|
236
|
+
| Prop | Type | Default | Description |
|
|
237
|
+
|------|------|---------|-------------|
|
|
238
|
+
| `desktop` | `any` | — | |
|
|
239
|
+
| `desktopSmall` | `any` | — | |
|
|
240
|
+
| `mobile` | `any` | — | |
|
|
241
|
+
| `tablet` | `any` | — | |
|
|
242
|
+
|
|
252
243
|
- `Variant` = `"after"` \| `"before"`
|
|
253
244
|
|
|
254
245
|
## FieldDate
|
|
@@ -512,6 +503,17 @@ export function Select() {
|
|
|
512
503
|
| `virtualized` | `boolean` | — | Включить виртуализацию элементов списка. Рекомендуется при количестве элементов от 1000. |
|
|
513
504
|
| `widthStrategy` | `"auto"` \| `"eq"` \| `"gte"` | `'eq' — равна ширине триггера` | Стратегия ширины дроплиста. |
|
|
514
505
|
|
|
506
|
+
#### Related types
|
|
507
|
+
|
|
508
|
+
**FieldLayoutPresets**
|
|
509
|
+
|
|
510
|
+
| Prop | Type | Default | Description |
|
|
511
|
+
|------|------|---------|-------------|
|
|
512
|
+
| `desktop` | `any` | — | |
|
|
513
|
+
| `desktopSmall` | `any` | — | |
|
|
514
|
+
| `mobile` | `any` | — | |
|
|
515
|
+
| `tablet` | `any` | — | |
|
|
516
|
+
|
|
515
517
|
## FieldSlider
|
|
516
518
|
|
|
517
519
|
```tsx
|
|
@@ -802,7 +804,8 @@ export function TextArea() {
|
|
|
802
804
|
| `required` | `boolean` | — | Показать знак обязательности `*` |
|
|
803
805
|
| `resizable` | `boolean` | `false` | Можно ли менять высоту мышкой за нижний угол. Игнорируется при `disabled` или `readonly`. |
|
|
804
806
|
| `showClearButton` | `boolean` | `true` | Кнопка очистки (видна при value && !readonly) |
|
|
805
|
-
| `showCopyButton` | `boolean` | `true` | Кнопка копирования (видна при value
|
|
807
|
+
| `showCopyButton` | `boolean` | `true` | Кнопка копирования (видна при непустом value в режиме readonly, как у остальных полей) |
|
|
808
|
+
| `showCopyButtonInEditMode` | `boolean` | `false` | Показывать кнопку копирования и в обычном (не readonly) режиме — рядом с кнопкой очистки. <br/> Опция только для textarea: в многострочном поле копирование значения осмысленно и при вводе. |
|
|
806
809
|
| `showHintIcon` | `boolean` | — | Отображение статус-иконки у подсказки (по умолчанию `true`) |
|
|
807
810
|
| `size` | `"l"` \| `"m"` \| `"s"` | `m` | Размер |
|
|
808
811
|
| `spellCheck` | `boolean` | — | Проверка орфографии |
|
|
@@ -77,10 +77,16 @@ type FieldTextAreaOwnProps = {
|
|
|
77
77
|
*/
|
|
78
78
|
showClearButton?: boolean;
|
|
79
79
|
/**
|
|
80
|
-
* Кнопка копирования (видна при value
|
|
80
|
+
* Кнопка копирования (видна при непустом value в режиме readonly, как у остальных полей)
|
|
81
81
|
* @default true
|
|
82
82
|
*/
|
|
83
83
|
showCopyButton?: boolean;
|
|
84
|
+
/**
|
|
85
|
+
* Показывать кнопку копирования и в обычном (не readonly) режиме — рядом с кнопкой очистки.
|
|
86
|
+
* Опция только для textarea: в многострочном поле копирование значения осмысленно и при вводе.
|
|
87
|
+
* @default false
|
|
88
|
+
*/
|
|
89
|
+
showCopyButtonInEditMode?: boolean;
|
|
84
90
|
/** Колбек после копирования */
|
|
85
91
|
onCopyButtonClick?(): void;
|
|
86
92
|
/** Колбек фокуса */
|
|
@@ -18,7 +18,7 @@ const hooks_1 = require("../../hooks");
|
|
|
18
18
|
const shared_1 = require("../shared");
|
|
19
19
|
const styles_module_scss_1 = __importDefault(require('../shared/styles.module.css'));
|
|
20
20
|
const styles_module_scss_2 = __importDefault(require('./styles.module.css'));
|
|
21
|
-
exports.FieldTextArea = (0, react_1.forwardRef)(function FieldTextArea({ label = '', labelTooltip, caption, hint, error, validationState = field_decorator_1.VALIDATION_STATE.Default, showHintIcon, length, required, size = field_decorator_1.SIZE.M, className, fieldClassName, background = true, value: valueProp, defaultValue = '', onChange, placeholder, id, name, maxLength, disabled, readonly: readOnly, autoFocus, layoutPresets, inputMode, spellCheck, minRows = 3, maxRows = 1000, resizable = false, allowMoreThanMaxLength = true, header, footer, showClearButton: showClearButtonProp = true, showCopyButton: showCopyButtonProp = true, onCopyButtonClick, onFocus: onFocusProp, onBlur: onBlurProp, onKeyDown: onKeyDownProp, 'data-test-id': dataTestId, ...rest }, ref) {
|
|
21
|
+
exports.FieldTextArea = (0, react_1.forwardRef)(function FieldTextArea({ label = '', labelTooltip, caption, hint, error, validationState = field_decorator_1.VALIDATION_STATE.Default, showHintIcon, length, required, size = field_decorator_1.SIZE.M, className, fieldClassName, background = true, value: valueProp, defaultValue = '', onChange, placeholder, id, name, maxLength, disabled, readonly: readOnly, autoFocus, layoutPresets, inputMode, spellCheck, minRows = 3, maxRows = 1000, resizable = false, allowMoreThanMaxLength = true, header, footer, showClearButton: showClearButtonProp = true, showCopyButton: showCopyButtonProp = true, showCopyButtonInEditMode = false, onCopyButtonClick, onFocus: onFocusProp, onBlur: onBlurProp, onKeyDown: onKeyDownProp, 'data-test-id': dataTestId, ...rest }, ref) {
|
|
22
22
|
const localRef = (0, react_1.useRef)(null);
|
|
23
23
|
const clearButtonRef = (0, react_1.useRef)(null);
|
|
24
24
|
const copyButtonRef = (0, react_1.useRef)(null);
|
|
@@ -37,9 +37,9 @@ exports.FieldTextArea = (0, react_1.forwardRef)(function FieldTextArea({ label =
|
|
|
37
37
|
const stringValue = String(value ?? '');
|
|
38
38
|
const isResizable = resizable && !disabled && !readOnly;
|
|
39
39
|
const showClearUi = Boolean(showClearButtonProp && stringValue && !readOnly && !disabled);
|
|
40
|
-
//
|
|
41
|
-
//
|
|
42
|
-
const showCopyUi = Boolean(showCopyButtonProp && stringValue && !disabled);
|
|
40
|
+
// По умолчанию copy — только в readonly, как у остальных полей. В editable-режиме кнопка
|
|
41
|
+
// появляется лишь по явному `showCopyButtonInEditMode`; тогда видны обе (clear + copy).
|
|
42
|
+
const showCopyUi = Boolean(showCopyButtonProp && stringValue && !disabled && (readOnly || showCopyButtonInEditMode));
|
|
43
43
|
const onClear = (0, react_1.useCallback)(() => {
|
|
44
44
|
setValue('');
|
|
45
45
|
onChange?.('');
|
|
@@ -77,10 +77,16 @@ type FieldTextAreaOwnProps = {
|
|
|
77
77
|
*/
|
|
78
78
|
showClearButton?: boolean;
|
|
79
79
|
/**
|
|
80
|
-
* Кнопка копирования (видна при value
|
|
80
|
+
* Кнопка копирования (видна при непустом value в режиме readonly, как у остальных полей)
|
|
81
81
|
* @default true
|
|
82
82
|
*/
|
|
83
83
|
showCopyButton?: boolean;
|
|
84
|
+
/**
|
|
85
|
+
* Показывать кнопку копирования и в обычном (не readonly) режиме — рядом с кнопкой очистки.
|
|
86
|
+
* Опция только для textarea: в многострочном поле копирование значения осмысленно и при вводе.
|
|
87
|
+
* @default false
|
|
88
|
+
*/
|
|
89
|
+
showCopyButtonInEditMode?: boolean;
|
|
84
90
|
/** Колбек после копирования */
|
|
85
91
|
onCopyButtonClick?(): void;
|
|
86
92
|
/** Колбек фокуса */
|
|
@@ -12,7 +12,7 @@ import { useAdaptiveAutoFocus } from '../../hooks/index.js';
|
|
|
12
12
|
import { copyTextToClipboard, FieldShell, toInputSize, useCopyButton } from '../shared/index.js';
|
|
13
13
|
import fieldStyles from '../shared/styles.module.css';
|
|
14
14
|
import styles from './styles.module.css';
|
|
15
|
-
export const FieldTextArea = forwardRef(function FieldTextArea({ label = '', labelTooltip, caption, hint, error, validationState = VALIDATION_STATE.Default, showHintIcon, length, required, size = SIZE.M, className, fieldClassName, background = true, value: valueProp, defaultValue = '', onChange, placeholder, id, name, maxLength, disabled, readonly: readOnly, autoFocus, layoutPresets, inputMode, spellCheck, minRows = 3, maxRows = 1000, resizable = false, allowMoreThanMaxLength = true, header, footer, showClearButton: showClearButtonProp = true, showCopyButton: showCopyButtonProp = true, onCopyButtonClick, onFocus: onFocusProp, onBlur: onBlurProp, onKeyDown: onKeyDownProp, 'data-test-id': dataTestId, ...rest }, ref) {
|
|
15
|
+
export const FieldTextArea = forwardRef(function FieldTextArea({ label = '', labelTooltip, caption, hint, error, validationState = VALIDATION_STATE.Default, showHintIcon, length, required, size = SIZE.M, className, fieldClassName, background = true, value: valueProp, defaultValue = '', onChange, placeholder, id, name, maxLength, disabled, readonly: readOnly, autoFocus, layoutPresets, inputMode, spellCheck, minRows = 3, maxRows = 1000, resizable = false, allowMoreThanMaxLength = true, header, footer, showClearButton: showClearButtonProp = true, showCopyButton: showCopyButtonProp = true, showCopyButtonInEditMode = false, onCopyButtonClick, onFocus: onFocusProp, onBlur: onBlurProp, onKeyDown: onKeyDownProp, 'data-test-id': dataTestId, ...rest }, ref) {
|
|
16
16
|
const localRef = useRef(null);
|
|
17
17
|
const clearButtonRef = useRef(null);
|
|
18
18
|
const copyButtonRef = useRef(null);
|
|
@@ -31,9 +31,9 @@ export const FieldTextArea = forwardRef(function FieldTextArea({ label = '', lab
|
|
|
31
31
|
const stringValue = String(value ?? '');
|
|
32
32
|
const isResizable = resizable && !disabled && !readOnly;
|
|
33
33
|
const showClearUi = Boolean(showClearButtonProp && stringValue && !readOnly && !disabled);
|
|
34
|
-
//
|
|
35
|
-
//
|
|
36
|
-
const showCopyUi = Boolean(showCopyButtonProp && stringValue && !disabled);
|
|
34
|
+
// По умолчанию copy — только в readonly, как у остальных полей. В editable-режиме кнопка
|
|
35
|
+
// появляется лишь по явному `showCopyButtonInEditMode`; тогда видны обе (clear + copy).
|
|
36
|
+
const showCopyUi = Boolean(showCopyButtonProp && stringValue && !disabled && (readOnly || showCopyButtonInEditMode));
|
|
37
37
|
const onClear = useCallback(() => {
|
|
38
38
|
setValue('');
|
|
39
39
|
onChange?.('');
|