@alfalab/core-components-bank-card 5.6.8 → 5.7.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/Component.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  /// <reference types="react" />
2
2
  import React from 'react';
3
3
  import { ChangeEvent, MouseEvent, ReactNode } from "react";
4
+ import { MaskType } from "./types";
4
5
  type BankCardProps = {
5
6
  /**
6
7
  * Дополнительный класс
@@ -36,6 +37,11 @@ type BankCardProps = {
36
37
  * Идентификатор для систем автоматизированного тестирования
37
38
  */
38
39
  dataTestId?: string;
40
+ /**
41
+ * Тип вводимой маски. Позволяет устанавливать необходимый тип номера (номер карты или номер счёта)
42
+ * Если параметр не передавать - работает с обоими типами номеров
43
+ */
44
+ maskType?: MaskType;
39
45
  };
40
46
  declare const BankCard: React.ForwardRefExoticComponent<BankCardProps & React.RefAttributes<HTMLInputElement>>;
41
47
  export { BankCardProps, BankCard };
package/Component.js CHANGED
@@ -10,6 +10,8 @@ var AlfaBankLIcon = require('@alfalab/icons-logotype/AlfaBankLIcon');
10
10
  var MastercardLIcon = require('@alfalab/icons-logotype/MastercardLIcon');
11
11
  var MirXxlIcon = require('@alfalab/icons-logotype/MirXxlIcon');
12
12
  var VisaXxlIcon = require('@alfalab/icons-logotype/VisaXxlIcon');
13
+ var helpers_getDefaultInputLabel = require('./helpers/getDefaultInputLabel.js');
14
+ var enums = require('./enums.js');
13
15
  var utils = require('./utils.js');
14
16
 
15
17
  function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
@@ -17,7 +19,7 @@ function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'defau
17
19
  var React__default = /*#__PURE__*/_interopDefaultCompat(React);
18
20
  var cn__default = /*#__PURE__*/_interopDefaultCompat(cn);
19
21
 
20
- var styles = {"component":"bank-card__component_1bsc3","aspectRatioContainer":"bank-card__aspectRatioContainer_1bsc3","content":"bank-card__content_1bsc3","label":"bank-card__label_1bsc3","focused":"bank-card__focused_1bsc3","filled":"bank-card__filled_1bsc3","input":"bank-card__input_1bsc3","bankLogo":"bank-card__bankLogo_1bsc3","brandLogo":"bank-card__brandLogo_1bsc3","usePhoto":"bank-card__usePhoto_1bsc3"};
22
+ var styles = {"component":"bank-card__component_k6v85","aspectRatioContainer":"bank-card__aspectRatioContainer_k6v85","content":"bank-card__content_k6v85","label":"bank-card__label_k6v85","focused":"bank-card__focused_k6v85","filled":"bank-card__filled_k6v85","input":"bank-card__input_k6v85","bankLogo":"bank-card__bankLogo_k6v85","brandLogo":"bank-card__brandLogo_k6v85","usePhoto":"bank-card__usePhoto_k6v85"};
21
23
  require('./index.css')
22
24
 
23
25
  // prettier-ignore
@@ -40,12 +42,20 @@ var getBrandIcon = function (value) {
40
42
  return null;
41
43
  };
42
44
  var BankCard = React__default.default.forwardRef(function (_a, ref) {
43
- var _b = _a.bankLogo, bankLogo = _b === void 0 ? React__default.default.createElement(AlfaBankLIcon.AlfaBankLIcon, null) : _b, _c = _a.backgroundColor, backgroundColor = _c === void 0 ? '#EF3124' : _c, _d = _a.inputLabel, inputLabel = _d === void 0 ? 'Номер карты или счёта' : _d, value = _a.value, className = _a.className, onUsePhoto = _a.onUsePhoto, onChange = _a.onChange, dataTestId = _a.dataTestId;
45
+ var _b = _a.bankLogo, bankLogo = _b === void 0 ? React__default.default.createElement(AlfaBankLIcon.AlfaBankLIcon, null) : _b, _c = _a.backgroundColor, backgroundColor = _c === void 0 ? '#EF3124' : _c, value = _a.value, className = _a.className, onUsePhoto = _a.onUsePhoto, onChange = _a.onChange, dataTestId = _a.dataTestId, _d = _a.maskType, maskType = _d === void 0 ? enums.MaskTypeEnum.Default : _d, _e = _a.inputLabel, inputLabel = _e === void 0 ? helpers_getDefaultInputLabel.getDefaultInputLabel(maskType) : _e;
44
46
  var uncontrolled = value === undefined;
45
- var _e = React.useState(getBrandIcon(value)), brandIcon = _e[0], setBrandIcon = _e[1];
47
+ var _f = React.useState(getBrandIcon(value)), brandIcon = _f[0], setBrandIcon = _f[1];
46
48
  var getMask = React.useCallback(function (newValue) {
47
- return newValue.length <= cardMask.length ? cardMask : accountNumberMask;
48
- }, []);
49
+ switch (maskType) {
50
+ case enums.MaskTypeEnum.Card:
51
+ return cardMask;
52
+ case enums.MaskTypeEnum.AccountNumber:
53
+ return accountNumberMask;
54
+ case enums.MaskTypeEnum.Default:
55
+ default:
56
+ return newValue.length <= cardMask.length ? cardMask : accountNumberMask;
57
+ }
58
+ }, [maskType]);
49
59
  var handleInputChange = React.useCallback(function (event, payload) {
50
60
  if (uncontrolled) {
51
61
  setBrandIcon(getBrandIcon(event.target.value));
@@ -66,10 +76,5 @@ var BankCard = React__default.default.forwardRef(function (_a, ref) {
66
76
  React__default.default.createElement(coreComponentsMaskedInput.MaskedInput, { ref: ref, value: value, mask: getMask, block: true, label: inputLabel, size: 'm', rightAddons: renderRightAddons(), inputClassName: styles.input, labelClassName: styles.label, filledClassName: styles.filled, focusedClassName: styles.focused, onChange: handleInputChange, dataTestId: dataTestId, inputMode: 'numeric', pattern: '[0-9]*', breakpoint: 1 }),
67
77
  brandIcon && React__default.default.createElement("div", { className: styles.brandLogo }, brandIcon)))));
68
78
  });
69
- BankCard.defaultProps = {
70
- bankLogo: React__default.default.createElement(AlfaBankLIcon.AlfaBankLIcon, null),
71
- backgroundColor: '#EF3124',
72
- inputLabel: 'Номер карты или счёта',
73
- };
74
79
 
