@skbkontur/react-ui 6.1.6-6b715.0 → 6.1.6-fd904.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.
@@ -18,9 +18,7 @@ export declare const MaskedInputMasks: {
18
18
  };
19
19
  /**
20
20
  * Нормализует вставку российского номера телефона:
21
- * убирает нецифровые символы и снимает ведущие `7`/`8`, пока цифр больше 10
22
- * (национальный номер). Нужно снимать несколько раз: при вставке в поле с `+7`
23
- * часто приходит `+7 8 912…` → `7891…`.
21
+ * убирает нецифровые символы и отрезает код страны `7`/`8` у 11+ значных номеров.
24
22
  *
25
23
  * Используется по умолчанию при `type="tel"`, если не задан `onBeforePasteValue`.
26
24
  */
@@ -18,9 +18,7 @@ export var MaskedInputMasks = {
18
18
  };
19
19
  /**
20
20
  * Нормализует вставку российского номера телефона:
21
- * убирает нецифровые символы и снимает ведущие `7`/`8`, пока цифр больше 10
22
- * (национальный номер). Нужно снимать несколько раз: при вставке в поле с `+7`
23
- * часто приходит `+7 8 912…` → `7891…`.
21
+ * убирает нецифровые символы и отрезает код страны `7`/`8` у 11+ значных номеров.
24
22
  *
25
23
  * Используется по умолчанию при `type="tel"`, если не задан `onBeforePasteValue`.
26
24
  */
