maskarajs 1.0.0 → 1.0.2

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/mask.cjs.js CHANGED
@@ -232,6 +232,120 @@ function selectPattern(patterns, chars, slots = globalSlots, cacheId = 'global',
232
232
  return sorted[sorted.length - 1]
233
233
  }
234
234
 
235
+ function isPatternRule(item) {
236
+ return item && typeof item === 'object' && !Array.isArray(item) && typeof item.pattern !== 'undefined'
237
+ }
238
+
239
+ function toPatternList(pattern) {
240
+ return Array.isArray(pattern) ? pattern : [pattern]
241
+ }
242
+
243
+ function flattenPatterns(pattern) {
244
+ const list = toPatternList(pattern)
245
+ const flattened = []
246
+
247
+ for (const item of list) {
248
+ if (isPatternRule(item)) {
249
+ flattened.push(...flattenPatterns(item.pattern))
250
+ } else if (Array.isArray(item)) {
251
+ flattened.push(...flattenPatterns(item))
252
+ } else {
253
+ flattened.push(item)
254
+ }
255
+ }
256
+
257
+ return flattened
258
+ }
259
+
260
+ function hasConditionalRules(pattern) {
261
+ return Array.isArray(pattern) && pattern.some(isPatternRule)
262
+ }
263
+
264
+ function extractCandidateChars(value, patterns, slots = globalSlots, cacheId = 'global', slotsVersion = globalSlotsVersion) {
265
+ const allLiterals = new Set()
266
+ for (const p of flattenPatterns(patterns)) {
267
+ for (const t of parse(p, slots, cacheId, slotsVersion)) {
268
+ if (t.type === 'literal') {
269
+ for (const ch of t.value) allLiterals.add(ch)
270
+ }
271
+ }
272
+ }
273
+ return Array.from(String(value)).filter(ch => !allLiterals.has(ch))
274
+ }
275
+
276
+ function resolvePatternList(pattern, value = '', slots = globalSlots, cacheId = 'global', slotsVersion = globalSlotsVersion) {
277
+ if (!hasConditionalRules(pattern)) return flattenPatterns(pattern)
278
+
279
+ const rules = pattern.map(item => isPatternRule(item) ? item : { pattern: item })
280
+ const raw = extractCandidateChars(value, rules.map(rule => rule.pattern), slots, cacheId, slotsVersion).join('')
281
+ const matched = rules.find(rule => typeof rule.when === 'function' && rule.when(raw, String(value)))
282
+ const fallback = rules.find(rule => typeof rule.when !== 'function')
283
+ return flattenPatterns((matched || fallback || rules[0]).pattern)
284
+ }
285
+
286
+ function assertPatternRules(pattern, label) {
287
+ if (!Array.isArray(pattern)) return
288
+ for (const rule of pattern) {
289
+ if (!isPatternRule(rule)) continue
290
+ if (rule.when && typeof rule.when !== 'function') {
291
+ throw new Error(`${label}: when precisa ser uma função`)
292
+ }
293
+ assertPatternRules(rule.pattern, label)
294
+ }
295
+ }
296
+
297
+ function hasPatternMap(definition) {
298
+ return definition?.patterns && typeof definition.patterns === 'object' && !Array.isArray(definition.patterns)
299
+ }
300
+
301
+ function patternMapValues(patterns) {
302
+ return Object.values(patterns)
303
+ }
304
+
305
+ function selectDefinitionPattern(definition, value = '', slots = globalSlots, cacheId = 'global', slotsVersion = globalSlotsVersion) {
306
+ if (!hasPatternMap(definition)) return definition.pattern
307
+
308
+ const raw = extractCandidateChars(value, patternMapValues(definition.patterns), slots, cacheId, slotsVersion).join('')
309
+ const selected = definition.select(raw, String(value))
310
+
311
+ if (!Object.prototype.hasOwnProperty.call(definition.patterns, selected)) {
312
+ throw new Error(`mask.select: "${String(selected)}" não existe em patterns`)
313
+ }
314
+
315
+ return definition.patterns[selected]
316
+ }
317
+
318
+ function allDefinitionPatterns(definition) {
319
+ return hasPatternMap(definition) ? patternMapValues(definition.patterns) : definition.pattern
320
+ }
321
+
322
+ function assertDefinition(name, definition, label = 'mask.define') {
323
+ if (!definition || (!definition.pattern && !definition.patterns)) {
324
+ throw new Error(`${label}: "${name}" precisa de um pattern`)
325
+ }
326
+
327
+ if (definition.pattern && definition.patterns) {
328
+ throw new Error(`${label}: "${name}" use pattern ou patterns, não ambos`)
329
+ }
330
+
331
+ if (hasPatternMap(definition)) {
332
+ if (typeof definition.select !== 'function') {
333
+ throw new Error(`${label}: "${name}" select precisa ser uma função`)
334
+ }
335
+ const values = patternMapValues(definition.patterns)
336
+ if (values.length === 0) {
337
+ throw new Error(`${label}: "${name}" patterns precisa ter ao menos um pattern`)
338
+ }
339
+ for (const pattern of values) assertPatternRules(pattern, `${label}: "${name}"`)
340
+ } else {
341
+ assertPatternRules(definition.pattern, `${label}: "${name}"`)
342
+ }
343
+
344
+ if (definition.validate && typeof definition.validate !== 'function') {
345
+ throw new Error(`${label}: "${name}" validate precisa ser uma função`)
346
+ }
347
+ }
348
+
235
349
  // ─── Extração e validação de chars de input ────────────────────────────────