75
80
  exports.BankCard = BankCard;
@@ -1,6 +1,7 @@
1
1
  /// <reference types="react" />
2
2
  import React from 'react';
3
3
  import { ChangeEvent, MouseEvent, ReactNode } from "react";
4
+ import { MaskType } from "./types";
4
5
  type BankCardProps = {
5
6
  /**
6
7
  * Дополнительный класс
@@ -36,6 +37,11 @@ type BankCardProps = {
36
37
  * Идентификатор для систем автоматизированного тестирования
37
38
  */
38
39
  dataTestId?: string;
40
+ /**
41
+ * Тип вводимой маски. Позволяет устанавливать необходимый тип номера (номер карты или номер счёта)
42
+ * Если параметр не передавать - работает с обоими типами номеров
43
+ */
44
+ maskType?: MaskType;
39
45
  };
40
46
  declare const BankCard: React.ForwardRefExoticComponent<BankCardProps & React.RefAttributes<HTMLInputElement>>;
41
47
  export { BankCardProps, BankCard };
package/cssm/Component.js CHANGED
@@ -10,6 +10,8 @@ var AlfaBankLIcon = require('@alfalab/icons-logotype/AlfaBankLIcon');
10
10
  var MastercardLIcon = require('@alfalab/icons-logotype/MastercardLIcon');
11
11
  var MirXxlIcon = require('@alfalab/icons-logotype/MirXxlIcon');
12
12
  var VisaXxlIcon = require('@alfalab/icons-logotype/VisaXxlIcon');
13
+ var helpers_getDefaultInputLabel = require('./helpers/getDefaultInputLabel.js');
14
+ var enums = require('./enums.js');
13
15
  var utils = require('./utils.js');
14
16
  var styles = require('./index.module.css');
15
17
 
@@ -39,12 +41,20 @@ var getBrandIcon = function (value) {
39
41
  return null;
40
42
  };
41
43
  var BankCard = React__default.default.forwardRef(function (_a, ref) {
42
- var _b = _a.bankLogo, bankLogo = _b === void 0 ? React__default.default.createElement(AlfaBankLIcon.AlfaBankLIcon, null) : _b, _c = _a.backgroundColor, backgroundColor = _c === void 0 ? '#EF3124' : _c, _d = _a.inputLabel, inputLabel = _d === void 0 ? 'Номер карты или счёта' : _d, value = _a.value, className = _a.className, onUsePhoto = _a.onUsePhoto, onChange = _a.onChange, dataTestId = _a.dataTestId;
44
+ var _b = _a.bankLogo, bankLogo = _b === void 0 ? React__default.default.createElement(AlfaBankLIcon.AlfaBankLIcon, null) : _b, _c = _a.backgroundColor, backgroundColor = _c === void 0 ? '#EF3124' : _c, value = _a.value, className = _a.className, onUsePhoto = _a.onUsePhoto, onChange = _a.onChange, dataTestId = _a.dataTestId, _d = _a.maskType, maskType = _d === void 0 ? enums.MaskTypeEnum.Default : _d, _e = _a.inputLabel, inputLabel = _e === void 0 ? helpers_getDefaultInputLabel.getDefaultInputLabel(maskType) : _e;
43
45
  var uncontrolled = value === undefined;
44
- var _e = React.useState(getBrandIcon(value)), brandIcon = _e[0], setBrandIcon = _e[1];
46
+ var _f = React.useState(getBrandIcon(value)), brandIcon = _f[0], setBrandIcon = _f[1];
45
47
  var getMask = React.useCallback(function (newValue) {
46
- return newValue.length <= cardMask.length ? cardMask : accountNumberMask;
47
- }, []);
48
+ switch (maskType) {
49
+ case enums.MaskTypeEnum.Card:
50
+ return cardMask;
51
+ case enums.MaskTypeEnum.AccountNumber:
52
+ return accountNumberMask;
53
+ case enums.MaskTypeEnum.Default:
54
+ default:
55
+ return newValue.length <= cardMask.length ? cardMask : accountNumberMask;
56
+ }
57
+ }, [maskType]);
48
58
  var handleInputChange = React.useCallback(function (event, payload) {
49
59
  if (uncontrolled) {
50
60
  setBrandIcon(getBrandIcon(event.target.value));
@@ -65,10 +75,5 @@ var BankCard = React__default.default.forwardRef(function (_a, ref) {
65
75
  React__default.default.createElement(coreComponentsMaskedInput.MaskedInput, { ref: ref, value: value, mask: getMask, block: true, label: inputLabel, size: 'm', rightAddons: renderRightAddons(), inputClassName: styles__default.default.input, labelClassName: styles__default.default.label, filledClassName: styles__default.default.filled, focusedClassName: styles__default.default.focused, onChange: handleInputChange, dataTestId: dataTestId, inputMode: 'numeric', pattern: '[0-9]*', breakpoint: 1 }),
66
76
  brandIcon && React__default.default.createElement("div", { className: styles__default.default.brandLogo }, brandIcon)))));
67
77
  });
68
- BankCard.defaultProps = {
69
- bankLogo: React__default.default.createElement(AlfaBankLIcon.AlfaBankLIcon, null),
70
- backgroundColor: '#EF3124',
71
- inputLabel: 'Номер карты или счёта',
72
- };
73
78
 
74
79
  exports.BankCard = BankCard;
