primevue 4.3.6 → 4.3.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (246) hide show
  1. package/accordion/index.mjs.map +1 -1
  2. package/accordioncontent/index.mjs.map +1 -1
  3. package/accordionheader/index.mjs.map +1 -1
  4. package/accordionpanel/index.mjs.map +1 -1
  5. package/accordionpanel/style/index.mjs.map +1 -1
  6. package/accordiontab/index.mjs.map +1 -1
  7. package/animateonscroll/index.mjs.map +1 -1
  8. package/autocomplete/index.mjs.map +1 -1
  9. package/autocomplete/style/index.mjs +0 -1
  10. package/autocomplete/style/index.mjs.map +1 -1
  11. package/avatar/index.mjs.map +1 -1
  12. package/avatar/style/index.mjs.map +1 -1
  13. package/avatargroup/index.mjs.map +1 -1
  14. package/badge/index.mjs.map +1 -1
  15. package/badge/style/index.mjs.map +1 -1
  16. package/badgedirective/index.mjs.map +1 -1
  17. package/blockui/index.mjs.map +1 -1
  18. package/breadcrumb/index.mjs.map +1 -1
  19. package/breadcrumb/style/index.mjs.map +1 -1
  20. package/button/index.mjs.map +1 -1
  21. package/button/style/index.mjs.map +1 -1
  22. package/buttongroup/index.mjs.map +1 -1
  23. package/calendar/index.d.ts +2 -2
  24. package/calendar/index.mjs.map +1 -1
  25. package/card/index.mjs.map +1 -1
  26. package/carousel/index.mjs.map +1 -1
  27. package/carousel/style/index.mjs.map +1 -1
  28. package/cascadeselect/index.mjs.map +1 -1
  29. package/cascadeselect/style/index.mjs.map +1 -1
  30. package/chart/index.mjs.map +1 -1
  31. package/checkbox/index.mjs.map +1 -1
  32. package/checkbox/style/index.mjs.map +1 -1
  33. package/checkboxgroup/index.mjs.map +1 -1
  34. package/chip/index.mjs.map +1 -1
  35. package/chips/index.mjs.map +1 -1
  36. package/colorpicker/ColorPicker.vue +1 -1
  37. package/colorpicker/index.mjs +1 -1
  38. package/colorpicker/index.mjs.map +1 -1
  39. package/colorpicker/style/index.mjs.map +1 -1
  40. package/column/index.mjs.map +1 -1
  41. package/columngroup/index.mjs.map +1 -1
  42. package/confirmationservice/index.mjs.map +1 -1
  43. package/confirmdialog/index.mjs.map +1 -1
  44. package/confirmpopup/index.mjs.map +1 -1
  45. package/contextmenu/index.mjs.map +1 -1
  46. package/contextmenu/style/index.mjs.map +1 -1
  47. package/datatable/BodyCell.vue +2 -2
  48. package/datatable/TableHeader.vue +2 -0
  49. package/datatable/index.d.ts +1 -1
  50. package/datatable/index.mjs +8 -6
  51. package/datatable/index.mjs.map +1 -1
  52. package/datatable/style/index.mjs.map +1 -1
  53. package/dataview/index.mjs.map +1 -1
  54. package/dataview/style/index.mjs.map +1 -1
  55. package/datepicker/BaseDatePicker.vue +4 -0
  56. package/datepicker/DatePicker.vue +22 -6
  57. package/datepicker/index.d.ts +6 -2
  58. package/datepicker/index.mjs +25 -6
  59. package/datepicker/index.mjs.map +1 -1
  60. package/datepicker/style/index.mjs.map +1 -1
  61. package/deferredcontent/index.mjs.map +1 -1
  62. package/dialog/index.mjs.map +1 -1
  63. package/dialog/style/index.mjs.map +1 -1
  64. package/dialogservice/index.mjs.map +1 -1
  65. package/divider/index.mjs.map +1 -1
  66. package/divider/style/index.mjs.map +1 -1
  67. package/dock/index.mjs.map +1 -1
  68. package/dock/style/index.mjs.map +1 -1
  69. package/drawer/index.mjs.map +1 -1
  70. package/drawer/style/index.mjs.map +1 -1
  71. package/dropdown/index.mjs.map +1 -1
  72. package/dynamicdialog/index.mjs.map +1 -1
  73. package/editor/index.mjs.map +1 -1
  74. package/editor/style/index.mjs.map +1 -1
  75. package/fieldset/index.mjs.map +1 -1
  76. package/fieldset/style/index.mjs.map +1 -1
  77. package/fileupload/index.mjs.map +1 -1
  78. package/fileupload/style/index.mjs.map +1 -1
  79. package/floatlabel/index.mjs.map +1 -1
  80. package/floatlabel/style/index.mjs.map +1 -1
  81. package/fluid/index.mjs.map +1 -1
  82. package/focustrap/index.mjs.map +1 -1
  83. package/galleria/index.mjs.map +1 -1
  84. package/galleria/style/index.mjs.map +1 -1
  85. package/iconfield/index.mjs.map +1 -1
  86. package/iftalabel/index.mjs.map +1 -1
  87. package/image/index.mjs.map +1 -1
  88. package/image/style/index.mjs.map +1 -1
  89. package/imagecompare/index.mjs.map +1 -1
  90. package/inlinemessage/index.mjs.map +1 -1
  91. package/inlinemessage/style/index.mjs.map +1 -1
  92. package/inplace/index.mjs.map +1 -1
  93. package/inplace/style/index.mjs.map +1 -1
  94. package/inputchips/index.mjs.map +1 -1
  95. package/inputchips/style/index.mjs.map +1 -1
  96. package/inputgroup/index.mjs.map +1 -1
  97. package/inputgroupaddon/index.mjs.map +1 -1
  98. package/inputicon/InputIcon.vue +1 -1
  99. package/inputicon/index.mjs +3 -1
  100. package/inputicon/index.mjs.map +1 -1
  101. package/inputmask/index.mjs.map +1 -1
  102. package/inputmask/style/index.mjs.map +1 -1
  103. package/inputnumber/InputNumber.vue +19 -2
  104. package/inputnumber/index.mjs +15 -1
  105. package/inputnumber/index.mjs.map +1 -1
  106. package/inputnumber/style/index.mjs.map +1 -1
  107. package/inputotp/index.mjs.map +1 -1
  108. package/inputswitch/index.mjs.map +1 -1
  109. package/inputtext/index.mjs.map +1 -1
  110. package/inputtext/style/index.mjs.map +1 -1
  111. package/keyfilter/index.mjs.map +1 -1
  112. package/knob/index.mjs.map +1 -1
  113. package/knob/style/index.mjs.map +1 -1
  114. package/listbox/index.mjs.map +1 -1
  115. package/listbox/style/index.mjs.map +1 -1
  116. package/megamenu/index.mjs.map +1 -1
  117. package/megamenu/style/index.mjs.map +1 -1
  118. package/menu/Menu.vue +2 -2
  119. package/menu/index.mjs +1 -1
  120. package/menu/index.mjs.map +1 -1
  121. package/menu/style/index.mjs.map +1 -1
  122. package/menubar/index.mjs.map +1 -1
  123. package/menubar/style/index.mjs.map +1 -1
  124. package/message/index.mjs.map +1 -1
  125. package/message/style/index.mjs.map +1 -1
  126. package/metergroup/index.mjs.map +1 -1
  127. package/metergroup/style/index.mjs.map +1 -1
  128. package/multiselect/MultiSelect.vue +1 -1
  129. package/multiselect/index.mjs +1 -1
  130. package/multiselect/index.mjs.map +1 -1
  131. package/multiselect/style/index.mjs.map +1 -1
  132. package/orderlist/index.mjs.map +1 -1
  133. package/organizationchart/index.mjs.map +1 -1
  134. package/organizationchart/style/index.mjs.map +1 -1
  135. package/overlaybadge/index.mjs.map +1 -1
  136. package/overlaypanel/index.mjs.map +1 -1
  137. package/package.json +6 -6
  138. package/paginator/index.mjs.map +1 -1
  139. package/paginator/style/index.mjs.map +1 -1
  140. package/panel/index.mjs.map +1 -1
  141. package/panel/style/index.mjs.map +1 -1
  142. package/panelmenu/index.mjs.map +1 -1
  143. package/panelmenu/style/index.mjs.map +1 -1
  144. package/password/index.mjs.map +1 -1
  145. package/password/style/index.mjs.map +1 -1
  146. package/picklist/index.mjs.map +1 -1
  147. package/popover/index.mjs.map +1 -1
  148. package/portal/index.mjs.map +1 -1
  149. package/progressbar/index.mjs.map +1 -1
  150. package/progressbar/style/index.mjs.map +1 -1
  151. package/progressspinner/index.mjs.map +1 -1
  152. package/radiobutton/index.mjs.map +1 -1
  153. package/radiobutton/style/index.mjs.map +1 -1
  154. package/radiobuttongroup/index.mjs.map +1 -1
  155. package/rating/index.mjs.map +1 -1
  156. package/rating/style/index.mjs.map +1 -1
  157. package/ripple/index.mjs.map +1 -1
  158. package/row/index.mjs.map +1 -1
  159. package/scrollpanel/index.mjs.map +1 -1
  160. package/scrolltop/index.mjs.map +1 -1
  161. package/scrolltop/style/index.mjs.map +1 -1
  162. package/select/Select.vue +1 -1
  163. package/select/index.mjs +1 -1
  164. package/select/index.mjs.map +1 -1
  165. package/select/style/index.mjs.map +1 -1
  166. package/selectbutton/index.mjs.map +1 -1
  167. package/selectbutton/style/index.mjs.map +1 -1
  168. package/sidebar/index.mjs.map +1 -1
  169. package/skeleton/index.mjs.map +1 -1
  170. package/skeleton/style/index.mjs.map +1 -1
  171. package/slider/index.d.ts +3 -3
  172. package/slider/index.mjs.map +1 -1
  173. package/slider/style/index.mjs.map +1 -1
  174. package/speeddial/index.mjs.map +1 -1
  175. package/speeddial/style/index.mjs.map +1 -1
  176. package/splitbutton/index.mjs.map +1 -1
  177. package/splitbutton/style/index.mjs.map +1 -1
  178. package/splitter/index.mjs.map +1 -1
  179. package/splitter/style/index.mjs.map +1 -1
  180. package/splitterpanel/index.mjs.map +1 -1
  181. package/splitterpanel/style/index.mjs.map +1 -1
  182. package/step/index.mjs.map +1 -1
  183. package/step/style/index.mjs.map +1 -1
  184. package/stepitem/index.mjs.map +1 -1
  185. package/stepitem/style/index.mjs.map +1 -1
  186. package/steplist/index.mjs.map +1 -1
  187. package/steppanel/index.mjs.map +1 -1
  188. package/steppanel/style/index.mjs.map +1 -1
  189. package/steppanels/index.mjs.map +1 -1
  190. package/stepper/index.mjs.map +1 -1
  191. package/stepper/style/index.mjs.map +1 -1
  192. package/steps/index.mjs.map +1 -1
  193. package/steps/style/index.mjs.map +1 -1
  194. package/styleclass/index.d.ts +11 -1
  195. package/styleclass/index.mjs +62 -15
  196. package/styleclass/index.mjs.map +1 -1
  197. package/tab/index.mjs.map +1 -1
  198. package/tab/style/index.mjs.map +1 -1
  199. package/tablist/TabList.vue +1 -1
  200. package/tablist/index.mjs +1 -1
  201. package/tablist/index.mjs.map +1 -1
  202. package/tablist/style/index.mjs +1 -6
  203. package/tablist/style/index.mjs.map +1 -1
  204. package/tabmenu/index.mjs.map +1 -1
  205. package/tabmenu/style/index.mjs.map +1 -1
  206. package/tabpanel/index.mjs.map +1 -1
  207. package/tabpanel/style/index.mjs.map +1 -1
  208. package/tabpanels/index.mjs.map +1 -1
  209. package/tabs/index.mjs.map +1 -1
  210. package/tabs/style/index.mjs.map +1 -1
  211. package/tabview/index.mjs.map +1 -1
  212. package/tabview/style/index.mjs.map +1 -1
  213. package/tag/index.mjs.map +1 -1
  214. package/tag/style/index.mjs.map +1 -1
  215. package/terminal/index.mjs.map +1 -1
  216. package/textarea/Textarea.vue +11 -7
  217. package/textarea/index.mjs +10 -7
  218. package/textarea/index.mjs.map +1 -1
  219. package/textarea/style/index.mjs.map +1 -1
  220. package/tieredmenu/index.mjs.map +1 -1
  221. package/tieredmenu/style/index.mjs.map +1 -1
  222. package/timeline/index.mjs.map +1 -1
  223. package/timeline/style/index.mjs.map +1 -1
  224. package/toast/index.mjs.map +1 -1
  225. package/toast/style/index.mjs.map +1 -1
  226. package/toastservice/index.mjs.map +1 -1
  227. package/togglebutton/index.mjs.map +1 -1
  228. package/togglebutton/style/index.mjs.map +1 -1
  229. package/toggleswitch/index.mjs.map +1 -1
  230. package/toggleswitch/style/index.mjs.map +1 -1
  231. package/toolbar/index.mjs.map +1 -1
  232. package/tooltip/index.mjs.map +1 -1
  233. package/tree/TreeNode.vue +2 -1
  234. package/tree/index.mjs +3 -2
  235. package/tree/index.mjs.map +1 -1
  236. package/tree/style/index.mjs.map +1 -1
  237. package/treeselect/index.mjs.map +1 -1
  238. package/treeselect/style/index.mjs.map +1 -1
  239. package/treetable/index.mjs.map +1 -1
  240. package/treetable/style/index.mjs.map +1 -1
  241. package/umd/primevue.min.js +1 -1
  242. package/useconfirm/index.mjs.map +1 -1
  243. package/usedialog/index.mjs.map +1 -1
  244. package/usetoast/index.mjs.map +1 -1
  245. package/virtualscroller/index.mjs.map +1 -1
  246. package/web-types.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../src/inputnumber/BaseInputNumber.vue","../../src/inputnumber/InputNumber.vue","../../src/inputnumber/InputNumber.vue?vue&type=template&id=7be42a42&lang.js"],"sourcesContent":["<script>\nimport BaseInput from '@primevue/core/baseinput';\nimport InputNumberStyle from 'primevue/inputnumber/style';\n\nexport default {\n name: 'BaseInputNumber',\n extends: BaseInput,\n props: {\n format: {\n type: Boolean,\n default: true\n },\n showButtons: {\n type: Boolean,\n default: false\n },\n buttonLayout: {\n type: String,\n default: 'stacked'\n },\n incrementButtonClass: {\n type: String,\n default: null\n },\n decrementButtonClass: {\n type: String,\n default: null\n },\n incrementButtonIcon: {\n type: String,\n default: undefined\n },\n incrementIcon: {\n type: String,\n default: undefined\n },\n decrementButtonIcon: {\n type: String,\n default: undefined\n },\n decrementIcon: {\n type: String,\n default: undefined\n },\n locale: {\n type: String,\n default: undefined\n },\n localeMatcher: {\n type: String,\n default: undefined\n },\n mode: {\n type: String,\n default: 'decimal'\n },\n prefix: {\n type: String,\n default: null\n },\n suffix: {\n type: String,\n default: null\n },\n currency: {\n type: String,\n default: undefined\n },\n currencyDisplay: {\n type: String,\n default: undefined\n },\n useGrouping: {\n type: Boolean,\n default: true\n },\n minFractionDigits: {\n type: Number,\n default: undefined\n },\n maxFractionDigits: {\n type: Number,\n default: undefined\n },\n roundingMode: {\n type: String,\n default: 'halfExpand',\n validator(value) {\n return ['ceil', 'floor', 'expand', 'trunc', 'halfCeil', 'halfFloor', 'halfExpand', 'halfTrunc', 'halfEven'].includes(value);\n }\n },\n min: {\n type: Number,\n default: null\n },\n max: {\n type: Number,\n default: null\n },\n step: {\n type: Number,\n default: 1\n },\n allowEmpty: {\n type: Boolean,\n default: true\n },\n highlightOnFocus: {\n type: Boolean,\n default: false\n },\n readonly: {\n type: Boolean,\n default: false\n },\n placeholder: {\n type: String,\n default: null\n },\n inputId: {\n type: String,\n default: null\n },\n inputClass: {\n type: [String, Object],\n default: null\n },\n inputStyle: {\n type: Object,\n default: null\n },\n ariaLabelledby: {\n type: String,\n default: null\n },\n ariaLabel: {\n type: String,\n default: null\n },\n required: {\n type: Boolean,\n default: false\n }\n },\n style: InputNumberStyle,\n provide() {\n return {\n $pcInputNumber: this,\n $parentInstance: this\n };\n }\n};\n</script>\n","<template>\n <span :class=\"cx('root')\" v-bind=\"ptmi('root')\" :data-p=\"dataP\">\n <InputText\n ref=\"input\"\n :id=\"inputId\"\n :name=\"$formName\"\n role=\"spinbutton\"\n :class=\"[cx('pcInputText'), inputClass]\"\n :style=\"inputStyle\"\n :defaultValue=\"formattedValue\"\n :aria-valuemin=\"min\"\n :aria-valuemax=\"max\"\n :aria-valuenow=\"d_value\"\n :inputmode=\"mode === 'decimal' && !minFractionDigits ? 'numeric' : 'decimal'\"\n :disabled=\"disabled\"\n :readonly=\"readonly\"\n :placeholder=\"placeholder\"\n :aria-labelledby=\"ariaLabelledby\"\n :aria-label=\"ariaLabel\"\n :required=\"required\"\n :size=\"size\"\n :invalid=\"invalid\"\n :variant=\"variant\"\n @input=\"onUserInput\"\n @keydown=\"onInputKeyDown\"\n @keypress=\"onInputKeyPress\"\n @paste=\"onPaste\"\n @click=\"onInputClick\"\n @focus=\"onInputFocus\"\n @blur=\"onInputBlur\"\n :pt=\"ptm('pcInputText')\"\n :unstyled=\"unstyled\"\n :data-p=\"dataP\"\n />\n <span v-if=\"showButtons && buttonLayout === 'stacked'\" :class=\"cx('buttonGroup')\" v-bind=\"ptm('buttonGroup')\" :data-p=\"dataP\">\n <slot name=\"incrementbutton\" :listeners=\"upButtonListeners\">\n <button :class=\"[cx('incrementButton'), incrementButtonClass]\" v-on=\"upButtonListeners\" :disabled=\"disabled\" :tabindex=\"-1\" aria-hidden=\"true\" type=\"button\" v-bind=\"ptm('incrementButton')\" :data-p=\"dataP\">\n <slot :name=\"$slots.incrementicon ? 'incrementicon' : 'incrementbuttonicon'\">\n <component :is=\"incrementIcon || incrementButtonIcon ? 'span' : 'AngleUpIcon'\" :class=\"[incrementIcon, incrementButtonIcon]\" v-bind=\"ptm('incrementIcon')\" data-pc-section=\"incrementicon\" />\n </slot>\n </button>\n </slot>\n <slot name=\"decrementbutton\" :listeners=\"downButtonListeners\">\n <button :class=\"[cx('decrementButton'), decrementButtonClass]\" v-on=\"downButtonListeners\" :disabled=\"disabled\" :tabindex=\"-1\" aria-hidden=\"true\" type=\"button\" v-bind=\"ptm('decrementButton')\" :data-p=\"dataP\">\n <slot :name=\"$slots.decrementicon ? 'decrementicon' : 'decrementbuttonicon'\">\n <component :is=\"decrementIcon || decrementButtonIcon ? 'span' : 'AngleDownIcon'\" :class=\"[decrementIcon, decrementButtonIcon]\" v-bind=\"ptm('decrementIcon')\" data-pc-section=\"decrementicon\" />\n </slot>\n </button>\n </slot>\n </span>\n <slot name=\"incrementbutton\" :listeners=\"upButtonListeners\">\n <button\n v-if=\"showButtons && buttonLayout !== 'stacked'\"\n :class=\"[cx('incrementButton'), incrementButtonClass]\"\n v-on=\"upButtonListeners\"\n :disabled=\"disabled\"\n :tabindex=\"-1\"\n aria-hidden=\"true\"\n type=\"button\"\n v-bind=\"ptm('incrementButton')\"\n :data-p=\"dataP\"\n >\n <slot :name=\"$slots.incrementicon ? 'incrementicon' : 'incrementbuttonicon'\">\n <component :is=\"incrementIcon || incrementButtonIcon ? 'span' : 'AngleUpIcon'\" :class=\"[incrementIcon, incrementButtonIcon]\" v-bind=\"ptm('incrementIcon')\" data-pc-section=\"incrementicon\" />\n </slot>\n </button>\n </slot>\n <slot name=\"decrementbutton\" :listeners=\"downButtonListeners\">\n <button\n v-if=\"showButtons && buttonLayout !== 'stacked'\"\n :class=\"[cx('decrementButton'), decrementButtonClass]\"\n v-on=\"downButtonListeners\"\n :disabled=\"disabled\"\n :tabindex=\"-1\"\n aria-hidden=\"true\"\n type=\"button\"\n v-bind=\"ptm('decrementButton')\"\n :data-p=\"dataP\"\n >\n <slot :name=\"$slots.decrementicon ? 'decrementicon' : 'decrementbuttonicon'\">\n <component :is=\"decrementIcon || decrementButtonIcon ? 'span' : 'AngleDownIcon'\" :class=\"[decrementIcon, decrementButtonIcon]\" v-bind=\"ptm('decrementIcon')\" data-pc-section=\"decrementicon\" />\n </slot>\n </button>\n </slot>\n <!-- TODO: decrementButton* and incrementButton* are deprecated since v4.0-->\n </span>\n</template>\n\n<script>\nimport { cn } from '@primeuix/utils';\nimport { clearSelection, getSelection } from '@primeuix/utils/dom';\nimport { isNotEmpty } from '@primeuix/utils/object';\nimport AngleDownIcon from '@primevue/icons/angledown';\nimport AngleUpIcon from '@primevue/icons/angleup';\nimport InputText from 'primevue/inputtext';\nimport BaseInputNumber from './BaseInputNumber.vue';\n\nexport default {\n name: 'InputNumber',\n extends: BaseInputNumber,\n inheritAttrs: false,\n emits: ['input', 'focus', 'blur'],\n inject: {\n $pcFluid: { default: null }\n },\n numberFormat: null,\n _numeral: null,\n _decimal: null,\n _group: null,\n _minusSign: null,\n _currency: null,\n _suffix: null,\n _prefix: null,\n _index: null,\n groupChar: '',\n isSpecialChar: null,\n prefixChar: null,\n suffixChar: null,\n timer: null,\n data() {\n return {\n // @deprecated\n d_modelValue: this.d_value,\n focused: false\n };\n },\n watch: {\n d_value(newValue) {\n // @deprecated since v4.2.0\n this.d_modelValue = newValue;\n },\n locale(newValue, oldValue) {\n this.updateConstructParser(newValue, oldValue);\n },\n localeMatcher(newValue, oldValue) {\n this.updateConstructParser(newValue, oldValue);\n },\n mode(newValue, oldValue) {\n this.updateConstructParser(newValue, oldValue);\n },\n currency(newValue, oldValue) {\n this.updateConstructParser(newValue, oldValue);\n },\n currencyDisplay(newValue, oldValue) {\n this.updateConstructParser(newValue, oldValue);\n },\n useGrouping(newValue, oldValue) {\n this.updateConstructParser(newValue, oldValue);\n },\n minFractionDigits(newValue, oldValue) {\n this.updateConstructParser(newValue, oldValue);\n },\n maxFractionDigits(newValue, oldValue) {\n this.updateConstructParser(newValue, oldValue);\n },\n suffix(newValue, oldValue) {\n this.updateConstructParser(newValue, oldValue);\n },\n prefix(newValue, oldValue) {\n this.updateConstructParser(newValue, oldValue);\n }\n },\n created() {\n this.constructParser();\n },\n methods: {\n getOptions() {\n return {\n localeMatcher: this.localeMatcher,\n style: this.mode,\n currency: this.currency,\n currencyDisplay: this.currencyDisplay,\n useGrouping: this.useGrouping,\n minimumFractionDigits: this.minFractionDigits,\n maximumFractionDigits: this.maxFractionDigits,\n roundingMode: this.roundingMode\n };\n },\n constructParser() {\n this.numberFormat = new Intl.NumberFormat(this.locale, this.getOptions());\n const numerals = [...new Intl.NumberFormat(this.locale, { useGrouping: false }).format(9876543210)].reverse();\n const index = new Map(numerals.map((d, i) => [d, i]));\n\n this._numeral = new RegExp(`[${numerals.join('')}]`, 'g');\n this._group = this.getGroupingExpression();\n this._minusSign = this.getMinusSignExpression();\n this._currency = this.getCurrencyExpression();\n this._decimal = this.getDecimalExpression();\n this._suffix = this.getSuffixExpression();\n this._prefix = this.getPrefixExpression();\n this._index = (d) => index.get(d);\n },\n updateConstructParser(newValue, oldValue) {\n if (newValue !== oldValue) {\n this.constructParser();\n }\n },\n escapeRegExp(text) {\n return text.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&');\n },\n getDecimalExpression() {\n const formatter = new Intl.NumberFormat(this.locale, { ...this.getOptions(), useGrouping: false });\n\n return new RegExp(`[${formatter.format(1.1).replace(this._currency, '').trim().replace(this._numeral, '')}]`, 'g');\n },\n getGroupingExpression() {\n const formatter = new Intl.NumberFormat(this.locale, { useGrouping: true });\n\n this.groupChar = formatter.format(1000000).trim().replace(this._numeral, '').charAt(0);\n\n return new RegExp(`[${this.groupChar}]`, 'g');\n },\n getMinusSignExpression() {\n const formatter = new Intl.NumberFormat(this.locale, { useGrouping: false });\n\n return new RegExp(`[${formatter.format(-1).trim().replace(this._numeral, '')}]`, 'g');\n },\n getCurrencyExpression() {\n if (this.currency) {\n const formatter = new Intl.NumberFormat(this.locale, { style: 'currency', currency: this.currency, currencyDisplay: this.currencyDisplay, minimumFractionDigits: 0, maximumFractionDigits: 0, roundingMode: this.roundingMode });\n\n return new RegExp(`[${formatter.format(1).replace(/\\s/g, '').replace(this._numeral, '').replace(this._group, '')}]`, 'g');\n }\n\n return new RegExp(`[]`, 'g');\n },\n getPrefixExpression() {\n if (this.prefix) {\n this.prefixChar = this.prefix;\n } else {\n const formatter = new Intl.NumberFormat(this.locale, { style: this.mode, currency: this.currency, currencyDisplay: this.currencyDisplay });\n\n this.prefixChar = formatter.format(1).split('1')[0];\n }\n\n return new RegExp(`${this.escapeRegExp(this.prefixChar || '')}`, 'g');\n },\n getSuffixExpression() {\n if (this.suffix) {\n this.suffixChar = this.suffix;\n } else {\n const formatter = new Intl.NumberFormat(this.locale, { style: this.mode, currency: this.currency, currencyDisplay: this.currencyDisplay, minimumFractionDigits: 0, maximumFractionDigits: 0, roundingMode: this.roundingMode });\n\n this.suffixChar = formatter.format(1).split('1')[1];\n }\n\n return new RegExp(`${this.escapeRegExp(this.suffixChar || '')}`, 'g');\n },\n formatValue(value) {\n if (value != null) {\n if (value === '-') {\n // Minus sign\n return value;\n }\n\n if (this.format) {\n let formatter = new Intl.NumberFormat(this.locale, this.getOptions());\n let formattedValue = formatter.format(value);\n\n if (this.prefix) {\n formattedValue = this.prefix + formattedValue;\n }\n\n if (this.suffix) {\n formattedValue = formattedValue + this.suffix;\n }\n\n return formattedValue;\n }\n\n return value.toString();\n }\n\n return '';\n },\n parseValue(text) {\n let filteredText = text\n .replace(this._suffix, '')\n .replace(this._prefix, '')\n .trim()\n .replace(/\\s/g, '')\n .replace(this._currency, '')\n .replace(this._group, '')\n .replace(this._minusSign, '-')\n .replace(this._decimal, '.')\n .replace(this._numeral, this._index);\n\n if (filteredText) {\n if (filteredText === '-')\n // Minus sign\n return filteredText;\n\n let parsedValue = +filteredText;\n\n return isNaN(parsedValue) ? null : parsedValue;\n }\n\n return null;\n },\n repeat(event, interval, dir) {\n if (this.readonly) {\n return;\n }\n\n let i = interval || 500;\n\n this.clearTimer();\n this.timer = setTimeout(() => {\n this.repeat(event, 40, dir);\n }, i);\n\n this.spin(event, dir);\n },\n spin(event, dir) {\n if (this.$refs.input) {\n let step = this.step * dir;\n let currentValue = this.parseValue(this.$refs.input.$el.value) || 0;\n let newValue = this.validateValue(currentValue + step);\n\n this.updateInput(newValue, null, 'spin');\n this.updateModel(event, newValue);\n\n this.handleOnInput(event, currentValue, newValue);\n }\n },\n onUpButtonMouseDown(event) {\n if (!this.disabled) {\n this.$refs.input.$el.focus();\n this.repeat(event, null, 1);\n event.preventDefault();\n }\n },\n onUpButtonMouseUp() {\n if (!this.disabled) {\n this.clearTimer();\n }\n },\n onUpButtonMouseLeave() {\n if (!this.disabled) {\n this.clearTimer();\n }\n },\n onUpButtonKeyUp() {\n if (!this.disabled) {\n this.clearTimer();\n }\n },\n onUpButtonKeyDown(event) {\n if (event.code === 'Space' || event.code === 'Enter' || event.code === 'NumpadEnter') {\n this.repeat(event, null, 1);\n }\n },\n onDownButtonMouseDown(event) {\n if (!this.disabled) {\n this.$refs.input.$el.focus();\n this.repeat(event, null, -1);\n event.preventDefault();\n }\n },\n onDownButtonMouseUp() {\n if (!this.disabled) {\n this.clearTimer();\n }\n },\n onDownButtonMouseLeave() {\n if (!this.disabled) {\n this.clearTimer();\n }\n },\n onDownButtonKeyUp() {\n if (!this.disabled) {\n this.clearTimer();\n }\n },\n onDownButtonKeyDown(event) {\n if (event.code === 'Space' || event.code === 'Enter' || event.code === 'NumpadEnter') {\n this.repeat(event, null, -1);\n }\n },\n onUserInput() {\n if (this.isSpecialChar) {\n this.$refs.input.$el.value = this.lastValue;\n }\n\n this.isSpecialChar = false;\n },\n onInputKeyDown(event) {\n if (this.readonly) {\n return;\n }\n\n if (event.altKey || event.ctrlKey || event.metaKey) {\n this.isSpecialChar = true;\n this.lastValue = this.$refs.input.$el.value;\n\n return;\n }\n\n this.lastValue = event.target.value;\n\n let selectionStart = event.target.selectionStart;\n let selectionEnd = event.target.selectionEnd;\n let selectionRange = selectionEnd - selectionStart;\n let inputValue = event.target.value;\n let newValueStr = null;\n const code = event.code || event.key;\n\n switch (code) {\n case 'ArrowUp':\n this.spin(event, 1);\n event.preventDefault();\n break;\n\n case 'ArrowDown':\n this.spin(event, -1);\n event.preventDefault();\n break;\n\n case 'ArrowLeft':\n if (selectionRange > 1) {\n const cursorPosition = this.isNumeralChar(inputValue.charAt(selectionStart)) ? selectionStart + 1 : selectionStart + 2;\n\n this.$refs.input.$el.setSelectionRange(cursorPosition, cursorPosition);\n } else if (!this.isNumeralChar(inputValue.charAt(selectionStart - 1))) {\n event.preventDefault();\n }\n\n break;\n\n case 'ArrowRight':\n if (selectionRange > 1) {\n const cursorPosition = selectionEnd - 1;\n\n this.$refs.input.$el.setSelectionRange(cursorPosition, cursorPosition);\n } else if (!this.isNumeralChar(inputValue.charAt(selectionStart))) {\n event.preventDefault();\n }\n\n break;\n\n case 'Tab':\n case 'Enter':\n case 'NumpadEnter':\n newValueStr = this.validateValue(this.parseValue(inputValue));\n this.$refs.input.$el.value = this.formatValue(newValueStr);\n this.$refs.input.$el.setAttribute('aria-valuenow', newValueStr);\n this.updateModel(event, newValueStr);\n break;\n\n case 'Backspace': {\n event.preventDefault();\n\n if (selectionStart === selectionEnd) {\n if (selectionStart >= inputValue.length && this.suffixChar !== null) {\n selectionStart = inputValue.length - this.suffixChar.length;\n this.$refs.input.$el.setSelectionRange(selectionStart, selectionStart);\n }\n\n const deleteChar = inputValue.charAt(selectionStart - 1);\n const { decimalCharIndex, decimalCharIndexWithoutPrefix } = this.getDecimalCharIndexes(inputValue);\n\n if (this.isNumeralChar(deleteChar)) {\n const decimalLength = this.getDecimalLength(inputValue);\n\n if (this._group.test(deleteChar)) {\n this._group.lastIndex = 0;\n newValueStr = inputValue.slice(0, selectionStart - 2) + inputValue.slice(selectionStart - 1);\n } else if (this._decimal.test(deleteChar)) {\n this._decimal.lastIndex = 0;\n\n if (decimalLength) {\n this.$refs.input.$el.setSelectionRange(selectionStart - 1, selectionStart - 1);\n } else {\n newValueStr = inputValue.slice(0, selectionStart - 1) + inputValue.slice(selectionStart);\n }\n } else if (decimalCharIndex > 0 && selectionStart > decimalCharIndex) {\n const insertedText = this.isDecimalMode() && (this.minFractionDigits || 0) < decimalLength ? '' : '0';\n\n newValueStr = inputValue.slice(0, selectionStart - 1) + insertedText + inputValue.slice(selectionStart);\n } else if (decimalCharIndexWithoutPrefix === 1) {\n newValueStr = inputValue.slice(0, selectionStart - 1) + '0' + inputValue.slice(selectionStart);\n newValueStr = this.parseValue(newValueStr) > 0 ? newValueStr : '';\n } else {\n newValueStr = inputValue.slice(0, selectionStart - 1) + inputValue.slice(selectionStart);\n }\n }\n\n this.updateValue(event, newValueStr, null, 'delete-single');\n } else {\n newValueStr = this.deleteRange(inputValue, selectionStart, selectionEnd);\n this.updateValue(event, newValueStr, null, 'delete-range');\n }\n\n break;\n }\n\n case 'Delete':\n event.preventDefault();\n\n if (selectionStart === selectionEnd) {\n const deleteChar = inputValue.charAt(selectionStart);\n const { decimalCharIndex, decimalCharIndexWithoutPrefix } = this.getDecimalCharIndexes(inputValue);\n\n if (this.isNumeralChar(deleteChar)) {\n const decimalLength = this.getDecimalLength(inputValue);\n\n if (this._group.test(deleteChar)) {\n this._group.lastIndex = 0;\n newValueStr = inputValue.slice(0, selectionStart) + inputValue.slice(selectionStart + 2);\n } else if (this._decimal.test(deleteChar)) {\n this._decimal.lastIndex = 0;\n\n if (decimalLength) {\n this.$refs.input.$el.setSelectionRange(selectionStart + 1, selectionStart + 1);\n } else {\n newValueStr = inputValue.slice(0, selectionStart) + inputValue.slice(selectionStart + 1);\n }\n } else if (decimalCharIndex > 0 && selectionStart > decimalCharIndex) {\n const insertedText = this.isDecimalMode() && (this.minFractionDigits || 0) < decimalLength ? '' : '0';\n\n newValueStr = inputValue.slice(0, selectionStart) + insertedText + inputValue.slice(selectionStart + 1);\n } else if (decimalCharIndexWithoutPrefix === 1) {\n newValueStr = inputValue.slice(0, selectionStart) + '0' + inputValue.slice(selectionStart + 1);\n newValueStr = this.parseValue(newValueStr) > 0 ? newValueStr : '';\n } else {\n newValueStr = inputValue.slice(0, selectionStart) + inputValue.slice(selectionStart + 1);\n }\n }\n\n this.updateValue(event, newValueStr, null, 'delete-back-single');\n } else {\n newValueStr = this.deleteRange(inputValue, selectionStart, selectionEnd);\n this.updateValue(event, newValueStr, null, 'delete-range');\n }\n\n break;\n\n case 'Home':\n event.preventDefault();\n\n if (isNotEmpty(this.min)) {\n this.updateModel(event, this.min);\n }\n\n break;\n\n case 'End':\n event.preventDefault();\n\n if (isNotEmpty(this.max)) {\n this.updateModel(event, this.max);\n }\n\n break;\n\n default:\n break;\n }\n },\n onInputKeyPress(event) {\n if (this.readonly) {\n return;\n }\n\n let char = event.key;\n let isDecimalSign = this.isDecimalSign(char);\n const isMinusSign = this.isMinusSign(char);\n\n if (event.code !== 'Enter') {\n event.preventDefault();\n }\n\n if ((Number(char) >= 0 && Number(char) <= 9) || isMinusSign || isDecimalSign) {\n this.insert(event, char, { isDecimalSign, isMinusSign });\n }\n },\n onPaste(event) {\n if (this.readonly) {\n return;\n }\n \n event.preventDefault();\n let data = (event.clipboardData || window['clipboardData']).getData('Text');\n\n if (data) {\n let filteredData = this.parseValue(data);\n\n if (filteredData != null) {\n this.insert(event, filteredData.toString());\n }\n }\n },\n allowMinusSign() {\n return this.min === null || this.min < 0;\n },\n isMinusSign(char) {\n if (this._minusSign.test(char) || char === '-') {\n this._minusSign.lastIndex = 0;\n\n return true;\n }\n\n return false;\n },\n isDecimalSign(char) {\n if ((this.locale?.includes('fr') && ['.', ','].includes(char)) || this._decimal.test(char)) {\n this._decimal.lastIndex = 0;\n\n return true;\n }\n\n return false;\n },\n isDecimalMode() {\n return this.mode === 'decimal';\n },\n getDecimalCharIndexes(val) {\n let decimalCharIndex = val.search(this._decimal);\n\n this._decimal.lastIndex = 0;\n\n const filteredVal = val.replace(this._prefix, '').trim().replace(/\\s/g, '').replace(this._currency, '');\n const decimalCharIndexWithoutPrefix = filteredVal.search(this._decimal);\n\n this._decimal.lastIndex = 0;\n\n return { decimalCharIndex, decimalCharIndexWithoutPrefix };\n },\n getCharIndexes(val) {\n const decimalCharIndex = val.search(this._decimal);\n\n this._decimal.lastIndex = 0;\n const minusCharIndex = val.search(this._minusSign);\n\n this._minusSign.lastIndex = 0;\n const suffixCharIndex = val.search(this._suffix);\n\n this._suffix.lastIndex = 0;\n const currencyCharIndex = val.search(this._currency);\n\n this._currency.lastIndex = 0;\n\n return { decimalCharIndex, minusCharIndex, suffixCharIndex, currencyCharIndex };\n },\n insert(event, text, sign = { isDecimalSign: false, isMinusSign: false }) {\n const minusCharIndexOnText = text.search(this._minusSign);\n\n this._minusSign.lastIndex = 0;\n\n if (!this.allowMinusSign() && minusCharIndexOnText !== -1) {\n return;\n }\n\n const selectionStart = this.$refs.input.$el.selectionStart;\n const selectionEnd = this.$refs.input.$el.selectionEnd;\n let inputValue = this.$refs.input.$el.value.trim();\n const { decimalCharIndex, minusCharIndex, suffixCharIndex, currencyCharIndex } = this.getCharIndexes(inputValue);\n let newValueStr;\n\n if (sign.isMinusSign) {\n const isNewMinusSign = minusCharIndex === -1;\n\n if (selectionStart === 0 || selectionStart === currencyCharIndex + 1) {\n newValueStr = inputValue;\n\n if (isNewMinusSign || selectionEnd !== 0) {\n newValueStr = this.insertText(inputValue, text, 0, selectionEnd);\n }\n\n this.updateValue(event, newValueStr, text, 'insert');\n }\n } else if (sign.isDecimalSign) {\n if (decimalCharIndex > 0 && selectionStart === decimalCharIndex) {\n this.updateValue(event, inputValue, text, 'insert');\n } else if (decimalCharIndex > selectionStart && decimalCharIndex < selectionEnd) {\n newValueStr = this.insertText(inputValue, text, selectionStart, selectionEnd);\n this.updateValue(event, newValueStr, text, 'insert');\n } else if (decimalCharIndex === -1 && this.maxFractionDigits) {\n newValueStr = this.insertText(inputValue, text, selectionStart, selectionEnd);\n this.updateValue(event, newValueStr, text, 'insert');\n }\n } else {\n const maxFractionDigits = this.numberFormat.resolvedOptions().maximumFractionDigits;\n const operation = selectionStart !== selectionEnd ? 'range-insert' : 'insert';\n\n if (decimalCharIndex > 0 && selectionStart > decimalCharIndex) {\n if (selectionStart + text.length - (decimalCharIndex + 1) <= maxFractionDigits) {\n const charIndex = currencyCharIndex >= selectionStart ? currencyCharIndex - 1 : suffixCharIndex >= selectionStart ? suffixCharIndex : inputValue.length;\n\n newValueStr = inputValue.slice(0, selectionStart) + text + inputValue.slice(selectionStart + text.length, charIndex) + inputValue.slice(charIndex);\n this.updateValue(event, newValueStr, text, operation);\n }\n } else {\n newValueStr = this.insertText(inputValue, text, selectionStart, selectionEnd);\n this.updateValue(event, newValueStr, text, operation);\n }\n }\n },\n insertText(value, text, start, end) {\n let textSplit = text === '.' ? text : text.split('.');\n\n if (textSplit.length === 2) {\n const decimalCharIndex = value.slice(start, end).search(this._decimal);\n\n this._decimal.lastIndex = 0;\n\n return decimalCharIndex > 0 ? value.slice(0, start) + this.formatValue(text) + value.slice(end) : this.formatValue(text) || value;\n } else if (end - start === value.length) {\n return this.formatValue(text);\n } else if (start === 0) {\n return text + value.slice(end);\n } else if (end === value.length) {\n return value.slice(0, start) + text;\n } else {\n return value.slice(0, start) + text + value.slice(end);\n }\n },\n deleteRange(value, start, end) {\n let newValueStr;\n\n if (end - start === value.length) newValueStr = '';\n else if (start === 0) newValueStr = value.slice(end);\n else if (end === value.length) newValueStr = value.slice(0, start);\n else newValueStr = value.slice(0, start) + value.slice(end);\n\n return newValueStr;\n },\n initCursor() {\n let selectionStart = this.$refs.input.$el.selectionStart;\n let inputValue = this.$refs.input.$el.value;\n let valueLength = inputValue.length;\n let index = null;\n\n // remove prefix\n let prefixLength = (this.prefixChar || '').length;\n\n inputValue = inputValue.replace(this._prefix, '');\n selectionStart = selectionStart - prefixLength;\n\n let char = inputValue.charAt(selectionStart);\n\n if (this.isNumeralChar(char)) {\n return selectionStart + prefixLength;\n }\n\n //left\n let i = selectionStart - 1;\n\n while (i >= 0) {\n char = inputValue.charAt(i);\n\n if (this.isNumeralChar(char)) {\n index = i + prefixLength;\n break;\n } else {\n i--;\n }\n }\n\n if (index !== null) {\n this.$refs.input.$el.setSelectionRange(index + 1, index + 1);\n } else {\n i = selectionStart;\n\n while (i < valueLength) {\n char = inputValue.charAt(i);\n\n if (this.isNumeralChar(char)) {\n index = i + prefixLength;\n break;\n } else {\n i++;\n }\n }\n\n if (index !== null) {\n this.$refs.input.$el.setSelectionRange(index, index);\n }\n }\n\n return index || 0;\n },\n onInputClick() {\n const currentValue = this.$refs.input.$el.value;\n\n if (!this.readonly && currentValue !== getSelection()) {\n this.initCursor();\n }\n },\n isNumeralChar(char) {\n if (char.length === 1 && (this._numeral.test(char) || this._decimal.test(char) || this._group.test(char) || this._minusSign.test(char))) {\n this.resetRegex();\n\n return true;\n }\n\n return false;\n },\n resetRegex() {\n this._numeral.lastIndex = 0;\n this._decimal.lastIndex = 0;\n this._group.lastIndex = 0;\n this._minusSign.lastIndex = 0;\n },\n updateValue(event, valueStr, insertedValueStr, operation) {\n let currentValue = this.$refs.input.$el.value;\n let newValue = null;\n\n if (valueStr != null) {\n newValue = this.parseValue(valueStr);\n newValue = !newValue && !this.allowEmpty ? 0 : newValue;\n this.updateInput(newValue, insertedValueStr, operation, valueStr);\n\n this.handleOnInput(event, currentValue, newValue);\n }\n },\n handleOnInput(event, currentValue, newValue) {\n if (this.isValueChanged(currentValue, newValue)) {\n this.$emit('input', { originalEvent: event, value: newValue, formattedValue: currentValue });\n this.formField.onInput?.({ originalEvent: event, value: newValue });\n }\n },\n isValueChanged(currentValue, newValue) {\n if (newValue === null && currentValue !== null) {\n return true;\n }\n\n if (newValue != null) {\n let parsedCurrentValue = typeof currentValue === 'string' ? this.parseValue(currentValue) : currentValue;\n\n return newValue !== parsedCurrentValue;\n }\n\n return false;\n },\n validateValue(value) {\n if (value === '-' || value == null) {\n return null;\n }\n\n if (this.min != null && value < this.min) {\n return this.min;\n }\n\n if (this.max != null && value > this.max) {\n return this.max;\n }\n\n return value;\n },\n updateInput(value, insertedValueStr, operation, valueStr) {\n insertedValueStr = insertedValueStr || '';\n\n let inputValue = this.$refs.input.$el.value;\n let newValue = this.formatValue(value);\n let currentLength = inputValue.length;\n\n if (newValue !== valueStr) {\n newValue = this.concatValues(newValue, valueStr);\n }\n\n if (currentLength === 0) {\n this.$refs.input.$el.value = newValue;\n this.$refs.input.$el.setSelectionRange(0, 0);\n const index = this.initCursor();\n const selectionEnd = index + insertedValueStr.length;\n\n this.$refs.input.$el.setSelectionRange(selectionEnd, selectionEnd);\n } else {\n let selectionStart = this.$refs.input.$el.selectionStart;\n let selectionEnd = this.$refs.input.$el.selectionEnd;\n\n this.$refs.input.$el.value = newValue;\n let newLength = newValue.length;\n\n if (operation === 'range-insert') {\n const startValue = this.parseValue((inputValue || '').slice(0, selectionStart));\n const startValueStr = startValue !== null ? startValue.toString() : '';\n const startExpr = startValueStr.split('').join(`(${this.groupChar})?`);\n const sRegex = new RegExp(startExpr, 'g');\n\n sRegex.test(newValue);\n\n const tExpr = insertedValueStr.split('').join(`(${this.groupChar})?`);\n const tRegex = new RegExp(tExpr, 'g');\n\n tRegex.test(newValue.slice(sRegex.lastIndex));\n\n selectionEnd = sRegex.lastIndex + tRegex.lastIndex;\n this.$refs.input.$el.setSelectionRange(selectionEnd, selectionEnd);\n } else if (newLength === currentLength) {\n if (operation === 'insert' || operation === 'delete-back-single') {\n this.$refs.input.$el.setSelectionRange(selectionEnd + 1, selectionEnd + 1);\n } else if (operation === 'delete-single') {\n this.$refs.input.$el.setSelectionRange(selectionEnd - 1, selectionEnd - 1);\n } else if (operation === 'delete-range' || operation === 'spin') {\n this.$refs.input.$el.setSelectionRange(selectionEnd, selectionEnd);\n }\n } else if (operation === 'delete-back-single') {\n let prevChar = inputValue.charAt(selectionEnd - 1);\n let nextChar = inputValue.charAt(selectionEnd);\n let diff = currentLength - newLength;\n let isGroupChar = this._group.test(nextChar);\n\n if (isGroupChar && diff === 1) {\n selectionEnd += 1;\n } else if (!isGroupChar && this.isNumeralChar(prevChar)) {\n selectionEnd += -1 * diff + 1;\n }\n\n this._group.lastIndex = 0;\n this.$refs.input.$el.setSelectionRange(selectionEnd, selectionEnd);\n } else if (inputValue === '-' && operation === 'insert') {\n this.$refs.input.$el.setSelectionRange(0, 0);\n const index = this.initCursor();\n const selectionEnd = index + insertedValueStr.length + 1;\n\n this.$refs.input.$el.setSelectionRange(selectionEnd, selectionEnd);\n } else {\n selectionEnd = selectionEnd + (newLength - currentLength);\n this.$refs.input.$el.setSelectionRange(selectionEnd, selectionEnd);\n }\n }\n\n this.$refs.input.$el.setAttribute('aria-valuenow', value);\n },\n concatValues(val1, val2) {\n if (val1 && val2) {\n let decimalCharIndex = val2.search(this._decimal);\n\n this._decimal.lastIndex = 0;\n\n if (this.suffixChar) {\n return decimalCharIndex !== -1 ? val1.replace(this.suffixChar, '').split(this._decimal)[0] + val2.replace(this.suffixChar, '').slice(decimalCharIndex) + this.suffixChar : val1;\n } else {\n return decimalCharIndex !== -1 ? val1.split(this._decimal)[0] + val2.slice(decimalCharIndex) : val1;\n }\n }\n\n return val1;\n },\n getDecimalLength(value) {\n if (value) {\n const valueSplit = value.split(this._decimal);\n\n if (valueSplit.length === 2) {\n return valueSplit[1].replace(this._suffix, '').trim().replace(/\\s/g, '').replace(this._currency, '').length;\n }\n }\n\n return 0;\n },\n updateModel(event, value) {\n this.writeValue(value, event);\n },\n onInputFocus(event) {\n this.focused = true;\n\n if (!this.disabled && !this.readonly && this.$refs.input.$el.value !== getSelection() && this.highlightOnFocus) {\n event.target.select();\n }\n\n this.$emit('focus', event);\n },\n onInputBlur(event) {\n this.focused = false;\n\n let input = event.target;\n let newValue = this.validateValue(this.parseValue(input.value));\n\n this.$emit('blur', { originalEvent: event, value: input.value });\n this.formField.onBlur?.(event);\n\n input.value = this.formatValue(newValue);\n input.setAttribute('aria-valuenow', newValue);\n this.updateModel(event, newValue);\n\n if (!this.disabled && !this.readonly && this.highlightOnFocus) {\n clearSelection();\n }\n },\n clearTimer() {\n if (this.timer) {\n clearTimeout(this.timer);\n }\n },\n maxBoundry() {\n return this.d_value >= this.max;\n },\n minBoundry() {\n return this.d_value <= this.min;\n }\n },\n computed: {\n upButtonListeners() {\n return {\n mousedown: (event) => this.onUpButtonMouseDown(event),\n mouseup: (event) => this.onUpButtonMouseUp(event),\n mouseleave: (event) => this.onUpButtonMouseLeave(event),\n keydown: (event) => this.onUpButtonKeyDown(event),\n keyup: (event) => this.onUpButtonKeyUp(event)\n };\n },\n downButtonListeners() {\n return {\n mousedown: (event) => this.onDownButtonMouseDown(event),\n mouseup: (event) => this.onDownButtonMouseUp(event),\n mouseleave: (event) => this.onDownButtonMouseLeave(event),\n keydown: (event) => this.onDownButtonKeyDown(event),\n keyup: (event) => this.onDownButtonKeyUp(event)\n };\n },\n formattedValue() {\n const val = !this.d_value && !this.allowEmpty ? 0 : this.d_value;\n\n return this.formatValue(val);\n },\n getFormatter() {\n return this.numberFormat;\n },\n dataP() {\n return cn({\n invalid: this.$invalid,\n fluid: this.$fluid,\n filled: this.$variant === 'filled',\n [this.size]: this.size,\n [this.buttonLayout]: this.showButtons && this.buttonLayout\n });\n }\n },\n components: {\n InputText,\n AngleUpIcon,\n AngleDownIcon\n }\n};\n</script>\n","<template>\n <span :class=\"cx('root')\" v-bind=\"ptmi('root')\" :data-p=\"dataP\">\n <InputText\n ref=\"input\"\n :id=\"inputId\"\n :name=\"$formName\"\n role=\"spinbutton\"\n :class=\"[cx('pcInputText'), inputClass]\"\n :style=\"inputStyle\"\n :defaultValue=\"formattedValue\"\n :aria-valuemin=\"min\"\n :aria-valuemax=\"max\"\n :aria-valuenow=\"d_value\"\n :inputmode=\"mode === 'decimal' && !minFractionDigits ? 'numeric' : 'decimal'\"\n :disabled=\"disabled\"\n :readonly=\"readonly\"\n :placeholder=\"placeholder\"\n :aria-labelledby=\"ariaLabelledby\"\n :aria-label=\"ariaLabel\"\n :required=\"required\"\n :size=\"size\"\n :invalid=\"invalid\"\n :variant=\"variant\"\n @input=\"onUserInput\"\n @keydown=\"onInputKeyDown\"\n @keypress=\"onInputKeyPress\"\n @paste=\"onPaste\"\n @click=\"onInputClick\"\n @focus=\"onInputFocus\"\n @blur=\"onInputBlur\"\n :pt=\"ptm('pcInputText')\"\n :unstyled=\"unstyled\"\n :data-p=\"dataP\"\n />\n <span v-if=\"showButtons && buttonLayout === 'stacked'\" :class=\"cx('buttonGroup')\" v-bind=\"ptm('buttonGroup')\" :data-p=\"dataP\">\n <slot name=\"incrementbutton\" :listeners=\"upButtonListeners\">\n <button :class=\"[cx('incrementButton'), incrementButtonClass]\" v-on=\"upButtonListeners\" :disabled=\"disabled\" :tabindex=\"-1\" aria-hidden=\"true\" type=\"button\" v-bind=\"ptm('incrementButton')\" :data-p=\"dataP\">\n <slot :name=\"$slots.incrementicon ? 'incrementicon' : 'incrementbuttonicon'\">\n <component :is=\"incrementIcon || incrementButtonIcon ? 'span' : 'AngleUpIcon'\" :class=\"[incrementIcon, incrementButtonIcon]\" v-bind=\"ptm('incrementIcon')\" data-pc-section=\"incrementicon\" />\n </slot>\n </button>\n </slot>\n <slot name=\"decrementbutton\" :listeners=\"downButtonListeners\">\n <button :class=\"[cx('decrementButton'), decrementButtonClass]\" v-on=\"downButtonListeners\" :disabled=\"disabled\" :tabindex=\"-1\" aria-hidden=\"true\" type=\"button\" v-bind=\"ptm('decrementButton')\" :data-p=\"dataP\">\n <slot :name=\"$slots.decrementicon ? 'decrementicon' : 'decrementbuttonicon'\">\n <component :is=\"decrementIcon || decrementButtonIcon ? 'span' : 'AngleDownIcon'\" :class=\"[decrementIcon, decrementButtonIcon]\" v-bind=\"ptm('decrementIcon')\" data-pc-section=\"decrementicon\" />\n </slot>\n </button>\n </slot>\n </span>\n <slot name=\"incrementbutton\" :listeners=\"upButtonListeners\">\n <button\n v-if=\"showButtons && buttonLayout !== 'stacked'\"\n :class=\"[cx('incrementButton'), incrementButtonClass]\"\n v-on=\"upButtonListeners\"\n :disabled=\"disabled\"\n :tabindex=\"-1\"\n aria-hidden=\"true\"\n type=\"button\"\n v-bind=\"ptm('incrementButton')\"\n :data-p=\"dataP\"\n >\n <slot :name=\"$slots.incrementicon ? 'incrementicon' : 'incrementbuttonicon'\">\n <component :is=\"incrementIcon || incrementButtonIcon ? 'span' : 'AngleUpIcon'\" :class=\"[incrementIcon, incrementButtonIcon]\" v-bind=\"ptm('incrementIcon')\" data-pc-section=\"incrementicon\" />\n </slot>\n </button>\n </slot>\n <slot name=\"decrementbutton\" :listeners=\"downButtonListeners\">\n <button\n v-if=\"showButtons && buttonLayout !== 'stacked'\"\n :class=\"[cx('decrementButton'), decrementButtonClass]\"\n v-on=\"downButtonListeners\"\n :disabled=\"disabled\"\n :tabindex=\"-1\"\n aria-hidden=\"true\"\n type=\"button\"\n v-bind=\"ptm('decrementButton')\"\n :data-p=\"dataP\"\n >\n <slot :name=\"$slots.decrementicon ? 'decrementicon' : 'decrementbuttonicon'\">\n <component :is=\"decrementIcon || decrementButtonIcon ? 'span' : 'AngleDownIcon'\" :class=\"[decrementIcon, decrementButtonIcon]\" v-bind=\"ptm('decrementIcon')\" data-pc-section=\"decrementicon\" />\n </slot>\n </button>\n </slot>\n <!-- TODO: decrementButton* and incrementButton* are deprecated since v4.0-->\n </span>\n</template>\n\n<script>\nimport { cn } from '@primeuix/utils';\nimport { clearSelection, getSelection } from '@primeuix/utils/dom';\nimport { isNotEmpty } from '@primeuix/utils/object';\nimport AngleDownIcon from '@primevue/icons/angledown';\nimport AngleUpIcon from '@primevue/icons/angleup';\nimport InputText from 'primevue/inputtext';\nimport BaseInputNumber from './BaseInputNumber.vue';\n\nexport default {\n name: 'InputNumber',\n extends: BaseInputNumber,\n inheritAttrs: false,\n emits: ['input', 'focus', 'blur'],\n inject: {\n $pcFluid: { default: null }\n },\n numberFormat: null,\n _numeral: null,\n _decimal: null,\n _group: null,\n _minusSign: null,\n _currency: null,\n _suffix: null,\n _prefix: null,\n _index: null,\n groupChar: '',\n isSpecialChar: null,\n prefixChar: null,\n suffixChar: null,\n timer: null,\n data() {\n return {\n // @deprecated\n d_modelValue: this.d_value,\n focused: false\n };\n },\n watch: {\n d_value(newValue) {\n // @deprecated since v4.2.0\n this.d_modelValue = newValue;\n },\n locale(newValue, oldValue) {\n this.updateConstructParser(newValue, oldValue);\n },\n localeMatcher(newValue, oldValue) {\n this.updateConstructParser(newValue, oldValue);\n },\n mode(newValue, oldValue) {\n this.updateConstructParser(newValue, oldValue);\n },\n currency(newValue, oldValue) {\n this.updateConstructParser(newValue, oldValue);\n },\n currencyDisplay(newValue, oldValue) {\n this.updateConstructParser(newValue, oldValue);\n },\n useGrouping(newValue, oldValue) {\n this.updateConstructParser(newValue, oldValue);\n },\n minFractionDigits(newValue, oldValue) {\n this.updateConstructParser(newValue, oldValue);\n },\n maxFractionDigits(newValue, oldValue) {\n this.updateConstructParser(newValue, oldValue);\n },\n suffix(newValue, oldValue) {\n this.updateConstructParser(newValue, oldValue);\n },\n prefix(newValue, oldValue) {\n this.updateConstructParser(newValue, oldValue);\n }\n },\n created() {\n this.constructParser();\n },\n methods: {\n getOptions() {\n return {\n localeMatcher: this.localeMatcher,\n style: this.mode,\n currency: this.currency,\n currencyDisplay: this.currencyDisplay,\n useGrouping: this.useGrouping,\n minimumFractionDigits: this.minFractionDigits,\n maximumFractionDigits: this.maxFractionDigits,\n roundingMode: this.roundingMode\n };\n },\n constructParser() {\n this.numberFormat = new Intl.NumberFormat(this.locale, this.getOptions());\n const numerals = [...new Intl.NumberFormat(this.locale, { useGrouping: false }).format(9876543210)].reverse();\n const index = new Map(numerals.map((d, i) => [d, i]));\n\n this._numeral = new RegExp(`[${numerals.join('')}]`, 'g');\n this._group = this.getGroupingExpression();\n this._minusSign = this.getMinusSignExpression();\n this._currency = this.getCurrencyExpression();\n this._decimal = this.getDecimalExpression();\n this._suffix = this.getSuffixExpression();\n this._prefix = this.getPrefixExpression();\n this._index = (d) => index.get(d);\n },\n updateConstructParser(newValue, oldValue) {\n if (newValue !== oldValue) {\n this.constructParser();\n }\n },\n escapeRegExp(text) {\n return text.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&');\n },\n getDecimalExpression() {\n const formatter = new Intl.NumberFormat(this.locale, { ...this.getOptions(), useGrouping: false });\n\n return new RegExp(`[${formatter.format(1.1).replace(this._currency, '').trim().replace(this._numeral, '')}]`, 'g');\n },\n getGroupingExpression() {\n const formatter = new Intl.NumberFormat(this.locale, { useGrouping: true });\n\n this.groupChar = formatter.format(1000000).trim().replace(this._numeral, '').charAt(0);\n\n return new RegExp(`[${this.groupChar}]`, 'g');\n },\n getMinusSignExpression() {\n const formatter = new Intl.NumberFormat(this.locale, { useGrouping: false });\n\n return new RegExp(`[${formatter.format(-1).trim().replace(this._numeral, '')}]`, 'g');\n },\n getCurrencyExpression() {\n if (this.currency) {\n const formatter = new Intl.NumberFormat(this.locale, { style: 'currency', currency: this.currency, currencyDisplay: this.currencyDisplay, minimumFractionDigits: 0, maximumFractionDigits: 0, roundingMode: this.roundingMode });\n\n return new RegExp(`[${formatter.format(1).replace(/\\s/g, '').replace(this._numeral, '').replace(this._group, '')}]`, 'g');\n }\n\n return new RegExp(`[]`, 'g');\n },\n getPrefixExpression() {\n if (this.prefix) {\n this.prefixChar = this.prefix;\n } else {\n const formatter = new Intl.NumberFormat(this.locale, { style: this.mode, currency: this.currency, currencyDisplay: this.currencyDisplay });\n\n this.prefixChar = formatter.format(1).split('1')[0];\n }\n\n return new RegExp(`${this.escapeRegExp(this.prefixChar || '')}`, 'g');\n },\n getSuffixExpression() {\n if (this.suffix) {\n this.suffixChar = this.suffix;\n } else {\n const formatter = new Intl.NumberFormat(this.locale, { style: this.mode, currency: this.currency, currencyDisplay: this.currencyDisplay, minimumFractionDigits: 0, maximumFractionDigits: 0, roundingMode: this.roundingMode });\n\n this.suffixChar = formatter.format(1).split('1')[1];\n }\n\n return new RegExp(`${this.escapeRegExp(this.suffixChar || '')}`, 'g');\n },\n formatValue(value) {\n if (value != null) {\n if (value === '-') {\n // Minus sign\n return value;\n }\n\n if (this.format) {\n let formatter = new Intl.NumberFormat(this.locale, this.getOptions());\n let formattedValue = formatter.format(value);\n\n if (this.prefix) {\n formattedValue = this.prefix + formattedValue;\n }\n\n if (this.suffix) {\n formattedValue = formattedValue + this.suffix;\n }\n\n return formattedValue;\n }\n\n return value.toString();\n }\n\n return '';\n },\n parseValue(text) {\n let filteredText = text\n .replace(this._suffix, '')\n .replace(this._prefix, '')\n .trim()\n .replace(/\\s/g, '')\n .replace(this._currency, '')\n .replace(this._group, '')\n .replace(this._minusSign, '-')\n .replace(this._decimal, '.')\n .replace(this._numeral, this._index);\n\n if (filteredText) {\n if (filteredText === '-')\n // Minus sign\n return filteredText;\n\n let parsedValue = +filteredText;\n\n return isNaN(parsedValue) ? null : parsedValue;\n }\n\n return null;\n },\n repeat(event, interval, dir) {\n if (this.readonly) {\n return;\n }\n\n let i = interval || 500;\n\n this.clearTimer();\n this.timer = setTimeout(() => {\n this.repeat(event, 40, dir);\n }, i);\n\n this.spin(event, dir);\n },\n spin(event, dir) {\n if (this.$refs.input) {\n let step = this.step * dir;\n let currentValue = this.parseValue(this.$refs.input.$el.value) || 0;\n let newValue = this.validateValue(currentValue + step);\n\n this.updateInput(newValue, null, 'spin');\n this.updateModel(event, newValue);\n\n this.handleOnInput(event, currentValue, newValue);\n }\n },\n onUpButtonMouseDown(event) {\n if (!this.disabled) {\n this.$refs.input.$el.focus();\n this.repeat(event, null, 1);\n event.preventDefault();\n }\n },\n onUpButtonMouseUp() {\n if (!this.disabled) {\n this.clearTimer();\n }\n },\n onUpButtonMouseLeave() {\n if (!this.disabled) {\n this.clearTimer();\n }\n },\n onUpButtonKeyUp() {\n if (!this.disabled) {\n this.clearTimer();\n }\n },\n onUpButtonKeyDown(event) {\n if (event.code === 'Space' || event.code === 'Enter' || event.code === 'NumpadEnter') {\n this.repeat(event, null, 1);\n }\n },\n onDownButtonMouseDown(event) {\n if (!this.disabled) {\n this.$refs.input.$el.focus();\n this.repeat(event, null, -1);\n event.preventDefault();\n }\n },\n onDownButtonMouseUp() {\n if (!this.disabled) {\n this.clearTimer();\n }\n },\n onDownButtonMouseLeave() {\n if (!this.disabled) {\n this.clearTimer();\n }\n },\n onDownButtonKeyUp() {\n if (!this.disabled) {\n this.clearTimer();\n }\n },\n onDownButtonKeyDown(event) {\n if (event.code === 'Space' || event.code === 'Enter' || event.code === 'NumpadEnter') {\n this.repeat(event, null, -1);\n }\n },\n onUserInput() {\n if (this.isSpecialChar) {\n this.$refs.input.$el.value = this.lastValue;\n }\n\n this.isSpecialChar = false;\n },\n onInputKeyDown(event) {\n if (this.readonly) {\n return;\n }\n\n if (event.altKey || event.ctrlKey || event.metaKey) {\n this.isSpecialChar = true;\n this.lastValue = this.$refs.input.$el.value;\n\n return;\n }\n\n this.lastValue = event.target.value;\n\n let selectionStart = event.target.selectionStart;\n let selectionEnd = event.target.selectionEnd;\n let selectionRange = selectionEnd - selectionStart;\n let inputValue = event.target.value;\n let newValueStr = null;\n const code = event.code || event.key;\n\n switch (code) {\n case 'ArrowUp':\n this.spin(event, 1);\n event.preventDefault();\n break;\n\n case 'ArrowDown':\n this.spin(event, -1);\n event.preventDefault();\n break;\n\n case 'ArrowLeft':\n if (selectionRange > 1) {\n const cursorPosition = this.isNumeralChar(inputValue.charAt(selectionStart)) ? selectionStart + 1 : selectionStart + 2;\n\n this.$refs.input.$el.setSelectionRange(cursorPosition, cursorPosition);\n } else if (!this.isNumeralChar(inputValue.charAt(selectionStart - 1))) {\n event.preventDefault();\n }\n\n break;\n\n case 'ArrowRight':\n if (selectionRange > 1) {\n const cursorPosition = selectionEnd - 1;\n\n this.$refs.input.$el.setSelectionRange(cursorPosition, cursorPosition);\n } else if (!this.isNumeralChar(inputValue.charAt(selectionStart))) {\n event.preventDefault();\n }\n\n break;\n\n case 'Tab':\n case 'Enter':\n case 'NumpadEnter':\n newValueStr = this.validateValue(this.parseValue(inputValue));\n this.$refs.input.$el.value = this.formatValue(newValueStr);\n this.$refs.input.$el.setAttribute('aria-valuenow', newValueStr);\n this.updateModel(event, newValueStr);\n break;\n\n case 'Backspace': {\n event.preventDefault();\n\n if (selectionStart === selectionEnd) {\n if (selectionStart >= inputValue.length && this.suffixChar !== null) {\n selectionStart = inputValue.length - this.suffixChar.length;\n this.$refs.input.$el.setSelectionRange(selectionStart, selectionStart);\n }\n\n const deleteChar = inputValue.charAt(selectionStart - 1);\n const { decimalCharIndex, decimalCharIndexWithoutPrefix } = this.getDecimalCharIndexes(inputValue);\n\n if (this.isNumeralChar(deleteChar)) {\n const decimalLength = this.getDecimalLength(inputValue);\n\n if (this._group.test(deleteChar)) {\n this._group.lastIndex = 0;\n newValueStr = inputValue.slice(0, selectionStart - 2) + inputValue.slice(selectionStart - 1);\n } else if (this._decimal.test(deleteChar)) {\n this._decimal.lastIndex = 0;\n\n if (decimalLength) {\n this.$refs.input.$el.setSelectionRange(selectionStart - 1, selectionStart - 1);\n } else {\n newValueStr = inputValue.slice(0, selectionStart - 1) + inputValue.slice(selectionStart);\n }\n } else if (decimalCharIndex > 0 && selectionStart > decimalCharIndex) {\n const insertedText = this.isDecimalMode() && (this.minFractionDigits || 0) < decimalLength ? '' : '0';\n\n newValueStr = inputValue.slice(0, selectionStart - 1) + insertedText + inputValue.slice(selectionStart);\n } else if (decimalCharIndexWithoutPrefix === 1) {\n newValueStr = inputValue.slice(0, selectionStart - 1) + '0' + inputValue.slice(selectionStart);\n newValueStr = this.parseValue(newValueStr) > 0 ? newValueStr : '';\n } else {\n newValueStr = inputValue.slice(0, selectionStart - 1) + inputValue.slice(selectionStart);\n }\n }\n\n this.updateValue(event, newValueStr, null, 'delete-single');\n } else {\n newValueStr = this.deleteRange(inputValue, selectionStart, selectionEnd);\n this.updateValue(event, newValueStr, null, 'delete-range');\n }\n\n break;\n }\n\n case 'Delete':\n event.preventDefault();\n\n if (selectionStart === selectionEnd) {\n const deleteChar = inputValue.charAt(selectionStart);\n const { decimalCharIndex, decimalCharIndexWithoutPrefix } = this.getDecimalCharIndexes(inputValue);\n\n if (this.isNumeralChar(deleteChar)) {\n const decimalLength = this.getDecimalLength(inputValue);\n\n if (this._group.test(deleteChar)) {\n this._group.lastIndex = 0;\n newValueStr = inputValue.slice(0, selectionStart) + inputValue.slice(selectionStart + 2);\n } else if (this._decimal.test(deleteChar)) {\n this._decimal.lastIndex = 0;\n\n if (decimalLength) {\n this.$refs.input.$el.setSelectionRange(selectionStart + 1, selectionStart + 1);\n } else {\n newValueStr = inputValue.slice(0, selectionStart) + inputValue.slice(selectionStart + 1);\n }\n } else if (decimalCharIndex > 0 && selectionStart > decimalCharIndex) {\n const insertedText = this.isDecimalMode() && (this.minFractionDigits || 0) < decimalLength ? '' : '0';\n\n newValueStr = inputValue.slice(0, selectionStart) + insertedText + inputValue.slice(selectionStart + 1);\n } else if (decimalCharIndexWithoutPrefix === 1) {\n newValueStr = inputValue.slice(0, selectionStart) + '0' + inputValue.slice(selectionStart + 1);\n newValueStr = this.parseValue(newValueStr) > 0 ? newValueStr : '';\n } else {\n newValueStr = inputValue.slice(0, selectionStart) + inputValue.slice(selectionStart + 1);\n }\n }\n\n this.updateValue(event, newValueStr, null, 'delete-back-single');\n } else {\n newValueStr = this.deleteRange(inputValue, selectionStart, selectionEnd);\n this.updateValue(event, newValueStr, null, 'delete-range');\n }\n\n break;\n\n case 'Home':\n event.preventDefault();\n\n if (isNotEmpty(this.min)) {\n this.updateModel(event, this.min);\n }\n\n break;\n\n case 'End':\n event.preventDefault();\n\n if (isNotEmpty(this.max)) {\n this.updateModel(event, this.max);\n }\n\n break;\n\n default:\n break;\n }\n },\n onInputKeyPress(event) {\n if (this.readonly) {\n return;\n }\n\n let char = event.key;\n let isDecimalSign = this.isDecimalSign(char);\n const isMinusSign = this.isMinusSign(char);\n\n if (event.code !== 'Enter') {\n event.preventDefault();\n }\n\n if ((Number(char) >= 0 && Number(char) <= 9) || isMinusSign || isDecimalSign) {\n this.insert(event, char, { isDecimalSign, isMinusSign });\n }\n },\n onPaste(event) {\n if (this.readonly) {\n return;\n }\n \n event.preventDefault();\n let data = (event.clipboardData || window['clipboardData']).getData('Text');\n\n if (data) {\n let filteredData = this.parseValue(data);\n\n if (filteredData != null) {\n this.insert(event, filteredData.toString());\n }\n }\n },\n allowMinusSign() {\n return this.min === null || this.min < 0;\n },\n isMinusSign(char) {\n if (this._minusSign.test(char) || char === '-') {\n this._minusSign.lastIndex = 0;\n\n return true;\n }\n\n return false;\n },\n isDecimalSign(char) {\n if ((this.locale?.includes('fr') && ['.', ','].includes(char)) || this._decimal.test(char)) {\n this._decimal.lastIndex = 0;\n\n return true;\n }\n\n return false;\n },\n isDecimalMode() {\n return this.mode === 'decimal';\n },\n getDecimalCharIndexes(val) {\n let decimalCharIndex = val.search(this._decimal);\n\n this._decimal.lastIndex = 0;\n\n const filteredVal = val.replace(this._prefix, '').trim().replace(/\\s/g, '').replace(this._currency, '');\n const decimalCharIndexWithoutPrefix = filteredVal.search(this._decimal);\n\n this._decimal.lastIndex = 0;\n\n return { decimalCharIndex, decimalCharIndexWithoutPrefix };\n },\n getCharIndexes(val) {\n const decimalCharIndex = val.search(this._decimal);\n\n this._decimal.lastIndex = 0;\n const minusCharIndex = val.search(this._minusSign);\n\n this._minusSign.lastIndex = 0;\n const suffixCharIndex = val.search(this._suffix);\n\n this._suffix.lastIndex = 0;\n const currencyCharIndex = val.search(this._currency);\n\n this._currency.lastIndex = 0;\n\n return { decimalCharIndex, minusCharIndex, suffixCharIndex, currencyCharIndex };\n },\n insert(event, text, sign = { isDecimalSign: false, isMinusSign: false }) {\n const minusCharIndexOnText = text.search(this._minusSign);\n\n this._minusSign.lastIndex = 0;\n\n if (!this.allowMinusSign() && minusCharIndexOnText !== -1) {\n return;\n }\n\n const selectionStart = this.$refs.input.$el.selectionStart;\n const selectionEnd = this.$refs.input.$el.selectionEnd;\n let inputValue = this.$refs.input.$el.value.trim();\n const { decimalCharIndex, minusCharIndex, suffixCharIndex, currencyCharIndex } = this.getCharIndexes(inputValue);\n let newValueStr;\n\n if (sign.isMinusSign) {\n const isNewMinusSign = minusCharIndex === -1;\n\n if (selectionStart === 0 || selectionStart === currencyCharIndex + 1) {\n newValueStr = inputValue;\n\n if (isNewMinusSign || selectionEnd !== 0) {\n newValueStr = this.insertText(inputValue, text, 0, selectionEnd);\n }\n\n this.updateValue(event, newValueStr, text, 'insert');\n }\n } else if (sign.isDecimalSign) {\n if (decimalCharIndex > 0 && selectionStart === decimalCharIndex) {\n this.updateValue(event, inputValue, text, 'insert');\n } else if (decimalCharIndex > selectionStart && decimalCharIndex < selectionEnd) {\n newValueStr = this.insertText(inputValue, text, selectionStart, selectionEnd);\n this.updateValue(event, newValueStr, text, 'insert');\n } else if (decimalCharIndex === -1 && this.maxFractionDigits) {\n newValueStr = this.insertText(inputValue, text, selectionStart, selectionEnd);\n this.updateValue(event, newValueStr, text, 'insert');\n }\n } else {\n const maxFractionDigits = this.numberFormat.resolvedOptions().maximumFractionDigits;\n const operation = selectionStart !== selectionEnd ? 'range-insert' : 'insert';\n\n if (decimalCharIndex > 0 && selectionStart > decimalCharIndex) {\n if (selectionStart + text.length - (decimalCharIndex + 1) <= maxFractionDigits) {\n const charIndex = currencyCharIndex >= selectionStart ? currencyCharIndex - 1 : suffixCharIndex >= selectionStart ? suffixCharIndex : inputValue.length;\n\n newValueStr = inputValue.slice(0, selectionStart) + text + inputValue.slice(selectionStart + text.length, charIndex) + inputValue.slice(charIndex);\n this.updateValue(event, newValueStr, text, operation);\n }\n } else {\n newValueStr = this.insertText(inputValue, text, selectionStart, selectionEnd);\n this.updateValue(event, newValueStr, text, operation);\n }\n }\n },\n insertText(value, text, start, end) {\n let textSplit = text === '.' ? text : text.split('.');\n\n if (textSplit.length === 2) {\n const decimalCharIndex = value.slice(start, end).search(this._decimal);\n\n this._decimal.lastIndex = 0;\n\n return decimalCharIndex > 0 ? value.slice(0, start) + this.formatValue(text) + value.slice(end) : this.formatValue(text) || value;\n } else if (end - start === value.length) {\n return this.formatValue(text);\n } else if (start === 0) {\n return text + value.slice(end);\n } else if (end === value.length) {\n return value.slice(0, start) + text;\n } else {\n return value.slice(0, start) + text + value.slice(end);\n }\n },\n deleteRange(value, start, end) {\n let newValueStr;\n\n if (end - start === value.length) newValueStr = '';\n else if (start === 0) newValueStr = value.slice(end);\n else if (end === value.length) newValueStr = value.slice(0, start);\n else newValueStr = value.slice(0, start) + value.slice(end);\n\n return newValueStr;\n },\n initCursor() {\n let selectionStart = this.$refs.input.$el.selectionStart;\n let inputValue = this.$refs.input.$el.value;\n let valueLength = inputValue.length;\n let index = null;\n\n // remove prefix\n let prefixLength = (this.prefixChar || '').length;\n\n inputValue = inputValue.replace(this._prefix, '');\n selectionStart = selectionStart - prefixLength;\n\n let char = inputValue.charAt(selectionStart);\n\n if (this.isNumeralChar(char)) {\n return selectionStart + prefixLength;\n }\n\n //left\n let i = selectionStart - 1;\n\n while (i >= 0) {\n char = inputValue.charAt(i);\n\n if (this.isNumeralChar(char)) {\n index = i + prefixLength;\n break;\n } else {\n i--;\n }\n }\n\n if (index !== null) {\n this.$refs.input.$el.setSelectionRange(index + 1, index + 1);\n } else {\n i = selectionStart;\n\n while (i < valueLength) {\n char = inputValue.charAt(i);\n\n if (this.isNumeralChar(char)) {\n index = i + prefixLength;\n break;\n } else {\n i++;\n }\n }\n\n if (index !== null) {\n this.$refs.input.$el.setSelectionRange(index, index);\n }\n }\n\n return index || 0;\n },\n onInputClick() {\n const currentValue = this.$refs.input.$el.value;\n\n if (!this.readonly && currentValue !== getSelection()) {\n this.initCursor();\n }\n },\n isNumeralChar(char) {\n if (char.length === 1 && (this._numeral.test(char) || this._decimal.test(char) || this._group.test(char) || this._minusSign.test(char))) {\n this.resetRegex();\n\n return true;\n }\n\n return false;\n },\n resetRegex() {\n this._numeral.lastIndex = 0;\n this._decimal.lastIndex = 0;\n this._group.lastIndex = 0;\n this._minusSign.lastIndex = 0;\n },\n updateValue(event, valueStr, insertedValueStr, operation) {\n let currentValue = this.$refs.input.$el.value;\n let newValue = null;\n\n if (valueStr != null) {\n newValue = this.parseValue(valueStr);\n newValue = !newValue && !this.allowEmpty ? 0 : newValue;\n this.updateInput(newValue, insertedValueStr, operation, valueStr);\n\n this.handleOnInput(event, currentValue, newValue);\n }\n },\n handleOnInput(event, currentValue, newValue) {\n if (this.isValueChanged(currentValue, newValue)) {\n this.$emit('input', { originalEvent: event, value: newValue, formattedValue: currentValue });\n this.formField.onInput?.({ originalEvent: event, value: newValue });\n }\n },\n isValueChanged(currentValue, newValue) {\n if (newValue === null && currentValue !== null) {\n return true;\n }\n\n if (newValue != null) {\n let parsedCurrentValue = typeof currentValue === 'string' ? this.parseValue(currentValue) : currentValue;\n\n return newValue !== parsedCurrentValue;\n }\n\n return false;\n },\n validateValue(value) {\n if (value === '-' || value == null) {\n return null;\n }\n\n if (this.min != null && value < this.min) {\n return this.min;\n }\n\n if (this.max != null && value > this.max) {\n return this.max;\n }\n\n return value;\n },\n updateInput(value, insertedValueStr, operation, valueStr) {\n insertedValueStr = insertedValueStr || '';\n\n let inputValue = this.$refs.input.$el.value;\n let newValue = this.formatValue(value);\n let currentLength = inputValue.length;\n\n if (newValue !== valueStr) {\n newValue = this.concatValues(newValue, valueStr);\n }\n\n if (currentLength === 0) {\n this.$refs.input.$el.value = newValue;\n this.$refs.input.$el.setSelectionRange(0, 0);\n const index = this.initCursor();\n const selectionEnd = index + insertedValueStr.length;\n\n this.$refs.input.$el.setSelectionRange(selectionEnd, selectionEnd);\n } else {\n let selectionStart = this.$refs.input.$el.selectionStart;\n let selectionEnd = this.$refs.input.$el.selectionEnd;\n\n this.$refs.input.$el.value = newValue;\n let newLength = newValue.length;\n\n if (operation === 'range-insert') {\n const startValue = this.parseValue((inputValue || '').slice(0, selectionStart));\n const startValueStr = startValue !== null ? startValue.toString() : '';\n const startExpr = startValueStr.split('').join(`(${this.groupChar})?`);\n const sRegex = new RegExp(startExpr, 'g');\n\n sRegex.test(newValue);\n\n const tExpr = insertedValueStr.split('').join(`(${this.groupChar})?`);\n const tRegex = new RegExp(tExpr, 'g');\n\n tRegex.test(newValue.slice(sRegex.lastIndex));\n\n selectionEnd = sRegex.lastIndex + tRegex.lastIndex;\n this.$refs.input.$el.setSelectionRange(selectionEnd, selectionEnd);\n } else if (newLength === currentLength) {\n if (operation === 'insert' || operation === 'delete-back-single') {\n this.$refs.input.$el.setSelectionRange(selectionEnd + 1, selectionEnd + 1);\n } else if (operation === 'delete-single') {\n this.$refs.input.$el.setSelectionRange(selectionEnd - 1, selectionEnd - 1);\n } else if (operation === 'delete-range' || operation === 'spin') {\n this.$refs.input.$el.setSelectionRange(selectionEnd, selectionEnd);\n }\n } else if (operation === 'delete-back-single') {\n let prevChar = inputValue.charAt(selectionEnd - 1);\n let nextChar = inputValue.charAt(selectionEnd);\n let diff = currentLength - newLength;\n let isGroupChar = this._group.test(nextChar);\n\n if (isGroupChar && diff === 1) {\n selectionEnd += 1;\n } else if (!isGroupChar && this.isNumeralChar(prevChar)) {\n selectionEnd += -1 * diff + 1;\n }\n\n this._group.lastIndex = 0;\n this.$refs.input.$el.setSelectionRange(selectionEnd, selectionEnd);\n } else if (inputValue === '-' && operation === 'insert') {\n this.$refs.input.$el.setSelectionRange(0, 0);\n const index = this.initCursor();\n const selectionEnd = index + insertedValueStr.length + 1;\n\n this.$refs.input.$el.setSelectionRange(selectionEnd, selectionEnd);\n } else {\n selectionEnd = selectionEnd + (newLength - currentLength);\n this.$refs.input.$el.setSelectionRange(selectionEnd, selectionEnd);\n }\n }\n\n this.$refs.input.$el.setAttribute('aria-valuenow', value);\n },\n concatValues(val1, val2) {\n if (val1 && val2) {\n let decimalCharIndex = val2.search(this._decimal);\n\n this._decimal.lastIndex = 0;\n\n if (this.suffixChar) {\n return decimalCharIndex !== -1 ? val1.replace(this.suffixChar, '').split(this._decimal)[0] + val2.replace(this.suffixChar, '').slice(decimalCharIndex) + this.suffixChar : val1;\n } else {\n return decimalCharIndex !== -1 ? val1.split(this._decimal)[0] + val2.slice(decimalCharIndex) : val1;\n }\n }\n\n return val1;\n },\n getDecimalLength(value) {\n if (value) {\n const valueSplit = value.split(this._decimal);\n\n if (valueSplit.length === 2) {\n return valueSplit[1].replace(this._suffix, '').trim().replace(/\\s/g, '').replace(this._currency, '').length;\n }\n }\n\n return 0;\n },\n updateModel(event, value) {\n this.writeValue(value, event);\n },\n onInputFocus(event) {\n this.focused = true;\n\n if (!this.disabled && !this.readonly && this.$refs.input.$el.value !== getSelection() && this.highlightOnFocus) {\n event.target.select();\n }\n\n this.$emit('focus', event);\n },\n onInputBlur(event) {\n this.focused = false;\n\n let input = event.target;\n let newValue = this.validateValue(this.parseValue(input.value));\n\n this.$emit('blur', { originalEvent: event, value: input.value });\n this.formField.onBlur?.(event);\n\n input.value = this.formatValue(newValue);\n input.setAttribute('aria-valuenow', newValue);\n this.updateModel(event, newValue);\n\n if (!this.disabled && !this.readonly && this.highlightOnFocus) {\n clearSelection();\n }\n },\n clearTimer() {\n if (this.timer) {\n clearTimeout(this.timer);\n }\n },\n maxBoundry() {\n return this.d_value >= this.max;\n },\n minBoundry() {\n return this.d_value <= this.min;\n }\n },\n computed: {\n upButtonListeners() {\n return {\n mousedown: (event) => this.onUpButtonMouseDown(event),\n mouseup: (event) => this.onUpButtonMouseUp(event),\n mouseleave: (event) => this.onUpButtonMouseLeave(event),\n keydown: (event) => this.onUpButtonKeyDown(event),\n keyup: (event) => this.onUpButtonKeyUp(event)\n };\n },\n downButtonListeners() {\n return {\n mousedown: (event) => this.onDownButtonMouseDown(event),\n mouseup: (event) => this.onDownButtonMouseUp(event),\n mouseleave: (event) => this.onDownButtonMouseLeave(event),\n keydown: (event) => this.onDownButtonKeyDown(event),\n keyup: (event) => this.onDownButtonKeyUp(event)\n };\n },\n formattedValue() {\n const val = !this.d_value && !this.allowEmpty ? 0 : this.d_value;\n\n return this.formatValue(val);\n },\n getFormatter() {\n return this.numberFormat;\n },\n dataP() {\n return cn({\n invalid: this.$invalid,\n fluid: this.$fluid,\n filled: this.$variant === 'filled',\n [this.size]: this.size,\n [this.buttonLayout]: this.showButtons && this.buttonLayout\n });\n }\n },\n components: {\n InputText,\n AngleUpIcon,\n AngleDownIcon\n }\n};\n</script>\n"],"names":["name","BaseInput","props","format","type","Boolean","showButtons","buttonLayout","String","incrementButtonClass","decrementButtonClass","incrementButtonIcon","undefined","incrementIcon","decrementButtonIcon","decrementIcon","locale","localeMatcher","mode","prefix","suffix","currency","currencyDisplay","useGrouping","minFractionDigits","Number","maxFractionDigits","roundingMode","validator","value","includes","min","max","step","allowEmpty","highlightOnFocus","readonly","placeholder","inputId","inputClass","Object","inputStyle","ariaLabelledby","ariaLabel","required","style","InputNumberStyle","provide","$pcInputNumber","$parentInstance","BaseInputNumber","inheritAttrs","emits","inject","$pcFluid","numberFormat","_numeral","_decimal","_group","_minusSign","_currency","_suffix","_prefix","_index","groupChar","isSpecialChar","prefixChar","suffixChar","timer","data","d_modelValue","d_value","focused","watch","newValue","oldValue","updateConstructParser","created","constructParser","methods","getOptions","minimumFractionDigits","maximumFractionDigits","Intl","NumberFormat","numerals","_toConsumableArray","reverse","index","Map","map","d","i","RegExp","concat","join","getGroupingExpression","getMinusSignExpression","getCurrencyExpression","getDecimalExpression","getSuffixExpression","getPrefixExpression","get","escapeRegExp","text","replace","formatter","_objectSpread","trim","charAt","split","formatValue","formattedValue","toString","parseValue","filteredText","parsedValue","isNaN","repeat","event","interval","dir","_this","clearTimer","setTimeout","spin","$refs","input","currentValue","$el","validateValue","updateInput","updateModel","handleOnInput","onUpButtonMouseDown","disabled","focus","preventDefault","onUpButtonMouseUp","onUpButtonMouseLeave","onUpButtonKeyUp","onUpButtonKeyDown","code","onDownButtonMouseDown","onDownButtonMouseUp","onDownButtonMouseLeave","onDownButtonKeyUp","onDownButtonKeyDown","onUserInput","lastValue","onInputKeyDown","altKey","ctrlKey","metaKey","target","selectionStart","selectionEnd","selectionRange","inputValue","newValueStr","key","cursorPosition","isNumeralChar","setSelectionRange","setAttribute","length","deleteChar","_this$getDecimalCharI","getDecimalCharIndexes","decimalCharIndex","decimalCharIndexWithoutPrefix","decimalLength","getDecimalLength","test","lastIndex","slice","insertedText","isDecimalMode","updateValue","deleteRange","_this$getDecimalCharI2","isNotEmpty","onInputKeyPress","char","isDecimalSign","isMinusSign","insert","onPaste","clipboardData","window","getData","filteredData","allowMinusSign","_this$locale","val","search","filteredVal","getCharIndexes","minusCharIndex","suffixCharIndex","currencyCharIndex","sign","arguments","minusCharIndexOnText","_this$getCharIndexes","isNewMinusSign","insertText","resolvedOptions","operation","charIndex","start","end","textSplit","initCursor","valueLength","prefixLength","onInputClick","getSelection","resetRegex","valueStr","insertedValueStr","isValueChanged","_this$formField$onInp","_this$formField","$emit","originalEvent","formField","onInput","call","parsedCurrentValue","currentLength","concatValues","newLength","startValue","startValueStr","startExpr","sRegex","tExpr","tRegex","prevChar","nextChar","diff","isGroupChar","val1","val2","valueSplit","writeValue","onInputFocus","select","onInputBlur","_this$formField$onBlu","_this$formField2","onBlur","clearSelection","clearTimeout","maxBoundry","minBoundry","computed","upButtonListeners","_this2","mousedown","mouseup","mouseleave","keydown","keyup","downButtonListeners","_this3","getFormatter","dataP","cn","_defineProperty","invalid","$invalid","fluid","$fluid","filled","$variant","size","components","InputText","AngleUpIcon","AngleDownIcon","_openBlock","_createElementBlock","_mergeProps","_ctx","cx","ptmi","$options","_createVNode","_component_InputText","ref","id","$formName","role","_normalizeClass","defaultValue","inputmode","variant","onKeydown","onKeypress","onClick","onFocus","pt","ptm","unstyled","_renderSlot","$slots","listeners","_createElementVNode","_toHandlers","tabindex","incrementicon","_createBlock","_resolveDynamicComponent","decrementicon"],"mappings":";;;;;;;;;;AAIA,eAAe;AACXA,EAAAA,IAAI,EAAE,iBAAiB;AACvB,EAAA,SAAA,EAASC,SAAS;AAClBC,EAAAA,KAAK,EAAE;AACHC,IAAAA,MAAM,EAAE;AACJC,MAAAA,IAAI,EAAEC,OAAO;MACb,SAAA,EAAS;KACZ;AACDC,IAAAA,WAAW,EAAE;AACTF,MAAAA,IAAI,EAAEC,OAAO;MACb,SAAA,EAAS;KACZ;AACDE,IAAAA,YAAY,EAAE;AACVH,MAAAA,IAAI,EAAEI,MAAM;MACZ,SAAA,EAAS;KACZ;AACDC,IAAAA,oBAAoB,EAAE;AAClBL,MAAAA,IAAI,EAAEI,MAAM;MACZ,SAAA,EAAS;KACZ;AACDE,IAAAA,oBAAoB,EAAE;AAClBN,MAAAA,IAAI,EAAEI,MAAM;MACZ,SAAA,EAAS;KACZ;AACDG,IAAAA,mBAAmB,EAAE;AACjBP,MAAAA,IAAI,EAAEI,MAAM;MACZ,SAAA,EAASI;KACZ;AACDC,IAAAA,aAAa,EAAE;AACXT,MAAAA,IAAI,EAAEI,MAAM;MACZ,SAAA,EAASI;KACZ;AACDE,IAAAA,mBAAmB,EAAE;AACjBV,MAAAA,IAAI,EAAEI,MAAM;MACZ,SAAA,EAASI;KACZ;AACDG,IAAAA,aAAa,EAAE;AACXX,MAAAA,IAAI,EAAEI,MAAM;MACZ,SAAA,EAASI;KACZ;AACDI,IAAAA,MAAM,EAAE;AACJZ,MAAAA,IAAI,EAAEI,MAAM;MACZ,SAAA,EAASI;KACZ;AACDK,IAAAA,aAAa,EAAE;AACXb,MAAAA,IAAI,EAAEI,MAAM;MACZ,SAAA,EAASI;KACZ;AACDM,IAAAA,IAAI,EAAE;AACFd,MAAAA,IAAI,EAAEI,MAAM;MACZ,SAAA,EAAS;KACZ;AACDW,IAAAA,MAAM,EAAE;AACJf,MAAAA,IAAI,EAAEI,MAAM;MACZ,SAAA,EAAS;KACZ;AACDY,IAAAA,MAAM,EAAE;AACJhB,MAAAA,IAAI,EAAEI,MAAM;MACZ,SAAA,EAAS;KACZ;AACDa,IAAAA,QAAQ,EAAE;AACNjB,MAAAA,IAAI,EAAEI,MAAM;MACZ,SAAA,EAASI;KACZ;AACDU,IAAAA,eAAe,EAAE;AACblB,MAAAA,IAAI,EAAEI,MAAM;MACZ,SAAA,EAASI;KACZ;AACDW,IAAAA,WAAW,EAAE;AACTnB,MAAAA,IAAI,EAAEC,OAAO;MACb,SAAA,EAAS;KACZ;AACDmB,IAAAA,iBAAiB,EAAE;AACfpB,MAAAA,IAAI,EAAEqB,MAAM;MACZ,SAAA,EAASb;KACZ;AACDc,IAAAA,iBAAiB,EAAE;AACftB,MAAAA,IAAI,EAAEqB,MAAM;MACZ,SAAA,EAASb;KACZ;AACDe,IAAAA,YAAY,EAAE;AACVvB,MAAAA,IAAI,EAAEI,MAAM;AACZ,MAAA,SAAA,EAAS,YAAY;AACrBoB,MAAAA,SAAS,EAAA,SAATA,SAASA,CAACC,KAAK,EAAE;QACb,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,CAAC,CAACC,QAAQ,CAACD,KAAK,CAAC;AAC/H;KACH;AACDE,IAAAA,GAAG,EAAE;AACD3B,MAAAA,IAAI,EAAEqB,MAAM;MACZ,SAAA,EAAS;KACZ;AACDO,IAAAA,GAAG,EAAE;AACD5B,MAAAA,IAAI,EAAEqB,MAAM;MACZ,SAAA,EAAS;KACZ;AACDQ,IAAAA,IAAI,EAAE;AACF7B,MAAAA,IAAI,EAAEqB,MAAM;MACZ,SAAA,EAAS;KACZ;AACDS,IAAAA,UAAU,EAAE;AACR9B,MAAAA,IAAI,EAAEC,OAAO;MACb,SAAA,EAAS;KACZ;AACD8B,IAAAA,gBAAgB,EAAE;AACd/B,MAAAA,IAAI,EAAEC,OAAO;MACb,SAAA,EAAS;KACZ;AACD+B,IAAAA,QAAQ,EAAE;AACNhC,MAAAA,IAAI,EAAEC,OAAO;MACb,SAAA,EAAS;KACZ;AACDgC,IAAAA,WAAW,EAAE;AACTjC,MAAAA,IAAI,EAAEI,MAAM;MACZ,SAAA,EAAS;KACZ;AACD8B,IAAAA,OAAO,EAAE;AACLlC,MAAAA,IAAI,EAAEI,MAAM;MACZ,SAAA,EAAS;KACZ;AACD+B,IAAAA,UAAU,EAAE;AACRnC,MAAAA,IAAI,EAAE,CAACI,MAAM,EAAEgC,MAAM,CAAC;MACtB,SAAA,EAAS;KACZ;AACDC,IAAAA,UAAU,EAAE;AACRrC,MAAAA,IAAI,EAAEoC,MAAM;MACZ,SAAA,EAAS;KACZ;AACDE,IAAAA,cAAc,EAAE;AACZtC,MAAAA,IAAI,EAAEI,MAAM;MACZ,SAAA,EAAS;KACZ;AACDmC,IAAAA,SAAS,EAAE;AACPvC,MAAAA,IAAI,EAAEI,MAAM;MACZ,SAAA,EAAS;KACZ;AACDoC,IAAAA,QAAQ,EAAE;AACNxC,MAAAA,IAAI,EAAEC,OAAO;MACb,SAAA,EAAS;AACb;GACH;AACDwC,EAAAA,KAAK,EAAEC,gBAAgB;EACvBC,OAAO,EAAA,SAAPA,OAAOA,GAAG;IACN,OAAO;AACHC,MAAAA,cAAc,EAAE,IAAI;AACpBC,MAAAA,eAAe,EAAE;KACpB;AACL;AACJ,CAAC;;;;;;;;;;;;;;ACtDD,aAAe;AACXjD,EAAAA,IAAI,EAAE,aAAa;AACnB,EAAA,SAAA,EAASkD,QAAe;AACxBC,EAAAA,YAAY,EAAE,KAAK;AACnBC,EAAAA,KAAK,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC;AACjCC,EAAAA,MAAM,EAAE;AACJC,IAAAA,QAAQ,EAAE;MAAE,SAAA,EAAS;AAAK;GAC7B;AACDC,EAAAA,YAAY,EAAE,IAAI;AAClBC,EAAAA,QAAQ,EAAE,IAAI;AACdC,EAAAA,QAAQ,EAAE,IAAI;AACdC,EAAAA,MAAM,EAAE,IAAI;AACZC,EAAAA,UAAU,EAAE,IAAI;AAChBC,EAAAA,SAAS,EAAE,IAAI;AACfC,EAAAA,OAAO,EAAE,IAAI;AACbC,EAAAA,OAAO,EAAE,IAAI;AACbC,EAAAA,MAAM,EAAE,IAAI;AACZC,EAAAA,SAAS,EAAE,EAAE;AACbC,EAAAA,aAAa,EAAE,IAAI;AACnBC,EAAAA,UAAU,EAAE,IAAI;AAChBC,EAAAA,UAAU,EAAE,IAAI;AAChBC,EAAAA,KAAK,EAAE,IAAI;EACXC,IAAI,EAAA,SAAJA,IAAIA,GAAG;IACH,OAAO;AACH;MACAC,YAAY,EAAE,IAAI,CAACC,OAAO;AAC1BC,MAAAA,OAAO,EAAE;KACZ;GACJ;AACDC,EAAAA,KAAK,EAAE;AACHF,IAAAA,OAAO,EAAA,SAAPA,OAAOA,CAACG,QAAQ,EAAE;AACd;MACA,IAAI,CAACJ,YAAW,GAAII,QAAQ;KAC/B;AACD1D,IAAAA,MAAM,WAANA,MAAMA,CAAC0D,QAAQ,EAAEC,QAAQ,EAAE;AACvB,MAAA,IAAI,CAACC,qBAAqB,CAACF,QAAQ,EAAEC,QAAQ,CAAC;KACjD;AACD1D,IAAAA,aAAa,WAAbA,aAAaA,CAACyD,QAAQ,EAAEC,QAAQ,EAAE;AAC9B,MAAA,IAAI,CAACC,qBAAqB,CAACF,QAAQ,EAAEC,QAAQ,CAAC;KACjD;AACDzD,IAAAA,IAAI,WAAJA,IAAIA,CAACwD,QAAQ,EAAEC,QAAQ,EAAE;AACrB,MAAA,IAAI,CAACC,qBAAqB,CAACF,QAAQ,EAAEC,QAAQ,CAAC;KACjD;AACDtD,IAAAA,QAAQ,WAARA,QAAQA,CAACqD,QAAQ,EAAEC,QAAQ,EAAE;AACzB,MAAA,IAAI,CAACC,qBAAqB,CAACF,QAAQ,EAAEC,QAAQ,CAAC;KACjD;AACDrD,IAAAA,eAAe,WAAfA,eAAeA,CAACoD,QAAQ,EAAEC,QAAQ,EAAE;AAChC,MAAA,IAAI,CAACC,qBAAqB,CAACF,QAAQ,EAAEC,QAAQ,CAAC;KACjD;AACDpD,IAAAA,WAAW,WAAXA,WAAWA,CAACmD,QAAQ,EAAEC,QAAQ,EAAE;AAC5B,MAAA,IAAI,CAACC,qBAAqB,CAACF,QAAQ,EAAEC,QAAQ,CAAC;KACjD;AACDnD,IAAAA,iBAAiB,WAAjBA,iBAAiBA,CAACkD,QAAQ,EAAEC,QAAQ,EAAE;AAClC,MAAA,IAAI,CAACC,qBAAqB,CAACF,QAAQ,EAAEC,QAAQ,CAAC;KACjD;AACDjD,IAAAA,iBAAiB,WAAjBA,iBAAiBA,CAACgD,QAAQ,EAAEC,QAAQ,EAAE;AAClC,MAAA,IAAI,CAACC,qBAAqB,CAACF,QAAQ,EAAEC,QAAQ,CAAC;KACjD;AACDvD,IAAAA,MAAM,WAANA,MAAMA,CAACsD,QAAQ,EAAEC,QAAQ,EAAE;AACvB,MAAA,IAAI,CAACC,qBAAqB,CAACF,QAAQ,EAAEC,QAAQ,CAAC;KACjD;AACDxD,IAAAA,MAAM,WAANA,MAAMA,CAACuD,QAAQ,EAAEC,QAAQ,EAAE;AACvB,MAAA,IAAI,CAACC,qBAAqB,CAACF,QAAQ,EAAEC,QAAQ,CAAC;AAClD;GACH;EACDE,OAAO,EAAA,SAAPA,OAAOA,GAAG;IACN,IAAI,CAACC,eAAe,EAAE;GACzB;AACDC,EAAAA,OAAO,EAAE;IACLC,UAAU,EAAA,SAAVA,UAAUA,GAAG;MACT,OAAO;QACH/D,aAAa,EAAE,IAAI,CAACA,aAAa;QACjC4B,KAAK,EAAE,IAAI,CAAC3B,IAAI;QAChBG,QAAQ,EAAE,IAAI,CAACA,QAAQ;QACvBC,eAAe,EAAE,IAAI,CAACA,eAAe;QACrCC,WAAW,EAAE,IAAI,CAACA,WAAW;QAC7B0D,qBAAqB,EAAE,IAAI,CAACzD,iBAAiB;QAC7C0D,qBAAqB,EAAE,IAAI,CAACxD,iBAAiB;QAC7CC,YAAY,EAAE,IAAI,CAACA;OACtB;KACJ;IACDmD,eAAe,EAAA,SAAfA,eAAeA,GAAG;AACd,MAAA,IAAI,CAACvB,YAAW,GAAI,IAAI4B,IAAI,CAACC,YAAY,CAAC,IAAI,CAACpE,MAAM,EAAE,IAAI,CAACgE,UAAU,EAAE,CAAC;AACzE,MAAA,IAAMK,QAAO,GAAIC,kBAAA,CAAI,IAAIH,IAAI,CAACC,YAAY,CAAC,IAAI,CAACpE,MAAM,EAAE;AAAEO,QAAAA,WAAW,EAAE;OAAO,CAAC,CAACpB,MAAM,CAAC,UAAU,CAAC,CAAA,CAAEoF,OAAO,EAAE;AAC7G,MAAA,IAAMC,KAAI,GAAI,IAAIC,GAAG,CAACJ,QAAQ,CAACK,GAAG,CAAC,UAACC,CAAC,EAAEC,CAAC,EAAA;AAAA,QAAA,OAAK,CAACD,CAAC,EAAEC,CAAC,CAAC;AAAA,OAAA,CAAC,CAAC;AAErD,MAAA,IAAI,CAACpC,WAAW,IAAIqC,MAAM,KAAAC,MAAA,CAAKT,QAAQ,CAACU,IAAI,CAAC,EAAE,CAAC,EAAA,GAAA,CAAA,EAAK,GAAG,CAAC;AACzD,MAAA,IAAI,CAACrC,MAAK,GAAI,IAAI,CAACsC,qBAAqB,EAAE;AAC1C,MAAA,IAAI,CAACrC,UAAS,GAAI,IAAI,CAACsC,sBAAsB,EAAE;AAC/C,MAAA,IAAI,CAACrC,SAAQ,GAAI,IAAI,CAACsC,qBAAqB,EAAE;AAC7C,MAAA,IAAI,CAACzC,QAAO,GAAI,IAAI,CAAC0C,oBAAoB,EAAE;AAC3C,MAAA,IAAI,CAACtC,UAAU,IAAI,CAACuC,mBAAmB,EAAE;AACzC,MAAA,IAAI,CAACtC,UAAU,IAAI,CAACuC,mBAAmB,EAAE;AACzC,MAAA,IAAI,CAACtC,MAAK,GAAI,UAAC4B,CAAC,EAAA;AAAA,QAAA,OAAKH,KAAK,CAACc,GAAG,CAACX,CAAC,CAAC;AAAA,OAAA;KACpC;AACDf,IAAAA,qBAAqB,WAArBA,qBAAqBA,CAACF,QAAQ,EAAEC,QAAQ,EAAE;MACtC,IAAID,QAAO,KAAMC,QAAQ,EAAE;QACvB,IAAI,CAACG,eAAe,EAAE;AAC1B;KACH;AACDyB,IAAAA,YAAY,EAAA,SAAZA,YAAYA,CAACC,IAAI,EAAE;AACf,MAAA,OAAOA,IAAI,CAACC,OAAO,CAAC,0BAA0B,EAAE,MAAM,CAAC;KAC1D;IACDN,oBAAoB,EAAA,SAApBA,oBAAoBA,GAAG;AACnB,MAAA,IAAMO,SAAQ,GAAI,IAAIvB,IAAI,CAACC,YAAY,CAAC,IAAI,CAACpE,MAAM,EAAA2F,aAAA,CAAAA,aAAA,CAAA,EAAA,EAAO,IAAI,CAAC3B,UAAU,EAAE,CAAA,EAAA,EAAA,EAAA;AAAEzD,QAAAA,WAAW,EAAE;AAAI,OAAA,CAAG,CAAC;AAElG,MAAA,OAAO,IAAIsE,MAAM,CAAA,GAAA,CAAAC,MAAA,CAAKY,SAAS,CAACvG,MAAM,CAAC,GAAG,CAAC,CAACsG,OAAO,CAAC,IAAI,CAAC7C,SAAS,EAAE,EAAE,CAAC,CAACgD,IAAI,EAAE,CAACH,OAAO,CAAC,IAAI,CAACjD,QAAQ,EAAE,EAAE,CAAC,EAAA,GAAA,CAAA,EAAK,GAAG,CAAC;KACrH;IACDwC,qBAAqB,EAAA,SAArBA,qBAAqBA,GAAG;MACpB,IAAMU,YAAY,IAAIvB,IAAI,CAACC,YAAY,CAAC,IAAI,CAACpE,MAAM,EAAE;AAAEO,QAAAA,WAAW,EAAE;AAAK,OAAC,CAAC;MAE3E,IAAI,CAACyC,SAAQ,GAAI0C,SAAS,CAACvG,MAAM,CAAC,OAAO,CAAC,CAACyG,IAAI,EAAE,CAACH,OAAO,CAAC,IAAI,CAACjD,QAAQ,EAAE,EAAE,CAAC,CAACqD,MAAM,CAAC,CAAC,CAAC;MAEtF,OAAO,IAAIhB,MAAM,CAAA,GAAA,CAAAC,MAAA,CAAK,IAAI,CAAC9B,SAAS,EAAA,GAAA,CAAA,EAAK,GAAG,CAAC;KAChD;IACDiC,sBAAsB,EAAA,SAAtBA,sBAAsBA,GAAG;MACrB,IAAMS,YAAY,IAAIvB,IAAI,CAACC,YAAY,CAAC,IAAI,CAACpE,MAAM,EAAE;AAAEO,QAAAA,WAAW,EAAE;AAAM,OAAC,CAAC;MAE5E,OAAO,IAAIsE,MAAM,CAAA,GAAA,CAAAC,MAAA,CAAKY,SAAS,CAACvG,MAAM,CAAC,EAAE,CAAC,CAACyG,IAAI,EAAE,CAACH,OAAO,CAAC,IAAI,CAACjD,QAAQ,EAAE,EAAE,CAAC,EAAA,GAAA,CAAA,EAAK,GAAG,CAAC;KACxF;IACD0C,qBAAqB,EAAA,SAArBA,qBAAqBA,GAAG;MACpB,IAAI,IAAI,CAAC7E,QAAQ,EAAE;QACf,IAAMqF,SAAQ,GAAI,IAAIvB,IAAI,CAACC,YAAY,CAAC,IAAI,CAACpE,MAAM,EAAE;AAAE6B,UAAAA,KAAK,EAAE,UAAU;UAAExB,QAAQ,EAAE,IAAI,CAACA,QAAQ;UAAEC,eAAe,EAAE,IAAI,CAACA,eAAe;AAAE2D,UAAAA,qBAAqB,EAAE,CAAC;AAAEC,UAAAA,qBAAqB,EAAE,CAAC;UAAEvD,YAAY,EAAE,IAAI,CAACA;AAAa,SAAC,CAAC;AAEhO,QAAA,OAAO,IAAIkE,MAAM,CAAA,GAAA,CAAAC,MAAA,CAAKY,SAAS,CAACvG,MAAM,CAAC,CAAC,CAAC,CAACsG,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAACA,OAAO,CAAC,IAAI,CAACjD,QAAQ,EAAE,EAAE,CAAC,CAACiD,OAAO,CAAC,IAAI,CAAC/C,MAAM,EAAE,EAAE,CAAC,EAAA,GAAA,CAAA,EAAK,GAAG,CAAC;AAC7H;AAEA,MAAA,OAAO,IAAImC,MAAM,CAAA,IAAA,EAAO,GAAG,CAAC;KAC/B;IACDQ,mBAAmB,EAAA,SAAnBA,mBAAmBA,GAAG;MAClB,IAAI,IAAI,CAAClF,MAAM,EAAE;AACb,QAAA,IAAI,CAAC+C,UAAS,GAAI,IAAI,CAAC/C,MAAM;AACjC,OAAA,MAAO;QACH,IAAMuF,SAAQ,GAAI,IAAIvB,IAAI,CAACC,YAAY,CAAC,IAAI,CAACpE,MAAM,EAAE;UAAE6B,KAAK,EAAE,IAAI,CAAC3B,IAAI;UAAEG,QAAQ,EAAE,IAAI,CAACA,QAAQ;UAAEC,eAAe,EAAE,IAAI,CAACA;AAAgB,SAAC,CAAC;AAE1I,QAAA,IAAI,CAAC4C,aAAawC,SAAS,CAACvG,MAAM,CAAC,CAAC,CAAC,CAAC2G,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACvD;AAEA,MAAA,OAAO,IAAIjB,MAAM,CAAA,EAAA,CAAAC,MAAA,CAAI,IAAI,CAACS,YAAY,CAAC,IAAI,CAACrC,UAAS,IAAK,EAAE,CAAC,CAAA,EAAI,GAAG,CAAC;KACxE;IACDkC,mBAAmB,EAAA,SAAnBA,mBAAmBA,GAAG;MAClB,IAAI,IAAI,CAAChF,MAAM,EAAE;AACb,QAAA,IAAI,CAAC+C,UAAS,GAAI,IAAI,CAAC/C,MAAM;AACjC,OAAA,MAAO;QACH,IAAMsF,SAAQ,GAAI,IAAIvB,IAAI,CAACC,YAAY,CAAC,IAAI,CAACpE,MAAM,EAAE;UAAE6B,KAAK,EAAE,IAAI,CAAC3B,IAAI;UAAEG,QAAQ,EAAE,IAAI,CAACA,QAAQ;UAAEC,eAAe,EAAE,IAAI,CAACA,eAAe;AAAE2D,UAAAA,qBAAqB,EAAE,CAAC;AAAEC,UAAAA,qBAAqB,EAAE,CAAC;UAAEvD,YAAY,EAAE,IAAI,CAACA;AAAa,SAAC,CAAC;AAE/N,QAAA,IAAI,CAACwC,aAAauC,SAAS,CAACvG,MAAM,CAAC,CAAC,CAAC,CAAC2G,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACvD;AAEA,MAAA,OAAO,IAAIjB,MAAM,CAAA,EAAA,CAAAC,MAAA,CAAI,IAAI,CAACS,YAAY,CAAC,IAAI,CAACpC,UAAS,IAAK,EAAE,CAAC,CAAA,EAAI,GAAG,CAAC;KACxE;AACD4C,IAAAA,WAAW,EAAA,SAAXA,WAAWA,CAAClF,KAAK,EAAE;MACf,IAAIA,KAAI,IAAK,IAAI,EAAE;QACf,IAAIA,KAAI,KAAM,GAAG,EAAE;AACf;AACA,UAAA,OAAOA,KAAK;AAChB;QAEA,IAAI,IAAI,CAAC1B,MAAM,EAAE;AACb,UAAA,IAAIuG,SAAQ,GAAI,IAAIvB,IAAI,CAACC,YAAY,CAAC,IAAI,CAACpE,MAAM,EAAE,IAAI,CAACgE,UAAU,EAAE,CAAC;AACrE,UAAA,IAAIgC,cAAa,GAAIN,SAAS,CAACvG,MAAM,CAAC0B,KAAK,CAAC;UAE5C,IAAI,IAAI,CAACV,MAAM,EAAE;AACb6F,YAAAA,cAAa,GAAI,IAAI,CAAC7F,SAAS6F,cAAc;AACjD;UAEA,IAAI,IAAI,CAAC5F,MAAM,EAAE;AACb4F,YAAAA,cAAa,GAAIA,iBAAiB,IAAI,CAAC5F,MAAM;AACjD;AAEA,UAAA,OAAO4F,cAAc;AACzB;AAEA,QAAA,OAAOnF,KAAK,CAACoF,QAAQ,EAAE;AAC3B;AAEA,MAAA,OAAO,EAAE;KACZ;AACDC,IAAAA,UAAU,EAAA,SAAVA,UAAUA,CAACV,IAAI,EAAE;AACb,MAAA,IAAIW,eAAeX,IAAG,CACjBC,OAAO,CAAC,IAAI,CAAC5C,OAAO,EAAE,EAAE,CAAA,CACxB4C,OAAO,CAAC,IAAI,CAAC3C,OAAO,EAAE,EAAE,CAAA,CACxB8C,IAAI,EAAC,CACLH,OAAO,CAAC,KAAK,EAAE,EAAE,CAAA,CACjBA,OAAO,CAAC,IAAI,CAAC7C,SAAS,EAAE,EAAE,CAAA,CAC1B6C,OAAO,CAAC,IAAI,CAAC/C,MAAM,EAAE,EAAE,CAAA,CACvB+C,OAAO,CAAC,IAAI,CAAC9C,UAAU,EAAE,GAAG,CAAA,CAC5B8C,OAAO,CAAC,IAAI,CAAChD,QAAQ,EAAE,GAAG,CAAA,CAC1BgD,OAAO,CAAC,IAAI,CAACjD,QAAQ,EAAE,IAAI,CAACO,MAAM,CAAC;AAExC,MAAA,IAAIoD,YAAY,EAAE;QACd,IAAIA,YAAW,KAAM,GAAG;AACpB;AACA,UAAA,OAAOA,YAAY;QAEvB,IAAIC,WAAU,GAAI,CAACD,YAAY;AAE/B,QAAA,OAAOE,KAAK,CAACD,WAAW,CAAA,GAAI,OAAOA,WAAW;AAClD;AAEA,MAAA,OAAO,IAAI;KACd;IACDE,MAAM,EAAA,SAANA,MAAMA,CAACC,KAAK,EAAEC,QAAQ,EAAEC,GAAG,EAAE;AAAA,MAAA,IAAAC,KAAA,GAAA,IAAA;MACzB,IAAI,IAAI,CAACtF,QAAQ,EAAE;AACf,QAAA;AACJ;AAEA,MAAA,IAAIwD,CAAA,GAAI4B,QAAO,IAAK,GAAG;MAEvB,IAAI,CAACG,UAAU,EAAE;AACjB,MAAA,IAAI,CAACvD,KAAI,GAAIwD,UAAU,CAAC,YAAM;QAC1BF,KAAI,CAACJ,MAAM,CAACC,KAAK,EAAE,EAAE,EAAEE,GAAG,CAAC;OAC9B,EAAE7B,CAAC,CAAC;AAEL,MAAA,IAAI,CAACiC,IAAI,CAACN,KAAK,EAAEE,GAAG,CAAC;KACxB;AACDI,IAAAA,IAAI,WAAJA,IAAIA,CAACN,KAAK,EAAEE,GAAG,EAAE;AACb,MAAA,IAAI,IAAI,CAACK,KAAK,CAACC,KAAK,EAAE;AAClB,QAAA,IAAI9F,IAAG,GAAI,IAAI,CAACA,OAAOwF,GAAG;AAC1B,QAAA,IAAIO,YAAW,GAAI,IAAI,CAACd,UAAU,CAAC,IAAI,CAACY,KAAK,CAACC,KAAK,CAACE,GAAG,CAACpG,KAAK,CAAA,IAAK,CAAC;QACnE,IAAI6C,QAAO,GAAI,IAAI,CAACwD,aAAa,CAACF,YAAW,GAAI/F,IAAI,CAAC;QAEtD,IAAI,CAACkG,WAAW,CAACzD,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC;AACxC,QAAA,IAAI,CAAC0D,WAAW,CAACb,KAAK,EAAE7C,QAAQ,CAAC;QAEjC,IAAI,CAAC2D,aAAa,CAACd,KAAK,EAAES,YAAY,EAAEtD,QAAQ,CAAC;AACrD;KACH;AACD4D,IAAAA,mBAAmB,EAAA,SAAnBA,mBAAmBA,CAACf,KAAK,EAAE;AACvB,MAAA,IAAI,CAAC,IAAI,CAACgB,QAAQ,EAAE;QAChB,IAAI,CAACT,KAAK,CAACC,KAAK,CAACE,GAAG,CAACO,KAAK,EAAE;QAC5B,IAAI,CAAClB,MAAM,CAACC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3BA,KAAK,CAACkB,cAAc,EAAE;AAC1B;KACH;IACDC,iBAAiB,EAAA,SAAjBA,iBAAiBA,GAAG;AAChB,MAAA,IAAI,CAAC,IAAI,CAACH,QAAQ,EAAE;QAChB,IAAI,CAACZ,UAAU,EAAE;AACrB;KACH;IACDgB,oBAAoB,EAAA,SAApBA,oBAAoBA,GAAG;AACnB,MAAA,IAAI,CAAC,IAAI,CAACJ,QAAQ,EAAE;QAChB,IAAI,CAACZ,UAAU,EAAE;AACrB;KACH;IACDiB,eAAe,EAAA,SAAfA,eAAeA,GAAG;AACd,MAAA,IAAI,CAAC,IAAI,CAACL,QAAQ,EAAE;QAChB,IAAI,CAACZ,UAAU,EAAE;AACrB;KACH;AACDkB,IAAAA,iBAAiB,EAAA,SAAjBA,iBAAiBA,CAACtB,KAAK,EAAE;AACrB,MAAA,IAAIA,KAAK,CAACuB,IAAG,KAAM,OAAM,IAAKvB,KAAK,CAACuB,SAAS,OAAM,IAAKvB,KAAK,CAACuB,IAAG,KAAM,aAAa,EAAE;QAClF,IAAI,CAACxB,MAAM,CAACC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AAC/B;KACH;AACDwB,IAAAA,qBAAqB,EAAA,SAArBA,qBAAqBA,CAACxB,KAAK,EAAE;AACzB,MAAA,IAAI,CAAC,IAAI,CAACgB,QAAQ,EAAE;QAChB,IAAI,CAACT,KAAK,CAACC,KAAK,CAACE,GAAG,CAACO,KAAK,EAAE;QAC5B,IAAI,CAAClB,MAAM,CAACC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC;QAC5BA,KAAK,CAACkB,cAAc,EAAE;AAC1B;KACH;IACDO,mBAAmB,EAAA,SAAnBA,mBAAmBA,GAAG;AAClB,MAAA,IAAI,CAAC,IAAI,CAACT,QAAQ,EAAE;QAChB,IAAI,CAACZ,UAAU,EAAE;AACrB;KACH;IACDsB,sBAAsB,EAAA,SAAtBA,sBAAsBA,GAAG;AACrB,MAAA,IAAI,CAAC,IAAI,CAACV,QAAQ,EAAE;QAChB,IAAI,CAACZ,UAAU,EAAE;AACrB;KACH;IACDuB,iBAAiB,EAAA,SAAjBA,iBAAiBA,GAAG;AAChB,MAAA,IAAI,CAAC,IAAI,CAACX,QAAQ,EAAE;QAChB,IAAI,CAACZ,UAAU,EAAE;AACrB;KACH;AACDwB,IAAAA,mBAAmB,EAAA,SAAnBA,mBAAmBA,CAAC5B,KAAK,EAAE;AACvB,MAAA,IAAIA,KAAK,CAACuB,IAAG,KAAM,OAAM,IAAKvB,KAAK,CAACuB,SAAS,OAAM,IAAKvB,KAAK,CAACuB,IAAG,KAAM,aAAa,EAAE;QAClF,IAAI,CAACxB,MAAM,CAACC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC;AAChC;KACH;IACD6B,WAAW,EAAA,SAAXA,WAAWA,GAAG;MACV,IAAI,IAAI,CAACnF,aAAa,EAAE;QACpB,IAAI,CAAC6D,KAAK,CAACC,KAAK,CAACE,GAAG,CAACpG,QAAQ,IAAI,CAACwH,SAAS;AAC/C;MAEA,IAAI,CAACpF,aAAY,GAAI,KAAK;KAC7B;AACDqF,IAAAA,cAAc,EAAA,SAAdA,cAAcA,CAAC/B,KAAK,EAAE;MAClB,IAAI,IAAI,CAACnF,QAAQ,EAAE;AACf,QAAA;AACJ;MAEA,IAAImF,KAAK,CAACgC,UAAUhC,KAAK,CAACiC,WAAWjC,KAAK,CAACkC,OAAO,EAAE;QAChD,IAAI,CAACxF,gBAAgB,IAAI;QACzB,IAAI,CAACoF,SAAQ,GAAI,IAAI,CAACvB,KAAK,CAACC,KAAK,CAACE,GAAG,CAACpG,KAAK;AAE3C,QAAA;AACJ;AAEA,MAAA,IAAI,CAACwH,YAAY9B,KAAK,CAACmC,MAAM,CAAC7H,KAAK;AAEnC,MAAA,IAAI8H,iBAAiBpC,KAAK,CAACmC,MAAM,CAACC,cAAc;AAChD,MAAA,IAAIC,eAAerC,KAAK,CAACmC,MAAM,CAACE,YAAY;AAC5C,MAAA,IAAIC,iBAAiBD,YAAW,GAAID,cAAc;AAClD,MAAA,IAAIG,UAAS,GAAIvC,KAAK,CAACmC,MAAM,CAAC7H,KAAK;MACnC,IAAIkI,WAAU,GAAI,IAAI;MACtB,IAAMjB,IAAG,GAAIvB,KAAK,CAACuB,IAAG,IAAKvB,KAAK,CAACyC,GAAG;AAEpC,MAAA,QAAQlB,IAAI;AACR,QAAA,KAAK,SAAS;AACV,UAAA,IAAI,CAACjB,IAAI,CAACN,KAAK,EAAE,CAAC,CAAC;UACnBA,KAAK,CAACkB,cAAc,EAAE;AACtB,UAAA;AAEJ,QAAA,KAAK,WAAW;AACZ,UAAA,IAAI,CAACZ,IAAI,CAACN,KAAK,EAAE,EAAE,CAAC;UACpBA,KAAK,CAACkB,cAAc,EAAE;AACtB,UAAA;AAEJ,QAAA,KAAK,WAAW;UACZ,IAAIoB,cAAa,GAAI,CAAC,EAAE;YACpB,IAAMI,cAAa,GAAI,IAAI,CAACC,aAAa,CAACJ,UAAU,CAACjD,MAAM,CAAC8C,cAAc,CAAC,CAAA,GAAIA,iBAAiB,CAAA,GAAIA,cAAa,GAAI,CAAC;AAEtH,YAAA,IAAI,CAAC7B,KAAK,CAACC,KAAK,CAACE,GAAG,CAACkC,iBAAiB,CAACF,cAAc,EAAEA,cAAc,CAAC;AAC1E,WAAA,MAAO,IAAI,CAAC,IAAI,CAACC,aAAa,CAACJ,UAAU,CAACjD,MAAM,CAAC8C,cAAa,GAAI,CAAC,CAAC,CAAC,EAAE;YACnEpC,KAAK,CAACkB,cAAc,EAAE;AAC1B;AAEA,UAAA;AAEJ,QAAA,KAAK,YAAY;UACb,IAAIoB,cAAa,GAAI,CAAC,EAAE;AACpB,YAAA,IAAMI,eAAa,GAAIL,YAAW,GAAI,CAAC;AAEvC,YAAA,IAAI,CAAC9B,KAAK,CAACC,KAAK,CAACE,GAAG,CAACkC,iBAAiB,CAACF,eAAc,EAAEA,eAAc,CAAC;AAC1E,WAAA,MAAO,IAAI,CAAC,IAAI,CAACC,aAAa,CAACJ,UAAU,CAACjD,MAAM,CAAC8C,cAAc,CAAC,CAAC,EAAE;YAC/DpC,KAAK,CAACkB,cAAc,EAAE;AAC1B;AAEA,UAAA;AAEJ,QAAA,KAAK,KAAK;AACV,QAAA,KAAK,OAAO;AACZ,QAAA,KAAK,aAAa;UACdsB,WAAU,GAAI,IAAI,CAAC7B,aAAa,CAAC,IAAI,CAAChB,UAAU,CAAC4C,UAAU,CAAC,CAAC;AAC7D,UAAA,IAAI,CAAChC,KAAK,CAACC,KAAK,CAACE,GAAG,CAACpG,KAAI,GAAI,IAAI,CAACkF,WAAW,CAACgD,WAAW,CAAC;AAC1D,UAAA,IAAI,CAACjC,KAAK,CAACC,KAAK,CAACE,GAAG,CAACmC,YAAY,CAAC,eAAe,EAAEL,WAAW,CAAC;AAC/D,UAAA,IAAI,CAAC3B,WAAW,CAACb,KAAK,EAAEwC,WAAW,CAAC;AACpC,UAAA;AAEJ,QAAA,KAAK,WAAW;AAAE,UAAA;YACdxC,KAAK,CAACkB,cAAc,EAAE;YAEtB,IAAIkB,cAAa,KAAMC,YAAY,EAAE;cACjC,IAAID,cAAa,IAAKG,UAAU,CAACO,MAAK,IAAK,IAAI,CAAClG,UAAS,KAAM,IAAI,EAAE;gBACjEwF,iBAAiBG,UAAU,CAACO,MAAK,GAAI,IAAI,CAAClG,UAAU,CAACkG,MAAM;AAC3D,gBAAA,IAAI,CAACvC,KAAK,CAACC,KAAK,CAACE,GAAG,CAACkC,iBAAiB,CAACR,cAAc,EAAEA,cAAc,CAAC;AAC1E;cAEA,IAAMW,UAAS,GAAIR,UAAU,CAACjD,MAAM,CAAC8C,cAAa,GAAI,CAAC,CAAC;AACxD,cAAA,IAAAY,qBAAA,GAA4D,IAAI,CAACC,qBAAqB,CAACV,UAAU,CAAC;gBAA1FW,gBAAgB,GAAAF,qBAAA,CAAhBE,gBAAgB;gBAAEC,sDAAAA;AAE1B,cAAA,IAAI,IAAI,CAACR,aAAa,CAACI,UAAU,CAAC,EAAE;AAChC,gBAAA,IAAMK,aAAY,GAAI,IAAI,CAACC,gBAAgB,CAACd,UAAU,CAAC;gBAEvD,IAAI,IAAI,CAACpG,MAAM,CAACmH,IAAI,CAACP,UAAU,CAAC,EAAE;AAC9B,kBAAA,IAAI,CAAC5G,MAAM,CAACoH,SAAQ,GAAI,CAAC;AACzBf,kBAAAA,WAAU,GAAID,UAAU,CAACiB,KAAK,CAAC,CAAC,EAAEpB,cAAa,GAAI,CAAC,CAAA,GAAIG,UAAU,CAACiB,KAAK,CAACpB,cAAa,GAAI,CAAC,CAAC;iBAChG,MAAO,IAAI,IAAI,CAAClG,QAAQ,CAACoH,IAAI,CAACP,UAAU,CAAC,EAAE;AACvC,kBAAA,IAAI,CAAC7G,QAAQ,CAACqH,SAAQ,GAAI,CAAC;AAE3B,kBAAA,IAAIH,aAAa,EAAE;AACf,oBAAA,IAAI,CAAC7C,KAAK,CAACC,KAAK,CAACE,GAAG,CAACkC,iBAAiB,CAACR,iBAAiB,CAAC,EAAEA,cAAa,GAAI,CAAC,CAAC;AAClF,mBAAA,MAAO;AACHI,oBAAAA,WAAU,GAAID,UAAU,CAACiB,KAAK,CAAC,CAAC,EAAEpB,cAAa,GAAI,CAAC,IAAIG,UAAU,CAACiB,KAAK,CAACpB,cAAc,CAAC;AAC5F;iBACJ,MAAO,IAAIc,gBAAe,GAAI,CAAA,IAAKd,cAAa,GAAIc,gBAAgB,EAAE;AAClE,kBAAA,IAAMO,YAAW,GAAI,IAAI,CAACC,aAAa,EAAC,IAAK,CAAC,IAAI,CAACzJ,iBAAgB,IAAK,CAAC,IAAImJ,gBAAgB,KAAK,GAAG;AAErGZ,kBAAAA,WAAU,GAAID,UAAU,CAACiB,KAAK,CAAC,CAAC,EAAEpB,iBAAiB,CAAC,IAAIqB,YAAW,GAAIlB,UAAU,CAACiB,KAAK,CAACpB,cAAc,CAAC;AAC3G,iBAAA,MAAO,IAAIe,6BAA4B,KAAM,CAAC,EAAE;AAC5CX,kBAAAA,WAAU,GAAID,UAAU,CAACiB,KAAK,CAAC,CAAC,EAAEpB,iBAAiB,CAAC,IAAI,GAAE,GAAIG,UAAU,CAACiB,KAAK,CAACpB,cAAc,CAAC;AAC9FI,kBAAAA,WAAU,GAAI,IAAI,CAAC7C,UAAU,CAAC6C,WAAW,CAAA,GAAI,CAAA,GAAIA,WAAU,GAAI,EAAE;AACrE,iBAAA,MAAO;AACHA,kBAAAA,WAAU,GAAID,UAAU,CAACiB,KAAK,CAAC,CAAC,EAAEpB,cAAa,GAAI,CAAC,IAAIG,UAAU,CAACiB,KAAK,CAACpB,cAAc,CAAC;AAC5F;AACJ;cAEA,IAAI,CAACuB,WAAW,CAAC3D,KAAK,EAAEwC,WAAW,EAAE,IAAI,EAAE,eAAe,CAAC;AAC/D,aAAA,MAAO;cACHA,WAAU,GAAI,IAAI,CAACoB,WAAW,CAACrB,UAAU,EAAEH,cAAc,EAAEC,YAAY,CAAC;cACxE,IAAI,CAACsB,WAAW,CAAC3D,KAAK,EAAEwC,WAAW,EAAE,IAAI,EAAE,cAAc,CAAC;AAC9D;AAEA,YAAA;AACJ;AAEA,QAAA,KAAK,QAAQ;UACTxC,KAAK,CAACkB,cAAc,EAAE;UAEtB,IAAIkB,cAAa,KAAMC,YAAY,EAAE;AACjC,YAAA,IAAMU,cAAaR,UAAU,CAACjD,MAAM,CAAC8C,cAAc,CAAC;AACpD,YAAA,IAAAyB,sBAAA,GAA4D,IAAI,CAACZ,qBAAqB,CAACV,UAAU,CAAC;cAA1FW,iBAAgB,GAAAW,sBAAA,CAAhBX,gBAAgB;cAAEC,wDAAAA;AAE1B,YAAA,IAAI,IAAI,CAACR,aAAa,CAACI,WAAU,CAAC,EAAE;AAChC,cAAA,IAAMK,cAAY,GAAI,IAAI,CAACC,gBAAgB,CAACd,UAAU,CAAC;cAEvD,IAAI,IAAI,CAACpG,MAAM,CAACmH,IAAI,CAACP,WAAU,CAAC,EAAE;AAC9B,gBAAA,IAAI,CAAC5G,MAAM,CAACoH,SAAQ,GAAI,CAAC;AACzBf,gBAAAA,WAAU,GAAID,UAAU,CAACiB,KAAK,CAAC,CAAC,EAAEpB,cAAc,CAAA,GAAIG,UAAU,CAACiB,KAAK,CAACpB,cAAa,GAAI,CAAC,CAAC;eAC5F,MAAO,IAAI,IAAI,CAAClG,QAAQ,CAACoH,IAAI,CAACP,WAAU,CAAC,EAAE;AACvC,gBAAA,IAAI,CAAC7G,QAAQ,CAACqH,SAAQ,GAAI,CAAC;AAE3B,gBAAA,IAAIH,cAAa,EAAE;AACf,kBAAA,IAAI,CAAC7C,KAAK,CAACC,KAAK,CAACE,GAAG,CAACkC,iBAAiB,CAACR,iBAAiB,CAAC,EAAEA,cAAa,GAAI,CAAC,CAAC;AAClF,iBAAA,MAAO;AACHI,kBAAAA,WAAU,GAAID,UAAU,CAACiB,KAAK,CAAC,CAAC,EAAEpB,cAAc,CAAA,GAAIG,UAAU,CAACiB,KAAK,CAACpB,cAAa,GAAI,CAAC,CAAC;AAC5F;eACJ,MAAO,IAAIc,iBAAe,GAAI,CAAA,IAAKd,cAAa,GAAIc,iBAAgB,EAAE;AAClE,gBAAA,IAAMO,aAAW,GAAI,IAAI,CAACC,aAAa,EAAC,IAAK,CAAC,IAAI,CAACzJ,iBAAgB,IAAK,CAAC,IAAImJ,iBAAgB,KAAK,GAAG;AAErGZ,gBAAAA,WAAU,GAAID,UAAU,CAACiB,KAAK,CAAC,CAAC,EAAEpB,cAAc,CAAA,GAAIqB,aAAW,GAAIlB,UAAU,CAACiB,KAAK,CAACpB,cAAa,GAAI,CAAC,CAAC;AAC3G,eAAA,MAAO,IAAIe,8BAA4B,KAAM,CAAC,EAAE;AAC5CX,gBAAAA,WAAU,GAAID,UAAU,CAACiB,KAAK,CAAC,CAAC,EAAEpB,cAAc,CAAA,GAAI,GAAE,GAAIG,UAAU,CAACiB,KAAK,CAACpB,cAAa,GAAI,CAAC,CAAC;AAC9FI,gBAAAA,WAAU,GAAI,IAAI,CAAC7C,UAAU,CAAC6C,WAAW,CAAA,GAAI,CAAA,GAAIA,WAAU,GAAI,EAAE;AACrE,eAAA,MAAO;AACHA,gBAAAA,WAAU,GAAID,UAAU,CAACiB,KAAK,CAAC,CAAC,EAAEpB,cAAc,CAAA,GAAIG,UAAU,CAACiB,KAAK,CAACpB,cAAa,GAAI,CAAC,CAAC;AAC5F;AACJ;YAEA,IAAI,CAACuB,WAAW,CAAC3D,KAAK,EAAEwC,WAAW,EAAE,IAAI,EAAE,oBAAoB,CAAC;AACpE,WAAA,MAAO;YACHA,WAAU,GAAI,IAAI,CAACoB,WAAW,CAACrB,UAAU,EAAEH,cAAc,EAAEC,YAAY,CAAC;YACxE,IAAI,CAACsB,WAAW,CAAC3D,KAAK,EAAEwC,WAAW,EAAE,IAAI,EAAE,cAAc,CAAC;AAC9D;AAEA,UAAA;AAEJ,QAAA,KAAK,MAAM;UACPxC,KAAK,CAACkB,cAAc,EAAE;AAEtB,UAAA,IAAI4C,UAAU,CAAC,IAAI,CAACtJ,GAAG,CAAC,EAAE;YACtB,IAAI,CAACqG,WAAW,CAACb,KAAK,EAAE,IAAI,CAACxF,GAAG,CAAC;AACrC;AAEA,UAAA;AAEJ,QAAA,KAAK,KAAK;UACNwF,KAAK,CAACkB,cAAc,EAAE;AAEtB,UAAA,IAAI4C,UAAU,CAAC,IAAI,CAACrJ,GAAG,CAAC,EAAE;YACtB,IAAI,CAACoG,WAAW,CAACb,KAAK,EAAE,IAAI,CAACvF,GAAG,CAAC;AACrC;AAEA,UAAA;AAIR;KACH;AACDsJ,IAAAA,eAAe,EAAA,SAAfA,eAAeA,CAAC/D,KAAK,EAAE;MACnB,IAAI,IAAI,CAACnF,QAAQ,EAAE;AACf,QAAA;AACJ;AAEA,MAAA,IAAImJ,KAAG,GAAIhE,KAAK,CAACyC,GAAG;AACpB,MAAA,IAAIwB,aAAY,GAAI,IAAI,CAACA,aAAa,CAACD,KAAI,CAAC;AAC5C,MAAA,IAAME,WAAU,GAAI,IAAI,CAACA,WAAW,CAACF,KAAI,CAAC;AAE1C,MAAA,IAAIhE,KAAK,CAACuB,SAAS,OAAO,EAAE;QACxBvB,KAAK,CAACkB,cAAc,EAAE;AAC1B;AAEA,MAAA,IAAKhH,MAAM,CAAC8J,KAAI,CAAA,IAAK,CAAA,IAAK9J,MAAM,CAAC8J,KAAI,CAAA,IAAK,CAAC,IAAKE,WAAU,IAAKD,aAAa,EAAE;AAC1E,QAAA,IAAI,CAACE,MAAM,CAACnE,KAAK,EAAEgE,KAAI,EAAE;AAAEC,UAAAA,aAAa,EAAbA,aAAa;AAAEC,UAAAA,WAAU,EAAVA;AAAY,SAAC,CAAC;AAC5D;KACH;AACDE,IAAAA,OAAO,EAAA,SAAPA,OAAOA,CAACpE,KAAK,EAAE;MACX,IAAI,IAAI,CAACnF,QAAQ,EAAE;AACf,QAAA;AACJ;MAEAmF,KAAK,CAACkB,cAAc,EAAE;AACtB,MAAA,IAAIpE,IAAG,GAAI,CAACkD,KAAK,CAACqE,aAAY,IAAKC,MAAM,CAAC,eAAe,CAAC,EAAEC,OAAO,CAAC,MAAM,CAAC;AAE3E,MAAA,IAAIzH,IAAI,EAAE;AACN,QAAA,IAAI0H,YAAW,GAAI,IAAI,CAAC7E,UAAU,CAAC7C,IAAI,CAAC;QAExC,IAAI0H,gBAAgB,IAAI,EAAE;UACtB,IAAI,CAACL,MAAM,CAACnE,KAAK,EAAEwE,YAAY,CAAC9E,QAAQ,EAAE,CAAC;AAC/C;AACJ;KACH;IACD+E,cAAc,EAAA,SAAdA,cAAcA,GAAG;MACb,OAAO,IAAI,CAACjK,QAAQ,IAAG,IAAK,IAAI,CAACA,GAAE,GAAI,CAAC;KAC3C;AACD0J,IAAAA,WAAW,EAAA,SAAXA,WAAWA,CAACF,MAAI,EAAE;AACd,MAAA,IAAI,IAAI,CAAC5H,UAAU,CAACkH,IAAI,CAACU,MAAI,CAAA,IAAKA,WAAS,GAAG,EAAE;AAC5C,QAAA,IAAI,CAAC5H,UAAU,CAACmH,SAAQ,GAAI,CAAC;AAE7B,QAAA,OAAO,IAAI;AACf;AAEA,MAAA,OAAO,KAAK;KACf;AACDU,IAAAA,aAAa,EAAA,SAAbA,aAAaA,CAACD,MAAI,EAAE;AAAA,MAAA,IAAAU,YAAA;AAChB,MAAA,IAAK,CAAAA,YAAA,GAAA,IAAI,CAACjL,MAAM,MAAA,IAAA,IAAAiL,YAAA,KAAA,MAAA,IAAXA,YAAA,CAAanK,QAAQ,CAAC,IAAI,CAAA,IAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAACA,QAAQ,CAACyJ,MAAI,CAAC,IAAK,IAAI,CAAC9H,QAAQ,CAACoH,IAAI,CAACU,MAAI,CAAC,EAAE;AACxF,QAAA,IAAI,CAAC9H,QAAQ,CAACqH,SAAQ,GAAI,CAAC;AAE3B,QAAA,OAAO,IAAI;AACf;AAEA,MAAA,OAAO,KAAK;KACf;IACDG,aAAa,EAAA,SAAbA,aAAaA,GAAG;AACZ,MAAA,OAAO,IAAI,CAAC/J,IAAG,KAAM,SAAS;KACjC;AACDsJ,IAAAA,qBAAqB,EAAA,SAArBA,qBAAqBA,CAAC0B,GAAG,EAAE;MACvB,IAAIzB,gBAAe,GAAIyB,GAAG,CAACC,MAAM,CAAC,IAAI,CAAC1I,QAAQ,CAAC;AAEhD,MAAA,IAAI,CAACA,QAAQ,CAACqH,SAAQ,GAAI,CAAC;AAE3B,MAAA,IAAMsB,WAAU,GAAIF,GAAG,CAACzF,OAAO,CAAC,IAAI,CAAC3C,OAAO,EAAE,EAAE,CAAC,CAAC8C,IAAI,EAAE,CAACH,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAACA,OAAO,CAAC,IAAI,CAAC7C,SAAS,EAAE,EAAE,CAAC;MACvG,IAAM8G,6BAA4B,GAAI0B,WAAW,CAACD,MAAM,CAAC,IAAI,CAAC1I,QAAQ,CAAC;AAEvE,MAAA,IAAI,CAACA,QAAQ,CAACqH,SAAQ,GAAI,CAAC;MAE3B,OAAO;AAAEL,QAAAA,gBAAgB,EAAhBA,gBAAgB;AAAEC,QAAAA,6BAA4B,EAA5BA;OAA+B;KAC7D;AACD2B,IAAAA,cAAc,EAAA,SAAdA,cAAcA,CAACH,GAAG,EAAE;MAChB,IAAMzB,mBAAmByB,GAAG,CAACC,MAAM,CAAC,IAAI,CAAC1I,QAAQ,CAAC;AAElD,MAAA,IAAI,CAACA,QAAQ,CAACqH,SAAQ,GAAI,CAAC;MAC3B,IAAMwB,cAAa,GAAIJ,GAAG,CAACC,MAAM,CAAC,IAAI,CAACxI,UAAU,CAAC;AAElD,MAAA,IAAI,CAACA,UAAU,CAACmH,SAAQ,GAAI,CAAC;MAC7B,IAAMyB,kBAAkBL,GAAG,CAACC,MAAM,CAAC,IAAI,CAACtI,OAAO,CAAC;AAEhD,MAAA,IAAI,CAACA,OAAO,CAACiH,SAAQ,GAAI,CAAC;MAC1B,IAAM0B,iBAAgB,GAAIN,GAAG,CAACC,MAAM,CAAC,IAAI,CAACvI,SAAS,CAAC;AAEpD,MAAA,IAAI,CAACA,SAAS,CAACkH,SAAQ,GAAI,CAAC;MAE5B,OAAO;AAAEL,QAAAA,gBAAgB,EAAhBA,gBAAgB;AAAE6B,QAAAA,cAAc,EAAdA,cAAc;AAAEC,QAAAA,eAAe,EAAfA,eAAe;AAAEC,QAAAA,mBAAAA;OAAmB;KAClF;AACDd,IAAAA,MAAM,WAANA,MAAMA,CAACnE,KAAK,EAAEf,IAAI,EAAuD;MAAA,IAArDiG,IAAG,GAAAC,SAAA,CAAArC,MAAA,GAAA,CAAA,IAAAqC,SAAA,CAAA,CAAA,CAAA,KAAA9L,SAAA,GAAA8L,SAAA,CAAA,CAAA,CAAA,GAAI;AAAElB,QAAAA,aAAa,EAAE,KAAK;AAAEC,QAAAA,WAAW,EAAE;OAAO;MACnE,IAAMkB,oBAAmB,GAAInG,IAAI,CAAC2F,MAAM,CAAC,IAAI,CAACxI,UAAU,CAAC;AAEzD,MAAA,IAAI,CAACA,UAAU,CAACmH,SAAQ,GAAI,CAAC;MAE7B,IAAI,CAAC,IAAI,CAACkB,cAAc,EAAC,IAAKW,oBAAmB,KAAM,EAAE,EAAE;AACvD,QAAA;AACJ;MAEA,IAAMhD,cAAa,GAAI,IAAI,CAAC7B,KAAK,CAACC,KAAK,CAACE,GAAG,CAAC0B,cAAc;MAC1D,IAAMC,YAAW,GAAI,IAAI,CAAC9B,KAAK,CAACC,KAAK,CAACE,GAAG,CAAC2B,YAAY;AACtD,MAAA,IAAIE,UAAS,GAAI,IAAI,CAAChC,KAAK,CAACC,KAAK,CAACE,GAAG,CAACpG,KAAK,CAAC+E,IAAI,EAAE;AAClD,MAAA,IAAAgG,oBAAA,GAAiF,IAAI,CAACP,cAAc,CAACvC,UAAU,CAAC;QAAxGW,gBAAgB,GAAAmC,oBAAA,CAAhBnC,gBAAgB;QAAE6B,cAAc,GAAAM,oBAAA,CAAdN,cAAc;QAAEC,eAAe,GAAAK,oBAAA,CAAfL,eAAe;QAAEC,iBAAgB,GAAAI,oBAAA,CAAhBJ,iBAAgB;AAC3E,MAAA,IAAIzC,WAAW;MAEf,IAAI0C,IAAI,CAAChB,WAAW,EAAE;AAClB,QAAA,IAAMoB,cAAa,GAAIP,cAAa,KAAM,EAAE;QAE5C,IAAI3C,cAAa,KAAM,CAAA,IAAKA,cAAa,KAAM6C,iBAAgB,GAAI,CAAC,EAAE;AAClEzC,UAAAA,WAAU,GAAID,UAAU;AAExB,UAAA,IAAI+C,cAAa,IAAKjD,YAAW,KAAM,CAAC,EAAE;AACtCG,YAAAA,WAAU,GAAI,IAAI,CAAC+C,UAAU,CAAChD,UAAU,EAAEtD,IAAI,EAAE,CAAC,EAAEoD,YAAY,CAAC;AACpE;UAEA,IAAI,CAACsB,WAAW,CAAC3D,KAAK,EAAEwC,WAAW,EAAEvD,IAAI,EAAE,QAAQ,CAAC;AACxD;AACJ,OAAA,MAAO,IAAIiG,IAAI,CAACjB,aAAa,EAAE;AAC3B,QAAA,IAAIf,gBAAe,GAAI,CAAA,IAAKd,cAAa,KAAMc,gBAAgB,EAAE;UAC7D,IAAI,CAACS,WAAW,CAAC3D,KAAK,EAAEuC,UAAU,EAAEtD,IAAI,EAAE,QAAQ,CAAC;SACvD,MAAO,IAAIiE,mBAAmBd,cAAa,IAAKc,gBAAe,GAAIb,YAAY,EAAE;AAC7EG,UAAAA,WAAU,GAAI,IAAI,CAAC+C,UAAU,CAAChD,UAAU,EAAEtD,IAAI,EAAEmD,cAAc,EAAEC,YAAY,CAAC;UAC7E,IAAI,CAACsB,WAAW,CAAC3D,KAAK,EAAEwC,WAAW,EAAEvD,IAAI,EAAE,QAAQ,CAAC;SACxD,MAAO,IAAIiE,gBAAe,KAAM,EAAC,IAAK,IAAI,CAAC/I,iBAAiB,EAAE;AAC1DqI,UAAAA,WAAU,GAAI,IAAI,CAAC+C,UAAU,CAAChD,UAAU,EAAEtD,IAAI,EAAEmD,cAAc,EAAEC,YAAY,CAAC;UAC7E,IAAI,CAACsB,WAAW,CAAC3D,KAAK,EAAEwC,WAAW,EAAEvD,IAAI,EAAE,QAAQ,CAAC;AACxD;AACJ,OAAA,MAAO;QACH,IAAM9E,oBAAoB,IAAI,CAAC6B,YAAY,CAACwJ,eAAe,EAAE,CAAC7H,qBAAqB;QACnF,IAAM8H,YAAYrD,cAAa,KAAMC,YAAW,GAAI,cAAa,GAAI,QAAQ;AAE7E,QAAA,IAAIa,gBAAe,GAAI,KAAKd,cAAa,GAAIc,gBAAgB,EAAE;AAC3D,UAAA,IAAId,cAAa,GAAInD,IAAI,CAAC6D,MAAK,IAAKI,gBAAe,GAAI,CAAC,CAAA,IAAK/I,iBAAiB,EAAE;AAC5E,YAAA,IAAMuL,YAAYT,iBAAgB,IAAK7C,iBAAiB6C,iBAAgB,GAAI,CAAA,GAAID,eAAc,IAAK5C,cAAa,GAAI4C,kBAAkBzC,UAAU,CAACO,MAAM;AAEvJN,YAAAA,WAAU,GAAID,UAAU,CAACiB,KAAK,CAAC,CAAC,EAAEpB,cAAc,CAAA,GAAInD,IAAG,GAAIsD,UAAU,CAACiB,KAAK,CAACpB,cAAa,GAAInD,IAAI,CAAC6D,MAAM,EAAE4C,SAAS,CAAA,GAAInD,UAAU,CAACiB,KAAK,CAACkC,SAAS,CAAC;YAClJ,IAAI,CAAC/B,WAAW,CAAC3D,KAAK,EAAEwC,WAAW,EAAEvD,IAAI,EAAEwG,SAAS,CAAC;AACzD;AACJ,SAAA,MAAO;AACHjD,UAAAA,WAAU,GAAI,IAAI,CAAC+C,UAAU,CAAChD,UAAU,EAAEtD,IAAI,EAAEmD,cAAc,EAAEC,YAAY,CAAC;UAC7E,IAAI,CAACsB,WAAW,CAAC3D,KAAK,EAAEwC,WAAW,EAAEvD,IAAI,EAAEwG,SAAS,CAAC;AACzD;AACJ;KACH;IACDF,UAAU,EAAA,SAAVA,UAAUA,CAACjL,KAAK,EAAE2E,IAAI,EAAE0G,KAAK,EAAEC,GAAG,EAAE;AAChC,MAAA,IAAIC,SAAQ,GAAI5G,SAAS,GAAE,GAAIA,OAAOA,IAAI,CAACM,KAAK,CAAC,GAAG,CAAC;AAErD,MAAA,IAAIsG,SAAS,CAAC/C,WAAW,CAAC,EAAE;AACxB,QAAA,IAAMI,gBAAe,GAAI5I,KAAK,CAACkJ,KAAK,CAACmC,KAAK,EAAEC,GAAG,CAAC,CAAChB,MAAM,CAAC,IAAI,CAAC1I,QAAQ,CAAC;AAEtE,QAAA,IAAI,CAACA,QAAQ,CAACqH,SAAQ,GAAI,CAAC;AAE3B,QAAA,OAAOL,gBAAe,GAAI,CAAA,GAAI5I,KAAK,CAACkJ,KAAK,CAAC,CAAC,EAAEmC,KAAK,CAAA,GAAI,IAAI,CAACnG,WAAW,CAACP,IAAI,CAAA,GAAI3E,KAAK,CAACkJ,KAAK,CAACoC,GAAG,CAAA,GAAI,IAAI,CAACpG,WAAW,CAACP,IAAI,CAAA,IAAK3E,KAAK;OACrI,MAAO,IAAIsL,GAAE,GAAID,KAAI,KAAMrL,KAAK,CAACwI,MAAM,EAAE;AACrC,QAAA,OAAO,IAAI,CAACtD,WAAW,CAACP,IAAI,CAAC;AACjC,OAAA,MAAO,IAAI0G,KAAI,KAAM,CAAC,EAAE;AACpB,QAAA,OAAO1G,IAAG,GAAI3E,KAAK,CAACkJ,KAAK,CAACoC,GAAG,CAAC;AAClC,OAAA,MAAO,IAAIA,GAAE,KAAMtL,KAAK,CAACwI,MAAM,EAAE;QAC7B,OAAOxI,KAAK,CAACkJ,KAAK,CAAC,CAAC,EAAEmC,KAAK,CAAA,GAAI1G,IAAI;AACvC,OAAA,MAAO;AACH,QAAA,OAAO3E,KAAK,CAACkJ,KAAK,CAAC,CAAC,EAAEmC,KAAK,CAAA,GAAI1G,OAAO3E,KAAK,CAACkJ,KAAK,CAACoC,GAAG,CAAC;AAC1D;KACH;IACDhC,WAAW,EAAA,SAAXA,WAAWA,CAACtJ,KAAK,EAAEqL,KAAK,EAAEC,GAAG,EAAE;AAC3B,MAAA,IAAIpD,WAAW;AAEf,MAAA,IAAIoD,GAAE,GAAID,KAAI,KAAMrL,KAAK,CAACwI,MAAM,EAAEN,WAAU,GAAI,EAAE,CAAA,KAC7C,IAAImD,KAAI,KAAM,CAAC,EAAEnD,WAAU,GAAIlI,KAAK,CAACkJ,KAAK,CAACoC,GAAG,CAAC,CAAA,KAC/C,IAAIA,GAAE,KAAMtL,KAAK,CAACwI,MAAM,EAAEN,WAAU,GAAIlI,KAAK,CAACkJ,KAAK,CAAC,CAAC,EAAEmC,KAAK,CAAC,CAAA,KAC7DnD,WAAU,GAAIlI,KAAK,CAACkJ,KAAK,CAAC,CAAC,EAAEmC,KAAK,CAAA,GAAIrL,KAAK,CAACkJ,KAAK,CAACoC,GAAG,CAAC;AAE3D,MAAA,OAAOpD,WAAW;KACrB;IACDsD,UAAU,EAAA,SAAVA,UAAUA,GAAG;MACT,IAAI1D,cAAa,GAAI,IAAI,CAAC7B,KAAK,CAACC,KAAK,CAACE,GAAG,CAAC0B,cAAc;MACxD,IAAIG,UAAS,GAAI,IAAI,CAAChC,KAAK,CAACC,KAAK,CAACE,GAAG,CAACpG,KAAK;AAC3C,MAAA,IAAIyL,cAAcxD,UAAU,CAACO,MAAM;MACnC,IAAI7E,KAAI,GAAI,IAAI;;AAEhB;MACA,IAAI+H,YAAW,GAAI,CAAC,IAAI,CAACrJ,UAAS,IAAK,EAAE,EAAEmG,MAAM;MAEjDP,UAAS,GAAIA,UAAU,CAACrD,OAAO,CAAC,IAAI,CAAC3C,OAAO,EAAE,EAAE,CAAC;MACjD6F,cAAa,GAAIA,cAAa,GAAI4D,YAAY;AAE9C,MAAA,IAAIhC,SAAOzB,UAAU,CAACjD,MAAM,CAAC8C,cAAc,CAAC;AAE5C,MAAA,IAAI,IAAI,CAACO,aAAa,CAACqB,MAAI,CAAC,EAAE;QAC1B,OAAO5B,cAAa,GAAI4D,YAAY;AACxC;;AAEA;AACA,MAAA,IAAI3H,CAAA,GAAI+D,cAAa,GAAI,CAAC;MAE1B,OAAO/D,CAAA,IAAK,CAAC,EAAE;AACX2F,QAAAA,MAAG,GAAIzB,UAAU,CAACjD,MAAM,CAACjB,CAAC,CAAC;AAE3B,QAAA,IAAI,IAAI,CAACsE,aAAa,CAACqB,MAAI,CAAC,EAAE;UAC1B/F,QAAQI,CAAA,GAAI2H,YAAY;AACxB,UAAA;AACJ,SAAA,MAAO;AACH3H,UAAAA,CAAC,EAAE;AACP;AACJ;MAEA,IAAIJ,KAAI,KAAM,IAAI,EAAE;AAChB,QAAA,IAAI,CAACsC,KAAK,CAACC,KAAK,CAACE,GAAG,CAACkC,iBAAiB,CAAC3E,KAAI,GAAI,CAAC,EAAEA,KAAI,GAAI,CAAC,CAAC;AAChE,OAAA,MAAO;AACHI,QAAAA,CAAA,GAAI+D,cAAc;QAElB,OAAO/D,CAAA,GAAI0H,WAAW,EAAE;AACpB/B,UAAAA,MAAG,GAAIzB,UAAU,CAACjD,MAAM,CAACjB,CAAC,CAAC;AAE3B,UAAA,IAAI,IAAI,CAACsE,aAAa,CAACqB,MAAI,CAAC,EAAE;YAC1B/F,QAAQI,CAAA,GAAI2H,YAAY;AACxB,YAAA;AACJ,WAAA,MAAO;AACH3H,YAAAA,CAAC,EAAE;AACP;AACJ;QAEA,IAAIJ,KAAI,KAAM,IAAI,EAAE;AAChB,UAAA,IAAI,CAACsC,KAAK,CAACC,KAAK,CAACE,GAAG,CAACkC,iBAAiB,CAAC3E,KAAK,EAAEA,KAAK,CAAC;AACxD;AACJ;MAEA,OAAOA,KAAI,IAAK,CAAC;KACpB;IACDgI,YAAY,EAAA,SAAZA,YAAYA,GAAG;MACX,IAAMxF,eAAe,IAAI,CAACF,KAAK,CAACC,KAAK,CAACE,GAAG,CAACpG,KAAK;MAE/C,IAAI,CAAC,IAAI,CAACO,QAAO,IAAK4F,iBAAiByF,YAAY,EAAE,EAAE;QACnD,IAAI,CAACJ,UAAU,EAAE;AACrB;KACH;AACDnD,IAAAA,aAAa,EAAA,SAAbA,aAAaA,CAACqB,MAAI,EAAE;AAChB,MAAA,IAAIA,MAAI,CAAClB,MAAK,KAAM,CAAA,KAAM,IAAI,CAAC7G,QAAQ,CAACqH,IAAI,CAACU,MAAI,CAAA,IAAK,IAAI,CAAC9H,QAAQ,CAACoH,IAAI,CAACU,MAAI,CAAA,IAAK,IAAI,CAAC7H,MAAM,CAACmH,IAAI,CAACU,MAAI,CAAA,IAAK,IAAI,CAAC5H,UAAU,CAACkH,IAAI,CAACU,MAAI,CAAC,CAAC,EAAE;QACrI,IAAI,CAACmC,UAAU,EAAE;AAEjB,QAAA,OAAO,IAAI;AACf;AAEA,MAAA,OAAO,KAAK;KACf;IACDA,UAAU,EAAA,SAAVA,UAAUA,GAAG;AACT,MAAA,IAAI,CAAClK,QAAQ,CAACsH,SAAQ,GAAI,CAAC;AAC3B,MAAA,IAAI,CAACrH,QAAQ,CAACqH,SAAQ,GAAI,CAAC;AAC3B,MAAA,IAAI,CAACpH,MAAM,CAACoH,SAAQ,GAAI,CAAC;AACzB,MAAA,IAAI,CAACnH,UAAU,CAACmH,SAAQ,GAAI,CAAC;KAChC;IACDI,WAAW,EAAA,SAAXA,WAAWA,CAAC3D,KAAK,EAAEoG,QAAQ,EAAEC,gBAAgB,EAAEZ,SAAS,EAAE;MACtD,IAAIhF,YAAW,GAAI,IAAI,CAACF,KAAK,CAACC,KAAK,CAACE,GAAG,CAACpG,KAAK;MAC7C,IAAI6C,QAAO,GAAI,IAAI;MAEnB,IAAIiJ,QAAO,IAAK,IAAI,EAAE;AAClBjJ,QAAAA,QAAO,GAAI,IAAI,CAACwC,UAAU,CAACyG,QAAQ,CAAC;QACpCjJ,QAAO,GAAI,CAACA,YAAY,CAAC,IAAI,CAACxC,aAAa,CAAA,GAAIwC,QAAQ;QACvD,IAAI,CAACyD,WAAW,CAACzD,QAAQ,EAAEkJ,gBAAgB,EAAEZ,SAAS,EAAEW,QAAQ,CAAC;QAEjE,IAAI,CAACtF,aAAa,CAACd,KAAK,EAAES,YAAY,EAAEtD,QAAQ,CAAC;AACrD;KACH;IACD2D,aAAa,EAAA,SAAbA,aAAaA,CAACd,KAAK,EAAES,YAAY,EAAEtD,QAAQ,EAAE;MACzC,IAAI,IAAI,CAACmJ,cAAc,CAAC7F,YAAY,EAAEtD,QAAQ,CAAC,EAAE;QAAA,IAAAoJ,qBAAA,EAAAC,eAAA;AAC7C,QAAA,IAAI,CAACC,KAAK,CAAC,OAAO,EAAE;AAAEC,UAAAA,aAAa,EAAE1G,KAAK;AAAE1F,UAAAA,KAAK,EAAE6C,QAAQ;AAAEsC,UAAAA,cAAc,EAAEgB;AAAa,SAAC,CAAC;AAC5F,QAAA,CAAA8F,qBAAA,GAAA,CAAAC,eAAA,GAAA,IAAI,CAACG,SAAS,EAACC,OAAO,MAAA,IAAA,IAAAL,qBAAA,eAAtBA,qBAAA,CAAAM,IAAA,CAAAL,eAAA,EAAyB;AAAEE,UAAAA,aAAa,EAAE1G,KAAK;AAAE1F,UAAAA,KAAK,EAAE6C;AAAS,SAAC,CAAC;AACvE;KACH;AACDmJ,IAAAA,cAAc,WAAdA,cAAcA,CAAC7F,YAAY,EAAEtD,QAAQ,EAAE;AACnC,MAAA,IAAIA,QAAO,KAAM,QAAQsD,YAAW,KAAM,IAAI,EAAE;AAC5C,QAAA,OAAO,IAAI;AACf;MAEA,IAAItD,QAAO,IAAK,IAAI,EAAE;AAClB,QAAA,IAAI2J,qBAAqB,OAAOrG,YAAW,KAAM,WAAW,IAAI,CAACd,UAAU,CAACc,YAAY,IAAIA,YAAY;QAExG,OAAOtD,QAAO,KAAM2J,kBAAkB;AAC1C;AAEA,MAAA,OAAO,KAAK;KACf;AACDnG,IAAAA,aAAa,EAAA,SAAbA,aAAaA,CAACrG,KAAK,EAAE;AACjB,MAAA,IAAIA,KAAI,KAAM,GAAE,IAAKA,KAAI,IAAK,IAAI,EAAE;AAChC,QAAA,OAAO,IAAI;AACf;MAEA,IAAI,IAAI,CAACE,GAAE,IAAK,IAAG,IAAKF,QAAQ,IAAI,CAACE,GAAG,EAAE;QACtC,OAAO,IAAI,CAACA,GAAG;AACnB;MAEA,IAAI,IAAI,CAACC,GAAE,IAAK,IAAG,IAAKH,QAAQ,IAAI,CAACG,GAAG,EAAE;QACtC,OAAO,IAAI,CAACA,GAAG;AACnB;AAEA,MAAA,OAAOH,KAAK;KACf;IACDsG,WAAW,EAAA,SAAXA,WAAWA,CAACtG,KAAK,EAAE+L,gBAAgB,EAAEZ,SAAS,EAAEW,QAAQ,EAAE;MACtDC,mBAAmBA,gBAAe,IAAK,EAAE;MAEzC,IAAI9D,UAAS,GAAI,IAAI,CAAChC,KAAK,CAACC,KAAK,CAACE,GAAG,CAACpG,KAAK;AAC3C,MAAA,IAAI6C,QAAO,GAAI,IAAI,CAACqC,WAAW,CAAClF,KAAK,CAAC;AACtC,MAAA,IAAIyM,aAAY,GAAIxE,UAAU,CAACO,MAAM;MAErC,IAAI3F,QAAO,KAAMiJ,QAAQ,EAAE;QACvBjJ,WAAW,IAAI,CAAC6J,YAAY,CAAC7J,QAAQ,EAAEiJ,QAAQ,CAAC;AACpD;MAEA,IAAIW,aAAY,KAAM,CAAC,EAAE;QACrB,IAAI,CAACxG,KAAK,CAACC,KAAK,CAACE,GAAG,CAACpG,KAAI,GAAI6C,QAAQ;AACrC,QAAA,IAAI,CAACoD,KAAK,CAACC,KAAK,CAACE,GAAG,CAACkC,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC;AAC5C,QAAA,IAAM3E,KAAI,GAAI,IAAI,CAAC6H,UAAU,EAAE;AAC/B,QAAA,IAAMzD,YAAW,GAAIpE,KAAI,GAAIoI,gBAAgB,CAACvD,MAAM;AAEpD,QAAA,IAAI,CAACvC,KAAK,CAACC,KAAK,CAACE,GAAG,CAACkC,iBAAiB,CAACP,YAAY,EAAEA,YAAY,CAAC;AACtE,OAAA,MAAO;QACH,IAAID,cAAa,GAAI,IAAI,CAAC7B,KAAK,CAACC,KAAK,CAACE,GAAG,CAAC0B,cAAc;QACxD,IAAIC,gBAAe,IAAI,CAAC9B,KAAK,CAACC,KAAK,CAACE,GAAG,CAAC2B,YAAY;QAEpD,IAAI,CAAC9B,KAAK,CAACC,KAAK,CAACE,GAAG,CAACpG,KAAI,GAAI6C,QAAQ;AACrC,QAAA,IAAI8J,SAAQ,GAAI9J,QAAQ,CAAC2F,MAAM;QAE/B,IAAI2C,SAAQ,KAAM,cAAc,EAAE;AAC9B,UAAA,IAAMyB,aAAa,IAAI,CAACvH,UAAU,CAAC,CAAC4C,cAAc,EAAE,EAAEiB,KAAK,CAAC,CAAC,EAAEpB,cAAc,CAAC,CAAC;AAC/E,UAAA,IAAM+E,aAAY,GAAID,UAAS,KAAM,IAAG,GAAIA,UAAU,CAACxH,QAAQ,EAAC,GAAI,EAAE;AACtE,UAAA,IAAM0H,YAAYD,aAAa,CAAC5H,KAAK,CAAC,EAAE,CAAC,CAACf,IAAI,KAAAD,MAAA,CAAK,IAAI,CAAC9B,SAAS,OAAI,CAAC;UACtE,IAAM4K,SAAS,IAAI/I,MAAM,CAAC8I,SAAS,EAAE,GAAG,CAAC;AAEzCC,UAAAA,MAAM,CAAC/D,IAAI,CAACnG,QAAQ,CAAC;AAErB,UAAA,IAAMmK,KAAI,GAAIjB,gBAAgB,CAAC9G,KAAK,CAAC,EAAE,CAAC,CAACf,IAAI,KAAAD,MAAA,CAAK,IAAI,CAAC9B,SAAS,OAAI,CAAC;UACrE,IAAM8K,MAAK,GAAI,IAAIjJ,MAAM,CAACgJ,KAAK,EAAE,GAAG,CAAC;UAErCC,MAAM,CAACjE,IAAI,CAACnG,QAAQ,CAACqG,KAAK,CAAC6D,MAAM,CAAC9D,SAAS,CAAC,CAAC;AAE7ClB,UAAAA,gBAAegF,MAAM,CAAC9D,SAAQ,GAAIgE,MAAM,CAAChE,SAAS;AAClD,UAAA,IAAI,CAAChD,KAAK,CAACC,KAAK,CAACE,GAAG,CAACkC,iBAAiB,CAACP,aAAY,EAAEA,aAAY,CAAC;AACtE,SAAA,MAAO,IAAI4E,SAAQ,KAAMF,aAAa,EAAE;AACpC,UAAA,IAAItB,SAAQ,KAAM,QAAO,IAAKA,SAAQ,KAAM,oBAAoB,EAAE;AAC9D,YAAA,IAAI,CAAClF,KAAK,CAACC,KAAK,CAACE,GAAG,CAACkC,iBAAiB,CAACP,aAAW,GAAI,CAAC,EAAEA,aAAW,GAAI,CAAC,CAAC;AAC9E,WAAA,MAAO,IAAIoD,SAAQ,KAAM,eAAe,EAAE;AACtC,YAAA,IAAI,CAAClF,KAAK,CAACC,KAAK,CAACE,GAAG,CAACkC,iBAAiB,CAACP,aAAW,GAAI,CAAC,EAAEA,aAAW,GAAI,CAAC,CAAC;WAC9E,MAAO,IAAIoD,SAAQ,KAAM,cAAa,IAAKA,SAAQ,KAAM,MAAM,EAAE;AAC7D,YAAA,IAAI,CAAClF,KAAK,CAACC,KAAK,CAACE,GAAG,CAACkC,iBAAiB,CAACP,aAAY,EAAEA,aAAY,CAAC;AACtE;AACJ,SAAA,MAAO,IAAIoD,SAAQ,KAAM,oBAAoB,EAAE;UAC3C,IAAI+B,WAAWjF,UAAU,CAACjD,MAAM,CAAC+C,aAAW,GAAI,CAAC,CAAC;AAClD,UAAA,IAAIoF,QAAO,GAAIlF,UAAU,CAACjD,MAAM,CAAC+C,aAAY,CAAC;AAC9C,UAAA,IAAIqF,IAAG,GAAIX,aAAY,GAAIE,SAAS;UACpC,IAAIU,WAAU,GAAI,IAAI,CAACxL,MAAM,CAACmH,IAAI,CAACmE,QAAQ,CAAC;AAE5C,UAAA,IAAIE,WAAU,IAAKD,SAAS,CAAC,EAAE;AAC3BrF,YAAAA,aAAW,IAAK,CAAC;WACrB,MAAO,IAAI,CAACsF,WAAU,IAAK,IAAI,CAAChF,aAAa,CAAC6E,QAAQ,CAAC,EAAE;AACrDnF,YAAAA,iBAAgB,EAAC,GAAIqF,IAAG,GAAI,CAAC;AACjC;AAEA,UAAA,IAAI,CAACvL,MAAM,CAACoH,SAAQ,GAAI,CAAC;AACzB,UAAA,IAAI,CAAChD,KAAK,CAACC,KAAK,CAACE,GAAG,CAACkC,iBAAiB,CAACP,aAAY,EAAEA,aAAY,CAAC;SACtE,MAAO,IAAIE,eAAe,OAAOkD,SAAQ,KAAM,QAAQ,EAAE;AACrD,UAAA,IAAI,CAAClF,KAAK,CAACC,KAAK,CAACE,GAAG,CAACkC,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC;AAC5C,UAAA,IAAM3E,MAAI,GAAI,IAAI,CAAC6H,UAAU,EAAE;UAC/B,IAAMzD,cAAW,GAAIpE,MAAI,GAAIoI,gBAAgB,CAACvD,MAAK,GAAI,CAAC;AAExD,UAAA,IAAI,CAACvC,KAAK,CAACC,KAAK,CAACE,GAAG,CAACkC,iBAAiB,CAACP,cAAY,EAAEA,cAAY,CAAC;AACtE,SAAA,MAAO;AACHA,UAAAA,aAAW,GAAIA,aAAW,IAAK4E,SAAQ,GAAIF,aAAa,CAAC;AACzD,UAAA,IAAI,CAACxG,KAAK,CAACC,KAAK,CAACE,GAAG,CAACkC,iBAAiB,CAACP,aAAY,EAAEA,aAAY,CAAC;AACtE;AACJ;AAEA,MAAA,IAAI,CAAC9B,KAAK,CAACC,KAAK,CAACE,GAAG,CAACmC,YAAY,CAAC,eAAe,EAAEvI,KAAK,CAAC;KAC5D;AACD0M,IAAAA,YAAY,WAAZA,YAAYA,CAACY,IAAI,EAAEC,IAAI,EAAE;MACrB,IAAID,IAAG,IAAKC,IAAI,EAAE;QACd,IAAI3E,gBAAe,GAAI2E,IAAI,CAACjD,MAAM,CAAC,IAAI,CAAC1I,QAAQ,CAAC;AAEjD,QAAA,IAAI,CAACA,QAAQ,CAACqH,SAAQ,GAAI,CAAC;QAE3B,IAAI,IAAI,CAAC3G,UAAU,EAAE;UACjB,OAAOsG,qBAAqB,KAAK0E,IAAI,CAAC1I,OAAO,CAAC,IAAI,CAACtC,UAAU,EAAE,EAAE,CAAC,CAAC2C,KAAK,CAAC,IAAI,CAACrD,QAAQ,CAAC,CAAC,CAAC,IAAI2L,IAAI,CAAC3I,OAAO,CAAC,IAAI,CAACtC,UAAU,EAAE,EAAE,CAAC,CAAC4G,KAAK,CAACN,gBAAgB,CAAA,GAAI,IAAI,CAACtG,UAAS,GAAIgL,IAAI;AACnL,SAAA,MAAO;UACH,OAAO1E,gBAAe,KAAM,EAAC,GAAI0E,IAAI,CAACrI,KAAK,CAAC,IAAI,CAACrD,QAAQ,CAAC,CAAC,CAAC,CAAA,GAAI2L,IAAI,CAACrE,KAAK,CAACN,gBAAgB,CAAA,GAAI0E,IAAI;AACvG;AACJ;AAEA,MAAA,OAAOA,IAAI;KACd;AACDvE,IAAAA,gBAAgB,EAAA,SAAhBA,gBAAgBA,CAAC/I,KAAK,EAAE;AACpB,MAAA,IAAIA,KAAK,EAAE;QACP,IAAMwN,UAAS,GAAIxN,KAAK,CAACiF,KAAK,CAAC,IAAI,CAACrD,QAAQ,CAAC;AAE7C,QAAA,IAAI4L,UAAU,CAAChF,WAAW,CAAC,EAAE;AACzB,UAAA,OAAOgF,UAAU,CAAC,CAAC,CAAC,CAAC5I,OAAO,CAAC,IAAI,CAAC5C,OAAO,EAAE,EAAE,CAAC,CAAC+C,IAAI,EAAE,CAACH,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAACA,OAAO,CAAC,IAAI,CAAC7C,SAAS,EAAE,EAAE,CAAC,CAACyG,MAAM;AAC/G;AACJ;AAEA,MAAA,OAAO,CAAC;KACX;AACDjC,IAAAA,WAAW,WAAXA,WAAWA,CAACb,KAAK,EAAE1F,KAAK,EAAE;AACtB,MAAA,IAAI,CAACyN,UAAU,CAACzN,KAAK,EAAE0F,KAAK,CAAC;KAChC;AACDgI,IAAAA,YAAY,EAAA,SAAZA,YAAYA,CAAChI,KAAK,EAAE;MAChB,IAAI,CAAC/C,OAAM,GAAI,IAAI;MAEnB,IAAI,CAAC,IAAI,CAAC+D,QAAO,IAAK,CAAC,IAAI,CAACnG,QAAO,IAAK,IAAI,CAAC0F,KAAK,CAACC,KAAK,CAACE,GAAG,CAACpG,KAAI,KAAM4L,YAAY,MAAM,IAAI,CAACtL,gBAAgB,EAAE;AAC5GoF,QAAAA,KAAK,CAACmC,MAAM,CAAC8F,MAAM,EAAE;AACzB;AAEA,MAAA,IAAI,CAACxB,KAAK,CAAC,OAAO,EAAEzG,KAAK,CAAC;KAC7B;AACDkI,IAAAA,WAAW,EAAA,SAAXA,WAAWA,CAAClI,KAAK,EAAE;MAAA,IAAAmI,qBAAA,EAAAC,gBAAA;MACf,IAAI,CAACnL,UAAU,KAAK;AAEpB,MAAA,IAAIuD,QAAQR,KAAK,CAACmC,MAAM;AACxB,MAAA,IAAIhF,QAAO,GAAI,IAAI,CAACwD,aAAa,CAAC,IAAI,CAAChB,UAAU,CAACa,KAAK,CAAClG,KAAK,CAAC,CAAC;AAE/D,MAAA,IAAI,CAACmM,KAAK,CAAC,MAAM,EAAE;AAAEC,QAAAA,aAAa,EAAE1G,KAAK;QAAE1F,KAAK,EAAEkG,KAAK,CAAClG;AAAM,OAAC,CAAC;AAChE,MAAA,CAAA6N,qBAAA,GAAA,CAAAC,gBAAA,OAAI,CAACzB,SAAS,EAAC0B,MAAM,MAAA,IAAA,IAAAF,qBAAA,KAAA,MAAA,IAArBA,qBAAA,CAAAtB,IAAA,CAAAuB,gBAAA,EAAwBpI,KAAK,CAAC;MAE9BQ,KAAK,CAAClG,KAAI,GAAI,IAAI,CAACkF,WAAW,CAACrC,QAAQ,CAAC;AACxCqD,MAAAA,KAAK,CAACqC,YAAY,CAAC,eAAe,EAAE1F,QAAQ,CAAC;AAC7C,MAAA,IAAI,CAAC0D,WAAW,CAACb,KAAK,EAAE7C,QAAQ,CAAC;AAEjC,MAAA,IAAI,CAAC,IAAI,CAAC6D,QAAO,IAAK,CAAC,IAAI,CAACnG,QAAO,IAAK,IAAI,CAACD,gBAAgB,EAAE;AAC3D0N,QAAAA,cAAc,EAAE;AACpB;KACH;IACDlI,UAAU,EAAA,SAAVA,UAAUA,GAAG;MACT,IAAI,IAAI,CAACvD,KAAK,EAAE;AACZ0L,QAAAA,YAAY,CAAC,IAAI,CAAC1L,KAAK,CAAC;AAC5B;KACH;IACD2L,UAAU,EAAA,SAAVA,UAAUA,GAAG;AACT,MAAA,OAAO,IAAI,CAACxL,OAAM,IAAK,IAAI,CAACvC,GAAG;KAClC;IACDgO,UAAU,EAAA,SAAVA,UAAUA,GAAG;AACT,MAAA,OAAO,IAAI,CAACzL,OAAM,IAAK,IAAI,CAACxC,GAAG;AACnC;GACH;AACDkO,EAAAA,QAAQ,EAAE;IACNC,iBAAiB,EAAA,SAAjBA,iBAAiBA,GAAG;AAAA,MAAA,IAAAC,MAAA,GAAA,IAAA;MAChB,OAAO;AACHC,QAAAA,SAAS,EAAE,SAAXA,SAASA,CAAG7I,KAAK,EAAA;AAAA,UAAA,OAAK4I,MAAI,CAAC7H,mBAAmB,CAACf,KAAK,CAAC;AAAA,SAAA;AACrD8I,QAAAA,OAAO,EAAE,SAATA,OAAOA,CAAG9I,KAAK,EAAA;AAAA,UAAA,OAAK4I,MAAI,CAACzH,iBAAiB,CAACnB,KAAK,CAAC;AAAA,SAAA;AACjD+I,QAAAA,UAAU,EAAE,SAAZA,UAAUA,CAAG/I,KAAK,EAAA;AAAA,UAAA,OAAK4I,MAAI,CAACxH,oBAAoB,CAACpB,KAAK,CAAC;AAAA,SAAA;AACvDgJ,QAAAA,OAAO,EAAE,SAATA,OAAOA,CAAGhJ,KAAK,EAAA;AAAA,UAAA,OAAK4I,MAAI,CAACtH,iBAAiB,CAACtB,KAAK,CAAC;AAAA,SAAA;AACjDiJ,QAAAA,KAAK,EAAE,SAAPA,KAAKA,CAAGjJ,KAAK,EAAA;AAAA,UAAA,OAAK4I,MAAI,CAACvH,eAAe,CAACrB,KAAK,CAAA;AAAA;OAC/C;KACJ;IACDkJ,mBAAmB,EAAA,SAAnBA,mBAAmBA,GAAG;AAAA,MAAA,IAAAC,MAAA,GAAA,IAAA;MAClB,OAAO;AACHN,QAAAA,SAAS,EAAE,SAAXA,SAASA,CAAG7I,KAAK,EAAA;AAAA,UAAA,OAAKmJ,MAAI,CAAC3H,qBAAqB,CAACxB,KAAK,CAAC;AAAA,SAAA;AACvD8I,QAAAA,OAAO,EAAE,SAATA,OAAOA,CAAG9I,KAAK,EAAA;AAAA,UAAA,OAAKmJ,MAAI,CAAC1H,mBAAmB,CAACzB,KAAK,CAAC;AAAA,SAAA;AACnD+I,QAAAA,UAAU,EAAE,SAAZA,UAAUA,CAAG/I,KAAK,EAAA;AAAA,UAAA,OAAKmJ,MAAI,CAACzH,sBAAsB,CAAC1B,KAAK,CAAC;AAAA,SAAA;AACzDgJ,QAAAA,OAAO,EAAE,SAATA,OAAOA,CAAGhJ,KAAK,EAAA;AAAA,UAAA,OAAKmJ,MAAI,CAACvH,mBAAmB,CAAC5B,KAAK,CAAC;AAAA,SAAA;AACnDiJ,QAAAA,KAAK,EAAE,SAAPA,KAAKA,CAAGjJ,KAAK,EAAA;AAAA,UAAA,OAAKmJ,MAAI,CAACxH,iBAAiB,CAAC3B,KAAK,CAAA;AAAA;OACjD;KACJ;IACDP,cAAc,EAAA,SAAdA,cAAcA,GAAG;AACb,MAAA,IAAMkF,GAAE,GAAI,CAAC,IAAI,CAAC3H,OAAM,IAAK,CAAC,IAAI,CAACrC,UAAS,GAAI,IAAI,IAAI,CAACqC,OAAO;AAEhE,MAAA,OAAO,IAAI,CAACwC,WAAW,CAACmF,GAAG,CAAC;KAC/B;IACDyE,YAAY,EAAA,SAAZA,YAAYA,GAAG;MACX,OAAO,IAAI,CAACpN,YAAY;KAC3B;IACDqN,KAAK,EAAA,SAALA,KAAKA,GAAG;AACJ,MAAA,OAAOC,EAAE,CAAAC,eAAA,CAAAA,eAAA,CAAA;QACLC,OAAO,EAAE,IAAI,CAACC,QAAQ;QACtBC,KAAK,EAAE,IAAI,CAACC,MAAM;AAClBC,QAAAA,MAAM,EAAE,IAAI,CAACC,QAAO,KAAM;OAAQ,EACjC,IAAI,CAACC,IAAI,EAAG,IAAI,CAACA,IAAI,GACrB,IAAI,CAAC9Q,YAAY,EAAG,IAAI,CAACD,WAAU,IAAK,IAAI,CAACC,YAAW,CAC5D,CAAC;AACN;GACH;AACD+Q,EAAAA,UAAU,EAAE;AACRC,IAAAA,SAAS,EAATA,SAAS;AACTC,IAAAA,WAAW,EAAXA,WAAW;AACXC,IAAAA,aAAY,EAAZA;AACJ;AACJ,CAAC;;;;;;;;;;EC1gCG,OAAAC,SAAA,EAAA,EAAAC,kBAAA,CAoFM,QApFNC,UAAA,CAoFM;AApFC,IAAA,OAAA,EAAOC,IAAA,CAAAC,EAAE,CAAA,MAAA;KAAkBD,IAAA,CAAAE,IAAI,CAAA,MAAA,CAAA,EAAA;IAAW,QAAM,EAAEC,QAAA,CAAApB;AAAK,GAAA,CAAA,EAAA,CAC1DqB,WAAA,CA+BCC,oBAAA,EAAA;AA9BGC,IAAAA,GAAG,EAAC,OAAM;IACTC,EAAE,EAAEP,IAAA,CAAAvP,OAAO;IACXtC,IAAI,EAAE6R,IAAA,CAAAQ,SAAS;AAChBC,IAAAA,IAAI,EAAC,YAAW;AACf,IAAA,OAAA,EAAKC,cAAA,CAAA,CAAGV,IAAA,CAAAC,EAAE,CAAA,aAAA,CAAA,EAAiBD,IAAA,CAAAtP,UAAU,CAAA,CAAA;AACrCM,IAAAA,KAAK,iBAAEgP,IAAA,CAAApP,UAAU,CAAA;IACjB+P,YAAY,EAAER,QAAA,CAAAhL,cAAc;IAC5B,eAAa,EAAE6K,IAAA,CAAA9P,GAAG;IAClB,eAAa,EAAE8P,IAAA,CAAA7P,GAAG;IAClB,eAAa,EAAE6P,IAAA,CAAAtN,OAAO;AACtBkO,IAAAA,SAAS,EAAEZ,IAAA,CAAA3Q,IAAG,KAAA,SAAA,IAAA,CAAoB2Q,IAAA,CAAArQ,iBAAgB,GAAA,SAAA,GAAA,SAAA;IAClD+G,QAAQ,EAAEsJ,IAAA,CAAAtJ,QAAQ;IAClBnG,QAAQ,EAAEyP,IAAA,CAAAzP,QAAQ;IAClBC,WAAW,EAAEwP,IAAA,CAAAxP,WAAW;IACxB,iBAAe,EAAEwP,IAAA,CAAAnP,cAAc;IAC/B,YAAU,EAAEmP,IAAA,CAAAlP,SAAS;IACrBC,QAAQ,EAAEiP,IAAA,CAAAjP,QAAQ;IAClByO,IAAI,EAAEQ,IAAA,CAAAR,IAAI;IACVN,OAAO,EAAEc,IAAA,CAAAd,OAAO;IAChB2B,OAAO,EAAEb,IAAA,CAAAa,OAAO;IAChBvE,OAAK,EAAE6D,QAAA,CAAA5I,WAAW;IAClBuJ,SAAO,EAAEX,QAAA,CAAA1I,cAAc;IACvBsJ,UAAQ,EAAEZ,QAAA,CAAA1G,eAAe;IACzBK,OAAK,EAAEqG,QAAA,CAAArG,OAAO;IACdkH,OAAK,EAAEb,QAAA,CAAAxE,YAAY;IACnBsF,OAAK,EAAEd,QAAA,CAAAzC,YAAY;IACnBK,MAAI,EAAEoC,QAAA,CAAAvC,WAAW;AACjBsD,IAAAA,EAAE,EAAElB,IAAA,CAAAmB,GAAG,CAAA,aAAA,CAAA;IACPC,QAAQ,EAAEpB,IAAA,CAAAoB,QAAQ;IAClB,QAAM,EAAEjB,QAAA,CAAApB;gWAEDiB,IAAA,CAAAvR,WAAU,IAAKuR,IAAA,CAAAtR,YAAW,KAAA,SAAA,IAAtCmR,SAAA,EAAA,EAAAC,kBAAA,CAeM,QAfNC,UAAA,CAeM;;AAfkD,IAAA,OAAA,EAAOC,IAAA,CAAAC,EAAE,CAAA,aAAA;KAAyBD,IAAA,CAAAmB,GAAG,CAAA,aAAA,CAAA,EAAA;IAAkB,QAAM,EAAEhB,QAAA,CAAApB;GAAK,CAAA,EAAA,CACxHsC,UAAA,CAMMrB,IAAA,CAAAsB,MAAA,EAAA,iBAAA,EAAA;IANwBC,SAAS,EAAEpB,QAAA,CAAA9B;KAAzC,YAAA;AAAA,IAAA,OAMM,CALFmD,kBAAA,CAIQ,UAJRzB,UAAA,CAIQ;MAJC,OAAA,EAAK,CAAGC,IAAA,CAAAC,EAAE,CAAA,iBAAA,CAAA,EAAqBD,IAAA,CAAApR,oBAAoB;KAAG,EAAA6S,UAAA,CAAMtB,QAAiB,CAAA9B,iBAAA,EAAA,IAAA,CAAA,EAAA;MAAG3H,QAAQ,EAAEsJ,IAAA,CAAAtJ,QAAQ;MAAGgL,QAAQ,EAAE,EAAE;AAAE,MAAA,aAAW,EAAC,MAAK;AAAEnT,MAAAA,IAAI,EAAC;OAAiByR,IAAA,CAAAmB,GAAG,CAAA,iBAAA,CAAA,EAAA;MAAsB,QAAM,EAAEhB,QAAA,CAAApB;KAAK,CAAA,EAAA,CACvMsC,UAAA,CAEMrB,IAAA,CAAAsB,MAAA,EAFOtB,IAAA,CAAAsB,MAAM,CAACK,aAAY,gDAAhC,YAAA;MAAA,OAEM,EADF9B,SAAA,EAAA,EAAA+B,WAAA,CAA4LC,uBAAA,CAA5K7B,IAAA,CAAAhR,aAAY,IAAKgR,IAAA,CAAAlR,+CAAjCiR,UAAA,CAA4L;AAA5G,QAAA,OAAA,EAAK,CAAGC,IAAA,CAAAhR,aAAa,EAAEgR,IAAA,CAAAlR,mBAAmB;SAAWkR,IAAA,CAAAmB,GAAG,CAAA,eAAA,CAAA,EAAA;AAAmB,QAAA,iBAAe,EAAC;;;MAIvLE,UAAA,CAMMrB,IAAA,CAAAsB,MAAA,EAAA,iBAAA,EAAA;IANwBC,SAAS,EAAEpB,QAAA,CAAAvB;KAAzC,YAAA;AAAA,IAAA,OAMM,CALF4C,kBAAA,CAIQ,UAJRzB,UAAA,CAIQ;MAJC,OAAA,EAAK,CAAGC,IAAA,CAAAC,EAAE,CAAA,iBAAA,CAAA,EAAqBD,IAAA,CAAAnR,oBAAoB;KAAG,EAAA4S,UAAA,CAAMtB,4BAAmB,EAAA,IAAA,CAAA,EAAA;MAAGzJ,QAAQ,EAAEsJ,IAAA,CAAAtJ,QAAQ;MAAGgL,QAAQ,EAAE,EAAE;AAAE,MAAA,aAAW,EAAC,MAAK;AAAEnT,MAAAA,IAAI,EAAC;OAAiByR,IAAA,CAAAmB,GAAG,CAAA,iBAAA,CAAA,EAAA;MAAsB,QAAM,EAAEhB,QAAA,CAAApB;KAAK,CAAA,EAAA,CACzMsC,UAAA,CAEMrB,IAAA,CAAAsB,MAAA,EAFOtB,IAAA,CAAAsB,MAAM,CAACQ,aAAY,gDAAhC,YAAA;MAAA,OAEM,EADFjC,SAAA,EAAA,EAAA+B,WAAA,CAA8LC,uBAAA,CAA9K7B,IAAA,CAAA9Q,aAAY,IAAK8Q,IAAA,CAAA/Q,mBAAkB,8BAAnD8Q,UAAA,CAA8L;AAA5G,QAAA,OAAA,EAAK,CAAGC,IAAA,CAAA9Q,aAAa,EAAE8Q,IAAA,CAAA/Q,mBAAmB;SAAW+Q,IAAA,CAAAmB,GAAG,CAAA,eAAA,CAAA,EAAA;AAAmB,QAAA,iBAAe,EAAC;;;wDAK7LE,UAAA,CAgBMrB,IAAA,CAAAsB,MAAA,EAAA,iBAAA,EAAA;IAhBwBC,SAAS,EAAEpB,QAAA,CAAA9B;KAAzC,YAAA;IAAA,OAgBM,CAdQ2B,IAAA,CAAAvR,WAAU,IAAKuR,IAAA,CAAAtR,YAAW,KAAA,SAAA,IADpCmR,SAAA,EAAA,EAAAC,kBAAA,CAcQ,UAdRC,UAAA,CAcQ;;MAZH,OAAA,EAAK,CAAGC,IAAA,CAAAC,EAAE,CAAA,iBAAA,CAAA,EAAqBD,IAAA,CAAApR,oBAAoB;KACpD,EAAA6S,UAAA,CAAMtB,QAAiB,CAAA9B,iBAAA,EAAA,IAAA,CAAA,EAAA;MACtB3H,QAAQ,EAAEsJ,IAAA,CAAAtJ,QAAQ;MAClBgL,QAAQ,EAAE,EAAE;AACb,MAAA,aAAW,EAAC,MAAK;AACjBnT,MAAAA,IAAI,EAAC;OACGyR,IAAA,CAAAmB,GAAG,CAAA,iBAAA,CAAA,EAAA;MACV,QAAM,EAAEhB,QAAA,CAAApB;KAAK,CAAA,EAAA,CAEdsC,UAAA,CAEMrB,IAAA,CAAAsB,MAAA,EAFOtB,IAAA,CAAAsB,MAAM,CAACK,aAAY,gDAAhC,YAAA;MAAA,OAEM,EADF9B,SAAA,EAAA,EAAA+B,WAAA,CAA4LC,uBAAA,CAA5K7B,IAAA,CAAAhR,aAAY,IAAKgR,IAAA,CAAAlR,+CAAjCiR,UAAA,CAA4L;AAA5G,QAAA,OAAA,EAAK,CAAGC,IAAA,CAAAhR,aAAa,EAAEgR,IAAA,CAAAlR,mBAAmB;SAAWkR,IAAA,CAAAmB,GAAG,CAAA,eAAA,CAAA,EAAA;AAAmB,QAAA,iBAAe,EAAC;;;MAIvLE,UAAA,CAgBMrB,IAAA,CAAAsB,MAAA,EAAA,iBAAA,EAAA;IAhBwBC,SAAS,EAAEpB,QAAA,CAAAvB;KAAzC,YAAA;IAAA,OAgBM,CAdQoB,IAAA,CAAAvR,WAAU,IAAKuR,IAAA,CAAAtR,YAAW,KAAA,SAAA,IADpCmR,SAAA,EAAA,EAAAC,kBAAA,CAcQ,UAdRC,UAAA,CAcQ;;MAZH,OAAA,EAAK,CAAGC,IAAA,CAAAC,EAAE,CAAA,iBAAA,CAAA,EAAqBD,IAAA,CAAAnR,oBAAoB;KACpD,EAAA4S,UAAA,CAAMtB,QAAmB,CAAAvB,mBAAA,EAAA,IAAA,CAAA,EAAA;MACxBlI,QAAQ,EAAEsJ,IAAA,CAAAtJ,QAAQ;MAClBgL,QAAQ,EAAE,EAAE;AACb,MAAA,aAAW,EAAC,MAAK;AACjBnT,MAAAA,IAAI,EAAC;OACGyR,IAAA,CAAAmB,GAAG,CAAA,iBAAA,CAAA,EAAA;MACV,QAAM,EAAEhB,QAAA,CAAApB;KAAK,CAAA,EAAA,CAEdsC,UAAA,CAEMrB,IAAA,CAAAsB,MAAA,EAFOtB,IAAA,CAAAsB,MAAM,CAACQ,aAAY,gDAAhC,YAAA;MAAA,OAEM,EADFjC,SAAA,EAAA,EAAA+B,WAAA,CAA8LC,uBAAA,CAA9K7B,IAAA,CAAA9Q,aAAY,IAAK8Q,IAAA,CAAA/Q,mBAAkB,8BAAnD8Q,UAAA,CAA8L;AAA5G,QAAA,OAAA,EAAK,CAAGC,IAAA,CAAA9Q,aAAa,EAAE8Q,IAAA,CAAA/Q,mBAAmB;SAAW+Q,IAAA,CAAAmB,GAAG,CAAA,eAAA,CAAA,EAAA;AAAmB,QAAA,iBAAe,EAAC;;;;;;;;;;"}