236
350
 
237
351
  /**
@@ -254,7 +368,7 @@ function fullLength(pattern, slots = globalSlots, cacheId = 'global', slotsVersi
254
368
  }
255
369
 
256
370
  function extractInputChars(value, patterns, validate = defaultValidate, slots = globalSlots, cacheId = 'global', slotsVersion = globalSlotsVersion) {
257
- const patList = Array.isArray(patterns) ? patterns : [patterns]
371
+ const patList = flattenPatterns(patterns)
258
372
 
259
373
  // 1. coleta todos os literais para remover do valor
260
374
  const allLiterals = new Set()
@@ -321,10 +435,10 @@ function mask(pattern, value) {
321
435
  if (typeof pattern === 'string' && registry.has(pattern)) {
322
436
  const entry = registry.get(pattern)
323
437
  validate = entry.validate
324
- pattern = entry.pattern
438
+ pattern = selectDefinitionPattern(entry, value, globalSlots, 'global', globalSlotsVersion)
325
439
  }
326
440
  const str = String(value)
327
- const patterns = Array.isArray(pattern) ? pattern : [pattern]
441
+ const patterns = resolvePatternList(pattern, str, globalSlots, 'global', globalSlotsVersion)
328
442
  const chars = extractInputChars(str, patterns, validate, globalSlots, 'global', globalSlotsVersion)
329
443
  const chosen = selectPattern(patterns, chars, globalSlots, 'global', globalSlotsVersion)
330
444
  return applyTokens(parse(chosen, globalSlots, 'global', globalSlotsVersion), chars)
@@ -353,10 +467,10 @@ mask.raw = function (pattern, value) {
353
467
  const entry = registry.get(pattern)
354
468
  transform = entry.transform
355
469
  validate = entry.validate
356
- pattern = entry.pattern
470
+ pattern = selectDefinitionPattern(entry, value, globalSlots, 'global', globalSlotsVersion)
357
471
  }
358
472
 
359
- const patterns = Array.isArray(pattern) ? pattern : [pattern]
473
+ const patterns = resolvePatternList(pattern, String(value), globalSlots, 'global', globalSlotsVersion)
360
474
  const raw = extractInputChars(String(value), patterns, validate, globalSlots, 'global', globalSlotsVersion).join('')
361
475
 
362
476
  if (!transform) return raw
@@ -378,9 +492,9 @@ mask.is = function (pattern, value) {
378
492
  if (typeof pattern === 'string' && registry.has(pattern)) {
379
493
  const entry = registry.get(pattern)
380
494
  validate = entry.validate
381
- pattern = entry.pattern
495
+ pattern = selectDefinitionPattern(entry, value, globalSlots, 'global', globalSlotsVersion)
382
496
  }
383
- const patterns = Array.isArray(pattern) ? pattern : [pattern]
497
+ const patterns = resolvePatternList(pattern, String(value), globalSlots, 'global', globalSlotsVersion)
384
498
  const chars = extractInputChars(String(value), patterns, validate, globalSlots, 'global', globalSlotsVersion)
385
499
  return patterns.some(p => chars.length >= inputCount(p, globalSlots, 'global', globalSlotsVersion))
386
500
  }
@@ -395,9 +509,10 @@ mask.is = function (pattern, value) {
395
509
  */
