@cloud-ru/ds-uikit-product-fields-predefined 2.0.16-preview-d90ac2be.0 → 2.0.16
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/CHANGELOG.md +8 -0
- package/dist/cjs/components/FieldChat/FieldChat.js +1 -1
- package/dist/cjs/components/FieldChat/components/Attachments/styles.module.css +1 -1
- package/dist/cjs/components/FieldChat/components/TextAreaActionsFooter/styles.module.css +4 -2
- package/dist/cjs/components/FieldChat/styles.module.css +2 -4
- package/dist/cjs/components/FieldCode/FieldCode.js +1 -1
- package/dist/cjs/components/FieldCode/styles.module.css +4 -17
- package/dist/cjs/components/FieldPhone/FieldPhone.js +4 -1
- package/dist/cjs/components/FieldPhone/constants.d.ts +7 -1
- package/dist/cjs/components/FieldPhone/constants.js +7 -2
- package/dist/cjs/components/FieldSelectCreate/FieldSelectCreate.js +2 -2
- package/dist/cjs/components/FieldSelectCreate/helperComponents/SelectFooter/SelectFooter.d.ts +3 -1
- package/dist/cjs/components/FieldSelectCreate/helperComponents/SelectFooter/SelectFooter.js +2 -2
- package/dist/cjs/components/FieldSelectCreate/helperComponents/SelectFooter/styles.module.css +1 -2
- package/dist/cjs/components/FieldSelectCreate/styles.module.css +2 -1
- package/dist/cjs/style.css +14 -27
- package/dist/esm/components/FieldChat/FieldChat.js +1 -1
- package/dist/esm/components/FieldChat/components/Attachments/styles.module.css +1 -1
- package/dist/esm/components/FieldChat/components/TextAreaActionsFooter/styles.module.css +4 -2
- package/dist/esm/components/FieldChat/styles.module.css +2 -4
- package/dist/esm/components/FieldCode/FieldCode.js +1 -1
- package/dist/esm/components/FieldCode/styles.module.css +4 -17
- package/dist/esm/components/FieldPhone/FieldPhone.js +6 -3
- package/dist/esm/components/FieldPhone/constants.d.ts +7 -1
- package/dist/esm/components/FieldPhone/constants.js +6 -1
- package/dist/esm/components/FieldSelectCreate/FieldSelectCreate.js +2 -2
- package/dist/esm/components/FieldSelectCreate/helperComponents/SelectFooter/SelectFooter.d.ts +3 -1
- package/dist/esm/components/FieldSelectCreate/helperComponents/SelectFooter/SelectFooter.js +2 -2
- package/dist/esm/components/FieldSelectCreate/helperComponents/SelectFooter/styles.module.css +1 -2
- package/dist/esm/components/FieldSelectCreate/styles.module.css +2 -1
- package/dist/esm/style.css +14 -27
- package/dist/tsconfig.cjs.tsbuildinfo +1 -1
- package/dist/tsconfig.esm.tsbuildinfo +1 -1
- package/package.json +16 -16
- package/src/components/FieldChat/FieldChat.tsx +1 -1
- package/src/components/FieldChat/components/Attachments/styles.module.scss +1 -1
- package/src/components/FieldChat/components/TextAreaActionsFooter/styles.module.scss +5 -2
- package/src/components/FieldChat/styles.module.scss +3 -5
- package/src/components/FieldCode/FieldCode.tsx +1 -6
- package/src/components/FieldCode/styles.module.scss +5 -17
- package/src/components/FieldPhone/FieldPhone.tsx +16 -3
- package/src/components/FieldPhone/constants.ts +9 -1
- package/src/components/FieldSelectCreate/FieldSelectCreate.tsx +2 -1
- package/src/components/FieldSelectCreate/helperComponents/SelectFooter/SelectFooter.tsx +4 -2
- package/src/components/FieldSelectCreate/helperComponents/SelectFooter/styles.module.scss +2 -4
- package/src/components/FieldSelectCreate/styles.module.scss +2 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cloud-ru/ds-uikit-product-fields-predefined",
|
|
3
|
-
"version": "2.0.16
|
|
3
|
+
"version": "2.0.16",
|
|
4
4
|
"description": "Набор предопределённых полей формы поверх @ds/fields — телефон, маски, имя, описание, код и другие готовые сценарии ввода.",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -44,21 +44,21 @@
|
|
|
44
44
|
"imask": "^7.6.1",
|
|
45
45
|
"merge-refs": "^2.0.0",
|
|
46
46
|
"react-imask": "^7.6.1",
|
|
47
|
-
"@cloud-ru/ds-
|
|
48
|
-
"@cloud-ru/ds-
|
|
49
|
-
"@cloud-ru/ds-
|
|
50
|
-
"@cloud-ru/ds-
|
|
51
|
-
"@cloud-ru/ds-
|
|
52
|
-
"@cloud-ru/ds-
|
|
53
|
-
"@cloud-ru/ds-
|
|
54
|
-
"@cloud-ru/ds-
|
|
55
|
-
"@cloud-ru/ds-
|
|
56
|
-
"@cloud-ru/ds-
|
|
57
|
-
"@cloud-ru/ds-locale": "1.0.0",
|
|
58
|
-
"@cloud-ru/ds-
|
|
59
|
-
"@cloud-ru/ds-tooltip": "1.0.
|
|
60
|
-
"@cloud-ru/ds-utils": "1.1.0",
|
|
61
|
-
"@cloud-ru/ds-
|
|
47
|
+
"@cloud-ru/ds-attachment": "^1.1.9",
|
|
48
|
+
"@cloud-ru/ds-drawer": "^1.2.2",
|
|
49
|
+
"@cloud-ru/ds-adaptive": "^1.0.1",
|
|
50
|
+
"@cloud-ru/ds-dropzone": "^1.0.2",
|
|
51
|
+
"@cloud-ru/ds-field-decorator": "^1.0.7",
|
|
52
|
+
"@cloud-ru/ds-fields": "^2.3.0",
|
|
53
|
+
"@cloud-ru/ds-input-private": "^1.0.6",
|
|
54
|
+
"@cloud-ru/ds-icons": "^1.2.1",
|
|
55
|
+
"@cloud-ru/ds-list": "^2.2.1",
|
|
56
|
+
"@cloud-ru/ds-modal": "^1.1.3",
|
|
57
|
+
"@cloud-ru/ds-locale": "^1.0.0",
|
|
58
|
+
"@cloud-ru/ds-scroll": "^1.0.3",
|
|
59
|
+
"@cloud-ru/ds-tooltip": "^1.0.6",
|
|
60
|
+
"@cloud-ru/ds-utils": "^1.1.0",
|
|
61
|
+
"@cloud-ru/ds-button": "^1.0.3"
|
|
62
62
|
},
|
|
63
63
|
"peerDependencies": {
|
|
64
64
|
"react-hook-form": "^7.79.0",
|
|
@@ -55,7 +55,7 @@ export function FieldChat({ handleSubmit: handleSubmitProp, value, attachment, a
|
|
|
55
55
|
};
|
|
56
56
|
|
|
57
57
|
return (
|
|
58
|
-
<div className={styles.fieldChat}
|
|
58
|
+
<div className={styles.fieldChat}>
|
|
59
59
|
{isMobile && <Attachments files={files} isMobile={isMobile} />}
|
|
60
60
|
|
|
61
61
|
<FieldTextArea
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
.attachments {
|
|
10
10
|
display: flex;
|
|
11
11
|
gap: base.$sn-primitive-dimension-8;
|
|
12
|
-
|
|
12
|
+
box-sizing: border-box;
|
|
13
13
|
|
|
14
14
|
// Превью сохраняют свой размер и уезжают в горизонтальный скролл,
|
|
15
15
|
// а не сжимаются под ширину контейнера.
|
|
@@ -6,8 +6,9 @@
|
|
|
6
6
|
align-items: center;
|
|
7
7
|
justify-content: space-between;
|
|
8
8
|
|
|
9
|
+
box-sizing: border-box;
|
|
9
10
|
width: 100%;
|
|
10
|
-
padding
|
|
11
|
+
padding: base.$sn-primitive-dimension-8;
|
|
11
12
|
}
|
|
12
13
|
|
|
13
14
|
.actionsLeft {
|
|
@@ -15,6 +16,8 @@
|
|
|
15
16
|
flex-direction: row;
|
|
16
17
|
gap: base.$sn-primitive-dimension-8;
|
|
17
18
|
align-items: center;
|
|
19
|
+
|
|
20
|
+
box-sizing: border-box;
|
|
18
21
|
}
|
|
19
22
|
|
|
20
23
|
.actionsRight {
|
|
@@ -24,6 +27,6 @@
|
|
|
24
27
|
align-items: center;
|
|
25
28
|
justify-content: flex-end;
|
|
26
29
|
|
|
30
|
+
box-sizing: border-box;
|
|
27
31
|
width: 100%;
|
|
28
|
-
padding-right: base.$sn-primitive-dimension-8;
|
|
29
32
|
}
|
|
@@ -3,16 +3,14 @@
|
|
|
3
3
|
.fieldChat {
|
|
4
4
|
display: flex;
|
|
5
5
|
flex-direction: column;
|
|
6
|
-
gap: base.$sn-primitive-dimension-
|
|
6
|
+
gap: base.$sn-primitive-dimension-8;
|
|
7
|
+
|
|
8
|
+
box-sizing: border-box;
|
|
7
9
|
// Заполняем контейнер и не даём полю растягиваться под контент (ряд вложений):
|
|
8
10
|
// без этого `.fieldChat` shrink-wrap'ится по самому широкому ребёнку (скролл превью)
|
|
9
11
|
// и вылезает за родителя, а горизонтальный скролл вложений не включается.
|
|
10
12
|
width: 100%;
|
|
11
13
|
min-width: 0;
|
|
12
|
-
|
|
13
|
-
&[data-layout-type='mobile'] {
|
|
14
|
-
gap: base.$sn-primitive-dimension-8;
|
|
15
|
-
}
|
|
16
14
|
}
|
|
17
15
|
|
|
18
16
|
.uploadTooltip {
|
|
@@ -103,12 +103,7 @@ export const FieldCode = forwardRef<FieldCodeRef, FieldCodeProps>(function Field
|
|
|
103
103
|
size={size}
|
|
104
104
|
error={resolvedError}
|
|
105
105
|
>
|
|
106
|
-
<div
|
|
107
|
-
ref={codeContainerRef}
|
|
108
|
-
className={styles.codeContainer}
|
|
109
|
-
data-size={size}
|
|
110
|
-
data-stretch-cells={stretchCells || undefined}
|
|
111
|
-
>
|
|
106
|
+
<div ref={codeContainerRef} className={styles.codeContainer} data-stretch-cells={stretchCells || undefined}>
|
|
112
107
|
{code.map((char, index) => (
|
|
113
108
|
<Cell
|
|
114
109
|
ref={inputRef => {
|
|
@@ -1,17 +1,13 @@
|
|
|
1
1
|
@use '@cloud-ru/ds-figma-variables/build/scss/styles/styles.module' as base;
|
|
2
2
|
|
|
3
|
-
$container-gaps: (
|
|
4
|
-
's': base.$sn-primitive-dimension-8,
|
|
5
|
-
'm': base.$sn-primitive-dimension-8,
|
|
6
|
-
'l': base.$sn-primitive-dimension-12,
|
|
7
|
-
);
|
|
8
|
-
|
|
9
3
|
.fieldCode {
|
|
10
4
|
display: flex;
|
|
11
5
|
flex-direction: column;
|
|
12
6
|
gap: base.$sn-primitive-dimension-8;
|
|
13
7
|
align-items: center;
|
|
14
8
|
|
|
9
|
+
box-sizing: border-box;
|
|
10
|
+
|
|
15
11
|
// align-items: stretch перебивает center — без него дети остаются по ширине контента.
|
|
16
12
|
&[data-stretch-cells] {
|
|
17
13
|
align-items: stretch;
|
|
@@ -29,23 +25,15 @@ $container-gaps: (
|
|
|
29
25
|
|
|
30
26
|
.codeContainer {
|
|
31
27
|
display: flex;
|
|
28
|
+
gap: base.$sn-primitive-dimension-8;
|
|
32
29
|
justify-content: safe center;
|
|
33
30
|
|
|
34
31
|
&[data-stretch-cells] {
|
|
35
32
|
width: 100%;
|
|
36
33
|
}
|
|
37
|
-
|
|
38
|
-
@each $size, $gap in $container-gaps {
|
|
39
|
-
&[data-size='#{$size}'] {
|
|
40
|
-
gap: $gap;
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
34
|
}
|
|
44
35
|
|
|
36
|
+
// Разрыв между группами ячеек — 12 по макету: gap 8 + 4.
|
|
45
37
|
.cellSpacing {
|
|
46
|
-
|
|
47
|
-
&[data-size='#{$size}'] {
|
|
48
|
-
margin-right: $margin-right;
|
|
49
|
-
}
|
|
50
|
-
}
|
|
38
|
+
margin-right: base.$sn-primitive-dimension-4;
|
|
51
39
|
}
|
|
@@ -4,11 +4,21 @@ import { Item, ItemId } from '@cloud-ru/ds-list';
|
|
|
4
4
|
import { useValueControl } from '@cloud-ru/ds-utils';
|
|
5
5
|
import cn from 'classnames';
|
|
6
6
|
import mergeRefs from 'merge-refs';
|
|
7
|
-
import {
|
|
7
|
+
import {
|
|
8
|
+
ClipboardEventHandler,
|
|
9
|
+
cloneElement,
|
|
10
|
+
CSSProperties,
|
|
11
|
+
forwardRef,
|
|
12
|
+
isValidElement,
|
|
13
|
+
useEffect,
|
|
14
|
+
useMemo,
|
|
15
|
+
useRef,
|
|
16
|
+
useState,
|
|
17
|
+
} from 'react';
|
|
8
18
|
import { useIMask } from 'react-imask';
|
|
9
19
|
|
|
10
20
|
import { TEST_IDS } from '../../constants';
|
|
11
|
-
import { PLACEHOLDER_CHAR, REFOCUS_AFTER_COUNTRY_DELAY_MS } from './constants';
|
|
21
|
+
import { PLACEHOLDER_CHAR, REFOCUS_AFTER_COUNTRY_DELAY_MS, SELECTOR_FLAG_STYLE } from './constants';
|
|
12
22
|
import { useCountries } from './hooks';
|
|
13
23
|
import styles from './styles.module.scss';
|
|
14
24
|
import { CountrySettings, FieldPhoneOptionsProps, MaskOptions } from './types';
|
|
@@ -223,6 +233,9 @@ export const FieldPhone = forwardRef<HTMLInputElement, FieldPhoneProps>(function
|
|
|
223
233
|
};
|
|
224
234
|
|
|
225
235
|
const showClear = showClearButton && Boolean(unmaskedValue);
|
|
236
|
+
const selectorFlag = isValidElement<{ style?: CSSProperties }>(country?.beforeContent)
|
|
237
|
+
? cloneElement(country.beforeContent, { style: SELECTOR_FLAG_STYLE })
|
|
238
|
+
: country?.beforeContent;
|
|
226
239
|
|
|
227
240
|
return (
|
|
228
241
|
<FieldCombo
|
|
@@ -242,7 +255,7 @@ export const FieldPhone = forwardRef<HTMLInputElement, FieldPhoneProps>(function
|
|
|
242
255
|
isOnlyOneCountryAvailable
|
|
243
256
|
? undefined
|
|
244
257
|
: {
|
|
245
|
-
action:
|
|
258
|
+
action: selectorFlag,
|
|
246
259
|
'data-test-id': TEST_IDS.fieldPhoneCountrySelect,
|
|
247
260
|
droplist: {
|
|
248
261
|
items,
|
|
@@ -1,10 +1,18 @@
|
|
|
1
|
+
import { CSSProperties } from 'react';
|
|
2
|
+
|
|
1
3
|
export const PLACEHOLDER_CHAR = '_';
|
|
2
4
|
|
|
3
5
|
/**
|
|
4
6
|
* Размер иконки флага страны в селекторе и выпадающем списке. У флагов из `@cloud-ru/ds-icons/flags`
|
|
5
7
|
* `size` — высота, ширина следует нативному аспекту 24×18: `18` даёт бокс 24×18.
|
|
6
8
|
*/
|
|
7
|
-
export const FLAG_ICON_SIZE =
|
|
9
|
+
export const FLAG_ICON_SIZE = 18;
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Флаг в кнопке страны — 24×18 на всех размерах (Product-макет fieldPhone). Кнопка-слот FieldCombo
|
|
13
|
+
* клампит иконки до 16 на size s, инлайн-стиль снимает кламп.
|
|
14
|
+
*/
|
|
15
|
+
export const SELECTOR_FLAG_STYLE: CSSProperties = { maxWidth: 'none', maxHeight: 'none' };
|
|
8
16
|
|
|
9
17
|
/** Задержка перед возвратом фокуса в поле после выбора страны — ждём закрытия дроплиста (desktop). */
|
|
10
18
|
export const REFOCUS_AFTER_COUNTRY_DELAY_MS = 500;
|
|
@@ -103,10 +103,11 @@ export const FieldSelectCreate = forwardRef<HTMLInputElement, FieldSelectCreateP
|
|
|
103
103
|
disabled={isNone || selectProps.disabled}
|
|
104
104
|
placeholder={selectProps.placeholder ?? t('FieldSelectCreate.placeholder')}
|
|
105
105
|
{...selectDataStates}
|
|
106
|
+
footerDivider
|
|
106
107
|
footer={
|
|
107
108
|
// В состоянии ошибки показываем только «Обновить» из errorDataState — без футера «Создать» (по макету).
|
|
108
109
|
selectProps.dataError ? undefined : (
|
|
109
|
-
<SelectFooter onClick={onOpen} createButtonLabel={createButtonLabel} canCreate={canCreate} />
|
|
110
|
+
<SelectFooter onClick={onOpen} createButtonLabel={createButtonLabel} canCreate={canCreate} size={size} />
|
|
110
111
|
)
|
|
111
112
|
}
|
|
112
113
|
/>,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { APPEARANCE, Button, ICON_POSITION, VIEW } from '@cloud-ru/ds-button';
|
|
1
|
+
import { APPEARANCE, Button, ICON_POSITION, Size, VIEW } from '@cloud-ru/ds-button';
|
|
2
2
|
import { PlusSVG } from '@cloud-ru/ds-icons/interface/system';
|
|
3
3
|
import { Tooltip } from '@cloud-ru/ds-tooltip';
|
|
4
4
|
|
|
@@ -10,10 +10,11 @@ type SelectFooterProps = {
|
|
|
10
10
|
onClick(): void;
|
|
11
11
|
createButtonLabel: string;
|
|
12
12
|
canCreate: boolean;
|
|
13
|
+
size: Size;
|
|
13
14
|
};
|
|
14
15
|
|
|
15
16
|
/** Персистентный футер дроплиста с кнопкой «Создать» (недоступна и с tooltip при нехватке прав). */
|
|
16
|
-
export function SelectFooter({ onClick, createButtonLabel, canCreate }: SelectFooterProps) {
|
|
17
|
+
export function SelectFooter({ onClick, createButtonLabel, canCreate, size }: SelectFooterProps) {
|
|
17
18
|
const { t } = fieldsPredefinedLocale.useTranslations();
|
|
18
19
|
|
|
19
20
|
const button = (
|
|
@@ -24,6 +25,7 @@ export function SelectFooter({ onClick, createButtonLabel, canCreate }: SelectFo
|
|
|
24
25
|
icon={<PlusSVG />}
|
|
25
26
|
iconPosition={ICON_POSITION.Before}
|
|
26
27
|
onClick={onClick}
|
|
28
|
+
size={size}
|
|
27
29
|
disabled={!canCreate}
|
|
28
30
|
data-test-id={TEST_IDS.fieldSelectCreateFooterButton}
|
|
29
31
|
/>
|
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
// Разделитель и отступы футера задаёт дроплист (`footerDivider`).
|
|
3
2
|
.footerWrapper {
|
|
4
3
|
display: flex;
|
|
5
4
|
align-items: center;
|
|
6
|
-
|
|
7
|
-
border-top: base.$sn-primitive-strokeWeight-strokeRegular solid base.$sn-theme-color-available-borderColor;
|
|
5
|
+
box-sizing: border-box;
|
|
8
6
|
}
|