UNPKG

primevue

Version:

PrimeVue is an open source UI library for Vue featuring a rich set of 80+ components, a theme designer, various theme alternatives such as Material, Bootstrap, Tailwind, premium templates and professional support. In addition, it integrates with PrimeBloc

1 lines 59.6 kB
{"version":3,"file":"index.mjs","sources":["../../src/inputmask/BaseInputMask.vue","../../src/inputmask/InputMask.vue","../../src/inputmask/InputMask.vue?vue&type=template&id=461683c3&lang.js"],"sourcesContent":["<script>\nimport BaseComponent from '@primevue/core/basecomponent';\nimport InputMaskStyle from 'primevue/inputmask/style';\n\nexport default {\n name: 'BaseInputMask',\n extends: BaseComponent,\n props: {\n modelValue: null,\n slotChar: {\n type: String,\n default: '_'\n },\n id: {\n type: String,\n default: null\n },\n class: {\n type: [String, Object],\n default: null\n },\n mask: {\n type: String,\n default: null\n },\n placeholder: {\n type: String,\n default: null\n },\n autoClear: {\n type: Boolean,\n default: true\n },\n unmask: {\n type: Boolean,\n default: false\n },\n readonly: {\n type: Boolean,\n default: false\n },\n invalid: {\n type: Boolean,\n default: false\n },\n disabled: {\n type: Boolean,\n default: false\n },\n name: {\n type: String,\n default: null\n },\n variant: {\n type: String,\n default: null\n },\n fluid: {\n type: Boolean,\n default: null\n }\n },\n style: InputMaskStyle,\n provide() {\n return {\n $pcInputMask: this,\n $parentInstance: this\n };\n }\n};\n</script>\n","<template>\n <InputText\n :id=\"id\"\n :value=\"modelValue\"\n :class=\"inputClass\"\n :readonly=\"readonly\"\n :disabled=\"disabled\"\n :invalid=\"invalid\"\n :name=\"name\"\n :variant=\"variant\"\n :placeholder=\"placeholder\"\n :fluid=\"hasFluid\"\n :unstyled=\"unstyled\"\n @input=\"onInput\"\n @focus=\"onFocus\"\n @blur=\"onBlur\"\n @keydown=\"onKeyDown\"\n @keypress=\"onKeyPress\"\n @paste=\"onPaste\"\n :pt=\"rootPTOptions\"\n />\n</template>\n\n<script>\nimport { getUserAgent } from '@primeuix/utils/dom';\nimport { isEmpty } from '@primeuix/utils/object';\nimport InputText from 'primevue/inputtext';\nimport { mergeProps } from 'vue';\nimport BaseInputMask from './BaseInputMask.vue';\n\nexport default {\n name: 'InputMask',\n extends: BaseInputMask,\n inheritAttrs: false,\n emits: ['update:modelValue', 'focus', 'blur', 'keydown', 'complete', 'keypress', 'paste'],\n inject: {\n $pcFluid: { default: null }\n },\n watch: {\n mask(newMask, oldMask) {\n if (oldMask !== newMask) {\n this.initMask();\n }\n }\n },\n mounted() {\n this.initMask();\n },\n updated() {\n if (this.isValueUpdated()) {\n this.updateValue();\n }\n },\n methods: {\n onInput(event) {\n if (this.androidChrome) this.handleAndroidInput(event);\n else this.handleInputChange(event);\n\n this.$emit('update:modelValue', event.target.value);\n },\n onFocus(event) {\n if (this.readonly) {\n return;\n }\n\n this.focus = true;\n\n clearTimeout(this.caretTimeoutId);\n let pos;\n\n this.focusText = this.$el.value;\n\n pos = this.checkVal();\n\n this.caretTimeoutId = setTimeout(() => {\n if (this.$el !== document.activeElement) {\n return;\n }\n\n this.writeBuffer();\n\n if (pos === this.mask.replace('?', '').length) {\n this.caret(0, pos);\n } else {\n this.caret(pos);\n }\n }, 10);\n\n this.$emit('focus', event);\n },\n onBlur(event) {\n this.focus = false;\n this.checkVal();\n this.updateModel(event);\n\n if (this.$el.value !== this.focusText) {\n let e = document.createEvent('HTMLEvents');\n\n e.initEvent('change', true, false);\n this.$el.dispatchEvent(e);\n }\n\n this.$emit('blur', event);\n },\n onKeyDown(event) {\n if (this.readonly) {\n return;\n }\n\n let k = event.code,\n pos,\n begin,\n end;\n let iPhone = /iphone/i.test(getUserAgent());\n\n this.oldVal = this.$el.value;\n\n //backspace, delete, and escape get special treatment\n if (k === 'Backspace' || k === 'Delete' || (iPhone && k === 'Escape')) {\n pos = this.caret();\n begin = pos.begin;\n end = pos.end;\n\n if (end - begin === 0) {\n begin = k !== 'Delete' ? this.seekPrev(begin) : (end = this.seekNext(begin - 1));\n end = k === 'Delete' ? this.seekNext(end) : end;\n }\n\n this.clearBuffer(begin, end);\n this.shiftL(begin, end - 1);\n this.updateModel(event);\n\n event.preventDefault();\n } else if (k === 'Enter') {\n // enter\n this.$el.blur();\n this.updateModel(event);\n } else if (k === 'Escape') {\n // escape\n this.$el.value = this.focusText;\n this.caret(0, this.checkVal());\n this.updateModel(event);\n event.preventDefault();\n }\n\n this.$emit('keydown', event);\n },\n onKeyPress(event) {\n if (this.readonly) {\n return;\n }\n\n var k = event.code,\n pos = this.caret(),\n p,\n c,\n next,\n completed;\n\n if (event.ctrlKey || event.altKey || event.metaKey || event.shiftKey || event.key === 'CapsLock' || event.key === 'Escape' || event.key === 'Tab') {\n //Ignore\n return;\n } else if (k && k !== 'Enter') {\n if (pos.end - pos.begin !== 0) {\n this.clearBuffer(pos.begin, pos.end);\n this.shiftL(pos.begin, pos.end - 1);\n }\n\n p = this.seekNext(pos.begin - 1);\n\n if (p < this.len) {\n c = event.key;\n\n if (this.tests[p].test(c)) {\n this.shiftR(p);\n\n this.buffer[p] = c;\n this.writeBuffer();\n next = this.seekNext(p);\n\n if (/android/i.test(getUserAgent())) {\n //Path for CSP Violation on FireFox OS 1.1\n let proxy = () => {\n this.caret(next);\n };\n\n setTimeout(proxy, 0);\n } else {\n this.caret(next);\n }\n\n if (pos.begin <= this.lastRequiredNonMaskPos) {\n completed = this.isCompleted();\n }\n }\n }\n\n event.preventDefault();\n }\n\n this.updateModel(event);\n\n if (completed) {\n this.$emit('complete', event);\n }\n\n this.$emit('keypress', event);\n },\n onPaste(event) {\n this.handleInputChange(event);\n\n this.$emit('paste', event);\n },\n caret(first, last) {\n let range, begin, end;\n\n if (!this.$el.offsetParent || this.$el !== document.activeElement) {\n return;\n }\n\n if (typeof first === 'number') {\n begin = first;\n end = typeof last === 'number' ? last : begin;\n\n if (this.$el.setSelectionRange) {\n this.$el.setSelectionRange(begin, end);\n } else if (this.$el['createTextRange']) {\n range = this.$el['createTextRange']();\n range.collapse(true);\n range.moveEnd('character', end);\n range.moveStart('character', begin);\n range.select();\n }\n } else {\n if (this.$el.setSelectionRange) {\n begin = this.$el.selectionStart;\n end = this.$el.selectionEnd;\n } else if (document['selection'] && document['selection'].createRange) {\n range = document['selection'].createRange();\n begin = 0 - range.duplicate().moveStart('character', -100000);\n end = begin + range.text.length;\n }\n\n return { begin: begin, end: end };\n }\n },\n isCompleted() {\n for (let i = this.firstNonMaskPos; i <= this.lastRequiredNonMaskPos; i++) {\n if (this.tests[i] && this.buffer[i] === this.getPlaceholder(i)) {\n return false;\n }\n }\n\n return true;\n },\n getPlaceholder(i) {\n if (i < this.slotChar.length) {\n return this.slotChar.charAt(i);\n }\n\n return this.slotChar.charAt(0);\n },\n seekNext(pos) {\n while (++pos < this.len && !this.tests[pos]);\n\n return pos;\n },\n seekPrev(pos) {\n while (--pos >= 0 && !this.tests[pos]);\n\n return pos;\n },\n shiftL(begin, end) {\n let i, j;\n\n if (begin < 0) {\n return;\n }\n\n for (i = begin, j = this.seekNext(end); i < this.len; i++) {\n if (this.tests[i]) {\n if (j < this.len && this.tests[i].test(this.buffer[j])) {\n this.buffer[i] = this.buffer[j];\n this.buffer[j] = this.getPlaceholder(j);\n } else {\n break;\n }\n\n j = this.seekNext(j);\n }\n }\n\n this.writeBuffer();\n this.caret(Math.max(this.firstNonMaskPos, begin));\n },\n shiftR(pos) {\n let i, c, j, t;\n\n for (i = pos, c = this.getPlaceholder(pos); i < this.len; i++) {\n if (this.tests[i]) {\n j = this.seekNext(i);\n t = this.buffer[i];\n this.buffer[i] = c;\n\n if (j < this.len && this.tests[j].test(t)) {\n c = t;\n } else {\n break;\n }\n }\n }\n },\n handleAndroidInput(event) {\n var curVal = this.$el.value;\n var pos = this.caret();\n\n if (this.oldVal && this.oldVal.length && this.oldVal.length > curVal.length) {\n // a deletion or backspace happened\n this.checkVal(true);\n while (pos.begin > 0 && !this.tests[pos.begin - 1]) pos.begin--;\n\n if (pos.begin === 0) {\n while (pos.begin < this.firstNonMaskPos && !this.tests[pos.begin]) pos.begin++;\n }\n\n this.caret(pos.begin, pos.begin);\n } else {\n this.checkVal(true);\n while (pos.begin < this.len && !this.tests[pos.begin]) pos.begin++;\n\n this.caret(pos.begin, pos.begin);\n }\n\n if (this.isCompleted()) {\n this.$emit('complete', event);\n }\n },\n clearBuffer(start, end) {\n let i;\n\n for (i = start; i < end && i < this.len; i++) {\n if (this.tests[i]) {\n this.buffer[i] = this.getPlaceholder(i);\n }\n }\n },\n writeBuffer() {\n this.$el.value = this.buffer.join('');\n },\n checkVal(allow) {\n this.isValueChecked = true;\n //try to place characters where they belong\n let test = this.$el.value,\n lastMatch = -1,\n i,\n c,\n pos;\n\n for (i = 0, pos = 0; i < this.len; i++) {\n if (this.tests[i]) {\n this.buffer[i] = this.getPlaceholder(i);\n\n while (pos++ < test.length) {\n c = test.charAt(pos - 1);\n\n if (this.tests[i].test(c)) {\n this.buffer[i] = c;\n lastMatch = i;\n break;\n }\n }\n\n if (pos > test.length) {\n this.clearBuffer(i + 1, this.len);\n break;\n }\n } else {\n if (this.buffer[i] === test.charAt(pos)) {\n pos++;\n }\n\n if (i < this.partialPosition) {\n lastMatch = i;\n }\n }\n }\n\n if (allow) {\n this.writeBuffer();\n } else if (lastMatch + 1 < this.partialPosition) {\n if (this.autoClear || this.buffer.join('') === this.defaultBuffer) {\n // Invalid value. Remove it and replace it with the\n // mask, which is the default behavior.\n if (this.$el.value) this.$el.value = '';\n this.clearBuffer(0, this.len);\n } else {\n // Invalid value, but we opt to show the value to the\n // user and allow them to correct their mistake.\n this.writeBuffer();\n }\n } else {\n this.writeBuffer();\n this.$el.value = this.$el.value.substring(0, lastMatch + 1);\n }\n\n return this.partialPosition ? i : this.firstNonMaskPos;\n },\n handleInputChange(event) {\n const isPasteEvent = event.type === 'paste';\n\n if (this.readonly || isPasteEvent) {\n return;\n }\n\n var pos = this.checkVal(true);\n\n this.caret(pos);\n this.updateModel(event);\n\n if (this.isCompleted()) {\n this.$emit('complete', event);\n }\n },\n getUnmaskedValue() {\n let unmaskedBuffer = [];\n\n for (let i = 0; i < this.buffer.length; i++) {\n let c = this.buffer[i];\n\n if (this.tests[i] && c !== this.getPlaceholder(i)) {\n unmaskedBuffer.push(c);\n }\n }\n\n return unmaskedBuffer.join('');\n },\n updateModel(e) {\n let val = this.unmask ? this.getUnmaskedValue() : e.target.value;\n\n this.$emit('update:modelValue', this.defaultBuffer !== val ? val : '');\n },\n updateValue(updateModel = true) {\n if (this.$el) {\n if (this.modelValue == null) {\n this.$el.value = '';\n updateModel && this.$emit('update:modelValue', '');\n } else {\n this.$el.value = this.modelValue;\n this.checkVal();\n\n setTimeout(() => {\n if (this.$el) {\n this.writeBuffer();\n this.checkVal();\n\n if (updateModel) {\n let val = this.unmask ? this.getUnmaskedValue() : this.$el.value;\n\n this.$emit('update:modelValue', this.defaultBuffer !== val ? val : '');\n }\n }\n }, 10);\n }\n\n this.focusText = this.$el.value;\n }\n },\n initMask() {\n this.tests = [];\n this.partialPosition = this.mask.length;\n this.len = this.mask.length;\n this.firstNonMaskPos = null;\n this.defs = {\n 9: '[0-9]',\n a: '[A-Za-z]',\n '*': '[A-Za-z0-9]'\n };\n\n let ua = getUserAgent();\n\n this.androidChrome = /chrome/i.test(ua) && /android/i.test(ua);\n\n let maskTokens = this.mask.split('');\n\n for (let i = 0; i < maskTokens.length; i++) {\n let c = maskTokens[i];\n\n if (c === '?') {\n this.len--;\n this.partialPosition = i;\n } else if (this.defs[c]) {\n this.tests.push(new RegExp(this.defs[c]));\n\n if (this.firstNonMaskPos === null) {\n this.firstNonMaskPos = this.tests.length - 1;\n }\n\n if (i < this.partialPosition) {\n this.lastRequiredNonMaskPos = this.tests.length - 1;\n }\n } else {\n this.tests.push(null);\n }\n }\n\n this.buffer = [];\n\n for (let i = 0; i < maskTokens.length; i++) {\n let c = maskTokens[i];\n\n if (c !== '?') {\n if (this.defs[c]) this.buffer.push(this.getPlaceholder(i));\n else this.buffer.push(c);\n }\n }\n\n this.defaultBuffer = this.buffer.join('');\n this.updateValue(false);\n },\n isValueUpdated() {\n return this.unmask ? this.modelValue != this.getUnmaskedValue() : this.defaultBuffer !== this.$el.value && this.$el.value !== this.modelValue;\n }\n },\n computed: {\n filled() {\n return this.modelValue != null && this.modelValue.toString().length > 0;\n },\n inputClass() {\n return [this.cx('root'), this.class];\n },\n rootPTOptions() {\n return mergeProps(this.ptmi('root', this.ptmParams), this.ptm('pcInputText', this.ptmParams));\n },\n ptmParams() {\n return {\n context: {\n filled: this.filled\n }\n };\n },\n hasFluid() {\n return isEmpty(this.fluid) ? !!this.$pcFluid : this.fluid;\n }\n },\n components: {\n InputText\n }\n};\n</script>\n","<template>\n <InputText\n :id=\"id\"\n :value=\"modelValue\"\n :class=\"inputClass\"\n :readonly=\"readonly\"\n :disabled=\"disabled\"\n :invalid=\"invalid\"\n :name=\"name\"\n :variant=\"variant\"\n :placeholder=\"placeholder\"\n :fluid=\"hasFluid\"\n :unstyled=\"unstyled\"\n @input=\"onInput\"\n @focus=\"onFocus\"\n @blur=\"onBlur\"\n @keydown=\"onKeyDown\"\n @keypress=\"onKeyPress\"\n @paste=\"onPaste\"\n :pt=\"rootPTOptions\"\n />\n</template>\n\n<script>\nimport { getUserAgent } from '@primeuix/utils/dom';\nimport { isEmpty } from '@primeuix/utils/object';\nimport InputText from 'primevue/inputtext';\nimport { mergeProps } from 'vue';\nimport BaseInputMask from './BaseInputMask.vue';\n\nexport default {\n name: 'InputMask',\n extends: BaseInputMask,\n inheritAttrs: false,\n emits: ['update:modelValue', 'focus', 'blur', 'keydown', 'complete', 'keypress', 'paste'],\n inject: {\n $pcFluid: { default: null }\n },\n watch: {\n mask(newMask, oldMask) {\n if (oldMask !== newMask) {\n this.initMask();\n }\n }\n },\n mounted() {\n this.initMask();\n },\n updated() {\n if (this.isValueUpdated()) {\n this.updateValue();\n }\n },\n methods: {\n onInput(event) {\n if (this.androidChrome) this.handleAndroidInput(event);\n else this.handleInputChange(event);\n\n this.$emit('update:modelValue', event.target.value);\n },\n onFocus(event) {\n if (this.readonly) {\n return;\n }\n\n this.focus = true;\n\n clearTimeout(this.caretTimeoutId);\n let pos;\n\n this.focusText = this.$el.value;\n\n pos = this.checkVal();\n\n this.caretTimeoutId = setTimeout(() => {\n if (this.$el !== document.activeElement) {\n return;\n }\n\n this.writeBuffer();\n\n if (pos === this.mask.replace('?', '').length) {\n this.caret(0, pos);\n } else {\n this.caret(pos);\n }\n }, 10);\n\n this.$emit('focus', event);\n },\n onBlur(event) {\n this.focus = false;\n this.checkVal();\n this.updateModel(event);\n\n if (this.$el.value !== this.focusText) {\n let e = document.createEvent('HTMLEvents');\n\n e.initEvent('change', true, false);\n this.$el.dispatchEvent(e);\n }\n\n this.$emit('blur', event);\n },\n onKeyDown(event) {\n if (this.readonly) {\n return;\n }\n\n let k = event.code,\n pos,\n begin,\n end;\n let iPhone = /iphone/i.test(getUserAgent());\n\n this.oldVal = this.$el.value;\n\n //backspace, delete, and escape get special treatment\n if (k === 'Backspace' || k === 'Delete' || (iPhone && k === 'Escape')) {\n pos = this.caret();\n begin = pos.begin;\n end = pos.end;\n\n if (end - begin === 0) {\n begin = k !== 'Delete' ? this.seekPrev(begin) : (end = this.seekNext(begin - 1));\n end = k === 'Delete' ? this.seekNext(end) : end;\n }\n\n this.clearBuffer(begin, end);\n this.shiftL(begin, end - 1);\n this.updateModel(event);\n\n event.preventDefault();\n } else if (k === 'Enter') {\n // enter\n this.$el.blur();\n this.updateModel(event);\n } else if (k === 'Escape') {\n // escape\n this.$el.value = this.focusText;\n this.caret(0, this.checkVal());\n this.updateModel(event);\n event.preventDefault();\n }\n\n this.$emit('keydown', event);\n },\n onKeyPress(event) {\n if (this.readonly) {\n return;\n }\n\n var k = event.code,\n pos = this.caret(),\n p,\n c,\n next,\n completed;\n\n if (event.ctrlKey || event.altKey || event.metaKey || event.shiftKey || event.key === 'CapsLock' || event.key === 'Escape' || event.key === 'Tab') {\n //Ignore\n return;\n } else if (k && k !== 'Enter') {\n if (pos.end - pos.begin !== 0) {\n this.clearBuffer(pos.begin, pos.end);\n this.shiftL(pos.begin, pos.end - 1);\n }\n\n p = this.seekNext(pos.begin - 1);\n\n if (p < this.len) {\n c = event.key;\n\n if (this.tests[p].test(c)) {\n this.shiftR(p);\n\n this.buffer[p] = c;\n this.writeBuffer();\n next = this.seekNext(p);\n\n if (/android/i.test(getUserAgent())) {\n //Path for CSP Violation on FireFox OS 1.1\n let proxy = () => {\n this.caret(next);\n };\n\n setTimeout(proxy, 0);\n } else {\n this.caret(next);\n }\n\n if (pos.begin <= this.lastRequiredNonMaskPos) {\n completed = this.isCompleted();\n }\n }\n }\n\n event.preventDefault();\n }\n\n this.updateModel(event);\n\n if (completed) {\n this.$emit('complete', event);\n }\n\n this.$emit('keypress', event);\n },\n onPaste(event) {\n this.handleInputChange(event);\n\n this.$emit('paste', event);\n },\n caret(first, last) {\n let range, begin, end;\n\n if (!this.$el.offsetParent || this.$el !== document.activeElement) {\n return;\n }\n\n if (typeof first === 'number') {\n begin = first;\n end = typeof last === 'number' ? last : begin;\n\n if (this.$el.setSelectionRange) {\n this.$el.setSelectionRange(begin, end);\n } else if (this.$el['createTextRange']) {\n range = this.$el['createTextRange']();\n range.collapse(true);\n range.moveEnd('character', end);\n range.moveStart('character', begin);\n range.select();\n }\n } else {\n if (this.$el.setSelectionRange) {\n begin = this.$el.selectionStart;\n end = this.$el.selectionEnd;\n } else if (document['selection'] && document['selection'].createRange) {\n range = document['selection'].createRange();\n begin = 0 - range.duplicate().moveStart('character', -100000);\n end = begin + range.text.length;\n }\n\n return { begin: begin, end: end };\n }\n },\n isCompleted() {\n for (let i = this.firstNonMaskPos; i <= this.lastRequiredNonMaskPos; i++) {\n if (this.tests[i] && this.buffer[i] === this.getPlaceholder(i)) {\n return false;\n }\n }\n\n return true;\n },\n getPlaceholder(i) {\n if (i < this.slotChar.length) {\n return this.slotChar.charAt(i);\n }\n\n return this.slotChar.charAt(0);\n },\n seekNext(pos) {\n while (++pos < this.len && !this.tests[pos]);\n\n return pos;\n },\n seekPrev(pos) {\n while (--pos >= 0 && !this.tests[pos]);\n\n return pos;\n },\n shiftL(begin, end) {\n let i, j;\n\n if (begin < 0) {\n return;\n }\n\n for (i = begin, j = this.seekNext(end); i < this.len; i++) {\n if (this.tests[i]) {\n if (j < this.len && this.tests[i].test(this.buffer[j])) {\n this.buffer[i] = this.buffer[j];\n this.buffer[j] = this.getPlaceholder(j);\n } else {\n break;\n }\n\n j = this.seekNext(j);\n }\n }\n\n this.writeBuffer();\n this.caret(Math.max(this.firstNonMaskPos, begin));\n },\n shiftR(pos) {\n let i, c, j, t;\n\n for (i = pos, c = this.getPlaceholder(pos); i < this.len; i++) {\n if (this.tests[i]) {\n j = this.seekNext(i);\n t = this.buffer[i];\n this.buffer[i] = c;\n\n if (j < this.len && this.tests[j].test(t)) {\n c = t;\n } else {\n break;\n }\n }\n }\n },\n handleAndroidInput(event) {\n var curVal = this.$el.value;\n var pos = this.caret();\n\n if (this.oldVal && this.oldVal.length && this.oldVal.length > curVal.length) {\n // a deletion or backspace happened\n this.checkVal(true);\n while (pos.begin > 0 && !this.tests[pos.begin - 1]) pos.begin--;\n\n if (pos.begin === 0) {\n while (pos.begin < this.firstNonMaskPos && !this.tests[pos.begin]) pos.begin++;\n }\n\n this.caret(pos.begin, pos.begin);\n } else {\n this.checkVal(true);\n while (pos.begin < this.len && !this.tests[pos.begin]) pos.begin++;\n\n this.caret(pos.begin, pos.begin);\n }\n\n if (this.isCompleted()) {\n this.$emit('complete', event);\n }\n },\n clearBuffer(start, end) {\n let i;\n\n for (i = start; i < end && i < this.len; i++) {\n if (this.tests[i]) {\n this.buffer[i] = this.getPlaceholder(i);\n }\n }\n },\n writeBuffer() {\n this.$el.value = this.buffer.join('');\n },\n checkVal(allow) {\n this.isValueChecked = true;\n //try to place characters where they belong\n let test = this.$el.value,\n lastMatch = -1,\n i,\n c,\n pos;\n\n for (i = 0, pos = 0; i < this.len; i++) {\n if (this.tests[i]) {\n this.buffer[i] = this.getPlaceholder(i);\n\n while (pos++ < test.length) {\n c = test.charAt(pos - 1);\n\n if (this.tests[i].test(c)) {\n this.buffer[i] = c;\n lastMatch = i;\n break;\n }\n }\n\n if (pos > test.length) {\n this.clearBuffer(i + 1, this.len);\n break;\n }\n } else {\n if (this.buffer[i] === test.charAt(pos)) {\n pos++;\n }\n\n if (i < this.partialPosition) {\n lastMatch = i;\n }\n }\n }\n\n if (allow) {\n this.writeBuffer();\n } else if (lastMatch + 1 < this.partialPosition) {\n if (this.autoClear || this.buffer.join('') === this.defaultBuffer) {\n // Invalid value. Remove it and replace it with the\n // mask, which is the default behavior.\n if (this.$el.value) this.$el.value = '';\n this.clearBuffer(0, this.len);\n } else {\n // Invalid value, but we opt to show the value to the\n // user and allow them to correct their mistake.\n this.writeBuffer();\n }\n } else {\n this.writeBuffer();\n this.$el.value = this.$el.value.substring(0, lastMatch + 1);\n }\n\n return this.partialPosition ? i : this.firstNonMaskPos;\n },\n handleInputChange(event) {\n const isPasteEvent = event.type === 'paste';\n\n if (this.readonly || isPasteEvent) {\n return;\n }\n\n var pos = this.checkVal(true);\n\n this.caret(pos);\n this.updateModel(event);\n\n if (this.isCompleted()) {\n this.$emit('complete', event);\n }\n },\n getUnmaskedValue() {\n let unmaskedBuffer = [];\n\n for (let i = 0; i < this.buffer.length; i++) {\n let c = this.buffer[i];\n\n if (this.tests[i] && c !== this.getPlaceholder(i)) {\n unmaskedBuffer.push(c);\n }\n }\n\n return unmaskedBuffer.join('');\n },\n updateModel(e) {\n let val = this.unmask ? this.getUnmaskedValue() : e.target.value;\n\n this.$emit('update:modelValue', this.defaultBuffer !== val ? val : '');\n },\n updateValue(updateModel = true) {\n if (this.$el) {\n if (this.modelValue == null) {\n this.$el.value = '';\n updateModel && this.$emit('update:modelValue', '');\n } else {\n this.$el.value = this.modelValue;\n this.checkVal();\n\n setTimeout(() => {\n if (this.$el) {\n this.writeBuffer();\n this.checkVal();\n\n if (updateModel) {\n let val = this.unmask ? this.getUnmaskedValue() : this.$el.value;\n\n this.$emit('update:modelValue', this.defaultBuffer !== val ? val : '');\n }\n }\n }, 10);\n }\n\n this.focusText = this.$el.value;\n }\n },\n initMask() {\n this.tests = [];\n this.partialPosition = this.mask.length;\n this.len = this.mask.length;\n this.firstNonMaskPos = null;\n this.defs = {\n 9: '[0-9]',\n a: '[A-Za-z]',\n '*': '[A-Za-z0-9]'\n };\n\n let ua = getUserAgent();\n\n this.androidChrome = /chrome/i.test(ua) && /android/i.test(ua);\n\n let maskTokens = this.mask.split('');\n\n for (let i = 0; i < maskTokens.length; i++) {\n let c = maskTokens[i];\n\n if (c === '?') {\n this.len--;\n this.partialPosition = i;\n } else if (this.defs[c]) {\n this.tests.push(new RegExp(this.defs[c]));\n\n if (this.firstNonMaskPos === null) {\n this.firstNonMaskPos = this.tests.length - 1;\n }\n\n if (i < this.partialPosition) {\n this.lastRequiredNonMaskPos = this.tests.length - 1;\n }\n } else {\n this.tests.push(null);\n }\n }\n\n this.buffer = [];\n\n for (let i = 0; i < maskTokens.length; i++) {\n let c = maskTokens[i];\n\n if (c !== '?') {\n if (this.defs[c]) this.buffer.push(this.getPlaceholder(i));\n else this.buffer.push(c);\n }\n }\n\n this.defaultBuffer = this.buffer.join('');\n this.updateValue(false);\n },\n isValueUpdated() {\n return this.unmask ? this.modelValue != this.getUnmaskedValue() : this.defaultBuffer !== this.$el.value && this.$el.value !== this.modelValue;\n }\n },\n computed: {\n filled() {\n return this.modelValue != null && this.modelValue.toString().length > 0;\n },\n inputClass() {\n return [this.cx('root'), this.class];\n },\n rootPTOptions() {\n return mergeProps(this.ptmi('root', this.ptmParams), this.ptm('pcInputText', this.ptmParams));\n },\n ptmParams() {\n return {\n context: {\n filled: this.filled\n }\n };\n },\n hasFluid() {\n return isEmpty(this.fluid) ? !!this.$pcFluid : this.fluid;\n }\n },\n components: {\n InputText\n }\n};\n</script>\n"],"names":["name","BaseComponent","props","modelValue","slotChar","type","String","id","Object","mask","placeholder","autoClear","Boolean","unmask","readonly","invalid","disabled","variant","fluid","style","InputMaskStyle","provide","$pcInputMask","$parentInstance","BaseInputMask","inheritAttrs","emits","inject","$pcFluid","watch","newMask","oldMask","initMask","mounted","updated","isValueUpdated","updateValue","methods","onInput","event","androidChrome","handleAndroidInput","handleInputChange","$emit","target","value","onFocus","_this","focus","clearTimeout","caretTimeoutId","pos","focusText","$el","checkVal","setTimeout","document","activeElement","writeBuffer","replace","length","caret","onBlur","updateModel","e","createEvent","initEvent","dispatchEvent","onKeyDown","k","code","begin","end","iPhone","test","getUserAgent","oldVal","seekPrev","seekNext","clearBuffer","shiftL","preventDefault","blur","onKeyPress","_this2","p","c","next","completed","ctrlKey","altKey","metaKey","shiftKey","key","len","tests","shiftR","buffer","proxy","lastRequiredNonMaskPos","isCompleted","onPaste","first","last","range","offsetParent","setSelectionRange","collapse","moveEnd","moveStart","select","selectionStart","selectionEnd","createRange","duplicate","text","i","firstNonMaskPos","getPlaceholder","charAt","j","Math","max","t","curVal","start","join","allow","isValueChecked","lastMatch","partialPosition","defaultBuffer","substring","isPasteEvent","getUnmaskedValue","unmaskedBuffer","push","val","_this3","arguments","undefined","defs","a","ua","maskTokens","split","RegExp","computed","filled","toString","inputClass","cx","rootPTOptions","mergeProps","ptmi","ptmParams","ptm","context","hasFluid","isEmpty","components","InputText","_createBlock","_component_InputText","_ctx","$options","unstyled","onKeydown","onKeypress","pt"],"mappings":";;;;;;;AAIA,eAAe;AACXA,EAAAA,IAAI,EAAE,eAAe;AACrB,EAAA,SAAA,EAASC,aAAa;AACtBC,EAAAA,KAAK,EAAE;AACHC,IAAAA,UAAU,EAAE,IAAI;AAChBC,IAAAA,QAAQ,EAAE;AACNC,MAAAA,IAAI,EAAEC,MAAM;MACZ,SAAS,EAAA,GAAA;KACZ;AACDC,IAAAA,EAAE,EAAE;AACAF,MAAAA,IAAI,EAAEC,MAAM;MACZ,SAAS,EAAA,IAAA;KACZ;IACD,OAAO,EAAA;AACHD,MAAAA,IAAI,EAAE,CAACC,MAAM,EAAEE,MAAM,CAAC;MACtB,SAAS,EAAA,IAAA;KACZ;AACDC,IAAAA,IAAI,EAAE;AACFJ,MAAAA,IAAI,EAAEC,MAAM;MACZ,SAAS,EAAA,IAAA;KACZ;AACDI,IAAAA,WAAW,EAAE;AACTL,MAAAA,IAAI,EAAEC,MAAM;MACZ,SAAS,EAAA,IAAA;KACZ;AACDK,IAAAA,SAAS,EAAE;AACPN,MAAAA,IAAI,EAAEO,OAAO;MACb,SAAS,EAAA,IAAA;KACZ;AACDC,IAAAA,MAAM,EAAE;AACJR,MAAAA,IAAI,EAAEO,OAAO;MACb,SAAS,EAAA,KAAA;KACZ;AACDE,IAAAA,QAAQ,EAAE;AACNT,MAAAA,IAAI,EAAEO,OAAO;MACb,SAAS,EAAA,KAAA;KACZ;AACDG,IAAAA,OAAO,EAAE;AACLV,MAAAA,IAAI,EAAEO,OAAO;MACb,SAAS,EAAA,KAAA;KACZ;AACDI,IAAAA,QAAQ,EAAE;AACNX,MAAAA,IAAI,EAAEO,OAAO;MACb,SAAS,EAAA,KAAA;KACZ;AACDZ,IAAAA,IAAI,EAAE;AACFK,MAAAA,IAAI,EAAEC,MAAM;MACZ,SAAS,EAAA,IAAA;KACZ;AACDW,IAAAA,OAAO,EAAE;AACLZ,MAAAA,IAAI,EAAEC,MAAM;MACZ,SAAS,EAAA,IAAA;KACZ;AACDY,IAAAA,KAAK,EAAE;AACHb,MAAAA,IAAI,EAAEO,OAAO;MACb,SAAS,EAAA,IAAA;AACb,KAAA;GACH;AACDO,EAAAA,KAAK,EAAEC,cAAc;EACrBC,OAAO,EAAA,SAAPA,OAAOA,GAAG;IACN,OAAO;AACHC,MAAAA,YAAY,EAAE,IAAI;AAClBC,MAAAA,eAAe,EAAE,IAAA;KACpB,CAAA;AACL,GAAA;AACJ,CAAC;;ACvCD,aAAe;AACXvB,EAAAA,IAAI,EAAE,WAAW;AACjB,EAAA,SAAA,EAASwB,QAAa;AACtBC,EAAAA,YAAY,EAAE,KAAK;AACnBC,EAAAA,KAAK,EAAE,CAAC,mBAAmB,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,CAAC;AACzFC,EAAAA,MAAM,EAAE;AACJC,IAAAA,QAAQ,EAAE;MAAE,SAAS,EAAA,IAAA;AAAK,KAAA;GAC7B;AACDC,EAAAA,KAAK,EAAE;AACHpB,IAAAA,IAAI,WAAJA,IAAIA,CAACqB,OAAO,EAAEC,OAAO,EAAE;MACnB,IAAIA,OAAM,KAAMD,OAAO,EAAE;QACrB,IAAI,CAACE,QAAQ,EAAE,CAAA;AACnB,OAAA;AACJ,KAAA;GACH;EACDC,OAAO,EAAA,SAAPA,OAAOA,GAAG;IACN,IAAI,CAACD,QAAQ,EAAE,CAAA;GAClB;EACDE,OAAO,EAAA,SAAPA,OAAOA,GAAG;AACN,IAAA,IAAI,IAAI,CAACC,cAAc,EAAE,EAAE;MACvB,IAAI,CAACC,WAAW,EAAE,CAAA;AACtB,KAAA;GACH;AACDC,EAAAA,OAAO,EAAE;AACLC,IAAAA,OAAO,EAAPA,SAAAA,OAAOA,CAACC,KAAK,EAAE;AACX,MAAA,IAAI,IAAI,CAACC,aAAa,EAAE,IAAI,CAACC,kBAAkB,CAACF,KAAK,CAAC,CAAA,KACjD,IAAI,CAACG,iBAAiB,CAACH,KAAK,CAAC,CAAA;MAElC,IAAI,CAACI,KAAK,CAAC,mBAAmB,EAAEJ,KAAK,CAACK,MAAM,CAACC,KAAK,CAAC,CAAA;KACtD;AACDC,IAAAA,OAAO,EAAPA,SAAAA,OAAOA,CAACP,KAAK,EAAE;AAAA,MAAA,IAAAQ,KAAA,GAAA,IAAA,CAAA;MACX,IAAI,IAAI,CAACjC,QAAQ,EAAE;AACf,QAAA,OAAA;AACJ,OAAA;MAEA,IAAI,CAACkC,KAAM,GAAE,IAAI,CAAA;AAEjBC,MAAAA,YAAY,CAAC,IAAI,CAACC,cAAc,CAAC,CAAA;AACjC,MAAA,IAAIC,GAAG,CAAA;AAEP,MAAA,IAAI,CAACC,SAAQ,GAAI,IAAI,CAACC,GAAG,CAACR,KAAK,CAAA;AAE/BM,MAAAA,GAAI,GAAE,IAAI,CAACG,QAAQ,EAAE,CAAA;AAErB,MAAA,IAAI,CAACJ,cAAa,GAAIK,UAAU,CAAC,YAAM;AACnC,QAAA,IAAIR,KAAI,CAACM,QAAQG,QAAQ,CAACC,aAAa,EAAE;AACrC,UAAA,OAAA;AACJ,SAAA;QAEAV,KAAI,CAACW,WAAW,EAAE,CAAA;AAElB,QAAA,IAAIP,GAAI,KAAIJ,KAAI,CAACtC,IAAI,CAACkD,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAACC,MAAM,EAAE;AAC3Cb,UAAAA,KAAI,CAACc,KAAK,CAAC,CAAC,EAAEV,GAAG,CAAC,CAAA;AACtB,SAAE,MAAK;AACHJ,UAAAA,KAAI,CAACc,KAAK,CAACV,GAAG,CAAC,CAAA;AACnB,SAAA;OACH,EAAE,EAAE,CAAC,CAAA;AAEN,MAAA,IAAI,CAACR,KAAK,CAAC,OAAO,EAAEJ,KAAK,CAAC,CAAA;KAC7B;AACDuB,IAAAA,MAAM,EAANA,SAAAA,MAAMA,CAACvB,KAAK,EAAE;MACV,IAAI,CAACS,KAAI,GAAI,KAAK,CAAA;MAClB,IAAI,CAACM,QAAQ,EAAE,CAAA;AACf,MAAA,IAAI,CAACS,WAAW,CAACxB,KAAK,CAAC,CAAA;MAEvB,IAAI,IAAI,CAACc,GAAG,CAACR,KAAI,KAAM,IAAI,CAACO,SAAS,EAAE;AACnC,QAAA,IAAIY,CAAA,GAAIR,QAAQ,CAACS,WAAW,CAAC,YAAY,CAAC,CAAA;QAE1CD,CAAC,CAACE,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,CAAC,CAAA;AAClC,QAAA,IAAI,CAACb,GAAG,CAACc,aAAa,CAACH,CAAC,CAAC,CAAA;AAC7B,OAAA;AAEA,MAAA,IAAI,CAACrB,KAAK,CAAC,MAAM,EAAEJ,KAAK,CAAC,CAAA;KAC5B;AACD6B,IAAAA,SAAS,EAATA,SAAAA,SAASA,CAAC7B,KAAK,EAAE;MACb,IAAI,IAAI,CAACzB,QAAQ,EAAE;AACf,QAAA,OAAA;AACJ,OAAA;AAEA,MAAA,IAAIuD,CAAE,GAAE9B,KAAK,CAAC+B,IAAI;QACdnB,GAAG;QACHoB,KAAK;QACLC,GAAG,CAAA;MACP,IAAIC,MAAK,GAAI,SAAS,CAACC,IAAI,CAACC,YAAY,EAAE,CAAC,CAAA;AAE3C,MAAA,IAAI,CAACC,MAAK,GAAI,IAAI,CAACvB,GAAG,CAACR,KAAK,CAAA;;AAE5B;AACA,MAAA,IAAIwB,CAAA,KAAM,WAAU,IAAKA,CAAE,KAAI,QAAS,IAAII,MAAK,IAAKJ,MAAM,QAAS,EAAE;AACnElB,QAAAA,GAAE,GAAI,IAAI,CAACU,KAAK,EAAE,CAAA;QAClBU,KAAI,GAAIpB,GAAG,CAACoB,KAAK,CAAA;QACjBC,MAAMrB,GAAG,CAACqB,GAAG,CAAA;AAEb,QAAA,IAAIA,MAAMD,KAAM,KAAI,CAAC,EAAE;UACnBA,KAAI,GAAIF,CAAA,KAAM,QAAO,GAAI,IAAI,CAACQ,QAAQ,CAACN,KAAK,CAAE,GAAGC,GAAE,GAAI,IAAI,CAACM,QAAQ,CAACP,KAAI,GAAI,CAAC,CAAE,CAAA;AAChFC,UAAAA,GAAI,GAAEH,CAAE,KAAI,QAAO,GAAI,IAAI,CAACS,QAAQ,CAACN,GAAG,IAAIA,GAAG,CAAA;AACnD,SAAA;AAEA,QAAA,IAAI,CAACO,WAAW,CAACR,KAAK,EAAEC,GAAG,CAAC,CAAA;QAC5B,IAAI,CAACQ,MAAM,CAACT,KAAK,EAAEC,GAAE,GAAI,CAAC,CAAC,CAAA;AAC3B,QAAA,IAAI,CAACT,WAAW,CAACxB,KAAK,CAAC,CAAA;QAEvBA,KAAK,CAAC0C,cAAc,EAAE,CAAA;AAC1B,OAAA,MAAO,IAAIZ,CAAE,KAAI,OAAO,EAAE;AACtB;AACA,QAAA,IAAI,CAAChB,GAAG,CAAC6B,IAAI,EAAE,CAAA;AACf,QAAA,IAAI,CAACnB,WAAW,CAACxB,KAAK,CAAC,CAAA;AAC3B,OAAA,MAAO,IAAI8B,CAAE,KAAI,QAAQ,EAAE;AACvB;AACA,QAAA,IAAI,CAAChB,GAAG,CAACR,KAAI,GAAI,IAAI,CAACO,SAAS,CAAA;QAC/B,IAAI,CAACS,KAAK,CAAC,CAAC,EAAE,IAAI,CAACP,QAAQ,EAAE,CAAC,CAAA;AAC9B,QAAA,IAAI,CAACS,WAAW,CAACxB,KAAK,CAAC,CAAA;QACvBA,KAAK,CAAC0C,cAAc,EAAE,CAAA;AAC1B,OAAA;AAEA,MAAA,IAAI,CAACtC,KAAK,CAAC,SAAS,EAAEJ,KAAK,CAAC,CAAA;KAC/B;AACD4C,IAAAA,UAAU,EAAVA,SAAAA,UAAUA,CAAC5C,KAAK,EAAE;AAAA,MAAA,IAAA6C,MAAA,GAAA,IAAA,CAAA;MACd,IAAI,IAAI,CAACtE,QAAQ,EAAE;AACf,QAAA,OAAA;AACJ,OAAA;AAEA,MAAA,IAAIuD,CAAE,GAAE9B,KAAK,CAAC+B,IAAI;AACdnB,QAAAA,GAAE,GAAI,IAAI,CAACU,KAAK,EAAE;QAClBwB,CAAC;QACDC,CAAC;QACDC,IAAI;QACJC,SAAS,CAAA;AAEb,MAAA,IAAIjD,KAAK,CAACkD,OAAQ,IAAGlD,KAAK,CAACmD,MAAO,IAAGnD,KAAK,CAACoD,OAAM,IAAKpD,KAAK,CAACqD,QAAO,IAAKrD,KAAK,CAACsD,GAAI,KAAI,UAAS,IAAKtD,KAAK,CAACsD,GAAI,KAAI,QAAO,IAAKtD,KAAK,CAACsD,GAAI,KAAI,KAAK,EAAE;AAC/I;AACA,QAAA,OAAA;AACJ,OAAE,MAAK,IAAIxB,KAAKA,MAAM,OAAO,EAAE;QAC3B,IAAIlB,GAAG,CAACqB,GAAE,GAAIrB,GAAG,CAACoB,UAAU,CAAC,EAAE;UAC3B,IAAI,CAACQ,WAAW,CAAC5B,GAAG,CAACoB,KAAK,EAAEpB,GAAG,CAACqB,GAAG,CAAC,CAAA;AACpC,UAAA,IAAI,CAACQ,MAAM,CAAC7B,GAAG,CAACoB,KAAK,EAAEpB,GAAG,CAACqB,GAAI,GAAE,CAAC,CAAC,CAAA;AACvC,SAAA;QAEAa,CAAE,GAAE,IAAI,CAACP,QAAQ,CAAC3B,GAAG,CAACoB,KAAI,GAAI,CAAC,CAAC,CAAA;AAEhC,QAAA,IAAIc,CAAE,GAAE,IAAI,CAACS,GAAG,EAAE;UACdR,CAAE,GAAE/C,KAAK,CAACsD,GAAG,CAAA;UAEb,IAAI,IAAI,CAACE,KAAK,CAACV,CAAC,CAAC,CAACX,IAAI,CAACY,CAAC,CAAC,EAAE;AACvB,YAAA,IAAI,CAACU,MAAM,CAACX,CAAC,CAAC,CAAA;AAEd,YAAA,IAAI,CAACY,MAAM,CAACZ,CAAC,CAAA,GAAIC,CAAC,CAAA;YAClB,IAAI,CAAC5B,WAAW,EAAE,CAAA;AAClB6B,YAAAA,IAAG,GAAI,IAAI,CAACT,QAAQ,CAACO,CAAC,CAAC,CAAA;YAEvB,IAAI,UAAU,CAACX,IAAI,CAACC,YAAY,EAAE,CAAC,EAAE;AACjC;AACA,cAAA,IAAIuB,KAAI,GAAI,SAARA,KAAIA,GAAU;AACdd,gBAAAA,MAAI,CAACvB,KAAK,CAAC0B,IAAI,CAAC,CAAA;eACnB,CAAA;AAEDhC,cAAAA,UAAU,CAAC2C,KAAK,EAAE,CAAC,CAAC,CAAA;AACxB,aAAE,MAAK;AACH,cAAA,IAAI,CAACrC,KAAK,CAAC0B,IAAI,CAAC,CAAA;AACpB,aAAA;AAEA,YAAA,IAAIpC,GAAG,CAACoB,KAAI,IAAK,IAAI,CAAC4B,sBAAsB,EAAE;AAC1CX,cAAAA,SAAU,GAAE,IAAI,CAACY,WAAW,EAAE,CAAA;AAClC,aAAA;AACJ,WAAA;AACJ,SAAA;QAEA7D,KAAK,CAAC0C,cAAc,EAAE,CAAA;AAC1B,OAAA;AAEA,MAAA,IAAI,CAAClB,WAAW,CAACxB,KAAK,CAAC,CAAA;AAEvB,MAAA,IAAIiD,SAAS,EAAE;AACX,QAAA,IAAI,CAAC7C,KAAK,CAAC,UAAU,EAAEJ,KAAK,CAAC,CAAA;AACjC,OAAA;AAEA,MAAA,IAAI,CAACI,KAAK,CAAC,UAAU,EAAEJ,KAAK,CAAC,CAAA;KAChC;AACD8D,IAAAA,OAAO,EAAPA,SAAAA,OAAOA,CAAC9D,KAAK,EAAE;AACX,MAAA,IAAI,CAACG,iBAAiB,CAACH,KAAK,CAAC,CAAA;AAE7B,MAAA,IAAI,CAACI,KAAK,CAAC,OAAO,EAAEJ,KAAK,CAAC,CAAA;KAC7B;AACDsB,IAAAA,KAAK,WAALA,KAAKA,CAACyC,KAAK,EAAEC,IAAI,EAAE;AACf,MAAA,IAAIC,KAAK,EAAEjC,KAAK,EAAEC,GAAG,CAAA;AAErB,MAAA,IAAI,CAAC,IAAI,CAACnB,GAAG,CAACoD,YAAa,IAAG,IAAI,CAACpD,GAAI,KAAIG,QAAQ,CAACC,aAAa,EAAE;AAC/D,QAAA,OAAA;AACJ,OAAA;AAEA,MAAA,IAAI,OAAO6C,UAAU,QAAQ,EAAE;AAC3B/B,QAAAA,KAAI,GAAI+B,KAAK,CAAA;QACb9B,GAAE,GAAI,OAAO+B,IAAK,KAAI,WAAWA,OAAOhC,KAAK,CAAA;AAE7C,QAAA,IAAI,IAAI,CAAClB,GAAG,CAACqD,iBAAiB,EAAE;UAC5B,IAAI,CAACrD,GAAG,CAACqD,iBAAiB,CAACnC,KAAK,EAAEC,GAAG,CAAC,CAAA;SAC1C,MAAO,IAAI,IAAI,CAACnB,GAAG,CAAC,iBAAiB,CAAC,EAAE;UACpCmD,KAAI,GAAI,IAAI,CAACnD,GAAG,CAAC,iBAAiB,CAAC,EAAE,CAAA;AACrCmD,UAAAA,KAAK,CAACG,QAAQ,CAAC,IAAI,CAAC,CAAA;AACpBH,UAAAA,KAAK,CAACI,OAAO,CAAC,WAAW,EAAEpC,GAAG,CAAC,CAAA;AAC/BgC,UAAAA,KAAK,CAACK,SAAS,CAAC,WAAW,EAAEtC,KAAK,CAAC,CAAA;UACnCiC,KAAK,CAACM,MAAM,EAAE,CAAA;AAClB,SAAA;AACJ,OAAE,MAAK;AACH,QAAA,IAAI,IAAI,CAACzD,GAAG,CAACqD,iBAAiB,EAAE;AAC5BnC,UAAAA,KAAM,GAAE,IAAI,CAAClB,GAAG,CAAC0D,cAAc,CAAA;AAC/BvC,UAAAA,MAAM,IAAI,CAACnB,GAAG,CAAC2D,YAAY,CAAA;AAC/B,SAAA,MAAO,IAAIxD,QAAQ,CAAC,WAAW,CAAA,IAAKA,QAAQ,CAAC,WAAW,CAAC,CAACyD,WAAW,EAAE;UACnET,KAAM,GAAEhD,QAAQ,CAAC,WAAW,CAAC,CAACyD,WAAW,EAAE,CAAA;AAC3C1C,UAAAA,KAAM,GAAE,IAAIiC,KAAK,CAACU,SAAS,EAAE,CAACL,SAAS,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,CAAA;AAC7DrC,UAAAA,GAAI,GAAED,KAAI,GAAIiC,KAAK,CAACW,IAAI,CAACvD,MAAM,CAAA;AACnC,SAAA;QAEA,OAAO;AAAEW,UAAAA,KAAK,EAAEA,KAAK;AAAEC,UAAAA,GAAG,EAAEA,GAAAA;SAAK,CAAA;AACrC,OAAA;KACH;IACD4B,WAAW,EAAA,SAAXA,WAAWA,GAAG;AACV,MAAA,KAAK,IAAIgB,CAAE,GAAE,IAAI,CAACC,eAAe,EAAED,CAAE,IAAG,IAAI,CAACjB,sBAAsB,EAAEiB,CAAC,EAAE,EAAE;QACtE,IAAI,IAAI,CAACrB,KAAK,CAACqB,CAAC,CAAE,IAAG,IAAI,CAACnB,MAAM,CAACmB,CAAC,CAAA,KAAM,IAAI,CAACE,cAAc,CAACF,CAAC,CAAC,EAAE;AAC5D,UAAA,OAAO,KAAK,CAAA;AAChB,SAAA;AACJ,OAAA;AAEA,MAAA,OAAO,IAAI,CAAA;KACd;AACDE,IAAAA,cAAc,EAAdA,SAAAA,cAAcA,CAACF,CAAC,EAAE;AACd,MAAA,IAAIA,CAAA,GAAI,IAAI,CAAChH,QAAQ,CAACwD,MAAM,EAAE;AAC1B,QAAA,OAAO,IAAI,CAACxD,QAAQ,CAACmH,MAAM,CAACH,CAAC,CAAC,CAAA;AAClC,OAAA;AAEA,MAAA,OAAO,IAAI,CAAChH,QAAQ,CAACmH,MAAM,CAAC,CAAC,CAAC,CAAA;KACjC;AACDzC,IAAAA,QAAQ,EAARA,SAAAA,QAAQA,CAAC3B,GAAG,EAAE;AACV,MAAA,OAAO,EAAEA,GAAE,GAAI,IAAI,CAAC2C,GAAI,IAAG,CAAC,IAAI,CAACC,KAAK,CAAC5C,GAAG,CAAC,CAAC,CAAA;AAE5C,MAAA,OAAOA,GAAG,CAAA;KACb;AACD0B,IAAAA,QAAQ,EAARA,SAAAA,QAAQA,CAAC1B,GAAG,EAAE;AACV,MAAA,OAAO,EAAEA,GAAE,IAAK,KAAK,CAAC,IAAI,CAAC4C,KAAK,CAAC5C,GAAG,CAAC,CAAC,CAAA;AAEtC,MAAA,OAAOA,GAAG,CAAA;KACb;AACD6B,IAAAA,MAAM,WAANA,MAAMA,CAACT,KAAK,EAAEC,GAAG,EAAE;MACf,IAAI4C,CAAC,EAAEI,CAAC,CAAA;MAER,IAAIjD,KAAI,GAAI,CAAC,EAAE;AACX,QAAA,OAAA;AACJ,OAAA;MAEA,KAAK6C,CAAA,GAAI7C,KAAK,EAAEiD,CAAE,GAAE,IAAI,CAAC1C,QAAQ,CAACN,GAAG,CAAC,EAAE4C,IAAI,IAAI,CAACtB,GAAG,EAAEsB,CAAC,EAAE,EAAE;AACvD,QAAA,IAAI,IAAI,CAACrB,KAAK,CAACqB,CAAC,CAAC,EAAE;UACf,IAAII,CAAE,GAAE,IAAI,CAAC1B,OAAO,IAAI,CAACC,KAAK,CAACqB,CAAC,CAAC,CAAC1C,IAAI,CAAC,IAAI,CAACuB,MAAM,CAACuB,CAAC,CAAC,CAAC,EAAE;YACpD,IAAI,CAACvB,MAAM,CAACmB,CAAC,CAAA,GAAI,IAAI,CAACnB,MAAM,CAACuB,CAAC,CAAC,CAAA;YAC/B,IAAI,CAACvB,MAAM,CAACuB,CAAC,CAAE,GAAE,IAAI,CAACF,cAAc,CAACE,CAAC,CAAC,CAAA;AAC3C,WAAE,MAAK;AACH,YAAA,MAAA;AACJ,WAAA;AAEAA,UAAAA,CAAA,GAAI,IAAI,CAAC1C,QAAQ,CAAC0C,CAAC,CAAC,CAAA;AACxB,SAAA;AACJ,OAAA;MAEA,IAAI,CAAC9D,WAAW,EAAE,CAAA;AAClB,MAAA,IAAI,CAACG,KAAK,CAAC4D,IAAI,CAACC,GAAG,CAAC,IAAI,CAACL,eAAe,EAAE9C,KAAK,CAAC,CAAC,CAAA;KACpD;AACDyB,IAAAA,MAAM,EAANA,SAAAA,MAAMA,CAAC7C,GAAG,EAAE;AACR,MAAA,IAAIiE,CAAC,EAAE9B,CAAC,EAAEkC,CAAC,EAAEG,CAAC,CAAA;MAEd,KAAKP,CAAA,GAAIjE,GAAG,EAAEmC,CAAE,GAAE,IAAI,CAACgC,cAAc,CAACnE,GAAG,CAAC,EAAEiE,CAAE,GAAE,IAAI,CAACtB,GAAG,EAAEsB,CAAC,EAAE,EAAE;AAC3D,QAAA,IAAI,IAAI,CAACrB,KAAK,CAACqB,CAAC,CAAC,EAAE;AACfI,UAAAA,CAAA,GAAI,IAAI,CAAC1C,QAAQ,CAACsC,CAAC,CAAC,CAAA;AACpBO,UAAAA,CAAA,GAAI,IAAI,CAAC1B,MAAM,CAACmB,CAAC,CAAC,CAAA;AAClB,UAAA,IAAI,CAACnB,MAAM,CAACmB,CAAC,CAAA,GAAI9B,CAAC,CAAA;AAElB,UAAA,IAAIkC,CAAE,GAAE,IAAI,CAAC1B,GAAE,IAAK,IAAI,CAACC,KAAK,CAACyB,CAAC,CAAC,CAAC9C,IAAI,CAACiD,CAAC,CAAC,EAAE;AACvCrC,YAA