396
510
  mask.hint = function (pattern) {
397
511
  if (typeof pattern === 'string' && registry.has(pattern)) {
398
- pattern = registry.get(pattern).pattern
512
+ pattern = selectDefinitionPattern(registry.get(pattern), '', globalSlots, 'global', globalSlotsVersion)
399
513
  }
400
- const p = Array.isArray(pattern) ? pattern[pattern.length - 1] : pattern
514
+ const patterns = resolvePatternList(pattern, '', globalSlots, 'global', globalSlotsVersion)
515
+ const p = patterns[patterns.length - 1]
401
516
  return parse(p, globalSlots, 'global', globalSlotsVersion)
402
517
  .map(t => {
403
518
  if (t.type === 'literal') return t.value
@@ -434,9 +549,9 @@ mask.rawLength = function (pattern, value) {
434
549
  if (typeof p === 'string' && registry.has(p)) {
435
550
  const entry = registry.get(p)
436
551
  validate = entry.validate
437
- p = entry.pattern
552
+ p = selectDefinitionPattern(entry, value, globalSlots, 'global', globalSlotsVersion)
438
553
  }
439
- const patterns = Array.isArray(p) ? p : [p]
554
+ const patterns = resolvePatternList(p, String(value), globalSlots, 'global', globalSlotsVersion)
440
555
  // Aplica a máscara e conta os chars do resultado — fonte da verdade
441
556
  // é o valor mascarado, não o valor bruto (que pode ter chars não validados)
442
557
  const masked = mask(p, String(value))
@@ -460,9 +575,9 @@ mask.rawLength = function (pattern, value) {
460
575
  */
461
576
  mask.patternLength = function (pattern) {
462
577
  if (typeof pattern === 'string' && registry.has(pattern)) {
463
- pattern = registry.get(pattern).pattern
578
+ pattern = allDefinitionPatterns(registry.get(pattern))
464
579
  }
465
- const patterns = Array.isArray(pattern) ? pattern : [pattern]
580
+ const patterns = flattenPatterns(pattern)
466
581
  return Math.max(...patterns.map(p => fullLength(p, globalSlots, 'global', globalSlotsVersion)))
467
582
  }
468
583
 
@@ -508,10 +623,7 @@ mask.format = function (pattern, value) {
508
623
  * })
509
624
  */
510
625
  mask.define = function (name, definition) {
511
- if (!definition?.pattern) throw new Error(`mask.define: "${name}" precisa de um pattern`)
512
- if (definition.validate && typeof definition.validate !== 'function') {
513
- throw new Error(`mask.define: "${name}" validate precisa ser uma função`)
514
- }
626
+ assertDefinition(name, definition)
515
627
  registry.set(name, definition)
516
628
  }
517
629
 
@@ -590,19 +702,19 @@ mask.slots = function () {
590
702
  * }))
591
703
  */
592
704
  mask.on = function (input, pattern, options = {}) {
593
- const { onValue, onMasked } = options
705
+ const { onValue, onMaskara, onMasked } = options
594
706
 
595
- function resolvePatterns() {
707
+ function currentPatterns() {
596
708
  let p = pattern
597
- if (typeof p === 'string' && registry.has(p)) p = registry.get(p).pattern
598
- return Array.isArray(p) ? p : [p]
709
+ if (typeof p === 'string' && registry.has(p)) p = selectDefinitionPattern(registry.get(p), input.value, globalSlots, 'global', globalSlotsVersion)
710
+ return resolvePatternList(p, input.value, globalSlots, 'global', globalSlotsVersion)
599
711
  }
600
712
 
601
713
  // Bloqueia keydown quando já no limite máximo —
602
714
  // evita o flash de um frame com char excedente antes do handler corrigir
603
715
  function onKeydown(e) {
604
716
  if (e.key.length !== 1 || e.ctrlKey || e.metaKey || e.altKey) return
605
- const patterns = resolvePatterns()
717
+ const patterns = currentPatterns()
606
718
  let validate
607
719
  if (typeof pattern === 'string' && registry.has(pattern)) validate = registry.get(pattern).validate
608
720
  const chars = extractInputChars(e.target.value, patterns, validate, globalSlots, 'global', globalSlotsVersion)
@@ -625,6 +737,7 @@ mask.on = function (input, pattern, options = {}) {
625
737
  el.setSelectionRange(pos, pos)
626
738
  })
627
739
 
740
+ onMaskara?.(masked)
628
741
  onMasked?.(masked)
629
742
  onValue?.(mask.raw(pattern, masked))
630
743
  }
@@ -702,7 +815,7 @@ mask.create = function (presets = {}) {
702
815
 
703
816
  // registra presets iniciais
704
817
  for (const [name, def] of Object.entries(presets)) {
705
- if (!def?.pattern) throw new Error(`mask.create: "${name}" precisa de um pattern`)
818
+ assertDefinition(name, def, 'mask.create')
706
819
  localRegistry.set(name, def)
707
820
  }
708
821
 
@@ -714,6 +827,20 @@ mask.create = function (presets = {}) {
714
827
  return pattern
715
828
  }
716
829
 
830
+ function resolveLocalForValue(pattern, value = '') {
831
+ if (typeof pattern === 'string' && localRegistry.has(pattern)) {
832
+ return selectDefinitionPattern(localRegistry.get(pattern), value, localSlots, localCacheId, localSlotsVersion)
833
+ }
834
+ return pattern
835
+ }
836
+
837
+ function resolveLocalForLength(pattern) {
838
+ if (typeof pattern === 'string' && localRegistry.has(pattern)) {
839
+ return allDefinitionPatterns(localRegistry.get(pattern))
840
+ }
841
+ return pattern
842
+ }
843
+
717
844
  function resolveLocalEntry(pattern) {
718
845
  if (typeof pattern === 'string' && localRegistry.has(pattern)) {
719
846
  return localRegistry.get(pattern)
@@ -725,8 +852,8 @@ mask.create = function (presets = {}) {
725
852
 
726
853
  function instance(pattern, value) {
727
854
  if (value == null) return ''
728
- const p = resolveLocal(pattern)
729
- const pats = Array.isArray(p) ? p : [p]
855
+ const p = resolveLocalForValue(pattern, value)
856
+ const pats = resolvePatternList(p, String(value), localSlots, localCacheId, localSlotsVersion)
730
857
  const chars = extractInputChars(String(value), pats, resolveLocalEntry(pattern)?.validate, localSlots, localCacheId, localSlotsVersion)
731
858
  const chosen = selectPattern(pats, chars, localSlots, localCacheId, localSlotsVersion)
732
859
  return applyTokens(parse(chosen, localSlots, localCacheId, localSlotsVersion), chars)
@@ -740,9 +867,9 @@ mask.create = function (presets = {}) {
740
867
  const entry = localRegistry.get(pattern)
741
868
  transform = entry.transform
742
869
  validate = entry.validate
743
- pattern = entry.pattern
870
+ pattern = selectDefinitionPattern(entry, value, localSlots, localCacheId, localSlotsVersion)
744
871
  }
745
- const pats = Array.isArray(pattern) ? pattern : [pattern]
872
+ const pats = resolvePatternList(pattern, String(value), localSlots, localCacheId, localSlotsVersion)
746
873
  const raw = extractInputChars(String(value), pats, validate, localSlots, localCacheId, localSlotsVersion).join('')
747
874
  if (!transform) return raw
748
875
  const complete = pats.some(p => raw.length >= inputCount(p, localSlots, localCacheId, localSlotsVersion))
@@ -751,15 +878,16 @@ mask.create = function (presets = {}) {
751
878
 
752
879
  instance.is = function (pattern, value) {
753
880
  if (value == null) return false
754
- const p = resolveLocal(pattern)
755
- const pats = Array.isArray(p) ? p : [p]
881
+ const p = resolveLocalForValue(pattern, value)
882
+ const pats = resolvePatternList(p, String(value), localSlots, localCacheId, localSlotsVersion)
756
883
  const chars = extractInputChars(String(value), pats, resolveLocalEntry(pattern)?.validate, localSlots, localCacheId, localSlotsVersion)
757
884
  return pats.some(pt => chars.length >= inputCount(pt, localSlots, localCacheId, localSlotsVersion))
758
885
  }
759
886
 
760
887
  instance.hint = function (pattern) {
761
- const p = resolveLocal(pattern)
762
- const pat = Array.isArray(p) ? p[p.length - 1] : p
888
+ const p = resolveLocalForValue(pattern, '')
889
+ const pats = resolvePatternList(p, '', localSlots, localCacheId, localSlotsVersion)
890
+ const pat = pats[pats.length - 1]
763
891
  return parse(pat, localSlots, localCacheId, localSlotsVersion).map(t => {
764
892
  if (t.type === 'literal') return t.value
765
893
  if (t.constraint) {
@@ -776,10 +904,7 @@ mask.create = function (presets = {}) {
776
904
  }
777
905
 
778
906
  instance.define = function (name, definition) {
779
- if (!definition?.pattern) throw new Error(`mask.define: "${name}" precisa de um pattern`)
780
- if (definition.validate && typeof definition.validate !== 'function') {
781
- throw new Error(`mask.define: "${name}" validate precisa ser uma função`)
782
- }
907
+ assertDefinition(name, definition)
783
908
  localRegistry.set(name, definition)
784
909
  }
785
910
 
@@ -793,29 +918,29 @@ mask.create = function (presets = {}) {
793
918
 
794
919
  instance.rawLength = function (pattern, value) {
795
920
  if (value == null) return 0
796
- const p = resolveLocal(pattern)
797
- const pats = Array.isArray(p) ? p : [p]
921
+ const p = resolveLocalForValue(pattern, value)
922
+ const pats = resolvePatternList(p, String(value), localSlots, localCacheId, localSlotsVersion)
798
923
  const masked = instance(pattern, String(value))
799
924
  return extractInputChars(masked, pats, resolveLocalEntry(pattern)?.validate, localSlots, localCacheId, localSlotsVersion).length
800
925
  }
801
926
 
802
927
  instance.patternLength = function (pattern) {
803
- const p = resolveLocal(pattern)
804
- const pats = Array.isArray(p) ? p : [p]
928
+ const p = resolveLocalForLength(pattern)
929
+ const pats = flattenPatterns(p)
805
930
  return Math.max(...pats.map(p => fullLength(p, localSlots, localCacheId, localSlotsVersion)))
806
931
  }
807
932
 
808
933
  instance.on = function (input, pattern, options = {}) {
809
- const { onValue, onMasked } = options
934
+ const { onValue, onMaskara, onMasked } = options
810
935
 
811
- function resolvePatterns() {
812
- const p = resolveLocal(pattern)
813
- return Array.isArray(p) ? p : [p]
936
+ function currentPatterns() {
937
+ const p = resolveLocalForValue(pattern, input.value)
938
+ return resolvePatternList(p, input.value, localSlots, localCacheId, localSlotsVersion)
814
939
  }
815
940
 
816
941
  function onKeydown(e) {
817
942
  if (e.key.length !== 1 || e.ctrlKey || e.metaKey || e.altKey) return
818
- const pats = resolvePatterns()
943
+ const pats = currentPatterns()
819
944
  const chars = extractInputChars(e.target.value, pats, resolveLocalEntry(pattern)?.validate, localSlots, localCacheId, localSlotsVersion)
820
945
  const maxLimit = Math.max(...pats.map(p => inputCount(p, localSlots, localCacheId, localSlotsVersion)))
821
946
  if (chars.length >= maxLimit) e.preventDefault()
@@ -832,6 +957,7 @@ mask.create = function (presets = {}) {
832
957
  const pos = Math.max(0, cursor + diff)
833
958
  el.setSelectionRange(pos, pos)
834
959
  })
960
+ onMaskara?.(masked)
835
961
  onMasked?.(masked)
836
962
  onValue?.(instance.raw(pattern, masked))
837
963
  }
@@ -872,3 +998,6 @@ mask.create = function (presets = {}) {
872
998
  // export default mask
873
999
 
874
1000
  module.exports = mask
1001
+ module.exports.mask = mask
1002
+ module.exports.maskara = mask
1003
+ module.exports.default = mask
package/mask.d.ts CHANGED
@@ -4,11 +4,11 @@
4
4
  * Tipagens com parâmetro de registry para autocomplete de nomes registrados.
5
5
  *
6
6
  * Uso básico (sem generics — funciona, sem autocomplete de nomes):
7
- * import mask from './mask.js'
8
- * mask('cpf', value)
7
+ * import maskara from './mask.js'
8
+ * maskara('cpf', value)
9
9
  *
10
10
  * Uso tipado (com autocomplete de nomes):
11
- * const m = mask.create<{ cpf: string; date: Date | null; money: number }>({
11
+ * const m = maskara.create<{ cpf: string; date: Date | null; money: number }>({
12
12
  * cpf: { pattern: '###[.]###[.]###[-]##' },
13
13
  * date: { pattern: '##[/]##[/]####', transform: ... },
14
14
  * money: { pattern: '########[,]##', transform: ... },
@@ -21,41 +21,79 @@
21
21
 
22
22
  // ─── Primitivos ───────────────────────────────────────────────────────────
23
23
 
24
- /** String de padrão declarativo ou array para padrões dinâmicos */
25
- export type MaskPattern = string | string[]
24
+ /** Regra condicional para escolher um pattern a partir do raw digitado */
25
+ export interface MaskPatternRule {
26
+ pattern: string | string[]
27
+ when?: (raw: string, value: string) => boolean
28
+ }
29
+ export type MaskaraPatternRule = MaskPatternRule
30
+
31
+ /** Mapa de patterns usado por máscaras nomeadas condicionais */
32
+ export type MaskPatternMap = Record<string, string | string[]>
33
+ export type MaskaraPatternMap = MaskPatternMap
34
+
35
+ /** Função que escolhe uma chave de patterns a partir do valor digitado */
36
+ export type MaskSelect<K extends string = string> = (raw: string, value: string) => K
37
+ export type MaskaraSelect<K extends string = string> = MaskSelect<K>
38
+
39
+ /** String de padrão declarativo, array dinâmico ou array de regras condicionais */
40
+ export type MaskPattern = string | string[] | MaskPatternRule[]
41
+ export type MaskaraPattern = MaskPattern
26
42
 
27
43
  /** Função de transformação — recebe (raw, masked, complete) e retorna T */
28
44
  export type MaskTransform<T> = (raw: string, masked: string, complete: boolean) => T
45
+ export type MaskaraTransform<T> = MaskTransform<T>
29
46
 
30
47
  /** Validação incremental — retorna false para recusar o próximo caractere */
31
48
  export type MaskValidate = (raw: string, masked: string, complete: boolean) => boolean
49
+ export type MaskaraValidate = MaskValidate
32
50
 
33
51
  /** Predicado usado por um slot customizado */
34
52
  export type MaskSlotTest = (ch: string) => boolean
53
+ export type MaskaraSlotTest = MaskSlotTest
35
54
 
36
55
  /** Definição completa de um slot customizado */
37
56
  export interface MaskSlotDefinition {
38
57
  test: MaskSlotTest
39
58
  hint?: string
40
59
  }
60
+ export type MaskaraSlotDefinition = MaskSlotDefinition
41
61
 
42
62
  /** Formas aceitas para registrar um slot customizado */
43
63
  export type MaskSlotInput = MaskSlotTest | RegExp | MaskSlotDefinition
64
+ export type MaskaraSlotInput = MaskSlotInput
44
65
 
45
- /** Definição de uma máscara nomeada */
46
- export interface MaskDefinition<T = string> {
66
+ /** Definição de uma máscara nomeada com pattern único ou array dinâmico */
67
+ export interface MaskPatternDefinition<T = string> {
47
68
  pattern: MaskPattern
48
69
  transform?: MaskTransform<T>
49
70
  validate?: MaskValidate
50
71
  }
72
+ export type MaskaraPatternDefinition<T = string> = MaskPatternDefinition<T>
73
+
74
+ /** Definição de uma máscara nomeada que seleciona um pattern por raw/value */
75
+ export interface MaskConditionalDefinition<T = string, K extends string = string> {
76
+ patterns: Record<K, MaskPattern>
77
+ select: MaskSelect<K>
78
+ transform?: MaskTransform<T>
79
+ validate?: MaskValidate
80
+ }
81
+ export type MaskaraConditionalDefinition<T = string, K extends string = string> = MaskConditionalDefinition<T, K>
82
+
83
+ /** Definição de uma máscara nomeada */
84
+ export type MaskDefinition<T = string> = MaskPatternDefinition<T> | MaskConditionalDefinition<T>
85
+ export type MaskaraDefinition<T = string> = MaskDefinition<T>
51
86
 
52
87
  /** Opções de mask.on */
53
88
  export interface MaskOnOptions<T> {
54
89
  /** Chamado a cada keystroke com o valor limpo / resultado do transform */
55
90
  onValue?: (value: T) => void
91
+ /** Chamado a cada keystroke com o valor mascarado (display). Nome preferido. */
92
+ onMaskara?: (masked: string) => void
56
93
  /** Chamado a cada keystroke com o valor mascarado (display) */
57
94
  onMasked?: (masked: string) => void
58
95
  }
96
+ export type MaskaraOnOptions<T> = MaskOnOptions<T>
59
97
 
60
98
  // ─── Registry map ─────────────────────────────────────────────────────────
61
99
  //
@@ -195,6 +233,7 @@ export interface MaskInstance<R extends Record<string, unknown> = Record<string,
195
233
  presets?: { [K in keyof S]: MaskDefinition<S[K]> }
196
234
  ): MaskInstance<S>
197
235
  }
236
+ export type MaskaraInstance<R extends Record<string, unknown> = Record<string, string>> = MaskInstance<R>
198
237
 
199
238
  // ─── Função principal (registry global, sem generics de nome) ─────────────
200
239
 
@@ -288,4 +327,7 @@ export declare namespace mask {
288
327
  ): MaskInstance<R>
289
328
  }
290
329
 
330
+ /** Preferred alias for the main engine. `mask` remains available for compatibility. */
331
+ export declare const maskara: typeof mask
332
+
291
333
  export default mask