@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.
Files changed (46) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/dist/cjs/components/FieldChat/FieldChat.js +1 -1
  3. package/dist/cjs/components/FieldChat/components/Attachments/styles.module.css +1 -1
  4. package/dist/cjs/components/FieldChat/components/TextAreaActionsFooter/styles.module.css +4 -2
  5. package/dist/cjs/components/FieldChat/styles.module.css +2 -4
  6. package/dist/cjs/components/FieldCode/FieldCode.js +1 -1
  7. package/dist/cjs/components/FieldCode/styles.module.css +4 -17
  8. package/dist/cjs/components/FieldPhone/FieldPhone.js +4 -1
  9. package/dist/cjs/components/FieldPhone/constants.d.ts +7 -1
  10. package/dist/cjs/components/FieldPhone/constants.js +7 -2
  11. package/dist/cjs/components/FieldSelectCreate/FieldSelectCreate.js +2 -2
  12. package/dist/cjs/components/FieldSelectCreate/helperComponents/SelectFooter/SelectFooter.d.ts +3 -1
  13. package/dist/cjs/components/FieldSelectCreate/helperComponents/SelectFooter/SelectFooter.js +2 -2
  14. package/dist/cjs/components/FieldSelectCreate/helperComponents/SelectFooter/styles.module.css +1 -2
  15. package/dist/cjs/components/FieldSelectCreate/styles.module.css +2 -1
  16. package/dist/cjs/style.css +14 -27
  17. package/dist/esm/components/FieldChat/FieldChat.js +1 -1
  18. package/dist/esm/components/FieldChat/components/Attachments/styles.module.css +1 -1
  19. package/dist/esm/components/FieldChat/components/TextAreaActionsFooter/styles.module.css +4 -2
  20. package/dist/esm/components/FieldChat/styles.module.css +2 -4
  21. package/dist/esm/components/FieldCode/FieldCode.js +1 -1
  22. package/dist/esm/components/FieldCode/styles.module.css +4 -17
  23. package/dist/esm/components/FieldPhone/FieldPhone.js +6 -3
  24. package/dist/esm/components/FieldPhone/constants.d.ts +7 -1
  25. package/dist/esm/components/FieldPhone/constants.js +6 -1
  26. package/dist/esm/components/FieldSelectCreate/FieldSelectCreate.js +2 -2
  27. package/dist/esm/components/FieldSelectCreate/helperComponents/SelectFooter/SelectFooter.d.ts +3 -1
  28. package/dist/esm/components/FieldSelectCreate/helperComponents/SelectFooter/SelectFooter.js +2 -2
  29. package/dist/esm/components/FieldSelectCreate/helperComponents/SelectFooter/styles.module.css +1 -2
  30. package/dist/esm/components/FieldSelectCreate/styles.module.css +2 -1
  31. package/dist/esm/style.css +14 -27
  32. package/dist/tsconfig.cjs.tsbuildinfo +1 -1
  33. package/dist/tsconfig.esm.tsbuildinfo +1 -1
  34. package/package.json +16 -16
  35. package/src/components/FieldChat/FieldChat.tsx +1 -1
  36. package/src/components/FieldChat/components/Attachments/styles.module.scss +1 -1
  37. package/src/components/FieldChat/components/TextAreaActionsFooter/styles.module.scss +5 -2
  38. package/src/components/FieldChat/styles.module.scss +3 -5
  39. package/src/components/FieldCode/FieldCode.tsx +1 -6
  40. package/src/components/FieldCode/styles.module.scss +5 -17
  41. package/src/components/FieldPhone/FieldPhone.tsx +16 -3
  42. package/src/components/FieldPhone/constants.ts +9 -1
  43. package/src/components/FieldSelectCreate/FieldSelectCreate.tsx +2 -1
  44. package/src/components/FieldSelectCreate/helperComponents/SelectFooter/SelectFooter.tsx +4 -2
  45. package/src/components/FieldSelectCreate/helperComponents/SelectFooter/styles.module.scss +2 -4
  46. 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-preview-d90ac2be.0",
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-adaptive": "1.0.1",
48
- "@cloud-ru/ds-attachment": "1.1.9-preview-d90ac2be.0",
49
- "@cloud-ru/ds-button": "1.0.2",
50
- "@cloud-ru/ds-drawer": "1.2.2-preview-d90ac2be.0",
51
- "@cloud-ru/ds-dropzone": "1.0.1",
52
- "@cloud-ru/ds-icons": "1.2.0",
53
- "@cloud-ru/ds-field-decorator": "1.0.7-preview-d90ac2be.0",
54
- "@cloud-ru/ds-fields": "2.2.7-preview-d90ac2be.0",
55
- "@cloud-ru/ds-input-private": "1.0.5",
56
- "@cloud-ru/ds-list": "2.2.1-preview-d90ac2be.0",
57
- "@cloud-ru/ds-locale": "1.0.0",
58
- "@cloud-ru/ds-modal": "1.1.3-preview-d90ac2be.0",
59
- "@cloud-ru/ds-tooltip": "1.0.5",
60
- "@cloud-ru/ds-utils": "1.1.0",
61
- "@cloud-ru/ds-scroll": "1.0.3-preview-d90ac2be.0"
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} data-layout-type={layoutType}>
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
- padding: base.$sn-primitive-dimension-1 0;
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-bottom: base.$sn-primitive-dimension-8;
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-12;
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
- @each $size, $margin-right in $container-gaps {
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 { ClipboardEventHandler, forwardRef, useEffect, useMemo, useRef, useState } from 'react';
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: country?.beforeContent,
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 = 24;
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
- @use '@cloud-ru/ds-figma-variables/build/scss/styles/styles.module' as base;
2
-
1
+ // Разделитель и отступы футера задаёт дроплист (`footerDivider`).
3
2
  .footerWrapper {
4
3
  display: flex;
5
4
  align-items: center;
6
- padding-top: base.$sn-primitive-dimension-4;
7
- border-top: base.$sn-primitive-strokeWeight-strokeRegular solid base.$sn-theme-color-available-borderColor;
5
+ box-sizing: border-box;
8
6
  }
@@ -3,7 +3,8 @@
3
3
  .fieldSelectCreate {
4
4
  display: flex;
5
5
  flex-direction: column;
6
- gap: base.$sn-primitive-dimension-8;
6
+ gap: base.$sn-primitive-dimension-4;
7
+ box-sizing: border-box;
7
8
  }
8
9
 
9
10
  .createButton {