@@ -0,0 +1,6 @@
1
+ declare enum MaskTypeEnum {
2
+ Card = "card",
3
+ AccountNumber = "account-number",
4
+ Default = "default"
5
+ }
6
+ export { MaskTypeEnum };
package/cssm/enums.js ADDED
@@ -0,0 +1,10 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ exports.MaskTypeEnum = void 0;
6
+ (function (MaskTypeEnum) {
7
+ MaskTypeEnum["Card"] = "card";
8
+ MaskTypeEnum["AccountNumber"] = "account-number";
9
+ MaskTypeEnum["Default"] = "default";
10
+ })(exports.MaskTypeEnum || (exports.MaskTypeEnum = {}));
@@ -0,0 +1,3 @@
1
+ import { MaskType } from "../types";
2
+ declare const getDefaultInputLabel: (maskType: MaskType) => "Номер карты" | "Номер счёта" | "Номер карты или счёта";
3
+ export { getDefaultInputLabel };
@@ -0,0 +1,19 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var enums = require('../enums.js');
6
+
7
+ var getDefaultInputLabel = function (maskType) {
8
+ switch (maskType) {
9
+ case enums.MaskTypeEnum.Card:
10
+ return 'Номер карты';
11
+ case enums.MaskTypeEnum.AccountNumber:
12
+ return 'Номер счёта';
13
+ case enums.MaskTypeEnum.Default:
14
+ default:
15
+ return 'Номер карты или счёта';
16
+ }
17
+ };
18
+
19
+ exports.getDefaultInputLabel = getDefaultInputLabel;
@@ -0,0 +1,2 @@
1
+ type MaskType = 'default' | 'card' | 'account-number';
2
+ export { MaskType };
package/cssm/types.js ADDED
@@ -0,0 +1,2 @@
1
+ 'use strict';
2
+
package/enums.d.ts ADDED
@@ -0,0 +1,6 @@
1
+ declare enum MaskTypeEnum {
2
+ Card = "card",
3
+ AccountNumber = "account-number",
4
+ Default = "default"
5
+ }
6
+ export { MaskTypeEnum };
package/enums.js ADDED
@@ -0,0 +1,10 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ exports.MaskTypeEnum = void 0;
6
+ (function (MaskTypeEnum) {
7
+ MaskTypeEnum["Card"] = "card";
8
+ MaskTypeEnum["AccountNumber"] = "account-number";
9
+ MaskTypeEnum["Default"] = "default";
10
+ })(exports.MaskTypeEnum || (exports.MaskTypeEnum = {}));
@@ -1,6 +1,7 @@
1
1
  /// <reference types="react" />
2
2
  import React from 'react';
3
3
  import { ChangeEvent, MouseEvent, ReactNode } from "react";
4
+ import { MaskType } from "./types";
4
5
  type BankCardProps = {
5
6
  /**
6
7
  * Дополнительный класс
@@ -36,6 +37,11 @@ type BankCardProps = {
36
37
  * Идентификатор для систем автоматизированного тестирования
37
38
  */
38
39
  dataTestId?: string;
40
+ /**
41
+ * Тип вводимой маски. Позволяет устанавливать необходимый тип номера (номер карты или номер счёта)
42
+ * Если параметр не передавать - работает с обоими типами номеров
43
+ */
44
+ maskType?: MaskType;
39
45
  };
40
46
  declare const BankCard: React.ForwardRefExoticComponent<BankCardProps & React.RefAttributes<HTMLInputElement>>;
41
47
  export { BankCardProps, BankCard };
package/esm/Component.js CHANGED
@@ -6,9 +6,11 @@ import { AlfaBankLIcon } from '@alfalab/icons-logotype/AlfaBankLIcon';
6
6
  import { MastercardLIcon } from '@alfalab/icons-logotype/MastercardLIcon';
7
7
  import { MirXxlIcon } from '@alfalab/icons-logotype/MirXxlIcon';
8
8
  import { VisaXxlIcon } from '@alfalab/icons-logotype/VisaXxlIcon';
9
+ import { getDefaultInputLabel } from './helpers/getDefaultInputLabel.js';
10
+ import { MaskTypeEnum } from './enums.js';
9
11
  import { validateCardNumber } from './utils.js';
10
12
 
11
- var styles = {"component":"bank-card__component_1bsc3","aspectRatioContainer":"bank-card__aspectRatioContainer_1bsc3","content":"bank-card__content_1bsc3","label":"bank-card__label_1bsc3","focused":"bank-card__focused_1bsc3","filled":"bank-card__filled_1bsc3","input":"bank-card__input_1bsc3","bankLogo":"bank-card__bankLogo_1bsc3","brandLogo":"bank-card__brandLogo_1bsc3","usePhoto":"bank-card__usePhoto_1bsc3"};
13
+ var styles = {"component":"bank-card__component_k6v85","aspectRatioContainer":"bank-card__aspectRatioContainer_k6v85","content":"bank-card__content_k6v85","label":"bank-card__label_k6v85","focused":"bank-card__focused_k6v85","filled":"bank-card__filled_k6v85","input":"bank-card__input_k6v85","bankLogo":"bank-card__bankLogo_k6v85","brandLogo":"bank-card__brandLogo_k6v85","usePhoto":"bank-card__usePhoto_k6v85"};
12
14
  require('./index.css')
13
15
 
14
16
  // prettier-ignore
@@ -31,12 +33,20 @@ var getBrandIcon = function (value) {
31
33
  return null;
32
34
  };
33
35
  var BankCard = React.forwardRef(function (_a, ref) {
34
- var _b = _a.bankLogo, bankLogo = _b === void 0 ? React.createElement(AlfaBankLIcon, null) : _b, _c = _a.backgroundColor, backgroundColor = _c === void 0 ? '#EF3124' : _c, _d = _a.inputLabel, inputLabel = _d === void 0 ? 'Номер карты или счёта' : _d, value = _a.value, className = _a.className, onUsePhoto = _a.onUsePhoto, onChange = _a.onChange, dataTestId = _a.dataTestId;
36
+ var _b = _a.bankLogo, bankLogo = _b === void 0 ? React.createElement(AlfaBankLIcon, null) : _b, _c = _a.backgroundColor, backgroundColor = _c === void 0 ? '#EF3124' : _c, value = _a.value, className = _a.className, onUsePhoto = _a.onUsePhoto, onChange = _a.onChange, dataTestId = _a.dataTestId, _d = _a.maskType, maskType = _d === void 0 ? MaskTypeEnum.Default : _d, _e = _a.inputLabel, inputLabel = _e === void 0 ? getDefaultInputLabel(maskType) : _e;
35
37
  var uncontrolled = value === undefined;
36
- var _e = useState(getBrandIcon(value)), brandIcon = _e[0], setBrandIcon = _e[1];
38
+ var _f = useState(getBrandIcon(value)), brandIcon = _f[0], setBrandIcon = _f[1];
37
39
  var getMask = useCallback(function (newValue) {
38
- return newValue.length <= cardMask.length ? cardMask : accountNumberMask;
39
- }, []);
40
+ switch (maskType) {
41
+ case MaskTypeEnum.Card:
42
+ return cardMask;
43
+ case MaskTypeEnum.AccountNumber:
44
+ return accountNumberMask;
45
+ case MaskTypeEnum.Default:
46
+ default:
47
+ return newValue.length <= cardMask.length ? cardMask : accountNumberMask;
48
+ }
49
+ }, [maskType]);
40
50
  var handleInputChange = useCallback(function (event, payload) {
41
51
  if (uncontrolled) {
42
52
  setBrandIcon(getBrandIcon(event.target.value));
@@ -57,10 +67,5 @@ var BankCard = React.forwardRef(function (_a, ref) {
57
67
  React.createElement(MaskedInput, { ref: ref, value: value, mask: getMask, block: true, label: inputLabel, size: 'm', rightAddons: renderRightAddons(), inputClassName: styles.input, labelClassName: styles.label, filledClassName: styles.filled, focusedClassName: styles.focused, onChange: handleInputChange, dataTestId: dataTestId, inputMode: 'numeric', pattern: '[0-9]*', breakpoint: 1 }),
58
68
  brandIcon && React.createElement("div", { className: styles.brandLogo }, brandIcon)))));
59
69
  });