@@ -29,8 +27,8 @@ export function normalizeRussianPhonePaste(value) {
29
27
  if (!digits) {
30
28
  return value;
31
29
  }
32
- while (digits.length > 10 && (digits[0] === '7' || digits[0] === '8')) {
33
- digits = digits.slice(1);
30
+ if (digits.length >= 11 && (digits[0] === '7' || digits[0] === '8')) {
31
+ return digits.slice(1);
34
32
  }
35
33
  return digits;
36
34
  }
@@ -1 +1 @@
1
- {"version":3,"file":"MaskedInputV2.phone.js","sourceRoot":"","sources":["MaskedInputV2.phone.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,IAAM,gBAAgB,GAAG;IAC9B,OAAO,EAAE,kBAAkB;CACnB,CAAC;AAEX;;;;;;;GAOG;AACH,MAAM,UAAU,0BAA0B,CAAC,KAAa;IACtD,IAAI,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAEtC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,MAAM,CAAC,MAAM,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;QACtE,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC","sourcesContent":["/**\n * Пресеты часто используемых масок для {@link MaskedInputV2} / {@link MaskedInput}.\n *\n * Российский телефон по [гайду](https://guides.kontur.ru/components/input-fields/phone/):\n * префикс `+7` всегда виден и не стирается, остальные символы маски — только в фокусе.\n *\n * @example\n * ```tsx\n * <MaskedInput\n * type=\"tel\"\n * mask={MaskedInputMasks.PhoneRU}\n * placeholder=\"+7\"\n * />\n * ```\n */\nexport const MaskedInputMasks = {\n PhoneRU: '+7 999 999-99-99',\n} as const;\n\n/**\n * Нормализует вставку российского номера телефона:\n * убирает нецифровые символы и снимает ведущие `7`/`8`, пока цифр больше 10\n * (национальный номер). Нужно снимать несколько раз: при вставке в поле с `+7`\n * часто приходит `+7 8 912…` → `7891…`.\n *\n * Используется по умолчанию при `type=\"tel\"`, если не задан `onBeforePasteValue`.\n */\nexport function normalizeRussianPhonePaste(value: string): string {\n let digits = value.replace(/\\D/g, '');\n\n if (!digits) {\n return value;\n }\n\n while (digits.length > 10 && (digits[0] === '7' || digits[0] === '8')) {\n digits = digits.slice(1);\n }\n\n return digits;\n}\n"]}
1
+ {"version":3,"file":"MaskedInputV2.phone.js","sourceRoot":"","sources":["MaskedInputV2.phone.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,IAAM,gBAAgB,GAAG;IAC9B,OAAO,EAAE,kBAAkB;CACnB,CAAC;AAEX;;;;;GAKG;AACH,MAAM,UAAU,0BAA0B,CAAC,KAAa;IACtD,IAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAExC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;QACpE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACzB,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC","sourcesContent":["/**\n * Пресеты часто используемых масок для {@link MaskedInputV2} / {@link MaskedInput}.\n *\n * Российский телефон по [гайду](https://guides.kontur.ru/components/input-fields/phone/):\n * префикс `+7` всегда виден и не стирается, остальные символы маски — только в фокусе.\n *\n * @example\n * ```tsx\n * <MaskedInput\n * type=\"tel\"\n * mask={MaskedInputMasks.PhoneRU}\n * placeholder=\"+7\"\n * />\n * ```\n */\nexport const MaskedInputMasks = {\n PhoneRU: '+7 999 999-99-99',\n} as const;\n\n/**\n * Нормализует вставку российского номера телефона:\n * убирает нецифровые символы и отрезает код страны `7`/`8` у 11+ значных номеров.\n *\n * Используется по умолчанию при `type=\"tel\"`, если не задан `onBeforePasteValue`.\n */\nexport function normalizeRussianPhonePaste(value: string): string {\n const digits = value.replace(/\\D/g, '');\n\n if (!digits) {\n return value;\n }\n\n if (digits.length >= 11 && (digits[0] === '7' || digits[0] === '8')) {\n return digits.slice(1);\n }\n\n return digits;\n}\n"]}
@@ -29,9 +29,6 @@ export interface MaskedInputChangeResult {
29
29
  /**
30
30
  * Применяет пользовательский ввод к IMask через `splice` и вычисляет новый raw с позицией курсора.
31
31
  *
32
- * Если вставка совпала с литералом маски (`7` в `7 999`) и raw не изменился,
33
- * повторяет splice в ближайшем input-слоте справа.
34
- *
35
32
  * @param params — состояние input до/после изменения.
36
33
  * @returns новое raw, позицию курсора и флаг отклонённого ввода.
37
34
  */
@@ -1,45 +1,27 @@
1
1
  import { ActionDetails } from '../react-imask/imask/core/action-details.js';
2
2
  import { DIRECTION } from '../react-imask/imask/core/utils.js';
3
- var SPLICE_FLAGS = { input: true, raw: true };
4
3
  /**
5
4
  * Применяет пользовательский ввод к IMask через `splice` и вычисляет новый raw с позицией курсора.
6
5
  *
7
- * Если вставка совпала с литералом маски (`7` в `7 999`) и raw не изменился,
8
- * повторяет splice в ближайшем input-слоте справа.
9
- *
10
6
  * @param params — состояние input до/после изменения.
11
7
  * @returns новое raw, позицию курсора и флаг отклонённого ввода.
12
8
  */
13
9
  export function applyMaskedInputChange(params) {
14
10
  var browserDraft = params.browserDraft, cursorPos = params.cursorPos, typedValue = params.typedValue, currentRaw = params.currentRaw, oldSelection = params.oldSelection, engine = params.engine;
15
- var imask = engine.imask;
16
11
  var details = new ActionDetails({
17
12
  value: browserDraft,
18
13
  cursorPos: cursorPos,
19
14
  oldValue: typedValue,
20
15
  oldSelection: oldSelection,
21
16
  });
22
- var savedState = imask.state;
23
- var oldRawValue = imask.unmaskedValue;
24
- var spliceStart = details.startChangePos;
25
- var spliceResult = imask.splice(spliceStart, details.removed.length, details.inserted, details.removeDirection, SPLICE_FLAGS);
26
- var newRaw = imask.rawInputValue;
27
- // Литерал вроде ведущей `7` в `7 999` может поглотить кейстрек без изменения raw.
28
- // Тогда пробуем вставить тот же символ в ближайший input-слот справа.
29
- if (newRaw === currentRaw && details.inserted.length === 1 && details.removed.length === 0) {
30
- imask.state = savedState;
31
- var inputPos = imask.nearestInputPos(details.startChangePos, DIRECTION.RIGHT);
32
- if (inputPos !== details.startChangePos) {
33
- spliceStart = inputPos;
34
- spliceResult = imask.splice(inputPos, 0, details.inserted, details.removeDirection, SPLICE_FLAGS);
35
- newRaw = imask.rawInputValue;
36
- }
37
- }
38
- var removeDirection = oldRawValue === imask.unmaskedValue ? details.removeDirection : DIRECTION.NONE;
39
- var newCursorPos = imask.nearestInputPos(spliceStart + spliceResult.offset, removeDirection);
17
+ var oldRawValue = engine.imask.unmaskedValue;
18
+ var spliceResult = engine.imask.splice(details.startChangePos, details.removed.length, details.inserted, details.removeDirection, { input: true, raw: true });
19
+ var removeDirection = oldRawValue === engine.imask.unmaskedValue ? details.removeDirection : DIRECTION.NONE;
20
+ var newCursorPos = engine.imask.nearestInputPos(details.startChangePos + spliceResult.offset, removeDirection);
40
21
  if (removeDirection !== DIRECTION.NONE) {
41
- newCursorPos = imask.nearestInputPos(newCursorPos, DIRECTION.NONE);
22
+ newCursorPos = engine.imask.nearestInputPos(newCursorPos, DIRECTION.NONE);
42
23
  }
24
+ var newRaw = engine.imask.rawInputValue;
43
25
  return {
44
26
  newRaw: newRaw,
45
27
  cursorPos: newCursorPos,
@@ -1 +1 @@
1
- {"version":3,"file":"maskedCoreInputChange.js","sourceRoot":"","sources":["maskedCoreInputChange.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,6CAA6C,CAAC;AAC5E,OAAO,EAAE,SAAS,EAAE,MAAM,oCAAoC,CAAC;AA6B/D,IAAM,YAAY,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAW,CAAC;AAEzD;;;;;;;;GAQG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAA+B;IAC5D,IAAA,YAAY,GAA8D,MAAM,aAApE,EAAE,SAAS,GAAmD,MAAM,UAAzD,EAAE,UAAU,GAAuC,MAAM,WAA7C,EAAE,UAAU,GAA2B,MAAM,WAAjC,EAAE,YAAY,GAAa,MAAM,aAAnB,EAAE,MAAM,GAAK,MAAM,OAAX,CAAY;IACjF,IAAA,KAAK,GAAK,MAAM,MAAX,CAAY;IAEzB,IAAM,OAAO,GAAG,IAAI,aAAa,CAAC;QAChC,KAAK,EAAE,YAAY;QACnB,SAAS,WAAA;QACT,QAAQ,EAAE,UAAU;QACpB,YAAY,cAAA;KACb,CAAC,CAAC;IAEH,IAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC;IAC/B,IAAM,WAAW,GAAG,KAAK,CAAC,aAAa,CAAC;IACxC,IAAI,WAAW,GAAG,OAAO,CAAC,cAAc,CAAC;IAEzC,IAAI,YAAY,GAAG,KAAK,CAAC,MAAM,CAC7B,WAAW,EACX,OAAO,CAAC,OAAO,CAAC,MAAM,EACtB,OAAO,CAAC,QAAQ,EAChB,OAAO,CAAC,eAAe,EACvB,YAAY,CACb,CAAC;IAEF,IAAI,MAAM,GAAG,KAAK,CAAC,aAAa,CAAC;IAEjC,kFAAkF;IAClF,sEAAsE;IACtE,IAAI,MAAM,KAAK,UAAU,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3F,KAAK,CAAC,KAAK,GAAG,UAAU,CAAC;QACzB,IAAM,QAAQ,GAAG,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,cAAc,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;QAChF,IAAI,QAAQ,KAAK,OAAO,CAAC,cAAc,EAAE,CAAC;YACxC,WAAW,GAAG,QAAQ,CAAC;YACvB,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,EAAE,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,eAAe,EAAE,YAAY,CAAC,CAAC;YAClG,MAAM,GAAG,KAAK,CAAC,aAAa,CAAC;QAC/B,CAAC;IACH,CAAC;IAED,IAAM,eAAe,GAAG,WAAW,KAAK,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC;IAEvG,IAAI,YAAY,GAAG,KAAK,CAAC,eAAe,CAAC,WAAW,GAAG,YAAY,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAC7F,IAAI,eAAe,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;QACvC,YAAY,GAAG,KAAK,CAAC,eAAe,CAAC,YAAY,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;IACrE,CAAC;IAED,OAAO;QACL,MAAM,QAAA;QACN,SAAS,EAAE,YAAY;QACvB,QAAQ,EAAE,MAAM,KAAK,UAAU;KAChC,CAAC;AACJ,CAAC","sourcesContent":["import { ActionDetails } from '../react-imask/imask/core/action-details.js';\nimport { DIRECTION } from '../react-imask/imask/core/utils.js';\nimport type { MaskEngine } from './types.js';\n\n/** Параметры обработки нативного `change` от `<input>`. */\nexport interface MaskedInputChangeParams {\n /** Черновик value, который браузер записал в input. */\n browserDraft: string;\n /** Позиция курсора после изменения. */\n cursorPos: number;\n /** Текущее typedValue из MaskState. */\n typedValue: string;\n /** Текущее raw-значение (источник истины). */\n currentRaw: string;\n /** Предыдущее выделение до изменения. */\n oldSelection: { start: number; end: number };\n /** IMask-движок. */\n engine: Pick<MaskEngine, 'imask'>;\n}\n\n/** Результат применения пользовательского ввода через IMask. */\nexport interface MaskedInputChangeResult {\n /** Новое raw после splice. */\n newRaw: string;\n /** Позиция курсора, которую нужно установить. */\n cursorPos: number;\n /** `true`, если символ не был принят (raw не изменился). */\n rejected: boolean;\n}\n\nconst SPLICE_FLAGS = { input: true, raw: true } as const;\n\n/**\n * Применяет пользовательский ввод к IMask через `splice` и вычисляет новый raw с позицией курсора.\n *\n * Если вставка совпала с литералом маски (`7` в `7 999`) и raw не изменился,\n * повторяет splice в ближайшем input-слоте справа.\n *\n * @param params — состояние input до/после изменения.\n * @returns новое raw, позицию курсора и флаг отклонённого ввода.\n */\nexport function applyMaskedInputChange(params: MaskedInputChangeParams): MaskedInputChangeResult {\n const { browserDraft, cursorPos, typedValue, currentRaw, oldSelection, engine } = params;\n const { imask } = engine;\n\n const details = new ActionDetails({\n value: browserDraft,\n cursorPos,\n oldValue: typedValue,\n oldSelection,\n });\n\n const savedState = imask.state;\n const oldRawValue = imask.unmaskedValue;\n let spliceStart = details.startChangePos;\n\n let spliceResult = imask.splice(\n spliceStart,\n details.removed.length,\n details.inserted,\n details.removeDirection,\n SPLICE_FLAGS,\n );\n\n let newRaw = imask.rawInputValue;\n\n // Литерал вроде ведущей `7` в `7 999` может поглотить кейстрек без изменения raw.\n // Тогда пробуем вставить тот же символ в ближайший input-слот справа.\n if (newRaw === currentRaw && details.inserted.length === 1 && details.removed.length === 0) {\n imask.state = savedState;\n const inputPos = imask.nearestInputPos(details.startChangePos, DIRECTION.RIGHT);\n if (inputPos !== details.startChangePos) {\n spliceStart = inputPos;\n spliceResult = imask.splice(inputPos, 0, details.inserted, details.removeDirection, SPLICE_FLAGS);\n newRaw = imask.rawInputValue;\n }\n }\n\n const removeDirection = oldRawValue === imask.unmaskedValue ? details.removeDirection : DIRECTION.NONE;\n\n let newCursorPos = imask.nearestInputPos(spliceStart + spliceResult.offset, removeDirection);\n if (removeDirection !== DIRECTION.NONE) {\n newCursorPos = imask.nearestInputPos(newCursorPos, DIRECTION.NONE);\n }\n\n return {\n newRaw,\n cursorPos: newCursorPos,\n rejected: newRaw === currentRaw,\n };\n}\n"]}
1
+ {"version":3,"file":"maskedCoreInputChange.js","sourceRoot":"","sources":["maskedCoreInputChange.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,6CAA6C,CAAC;AAC5E,OAAO,EAAE,SAAS,EAAE,MAAM,oCAAoC,CAAC;AA6B/D;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAA+B;IAC5D,IAAA,YAAY,GAA8D,MAAM,aAApE,EAAE,SAAS,GAAmD,MAAM,UAAzD,EAAE,UAAU,GAAuC,MAAM,WAA7C,EAAE,UAAU,GAA2B,MAAM,WAAjC,EAAE,YAAY,GAAa,MAAM,aAAnB,EAAE,MAAM,GAAK,MAAM,OAAX,CAAY;IAEzF,IAAM,OAAO,GAAG,IAAI,aAAa,CAAC;QAChC,KAAK,EAAE,YAAY;QACnB,SAAS,WAAA;QACT,QAAQ,EAAE,UAAU;QACpB,YAAY,cAAA;KACb,CAAC,CAAC;IAEH,IAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC;IAE/C,IAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CACtC,OAAO,CAAC,cAAc,EACtB,OAAO,CAAC,OAAO,CAAC,MAAM,EACtB,OAAO,CAAC,QAAQ,EAChB,OAAO,CAAC,eAAe,EACvB,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAC3B,CAAC;IAEF,IAAM,eAAe,GAAG,WAAW,KAAK,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC;IAE9G,IAAI,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,cAAc,GAAG,YAAY,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAC/G,IAAI,eAAe,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;QACvC,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,YAAY,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;IAC5E,CAAC;IAED,IAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC;IAE1C,OAAO;QACL,MAAM,QAAA;QACN,SAAS,EAAE,YAAY;QACvB,QAAQ,EAAE,MAAM,KAAK,UAAU;KAChC,CAAC;AACJ,CAAC","sourcesContent":["import { ActionDetails } from '../react-imask/imask/core/action-details.js';\nimport { DIRECTION } from '../react-imask/imask/core/utils.js';\nimport type { MaskEngine } from './types.js';\n\n/** Параметры обработки нативного `change` от `<input>`. */\nexport interface MaskedInputChangeParams {\n /** Черновик value, который браузер записал в input. */\n browserDraft: string;\n /** Позиция курсора после изменения. */\n cursorPos: number;\n /** Текущее typedValue из MaskState. */\n typedValue: string;\n /** Текущее raw-значение (источник истины). */\n currentRaw: string;\n /** Предыдущее выделение до изменения. */\n oldSelection: { start: number; end: number };\n /** IMask-движок. */\n engine: Pick<MaskEngine, 'imask'>;\n}\n\n/** Результат применения пользовательского ввода через IMask. */\nexport interface MaskedInputChangeResult {\n /** Новое raw после splice. */\n newRaw: string;\n /** Позиция курсора, которую нужно установить. */\n cursorPos: number;\n /** `true`, если символ не был принят (raw не изменился). */\n rejected: boolean;\n}\n\n/**\n * Применяет пользовательский ввод к IMask через `splice` и вычисляет новый raw с позицией курсора.\n *\n * @param params — состояние input до/после изменения.\n * @returns новое raw, позицию курсора и флаг отклонённого ввода.\n */\nexport function applyMaskedInputChange(params: MaskedInputChangeParams): MaskedInputChangeResult {\n const { browserDraft, cursorPos, typedValue, currentRaw, oldSelection, engine } = params;\n\n const details = new ActionDetails({\n value: browserDraft,\n cursorPos,\n oldValue: typedValue,\n oldSelection,\n });\n\n const oldRawValue = engine.imask.unmaskedValue;\n\n const spliceResult = engine.imask.splice(\n details.startChangePos,\n details.removed.length,\n details.inserted,\n details.removeDirection,\n { input: true, raw: true },\n );\n\n const removeDirection = oldRawValue === engine.imask.unmaskedValue ? details.removeDirection : DIRECTION.NONE;\n\n let newCursorPos = engine.imask.nearestInputPos(details.startChangePos + spliceResult.offset, removeDirection);\n if (removeDirection !== DIRECTION.NONE) {\n newCursorPos = engine.imask.nearestInputPos(newCursorPos, DIRECTION.NONE);\n }\n\n const newRaw = engine.imask.rawInputValue;\n\n return {\n newRaw,\n cursorPos: newCursorPos,\n rejected: newRaw === currentRaw,\n };\n}\n"]}
@@ -31,16 +31,9 @@ export function useMaskEngine(props) {
31
31
  var slotMap = useMemo(function () { return buildSlotMap(imask); }, [imask]);
32
32
  function compute(raw, focused) {
33
33
  var lazy = !props.alwaysShowMask && !focused;
34
- var eagerAppend = imask.eager === 'append' || imask.eager === true;
35
- // raw — только пользовательские слоты. resolve({ input: true }) съел бы цифру,
36
- // совпадающую с литералом маски (`7` в `7 999` / первая `7` после `+7`).
37
34
  imask.updateOptions({ lazy: true });
38
- imask.rawInputValue = raw;
39
- // raw-флаг не триггерит eager trailing (это делал flags.input) добираем вручную.
40
- if (eagerAppend && raw) {
41
- imask._appendEager();
42
- }
43
- if (focused && !raw && eagerAppend) {
35
+ imask.resolve(raw, { input: true });
36
+ if (focused && !raw && (imask.eager === 'append' || imask.eager === true)) {
44
37
  imask._appendEager();
45
38
  }
46
39
  var lazyValue = imask.value;
@@ -48,10 +41,7 @@ export function useMaskEngine(props) {
48
41
  var typedValue = lazyValue;
49
42
  if (!lazy) {
50
43
  imask.updateOptions({ lazy: false });
51
- imask.rawInputValue = raw;
52
- if (eagerAppend && raw) {
53
- imask._appendEager();
54
- }
44
+ imask.resolve(raw, { input: true });
55
45
  displayValue = imask.displayValue;
56
46
  }
57
47
  var unmaskedValue = raw === '' ? '' : imask.unmaskedValue;
@@ -68,11 +58,9 @@ export function useMaskEngine(props) {
68
58
  function applyPaste(currentRaw, rawCursorPos, pasted) {
69
59
  var before = currentRaw.slice(0, rawCursorPos);
70
60
  var after = currentRaw.slice(rawCursorPos);
71
- // Уже «сырые» цифры (в т.ч. после normalizeRussianPhonePaste) нельзя прогонять через
72
- // extractRaw/.value (input:true): ведущая 7 съестся литералом `+7` / `7 …`.
73
- var pastedRaw = /^\d+$/.test(pasted) ? pasted : extractRaw(pasted, { imask: imask });
61
+ var pastedRaw = extractRaw(pasted, { imask: imask });
74
62
  var candidate = before + pastedRaw + after;
75
- imask.rawInputValue = candidate;
63
+ imask.unmaskedValue = candidate;
76
64
  var accepted = imask.rawInputValue;
77
65
  return {
78
66
  raw: accepted,
@@ -1 +1 @@
1
- {"version":3,"file":"useMaskEngine.js","sourceRoot":"","sources":["useMaskEngine.ts"],"names":[],"mappings":"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","sourcesContent":["import { useMemo } from 'react';\n\nimport { getDefinitions, getMaskChar } from '../MaskedInputV2.helpers.js';\nimport type { MaskedPattern, MaskedPatternOptions } from '../react-imask/imask/index.js';\nimport { createMask } from '../react-imask/imask/masked/create.js';\nimport type { IMaskInputProps } from '../react-imask/index.js';\nimport { buildSlotMap, extractRaw } from './helpers.js';\nimport type { MaskState, SlotMap } from './types.js';\n\nexport interface MaskEngine {\n /**\n * Применить raw-ввод, получить MaskState.\n * Чистая функция (без побочных эффектов на внешний стейт).\n */\n compute(raw: string, focused: boolean): MaskState;\n\n /**\n * Применить вставку с учётом текущего курсора.\n * Возвращает новый raw и флаг переполнения.\n */\n applyPaste(currentRaw: string, rawCursorPos: number, pasted: string): PasteResult;\n\n /** Карта слотов. Пересчитывается только при смене маски. */\n slotMap: SlotMap;\n\n /** Доступ к IMask-инстансу для edge cases (imaskProps escape hatch). */\n imask: MaskedPattern;\n}\n\ninterface PasteResult {\n raw: string;\n overflow: boolean;\n}\n\nexport type MaskEager = NonNullable<MaskedPatternOptions['eager']>;\n\n/** Пропсы хука {@link useMaskEngine}. */\ninterface UseMaskEngineProps {\n mask: string;\n maskChar?: string;\n formatChars?: Record<string, string>;\n unmask: boolean;\n alwaysShowMask: boolean;\n imaskProps?: IMaskInputProps<HTMLInputElement>;\n}\n\n/**\n * Создаёт headless IMask-движок для MaskedInputV2.\n * IMask используется как калькулятор состояния, без привязки к DOM.\n *\n * @param props — настройки маски и поведения отображения.\n * @returns объект {@link MaskEngine} с методами `compute`, `applyPaste`, `slotMap` и `imask`.\n */\nexport function useMaskEngine(props: UseMaskEngineProps): MaskEngine {\n const mask = props.mask ?? '';\n const eager = props.imaskProps?.eager;\n const imask = useMemo(\n () =>\n createMask({\n mask: mask.replace(/0/g, '{\\\\0}') as any,\n placeholderChar: getMaskChar(props.maskChar),\n definitions: getDefinitions(props.formatChars),\n eager: eager ?? 'append',\n overwrite: 'shift',\n lazy: true,\n ...(props.imaskProps as object),\n }) as unknown as MaskedPattern,\n [mask, props.imaskProps, props.maskChar, eager, JSON.stringify(props.formatChars)],\n );\n\n // SlotMap пересчитывается при смене маски\n const slotMap = useMemo(() => buildSlotMap(imask), [imask]);\n\n function compute(raw: string, focused: boolean): MaskState {\n const lazy = !props.alwaysShowMask && !focused;\n const eagerAppend = imask.eager === 'append' || imask.eager === true;\n\n // raw — только пользовательские слоты. resolve({ input: true }) съел бы цифру,\n // совпадающую с литералом маски (`7` в `7 999` / первая `7` после `+7`).\n imask.updateOptions({ lazy: true });\n imask.rawInputValue = raw;\n // raw-флаг не триггерит eager trailing (это делал flags.input) добираем вручную.\n if (eagerAppend && raw) {\n imask._appendEager();\n }\n if (focused && !raw && eagerAppend) {\n imask._appendEager();\n }\n const lazyValue = imask.value;\n\n let displayValue = lazyValue;\n let typedValue = lazyValue;\n\n if (!lazy) {\n imask.updateOptions({ lazy: false });\n imask.rawInputValue = raw;\n if (eagerAppend && raw) {\n imask._appendEager();\n }\n displayValue = imask.displayValue;\n }\n\n const unmaskedValue = raw === '' ? '' : imask.unmaskedValue;\n const maskedValue = raw === '' ? '' : lazyValue;\n return {\n displayValue,\n typedValue,\n typedLength: typedValue.length,\n outputValue: props.unmask ? unmaskedValue : maskedValue,\n isComplete: imask.isComplete,\n acceptedLength: imask.unmaskedValue.length,\n };\n }\n\n function applyPaste(currentRaw: string, rawCursorPos: number, pasted: string): PasteResult {\n const before = currentRaw.slice(0, rawCursorPos);\n const after = currentRaw.slice(rawCursorPos);\n\n // Уже «сырые» цифры (в т.ч. после normalizeRussianPhonePaste) нельзя прогонять через\n // extractRaw/.value (input:true): ведущая 7 съестся литералом `+7` / `7 …`.\n const pastedRaw = /^\\d+$/.test(pasted) ? pasted : extractRaw(pasted, { imask });\n const candidate = before + pastedRaw + after;\n\n imask.rawInputValue = candidate;\n const accepted = imask.rawInputValue;\n\n return {\n raw: accepted,\n overflow: accepted.length < candidate.length,\n };\n }\n\n return { compute, applyPaste, slotMap, imask };\n}\n"]}
1
+ {"version":3,"file":"useMaskEngine.js","sourceRoot":"","sources":["useMaskEngine.ts"],"names":[],"mappings":"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","sourcesContent":["import { useMemo } from 'react';\n\nimport { getDefinitions, getMaskChar } from '../MaskedInputV2.helpers.js';\nimport type { MaskedPattern, MaskedPatternOptions } from '../react-imask/imask/index.js';\nimport { createMask } from '../react-imask/imask/masked/create.js';\nimport type { IMaskInputProps } from '../react-imask/index.js';\nimport { buildSlotMap, extractRaw } from './helpers.js';\nimport type { MaskState, SlotMap } from './types.js';\n\nexport interface MaskEngine {\n /**\n * Применить raw-ввод, получить MaskState.\n * Чистая функция (без побочных эффектов на внешний стейт).\n */\n compute(raw: string, focused: boolean): MaskState;\n\n /**\n * Применить вставку с учётом текущего курсора.\n * Возвращает новый raw и флаг переполнения.\n */\n applyPaste(currentRaw: string, rawCursorPos: number, pasted: string): PasteResult;\n\n /** Карта слотов. Пересчитывается только при смене маски. */\n slotMap: SlotMap;\n\n /** Доступ к IMask-инстансу для edge cases (imaskProps escape hatch). */\n imask: MaskedPattern;\n}\n\ninterface PasteResult {\n raw: string;\n overflow: boolean;\n}\n\nexport type MaskEager = NonNullable<MaskedPatternOptions['eager']>;\n\n/** Пропсы хука {@link useMaskEngine}. */\ninterface UseMaskEngineProps {\n mask: string;\n maskChar?: string;\n formatChars?: Record<string, string>;\n unmask: boolean;\n alwaysShowMask: boolean;\n imaskProps?: IMaskInputProps<HTMLInputElement>;\n}\n\n/**\n * Создаёт headless IMask-движок для MaskedInputV2.\n * IMask используется как калькулятор состояния, без привязки к DOM.\n *\n * @param props — настройки маски и поведения отображения.\n * @returns объект {@link MaskEngine} с методами `compute`, `applyPaste`, `slotMap` и `imask`.\n */\nexport function useMaskEngine(props: UseMaskEngineProps): MaskEngine {\n const mask = props.mask ?? '';\n const eager = props.imaskProps?.eager;\n const imask = useMemo(\n () =>\n createMask({\n mask: mask.replace(/0/g, '{\\\\0}') as any,\n placeholderChar: getMaskChar(props.maskChar),\n definitions: getDefinitions(props.formatChars),\n eager: eager ?? 'append',\n overwrite: 'shift',\n lazy: true,\n ...(props.imaskProps as object),\n }) as unknown as MaskedPattern,\n [mask, props.imaskProps, props.maskChar, eager, JSON.stringify(props.formatChars)],\n );\n\n // SlotMap пересчитывается при смене маски\n const slotMap = useMemo(() => buildSlotMap(imask), [imask]);\n\n function compute(raw: string, focused: boolean): MaskState {\n const lazy = !props.alwaysShowMask && !focused;\n\n imask.updateOptions({ lazy: true });\n imask.resolve(raw, { input: true });\n\n if (focused && !raw && (imask.eager === 'append' || imask.eager === true)) {\n imask._appendEager();\n }\n const lazyValue = imask.value;\n\n let displayValue = lazyValue;\n let typedValue = lazyValue;\n\n if (!lazy) {\n imask.updateOptions({ lazy: false });\n imask.resolve(raw, { input: true });\n displayValue = imask.displayValue;\n }\n\n const unmaskedValue = raw === '' ? '' : imask.unmaskedValue;\n const maskedValue = raw === '' ? '' : lazyValue;\n return {\n displayValue,\n typedValue,\n typedLength: typedValue.length,\n outputValue: props.unmask ? unmaskedValue : maskedValue,\n isComplete: imask.isComplete,\n acceptedLength: imask.unmaskedValue.length,\n };\n }\n\n function applyPaste(currentRaw: string, rawCursorPos: number, pasted: string): PasteResult {\n const before = currentRaw.slice(0, rawCursorPos);\n const after = currentRaw.slice(rawCursorPos);\n\n const pastedRaw = extractRaw(pasted, { imask });\n const candidate = before + pastedRaw + after;\n\n imask.unmaskedValue = candidate;\n const accepted = imask.rawInputValue;\n\n return {\n raw: accepted,\n overflow: accepted.length < candidate.length,\n };\n }\n\n return { compute, applyPaste, slotMap, imask };\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@skbkontur/react-ui",
3
- "version": "6.1.6-6b715.0",
3
+ "version": "6.1.6-fd904.0",
4
4
  "description": "UI Components",
5
5
  "homepage": "https://tech.skbkontur.ru/kontur-ui",
6
6
  "bugs": {