1
+ {"version":3,"file":"index.mjs","sources":["../../src/inputnumber/BaseInputNumber.vue","../../src/inputnumber/InputNumber.vue","../../src/inputnumber/InputNumber.vue?vue&type=template&id=05918e58&lang.js"],"sourcesContent":["<script>\nimport BaseInput from '@primevue/core/baseinput';\nimport InputNumberStyle from 'primevue/inputnumber/style';\n\nexport default {\n name: 'BaseInputNumber',\n extends: BaseInput,\n props: {\n format: {\n type: Boolean,\n default: true\n },\n showButtons: {\n type: Boolean,\n default: false\n },\n buttonLayout: {\n type: String,\n default: 'stacked'\n },\n incrementButtonClass: {\n type: String,\n default: null\n },\n decrementButtonClass: {\n type: String,\n default: null\n },\n incrementButtonIcon: {\n type: String,\n default: undefined\n },\n incrementIcon: {\n type: String,\n default: undefined\n },\n decrementButtonIcon: {\n type: String,\n default: undefined\n },\n decrementIcon: {\n type: String,\n default: undefined\n },\n locale: {\n type: String,\n default: undefined\n },\n localeMatcher: {\n type: String,\n default: undefined\n },\n mode: {\n type: String,\n default: 'decimal'\n },\n prefix: {\n type: String,\n default: null\n },\n suffix: {\n type: String,\n default: null\n },\n currency: {\n type: String,\n default: undefined\n },\n currencyDisplay: {\n type: String,\n default: undefined\n },\n useGrouping: {\n type: Boolean,\n default: true\n },\n minFractionDigits: {\n type: Number,\n default: undefined\n },\n maxFractionDigits: {\n type: Number,\n default: undefined\n },\n roundingMode: {\n type: String,\n default: 'halfExpand',\n validator(value) {\n return ['ceil', 'floor', 'expand', 'trunc', 'halfCeil', 'halfFloor', 'halfExpand', 'halfTrunc', 'halfEven'].includes(value);\n }\n },\n min: {\n type: Number,\n default: null\n },\n max: {\n type: Number,\n default: null\n },\n step: {\n type: Number,\n default: 1\n },\n allowEmpty: {\n type: Boolean,\n default: true\n },\n highlightOnFocus: {\n type: Boolean,\n default: false\n },\n readonly: {\n type: Boolean,\n default: false\n },\n placeholder: {\n type: String,\n default: null\n },\n inputId: {\n type: String,\n default: null\n },\n inputClass: {\n type: [String, Object],\n default: null\n },\n inputStyle: {\n type: Object,\n default: null\n },\n ariaLabelledby: {\n type: String,\n default: null\n },\n ariaLabel: {\n type: String,\n default: null\n },\n required: {\n type: Boolean,\n default: false\n }\n },\n style: InputNumberStyle,\n provide() {\n return {\n $pcInputNumber: this,\n $parentInstance: this\n };\n }\n};\n</script>\n","<template>\n <span :class=\"cx('root')\" v-bind=\"ptmi('root')\" :data-p=\"dataP\">\n <InputText\n ref=\"input\"\n :id=\"inputId\"\n :name=\"$formName\"\n role=\"spinbutton\"\n :class=\"[cx('pcInputText'), inputClass]\"\n :style=\"inputStyle\"\n :defaultValue=\"formattedValue\"\n :aria-valuemin=\"min\"\n :aria-valuemax=\"max\"\n :aria-valuenow=\"d_value\"\n :inputmode=\"mode === 'decimal' && !minFractionDigits ? 'numeric' : 'decimal'\"\n :disabled=\"disabled\"\n :readonly=\"readonly\"\n :placeholder=\"placeholder\"\n :aria-labelledby=\"ariaLabelledby\"\n :aria-label=\"ariaLabel\"\n :required=\"required\"\n :size=\"size\"\n :invalid=\"invalid\"\n :variant=\"variant\"\n @input=\"onUserInput\"\n @keydown=\"onInputKeyDown\"\n @keypress=\"onInputKeyPress\"\n @paste=\"onPaste\"\n @click=\"onInputClick\"\n @focus=\"onInputFocus\"\n @blur=\"onInputBlur\"\n :pt=\"ptm('pcInputText')\"\n :unstyled=\"unstyled\"\n :data-p=\"dataP\"\n />\n <span v-if=\"showButtons && buttonLayout === 'stacked'\" :class=\"cx('buttonGroup')\" v-bind=\"ptm('buttonGroup')\" :data-p=\"dataP\">\n <slot name=\"incrementbutton\" :listeners=\"upButtonListeners\">\n <button :class=\"[cx('incrementButton'), incrementButtonClass]\" v-on=\"upButtonListeners\" :disabled=\"disabled\" :tabindex=\"-1\" aria-hidden=\"true\" type=\"button\" v-bind=\"ptm('incrementButton')\" :data-p=\"dataP\">\n <slot :name=\"$slots.incrementicon ? 'incrementicon' : 'incrementbuttonicon'\">\n <component :is=\"incrementIcon || incrementButtonIcon ? 'span' : 'AngleUpIcon'\" :class=\"[incrementIcon, incrementButtonIcon]\" v-bind=\"ptm('incrementIcon')\" data-pc-section=\"incrementicon\" />\n </slot>\n </button>\n </slot>\n <slot name=\"decrementbutton\" :listeners=\"downButtonListeners\">\n <button :class=\"[cx('decrementButton'), decrementButtonClass]\" v-on=\"downButtonListeners\" :disabled=\"disabled\" :tabindex=\"-1\" aria-hidden=\"true\" type=\"button\" v-bind=\"ptm('decrementButton')\" :data-p=\"dataP\">\n <slot :name=\"$slots.decrementicon ? 'decrementicon' : 'decrementbuttonicon'\">\n <component :is=\"decrementIcon || decrementButtonIcon ? 'span' : 'AngleDownIcon'\" :class=\"[decrementIcon, decrementButtonIcon]\" v-bind=\"ptm('decrementIcon')\" data-pc-section=\"decrementicon\" />\n </slot>\n </button>\n </slot>\n </span>\n <slot name=\"incrementbutton\" :listeners=\"upButtonListeners\">\n <button\n v-if=\"showButtons && buttonLayout !== 'stacked'\"\n :class=\"[cx('incrementButton'), incrementButtonClass]\"\n v-on=\"upButtonListeners\"\n :disabled=\"disabled\"\n :tabindex=\"-1\"\n aria-hidden=\"true\"\n type=\"button\"\n v-bind=\"ptm('incrementButton')\"\n :data-p=\"dataP\"\n >\n <slot :name=\"$slots.incrementicon ? 'incrementicon' : 'incrementbuttonicon'\">\n <component :is=\"incrementIcon || incrementButtonIcon ? 'span' : 'AngleUpIcon'\" :class=\"[incrementIcon, incrementButtonIcon]\" v-bind=\"ptm('incrementIcon')\" data-pc-section=\"incrementicon\" />\n </slot>\n </button>\n </slot>\n <slot name=\"decrementbutton\" :listeners=\"downButtonListeners\">\n <button\n v-if=\"showButtons && buttonLayout !== 'stacked'\"\n :class=\"[cx('decrementButton'), decrementButtonClass]\"\n v-on=\"downButtonListeners\"\n :disabled=\"disabled\"\n :tabindex=\"-1\"\n aria-hidden=\"true\"\n type=\"button\"\n v-bind=\"ptm('decrementButton')\"\n :data-p=\"dataP\"\n >\n <slot :name=\"$slots.decrementicon ? 'decrementicon' : 'decrementbuttonicon'\">\n <component :is=\"decrementIcon || decrementButtonIcon ? 'span' : 'AngleDownIcon'\" :class=\"[decrementIcon, decrementButtonIcon]\" v-bind=\"ptm('decrementIcon')\" data-pc-section=\"decrementicon\" />\n </slot>\n </button>\n </slot>\n <!-- TODO: decrementButton* and incrementButton* are deprecated since v4.0-->\n </span>\n</template>\n\n<script>\nimport { cn } from '@primeuix/utils';\nimport { clearSelection, getSelection } from '@primeuix/utils/dom';\nimport { isNotEmpty } from '@primeuix/utils/object';\nimport AngleDownIcon from '@primevue/icons/angledown';\nimport AngleUpIcon from '@primevue/icons/angleup';\nimport InputText from 'primevue/inputtext';\nimport BaseInputNumber from './BaseInputNumber.vue';\n\nexport default {\n name: 'InputNumber',\n extends: BaseInputNumber,\n inheritAttrs: false,\n emits: ['input', 'focus', 'blur'],\n inject: {\n $pcFluid: { default: null }\n },\n numberFormat: null,\n _numeral: null,\n _decimal: null,\n _group: null,\n _minusSign: null,\n _currency: null,\n _suffix: null,\n _prefix: null,\n _index: null,\n groupChar: '',\n isSpecialChar: null,\n prefixChar: null,\n suffixChar: null,\n timer: null,\n data() {\n return {\n // @deprecated\n d_modelValue: this.d_value,\n focused: false\n };\n },\n watch: {\n d_value(newValue) {\n // @deprecated since v4.2.0\n this.d_modelValue = newValue;\n },\n locale(newValue, oldValue) {\n this.updateConstructParser(newValue, oldValue);\n },\n localeMatcher(newValue, oldValue) {\n this.updateConstructParser(newValue, oldValue);\n },\n mode(newValue, oldValue) {\n this.updateConstructParser(newValue, oldValue);\n },\n currency(newValue, oldValue) {\n this.updateConstructParser(newValue, oldValue);\n },\n currencyDisplay(newValue, oldValue) {\n this.updateConstructParser(newValue, oldValue);\n },\n useGrouping(newValue, oldValue) {\n this.updateConstructParser(newValue, oldValue);\n },\n minFractionDigits(newValue, oldValue) {\n this.updateConstructParser(newValue, oldValue);\n },\n maxFractionDigits(newValue, oldValue) {\n this.updateConstructParser(newValue, oldValue);\n },\n suffix(newValue, oldValue) {\n this.updateConstructParser(newValue, oldValue);\n },\n prefix(newValue, oldValue) {\n this.updateConstructParser(newValue, oldValue);\n }\n },\n created() {\n this.constructParser();\n },\n methods: {\n getOptions() {\n return {\n localeMatcher: this.localeMatcher,\n style: this.mode,\n currency: this.currency,\n currencyDisplay: this.currencyDisplay,\n useGrouping: this.useGrouping,\n minimumFractionDigits: this.minFractionDigits,\n maximumFractionDigits: this.maxFractionDigits,\n roundingMode: this.roundingMode\n };\n },\n constructParser() {\n this.numberFormat = new Intl.NumberFormat(this.locale, this.getOptions());\n const numerals = [...new Intl.NumberFormat(this.locale, { useGrouping: false }).format(9876543210)].reverse();\n const index = new Map(numerals.map((d, i) => [d, i]));\n\n this._numeral = new RegExp(`[${numerals.join('')}]`, 'g');\n this._group = this.getGroupingExpression();\n this._minusSign = this.getMinusSignExpression();\n this._currency = this.getCurrencyExpression();\n this._decimal = this.getDecimalExpression();\n this._suffix = this.getSuffixExpression();\n this._prefix = this.getPrefixExpression();\n this._index = (d) => index.get(d);\n },\n updateConstructParser(newValue, oldValue) {\n if (newValue !== oldValue) {\n this.constructParser();\n }\n },\n escapeRegExp(text) {\n return text.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&');\n },\n getDecimalExpression() {\n const formatter = new Intl.NumberFormat(this.locale, { ...this.getOptions(), useGrouping: false });\n\n return new RegExp(`[${formatter.format(1.1).replace(this._currency, '').trim().replace(this._numeral, '')}]`, 'g');\n },\n getGroupingExpression() {\n const formatter = new Intl.NumberFormat(this.locale, { useGrouping: true });\n\n this.groupChar = formatter.format(1000000).trim().replace(this._numeral, '').charAt(0);\n\n return new RegExp(`[${this.groupChar}]`, 'g');\n },\n getMinusSignExpression() {\n const formatter = new Intl.NumberFormat(this.locale, { useGrouping: false });\n\n return new RegExp(`[${formatter.format(-1).trim().replace(this._numeral, '')}]`, 'g');\n },\n getCurrencyExpression() {\n if (this.currency) {\n const formatter = new Intl.NumberFormat(this.locale, { style: 'currency', currency: this.currency, currencyDisplay: this.currencyDisplay, minimumFractionDigits: 0, maximumFractionDigits: 0, roundingMode: this.roundingMode });\n\n return new RegExp(`[${formatter.format(1).replace(/\\s/g, '').replace(this._numeral, '').replace(this._group, '')}]`, 'g');\n }\n\n return new RegExp(`[]`, 'g');\n },\n getPrefixExpression() {\n if (this.prefix) {\n this.prefixChar = this.prefix;\n } else {\n const formatter = new Intl.NumberFormat(this.locale, { style: this.mode, currency: this.currency, currencyDisplay: this.currencyDisplay });\n\n this.prefixChar = formatter.format(1).split('1')[0];\n }\n\n return new RegExp(`${this.escapeRegExp(this.prefixChar || '')}`, 'g');\n },\n getSuffixExpression() {\n if (this.suffix) {\n this.suffixChar = this.suffix;\n } else {\n const formatter = new Intl.NumberFormat(this.locale, { style: this.mode, currency: this.currency, currencyDisplay: this.currencyDisplay, minimumFractionDigits: 0, maximumFractionDigits: 0, roundingMode: this.roundingMode });\n\n this.suffixChar = formatter.format(1).split('1')[1];\n }\n\n return new RegExp(`${this.escapeRegExp(this.suffixChar || '')}`, 'g');\n },\n formatValue(value) {\n if (value != null) {\n if (value === '-') {\n // Minus sign\n return value;\n }\n\n if (this.format) {\n let formatter = new Intl.NumberFormat(this.locale, this.getOptions());\n let formattedValue = formatter.format(value);\n\n if (this.prefix) {\n formattedValue = this.prefix + formattedValue;\n }\n\n if (this.suffix) {\n formattedValue = formattedValue + this.suffix;\n }\n\n return formattedValue;\n }\n\n return value.toString();\n }\n\n return '';\n },\n parseValue(text) {\n let filteredText = text\n .replace(this._suffix, '')\n .replace(this._prefix, '')\n .trim()\n .replace(/\\s/g, '')\n .replace(this._currency, '')\n .replace(this._group, '')\n .replace(this._minusSign, '-')\n .replace(this._decimal, '.')\n .replace(this._numeral, this._index);\n\n if (filteredText) {\n if (filteredText === '-')\n // Minus sign\n return filteredText;\n\n let parsedValue = +filteredText;\n\n return isNaN(parsedValue) ? null : parsedValue;\n }\n\n return null;\n },\n repeat(event, interval, dir) {\n if (this.readonly) {\n return;\n }\n\n let i = interval || 500;\n\n this.clearTimer();\n this.timer = setTimeout(() => {\n this.repeat(event, 40, dir);\n }, i);\n\n this.spin(event, dir);\n },\n addWithPrecision(base, increment) {\n const baseStr = base.toString();\n const stepStr = increment.toString();\n\n const baseDecimalPlaces = baseStr.includes('.') ? baseStr.split('.')[1].length : 0;\n const stepDecimalPlaces = stepStr.includes('.') ? stepStr.split('.')[1].length : 0;\n\n const maxDecimalPlaces = Math.max(baseDecimalPlaces, stepDecimalPlaces);\n const precision = Math.pow(10, maxDecimalPlaces);\n\n return Math.round((base + increment) * precision) / precision;\n },\n spin(event, dir) {\n if (this.$refs.input) {\n let step = this.step * dir;\n let currentValue = this.parseValue(this.$refs.input.$el.value) || 0;\n let newValue = this.validateValue(this.addWithPrecision(currentValue, step));\n\n this.updateInput(newValue, null, 'spin');\n this.updateModel(event, newValue);\n\n this.handleOnInput(event, currentValue, newValue);\n }\n },\n onUpButtonMouseDown(event) {\n if (!this.disabled) {\n this.$refs.input.$el.focus();\n this.repeat(event, null, 1);\n event.preventDefault();\n }\n },\n onUpButtonMouseUp() {\n if (!this.disabled) {\n this.clearTimer();\n }\n },\n onUpButtonMouseLeave() {\n if (!this.disabled) {\n this.clearTimer();\n }\n },\n onUpButtonKeyUp() {\n if (!this.disabled) {\n this.clearTimer();\n }\n },\n onUpButtonKeyDown(event) {\n if (event.code === 'Space' || event.code === 'Enter' || event.code === 'NumpadEnter') {\n this.repeat(event, null, 1);\n }\n },\n onDownButtonMouseDown(event) {\n if (!this.disabled) {\n this.$refs.input.$el.focus();\n this.repeat(event, null, -1);\n event.preventDefault();\n }\n },\n onDownButtonMouseUp() {\n if (!this.disabled) {\n this.clearTimer();\n }\n },\n onDownButtonMouseLeave() {\n if (!this.disabled) {\n this.clearTimer();\n }\n },\n onDownButtonKeyUp() {\n if (!this.disabled) {\n this.clearTimer();\n }\n },\n onDownButtonKeyDown(event) {\n if (event.code === 'Space' || event.code === 'Enter' || event.code === 'NumpadEnter') {\n this.repeat(event, null, -1);\n }\n },\n onUserInput() {\n if (this.isSpecialChar) {\n this.$refs.input.$el.value = this.lastValue;\n }\n\n this.isSpecialChar = false;\n },\n onInputKeyDown(event) {\n if (this.readonly) {\n return;\n }\n\n // block composition input\n if (event.isComposing) {\n return;\n }\n\n if (event.altKey || event.ctrlKey || event.metaKey) {\n this.isSpecialChar = true;\n this.lastValue = this.$refs.input.$el.value;\n\n return;\n }\n\n this.lastValue = event.target.value;\n\n let selectionStart = event.target.selectionStart;\n let selectionEnd = event.target.selectionEnd;\n let selectionRange = selectionEnd - selectionStart;\n let inputValue = event.target.value;\n let newValueStr = null;\n const code = event.code || event.key;\n\n switch (code) {\n case 'ArrowUp':\n this.spin(event, 1);\n event.preventDefault();\n break;\n\n case 'ArrowDown':\n this.spin(event, -1);\n event.preventDefault();\n break;\n\n case 'ArrowLeft':\n if (selectionRange > 1) {\n const cursorPosition = this.isNumeralChar(inputValue.charAt(selectionStart)) ? selectionStart + 1 : selectionStart + 2;\n\n this.$refs.input.$el.setSelectionRange(cursorPosition, cursorPosition);\n } else if (!this.isNumeralChar(inputValue.charAt(selectionStart - 1))) {\n event.preventDefault();\n }\n\n break;\n\n case 'ArrowRight':\n if (selectionRange > 1) {\n const cursorPosition = selectionEnd - 1;\n\n this.$refs.input.$el.setSelectionRange(cursorPosition, cursorPosition);\n } else if (!this.isNumeralChar(inputValue.charAt(selectionStart))) {\n event.preventDefault();\n }\n\n break;\n\n case 'Tab':\n case 'Enter':\n case 'NumpadEnter':\n newValueStr = this.validateValue(this.parseValue(inputValue));\n this.$refs.input.$el.value = this.formatValue(newValueStr);\n this.$refs.input.$el.setAttribute('aria-valuenow', newValueStr);\n this.updateModel(event, newValueStr);\n break;\n\n case 'Backspace': {\n event.preventDefault();\n\n if (selectionStart === selectionEnd) {\n if (selectionStart >= inputValue.length && this.suffixChar !== null) {\n selectionStart = inputValue.length - this.suffixChar.length;\n this.$refs.input.$el.setSelectionRange(selectionStart, selectionStart);\n }\n\n const deleteChar = inputValue.charAt(selectionStart - 1);\n const { decimalCharIndex, decimalCharIndexWithoutPrefix } = this.getDecimalCharIndexes(inputValue);\n\n if (this.isNumeralChar(deleteChar)) {\n const decimalLength = this.getDecimalLength(inputValue);\n\n if (this._group.test(deleteChar)) {\n this._group.lastIndex = 0;\n newValueStr = inputValue.slice(0, selectionStart - 2) + inputValue.slice(selectionStart - 1);\n } else if (this._decimal.test(deleteChar)) {\n this._decimal.lastIndex = 0;\n\n if (decimalLength) {\n this.$refs.input.$el.setSelectionRange(selectionStart - 1, selectionStart - 1);\n } else {\n newValueStr = inputValue.slice(0, selectionStart - 1) + inputValue.slice(selectionStart);\n }\n } else if (decimalCharIndex > 0 && selectionStart > decimalCharIndex) {\n const insertedText = this.isDecimalMode() && (this.minFractionDigits || 0) < decimalLength ? '' : '0';\n\n newValueStr = inputValue.slice(0, selectionStart - 1) + insertedText + inputValue.slice(selectionStart);\n } else if (decimalCharIndexWithoutPrefix === 1) {\n newValueStr = inputValue.slice(0, selectionStart - 1) + '0' + inputValue.slice(selectionStart);\n newValueStr = this.parseValue(newValueStr) > 0 ? newValueStr : '';\n } else {\n newValueStr = inputValue.slice(0, selectionStart - 1) + inputValue.slice(selectionStart);\n }\n }\n\n this.updateValue(event, newValueStr, null, 'delete-single');\n } else {\n newValueStr = this.deleteRange(inputValue, selectionStart, selectionEnd);\n this.updateValue(event, newValueStr, null, 'delete-range');\n }\n\n break;\n }\n\n case 'Delete':\n event.preventDefault();\n\n if (selectionStart === selectionEnd) {\n const deleteChar = inputValue.charAt(selectionStart);\n const { decimalCharIndex, decimalCharIndexWithoutPrefix } = this.getDecimalCharIndexes(inputValue);\n\n if (this.isNumeralChar(deleteChar)) {\n const decimalLength = this.getDecimalLength(inputValue);\n\n if (this._group.test(deleteChar)) {\n this._group.lastIndex = 0;\n newValueStr = inputValue.slice(0, selectionStart) + inputValue.slice(selectionStart + 2);\n } else if (this._decimal.test(deleteChar)) {\n this._decimal.lastIndex = 0;\n\n if (decimalLength) {\n this.$refs.input.$el.setSelectionRange(selectionStart + 1, selectionStart + 1);\n } else {\n newValueStr = inputValue.slice(0, selectionStart) + inputValue.slice(selectionStart + 1);\n }\n } else if (decimalCharIndex > 0 && selectionStart > decimalCharIndex) {\n const insertedText = this.isDecimalMode() && (this.minFractionDigits || 0) < decimalLength ? '' : '0';\n\n newValueStr = inputValue.slice(0, selectionStart) + insertedText + inputValue.slice(selectionStart + 1);\n } else if (decimalCharIndexWithoutPrefix === 1) {\n newValueStr = inputValue.slice(0, selectionStart) + '0' + inputValue.slice(selectionStart + 1);\n newValueStr = this.parseValue(newValueStr) > 0 ? newValueStr : '';\n } else {\n newValueStr = inputValue.slice(0, selectionStart) + inputValue.slice(selectionStart + 1);\n }\n }\n\n this.updateValue(event, newValueStr, null, 'delete-back-single');\n } else {\n newValueStr = this.deleteRange(inputValue, selectionStart, selectionEnd);\n this.updateValue(event, newValueStr, null, 'delete-range');\n }\n\n break;\n\n case 'Home':\n event.preventDefault();\n\n if (isNotEmpty(this.min)) {\n this.updateModel(event, this.min);\n }\n\n break;\n\n case 'End':\n event.preventDefault();\n\n if (isNotEmpty(this.max)) {\n this.updateModel(event, this.max);\n }\n\n break;\n\n default:\n break;\n }\n },\n onInputKeyPress(event) {\n if (this.readonly) {\n return;\n }\n\n let char = event.key;\n let isDecimalSign = this.isDecimalSign(char);\n const isMinusSign = this.isMinusSign(char);\n\n if (event.code !== 'Enter') {\n event.preventDefault();\n }\n\n if ((Number(char) >= 0 && Number(char) <= 9) || isMinusSign || isDecimalSign) {\n this.insert(event, char, { isDecimalSign, isMinusSign });\n }\n },\n onPaste(event) {\n if (this.readonly) {\n return;\n }\n\n event.preventDefault();\n let data = (event.clipboardData || window['clipboardData']).getData('Text');\n\n if (data) {\n let filteredData = this.parseValue(data);\n\n if (filteredData != null) {\n this.insert(event, filteredData.toString());\n }\n }\n },\n allowMinusSign() {\n return this.min === null || this.min < 0;\n },\n isMinusSign(char) {\n if (this._minusSign.test(char) || char === '-') {\n this._minusSign.lastIndex = 0;\n\n return true;\n }\n\n return false;\n },\n isDecimalSign(char) {\n if ((this.locale?.includes('fr') && ['.', ','].includes(char)) || this._decimal.test(char)) {\n this._decimal.lastIndex = 0;\n\n return true;\n }\n\n return false;\n },\n isDecimalMode() {\n return this.mode === 'decimal';\n },\n getDecimalCharIndexes(val) {\n let decimalCharIndex = val.search(this._decimal);\n\n this._decimal.lastIndex = 0;\n\n const filteredVal = val.replace(this._prefix, '').trim().replace(/\\s/g, '').replace(this._currency, '');\n const decimalCharIndexWithoutPrefix = filteredVal.search(this._decimal);\n\n this._decimal.lastIndex = 0;\n\n return { decimalCharIndex, decimalCharIndexWithoutPrefix };\n },\n getCharIndexes(val) {\n const decimalCharIndex = val.search(this._decimal);\n\n this._decimal.lastIndex = 0;\n const minusCharIndex = val.search(this._minusSign);\n\n this._minusSign.lastIndex = 0;\n const suffixCharIndex = val.search(this._suffix);\n\n this._suffix.lastIndex = 0;\n const currencyCharIndex = val.search(this._currency);\n\n this._currency.lastIndex = 0;\n\n return { decimalCharIndex, minusCharIndex, suffixCharIndex, currencyCharIndex };\n },\n insert(event, text, sign = { isDecimalSign: false, isMinusSign: false }) {\n const minusCharIndexOnText = text.search(this._minusSign);\n\n this._minusSign.lastIndex = 0;\n\n if (!this.allowMinusSign() && minusCharIndexOnText !== -1) {\n return;\n }\n\n const selectionStart = this.$refs.input.$el.selectionStart;\n const selectionEnd = this.$refs.input.$el.selectionEnd;\n let inputValue = this.$refs.input.$el.value.trim();\n const { decimalCharIndex, minusCharIndex, suffixCharIndex, currencyCharIndex } = this.getCharIndexes(inputValue);\n let newValueStr;\n\n if (sign.isMinusSign) {\n const isNewMinusSign = minusCharIndex === -1;\n\n if (selectionStart === 0 || selectionStart === currencyCharIndex + 1) {\n newValueStr = inputValue;\n\n if (isNewMinusSign || selectionEnd !== 0) {\n newValueStr = this.insertText(inputValue, text, 0, selectionEnd);\n }\n\n this.updateValue(event, newValueStr, text, 'insert');\n }\n } else if (sign.isDecimalSign) {\n if (decimalCharIndex > 0 && selectionStart === decimalCharIndex) {\n this.updateValue(event, inputValue, text, 'insert');\n } else if (decimalCharIndex > selectionStart && decimalCharIndex < selectionEnd) {\n newValueStr = this.insertText(inputValue, text, selectionStart, selectionEnd);\n this.updateValue(event, newValueStr, text, 'insert');\n } else if (decimalCharIndex === -1 && this.maxFractionDigits) {\n newValueStr = this.insertText(inputValue, text, selectionStart, selectionEnd);\n this.updateValue(event, newValueStr, text, 'insert');\n }\n } else {\n const maxFractionDigits = this.numberFormat.resolvedOptions().maximumFractionDigits;\n const operation = selectionStart !== selectionEnd ? 'range-insert' : 'insert';\n\n if (decimalCharIndex > 0 && selectionStart > decimalCharIndex) {\n if (selectionStart + text.length - (decimalCharIndex + 1) <= maxFractionDigits) {\n const charIndex = currencyCharIndex >= selectionStart ? currencyCharIndex - 1 : suffixCharIndex >= selectionStart ? suffixCharIndex : inputValue.length;\n\n newValueStr = inputValue.slice(0, selectionStart) + text + inputValue.slice(selectionStart + text.length, charIndex) + inputValue.slice(charIndex);\n this.updateValue(event, newValueStr, text, operation);\n }\n } else {\n newValueStr = this.insertText(inputValue, text, selectionStart, selectionEnd);\n this.updateValue(event, newValueStr, text, operation);\n }\n }\n },\n insertText(value, text, start, end) {\n let textSplit = text === '.' ? text : text.split('.');\n\n if (textSplit.length === 2) {\n const decimalCharIndex = value.slice(start, end).search(this._decimal);\n\n this._decimal.lastIndex = 0;\n\n return decimalCharIndex > 0 ? value.slice(0, start) + this.formatValue(text) + value.slice(end) : this.formatValue(text) || value;\n } else if (end - start === value.length) {\n return this.formatValue(text);\n } else if (start === 0) {\n return text + value.slice(end);\n } else if (end === value.length) {\n return value.slice(0, start) + text;\n } else {\n return value.slice(0, start) + text + value.slice(end);\n }\n },\n deleteRange(value, start, end) {\n let newValueStr;\n\n if (end - start === value.length) newValueStr = '';\n else if (start === 0) newValueStr = value.slice(end);\n else if (end === value.length) newValueStr = value.slice(0, start);\n else newValueStr = value.slice(0, start) + value.slice(end);\n\n return newValueStr;\n },\n initCursor() {\n let selectionStart = this.$refs.input.$el.selectionStart;\n let inputValue = this.$refs.input.$el.value;\n let valueLength = inputValue.length;\n let index = null;\n\n // remove prefix\n let prefixLength = (this.prefixChar || '').length;\n\n inputValue = inputValue.replace(this._prefix, '');\n selectionStart = selectionStart - prefixLength;\n\n let char = inputValue.charAt(selectionStart);\n\n if (this.isNumeralChar(char)) {\n return selectionStart + prefixLength;\n }\n\n //left\n let i = selectionStart - 1;\n\n while (i >= 0) {\n char = inputValue.charAt(i);\n\n if (this.isNumeralChar(char)) {\n index = i + prefixLength;\n break;\n } else {\n i--;\n }\n }\n\n if (index !== null) {\n this.$refs.input.$el.setSelectionRange(index + 1, index + 1);\n } else {\n i = selectionStart;\n\n while (i < valueLength) {\n char = inputValue.charAt(i);\n\n if (this.isNumeralChar(char)) {\n index = i + prefixLength;\n break;\n } else {\n i++;\n }\n }\n\n if (index !== null) {\n this.$refs.input.$el.setSelectionRange(index, index);\n }\n }\n\n return index || 0;\n },\n onInputClick() {\n const currentValue = this.$refs.input.$el.value;\n\n if (!this.readonly && currentValue !== getSelection()) {\n this.initCursor();\n }\n },\n isNumeralChar(char) {\n if (char.length === 1 && (this._numeral.test(char) || this._decimal.test(char) || this._group.test(char) || this._minusSign.test(char))) {\n this.resetRegex();\n\n return true;\n }\n\n return false;\n },\n resetRegex() {\n this._numeral.lastIndex = 0;\n this._decimal.lastIndex = 0;\n this._group.lastIndex = 0;\n this._minusSign.lastIndex = 0;\n },\n updateValue(event, valueStr, insertedValueStr, operation) {\n let currentValue = this.$refs.input.$el.value;\n let newValue = null;\n\n if (valueStr != null) {\n newValue = this.parseValue(valueStr);\n newValue = !newValue && !this.allowEmpty ? 0 : newValue;\n this.updateInput(newValue, insertedValueStr, operation, valueStr);\n\n this.handleOnInput(event, currentValue, newValue);\n }\n },\n handleOnInput(event, currentValue, newValue) {\n if (this.isValueChanged(currentValue, newValue)) {\n this.$emit('input', { originalEvent: event, value: newValue, formattedValue: currentValue });\n this.formField.onInput?.({ originalEvent: event, value: newValue });\n }\n },\n isValueChanged(currentValue, newValue) {\n if (newValue === null && currentValue !== null) {\n return true;\n }\n\n if (newValue != null) {\n let parsedCurrentValue = typeof currentValue === 'string' ? this.parseValue(currentValue) : currentValue;\n\n return newValue !== parsedCurrentValue;\n }\n\n return false;\n },\n validateValue(value) {\n if (value === '-' || value == null) {\n return null;\n }\n\n if (this.min != null && value < this.min) {\n return this.min;\n }\n\n if (this.max != null && value > this.max) {\n return this.max;\n }\n\n return value;\n },\n updateInput(value, insertedValueStr, operation, valueStr) {\n insertedValueStr = insertedValueStr || '';\n\n let inputValue = this.$refs.input.$el.value;\n let newValue = this.formatValue(value);\n let currentLength = inputValue.length;\n\n if (newValue !== valueStr) {\n newValue = this.concatValues(newValue, valueStr);\n }\n\n if (currentLength === 0) {\n this.$refs.input.$el.value = newValue;\n this.$refs.input.$el.setSelectionRange(0, 0);\n const index = this.initCursor();\n const selectionEnd = index + insertedValueStr.length;\n\n this.$refs.input.$el.setSelectionRange(selectionEnd, selectionEnd);\n } else {\n let selectionStart = this.$refs.input.$el.selectionStart;\n let selectionEnd = this.$refs.input.$el.selectionEnd;\n\n this.$refs.input.$el.value = newValue;\n let newLength = newValue.length;\n\n if (operation === 'range-insert') {\n const startValue = this.parseValue((inputValue || '').slice(0, selectionStart));\n const startValueStr = startValue !== null ? startValue.toString() : '';\n const startExpr = startValueStr.split('').join(`(${this.groupChar})?`);\n const sRegex = new RegExp(startExpr, 'g');\n\n sRegex.test(newValue);\n\n const tExpr = insertedValueStr.split('').join(`(${this.groupChar})?`);\n const tRegex = new RegExp(tExpr, 'g');\n\n tRegex.test(newValue.slice(sRegex.lastIndex));\n\n selectionEnd = sRegex.lastIndex + tRegex.lastIndex;\n this.$refs.input.$el.setSelectionRange(selectionEnd, selectionEnd);\n } else if (newLength === currentLength) {\n if (operation === 'insert' || operation === 'delete-back-single') {\n this.$refs.input.$el.setSelectionRange(selectionEnd + 1, selectionEnd + 1);\n } else if (operation === 'delete-single') {\n this.$refs.input.$el.setSelectionRange(selectionEnd - 1, selectionEnd - 1);\n } else if (operation === 'delete-range' || operation === 'spin') {\n this.$refs.input.$el.setSelectionRange(selectionEnd, selectionEnd);\n }\n } else if (operation === 'delete-back-single') {\n let prevChar = inputValue.charAt(selectionEnd - 1);\n let nextChar = inputValue.charAt(selectionEnd);\n let diff = currentLength - newLength;\n let isGroupChar = this._group.test(nextChar);\n\n if (isGroupChar && diff === 1) {\n selectionEnd += 1;\n } else if (!isGroupChar && this.isNumeralChar(prevChar)) {\n selectionEnd += -1 * diff + 1;\n }\n\n this._group.lastIndex = 0;\n this.$refs.input.$el.setSelectionRange(selectionEnd, selectionEnd);\n } else if (inputValue === '-' && operation === 'insert') {\n this.$refs.input.$el.setSelectionRange(0, 0);\n const index = this.initCursor();\n const selectionEnd = index + insertedValueStr.length + 1;\n\n this.$refs.input.$el.setSelectionRange(selectionEnd, selectionEnd);\n } else {\n selectionEnd = selectionEnd + (newLength - currentLength);\n this.$refs.input.$el.setSelectionRange(selectionEnd, selectionEnd);\n }\n }\n\n this.$refs.input.$el.setAttribute('aria-valuenow', value);\n },\n concatValues(val1, val2) {\n if (val1 && val2) {\n let decimalCharIndex = val2.search(this._decimal);\n\n this._decimal.lastIndex = 0;\n\n if (this.suffixChar) {\n return decimalCharIndex !== -1 ? val1.replace(this.suffixChar, '').split(this._decimal)[0] + val2.replace(this.suffixChar, '').slice(decimalCharIndex) + this.suffixChar : val1;\n } else {\n return decimalCharIndex !== -1 ? val1.split(this._decimal)[0] + val2.slice(decimalCharIndex) : val1;\n }\n }\n\n return val1;\n },\n getDecimalLength(value) {\n if (value) {\n const valueSplit = value.split(this._decimal);\n\n if (valueSplit.length === 2) {\n return valueSplit[1].replace(this._suffix, '').trim().replace(/\\s/g, '').replace(this._currency, '').length;\n }\n }\n\n return 0;\n },\n updateModel(event, value) {\n this.writeValue(value, event);\n },\n onInputFocus(event) {\n this.focused = true;\n\n if (!this.disabled && !this.readonly && this.$refs.input.$el.value !== getSelection() && this.highlightOnFocus) {\n event.target.select();\n }\n\n this.$emit('focus', event);\n },\n onInputBlur(event) {\n this.focused = false;\n\n let input = event.target;\n let newValue = this.validateValue(this.parseValue(input.value));\n\n this.$emit('blur', { originalEvent: event, value: input.value });\n this.formField.onBlur?.(event);\n\n input.value = this.formatValue(newValue);\n input.setAttribute('aria-valuenow', newValue);\n this.updateModel(event, newValue);\n\n if (!this.disabled && !this.readonly && this.highlightOnFocus) {\n clearSelection();\n }\n },\n clearTimer() {\n if (this.timer) {\n clearTimeout(this.timer);\n }\n },\n maxBoundry() {\n return this.d_value >= this.max;\n },\n minBoundry() {\n return this.d_value <= this.min;\n }\n },\n computed: {\n upButtonListeners() {\n return {\n mousedown: (event) => this.onUpButtonMouseDown(event),\n mouseup: (event) => this.onUpButtonMouseUp(event),\n mouseleave: (event) => this.onUpButtonMouseLeave(event),\n keydown: (event) => this.onUpButtonKeyDown(event),\n keyup: (event) => this.onUpButtonKeyUp(event)\n };\n },\n downButtonListeners() {\n return {\n mousedown: (event) => this.onDownButtonMouseDown(event),\n mouseup: (event) => this.onDownButtonMouseUp(event),\n mouseleave: (event) => this.onDownButtonMouseLeave(event),\n keydown: (event) => this.onDownButtonKeyDown(event),\n keyup: (event) => this.onDownButtonKeyUp(event)\n };\n },\n formattedValue() {\n const val = !this.d_value && !this.allowEmpty ? 0 : this.d_value;\n\n return this.formatValue(val);\n },\n getFormatter() {\n return this.numberFormat;\n },\n dataP() {\n return cn({\n invalid: this.$invalid,\n fluid: this.$fluid,\n filled: this.$variant === 'filled',\n [this.size]: this.size,\n [this.buttonLayout]: this.showButtons && this.buttonLayout\n });\n }\n },\n components: {\n InputText,\n AngleUpIcon,\n AngleDownIcon\n }\n};\n</script>\n","<template>\n <span :class=\"cx('root')\" v-bind=\"ptmi('root')\" :data-p=\"dataP\">\n <InputText\n ref=\"input\"\n :id=\"inputId\"\n :name=\"$formName\"\n role=\"spinbutton\"\n :class=\"[cx('pcInputText'), inputClass]\"\n :style=\"inputStyle\"\n :defaultValue=\"formattedValue\"\n :aria-valuemin=\"min\"\n :aria-valuemax=\"max\"\n :aria-valuenow=\"d_value\"\n :inputmode=\"mode === 'decimal' && !minFractionDigits ? 'numeric' : 'decimal'\"\n :disabled=\"disabled\"\n :readonly=\"readonly\"\n :placeholder=\"placeholder\"\n :aria-labelledby=\"ariaLabelledby\"\n :aria-label=\"ariaLabel\"\n :required=\"required\"\n :size=\"size\"\n :invalid=\"invalid\"\n :variant=\"variant\"\n @input=\"onUserInput\"\n @keydown=\"onInputKeyDown\"\n @keypress=\"onInputKeyPress\"\n @paste=\"onPaste\"\n @click=\"onInputClick\"\n @focus=\"onInputFocus\"\n @blur=\"onInputBlur\"\n :pt=\"ptm('pcInputText')\"\n :unstyled=\"unstyled\"\n :data-p=\"dataP\"\n />\n <span v-if=\"showButtons && buttonLayout === 'stacked'\" :class=\"cx('buttonGroup')\" v-bind=\"ptm('buttonGroup')\" :data-p=\"dataP\">\n <slot name=\"incrementbutton\" :listeners=\"upButtonListeners\">\n <button :class=\"[cx('incrementButton'), incrementButtonClass]\" v-on=\"upButtonListeners\" :disabled=\"disabled\" :tabindex=\"-1\" aria-hidden=\"true\" type=\"button\" v-bind=\"ptm('incrementButton')\" :data-p=\"dataP\">\n <slot :name=\"$slots.incrementicon ? 'incrementicon' : 'incrementbuttonicon'\">\n <component :is=\"incrementIcon || incrementButtonIcon ? 'span' : 'AngleUpIcon'\" :class=\"[incrementIcon, incrementButtonIcon]\" v-bind=\"ptm('incrementIcon')\" data-pc-section=\"incrementicon\" />\n </slot>\n </button>\n </slot>\n <slot name=\"decrementbutton\" :listeners=\"downButtonListeners\">\n <button :class=\"[cx('decrementButton'), decrementButtonClass]\" v-on=\"downButtonListeners\" :disabled=\"disabled\" :tabindex=\"-1\" aria-hidden=\"true\" type=\"button\" v-bind=\"ptm('decrementButton')\" :data-p=\"dataP\">\n <slot :name=\"$slots.decrementicon ? 'decrementicon' : 'decrementbuttonicon'\">\n <component :is=\"decrementIcon || decrementButtonIcon ? 'span' : 'AngleDownIcon'\" :class=\"[decrementIcon, decrementButtonIcon]\" v-bind=\"ptm('decrementIcon')\" data-pc-section=\"decrementicon\" />\n </slot>\n </button>\n </slot>\n </span>\n <slot name=\"incrementbutton\" :listeners=\"upButtonListeners\">\n <button\n v-if=\"showButtons && buttonLayout !== 'stacked'\"\n :class=\"[cx('incrementButton'), incrementButtonClass]\"\n v-on=\"upButtonListeners\"\n :disabled=\"disabled\"\n :tabindex=\"-1\"\n aria-hidden=\"true\"\n type=\"button\"\n v-bind=\"ptm('incrementButton')\"\n :data-p=\"dataP\"\n >\n <slot :name=\"$slots.incrementicon ? 'incrementicon' : 'incrementbuttonicon'\">\n <component :is=\"incrementIcon || incrementButtonIcon ? 'span' : 'AngleUpIcon'\" :class=\"[incrementIcon, incrementButtonIcon]\" v-bind=\"ptm('incrementIcon')\" data-pc-section=\"incrementicon\" />\n </slot>\n </button>\n </slot>\n <slot name=\"decrementbutton\" :listeners=\"downButtonListeners\">\n <button\n v-if=\"showButtons && buttonLayout !== 'stacked'\"\n :class=\"[cx('decrementButton'), decrementButtonClass]\"\n v-on=\"downButtonListeners\"\n :disabled=\"disabled\"\n :tabindex=\"-1\"\n aria-hidden=\"true\"\n type=\"button\"\n v-bind=\"ptm('decrementButton')\"\n :data-p=\"dataP\"\n >\n <slot :name=\"$slots.decrementicon ? 'decrementicon' : 'decrementbuttonicon'\">\n <component :is=\"decrementIcon || decrementButtonIcon ? 'span' : 'AngleDownIcon'\" :class=\"[decrementIcon, decrementButtonIcon]\" v-bind=\"ptm('decrementIcon')\" data-pc-section=\"decrementicon\" />\n </slot>\n </button>\n </slot>\n <!-- TODO: decrementButton* and incrementButton* are deprecated since v4.0-->\n </span>\n</template>\n\n<script>\nimport { cn } from '@primeuix/utils';\nimport { clearSelection, getSelection } from '@primeuix/utils/dom';\nimport { isNotEmpty } from '@primeuix/utils/object';\nimport AngleDownIcon from '@primevue/icons/angledown';\nimport AngleUpIcon from '@primevue/icons/angleup';\nimport InputText from 'primevue/inputtext';\nimport BaseInputNumber from './BaseInputNumber.vue';\n\nexport default {\n name: 'InputNumber',\n extends: BaseInputNumber,\n inheritAttrs: false,\n emits: ['input', 'focus', 'blur'],\n inject: {\n $pcFluid: { default: null }\n },\n numberFormat: null,\n _numeral: null,\n _decimal: null,\n _group: null,\n _minusSign: null,\n _currency: null,\n _suffix: null,\n _prefix: null,\n _index: null,\n groupChar: '',\n isSpecialChar: null,\n prefixChar: null,\n suffixChar: null,\n timer: null,\n data() {\n return {\n // @deprecated\n d_modelValue: this.d_value,\n focused: false\n };\n },\n watch: {\n d_value(newValue) {\n // @deprecated since v4.2.0\n this.d_modelValue = newValue;\n },\n locale(newValue, oldValue) {\n this.updateConstructParser(newValue, oldValue);\n },\n localeMatcher(newValue, oldValue) {\n this.updateConstructParser(newValue, oldValue);\n },\n mode(newValue, oldValue) {\n this.updateConstructParser(newValue, oldValue);\n },\n currency(newValue, oldValue) {\n this.updateConstructParser(newValue, oldValue);\n },\n currencyDisplay(newValue, oldValue) {\n this.updateConstructParser(newValue, oldValue);\n },\n useGrouping(newValue, oldValue) {\n this.updateConstructParser(newValue, oldValue);\n },\n minFractionDigits(newValue, oldValue) {\n this.updateConstructParser(newValue, oldValue);\n },\n maxFractionDigits(newValue, oldValue) {\n this.updateConstructParser(newValue, oldValue);\n },\n suffix(newValue, oldValue) {\n this.updateConstructParser(newValue, oldValue);\n },\n prefix(newValue, oldValue) {\n this.updateConstructParser(newValue, oldValue);\n }\n },\n created() {\n this.constructParser();\n },\n methods: {\n getOptions() {\n return {\n localeMatcher: this.localeMatcher,\n style: this.mode,\n currency: this.currency,\n currencyDisplay: this.currencyDisplay,\n useGrouping: this.useGrouping,\n minimumFractionDigits: this.minFractionDigits,\n maximumFractionDigits: this.maxFractionDigits,\n roundingMode: this.roundingMode\n };\n },\n constructParser() {\n this.numberFormat = new Intl.NumberFormat(this.locale, this.getOptions());\n const numerals = [...new Intl.NumberFormat(this.locale, { useGrouping: false }).format(9876543210)].reverse();\n const index = new Map(numerals.map((d, i) => [d, i]));\n\n this._numeral = new RegExp(`[${numerals.join('')}]`, 'g');\n this._group = this.getGroupingExpression();\n this._minusSign = this.getMinusSignExpression();\n this._currency = this.getCurrencyExpression();\n this._decimal = this.getDecimalExpression();\n this._suffix = this.getSuffixExpression();\n this._prefix = this.getPrefixExpression();\n this._index = (d) => index.get(d);\n },\n updateConstructParser(newValue, oldValue) {\n if (newValue !== oldValue) {\n this.constructParser();\n }\n },\n escapeRegExp(text) {\n return text.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&');\n },\n getDecimalExpression() {\n const formatter = new Intl.NumberFormat(this.locale, { ...this.getOptions(), useGrouping: false });\n\n return new RegExp(`[${formatter.format(1.1).replace(this._currency, '').trim().replace(this._numeral, '')}]`, 'g');\n },\n getGroupingExpression() {\n const formatter = new Intl.NumberFormat(this.locale, { useGrouping: true });\n\n this.groupChar = formatter.format(1000000).trim().replace(this._numeral, '').charAt(0);\n\n return new RegExp(`[${this.groupChar}]`, 'g');\n },\n getMinusSignExpression() {\n const formatter = new Intl.NumberFormat(this.locale, { useGrouping: false });\n\n return new RegExp(`[${formatter.format(-1).trim().replace(this._numeral, '')}]`, 'g');\n },\n getCurrencyExpression() {\n if (this.currency) {\n const formatter = new Intl.NumberFormat(this.locale, { style: 'currency', currency: this.currency, currencyDisplay: this.currencyDisplay, minimumFractionDigits: 0, maximumFractionDigits: 0, roundingMode: this.roundingMode });\n\n return new RegExp(`[${formatter.format(1).replace(/\\s/g, '').replace(this._numeral, '').replace(this._group, '')}]`, 'g');\n }\n\n return new RegExp(`[]`, 'g');\n },\n getPrefixExpression() {\n if (this.prefix) {\n this.prefixChar = this.prefix;\n } else {\n const formatter = new Intl.NumberFormat(this.locale, { style: this.mode, currency: this.currency, currencyDisplay: this.currencyDisplay });\n\n this.prefixChar = formatter.format(1).split('1')[0];\n }\n\n return new RegExp(`${this.escapeRegExp(this.prefixChar || '')}`, 'g');\n },\n getSuffixExpression() {\n if (this.suffix) {\n this.suffixChar = this.suffix;\n } else {\n const formatter = new Intl.NumberFormat(this.locale, { style: this.mode, currency: this.currency, currencyDisplay: this.currencyDisplay, minimumFractionDigits: 0, maximumFractionDigits: 0, roundingMode: this.roundingMode });\n\n this.suffixChar = formatter.format(1).split('1')[1];\n }\n\n return new RegExp(`${this.escapeRegExp(this.suffixChar || '')}`, 'g');\n },\n formatValue(value) {\n if (value != null) {\n if (value === '-') {\n // Minus sign\n return value;\n }\n\n if (this.format) {\n let formatter = new Intl.NumberFormat(this.locale, this.getOptions());\n let formattedValue = formatter.format(value);\n\n if (this.prefix) {\n formattedValue = this.prefix + formattedValue;\n }\n\n if (this.suffix) {\n formattedValue = formattedValue + this.suffix;\n }\n\n return formattedValue;\n }\n\n return value.toString();\n }\n\n return '';\n },\n parseValue(text) {\n let filteredText = text\n .replace(this._suffix, '')\n .replace(this._prefix, '')\n .trim()\n .replace(/\\s/g, '')\n .replace(this._currency, '')\n .replace(this._group, '')\n .replace(this._minusSign, '-')\n .replace(this._decimal, '.')\n .replace(this._numeral, this._index);\n\n if (filteredText) {\n if (filteredText === '-')\n // Minus sign\n return filteredText;\n\n let parsedValue = +filteredText;\n\n return isNaN(parsedValue) ? null : parsedValue;\n }\n\n return null;\n },\n repeat(event, interval, dir) {\n if (this.readonly) {\n return;\n }\n\n let i = interval || 500;\n\n this.clearTimer();\n this.timer = setTimeout(() => {\n this.repeat(event, 40, dir);\n }, i);\n\n this.spin(event, dir);\n },\n addWithPrecision(base, increment) {\n const baseStr = base.toString();\n const stepStr = increment.toString();\n\n const baseDecimalPlaces = baseStr.includes('.') ? baseStr.split('.')[1].length : 0;\n const stepDecimalPlaces = stepStr.includes('.') ? stepStr.split('.')[1].length : 0;\n\n const maxDecimalPlaces = Math.max(baseDecimalPlaces, stepDecimalPlaces);\n const precision = Math.pow(10, maxDecimalPlaces);\n\n return Math.round((base + increment) * precision) / precision;\n },\n spin(event, dir) {\n if (this.$refs.input) {\n let step = this.step * dir;\n let currentValue = this.parseValue(this.$refs.input.$el.value) || 0;\n let newValue = this.validateValue(this.addWithPrecision(currentValue, step));\n\n this.updateInput(newValue, null, 'spin');\n this.updateModel(event, newValue);\n\n this.handleOnInput(event, currentValue, newValue);\n }\n },\n onUpButtonMouseDown(event) {\n if (!this.disabled) {\n this.$refs.input.$el.focus();\n this.repeat(event, null, 1);\n event.preventDefault();\n }\n },\n onUpButtonMouseUp() {\n if (!this.disabled) {\n this.clearTimer();\n }\n },\n onUpButtonMouseLeave() {\n if (!this.disabled) {\n this.clearTimer();\n }\n },\n onUpButtonKeyUp() {\n if (!this.disabled) {\n this.clearTimer();\n }\n },\n onUpButtonKeyDown(event) {\n if (event.code === 'Space' || event.code === 'Enter' || event.code === 'NumpadEnter') {\n this.repeat(event, null, 1);\n }\n },\n onDownButtonMouseDown(event) {\n if (!this.disabled) {\n this.$refs.input.$el.focus();\n this.repeat(event, null, -1);\n event.preventDefault();\n }\n },\n onDownButtonMouseUp() {\n if (!this.disabled) {\n this.clearTimer();\n }\n },\n onDownButtonMouseLeave() {\n if (!this.disabled) {\n this.clearTimer();\n }\n },\n onDownButtonKeyUp() {\n if (!this.disabled) {\n this.clearTimer();\n }\n },\n onDownButtonKeyDown(event) {\n if (event.code === 'Space' || event.code === 'Enter' || event.code === 'NumpadEnter') {\n this.repeat(event, null, -1);\n }\n },\n onUserInput() {\n if (this.isSpecialChar) {\n this.$refs.input.$el.value = this.lastValue;\n }\n\n this.isSpecialChar = false;\n },\n onInputKeyDown(event) {\n if (this.readonly) {\n return;\n }\n\n // block composition input\n if (event.isComposing) {\n return;\n }\n\n if (event.altKey || event.ctrlKey || event.metaKey) {\n this.isSpecialChar = true;\n this.lastValue = this.$refs.input.$el.value;\n\n return;\n }\n\n this.lastValue = event.target.value;\n\n let selectionStart = event.target.selectionStart;\n let selectionEnd = event.target.selectionEnd;\n let selectionRange = selectionEnd - selectionStart;\n let inputValue = event.target.value;\n let newValueStr = null;\n const code = event.code || event.key;\n\n switch (code) {\n case 'ArrowUp':\n this.spin(event, 1);\n event.preventDefault();\n break;\n\n case 'ArrowDown':\n this.spin(event, -1);\n event.preventDefault();\n break;\n\n case 'ArrowLeft':\n if (selectionRange > 1) {\n const cursorPosition = this.isNumeralChar(inputValue.charAt(selectionStart)) ? selectionStart + 1 : selectionStart + 2;\n\n this.$refs.input.$el.setSelectionRange(cursorPosition, cursorPosition);\n } else if (!this.isNumeralChar(inputValue.charAt(selectionStart - 1))) {\n event.preventDefault();\n }\n\n break;\n\n case 'ArrowRight':\n if (selectionRange > 1) {\n const cursorPosition = selectionEnd - 1;\n\n this.$refs.input.$el.setSelectionRange(cursorPosition, cursorPosition);\n } else if (!this.isNumeralChar(inputValue.charAt(selectionStart))) {\n event.preventDefault();\n }\n\n break;\n\n case 'Tab':\n case 'Enter':\n case 'NumpadEnter':\n newValueStr = this.validateValue(this.parseValue(inputValue));\n this.$refs.input.$el.value = this.formatValue(newValueStr);\n this.$refs.input.$el.setAttribute('aria-valuenow', newValueStr);\n this.updateModel(event, newValueStr);\n break;\n\n case 'Backspace': {\n event.preventDefault();\n\n if (selectionStart === selectionEnd) {\n if (selectionStart >= inputValue.length && this.suffixChar !== null) {\n selectionStart = inputValue.length - this.suffixChar.length;\n this.$refs.input.$el.setSelectionRange(selectionStart, selectionStart);\n }\n\n const deleteChar = inputValue.charAt(selectionStart - 1);\n const { decimalCharIndex, decimalCharIndexWithoutPrefix } = this.getDecimalCharIndexes(inputValue);\n\n if (this.isNumeralChar(deleteChar)) {\n const decimalLength = this.getDecimalLength(inputValue);\n\n if (this._group.test(deleteChar)) {\n this._group.lastIndex = 0;\n newValueStr = inputValue.slice(0, selectionStart - 2) + inputValue.slice(selectionStart - 1);\n } else if (this._decimal.test(deleteChar)) {\n this._decimal.lastIndex = 0;\n\n if (decimalLength) {\n this.$refs.input.$el.setSelectionRange(selectionStart - 1, selectionStart - 1);\n } else {\n newValueStr = inputValue.slice(0, selectionStart - 1) + inputValue.slice(selectionStart);\n }\n } else if (decimalCharIndex > 0 && selectionStart > decimalCharIndex) {\n const insertedText = this.isDecimalMode() && (this.minFractionDigits || 0) < decimalLength ? '' : '0';\n\n newValueStr = inputValue.slice(0, selectionStart - 1) + insertedText + inputValue.slice(selectionStart);\n } else if (decimalCharIndexWithoutPrefix === 1) {\n newValueStr = inputValue.slice(0, selectionStart - 1) + '0' + inputValue.slice(selectionStart);\n newValueStr = this.parseValue(newValueStr) > 0 ? newValueStr : '';\n } else {\n newValueStr = inputValue.slice(0, selectionStart - 1) + inputValue.slice(selectionStart);\n }\n }\n\n this.updateValue(event, newValueStr, null, 'delete-single');\n } else {\n newValueStr = this.deleteRange(inputValue, selectionStart, selectionEnd);\n this.updateValue(event, newValueStr, null, 'delete-range');\n }\n\n break;\n }\n\n case 'Delete':\n event.preventDefault();\n\n if (selectionStart === selectionEnd) {\n const deleteChar = inputValue.charAt(selectionStart);\n const { decimalCharIndex, decimalCharIndexWithoutPrefix } = this.getDecimalCharIndexes(inputValue);\n\n if (this.isNumeralChar(deleteChar)) {\n const decimalLength = this.getDecimalLength(inputValue);\n\n if (this._group.test(deleteChar)) {\n this._group.lastIndex = 0;\n newValueStr = inputValue.slice(0, selectionStart) + inputValue.slice(selectionStart + 2);\n } else if (this._decimal.test(deleteChar)) {\n this._decimal.lastIndex = 0;\n\n if (decimalLength) {\n this.$refs.input.$el.setSelectionRange(selectionStart + 1, selectionStart + 1);\n } else {\n newValueStr = inputValue.slice(0, selectionStart) + inputValue.slice(selectionStart + 1);\n }\n } else if (decimalCharIndex > 0 && selectionStart > decimalCharIndex) {\n const insertedText = this.isDecimalMode() && (this.minFractionDigits || 0) < decimalLength ? '' : '0';\n\n newValueStr = inputValue.slice(0, selectionStart) + insertedText + inputValue.slice(selectionStart + 1);\n } else if (decimalCharIndexWithoutPrefix === 1) {\n newValueStr = inputValue.slice(0, selectionStart) + '0' + inputValue.slice(selectionStart + 1);\n newValueStr = this.parseValue(newValueStr) > 0 ? newValueStr : '';\n } else {\n newValueStr = inputValue.slice(0, selectionStart) + inputValue.slice(selectionStart + 1);\n }\n }\n\n this.updateValue(event, newValueStr, null, 'delete-back-single');\n } else {\n newValueStr = this.deleteRange(inputValue, selectionStart, selectionEnd);\n this.updateValue(event, newValueStr, null, 'delete-range');\n }\n\n break;\n\n case 'Home':\n event.preventDefault();\n\n if (isNotEmpty(this.min)) {\n this.updateModel(event, this.min);\n }\n\n break;\n\n case 'End':\n event.preventDefault();\n\n if (isNotEmpty(this.max)) {\n this.updateModel(event, this.max);\n }\n\n break;\n\n default:\n break;\n }\n },\n onInputKeyPress(event) {\n if (this.readonly) {\n return;\n }\n\n let char = event.key;\n let isDecimalSign = this.isDecimalSign(char);\n const isMinusSign = this.isMinusSign(char);\n\n if (event.code !== 'Enter') {\n event.preventDefault();\n }\n\n if ((Number(char) >= 0 && Number(char) <= 9) || isMinusSign || isDecimalSign) {\n this.insert(event, char, { isDecimalSign, isMinusSign });\n }\n },\n onPaste(event) {\n if (this.readonly) {\n return;\n }\n\n event.preventDefault();\n let data = (event.clipboardData || window['clipboardData']).getData('Text');\n\n if (data) {\n let filteredData = this.parseValue(data);\n\n if (filteredData != null) {\n this.insert(event, filteredData.toString());\n }\n }\n },\n allowMinusSign() {\n return this.min === null || this.min < 0;\n },\n isMinusSign(char) {\n if (this._minusSign.test(char) || char === '-') {\n this._minusSign.lastIndex = 0;\n\n return true;\n }\n\n return false;\n },\n isDecimalSign(char) {\n if ((this.locale?.includes('fr') && ['.', ','].includes(char)) || this._decimal.test(char)) {\n this._decimal.lastIndex = 0;\n\n return true;\n }\n\n return false;\n },\n isDecimalMode() {\n return this.mode === 'decimal';\n },\n getDecimalCharIndexes(val) {\n let decimalCharIndex = val.search(this._decimal);\n\n this._decimal.lastIndex = 0;\n\n const filteredVal = val.replace(this._prefix, '').trim().replace(/\\s/g, '').replace(this._currency, '');\n const decimalCharIndexWithoutPrefix = filteredVal.search(this._decimal);\n\n this._decimal.lastIndex = 0;\n\n return { decimalCharIndex, decimalCharIndexWithoutPrefix };\n },\n getCharIndexes(val) {\n const decimalCharIndex = val.search(this._decimal);\n\n this._decimal.lastIndex = 0;\n const minusCharIndex = val.search(this._minusSign);\n\n this._minusSign.lastIndex = 0;\n const suffixCharIndex = val.search(this._suffix);\n\n this._suffix.lastIndex = 0;\n const currencyCharIndex = val.search(this._currency);\n\n this._currency.lastIndex = 0;\n\n return { decimalCharIndex, minusCharIndex, suffixCharIndex, currencyCharIndex };\n },\n insert(event, text, sign = { isDecimalSign: false, isMinusSign: false }) {\n const minusCharIndexOnText = text.search(this._minusSign);\n\n this._minusSign.lastIndex = 0;\n\n if (!this.allowMinusSign() && minusCharIndexOnText !== -1) {\n return;\n }\n\n const selectionStart = this.$refs.input.$el.selectionStart;\n const selectionEnd = this.$refs.input.$el.selectionEnd;\n let inputValue = this.$refs.input.$el.value.trim();\n const { decimalCharIndex, minusCharIndex, suffixCharIndex, currencyCharIndex } = this.getCharIndexes(inputValue);\n let newValueStr;\n\n if (sign.isMinusSign) {\n const isNewMinusSign = minusCharIndex === -1;\n\n if (selectionStart === 0 || selectionStart === currencyCharIndex + 1) {\n newValueStr = inputValue;\n\n if (isNewMinusSign || selectionEnd !== 0) {\n newValueStr = this.insertText(inputValue, text, 0, selectionEnd);\n }\n\n this.updateValue(event, newValueStr, text, 'insert');\n }\n } else if (sign.isDecimalSign) {\n if (decimalCharIndex > 0 && selectionStart === decimalCharIndex) {\n this.updateValue(event, inputValue, text, 'insert');\n } else if (decimalCharIndex > selectionStart && decimalCharIndex < selectionEnd) {\n newValueStr = this.insertText(inputValue, text, selectionStart, selectionEnd);\n this.updateValue(event, newValueStr, text, 'insert');\n } else if (decimalCharIndex === -1 && this.maxFractionDigits) {\n newValueStr = this.insertText(inputValue, text, selectionStart, selectionEnd);\n this.updateValue(event, newValueStr, text, 'insert');\n }\n } else {\n const maxFractionDigits = this.numberFormat.resolvedOptions().maximumFractionDigits;\n const operation = selectionStart !== selectionEnd ? 'range-insert' : 'insert';\n\n if (decimalCharIndex > 0 && selectionStart > decimalCharIndex) {\n if (selectionStart + text.length - (decimalCharIndex + 1) <= maxFractionDigits) {\n const charIndex = currencyCharIndex >= selectionStart ? currencyCharIndex - 1 : suffixCharIndex >= selectionStart ? suffixCharIndex : inputValue.length;\n\n newValueStr = inputValue.slice(0, selectionStart) + text + inputValue.slice(selectionStart + text.length, charIndex) + inputValue.slice(charIndex);\n this.updateValue(event, newValueStr, text, operation);\n }\n } else {\n newValueStr = this.insertText(inputValue, text, selectionStart, selectionEnd);\n this.updateValue(event, newValueStr, text, operation);\n }\n }\n },\n insertText(value, text, start, end) {\n let textSplit = text === '.' ? text : text.split('.');\n\n if (textSplit.length === 2) {\n const decimalCharIndex = value.slice(start, end).search(this._decimal);\n\n this._decimal.lastIndex = 0;\n\n return decimalCharIndex > 0 ? value.slice(0, start) + this.formatValue(text) + value.slice(end) : this.formatValue(text) || value;\n } else if (end - start === value.length) {\n return this.formatValue(text);\n } else if (start === 0) {\n return text + value.slice(end);\n } else if (end === value.length) {\n return value.slice(0, start) + text;\n } else {\n return value.slice(0, start) + text + value.slice(end);\n }\n },\n deleteRange(value, start, end) {\n let newValueStr;\n\n if (end - start === value.length) newValueStr = '';\n else if (start === 0) newValueStr = value.slice(end);\n else if (end === value.length) newValueStr = value.slice(0, start);\n else newValueStr = value.slice(0, start) + value.slice(end);\n\n return newValueStr;\n },\n initCursor() {\n let selectionStart = this.$refs.input.$el.selectionStart;\n let inputValue = this.$refs.input.$el.value;\n let valueLength = inputValue.length;\n let index = null;\n\n // remove prefix\n let prefixLength = (this.prefixChar || '').length;\n\n inputValue = inputValue.replace(this._prefix, '');\n selectionStart = selectionStart - prefixLength;\n\n let char = inputValue.charAt(selectionStart);\n\n if (this.isNumeralChar(char)) {\n return selectionStart + prefixLength;\n }\n\n //left\n let i = selectionStart - 1;\n\n while (i >= 0) {\n char = inputValue.charAt(i);\n\n if (this.isNumeralChar(char)) {\n index = i + prefixLength;\n break;\n } else {\n i--;\n }\n }\n\n if (index !== null) {\n this.$refs.input.$el.setSelectionRange(index + 1, index + 1);\n } else {\n i = selectionStart;\n\n while (i < valueLength) {\n char = inputValue.charAt(i);\n\n if (this.isNumeralChar(char)) {\n index = i + prefixLength;\n break;\n } else {\n i++;\n }\n }\n\n if (index !== null) {\n this.$refs.input.$el.setSelectionRange(index, index);\n }\n }\n\n return index || 0;\n },\n onInputClick() {\n const currentValue = this.$refs.input.$el.value;\n\n if (!this.readonly && currentValue !== getSelection()) {\n this.initCursor();\n }\n },\n isNumeralChar(char) {\n if (char.length === 1 && (this._numeral.test(char) || this._decimal.test(char) || this._group.test(char) || this._minusSign.test(char))) {\n this.resetRegex();\n\n return true;\n }\n\n return false;\n },\n resetRegex() {\n this._numeral.lastIndex = 0;\n this._decimal.lastIndex = 0;\n this._group.lastIndex = 0;\n this._minusSign.lastIndex = 0;\n },\n updateValue(event, valueStr, insertedValueStr, operation) {\n let currentValue = this.$refs.input.$el.value;\n let newValue = null;\n\n if (valueStr != null) {\n newValue = this.parseValue(valueStr);\n newValue = !newValue && !this.allowEmpty ? 0 : newValue;\n this.updateInput(newValue, insertedValueStr, operation, valueStr);\n\n this.handleOnInput(event, currentValue, newValue);\n }\n },\n handleOnInput(event, currentValue, newValue) {\n if (this.isValueChanged(currentValue, newValue)) {\n this.$emit('input', { originalEvent: event, value: newValue, formattedValue: currentValue });\n this.formField.onInput?.({ originalEvent: event, value: newValue });\n }\n },\n isValueChanged(currentValue, newValue) {\n if (newValue === null && currentValue !== null) {\n return true;\n }\n\n if (newValue != null) {\n let parsedCurrentValue = typeof currentValue === 'string' ? this.parseValue(currentValue) : currentValue;\n\n return newValue !== parsedCurrentValue;\n }\n\n return false;\n },\n validateValue(value) {\n if (value === '-' || value == null) {\n return null;\n }\n\n if (this.min != null && value < this.min) {\n return this.min;\n }\n\n if (this.max != null && value > this.max) {\n return this.max;\n }\n\n return value;\n },\n updateInput(value, insertedValueStr, operation, valueStr) {\n insertedValueStr = insertedValueStr || '';\n\n let inputValue = this.$refs.input.$el.value;\n let newValue = this.formatValue(value);\n let currentLength = inputValue.length;\n\n if (newValue !== valueStr) {\n newValue = this.concatValues(newValue, valueStr);\n }\n\n if (currentLength === 0) {\n this.$refs.input.$el.value = newValue;\n this.$refs.input.$el.setSelectionRange(0, 0);\n const index = this.initCursor();\n const selectionEnd = index + insertedValueStr.length;\n\n this.$refs.input.$el.setSelectionRange(selectionEnd, selectionEnd);\n } else {\n let selectionStart = this.$refs.input.$el.selectionStart;\n let selectionEnd = this.$refs.input.$el.selectionEnd;\n\n this.$refs.input.$el.value = newValue;\n let newLength = newValue.length;\n\n if (operation === 'range-insert') {\n const startValue = this.parseValue((inputValue || '').slice(0, selectionStart));\n const startValueStr = startValue !== null ? startValue.toString() : '';\n const startExpr = startValueStr.split('').join(`(${this.groupChar})?`);\n const sRegex = new RegExp(startExpr, 'g');\n\n sRegex.test(newValue);\n\n const tExpr = insertedValueStr.split('').join(`(${this.groupChar})?`);\n const tRegex = new RegExp(tExpr, 'g');\n\n tRegex.test(newValue.slice(sRegex.lastIndex));\n\n selectionEnd = sRegex.lastIndex + tRegex.lastIndex;\n this.$refs.input.$el.setSelectionRange(selectionEnd, selectionEnd);\n } else if (newLength === currentLength) {\n if (operation === 'insert' || operation === 'delete-back-single') {\n this.$refs.input.$el.setSelectionRange(selectionEnd + 1, selectionEnd + 1);\n } else if (operation === 'delete-single') {\n this.$refs.input.$el.setSelectionRange(selectionEnd - 1, selectionEnd - 1);\n } else if (operation === 'delete-range' || operation === 'spin') {\n this.$refs.input.$el.setSelectionRange(selectionEnd, selectionEnd);\n }\n } else if (operation === 'delete-back-single') {\n let prevChar = inputValue.charAt(selectionEnd - 1);\n let nextChar = inputValue.charAt(selectionEnd);\n let diff = currentLength - newLength;\n let isGroupChar = this._group.test(nextChar);\n\n if (isGroupChar && diff === 1) {\n selectionEnd += 1;\n } else if (!isGroupChar && this.isNumeralChar(prevChar)) {\n selectionEnd += -1 * diff + 1;\n }\n\n this._group.lastIndex = 0;\n this.$refs.input.$el.setSelectionRange(selectionEnd, selectionEnd);\n } else if (inputValue === '-' && operation === 'insert') {\n this.$refs.input.$el.setSelectionRange(0, 0);\n const index = this.initCursor();\n const selectionEnd = index + insertedValueStr.length + 1;\n\n this.$refs.input.$el.setSelectionRange(selectionEnd, selectionEnd);\n } else {\n selectionEnd = selectionEnd + (newLength - currentLength);\n this.$refs.input.$el.setSelectionRange(selectionEnd, selectionEnd);\n }\n }\n\n this.$refs.input.$el.setAttribute('aria-valuenow', value);\n },\n concatValues(val1, val2) {\n if (val1 && val2) {\n let decimalCharIndex = val2.search(this._decimal);\n\n this._decimal.lastIndex = 0;\n\n if (this.suffixChar) {\n return decimalCharIndex !== -1 ? val1.replace(this.suffixChar, '').split(this._decimal)[0] + val2.replace(this.suffixChar, '').slice(decimalCharIndex) + this.suffixChar : val1;\n } else {\n return decimalCharIndex !== -1 ? val1.split(this._decimal)[0] + val2.slice(decimalCharIndex) : val1;\n }\n }\n\n return val1;\n },\n getDecimalLength(value) {\n if (value) {\n const valueSplit = value.split(this._decimal);\n\n if (valueSplit.length === 2) {\n return valueSplit[1].replace(this._suffix, '').trim().replace(/\\s/g, '').replace(this._currency, '').length;\n }\n }\n\n return 0;\n },\n updateModel(event, value) {\n this.writeValue(value, event);\n },\n onInputFocus(event) {\n this.focused = true;\n\n if (!this.disabled && !this.readonly && this.$refs.input.$el.value !== getSelection() && this.highlightOnFocus) {\n event.target.select();\n }\n\n this.$emit('focus', event);\n },\n onInputBlur(event) {\n this.focused = false;\n\n let input = event.target;\n let newValue = this.validateValue(this.parseValue(input.value));\n\n this.$emit('blur', { originalEvent: event, value: input.value });\n this.formField.onBlur?.(event);\n\n input.value = this.formatValue(newValue);\n input.setAttribute('aria-valuenow', newValue);\n this.updateModel(event, newValue);\n\n if (!this.disabled && !this.readonly && this.highlightOnFocus) {\n clearSelection();\n }\n },\n clearTimer() {\n if (this.timer) {\n clearTimeout(this.timer);\n }\n },\n maxBoundry() {\n return this.d_value >= this.max;\n },\n minBoundry() {\n return this.d_value <= this.min;\n }\n },\n computed: {\n upButtonListeners() {\n return {\n mousedown: (event) => this.onUpButtonMouseDown(event),\n mouseup: (event) => this.onUpButtonMouseUp(event),\n mouseleave: (event) => this.onUpButtonMouseLeave(event),\n keydown: (event) => this.onUpButtonKeyDown(event),\n keyup: (event) => this.onUpButtonKeyUp(event)\n };\n },\n downButtonListeners() {\n return {\n mousedown: (event) => this.onDownButtonMouseDown(event),\n mouseup: (event) => this.onDownButtonMouseUp(event),\n mouseleave: (event) => this.onDownButtonMouseLeave(event),\n keydown: (event) => this.onDownButtonKeyDown(event),\n keyup: (event) => this.onDownButtonKeyUp(event)\n };\n },\n formattedValue() {\n const val = !this.d_value && !this.allowEmpty ? 0 : this.d_value;\n\n return this.formatValue(val);\n },\n getFormatter() {\n return this.numberFormat;\n },\n dataP() {\n return cn({\n invalid: this.$invalid,\n fluid: this.$fluid,\n filled: this.$variant === 'filled',\n [this.size]: this.size,\n [this.buttonLayout]: this.showButtons && this.buttonLayout\n });\n }\n },\n components: {\n InputText,\n AngleUpIcon,\n AngleDownIcon\n }\n};\n</script>\n"],"names":["name","BaseInput","props","format","type","Boolean","showButtons","buttonLayout","String","incrementButtonClass","decrementButtonClass","incrementButtonIcon","undefined","incrementIcon","decrementButtonIcon","decrementIcon","locale","localeMatcher","mode","prefix","suffix","currency","currencyDisplay","useGrouping","minFractionDigits","Number","maxFractionDigits","roundingMode","validator","value","includes","min","max","step","allowEmpty","highlightOnFocus","readonly","placeholder","inputId","inputClass","Object","inputStyle","ariaLabelledby","ariaLabel","required","style","InputNumberStyle","provide","$pcInputNumber","$parentInstance","BaseInputNumber","inheritAttrs","emits","inject","$pcFluid","numberFormat","_numeral","_decimal","_group","_minusSign","_currency","_suffix","_prefix","_index","groupChar","isSpecialChar","prefixChar","suffixChar","timer","data","d_modelValue","d_value","focused","watch","newValue","oldValue","updateConstructParser","created","constructParser","methods","getOptions","minimumFractionDigits","maximumFractionDigits","Intl","NumberFormat","numerals","_toConsumableArray","reverse","index","Map","map","d","i","RegExp","concat","join","getGroupingExpression","getMinusSignExpression","getCurrencyExpression","getDecimalExpression","getSuffixExpression","getPrefixExpression","get","escapeRegExp","text","replace","formatter","_objectSpread","trim","charAt","split","formatValue","formattedValue","toString","parseValue","filteredText","parsedValue","isNaN","repeat","event","interval","dir","_this","clearTimer","setTimeout","spin","addWithPrecision","base","increment","baseStr","stepStr","baseDecimalPlaces","length","stepDecimalPlaces","maxDecimalPlaces","Math","precision","pow","round","$refs","input","currentValue","$el","validateValue","updateInput","updateModel","handleOnInput","onUpButtonMouseDown","disabled","focus","preventDefault","onUpButtonMouseUp","onUpButtonMouseLeave","onUpButtonKeyUp","onUpButtonKeyDown","code","onDownButtonMouseDown","onDownButtonMouseUp","onDownButtonMouseLeave","onDownButtonKeyUp","onDownButtonKeyDown","onUserInput","lastValue","onInputKeyDown","isComposing","altKey","ctrlKey","metaKey","target","selectionStart","selectionEnd","selectionRange","inputValue","newValueStr","key","cursorPosition","isNumeralChar","setSelectionRange","setAttribute","deleteChar","_this$getDecimalCharI","getDecimalCharIndexes","decimalCharIndex","decimalCharIndexWithoutPrefix","decimalLength","getDecimalLength","test","lastIndex","slice","insertedText","isDecimalMode","updateValue","deleteRange","_this$getDecimalCharI2","isNotEmpty","onInputKeyPress","char","isDecimalSign","isMinusSign","insert","onPaste","clipboardData","window","getData","filteredData","allowMinusSign","_this$locale","val","search","filteredVal","getCharIndexes","minusCharIndex","suffixCharIndex","currencyCharIndex","sign","arguments","minusCharIndexOnText","_this$getCharIndexes","isNewMinusSign","insertText","resolvedOptions","operation","charIndex","start","end","textSplit","initCursor","valueLength","prefixLength","onInputClick","getSelection","resetRegex","valueStr","insertedValueStr","isValueChanged","_this$formField$onInp","_this$formField","$emit","originalEvent","formField","onInput","call","parsedCurrentValue","currentLength","concatValues","newLength","startValue","startValueStr","startExpr","sRegex","tExpr","tRegex","prevChar","nextChar","diff","isGroupChar","val1","val2","valueSplit","writeValue","onInputFocus","select","onInputBlur","_this$formField$onBlu","_this$formField2","onBlur","clearSelection","clearTimeout","maxBoundry","minBoundry","computed","upButtonListeners","_this2","mousedown","mouseup","mouseleave","keydown","keyup","downButtonListeners","_this3","getFormatter","dataP","cn","_defineProperty","invalid","$invalid","fluid","$fluid","filled","$variant","size","components","InputText","AngleUpIcon","AngleDownIcon","_openBlock","_createElementBlock","_mergeProps","_ctx","cx","ptmi","$options","_createVNode","_component_InputText","ref","id","$formName","role","_normalizeClass","defaultValue","inputmode","variant","onKeydown","onKeypress","onClick","onFocus","pt","ptm","unstyled","_renderSlot","$slots","listeners","_createElementVNode","_toHandlers","tabindex","incrementicon","_createBlock","_resolveDynamicComponent","decrementicon"],"mappings":"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"}