60
- BankCard.defaultProps = {
61
- bankLogo: React.createElement(AlfaBankLIcon, null),
62
- backgroundColor: '#EF3124',
63
- inputLabel: 'Номер карты или счёта',
64
- };
65
70
 
66
71
  export { BankCard };
package/esm/enums.d.ts ADDED
@@ -0,0 +1,6 @@
1
+ declare enum MaskTypeEnum {
2
+ Card = "card",
3
+ AccountNumber = "account-number",
4
+ Default = "default"
5
+ }
6
+ export { MaskTypeEnum };
package/esm/enums.js ADDED
@@ -0,0 +1,8 @@
1
+ var MaskTypeEnum;
2
+ (function (MaskTypeEnum) {
3
+ MaskTypeEnum["Card"] = "card";
4
+ MaskTypeEnum["AccountNumber"] = "account-number";
5
+ MaskTypeEnum["Default"] = "default";
6
+ })(MaskTypeEnum || (MaskTypeEnum = {}));
7
+
8
+ export { MaskTypeEnum };
@@ -0,0 +1,3 @@
1
+ import { MaskType } from "../types";
2
+ declare const getDefaultInputLabel: (maskType: MaskType) => "Номер карты" | "Номер счёта" | "Номер карты или счёта";
3
+ export { getDefaultInputLabel };
@@ -0,0 +1,15 @@
1
+ import { MaskTypeEnum } from '../enums.js';
2
+
3
+ var getDefaultInputLabel = function (maskType) {
4
+ switch (maskType) {
5
+ case MaskTypeEnum.Card:
6
+ return 'Номер карты';
7
+ case MaskTypeEnum.AccountNumber:
8
+ return 'Номер счёта';
9
+ case MaskTypeEnum.Default:
10
+ default:
11
+ return 'Номер карты или счёта';
12
+ }
13
+ };
14
+
15
+ export { getDefaultInputLabel };
package/esm/index.css CHANGED
@@ -1,4 +1,4 @@
1
- /* hash: oecsb */
1
+ /* hash: 11twg */
2
2
  :root { /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */
3
3
  } /* deprecated */ :root {
4
4
  --color-light-neutral-1500: #121213;
@@ -22,7 +22,7 @@
22
22
  --font-family-styrene: 'Styrene UI', system-ui, -apple-system, 'Segoe UI', Roboto,
23
23
  'Helvetica Neue', Helvetica, sans-serif;
24
24
  } :root {
25
- } .bank-card__component_1bsc3 {
25
+ } .bank-card__component_k6v85 {
26
26
  /* TODO: как это будет собираться и работать в webView */
27
27
  --form-control-border-radius: 0;
28
28
  --form-control-border-bottom: 1px solid var(--color-light-neutral-translucent-700);
@@ -41,10 +41,10 @@
41
41
  max-width: 343px;
42
42
 
43
43
  font-family: var(--font-family-styrene);
44
- } .bank-card__aspectRatioContainer_1bsc3 {
44
+ } .bank-card__aspectRatioContainer_k6v85 {
45
45
  /* Эталонный размер 343x216 */
46
46
  padding-bottom: 63%;
47
- } .bank-card__content_1bsc3 {
47
+ } .bank-card__content_k6v85 {
48
48
  position: absolute;
49
49
  top: 0;
50
50
  right: 0;
@@ -56,26 +56,26 @@
56
56
  padding-right: var(--gap-l);
57
57
  border-radius: var(--border-radius-l);
58
58
  box-sizing: border-box;
59
- } .bank-card__label_1bsc3 {
59
+ } .bank-card__label_k6v85 {
60
60
  left: 0;
61
61
  transform: translateY(-1px);
62
62
  color: var(--color-light-text-secondary);
63
63
  font-size: 20px;
64
64
  line-height: 24px
65
- } @media (max-width: 360px) { .bank-card__label_1bsc3 {
65
+ } @media (max-width: 360px) { .bank-card__label_k6v85 {
66
66
  font-size: 16px
67
67
  }
68
- } .bank-card__focused_1bsc3 .bank-card__label_1bsc3,
69
- .bank-card__filled_1bsc3 .bank-card__label_1bsc3 {
68
+ } .bank-card__focused_k6v85 .bank-card__label_k6v85,
69
+ .bank-card__filled_k6v85 .bank-card__label_k6v85 {
70
70
  color: var(--color-light-neutral-1500);
71
71
  transform: translateY(-19px) scale(0.6)
72
- } @media (max-width: 360px) { .bank-card__focused_1bsc3 .bank-card__label_1bsc3,
73
- .bank-card__filled_1bsc3 .bank-card__label_1bsc3 {
72
+ } @media (max-width: 360px) { .bank-card__focused_k6v85 .bank-card__label_k6v85,
73
+ .bank-card__filled_k6v85 .bank-card__label_k6v85 {
74
74
  transform: translateY(-22px) scale(0.75)
75
75
  }
76
- } .bank-card__focused_1bsc3:before {
76
+ } .bank-card__focused_k6v85:before {
77
77
  transform: scale(1) !important;
78
- } .bank-card__input_1bsc3 {
78
+ } .bank-card__input_k6v85 {
79
79
  font-size: 20px;
80
80
  line-height: 24px;
81
81
  font-weight: 400;
@@ -88,27 +88,27 @@
88
88
  /* TODO: обсудить с дизайнером, почему инпут не соответствует дизайн-системе, либо уменьшить каскад в form-control */
89
89
  padding-left: 0 !important;
90
90
  padding-bottom: var(--gap-2xs) !important
91
- } @media (max-width: 360px) { .bank-card__input_1bsc3 {
91
+ } @media (max-width: 360px) { .bank-card__input_k6v85 {
92
92
  font-size: 16px
93
93
  }
94
- } .bank-card__bankLogo_1bsc3 {
94
+ } .bank-card__bankLogo_k6v85 {
95
95
  position: absolute;
96
96
  top: 20px;
97
97
  left: 20px
98
- } .bank-card__bankLogo_1bsc3 svg {
98
+ } .bank-card__bankLogo_k6v85 svg {
99
99
  max-height: 32px;
100
100
  width: auto;
101
101
  display: block
102
- } .bank-card__bankLogo_1bsc3 svg g {
102
+ } .bank-card__bankLogo_k6v85 svg g {
103
103
  fill: var(--color-light-neutral-1500);
104
- } .bank-card__brandLogo_1bsc3 {
104
+ } .bank-card__brandLogo_k6v85 {
105
105
  position: absolute;
106
106
  bottom: 20px;
107
107
  right: 20px
108
- } .bank-card__brandLogo_1bsc3 svg {
108
+ } .bank-card__brandLogo_k6v85 svg {
109
109
  display: block;
110
110
  fill: var(--color-light-neutral-1500);
111
- } .bank-card__usePhoto_1bsc3 {
111
+ } .bank-card__usePhoto_k6v85 {
112
112
  display: block;
113
113
  margin: 0;
114
114
  padding: 0;
@@ -125,7 +125,7 @@
125
125
 
126
126
  /* В макете иконка прилегает к правому краю поля, а по дизайн-системе там должен быть отступ */
127
127
  margin-right: calc(var(--gap-s) * -1)
128
- } .bank-card__usePhoto_1bsc3 svg {
128
+ } .bank-card__usePhoto_k6v85 svg {
129
129
  fill: var(--color-light-neutral-1500);
130
130
  display: block;
131
131
  }
package/esm/types.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ type MaskType = 'default' | 'card' | 'account-number';
2
+ export { MaskType };
package/esm/types.js ADDED
@@ -0,0 +1 @@
1
+
@@ -0,0 +1,3 @@
1
+ import { MaskType } from "../types";
2
+ declare const getDefaultInputLabel: (maskType: MaskType) => "Номер карты" | "Номер счёта" | "Номер карты или счёта";
3
+ export { getDefaultInputLabel };
@@ -0,0 +1,19 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var enums = require('../enums.js');
6
+
7
+ var getDefaultInputLabel = function (maskType) {
8
+ switch (maskType) {
9
+ case enums.MaskTypeEnum.Card:
10
+ return 'Номер карты';
11
+ case enums.MaskTypeEnum.AccountNumber:
12
+ return 'Номер счёта';
13
+ case enums.MaskTypeEnum.Default:
14
+ default:
15
+ return 'Номер карты или счёта';
16
+ }
17
+ };
18
+
19
+ exports.getDefaultInputLabel = getDefaultInputLabel;
package/index.css CHANGED
@@ -1,4 +1,4 @@
1
- /* hash: oecsb */
1
+ /* hash: 11twg */
2
2
  :root { /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */
3
3
  } /* deprecated */ :root {
4
4
  --color-light-neutral-1500: #121213;
@@ -22,7 +22,7 @@
22
22
  --font-family-styrene: 'Styrene UI', system-ui, -apple-system, 'Segoe UI', Roboto,
23
23
  'Helvetica Neue', Helvetica, sans-serif;
24
24
  } :root {
25
- } .bank-card__component_1bsc3 {
25
+ } .bank-card__component_k6v85 {
26
26
  /* TODO: как это будет собираться и работать в webView */
27
27
  --form-control-border-radius: 0;
28
28
  --form-control-border-bottom: 1px solid var(--color-light-neutral-translucent-700);
@@ -41,10 +41,10 @@
41
41
  max-width: 343px;
42
42
 
43
43
  font-family: var(--font-family-styrene);
44
- } .bank-card__aspectRatioContainer_1bsc3 {
44
+ } .bank-card__aspectRatioContainer_k6v85 {
45
45
  /* Эталонный размер 343x216 */
46
46
  padding-bottom: 63%;
47
- } .bank-card__content_1bsc3 {
47
+ } .bank-card__content_k6v85 {
48
48
  position: absolute;
49
49
  top: 0;
50
50
  right: 0;
@@ -56,26 +56,26 @@
56
56
  padding-right: var(--gap-l);
57
57
  border-radius: var(--border-radius-l);
58
58
  box-sizing: border-box;
59
- } .bank-card__label_1bsc3 {
59
+ } .bank-card__label_k6v85 {
60
60
  left: 0;
61
61
  transform: translateY(-1px);
62
62
  color: var(--color-light-text-secondary);
63
63
  font-size: 20px;
64
64
  line-height: 24px
65
- } @media (max-width: 360px) { .bank-card__label_1bsc3 {
65
+ } @media (max-width: 360px) { .bank-card__label_k6v85 {
66
66
  font-size: 16px
67
67
  }
68
- } .bank-card__focused_1bsc3 .bank-card__label_1bsc3,
69
- .bank-card__filled_1bsc3 .bank-card__label_1bsc3 {
68
+ } .bank-card__focused_k6v85 .bank-card__label_k6v85,
69
+ .bank-card__filled_k6v85 .bank-card__label_k6v85 {
70
70
  color: var(--color-light-neutral-1500);
71
71
  transform: translateY(-19px) scale(0.6)
72
- } @media (max-width: 360px) { .bank-card__focused_1bsc3 .bank-card__label_1bsc3,
73
- .bank-card__filled_1bsc3 .bank-card__label_1bsc3 {
72
+ } @media (max-width: 360px) { .bank-card__focused_k6v85 .bank-card__label_k6v85,
73
+ .bank-card__filled_k6v85 .bank-card__label_k6v85 {
74
74
  transform: translateY(-22px) scale(0.75)
75
75
  }
76
- } .bank-card__focused_1bsc3:before {
76
+ } .bank-card__focused_k6v85:before {
77
77
  transform: scale(1) !important;
78
- } .bank-card__input_1bsc3 {
78
+ } .bank-card__input_k6v85 {
79
79
  font-size: 20px;
80
80
  line-height: 24px;
81
81
  font-weight: 400;
@@ -88,27 +88,27 @@
88
88
  /* TODO: обсудить с дизайнером, почему инпут не соответствует дизайн-системе, либо уменьшить каскад в form-control */
89
89
  padding-left: 0 !important;
90
90
  padding-bottom: var(--gap-2xs) !important
91
- } @media (max-width: 360px) { .bank-card__input_1bsc3 {
91
+ } @media (max-width: 360px) { .bank-card__input_k6v85 {
92
92
  font-size: 16px
93
93
  }
94
- } .bank-card__bankLogo_1bsc3 {
94
+ } .bank-card__bankLogo_k6v85 {
95
95
  position: absolute;
96
96
  top: 20px;
97
97
  left: 20px
98
- } .bank-card__bankLogo_1bsc3 svg {
98
+ } .bank-card__bankLogo_k6v85 svg {
99
99
  max-height: 32px;
100
100
  width: auto;
101
101
  display: block
102
- } .bank-card__bankLogo_1bsc3 svg g {
102
+ } .bank-card__bankLogo_k6v85 svg g {
103
103
  fill: var(--color-light-neutral-1500);
104
- } .bank-card__brandLogo_1bsc3 {
104
+ } .bank-card__brandLogo_k6v85 {
105
105
  position: absolute;
106
106
  bottom: 20px;
107
107
  right: 20px
108
- } .bank-card__brandLogo_1bsc3 svg {
108
+ } .bank-card__brandLogo_k6v85 svg {
109
109
  display: block;
110
110
  fill: var(--color-light-neutral-1500);
111
- } .bank-card__usePhoto_1bsc3 {
111
+ } .bank-card__usePhoto_k6v85 {
112
112
  display: block;
113
113
  margin: 0;
114
114
  padding: 0;
@@ -125,7 +125,7 @@
125
125
 
126
126
  /* В макете иконка прилегает к правому краю поля, а по дизайн-системе там должен быть отступ */
127
127
  margin-right: calc(var(--gap-s) * -1)
128
- } .bank-card__usePhoto_1bsc3 svg {
128
+ } .bank-card__usePhoto_k6v85 svg {
129
129
  fill: var(--color-light-neutral-1500);
130
130
  display: block;
131
131
  }
@@ -1,6 +1,7 @@
1
1
  /// <reference types="react" />
2
2
  import React from 'react';
3
3
  import { ChangeEvent, MouseEvent, ReactNode } from "react";
4
+ import { MaskType } from "./types";
4
5
  type BankCardProps = {
5
6
  /**
6
7
  * Дополнительный класс
@@ -36,6 +37,11 @@ type BankCardProps = {
36
37
  * Идентификатор для систем автоматизированного тестирования
37
38
  */
38
39
  dataTestId?: string;
40
+ /**
41
+ * Тип вводимой маски. Позволяет устанавливать необходимый тип номера (номер карты или номер счёта)
42
+ * Если параметр не передавать - работает с обоими типами номеров
43
+ */
44
+ maskType?: MaskType;
39
45
  };
40
46
  declare const BankCard: React.ForwardRefExoticComponent<BankCardProps & React.RefAttributes<HTMLInputElement>>;
41
47
  export { BankCardProps, BankCard };
@@ -6,9 +6,11 @@ import { AlfaBankLIcon } from '@alfalab/icons-logotype/AlfaBankLIcon';
6
6
  import { MastercardLIcon } from '@alfalab/icons-logotype/MastercardLIcon';
7
7
  import { MirXxlIcon } from '@alfalab/icons-logotype/MirXxlIcon';
8
8
  import { VisaXxlIcon } from '@alfalab/icons-logotype/VisaXxlIcon';
9
+ import { getDefaultInputLabel } from './helpers/getDefaultInputLabel.js';
10
+ import { MaskTypeEnum } from './enums.js';
9
11
  import { validateCardNumber } from './utils.js';
10
12
 
11
- const styles = {"component":"bank-card__component_1bsc3","aspectRatioContainer":"bank-card__aspectRatioContainer_1bsc3","content":"bank-card__content_1bsc3","label":"bank-card__label_1bsc3","focused":"bank-card__focused_1bsc3","filled":"bank-card__filled_1bsc3","input":"bank-card__input_1bsc3","bankLogo":"bank-card__bankLogo_1bsc3","brandLogo":"bank-card__brandLogo_1bsc3","usePhoto":"bank-card__usePhoto_1bsc3"};
13
+ const styles = {"component":"bank-card__component_k6v85","aspectRatioContainer":"bank-card__aspectRatioContainer_k6v85","content":"bank-card__content_k6v85","label":"bank-card__label_k6v85","focused":"bank-card__focused_k6v85","filled":"bank-card__filled_k6v85","input":"bank-card__input_k6v85","bankLogo":"bank-card__bankLogo_k6v85","brandLogo":"bank-card__brandLogo_k6v85","usePhoto":"bank-card__usePhoto_k6v85"};
12
14
  require('./index.css')
13
15
 
14
16
  // prettier-ignore
@@ -29,10 +31,20 @@ const getBrandIcon = (value = '') => {
29
31
  }
30
32
  return null;
31
33
  };
32
- const BankCard = React.forwardRef(({ bankLogo = React.createElement(AlfaBankLIcon, null), backgroundColor = '#EF3124', inputLabel = 'Номер карты или счёта', value, className, onUsePhoto, onChange, dataTestId, }, ref) => {
34
+ const BankCard = React.forwardRef(({ bankLogo = React.createElement(AlfaBankLIcon, null), backgroundColor = '#EF3124', value, className, onUsePhoto, onChange, dataTestId, maskType = MaskTypeEnum.Default, inputLabel = getDefaultInputLabel(maskType), }, ref) => {
33
35
  const uncontrolled = value === undefined;
34
36
  const [brandIcon, setBrandIcon] = useState(getBrandIcon(value));
35
- const getMask = useCallback((newValue) => newValue.length <= cardMask.length ? cardMask : accountNumberMask, []);
37
+ const getMask = useCallback((newValue) => {
38
+ switch (maskType) {
39
+ case MaskTypeEnum.Card:
40
+ return cardMask;
41
+ case MaskTypeEnum.AccountNumber:
42
+ return accountNumberMask;
43
+ case MaskTypeEnum.Default:
44
+ default:
45
+ return newValue.length <= cardMask.length ? cardMask : accountNumberMask;
46
+ }
47
+ }, [maskType]);
36
48
  const handleInputChange = useCallback((event, payload) => {
37
49
  if (uncontrolled) {
38
50
  setBrandIcon(getBrandIcon(event.target.value));
@@ -53,10 +65,5 @@ const BankCard = React.forwardRef(({ bankLogo = React.createElement(AlfaBankLIco
53
65
  React.createElement(MaskedInput, { ref: ref, value: value, mask: getMask, block: true, label: inputLabel, size: 'm', rightAddons: renderRightAddons(), inputClassName: styles.input, labelClassName: styles.label, filledClassName: styles.filled, focusedClassName: styles.focused, onChange: handleInputChange, dataTestId: dataTestId, inputMode: 'numeric', pattern: '[0-9]*', breakpoint: 1 }),
54
66
  brandIcon && React.createElement("div", { className: styles.brandLogo }, brandIcon)))));
55
67
  });
56
- BankCard.defaultProps = {
57
- bankLogo: React.createElement(AlfaBankLIcon, null),
58
- backgroundColor: '#EF3124',
59
- inputLabel: 'Номер карты или счёта',
60
- };
61
68
 
62
69
  export { BankCard };
@@ -0,0 +1,6 @@
1
+ declare enum MaskTypeEnum {
2
+ Card = "card",
3
+ AccountNumber = "account-number",
4
+ Default = "default"
5
+ }
6
+ export { MaskTypeEnum };
@@ -0,0 +1,8 @@
1
+ var MaskTypeEnum;
2
+ (function (MaskTypeEnum) {
3
+ MaskTypeEnum["Card"] = "card";
4
+ MaskTypeEnum["AccountNumber"] = "account-number";
5
+ MaskTypeEnum["Default"] = "default";
6
+ })(MaskTypeEnum || (MaskTypeEnum = {}));
7
+
8
+ export { MaskTypeEnum };
@@ -0,0 +1,3 @@
1
+ import { MaskType } from "../types";
2
+ declare const getDefaultInputLabel: (maskType: MaskType) => "Номер карты" | "Номер счёта" | "Номер карты или счёта";
3
+ export { getDefaultInputLabel };
@@ -0,0 +1,15 @@
1
+ import { MaskTypeEnum } from '../enums.js';
2
+
3
+ const getDefaultInputLabel = (maskType) => {
4
+ switch (maskType) {
5
+ case MaskTypeEnum.Card:
6
+ return 'Номер карты';
7
+ case MaskTypeEnum.AccountNumber:
8
+ return 'Номер счёта';
9
+ case MaskTypeEnum.Default:
10
+ default:
11
+ return 'Номер карты или счёта';
12
+ }
13
+ };
14
+
15
+ export { getDefaultInputLabel };
package/modern/index.css CHANGED
@@ -1,4 +1,4 @@
1
- /* hash: oecsb */
1
+ /* hash: 11twg */
2
2
  :root { /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */
3
3
  } /* deprecated */ :root {
4
4
  --color-light-neutral-1500: #121213;
@@ -22,7 +22,7 @@
22
22
  --font-family-styrene: 'Styrene UI', system-ui, -apple-system, 'Segoe UI', Roboto,
23
23
  'Helvetica Neue', Helvetica, sans-serif;
24
24
  } :root {
25
- } .bank-card__component_1bsc3 {
25
+ } .bank-card__component_k6v85 {
26
26
  /* TODO: как это будет собираться и работать в webView */
27
27
  --form-control-border-radius: 0;
28
28
  --form-control-border-bottom: 1px solid var(--color-light-neutral-translucent-700);
@@ -41,10 +41,10 @@
41
41
  max-width: 343px;
42
42
 
43
43
  font-family: var(--font-family-styrene);
44
- } .bank-card__aspectRatioContainer_1bsc3 {
44
+ } .bank-card__aspectRatioContainer_k6v85 {
45
45
  /* Эталонный размер 343x216 */
46
46
  padding-bottom: 63%;
47
- } .bank-card__content_1bsc3 {
47
+ } .bank-card__content_k6v85 {
48
48
  position: absolute;
49
49
  top: 0;
50
50
  right: 0;
@@ -56,26 +56,26 @@
56
56
  padding-right: var(--gap-l);
57
57
  border-radius: var(--border-radius-l);
58
58
  box-sizing: border-box;
59
- } .bank-card__label_1bsc3 {
59
+ } .bank-card__label_k6v85 {
60
60
  left: 0;
61
61
  transform: translateY(-1px);
62
62
  color: var(--color-light-text-secondary);
63
63
  font-size: 20px;
64
64
  line-height: 24px
65
- } @media (max-width: 360px) { .bank-card__label_1bsc3 {
65
+ } @media (max-width: 360px) { .bank-card__label_k6v85 {
66
66
  font-size: 16px
67
67
  }
68
- } .bank-card__focused_1bsc3 .bank-card__label_1bsc3,
69
- .bank-card__filled_1bsc3 .bank-card__label_1bsc3 {
68
+ } .bank-card__focused_k6v85 .bank-card__label_k6v85,
69
+ .bank-card__filled_k6v85 .bank-card__label_k6v85 {
70
70
  color: var(--color-light-neutral-1500);
71
71
  transform: translateY(-19px) scale(0.6)
72
- } @media (max-width: 360px) { .bank-card__focused_1bsc3 .bank-card__label_1bsc3,
73
- .bank-card__filled_1bsc3 .bank-card__label_1bsc3 {
72
+ } @media (max-width: 360px) { .bank-card__focused_k6v85 .bank-card__label_k6v85,
73
+ .bank-card__filled_k6v85 .bank-card__label_k6v85 {
74
74
  transform: translateY(-22px) scale(0.75)
75
75
  }
76
- } .bank-card__focused_1bsc3:before {
76
+ } .bank-card__focused_k6v85:before {
77
77
  transform: scale(1) !important;
78
- } .bank-card__input_1bsc3 {
78
+ } .bank-card__input_k6v85 {
79
79
  font-size: 20px;
80
80
  line-height: 24px;
81
81
  font-weight: 400;
@@ -88,27 +88,27 @@
88
88
  /* TODO: обсудить с дизайнером, почему инпут не соответствует дизайн-системе, либо уменьшить каскад в form-control */
89
89
  padding-left: 0 !important;
90
90
  padding-bottom: var(--gap-2xs) !important
91
- } @media (max-width: 360px) { .bank-card__input_1bsc3 {
91
+ } @media (max-width: 360px) { .bank-card__input_k6v85 {
92
92
  font-size: 16px
93
93
  }
94
- } .bank-card__bankLogo_1bsc3 {
94
+ } .bank-card__bankLogo_k6v85 {
95
95
  position: absolute;
96
96
  top: 20px;
97
97
  left: 20px
98
- } .bank-card__bankLogo_1bsc3 svg {
98
+ } .bank-card__bankLogo_k6v85 svg {
99
99
  max-height: 32px;
100
100
  width: auto;
101
101
  display: block
102
- } .bank-card__bankLogo_1bsc3 svg g {
102
+ } .bank-card__bankLogo_k6v85 svg g {
103
103
  fill: var(--color-light-neutral-1500);
104
- } .bank-card__brandLogo_1bsc3 {
104
+ } .bank-card__brandLogo_k6v85 {
105
105
  position: absolute;
106
106
  bottom: 20px;
107
107
  right: 20px
108
- } .bank-card__brandLogo_1bsc3 svg {
108
+ } .bank-card__brandLogo_k6v85 svg {
109
109
  display: block;
110
110
  fill: var(--color-light-neutral-1500);
111
- } .bank-card__usePhoto_1bsc3 {
111
+ } .bank-card__usePhoto_k6v85 {
112
112
  display: block;
113
113
  margin: 0;
114
114
  padding: 0;
@@ -125,7 +125,7 @@
125
125
 
126
126
  /* В макете иконка прилегает к правому краю поля, а по дизайн-системе там должен быть отступ */
127
127
  margin-right: calc(var(--gap-s) * -1)
128
- } .bank-card__usePhoto_1bsc3 svg {
128
+ } .bank-card__usePhoto_k6v85 svg {
129
129
  fill: var(--color-light-neutral-1500);
130
130
  display: block;
131
131
  }
@@ -0,0 +1,2 @@
1
+ type MaskType = 'default' | 'card' | 'account-number';
2
+ export { MaskType };
@@ -0,0 +1 @@
1
+
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alfalab/core-components-bank-card",
3
- "version": "5.6.8",
3
+ "version": "5.7.0",
4
4
  "description": "Bank card component",
5
5
  "keywords": [],
6
6
  "license": "MIT",
@@ -15,7 +15,7 @@
15
15
  "react-dom": "^16.9.0 || ^17.0.1 || ^18.0.0"
16
16
  },
17
17
  "dependencies": {
18
- "@alfalab/core-components-masked-input": "^6.3.4",
18
+ "@alfalab/core-components-masked-input": "^6.3.5",
19
19
  "@alfalab/icons-glyph": "^2.139.0",
20
20
  "@alfalab/icons-logotype": "^2.27.0",
21
21
  "classnames": "^2.3.1",
package/src/Component.tsx CHANGED
@@ -8,6 +8,9 @@ import { MastercardLIcon } from '@alfalab/icons-logotype/MastercardLIcon';
8
8
  import { MirXxlIcon } from '@alfalab/icons-logotype/MirXxlIcon';
9
9
  import { VisaXxlIcon } from '@alfalab/icons-logotype/VisaXxlIcon';
10
10
 
11
+ import { getDefaultInputLabel } from './helpers/getDefaultInputLabel';
12
+ import { MaskTypeEnum } from './enums';
13
+ import { MaskType } from './types';
11
14
  import { validateCardNumber } from './utils';
12
15
 
13
16
  import styles from './index.module.css';
@@ -52,6 +55,12 @@ export type BankCardProps = {
52
55
  * Идентификатор для систем автоматизированного тестирования
53
56
  */
54
57
  dataTestId?: string;
58
+
59
+ /**
60
+ * Тип вводимой маски. Позволяет устанавливать необходимый тип номера (номер карты или номер счёта)
61
+ * Если параметр не передавать - работает с обоими типами номеров
62
+ */
63
+ maskType?: MaskType;
55
64
  };
56
65
 
57
66
  // prettier-ignore
@@ -76,12 +85,13 @@ export const BankCard = React.forwardRef<HTMLInputElement, BankCardProps>(
76
85
  {
77
86
  bankLogo = <AlfaBankLIcon />,
78
87
  backgroundColor = '#EF3124',
79
- inputLabel = 'Номер карты или счёта',
80
88
  value,
81
89
  className,
82
90
  onUsePhoto,
83
91
  onChange,
84
92
  dataTestId,
93
+ maskType = MaskTypeEnum.Default,
94
+ inputLabel = getDefaultInputLabel(maskType),
85
95
  },
86
96
  ref,
87
97
  ) => {
@@ -90,9 +100,18 @@ export const BankCard = React.forwardRef<HTMLInputElement, BankCardProps>(
90
100
  const [brandIcon, setBrandIcon] = useState<ReactNode>(getBrandIcon(value));
91
101
 
92
102
  const getMask = useCallback(
93
- (newValue: string) =>
94
- newValue.length <= cardMask.length ? cardMask : accountNumberMask,
95
- [],
103
+ (newValue: string) => {
104
+ switch (maskType) {
105
+ case MaskTypeEnum.Card:
106
+ return cardMask;
107
+ case MaskTypeEnum.AccountNumber:
108
+ return accountNumberMask;
109
+ case MaskTypeEnum.Default:
110
+ default:
111
+ return newValue.length <= cardMask.length ? cardMask : accountNumberMask;
112
+ }
113
+ },
114
+ [maskType],
96
115
  );
97
116
 
98
117
  const handleInputChange = useCallback(
@@ -153,9 +172,3 @@ export const BankCard = React.forwardRef<HTMLInputElement, BankCardProps>(
153
172
  );
154
173
  },
155
174
  );
156
-
157
- BankCard.defaultProps = {
158
- bankLogo: <AlfaBankLIcon />,
159
- backgroundColor: '#EF3124',
160
- inputLabel: 'Номер карты или счёта',
161
- };
package/src/enums.ts ADDED
@@ -0,0 +1,5 @@
1
+ export enum MaskTypeEnum {
2
+ Card = 'card',
3
+ AccountNumber = 'account-number',
4
+ Default = 'default',
5
+ }
@@ -0,0 +1,14 @@
1
+ import { MaskTypeEnum } from '../enums';
2
+ import { MaskType } from '../types';
3
+
4
+ export const getDefaultInputLabel = (maskType: MaskType) => {
5
+ switch (maskType) {
6
+ case MaskTypeEnum.Card:
7
+ return 'Номер карты';
8
+ case MaskTypeEnum.AccountNumber:
9
+ return 'Номер счёта';
10
+ case MaskTypeEnum.Default:
11
+ default:
12
+ return 'Номер карты или счёта';
13
+ }
14
+ };
package/src/types.ts ADDED
@@ -0,0 +1 @@
1
+ export type MaskType = 'default' | 'card' | 'account-number';
package/types.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ type MaskType = 'default' | 'card' | 'account-number';
2
+ export { MaskType };
package/types.js ADDED
@@ -0,0 +1,2 @@
1
+ 'use strict';
2
+